Skip to content

Create a release

Create a release #289

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/workflows/git-cliff-release@main
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 || github.sha }}
steps:
- name: Checkout repository
uses: actions/checkout@v6
with:
token: ${{ secrets.APIFY_SERVICE_ACCOUNT_GITHUB_TOKEN }}
- name: Use Node.js 22
uses: actions/setup-node@v6
with:
node-version: 24
- name: Update package version in package.json
run: npm 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: EndBug/add-and-commit@v9
with:
author_name: Apify Release Bot
author_email: [email protected]
message: 'chore(release): Update changelog and package version [skip ci]'
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@v2
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/workflows/execute-workflow@main
with:
workflow: publish_to_npm.yaml
inputs: '{ "ref": "${{ needs.update_changelog.outputs.changelog_commitish }}", "tag": "latest" }'
version-docs:
needs: 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 22
uses: actions/setup-node@v6
with:
node-version: 24
cache: 'npm'
- name: Install jq
run: sudo apt-get install jq
- name: Install dependencies
run: |
npm install
cd website
npm install
- 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
npx docusaurus docs:version $MAJOR
npx docusaurus api:version $MAJOR
cd ..
npm run format
- name: Commit and push the version snapshot
uses: EndBug/add-and-commit@v9
with:
author_name: Apify Release Bot
author_email: [email protected]
message: 'docs: update docs for ${{ inputs.version }} version'