Release @latest #16
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: Release @latest | |
env: | |
PUPPETEER_DOWNLOAD_BASE_URL: https://storage.googleapis.com/chrome-for-testing-public | |
on: | |
workflow_dispatch: | |
inputs: | |
version: | |
description: The version to bump (if you choose custom, please include it under custom version) | |
required: true | |
default: 'patch' | |
type: choice | |
options: | |
- "patch" | |
- "minor" | |
- "major" | |
- "custom" | |
custom_version: | |
description: The custom version to bump to (only for "custom" type) | |
required: false | |
type: string | |
default: '' | |
package: | |
description: The package to release | |
required: true | |
type: choice | |
# For maintainers, this should be the folder name, not the package name | |
options: | |
- "apify" | |
- "scraper-tools" | |
jobs: | |
# Test before releasing to ensure we don't release a broken version | |
build_and_test: | |
name: Build & Test | |
if: (!contains(github.event.head_commit.message, '[skip ci]') && !contains(github.event.head_commit.message, 'docs:')) | |
strategy: | |
fail-fast: true | |
matrix: | |
# We don't test on Windows as the tests are flaky | |
os: [ ubuntu-latest ] | |
node-version: [ 16, 18, 20 ] | |
runs-on: ${{ matrix.os }} | |
steps: | |
- name: Cancel Workflow Action | |
uses: styfle/cancel-workflow-action@0.12.1 | |
with: | |
access_token: ${{ github.token }} | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Use Node.js ${{ matrix.node-version }} | |
uses: actions/setup-node@v4 | |
with: | |
node-version: ${{ matrix.node-version }} | |
cache: 'npm' | |
cache-dependency-path: 'package-lock.json' | |
- name: Setup Playwright | |
uses: microsoft/playwright-github-action@v1 | |
- name: Turbo cache | |
id: turbo-cache | |
uses: actions/cache@v4 | |
with: | |
path: .turbo | |
key: turbo-${{ github.job }}-${{ github.ref_name }}-${{ github.sha }} | |
restore-keys: | | |
turbo-${{ github.job }}-${{ github.ref_name }}- | |
- name: Install Dependencies | |
run: npm ci | |
- name: Build | |
run: npm run ci:build | |
- name: Tests | |
run: npm test | |
release: | |
name: "Bump ${{ inputs.package }}: ${{ inputs.version }} version (${{ inputs.custom_version || 'n/a' }} custom version)" | |
if: (!contains(github.event.head_commit.message, '[skip ci]') && !contains(github.event.head_commit.message, 'docs:')) | |
needs: build_and_test | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
with: | |
token: ${{ secrets.APIFY_SERVICE_ACCOUNT_GITHUB_TOKEN }} | |
fetch-depth: 0 | |
- name: Use Node.js 18 | |
uses: actions/setup-node@v4 | |
with: | |
node-version: 18 | |
cache: 'npm' | |
cache-dependency-path: 'package-lock.json' | |
- name: Turbo cache | |
id: turbo-cache | |
uses: actions/cache@v4 | |
with: | |
path: .turbo | |
key: turbo-${{ github.job }}-${{ github.ref_name }}-${{ github.sha }} | |
restore-keys: | | |
turbo-${{ github.job }}-${{ github.ref_name }}- | |
- name: Install Dependencies | |
run: npm ci | |
- name: Setup git user and npm | |
run: | | |
git config --global user.name "Apify Release Bot" | |
git config --global user.email "noreply@apify.com" | |
echo "access=public" > ~/.npmrc | |
echo "//registry.npmjs.org/:_authToken=${{ secrets.APIFY_SERVICE_ACCOUNT_NPM_TOKEN }}" >> ~/.npmrc | |
env: | |
NPM_TOKEN: ${{ secrets.APIFY_SERVICE_ACCOUNT_NPM_TOKEN }} | |
GIT_USER: "noreply@apify.com:${{ secrets.APIFY_SERVICE_ACCOUNT_GITHUB_TOKEN }}" | |
GH_TOKEN: ${{ secrets.APIFY_SERVICE_ACCOUNT_GITHUB_TOKEN }} | |
- name: Mark all other packages as private | |
run: node ./scripts/actions/markPrivate.mjs ${{ inputs.package }} | |
- name: Bump version to custom version | |
if: inputs.version == 'custom' && inputs.custom_version != '' | |
run: | | |
npx lerna version ${{ inputs.custom_version }} --no-private --force-publish --yes | |
env: | |
NPM_TOKEN: ${{ secrets.APIFY_SERVICE_ACCOUNT_NPM_TOKEN }} | |
GIT_USER: "noreply@apify.com:${{ secrets.APIFY_SERVICE_ACCOUNT_GITHUB_TOKEN }}" | |
GH_TOKEN: ${{ secrets.APIFY_SERVICE_ACCOUNT_GITHUB_TOKEN }} | |
- name: Bump version to ${{ inputs.version }} version | |
if: inputs.version != 'custom' | |
run: | | |
npx lerna version ${{ inputs.version }} --no-private --force-publish --yes | |
env: | |
NPM_TOKEN: ${{ secrets.APIFY_SERVICE_ACCOUNT_NPM_TOKEN }} | |
GIT_USER: "noreply@apify.com:${{ secrets.APIFY_SERVICE_ACCOUNT_GITHUB_TOKEN }}" | |
GH_TOKEN: ${{ secrets.APIFY_SERVICE_ACCOUNT_GITHUB_TOKEN }} | |
- name: Revert all other packages to public | |
run: node ./scripts/actions/unmarkPrivate.mjs | |
- name: Add all other changes to the release commit and push | |
run: | | |
git add . | |
git commit -m 'chore(release): update internal dependencies [skip ci]' | |
git push | |
env: | |
NPM_TOKEN: ${{ secrets.APIFY_SERVICE_ACCOUNT_NPM_TOKEN }} | |
GIT_USER: "noreply@apify.com:${{ secrets.APIFY_SERVICE_ACCOUNT_GITHUB_TOKEN }}" | |
GH_TOKEN: ${{ secrets.APIFY_SERVICE_ACCOUNT_GITHUB_TOKEN }} | |
- name: Publish to NPM | |
run: npm run release -- --yes --no-verify-access | |
env: | |
NPM_TOKEN: ${{ secrets.APIFY_SERVICE_ACCOUNT_NPM_TOKEN }} | |
GIT_USER: "noreply@apify.com:${{ secrets.APIFY_SERVICE_ACCOUNT_GITHUB_TOKEN }}" | |
GH_TOKEN: ${{ secrets.APIFY_SERVICE_ACCOUNT_GITHUB_TOKEN }} |