UNPKG

skills-ws

Version:

87 agent skills for AI coding assistants — marketing, growth, web3, dev, design & operations. Built for OpenClaw, Claude Code, Cursor, and Codex.

139 lines (121 loc) • 5.19 kB
## Contents - Release Automation - Option A — semantic-release (single package, automated versioning from commits) - Option B — Changesets (monorepos, human-curated release notes) ## Release Automation ### Option A — semantic-release (single package, automated versioning from commits) `semantic-release` reads Conventional Commits, computes the next version, publishes to npm, creates the GitHub release, and commits the changelog — all in CI on `main`. The common failure is a release job missing Node setup, a clean install, or the npm auth token, so it either can't run or publishes unauthenticated. ```json // .releaserc.json { "branches": ["main", { "name": "next", "prerelease": true }], "plugins": [ "@semantic-release/commit-analyzer", "@semantic-release/release-notes-generator", "@semantic-release/changelog", "@semantic-release/npm", "@semantic-release/github", ["@semantic-release/git", { "assets": ["CHANGELOG.md", "package.json"] }] ] } ``` ```yaml # .github/workflows/release.yml name: Release on: push: branches: [main] permissions: contents: read # least-privilege default; the release job widens it below jobs: release: runs-on: ubuntu-24.04 permissions: contents: write # push the changelog/version commit + create the GitHub release issues: write # comment on released issues pull-requests: write # comment on released PRs id-token: write # npm provenance (publish with verifiable origin) steps: - uses: actions/checkout@v6 with: fetch-depth: 0 # full history — semantic-release diffs all tags persist-credentials: false - uses: actions/setup-node@v6 with: node-version: 24 cache: npm registry-url: https://registry.npmjs.org # writes the npm authToken line - run: npm ci - run: npm run build --if-present - run: npx semantic-release env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # npm granular access token (write tokens max 90 days) or, preferably, # OIDC trusted publishing: classic automation tokens were revoked 2025-12-09. NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} ``` > With `id-token: write` + a recent npm CLI, `@semantic-release/npm` publishes with **provenance**, linking the package on npm to the exact workflow run that built it. Prefer npm "trusted publishing" (OIDC) over a static `NPM_TOKEN` where your registry supports it. ### Option B — Changesets (monorepos, human-curated release notes) Changesets is the better fit for monorepos: contributors drop an intent file per PR (`npx changeset`), and a bot opens/maintains a single "Version Packages" PR. Merging that PR versions every affected package and publishes them together. ```bash npx changeset # developer: select bumped packages + write a summary (commit the .md) npx changeset version # CI/maintainer: applies bumps, updates changelogs + lockfile npx changeset publish # CI: publishes every package that has a new version ``` ```yaml # .github/workflows/changesets.yml (inlined — this is the full workflow) name: Changesets Release on: push: branches: [main] permissions: contents: read concurrency: changesets-${{ github.ref }} # serialize so two pushes can't double-publish jobs: release: runs-on: ubuntu-24.04 permissions: contents: write # create/update the "Version Packages" PR + tags pull-requests: write # open/maintain the version PR id-token: write # npm provenance on publish steps: - uses: actions/checkout@v6 with: fetch-depth: 0 persist-credentials: false - uses: pnpm/action-setup@v6 with: { version: 11 } # or omit version to use the packageManager field from package.json - uses: actions/setup-node@v6 with: node-version: 24 cache: pnpm registry-url: https://registry.npmjs.org - run: pnpm install --frozen-lockfile - run: pnpm build - id: changesets uses: changesets/action@v1 with: # If changesets exist -> publish. Otherwise -> open/refresh the Version PR. publish: pnpm changeset publish version: pnpm changeset version commit: "chore: release packages" title: "chore: release packages" env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # npm granular access token (write tokens max 90 days) or, preferably, # OIDC trusted publishing: classic automation tokens were revoked 2025-12-09. NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} ``` ```jsonc // .changeset/config.json — key options { "$schema": "https://unpkg.com/@changesets/config/schema.json", "changelog": "@changesets/cli/changelog", "commit": false, "access": "public", // "restricted" for private scoped packages "baseBranch": "main", "updateInternalDependencies": "patch", "linked": [], // [["@scope/a","@scope/b"]] to version in lockstep "ignore": ["@scope/internal-tooling"] } ```