From d11169742fdd27005783ef31b252a41fc2f3699b Mon Sep 17 00:00:00 2001 From: milesangelo Date: Tue, 7 Apr 2026 15:46:36 -0400 Subject: [PATCH 01/10] chore: add release-please config and manifest --- .release-please-manifest.json | 3 +++ release-please-config.json | 13 +++++++++++++ 2 files changed, 16 insertions(+) create mode 100644 .release-please-manifest.json create mode 100644 release-please-config.json diff --git a/.release-please-manifest.json b/.release-please-manifest.json new file mode 100644 index 0000000..e18ee07 --- /dev/null +++ b/.release-please-manifest.json @@ -0,0 +1,3 @@ +{ + ".": "0.0.0" +} diff --git a/release-please-config.json b/release-please-config.json new file mode 100644 index 0000000..53f0059 --- /dev/null +++ b/release-please-config.json @@ -0,0 +1,13 @@ +{ + "$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json", + "packages": { + ".": { + "release-type": "simple", + "package-name": "Coinbase.AdvancedTrade.Client", + "changelog-path": "CHANGELOG.md", + "include-component-in-tag": false, + "bump-minor-pre-major": true, + "bump-patch-for-minor-pre-major": true + } + } +} From 4a2435d938dd4c8ccd940d2f418769eddae4c052 Mon Sep 17 00:00:00 2001 From: milesangelo Date: Tue, 7 Apr 2026 15:49:29 -0400 Subject: [PATCH 02/10] chore: add CHANGELOG.md stub for release-please --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..6361e43 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,3 @@ +# Changelog + +All notable changes to this project will be documented in this file. From 2de9bcec70bd268eb330c3514d7fd18816572897 Mon Sep 17 00:00:00 2001 From: milesangelo Date: Tue, 7 Apr 2026 15:52:06 -0400 Subject: [PATCH 03/10] ci: add release-please workflow with NuGet publish --- .github/workflows/release-please.yml | 48 ++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 .github/workflows/release-please.yml diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml new file mode 100644 index 0000000..f819801 --- /dev/null +++ b/.github/workflows/release-please.yml @@ -0,0 +1,48 @@ +name: Release + +on: + push: + branches: [main] + +permissions: + contents: write + pull-requests: write + id-token: write + +jobs: + release-please: + runs-on: ubuntu-latest + outputs: + release_created: ${{ steps.release.outputs.release_created }} + tag_name: ${{ steps.release.outputs.tag_name }} + version: ${{ steps.release.outputs.version }} + steps: + - uses: googleapis/release-please-action@v4 + id: release + with: + config-file: release-please-config.json + manifest-file: .release-please-manifest.json + + publish: + needs: release-please + if: needs.release-please.outputs.release_created == 'true' + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Setup .NET + uses: actions/setup-dotnet@v4 + with: + dotnet-version: '10.0.x' + + - name: Restore + run: dotnet restore + + - name: Build + run: dotnet build --no-restore --configuration Release /p:Version=${{ needs.release-please.outputs.version }} + + - name: Pack + run: dotnet pack Coinbase.AdvancedTrade.Client/Coinbase.AdvancedTrade.Client.csproj --no-build --configuration Release --output ./packages /p:Version=${{ needs.release-please.outputs.version }} + + - name: Publish to NuGet.org + run: dotnet nuget push ./packages/*.nupkg --source https://api.nuget.org/v3/index.json --api-key ${{ secrets.NUGET_API_KEY }} --skip-duplicate From d25eb120702ac45de09ff33c6afb060fbe0756b6 Mon Sep 17 00:00:00 2001 From: milesangelo Date: Tue, 7 Apr 2026 15:55:43 -0400 Subject: [PATCH 04/10] ci: drop publish jobs and tag trigger from ci.yml --- .github/workflows/ci.yml | 81 +--------------------------------------- 1 file changed, 2 insertions(+), 79 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b4781a5..1c00cdf 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -2,9 +2,7 @@ name: CI/CD Pipeline on: push: - branches: [ main, develop ] - tags: - - 'v*' + branches: [ main ] pull_request: branches: [ main ] @@ -114,79 +112,4 @@ jobs: echo "Checking for vulnerable packages..." dotnet list package --vulnerable --include-transitive || echo "Some test projects have vulnerabilities - this is informational only" echo "Checking for deprecated packages..." - dotnet list package --deprecated --include-transitive || echo "Some packages are deprecated - this is informational only" - - publish-preview: - needs: [test, code-quality, security-scan] - runs-on: ubuntu-latest - if: github.ref == 'refs/heads/develop' - - steps: - - uses: actions/checkout@v4 - - - name: Setup .NET - uses: actions/setup-dotnet@v3 - with: - dotnet-version: '10.0.x' - - - name: Restore dependencies - run: dotnet restore - - - name: Build - run: dotnet build --no-restore --configuration Release - - - name: Create preview package - run: | - VERSION=$(date +%Y%m%d%H%M%S) - dotnet pack Coinbase.AdvancedTrade.Client/Coinbase.AdvancedTrade.Client.csproj \ - --no-build \ - --configuration Release \ - --output ./packages \ - /p:VersionSuffix="preview-$VERSION" - - - name: Upload preview package - uses: actions/upload-artifact@v4 - with: - name: preview-packages - path: ./packages/*.nupkg - - publish-release: - needs: [test, code-quality, security-scan] - runs-on: ubuntu-latest - if: startsWith(github.ref, 'refs/tags/v') - - steps: - - uses: actions/checkout@v4 - - - name: Setup .NET - uses: actions/setup-dotnet@v3 - with: - dotnet-version: '10.0.x' - - - name: Restore dependencies - run: dotnet restore - - - name: Build - run: dotnet build --no-restore --configuration Release - - - name: Pack - run: dotnet pack Coinbase.AdvancedTrade.Client/Coinbase.AdvancedTrade.Client.csproj \ - --no-build \ - --configuration Release \ - --output ./packages - - - name: Publish to NuGet.org - run: dotnet nuget push ./packages/*.nupkg \ - --source https://api.nuget.org/v3/index.json \ - --api-key ${{ secrets.NUGET_API_KEY }} \ - --skip-duplicate - - - name: Create GitHub Release - uses: softprops/action-gh-release@v1 - with: - files: ./packages/*.nupkg - generate_release_notes: true - draft: false - prerelease: false - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file + dotnet list package --deprecated --include-transitive || echo "Some packages are deprecated - this is informational only" \ No newline at end of file From 5d72644d8ffb44f3e9b34457a97a3470f0359fc4 Mon Sep 17 00:00:00 2001 From: milesangelo Date: Tue, 7 Apr 2026 15:59:47 -0400 Subject: [PATCH 05/10] ci: remove build.yml and publish-nuget.yml superseded by release-please --- .github/workflows/build.yml | 31 ----------------------------- .github/workflows/publish-nuget.yml | 30 ---------------------------- 2 files changed, 61 deletions(-) delete mode 100644 .github/workflows/build.yml delete mode 100644 .github/workflows/publish-nuget.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml deleted file mode 100644 index 61805cb..0000000 --- a/.github/workflows/build.yml +++ /dev/null @@ -1,31 +0,0 @@ -name: Build and Test - -on: - push: - branches: [ main, develop ] - pull_request: - branches: [ main, develop ] - -jobs: - build: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - - - name: Setup .NET - uses: actions/setup-dotnet@v3 - with: - dotnet-version: '10.0.x' - - - name: Restore dependencies - run: dotnet restore - - - name: Build - run: dotnet build --no-restore --configuration Release - - - name: Pack (without publish) - run: dotnet pack Coinbase.AdvancedTrade.Client/Coinbase.AdvancedTrade.Client.csproj --no-build --configuration Release --output ./packages - - - name: Verify package created - run: ls -la ./packages/*.nupkg \ No newline at end of file diff --git a/.github/workflows/publish-nuget.yml b/.github/workflows/publish-nuget.yml deleted file mode 100644 index 4636799..0000000 --- a/.github/workflows/publish-nuget.yml +++ /dev/null @@ -1,30 +0,0 @@ -name: Publish to NuGet.org - -on: - push: - tags: - - 'v*' - -jobs: - publish: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - - - name: Setup .NET - uses: actions/setup-dotnet@v3 - with: - dotnet-version: '10.0.x' - - - name: Restore dependencies - run: dotnet restore - - - name: Build - run: dotnet build --no-restore --configuration Release - - - name: Pack - run: dotnet pack Coinbase.AdvancedTrade.Client/Coinbase.AdvancedTrade.Client.csproj --no-build --configuration Release --output ./packages - - - name: Publish to NuGet.org - run: dotnet nuget push ./packages/*.nupkg --source https://api.nuget.org/v3/index.json --api-key ${{ secrets.NUGET_API_KEY }} --skip-duplicate \ No newline at end of file From df261dff4f6fda6b838a679bc6ad08a4a7413abd Mon Sep 17 00:00:00 2001 From: milesangelo Date: Tue, 7 Apr 2026 16:03:20 -0400 Subject: [PATCH 06/10] chore: remove hardcoded version and release notes from csproj --- .../Coinbase.AdvancedTrade.Client.csproj | 2 -- 1 file changed, 2 deletions(-) diff --git a/Coinbase.AdvancedTrade.Client/Coinbase.AdvancedTrade.Client.csproj b/Coinbase.AdvancedTrade.Client/Coinbase.AdvancedTrade.Client.csproj index 65bb581..b41801d 100644 --- a/Coinbase.AdvancedTrade.Client/Coinbase.AdvancedTrade.Client.csproj +++ b/Coinbase.AdvancedTrade.Client/Coinbase.AdvancedTrade.Client.csproj @@ -5,11 +5,9 @@ enable enable Coinbase.AdvancedTrade.Client - 0.4.0-alpha Luna Crypto Trading Luna Crypto Trading A comprehensive .NET client library for the Coinbase Advanced Trade API with full REST API coverage (48 endpoints), ES256 JWT authentication, Polly resilience policies, Refit-generated HTTP clients, and Microsoft DI integration. Covers accounts, orders, products, portfolios, futures, perpetuals, converts, payments, and public market data. - Alpha v0.4.0 - Full Coinbase Advanced Trade REST API coverage. Added 28 new endpoints: order fills, product book, portfolio CRUD, 9 futures/CFM, 6 perpetuals/INTX, 3 convert, 2 payment methods, 6 public market data, and API key permissions. Backfilled missing query parameters on existing endpoints. Reorganized client into partial classes by domain. coinbase;api;client;crypto;trading;dependency-injection https://github.com/Luna-Crypto-Trading/Coinbase.AdvancedTrade.Client git From 812796341cc3b0941b704557f5d2e6b157bbc722 Mon Sep 17 00:00:00 2001 From: milesangelo Date: Tue, 7 Apr 2026 16:08:51 -0400 Subject: [PATCH 07/10] docs: document Conventional Commits requirement for release-please --- CONTRIBUTING.md | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e4fef1c..df71cb3 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -84,6 +84,34 @@ Additionally: - Use **FluentAssertions** for assertions (`result.Should().Be(...)`). - Client methods return `ApiResponse` and never throw — your tests should assert on `IsSuccess`/`ErrorMessage`, not `try/catch`. +## Commit Messages + +This repository uses [Conventional Commits](https://www.conventionalcommits.org/) to drive automated versioning and changelog generation via [release-please](https://github.com/googleapis/release-please). + +**Format:** + +``` +[optional scope]: + +[optional body] + +[optional footer(s)] +``` + +**Types that trigger releases (pre-1.0):** + +- `fix:` — patch bump (e.g., 0.1.3 → 0.1.4) +- `feat:` — patch bump pre-1.0 (e.g., 0.1.3 → 0.1.4); becomes minor post-1.0 +- `feat!:` or footer `BREAKING CHANGE:` — minor bump pre-1.0 (e.g., 0.1.3 → 0.2.0); becomes major post-1.0 + +**Types that appear in the changelog but do not trigger releases:** + +- `docs:`, `perf:`, `refactor:`, `build:`, `ci:`, `chore:`, `test:`, `style:` + +**Cutting 1.0.0:** Include the footer `Release-As: 1.0.0` on any commit merged to `main`. release-please will open a Release PR for `1.0.0` on its next run. + +Commits that do not follow this convention will not produce a release but will still be merged normally. + ## Pull Request Guidelines 1. Branch from `main`. From e8b3fb755b29f1c739673cbaffc3329e33504a2b Mon Sep 17 00:00:00 2001 From: milesangelo Date: Tue, 7 Apr 2026 16:12:55 -0400 Subject: [PATCH 08/10] docs: clarify feat and feat! bump rules in CONTRIBUTING.md --- CONTRIBUTING.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index df71cb3..4ce2232 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -101,8 +101,8 @@ This repository uses [Conventional Commits](https://www.conventionalcommits.org/ **Types that trigger releases (pre-1.0):** - `fix:` — patch bump (e.g., 0.1.3 → 0.1.4) -- `feat:` — patch bump pre-1.0 (e.g., 0.1.3 → 0.1.4); becomes minor post-1.0 -- `feat!:` or footer `BREAKING CHANGE:` — minor bump pre-1.0 (e.g., 0.1.3 → 0.2.0); becomes major post-1.0 +- `feat:` — patch bump pre-1.0 (e.g., 0.1.3 → 0.1.4), still grouped as a Feature in the changelog; becomes minor post-1.0 +- `feat!:` or footer `BREAKING CHANGE:` — minor bump pre-1.0 (e.g., 0.1.3 → 0.2.0); becomes major post-1.0 (e.g., 1.2.3 → 2.0.0) **Types that appear in the changelog but do not trigger releases:** From c002482db7f7aa915178e345db62333b02883c93 Mon Sep 17 00:00:00 2001 From: milesangelo Date: Tue, 7 Apr 2026 17:57:53 -0400 Subject: [PATCH 09/10] docs: update CLAUDE.md and bug template for release-please flow --- .github/ISSUE_TEMPLATE/bug_report.md | 2 +- CLAUDE.md | 17 +++++++++-------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 6875634..85b131b 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -37,7 +37,7 @@ secrets, API keys, or PII. ## Environment -- **Package version:** +- **Package version:** - **.NET SDK version:** - **OS:** - **Coinbase environment:** diff --git a/CLAUDE.md b/CLAUDE.md index f887db9..bbf08e0 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -4,7 +4,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co ## Project Overview -.NET 10 client library for the Coinbase Advanced Trade API, published as a NuGet package (`Coinbase.AdvancedTrade.Client`, currently `0.4.0-alpha`). Provides full REST API coverage (48 endpoints) with ES256 JWT authentication, Polly resilience policies, Refit-generated HTTP clients, and Microsoft DI integration. +.NET 10 client library for the Coinbase Advanced Trade API, published as a NuGet package (`Coinbase.AdvancedTrade.Client`). Provides full REST API coverage (48 endpoints) with ES256 JWT authentication, Polly resilience policies, Refit-generated HTTP clients, and Microsoft DI integration. ## Development Commands @@ -73,15 +73,16 @@ Consumer → ICoinbaseAdvancedTradeClient (resilience + error mapping) ## CI/CD -CI runs on push to `main`/`develop` and PRs to `main` (`.github/workflows/ci.yml`): +CI runs on push to `main` and PRs to `main` (`.github/workflows/ci.yml`): - Matrix: ubuntu/windows/macos + .NET 10 - Stages: build, unit tests, integration tests, `dotnet format` check, analyzer warnings-as-errors, security scan -- Publishing: version tags (`v*`) trigger NuGet.org publish + GitHub Release -## Publishing +## Releases -1. Update `` in `Coinbase.AdvancedTrade.Client.csproj` -2. Commit, tag (`git tag v0.4.0-alpha`), push tag -3. CI builds, tests, publishes to NuGet.org (requires `NUGET_API_KEY` secret) +Releases are driven by [release-please](https://github.com/googleapis/release-please) on Conventional Commits — there is no manual version bump or tag step. -Note: v1.0.0 was accidentally published and unlisted. Use `--prerelease` flag for current alpha versions. +- Version source of truth: `.release-please-manifest.json` at the repo root. +- On every push to `main`, `.github/workflows/release-please.yml` opens or updates a "Release PR" that bumps the version and updates `CHANGELOG.md` based on Conventional Commits since the last release. +- Merging the Release PR creates the git tag and GitHub Release, and the same workflow's `publish` job builds with `/p:Version=$VERSION`, packs `Coinbase.AdvancedTrade.Client.csproj`, and pushes to NuGet.org (requires the `NUGET_API_KEY` secret). +- Pre-1.0, `feat:` bumps patch and `feat!:` / `BREAKING CHANGE:` bumps minor (per `release-please-config.json`). +- See [`CONTRIBUTING.md`](CONTRIBUTING.md#commit-messages) for the Conventional Commits rules contributors must follow. From 9d804cd9fec6157750dd97d8993d48470dcb3538 Mon Sep 17 00:00:00 2001 From: milesangelo Date: Tue, 7 Apr 2026 18:30:23 -0400 Subject: [PATCH 10/10] chore: ignore docs/superpowers/ planning artifacts --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index 40310cf..1d7225a 100644 --- a/.gitignore +++ b/.gitignore @@ -209,6 +209,9 @@ FodyWeavers.xsd nupkg/ *.orig +# Planning and spec artifacts (kept locally only — never committed) +docs/superpowers/ + # Sensitive configuration files appsettings.Production.json appsettings.Development.local.json