Files
copilotkit__copilotkit/.github/workflows/release.yml

177 lines
5.8 KiB
YAML

name: publish / release
on:
workflow_dispatch:
push:
branches:
- main
concurrency: ${{ github.workflow }}-${{ github.ref }}
permissions:
contents: write
pull-requests: write
env:
NX_VERBOSE_LOGGING: true
jobs:
release:
runs-on: ubuntu-latest
timeout-minutes: 20
steps:
- name: Checkout Repo
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
version: "10.13.1"
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 20.x
registry-url: https://registry.npmjs.org
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
- name: Configure npm auth
run: |
npm config set "//registry.npmjs.org/:_authToken" "${NPM_TOKEN}"
env:
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
- name: Install Dependencies
run: pnpm install --frozen-lockfile
- name: Validate release package allowlist
run: pnpm ci:check-release-plan
- name: Create Release PR or Publish
id: changesets
uses: changesets/action@v1
with:
version: pnpm changeset version
publish: pnpm ci:publish-release
commit: "chore: version packages"
title: "chore: version packages"
createGithubReleases: false
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
- name: Get published version
if: steps.changesets.outputs.published == 'true'
id: release-version
run: |
VERSION=$(node -p "require('./packages/react-core/package.json').version")
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
if [[ "$VERSION" == *-* ]]; then
echo "is_stable=false" >> "$GITHUB_OUTPUT"
else
echo "is_stable=true" >> "$GITHUB_OUTPUT"
fi
- name: Configure git user for tagging
if: steps.changesets.outputs.published == 'true' && steps.release-version.outputs.is_stable == 'true'
run: |
git config --global user.email "github-actions[bot]@users.noreply.github.com"
git config --global user.name "github-actions[bot]"
- name: Generate release changelog
if: steps.changesets.outputs.published == 'true' && steps.release-version.outputs.is_stable == 'true'
run: |
node -p "require('./scripts/release/generate-changelog')('${{ steps.release-version.outputs.version }}')" > changelog.txt
- name: Ensure stable release tag
if: steps.changesets.outputs.published == 'true' && steps.release-version.outputs.is_stable == 'true'
id: release-tag
run: |
TAG="v${{ steps.release-version.outputs.version }}"
if git ls-remote --exit-code --tags origin "refs/tags/$TAG" >/dev/null 2>&1; then
echo "created=false" >> "$GITHUB_OUTPUT"
else
git tag -a "$TAG" -m "Release ${{ steps.release-version.outputs.version }}"
git push origin "$TAG"
echo "created=true" >> "$GITHUB_OUTPUT"
fi
- name: Create or update GitHub release
if: steps.changesets.outputs.published == 'true' && steps.release-version.outputs.is_stable == 'true'
uses: actions/github-script@v7
env:
RELEASE_TAG: v${{ steps.release-version.outputs.version }}
RELEASE_NAME: v${{ steps.release-version.outputs.version }}
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const fs = require("fs");
const { owner, repo } = context.repo;
const tag = process.env.RELEASE_TAG;
const name = process.env.RELEASE_NAME;
const body = fs.readFileSync("./changelog.txt", "utf8");
try {
const existing = await github.rest.repos.getReleaseByTag({
owner,
repo,
tag,
});
await github.rest.repos.updateRelease({
owner,
repo,
release_id: existing.data.id,
tag_name: tag,
name,
body,
draft: false,
prerelease: false,
});
} catch (error) {
if (error.status !== 404) {
throw error;
}
await github.rest.repos.createRelease({
owner,
repo,
tag_name: tag,
name,
body,
draft: false,
prerelease: false,
});
}
- name: Re-enter next prerelease mode
if: steps.changesets.outputs.published == 'true' && steps.release-version.outputs.is_stable == 'true'
run: |
if [[ -f .changeset/pre.json ]]; then
echo "Changesets prerelease mode is already enabled."
exit 0
fi
pnpm changeset pre enter next
- name: Create or update prerelease mode PR
if: steps.changesets.outputs.published == 'true' && steps.release-version.outputs.is_stable == 'true'
id: prerelease-pr
uses: peter-evans/create-pull-request@v8
with:
token: ${{ secrets.GITHUB_TOKEN }}
branch: changeset-release/re-enter-next
delete-branch: true
add-paths: .changeset/pre.json
commit-message: "chore: re-enter next prerelease mode"
title: "chore: re-enter next prerelease mode"
body: |
This PR was created automatically after publishing a stable release.
It re-enters Changesets prerelease mode for `next` so future release PRs continue on the `next` channel.