diff --git a/.github/workflows/check.yaml b/.github/workflows/check.yaml index 4f608306..d35e6327 100644 --- a/.github/workflows/check.yaml +++ b/.github/workflows/check.yaml @@ -3,72 +3,38 @@ name: Check on: - pull_request: + pull_request: + workflow_call: jobs: - # NPM install is done in a separate job and cached to speed up the following jobs. - build_and_test: - name: Build & Test - if: ${{ !contains(github.event.head_commit.message, '[skip ci]') }} - runs-on: ${{ matrix.os }} + lint_and_test: + name: Lint & Test + if: ${{ !contains(github.event.head_commit.message, '[skip ci]') }} + runs-on: ubuntu-22.04 - strategy: - matrix: - os: [ubuntu-22.04] # add windows-latest later - node-version: [14, 16, 18] + strategy: + matrix: + node-version: [14, 16, 18] - steps: - - - uses: actions/checkout@v2 - - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v1 - with: - node-version: ${{ matrix.node-version }} - - - name: Cache Node Modules - if: ${{ matrix.node-version == 18 }} - uses: actions/cache@v4 - with: - path: | - node_modules - build - key: cache-${{ github.run_id }}-v18 - - - name: Install Dependencies - run: npm install - - - name: Add localhost-test to Linux hosts file - if: ${{ matrix.os == 'ubuntu-22.04' }} - run: sudo echo "127.0.0.1 localhost-test" | sudo tee -a /etc/hosts -# - -# name: Add localhost-test to Windows hosts file -# if: ${{ matrix.os == 'windows-latest' }} -# run: echo "`n127.0.0.1 localhost-test">>C:\Windows\System32\drivers\etc\hosts - - - name: Run Tests - run: npm test + steps: + - name: Checkout repository + uses: actions/checkout@v6 - lint: - name: Lint - needs: [build_and_test] - runs-on: ubuntu-22.04 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v6 + with: + node-version: ${{ matrix.node-version }} - steps: - - - uses: actions/checkout@v2 - - - name: Use Node.js 18 - uses: actions/setup-node@v1 - with: - node-version: 18 - - - name: Load Cache - uses: actions/cache@v4 - with: - path: | - node_modules - build - key: cache-${{ github.run_id }}-v18 - - - run: npm run lint + - name: Install Dependencies + run: npm install + + # Lint only on the latest Node.js version to save time. + - name: Lint code + if: ${{ matrix.node-version == 18 }} + run: npm run lint + + - name: Add localhost-test to Linux hosts file + run: sudo echo "127.0.0.1 localhost-test" | sudo tee -a /etc/hosts + + - name: Run Tests + run: npm test diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index ea9a4b95..434bb4f5 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -7,114 +7,51 @@ on: - master # A release via GitHub releases will deploy a latest version release: - types: [ published ] + types: [published] + +# Necessary permissions for publishing to NPM with OIDC +permissions: + contents: write + id-token: write jobs: - # NPM install is done in a separate job and cached to speed up the following jobs. - build_and_test: - name: Build & Test - if: ${{ !contains(github.event.head_commit.message, '[skip ci]') }} - runs-on: ${{ matrix.os }} + lint_and_test: + name: Lint and test + uses: ./.github/workflows/check.yaml - strategy: - matrix: - os: [ubuntu-22.04] # add windows-latest later - node-version: [14, 16, 18] + deploy: + name: Publish to NPM + needs: [lint_and_test] + runs-on: ubuntu-22.04 steps: - - - uses: actions/checkout@v2 - - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v1 - with: - node-version: ${{ matrix.node-version }} - - - name: Cache Node Modules - if: ${{ matrix.node-version == 18 }} - uses: actions/cache@v4 + - name: Checkout repository + uses: actions/checkout@v6 + + - name: Use Node.js 24 + uses: actions/setup-node@v6 with: - path: | - node_modules - build - key: cache-${{ github.run_id }}-v18 - - - name: Install Dependencies + node-version: 24 + + - name: Install dependencies run: npm install - - name: Add localhost-test to Linux hosts file - if: ${{ matrix.os == 'ubuntu-22.04' }} - run: sudo echo "127.0.0.1 localhost-test" | sudo tee -a /etc/hosts -# - -# name: Add localhost-test to Windows hosts file -# if: ${{ matrix.os == 'windows-latest' }} -# run: echo "`n127.0.0.1 localhost-test">>C:\Windows\System32\drivers\etc\hosts - - - name: Run Tests - run: npm test - lint: - name: Lint - needs: [build_and_test] - runs-on: ubuntu-22.04 + # Determine if this is a beta or latest release + - name: Get release tag + id: get_release_tag + run: echo "release_tag=$(if [ ${{ github.event_name }} = release ]; then echo latest; else echo beta; fi)" >> $GITHUB_OUTPUT - steps: - - - uses: actions/checkout@v2 - - - name: Use Node.js 18 - uses: actions/setup-node@v1 - with: - node-version: 18 - - - name: Load Cache - uses: actions/cache@v4 - with: - path: | - node_modules - build - key: cache-${{ github.run_id }}-v18 - - - run: npm run lint + # Check version consistency and increment pre-release version number for beta only. + - name: Bump pre-release version + if: steps.get_release_tag.outputs.release_tag == 'beta' + run: node ./.github/scripts/before-beta-release.js + - name: Publish to NPM + run: npm publish --tag ${{ steps.get_release_tag.outputs.release_tag }} - # The deploy job is long but there are only 2 important parts. NPM publish - # and triggering of docker image builds in the apify-actor-docker repo. - deploy: - name: Publish to NPM - needs: [lint] - runs-on: ubuntu-22.04 - steps: - - - uses: actions/checkout@v2 - - - uses: actions/setup-node@v1 - with: - node-version: 18 - registry-url: https://registry.npmjs.org/ - - - name: Load Cache - uses: actions/cache@v4 - with: - path: | - node_modules - build - key: cache-${{ github.run_id }}-v18 - - - # Determine if this is a beta or latest release - name: Set Release Tag - run: echo "RELEASE_TAG=$(if [ ${{ github.event_name }} = release ]; then echo latest; else echo beta; fi)" >> $GITHUB_ENV - - - # Check version consistency and increment pre-release version number for beta only. - name: Bump pre-release version - if: env.RELEASE_TAG == 'beta' - run: node ./.github/scripts/before-beta-release.js - - - name: Publish to NPM - run: NODE_AUTH_TOKEN=${{secrets.NPM_TOKEN}} npm publish --tag ${{ env.RELEASE_TAG }} --access public - - - # Latest version is tagged by the release process so we only tag beta here. - name: Tag Version - if: env.RELEASE_TAG == 'beta' + # Latest version is tagged by the release process so we only tag beta here. + - name: Tag version + if: steps.get_release_tag.outputs.release_tag == 'beta' run: | git_tag=v`node -p "require('./package.json').version"` git tag $git_tag