diff --git a/go.mod b/go.mod index 98d1b8fc..6213cf62 100644 --- a/go.mod +++ b/go.mod @@ -6,7 +6,7 @@ require ( charm.land/bubbles/v2 v2.0.0 charm.land/bubbletea/v2 v2.0.2 charm.land/lipgloss/v2 v2.0.2 - github.com/basecamp/basecamp-sdk/go v0.7.1 + github.com/basecamp/basecamp-sdk/go v0.7.2 github.com/basecamp/cli v0.2.1 github.com/charmbracelet/bubbles v1.0.0 github.com/charmbracelet/glamour v1.0.0 diff --git a/go.sum b/go.sum index c4b70ca1..2253b353 100644 --- a/go.sum +++ b/go.sum @@ -23,8 +23,8 @@ github.com/aymanbagabas/go-udiff v0.4.1 h1:OEIrQ8maEeDBXQDoGCbbTTXYJMYRCRO1fnodZ github.com/aymanbagabas/go-udiff v0.4.1/go.mod h1:0L9PGwj20lrtmEMeyw4WKJ/TMyDtvAoK9bf2u/mNo3w= github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk= github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4= -github.com/basecamp/basecamp-sdk/go v0.7.1 h1:GsQl8tEImbPMZZR8gtWQkP63a1j/7H1S6K2Zw8XZpbU= -github.com/basecamp/basecamp-sdk/go v0.7.1/go.mod h1:3MczpIvzsnslxVqb3TVrqVe8u4Jz/RyjIsTldhmiK5Q= +github.com/basecamp/basecamp-sdk/go v0.7.2 h1:jYY7N6rIlChT6xHp9BbvFwEH+CsNrwZH66RYmm7OinY= +github.com/basecamp/basecamp-sdk/go v0.7.2/go.mod h1:3MczpIvzsnslxVqb3TVrqVe8u4Jz/RyjIsTldhmiK5Q= github.com/basecamp/cli v0.2.1 h1:8GyehPVtsTXla0oOPu4QgXRjwwzJ99prlByvyi+0HRQ= github.com/basecamp/cli v0.2.1/go.mod h1:p8tt/DatJ2LAzWO6N6tNfV8x3gF5T3IxDTo+U8FfWPo= github.com/bmatcuk/doublestar v1.1.1/go.mod h1:UD6OnuiIn0yFxxA2le/rnRU1G4RaI4UvFv1sNto9p6w= diff --git a/internal/commands/assign.go b/internal/commands/assign.go index 9130568a..072b4db1 100644 --- a/internal/commands/assign.go +++ b/internal/commands/assign.go @@ -645,7 +645,7 @@ func doAssignStep(cmd *cobra.Command, app *appctx.App, stepIDStr, assigneeID str assigneeIDs = append(assigneeIDs, assigneeIDInt) updated, err := app.Account().CardSteps().Update(cmd.Context(), stepID, &basecamp.UpdateStepRequest{ - Assignees: assigneeIDs, + AssigneeIDs: assigneeIDs, }) if err != nil { return nil, convertSDKError(err) @@ -747,7 +747,7 @@ func doUnassignStep(cmd *cobra.Command, app *appctx.App, stepIDStr string, assig assigneeIDs := removeID(existingAssigneeIDs(step.Assignees), assigneeIDInt) updated, err := app.Account().CardSteps().Update(cmd.Context(), stepID, &basecamp.UpdateStepRequest{ - Assignees: assigneeIDs, + AssigneeIDs: assigneeIDs, }) if err != nil { return nil, convertSDKError(err) diff --git a/internal/commands/cards.go b/internal/commands/cards.go index ea7bfb29..6589ad2f 100644 --- a/internal/commands/cards.go +++ b/internal/commands/cards.go @@ -1927,7 +1927,7 @@ func newCardsStepCreateCmd(project *string) *cobra.Command { if err != nil { return err } - req.Assignees = assigneeIDs + req.AssigneeIDs = assigneeIDs } step, err := app.Account().CardSteps().Create(cmd.Context(), cardIDInt, req) @@ -2012,7 +2012,7 @@ You can pass either a step ID or a Basecamp URL: if err != nil { return err } - req.Assignees = assigneeIDs + req.AssigneeIDs = assigneeIDs } step, err := app.Account().CardSteps().Update(cmd.Context(), stepID, req) diff --git a/internal/version/sdk-provenance.json b/internal/version/sdk-provenance.json index d019f847..f66b7062 100644 --- a/internal/version/sdk-provenance.json +++ b/internal/version/sdk-provenance.json @@ -1,9 +1,9 @@ { "sdk": { "module": "github.com/basecamp/basecamp-sdk/go", - "version": "v0.7.1", - "revision": "55ea29ab3388", - "updated_at": "2026-03-25T07:00:09Z" + "version": "v0.7.2", + "revision": "0613b681ec21", + "updated_at": "2026-03-26T04:49:44Z" }, "api": { "repo": "basecamp/bc3", diff --git a/scripts/release.sh b/scripts/release.sh index 0ce5775b..0f166af7 100755 --- a/scripts/release.sh +++ b/scripts/release.sh @@ -67,6 +67,15 @@ if grep -q '^[[:space:]]*replace[[:space:]]' go.mod; then die "go.mod contains replace directives. Remove them before releasing." fi +# --- Verify required tools --- +if ! command -v jq >/dev/null 2>&1; then + die "jq is required but not found. Install with your package manager." +fi + +# --- Run pre-flight checks --- +info "Running release checks" +make release-check + # --- Update Nix flake --- info "Updating Nix flake" if [[ "${DRY_RUN}" == "true" || "${DRY_RUN}" == "1" ]]; then @@ -75,11 +84,7 @@ else NIX_RC=0 scripts/update-nix-flake.sh "${VERSION}" || NIX_RC=$? if [[ "$NIX_RC" -eq 0 ]]; then - git add nix/package.nix - git commit -m "Update nix flake for v${VERSION}" - git push origin main --quiet - LOCAL=$(git rev-parse HEAD) - info "Pushed nix flake update" + : # nix flake updated elif [[ "$NIX_RC" -eq 2 ]]; then echo " nix flake: no changes needed" else @@ -87,9 +92,40 @@ else fi fi -# --- Run pre-flight checks --- -info "Running release checks" -make release-check +# --- Stamp plugin version --- +info "Stamping plugin version" +if [[ "${DRY_RUN}" == "true" || "${DRY_RUN}" == "1" ]]; then + echo " (skipped — dry run)" +else + scripts/stamp-plugin-version.sh "${VERSION}" +fi + +# --- Commit release prep --- +if [[ "${DRY_RUN}" != "true" && "${DRY_RUN}" != "1" ]]; then + git add nix/package.nix .claude-plugin/plugin.json + if ! git diff --cached --quiet; then + STAGED=$(git diff --cached --name-only) + HAS_NIX=false + HAS_PLUGIN=false + if echo "${STAGED}" | grep -q "^nix/package\.nix$"; then + HAS_NIX=true + fi + if echo "${STAGED}" | grep -q "^\.claude-plugin/plugin\.json$"; then + HAS_PLUGIN=true + fi + if [[ "${HAS_NIX}" == "true" && "${HAS_PLUGIN}" == "true" ]]; then + COMMIT_MSG="Update nix flake and plugin version for v${VERSION}" + elif [[ "${HAS_NIX}" == "true" ]]; then + COMMIT_MSG="Update nix flake for v${VERSION}" + else + COMMIT_MSG="Update plugin version for v${VERSION}" + fi + git commit -m "${COMMIT_MSG}" + git push origin main --quiet + LOCAL=$(git rev-parse HEAD) + info "Pushed release prep" + fi +fi # --- Fetch tags to ensure we see remote state --- git fetch origin --tags --quiet