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.
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
- Extracts NuGet package metadata from
.csprojfiles - Mermaid diagrams per folder
- Idempotent (safe to run multiple times)
Purpose: Automatically generate unit and architecture tests
Features:
- Reuses or creates
UnitTestsandArchTestsprojects underTests/folder - xUnit + NSubstitute + FluentAssertions unit tests
- NetArchTest architecture tests for API contracts
- Targets
net10.0with preview features - 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)
- NuGet feed URLs
- Test framework choices
- 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