name: Release @latest env: YARN_IGNORE_NODE: 1 RETRY_TESTS: 1 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: '' concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true 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-22.04 ] node-version: [ 20, 22, 24 ] runs-on: ${{ matrix.os }} steps: - name: Checkout repository uses: actions/checkout@v7 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v6 with: node-version: ${{ matrix.node-version }} package-manager-cache: false - name: Enable corepack run: | corepack enable corepack prepare yarn@stable --activate - name: Activate cache for Node.js ${{ matrix.node-version }} uses: actions/setup-node@v6 with: cache: 'yarn' - name: Turbo cache id: turbo-cache uses: actions/cache@v6 with: path: .turbo key: turbo-${{ github.job }}-${{ github.ref_name }}-${{ github.sha }} restore-keys: | turbo-${{ github.job }}-${{ github.ref_name }}- - name: Install Dependencies run: yarn - name: Cache Playwright browsers uses: actions/cache@v6 with: path: ~/.cache/ms-playwright key: playwright-${{ runner.os }}-${{ hashFiles('**/yarn.lock') }} restore-keys: | playwright-${{ runner.os }}- - name: Install Playwright browsers timeout-minutes: 10 run: yarn playwright install --with-deps - name: Build run: yarn ci:build - name: Tests run: yarn test release: name: "Bump Crawlee: ${{ 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-22.04 steps: - name: Checkout repository uses: actions/checkout@v7 with: token: ${{ secrets.APIFY_SERVICE_ACCOUNT_GITHUB_TOKEN }} fetch-depth: 0 - name: Use Node.js 24 uses: actions/setup-node@v6 with: node-version: 24 package-manager-cache: false - name: Enable corepack run: | corepack enable corepack prepare yarn@stable --activate - name: Activate cache for Node.js 24 uses: actions/setup-node@v6 with: cache: 'yarn' - name: Turbo cache id: turbo-cache uses: actions/cache@v6 with: path: .turbo key: turbo-${{ github.job }}-${{ github.ref_name }}-${{ github.sha }} restore-keys: | turbo-${{ github.job }}-${{ github.ref_name }}- - name: Install Dependencies run: yarn - name: Build run: yarn ci:build - name: Bump version to custom version if: ${{ github.event.inputs.version == 'custom' && github.event.inputs.custom_version != '' }} run: yarn lerna version ${{ github.event.inputs.custom_version }} --force-publish --yes env: GH_TOKEN: ${{ secrets.APIFY_SERVICE_ACCOUNT_GITHUB_TOKEN }} GIT_AUTHOR_NAME: Apify Release Bot GIT_COMMITTER_NAME: Apify Release Bot GIT_AUTHOR_EMAIL: noreply@apify.com GIT_COMMITTER_EMAIL: noreply@apify.com - name: Bump version to ${{ github.event.inputs.version }} version if: ${{ github.event.inputs.version != 'custom' }} run: yarn lerna version ${{ github.event.inputs.version }} --force-publish --yes env: GH_TOKEN: ${{ secrets.APIFY_SERVICE_ACCOUNT_GITHUB_TOKEN }} GIT_AUTHOR_NAME: Apify Release Bot GIT_COMMITTER_NAME: Apify Release Bot GIT_AUTHOR_EMAIL: noreply@apify.com GIT_COMMITTER_EMAIL: noreply@apify.com - name: Pin versions in internal dependencies and update lockfile run: | yarn release:pin-versions yarn install --no-immutable - name: Commit changes id: commit uses: EndBug/add-and-commit@v10 with: author_name: Apify Release Bot author_email: noreply@apify.com message: 'chore(release): update internal dependencies [skip ci]' pull: '--rebase --autostash' - name: Publish packages uses: apify/actions/execute-workflow@v1.4.0 with: workflow: publish-to-npm.yml inputs: > { "ref": "${{ steps.commit.outputs.commit_long_sha || github.sha }}", "dist-tag": "prod" } - name: Trigger Docker image builds uses: peter-evans/repository-dispatch@v4 with: token: ${{ secrets.APIFY_SERVICE_ACCOUNT_GITHUB_TOKEN }} repository: apify/apify-actor-docker event-type: build-node-images version-docs: needs: release runs-on: ubuntu-22.04 if: (github.event.inputs.version == 'minor' || github.event.inputs.version == 'major') steps: - name: Checkout repository uses: actions/checkout@v7 with: ref: ${{ github.event.repository.default_branch }} token: ${{ secrets.APIFY_SERVICE_ACCOUNT_GITHUB_TOKEN }} fetch-depth: 0 - name: Use Node.js 24 uses: actions/setup-node@v6 with: node-version: 24 package-manager-cache: false - name: Install jq run: sudo apt-get install jq - name: Enable corepack run: | corepack enable corepack prepare yarn@stable --activate - name: Activate cache for Node.js 24 uses: actions/setup-node@v6 with: cache: 'yarn' - name: Install dependencies run: | # install project deps yarn # install website deps cd website yarn - name: Snapshot the current version run: | cd website VERSION=$(jq -r '.version' ../lerna.json) if [ -z "$VERSION" ]; then echo "Error: VERSION is empty. Ensure lerna.json exists and contains a valid .version field." exit 1 fi echo "VERSION=$VERSION" >> "$GITHUB_ENV" MAJOR_MINOR=$(echo $VERSION | cut -d. -f1,2) yarn docusaurus docs:version $MAJOR_MINOR yarn docusaurus api:version $MAJOR_MINOR - name: Commit and push the version snapshot uses: EndBug/add-and-commit@v10 with: author_name: Apify Release Bot author_email: noreply@apify.com message: 'docs: update docs for ${{ env.VERSION }} version' pull: '--rebase --autostash'