Skip to content

ci: replace manual versioning with release-please#2

Merged
milesangelo merged 10 commits into
mainfrom
feat/release-please-versioning
Apr 7, 2026
Merged

ci: replace manual versioning with release-please#2
milesangelo merged 10 commits into
mainfrom
feat/release-please-versioning

Conversation

@milesangelo

Copy link
Copy Markdown
Contributor

Summary

Replaces the manual <Version> + tag-driven publish pipeline with release-please on Conventional Commits. The package version becomes managed entirely by release-please via .release-please-manifest.json, and a single release-please.yml workflow opens Release PRs and pushes to NuGet.org when those PRs are merged.

  • Single source of truth: .release-please-manifest.json (seeded 0.0.0). The csproj has no <Version> or <PackageReleaseNotes>.
  • Single release workflow: .github/workflows/release-please.yml runs on every push to main, opens/updates a Release PR, and on merge tags + publishes via dotnet pack /p:Version=$VERSIONdotnet nuget push.
  • Trunk-only: develop branch and v* tag triggers are gone. ci.yml is now a pure build/test/format/analyzers/security workflow on main only.
  • Legacy workflows deleted: build.yml and publish-nuget.yml (both superseded).
  • Contributor docs updated: CONTRIBUTING.md documents the Conventional Commits requirement; CLAUDE.md describes the new release flow; the bug template's version placeholder is refreshed.

File changes

File Action
release-please-config.json new
.release-please-manifest.json new (seeded 0.0.0)
CHANGELOG.md new (stub; release-please owns it)
.github/workflows/release-please.yml new
.github/workflows/ci.yml strip publish jobs + tag/develop triggers
.github/workflows/build.yml delete
.github/workflows/publish-nuget.yml delete
Coinbase.AdvancedTrade.Client/Coinbase.AdvancedTrade.Client.csproj remove <Version> and <PackageReleaseNotes>
CONTRIBUTING.md add ## Commit Messages section
CLAUDE.md rewrite ## CI/CD and ## Releases
.github/ISSUE_TEMPLATE/bug_report.md refresh version placeholder
.gitignore ignore docs/superpowers/ (planning artifacts)

How the new release flow works

  1. Developer commits to main using Conventional Commits (feat:, fix:, feat!:, etc.).
  2. release-please.yml opens or updates a chore(main): release X.Y.Z PR with the next version and a changelog.
  3. Maintainer reviews and merges the Release PR.
  4. release-please creates the vX.Y.Z tag and a GitHub Release; the same workflow's publish job builds with /p:Version=X.Y.Z, packs, and pushes to NuGet.org.
  5. Pre-1.0 (current state): feat: → patch bump, feat!: → minor bump. To cut 1.0.0, push a commit with footer Release-As: 1.0.0.

Maintainer post-merge checklist

These are one-time, destructive operations the maintainer needs to do after this PR merges (they are not automated):

  • Delete stale tags locally and from the remote:
    git tag -d v0.0.0 v0.1.0-alpha v0.1.1-alpha
    git push origin :refs/tags/v0.0.0 :refs/tags/v0.1.0-alpha :refs/tags/v0.1.1-alpha
  • Delete the develop branch (local + remote) if present:
    git push origin --delete develop
  • Update branch protection rules on main — remove any required checks that reference the deleted workflow names (Build and Test, Publish to NuGet.org). PRs will be unmergeable until these are removed.
  • Confirm NUGET_API_KEY secret is still present and valid in GitHub Actions.
  • Bootstrap the first release. None of the commits in this PR use a release-triggering type (all chore: / ci: / docs:), so release-please will not open a Release PR until a real feat: or fix: lands. Either:
    • Squash-merge this PR with title feat: replace manual versioning with release-please (will trigger an immediate 0.0.1 Release PR), OR
    • Merge with the current title and push a separate fix: or feat: commit afterward to bootstrap the flow.

Test plan

  • dotnet build -c Release — clean (0 errors, 0 warnings)
  • dotnet test -c Release — 116/116 passing (102 unit + 14 integration)
  • dotnet format --verify-no-changes — exit 0
  • All workflow YAML files validate
  • release-please-config.json and .release-please-manifest.json validate
  • dotnet pack ... /p:Version=0.0.1 produces Coinbase.AdvancedTrade.Client.0.0.1.nupkg (verified locally — confirms the CI publish step's version injection works)
  • After merge: confirm release-please.yml runs successfully on the merge commit
  • After bootstrap commit: confirm release-please opens a Release PR
  • After merging the Release PR: confirm publish job tags, releases, and pushes to NuGet.org

🤖 Generated with Claude Code

@milesangelo
milesangelo merged commit c66c741 into main Apr 7, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant