Create a release #47
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 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 | |
wait_for_checks: | |
name: Wait for code checks to pass | |
runs-on: ubuntu-latest | |
steps: | |
- uses: lewagon/[email protected] | |
with: | |
ref: ${{ github.ref }} | |
repo-token: ${{ secrets.GITHUB_TOKEN }} | |
check-regexp: (Build & Test .*|Test Python template support|Lint|Docs build) | |
wait-interval: 5 | |
update_changelog: | |
needs: [release_metadata, wait_for_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@v4 | |
with: | |
token: ${{ secrets.APIFY_SERVICE_ACCOUNT_GITHUB_TOKEN }} | |
- name: Use Node.js 22 | |
uses: actions/setup-node@v4 | |
with: | |
node-version: 22 | |
- name: Enable corepack | |
run: | | |
corepack enable | |
corepack prepare yarn@stable --activate | |
- name: Activate cache for Node.js 22 | |
uses: actions/setup-node@v4 | |
with: | |
cache: yarn | |
- name: Update package version in package.json | |
run: yarn version ${{ needs.release_metadata.outputs.version_number }} | |
- name: Update README | |
run: yarn pack | |
- name: Update CHANGELOG.md | |
uses: DamianReeves/write-file-action@master | |
with: | |
path: CHANGELOG.md | |
write-mode: overwrite | |
contents: ${{ needs.release_metadata.outputs.changelog }} | |
- name: Format | |
run: yarn format:fix | |
- 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: | |
- uses: actions/checkout@v4 | |
with: | |
ref: ${{ needs.update_changelog.changelog_commitish }} | |
- name: Use Node.js 22 | |
uses: actions/setup-node@v4 | |
with: | |
node-version: 22 | |
registry-url: https://registry.npmjs.org | |
- name: Enable corepack | |
run: | | |
corepack enable | |
corepack prepare yarn@stable --activate | |
- name: Activate cache for Node.js 22 | |
uses: actions/setup-node@v4 | |
with: | |
cache: yarn | |
- name: Install dependencies | |
run: yarn | |
- name: Build module | |
run: yarn build | |
- name: Pack with yarn | |
run: yarn pack | |
- name: Publish to NPM | |
run: | | |
# `yarn npm publish` does not currently support --provenance: https://github.com/yarnpkg/berry/issues/5430 | |
npm publish package.tgz --provenance --access public | |
env: | |
NODE_AUTH_TOKEN: ${{ secrets.APIFY_SERVICE_ACCOUNT_NPM_TOKEN }} | |
update_homebrew_formula: | |
name: Update Homebrew Formula | |
needs: [publish_to_npm] | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Set git identity | |
run: | | |
git config --global user.name 'Apify Service Account' | |
git config --global user.email '[email protected]' | |
- name: Set up Homebrew | |
uses: Homebrew/actions/setup-homebrew@master | |
# It can happen that the updated package version is not available right after the `npm publish` command finishes | |
# Try waiting 3 minutes until the updated package version is available | |
- name: Wait for updated package to be available on NPM | |
run: | | |
PACKAGE_VERSION=`node -p "require('./package.json').version"` | |
PACKAGE_DEFINITION_URL="https://registry.npmjs.org/apify-cli/${PACKAGE_VERSION}" | |
for _i in {1..30}; do | |
curl -sf "${PACKAGE_DEFINITION_URL}" &> /dev/null && exit 0; | |
echo "Package 'apify-cli' version '${PACKAGE_VERSION}' is not available yet, will retry in 10 seconds." | |
sleep 10; | |
done | |
curl -sf "${PACKAGE_DEFINITION_URL}" &> /dev/null || exit 1; | |
- name: Update Homebrew formula in apify/homebrew-tap repo | |
run: | | |
PACKAGE_VERSION=`node -p "require('./package.json').version"` | |
gh workflow run update_formula.yaml --repo apify/homebrew-tap --field package=apify-cli --field version=$PACKAGE_VERSION | |
env: | |
GH_TOKEN: ${{ secrets.APIFY_SERVICE_ACCOUNT_GITHUB_TOKEN }} | |
- name: Send PR with formula update to homebrew/homebrew-core repo | |
run: | | |
PACKAGE_VERSION=`node -p "require('./package.json').version"` | |
brew tap --force homebrew/core | |
brew bump-formula-pr apify-cli \ | |
--version ${PACKAGE_VERSION} \ | |
--no-browse \ | |
--message "Automatic update of the \`apify-cli\` formula. | |
CC @B4nan @vladfrangu" | |
env: | |
HOMEBREW_GITHUB_API_TOKEN: ${{ secrets.APIFY_SERVICE_ACCOUNT_GITHUB_TOKEN }} |