Agent Skillsmarcus/sidecar › release-sidecar

release-sidecar

GitHub

自动化 sidecar 组件的版本发布流程,涵盖语义化版本标记、依赖同步更新、GoReleaser 构建、Homebrew Tap 推送及完整性验证。

.claude/skills/release-sidecar/SKILL.md marcus/sidecar

Trigger Scenarios

准备发布新版本 执行 make release 命令 需要同步并验证 sibling dependencies

Install

npx skills add marcus/sidecar --skill release-sidecar -g -y
More Options

Non-standard path

npx skills add https://github.com/marcus/sidecar/tree/main/.claude/skills/release-sidecar -g -y

Use without installing

npx skills use marcus/sidecar@release-sidecar

指定 Agent (Claude Code)

npx skills add marcus/sidecar --skill release-sidecar -a claude-code -g -y

安装 repo 全部 skill

npx skills add marcus/sidecar --all -g -y

预览 repo 内 skill

npx skills add marcus/sidecar --list

SKILL.md

Frontmatter
{
    "name": "release-sidecar",
    "description": "Release new versions of sidecar. Covers version tagging with semver, td dependency updates, go.mod validation, CHANGELOG updates, GoReleaser automation, Homebrew tap updates, and verification steps. Use when preparing or executing a release.",
    "disable-model-invocation": true
}

Releasing a New Version

Operator contract: docs/guides/active/releasing.md. Enforcement lives in scripts/ and RELEASE_VERSION=vX.Y.Z make release. Prefer the one-shot command over replaying this checklist by hand.

Prerequisites

  • Go matching go.mod
  • Clean working tree; main identical to live origin/main
  • Tests and Go CI green on the commit you will tag (tests and lint) — check-release-state.sh now checks this itself via gh run list --workflow=go-ci.yml and fails closed if it's red/running/missing, so you don't have to remember to look
  • GitHub CLI authenticated with push access to marcus/homebrew-tap
  • No replace directives in go.mod
  • HOMEBREW_TAP_TOKEN secret present in the GitHub repo (CI tap job)

Beware of go.work: always use GOWORK=off when updating dependencies and when validating install paths.

Local lint must match CI's golangci-lint v2.12.2, or trust CI:

gh run list --workflow=go-ci.yml --limit=1

Prepare (sidecar-specific)

1. Version

git tag -l 'v*' | sort -V | tail -1

SemVer: major / minor / patch as usual.

2. Sibling dependencies (td, tasks)

make sync-deps   # pins every github.com/marcus/* requirement to its latest tag

check-release-state.sh enforces this and refuses to tag when one is behind. go.work resolves those imports to the local checkouts, so drift is invisible locally — both the gate and sync-deps use GOWORK=off. If a sibling jumped several minors, decide deliberately (pin for a focused release vs take latest and note it under Dependencies) and smoke its tab in the app.

3. CHANGELOG

## [vX.Y.Z] - YYYY-MM-DD

### Features
- …

### Bug Fixes
- …

### Dependencies
- …

Commit the changelog (and any dependency bump) on main, then push so HEAD == origin/main.

Publish

# Dry-run (optional but recommended for tooling changes)
make release-snapshot
./scripts/verify-release-archives.sh dist
./scripts/test-release-guards.sh dist
./scripts/test-release-publication.sh

# Cut the release (fail-closed preflight → tag → CI → formula verify/publish)
RELEASE_VERSION=vX.Y.Z make release

What make release enforces and does is documented in docs/guides/active/releasing.md.

Resume only the tap step if the tag/release already exists:

RELEASE_VERSION=vX.Y.Z make release-tap

CI jobs (on tag push)

  1. verify — tag points at live main, tests, snapshot archives, release guards
  2. release — GoReleaser publishes GitHub release + binaries
  3. update-homebrew-tap — renders packaging/homebrew/sidecar.rb.tmpl and pushes Formula/sidecar.rb with downgrade/idempotency/race guards

td/nightshift formulas are not auto-bumped; edit them by hand when co-releasing.

Verify

gh run list --workflow=release.yml --limit=1
gh release view vX.Y.Z --json assets -q '.assets[].name'

GOBIN=$(mktemp -d) GOWORK=off go install github.com/marcus/sidecar/cmd/sidecar@vX.Y.Z
"$GOBIN/sidecar" --version

go install @vX.Y.Z can 500 from the checksum DB for a minute or two after the tag — wait and retry. Prefer a throwaway GOBIN so verification does not clobber a dev machine's sidecar.

Dev machine after release

# Return to the canonical main development build:
make install-local

# Or keep the released Homebrew build active:
make use-homebrew

# In either case, prove the managed link and both login-shell modes:
make install-status

Recovery

Prefer a new patch release. Keep tags. Resume tap with make release-tap. See docs/guides/active/releasing.md.

Checklist

  • Go CI green (tests + lint) on the commit to tag — enforced automatically by check-release-state.sh
  • Working tree clean; main == origin/main
  • td bump considered; td tab smoke if td moved
  • No replace in go.mod; GOWORK=off build works
  • CHANGELOG entry ## [vX.Y.Z] - …
  • RELEASE_VERSION=vX.Y.Z make release succeeded
  • Release assets present; formula URL/sha match (automatic)
  • go install verified into throwaway GOBIN
  • make install-status proves the dev machine is on the intended binary

Version History

  • b3ba2b5 Current 2026-08-20 01:12

    新增对兄弟依赖(td, tasks)的自动同步与版本漂移检查机制;增加 Go CI 状态的前置校验以失败关闭模式防止在测试未通过时发布。

  • 0ddc6b7 2026-07-25 07:17

Same Skill Collection

.claude/skills/create-adapter/SKILL.md
.claude/skills/create-modal/SKILL.md
.claude/skills/create-plugin/SKILL.md
.claude/skills/create-prompt/SKILL.md
.claude/skills/create-theme/SKILL.md
.claude/skills/drag-pane/SKILL.md
.claude/skills/feature-flags/SKILL.md
.claude/skills/inline-editor/SKILL.md
.claude/skills/keyboard-shortcuts/SKILL.md
.claude/skills/merge-strategy/SKILL.md
.claude/skills/profile-memory/SKILL.md
.claude/skills/project-switching/SKILL.md
.claude/skills/shell-integration/SKILL.md
.claude/skills/sidecar-website/SKILL.md
.claude/skills/ui-features/SKILL.md
.claude/skills/worktree-switching/SKILL.md

Metadata

Files
0
Version
b3ba2b5
Hash
38fe5dd2
Indexed
2026-07-25 07:17

- 위키
Copyright © 2011-2026 iteam. Current version is 2.155.2. UTC+08:00, 2026-08-20 11:18
浙ICP备14020137号-1 $방문자$