-
Notifications
You must be signed in to change notification settings - Fork 0
Build And Release
There are two independent things that get released out of this repository, on two independent version schemes:
| What | Tag scheme | Source of truth |
|---|---|---|
The hypha plugin itself |
bare v<MAJOR.MINOR.PATCH>
|
.claude-plugin/marketplace.json, which pins the plugin to a specific tag |
The hypha CLI (Hypha.Tools) |
tools-v<MAJOR.MINOR.PATCH> |
.claude-plugin/plugin.json's hyphaCliVersion field, which the SessionStart hook downloads |
Both are driven by manually-dispatched GitHub Actions workflows, nothing releases on a push.
Manually dispatched with a SemVer version input. Steps:
- Validates the input is SemVer (via an environment variable, not
${{ }}interpolation, to avoid script injection); a-suffix marks it as a pre-release. - Sets up .NET 10, Python 3.12 and the
spec-extractvirtualenv (from a locked, wheels-only requirements file). -
dotnet restore && dotnet test: the knowledge-regeneration determinism proof (see Developers Experience) must pass before anything ships. -
dotnet packs theHypha.Toolsproject into a dotnet-tool.nupkg. - Pushes it to NuGet, skipped gracefully with a notice if
NUGET_API_KEYis not configured; the package is still attached to the GitHub release either way. -
dotnet publishes self-contained, single-file builds forwin-x64,linux-x64,osx-x64andosx-arm64. -
Smoke test: runs the freshly published
linux-x64binary throughfetch --tag 2026-05 --no-specsthengenerate --tag 2026-05 --output <tmp>, and asserts at least 100 files were generated.2026-05is used because it is the same tag committed as theHypha.MetamodelGen.Testsfixture, so it is known-good. - Generates
THIRD-PARTY-NOTICES.txtvianuget-licensefor the transitive dependencies, plus a hand-appended .NET Runtime (MIT) credit, needed because the self-contained builds bundle the whole runtime. - Zips each platform's publish output (plus
NOTICE,LICENSE,THIRD-PARTY-NOTICES.txt) intoReleaseBuilds/hypha-<version>-<rid>.zipand records a SHA-256 for each inRELEASE_NOTES.md. - Tags the commit
tools-v<version>and pushes the tag. - Drafts a GitHub Release (
softprops/action-gh-release, pinned to a commit SHA rather than a tag, since it holds a content-write token) attaching the zips, the.nupkgand the notices. The release is left as a draft, a human still publishes it.
Manually dispatched. Builds Hypha.Tools.Hook via NativeAOT on four native runners, one per target platform (win-x64, linux-x64, osx-x64, osx-arm64), because true cross-OS AOT publishing is not reliable, unlike release.yml's single-runner cross-publish for the self-contained CLI builds. It commits the resulting binaries into hooks/native/<rid>/ if they changed. This is the only compiled binary this repository commits, and deliberately lives outside hooks/bin//bin/, which .gitignore otherwise excludes at any depth. See Skills and Agents#the-sessionstart-hook for what the resulting binary does.
- Confirm
dotnet test mycelium-hypha.slnandpytest(intools/spec-extract) are green. - Dispatch
release.ymlwith the new CLI version, if the CLI changed. - Dispatch
hook-binaries.ymlifHypha.Tools.Hookchanged, and commit the updatedhooks/native/<rid>/binaries. - Bump
hyphaCliVersionin.claude-plugin/plugin.jsonif the CLI version moved. - Publish the draft GitHub Release from
release.yml. - Tag the plugin itself
v<MAJOR.MINOR.PATCH>and update.claude-plugin/marketplace.json's pinned ref if the plugin's own version changed.
GitHub Actions also run
build-test-sonar.yml on every push and pull request, see Developers Experience for what it checks.
copyright @ Starion Group S.A.