docs: remove kind heading #25407
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Create a Snapshot Release | |
on: | |
workflow_dispatch: | |
issue_comment: | |
types: [created] | |
defaults: | |
run: | |
shell: bash | |
env: | |
TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }} | |
TURBO_TEAM: ${{ secrets.TURBO_TEAM }} | |
FORCE_COLOR: 1 | |
jobs: | |
snapshot-release: | |
name: Create a snapshot release of a pull request | |
if: ${{ github.repository_owner == 'withastro' && github.event.issue.pull_request && (contains(github.event.comment.body, '!preview') || contains(github.event.comment.body, '/preview') || contains(github.event.comment.body, '!snapshot') || contains(github.event.comment.body, '/snapshot')) }} | |
runs-on: ubuntu-latest | |
permissions: | |
contents: read | |
id-token: write | |
issues: write | |
pull-requests: write | |
steps: | |
- name: Check if user has write access | |
uses: lannonbr/[email protected] | |
with: | |
permission: write | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: Extract the snapshot name from comment body | |
id: getSnapshotName | |
uses: actions/github-script@v7 | |
with: | |
script: | | |
const { body } = context.payload.comment; | |
const PREVIEW_RE = /^[!\/](?:preview|snapshot)\s+(\S*)\s*$/gim; | |
const [_, name] = PREVIEW_RE.exec(body) ?? []; | |
if (name) return name; | |
const error = 'Invalid command. Expected: "/preview <snapshot-name>"' | |
github.rest.issues.createComment({ | |
issue_number: context.issue.number, | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
body: error, | |
}) | |
core.setFailed(error) | |
result-encoding: string | |
- name: resolve pr refs | |
id: refs | |
uses: eficode/resolve-pr-refs@main | |
with: | |
token: ${{ secrets.GITHUB_TOKEN }} | |
- uses: actions/checkout@v4 | |
with: | |
ref: ${{ steps.refs.outputs.head_ref }} | |
fetch-depth: 0 | |
- name: Extract base branch from .changeset/config.json | |
id: getBaseBranch | |
run: | | |
baseBranch=$(jq -r '.baseBranch' .changeset/config.json) | |
echo "baseBranch=${baseBranch}" >> $GITHUB_OUTPUT | |
- run: git fetch origin ${{ steps.getBaseBranch.outputs.baseBranch }}:${{ steps.getBaseBranch.outputs.baseBranch }} | |
- name: Setup PNPM | |
uses: pnpm/action-setup@v3 | |
- name: Setup Node | |
uses: actions/setup-node@v4 | |
with: | |
node-version: 22 | |
registry-url: "https://registry.npmjs.org" | |
cache: "pnpm" | |
- name: Install dependencies | |
run: pnpm install | |
- name: Build Packages | |
run: pnpm run build | |
- name: Bump Package Versions | |
id: changesets | |
run: | | |
pnpm exec changeset status --output status.output.json 2>&1 | |
# Snapshots don't work in pre mode. See https://github.com/changesets/changesets/issues/1195 | |
pnpm exec changeset pre exit || true | |
pnpm exec changeset version --snapshot ${{ steps.getSnapshotName.outputs.result }} | |
EOF=$(dd if=/dev/urandom bs=15 count=1 status=none | base64) | |
echo "status<<$EOF" >> $GITHUB_OUTPUT | |
echo "$(cat status.output.json)" >> $GITHUB_OUTPUT | |
echo "$EOF" >> $GITHUB_OUTPUT | |
env: | |
# Needs access to run the script | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
# Disable color | |
FORCE_COLOR: 0 | |
NO_COLOR: 1 | |
- name: Publish Release | |
id: publish | |
run: | | |
set -o pipefail | |
GITHUB_ACTIONS=0 pnpm run build 2>&1 | tee build.output.txt | |
BUILD_EXIT_CODE=$? | |
if [ $BUILD_EXIT_CODE -ne 0 ]; then | |
echo "::error::Build failed. See output above." | |
# Store the build output for the notification step before exiting | |
EOF=$(dd if=/dev/urandom bs=15 count=1 status=none | base64) | |
echo "build<<$EOF" >> $GITHUB_OUTPUT | |
echo "$(cat build.output.txt)" >> $GITHUB_OUTPUT | |
echo "$EOF" >> $GITHUB_OUTPUT | |
exit 1 | |
fi | |
pnpm exec changeset publish --tag experimental--${{ steps.getSnapshotName.outputs.result }} 2>&1 | tee publish.output.txt | |
PUBLISH_EXIT_CODE=$? | |
if [ $PUBLISH_EXIT_CODE -ne 0 ]; then | |
echo "::error::Publish failed. See output above." | |
fi | |
EOF=$(dd if=/dev/urandom bs=15 count=1 status=none | base64) | |
echo "build<<$EOF" >> $GITHUB_OUTPUT | |
echo "$(cat build.output.txt)" >> $GITHUB_OUTPUT | |
echo "$EOF" >> $GITHUB_OUTPUT | |
echo "publish<<$EOF" >> $GITHUB_OUTPUT | |
echo "$(cat publish.output.txt)" >> $GITHUB_OUTPUT | |
echo "$EOF" >> $GITHUB_OUTPUT | |
# Exit with error if publish failed | |
exit $PUBLISH_EXIT_CODE | |
env: | |
# Needs access to publish to npm | |
NPM_TOKEN: ${{ secrets.NPM_TOKEN }} | |
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} | |
# Disable color | |
FORCE_COLOR: 0 | |
NO_COLOR: 1 | |
- name: Pull Request Notification | |
uses: actions/github-script@v7 | |
if: always() | |
env: | |
TAG: ${{ steps.getSnapshotName.outputs.result }} | |
STATUS_DATA: ${{ steps.changesets.outputs.status }} | |
BUILD_LOG: ${{ steps.publish.outputs.build }} | |
PUBLISH_LOG: ${{ steps.publish.outputs.publish }} | |
JOB_STATUS: ${{ job.status }} | |
with: | |
script: | | |
let changeset = { releases: [] }; | |
try { | |
changeset = JSON.parse(process.env.STATUS_DATA); | |
} catch (e) {} | |
let message = ''; | |
if (process.env.JOB_STATUS === 'success') { | |
message = 'Snapshots have been released for the following packages:'; | |
for (const release of changeset.releases) { | |
if (release.type === 'none') continue; | |
message += `\n- \`${release.name}@experimental--${process.env.TAG}\``; | |
} | |
} else { | |
message = '❌ Snapshot release failed.'; | |
} | |
function details(title, body, failed = false) { | |
if (!body) return; | |
message += '\n'; | |
const icon = failed ? '❌ ' : ''; | |
message += `<details><summary><strong>${icon}${title}</strong></summary>`; | |
message += '\n\n```\n'; | |
message += body; | |
message += '\n```\n\n</details>'; | |
} | |
// Show build log first if it exists | |
if (process.env.BUILD_LOG) { | |
details('Build Log', process.env.BUILD_LOG, process.env.JOB_STATUS !== 'success'); | |
} | |
// Only show publish log if it exists (might not if build failed) | |
if (process.env.PUBLISH_LOG) { | |
details('Publish Log', process.env.PUBLISH_LOG, process.env.JOB_STATUS !== 'success'); | |
} | |
github.rest.issues.createComment({ | |
issue_number: context.issue.number, | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
body: message, | |
}) |