Skip to content

Create a release

Create a release #299

Workflow file for this run

name: Create a release
on:
# Trigger a stable version release via GitHub's UI, with the ability to specify the type of release.
workflow_dispatch:
inputs:
release_type:
description: Release type
required: true
type: choice
default: auto
options:
- auto
- custom
- patch
- minor
- major
custom_version:
description: The custom version to bump to (only for "custom" type)
required: false
type: string
default: ''
concurrency:
group: release
cancel-in-progress: false
jobs:
release_metadata:
name: Prepare release metadata
runs-on: ubuntu-latest
outputs:
version_number: ${{ steps.release_metadata.outputs.version_number }}
tag_name: ${{ steps.release_metadata.outputs.tag_name }}
changelog: ${{ steps.release_metadata.outputs.changelog }}
release_notes: ${{ steps.release_metadata.outputs.release_notes }}
steps:
- uses: apify/actions/git-cliff-release@v1.2.0
name: Prepare release metadata
id: release_metadata
with:
release_type: ${{ inputs.release_type }}
custom_version: ${{ inputs.custom_version }}
existing_changelog_path: CHANGELOG.md
run_code_checks:
uses: ./.github/workflows/check.yaml
update_changelog:
needs: [release_metadata, run_code_checks]
name: Update changelog
runs-on: ubuntu-latest
outputs:
changelog_commitish: ${{ steps.commit.outputs.commit_long_sha }}
steps:
- name: Checkout repository
uses: actions/checkout@v6
with:
token: ${{ secrets.APIFY_SERVICE_ACCOUNT_GITHUB_TOKEN }}
- name: Use Node.js
uses: actions/setup-node@v6
with:
node-version: 24
- name: Install pnpm and dependencies
uses: apify/actions/pnpm-install@v1.2.0
- name: Update package version in package.json
run: pnpm version --no-git-tag-version --allow-same-version ${{ needs.release_metadata.outputs.version_number }}
- name: Update CHANGELOG.md
uses: DamianReeves/write-file-action@master
with:
path: CHANGELOG.md
write-mode: overwrite
contents: ${{ needs.release_metadata.outputs.changelog }}
- name: Commit changes
id: commit
uses: apify/actions/signed-commit@v1.2.0
with:
message: 'chore(release): Update changelog and package version [skip ci]'
pull: '--rebase --autostash'
github-token: ${{ secrets.APIFY_SERVICE_ACCOUNT_GITHUB_TOKEN }}
create_github_release:
name: Create github release
needs: [release_metadata, update_changelog]
runs-on: ubuntu-latest
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- name: Create release
uses: softprops/action-gh-release@v3
with:
tag_name: ${{ needs.release_metadata.outputs.tag_name }}
name: ${{ needs.release_metadata.outputs.version_number }}
target_commitish: ${{ needs.update_changelog.outputs.changelog_commitish }}
body: ${{ needs.release_metadata.outputs.release_notes }}
publish_to_npm:
name: Publish to NPM
needs: [update_changelog]
runs-on: ubuntu-latest
steps:
- name: Execute publish workflow
uses: apify/actions/execute-workflow@v1.2.0
with:
workflow: publish_to_npm.yaml
inputs: '{ "ref": "${{ needs.update_changelog.outputs.changelog_commitish }}", "tag": "latest" }'
version-docs:
needs: [release_metadata, publish_to_npm]
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v6
with:
ref: ${{ github.event.repository.default_branch }}
token: ${{ secrets.APIFY_SERVICE_ACCOUNT_GITHUB_TOKEN }}
fetch-depth: 0
- name: Use Node.js
uses: actions/setup-node@v6
with:
node-version: 24
- name: Install jq
run: sudo apt-get install jq
- name: Install pnpm and dependencies
uses: apify/actions/pnpm-install@v1.2.0
- name: Snapshot the current version
run: |
cd website
VERSION=$(jq -r '.version' ../package.json)
export MAJOR=$(echo $VERSION | cut -d. -f1)
rm -rf versioned_docs/version-$MAJOR
rm -rf versioned_sidebars/version-$MAJOR-sidebars.json
jq 'map(select(. != env.MAJOR))' versions.json > tmp.json && mv tmp.json versions.json
pnpm exec docusaurus docs:version $MAJOR
pnpm exec docusaurus api:version $MAJOR
cd ..
pnpm format
- name: Commit and push the version snapshot
uses: apify/actions/signed-commit@v1.2.0
with:
message: 'docs: update docs for ${{ needs.release_metadata.outputs.version_number }} version'
pull: '--rebase --autostash'
github-token: ${{ secrets.APIFY_SERVICE_ACCOUNT_GITHUB_TOKEN }}