Skip to content

Add homepage to core packages #132

Add homepage to core packages

Add homepage to core packages #132

Workflow file for this run

# Run `pnpm changeset` before running this workflow
name: Release – Stable
permissions:
contents: write
packages: write
pull-requests: write
id-token: write
deployments: write
on:
push:
branches:
- main
concurrency: ${{ github.workflow }}-${{ github.ref }}
jobs:
release:
name: Release – Stable
runs-on: ubuntu-22.04
environment: stable
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/setup
with:
node-version: '18'
- name: Build and test
run: |
pnpm turbo run compile
pnpm turbo run test
- name: Publish packages to npm
id: changesets
uses: changesets/action@v1
with:
publish: pnpm -r --filter ./programs/cli --filter ./programs/create --filter ./programs/develop publish --access public --provenance --no-git-checks
commit: "chore: version packages"
title: "chore: version packages"
createGithubReleases: true
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
- name: Debug npm auth (stable)
if: steps.changesets.outputs.published != 'true'
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
run: |
echo "Registry: $(npm config get registry)"
npm whoami || true
test -n "$NODE_AUTH_TOKEN" || (echo "NODE_AUTH_TOKEN missing" && exit 1)
- name: Collect versions
id: versions
run: |
node -e "const fs=require('fs');function v(p){return JSON.parse(fs.readFileSync(p,'utf8')).version;}const obj={'extension':v('programs/cli/package.json'),'extension-create':v('programs/create/package.json'),'extension-develop':v('programs/develop/package.json')};process.stdout.write('versions='+JSON.stringify(obj));" >> $GITHUB_OUTPUT
- name: Promote next version to latest dist-tag (fallback)
if: steps.changesets.outputs.published != 'true'
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
V_EXT: ${{ fromJson(steps.versions.outputs.versions).extension }}
V_CREATE: ${{ fromJson(steps.versions.outputs.versions)['extension-create'] }}
V_DEV: ${{ fromJson(steps.versions.outputs.versions)['extension-develop'] }}
run: |
set -e
echo "Promoting dist-tags to latest if versions exist on registry..."
npm dist-tag add extension@${V_EXT} latest || true
npm dist-tag add extension-create@${V_CREATE} latest || true
npm dist-tag add extension-develop@${V_DEV} latest || true
# Note: We now append aggregated changelog to the GitHub Release body instead of committing root CHANGELOG.
- name: Render aggregated changelog
if: steps.changesets.outputs.published == 'true'
id: agg
run: |
node ./scripts/render-aggregated-changelog.cjs > aggregated.md || true
echo "body<<EOF" >> $GITHUB_OUTPUT
echo "### Aggregated package changelog" >> $GITHUB_OUTPUT
cat aggregated.md >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
- name: Append to latest GitHub Release body
if: steps.changesets.outputs.published == 'true'
uses: actions/github-script@v7
env:
AGG_BODY: ${{ steps.agg.outputs.body }}
with:
script: |
const { owner, repo } = context.repo;
const latest = await github.rest.repos.getLatestRelease({ owner, repo });
const current = latest.data.body || '';
const agg = process.env.AGG_BODY || '';
const toName = (tag) => {
const version = (tag || '').replace(/^v/, '');
const d = new Date();
const month = d.toLocaleString('en-US', { month: 'long' });
const day = String(d.getDate()).padStart(2, '0');
const year = d.getFullYear();
return `${version} (${month} ${day}, ${year})`;
};
const releaseName = toName(latest.data.tag_name || latest.data.name || '');
await github.rest.repos.updateRelease({
owner, repo,
release_id: latest.data.id,
body: current ? `${current}\n\n${agg}` : agg,
name: releaseName,
draft: false,
prerelease: false
});
- name: Create deployment (stable)
if: steps.changesets.outputs.published == 'true'
uses: actions/github-script@v7
env:
VERSIONS: ${{ steps.versions.outputs.versions }}
with:
script: |
const { owner, repo } = context.repo;
const payload = { channel: 'stable', versions: JSON.parse(process.env.VERSIONS || '{}') };
const ref = context.sha;
const dep = await github.rest.repos.createDeployment({
owner, repo, ref,
environment: 'stable',
auto_merge: false,
required_contexts: [],
transient_environment: false,
description: `Published to npm (stable)`,
payload: JSON.stringify(payload)
});
const ext = payload.versions['extension'];
const envUrl = ext ? `https://www.npmjs.com/package/extension/v/${ext}` : undefined;
const desc = `extension ${payload.versions['extension']}, extension-create ${payload.versions['extension-create']}, extension-develop ${payload.versions['extension-develop']}`;
await github.rest.repos.createDeploymentStatus({
owner, repo, deployment_id: dep.data.id,
state: 'success',
log_url: `${context.serverUrl}/${owner}/${repo}/actions/runs/${context.runId}`,
environment_url: envUrl,
description: desc
})