Organization-level repository for shared GitHub Actions workflows and CI/CD infrastructure used across all ThunderPropagator repositories.
This repository centralizes reusable GitHub Actions workflows to avoid duplication across:
- ThunderPropagator.BuildingBlocks
- ThunderPropagator.Clients.DotNet
- ThunderPropagator.Feeviders
- ThunderPropagator.Channels
- ThunderPropagator.Web
.github/
workflows/
reusable-beta-ci.yml # Called on develop branch pushes
reusable-release-ci.yml # Called on release/* branch pushes
scripts/
show-version.ps1 # Display git branch, tag, and version
update-version.ps1 # Bump version in Directory.Build.props or .csproj
generate-release-notes.ps1 # Generate release notes from commits
pack-solution.ps1 # Build and pack NuGet packages
publish-packages.ps1 # Publish packages to NuGet.org
(other helper scripts)
prompts/
release-notes.prompt.md # AI-driven changelog generation
repo-docs.prompt.md # AI-driven documentation generation
repo-tests.prompt.md # AI-driven test generation
Triggered on: develop branch push
Purpose: Build, bump beta version, pack, and upload artifacts
Inputs:
solution-path(string, default:**/*.sln*) — Path to.sln/.slnxor project globdotnet-versions(string, default:8.0.x,9.0.x,10.0.x) — .NET SDK versions
Secrets:
gh-token(required) — GitHub token for commits and tagging
Jobs:
- bump-beta — Increments patch version with
-beta.Nsuffix - pack — Builds and packs across matrix:
[Debug/Release] × [AnyCpu/x86/x64/ARM64]
Artifacts:
pkg-{Configuration}{Suffix}— NuGet packagessymbols-{Configuration}{Suffix}— PDB symbol files (if present)
Triggered on: release/** branch push
Purpose: Finalize version, create GitHub Release, pack, and publish to NuGet.org
Inputs:
solution-path(string, default:**/*.sln*) — Path to.sln/.slnxor project globdotnet-versions(string, default:8.0.x,9.0.x,10.0.x) — .NET SDK versions
Secrets:
gh-token(required) — GitHub token for releases and taggingnuget-api-key(optional) — NuGet.org API key for publishing
Jobs:
- finalize-and-tag — Strips
-beta.*suffix, creates tag and GitHub Release - sync-develop-version — Syncs finalized version back to
developbranch - pack — Builds and packs across matrix (same as beta CI)
- publish — Publishes Release AnyCPU packages to NuGet.org (if secret provided)
- cleanup — Deletes all run artifacts after publish
cp -r .github/scripts <target-repo>/.github/scriptsname: CI
on:
push:
branches: [develop, release/**]
workflow_dispatch: {}
jobs:
beta-ci:
if: github.ref == 'refs/heads/develop'
uses: KiarashMinoo/.github/.github/workflows/reusable-beta-ci.yml@main
with:
solution-path: 'ThunderPropagator.BuildingBlocks.sln'
secrets:
gh-token: ${{ secrets.GITHUB_TOKEN }}
release-ci:
if: startsWith(github.ref, 'refs/heads/release/')
uses: KiarashMinoo/.github/.github/workflows/reusable-release-ci.yml@main
with:
solution-path: 'ThunderPropagator.BuildingBlocks.sln'
secrets:
gh-token: ${{ secrets.GITHUB_TOKEN }}
nuget-api-key: ${{ secrets.NUGET_API_KEY }}If your repo uses centralized versioning, add Directory.Build.props at the root:
<Project>
<PropertyGroup>
<Version>1.0.0-beta.1</Version>
<TargetFramework>net9.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<!-- ... other shared properties ... -->
</PropertyGroup>
</Project>If no Directory.Build.props exists, the workflows will automatically update version directly in .csproj files.
In target repo Settings > Secrets and variables > Actions:
NUGET_API_KEY— Your NuGet.org API key (optional, for publishing)
Directory.Build.props approach (recommended):
- Single
<Version>node inDirectory.Build.propsat repo root - All
.csprojfiles inherit version automatically - Workflows update this file on beta/release builds
Direct .csproj approach (fallback):
- No
Directory.Build.propsfile - Workflows search for
.csprojfiles and update<Version>directly - Specify
-UpdateCsprojflag in version script
-
Develop branch → bumps patch + adds
-beta.N:1.0.0→1.0.1-beta.11.0.1-beta.1→1.0.1-beta.2
-
Release branch → strips prerelease, creates stable tag:
1.0.1-beta.5→1.0.1(tag:v1.0.1)
-
Sync back to develop → versions develop with stable version:
- Develop gets
1.0.1after release
- Develop gets
The show-version.ps1 script displays:
- Current git branch
- Current git tag (if on a tag)
- Version from
Directory.Build.propsor first.csprojfile
Run manually:
pwsh ./.github/scripts/show-version.ps1Workflows call this automatically before packing.
All repositories must copy these scripts from .github/scripts/:
| Script | Purpose |
|---|---|
update-version.ps1 |
Bump version, handle Directory.Build.props or .csproj |
generate-release-notes.ps1 |
Generate release notes from commit messages |
pack-solution.ps1 |
Build and pack NuGet packages |
publish-packages.ps1 |
Publish packages to NuGet.org |
show-version.ps1 |
Display branch, tag, and version |
| Variable | Source | Usage |
|---|---|---|
GH_TOKEN |
Secret gh-token |
Git operations, releasing |
NUGET_API_KEY |
Secret nuget-api-key |
Publishing to NuGet.org |
REL_NOTES |
Generated by script | Release notes in beta packing |
This repository includes reusable GitHub Copilot prompts for autonomous code generation tasks. Copy the prompts folder to your target repository and use them with Copilot Chat. Each prompt starts by detecting the target repo's stack(s) (.NET, Node/TypeScript, Python, Go, Java/Kotlin, Rust) and applies the matching rules — .NET remains the most fully specified lane, but the prompts are not .NET-only. Across every stack, only free/open-source libraries with no paid tier are selected (e.g. NSubstitute instead of Moq, FluentAssertions pinned below its commercial-licensed v8).
Purpose: Automatically generate or update CHANGELOG.md from git commits
Features:
- Per-branch incremental tracking (resumes from last processed commit)
- Release mode: generates from previous release tag to current tag
- Conventional Commit grouping (feat, fix, perf, refactor, etc.)
- State management via
.github/changelog-state.json
Purpose: Automatically generate rich documentation structure under /docs
Features:
- Deep recursion: creates
/docs/<path>/README.mdfor every folder - Auto-generates Docs Catalog in root README
- Detects the repo's stack(s) and extracts package metadata accordingly (NuGet from
.csproj, npm frompackage.json, PyPI frompyproject.toml, pkg.go.dev fromgo.mod, Maven frompom.xml, crates.io fromCargo.toml) - Mermaid diagrams per folder
- Idempotent (safe to run multiple times)
Purpose: Automatically generate unit and architecture tests
Features:
- Reuses or creates test projects/directories per the target stack's own convention (
Tests/UnitTests+Tests/ArchTestsfor .NET,tests//__tests__for others) - Per-stack framework: xUnit+NSubstitute+FluentAssertions(7.x)+NetArchTest (.NET), Vitest+dependency-cruiser (Node/TS), pytest+unittest.mock+import-linter (Python), stdlib testing+testify (Go), JUnit5+Mockito+AssertJ+ArchUnit (Java/Kotlin)
- Every stack is restricted to free/OSS libraries with no paid tier — Moq and FluentAssertions ≥ 8.0 are explicitly excluded
- Never modifies production code
Copy prompts to your repository:
cp -r .github/prompts <target-repo>/.github/prompts/Usage in Copilot Chat — Use the @workspace agent with file reference:
@workspace #file:.github/prompts/<prompt-name>.md
[Your instructions]
Examples:
Generate Changelog:
@workspace #file:.github/prompts/release-notes.prompt.md
Generate changelog for the repository.
Generate Documentation:
@workspace #file:.github/prompts/repo-docs.prompt.md
Generate documentation for all folders with reset=true.
Generate Tests:
@workspace #file:.github/prompts/repo-tests.prompt.md
Generate unit tests and architecture tests for this repository.
Commit these files to enable resuming from the last run:
.github/changelog-state.json— Per-branch tracking.github/docs-state.json— Folder cache
Do not modify these manually; they're auto-managed by prompts.
Edit prompts in .github/prompts/ to match your repository's conventions:
- Path prefixes to strip (company name, project prefix)
- Package registry URLs (NuGet feed, private npm/PyPI registries, etc.)
- Test framework choices per stack (keep to free/OSS libraries — see the Library Selection Rule in
repo-tests.prompt.md) - Documentation structure and folder depth
- Solution: Workflows now support both approaches. If no
Directory.Build.propsexists, pass-UpdateCsprojflag.
- Check
update-version.ps1can access.csprojorDirectory.Build.props - Ensure PowerShell execution policy allows running scripts
- Verify
NUGET_API_KEYsecret is set in target repo - Confirm API key has appropriate package permissions
- Check package version doesn't already exist on NuGet.org
- Ensure all source files are readable (not in .gitignore)
- Check Copilot Chat context window isn't exceeded
- Try
incremental=trueordryRun=trueto debug
To update workflows, scripts, or prompts:
- Edit files in this repository
- Test changes in a test branch before merging to
main - All dependent repos will automatically use updated workflows on next CI run
- For prompts, publish updates to the
.github/prompts/folder
MIT — See LICENSE file