From d9d95ece4d30264ef1ee37584de907d75a5c21cf Mon Sep 17 00:00:00 2001 From: Miguel Rasero Date: Wed, 10 Jun 2026 20:57:36 +0000 Subject: [PATCH] ci: changesets release workflow with npm Trusted Publishing (OIDC) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit On push to main: opens/updates a 'release: version packages' PR while changesets are pending; publishes to npm + creates GitHub releases when that PR merges. Auth is npm Trusted Publishing — each @runflow-io package trusts this workflow file, so no NPM_TOKEN secret exists to leak or rotate, and packages get provenance attestations automatically. --- .github/workflows/release.yml | 50 +++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 .github/workflows/release.yml diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..c45af5a --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,50 @@ +name: Release + +# Changesets release loop: while changesets exist on main, this keeps a +# "release: version packages" PR open with the version bumps + changelogs. +# Merging THAT PR publishes every bumped package to npm and creates the +# GitHub releases. Publishing auth is npm Trusted Publishing (OIDC) — no +# NPM_TOKEN secret anywhere; each @runflow-io package trusts exactly this +# workflow file on this repo. + +on: + push: + branches: [main] + +concurrency: release + +permissions: + contents: write # version commit, tags, GitHub releases + pull-requests: write # the "Version Packages" PR + id-token: write # npm Trusted Publishing (OIDC) + provenance + +jobs: + release: + runs-on: ubuntu-latest + timeout-minutes: 15 + steps: + - uses: actions/checkout@v4 + + - uses: oven-sh/setup-bun@v2 + with: + bun-version: 1.3.10 + + # `changeset publish` shells out to the npm CLI; OIDC trusted + # publishing needs npm >= 11.5, which Node 24 bundles. + - uses: actions/setup-node@v4 + with: + node-version: 24 + registry-url: "https://registry.npmjs.org" + + - name: Install + run: bun install --frozen-lockfile + + - name: Open version PR or publish to npm + uses: changesets/action@v1 + with: + version: bun run changeset version + publish: bun run release + commit: "release: version packages" + title: "release: version packages" + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}