current commit
261028.14 · meta: bump actions/setup-node from 7.0.0 to 7.1.0
name: WPT update

on:
  schedule:
    # Run once a week at 12:00 AM UTC on Sunday.
    - cron: 0 0 * * 0
  workflow_dispatch:
    inputs:
      subsystems:
        description: Subsystem to run the update for
        required: false
        default: '["url", "urlpattern", "WebCryptoAPI"]'

permissions:
  contents: read

env:
  NODE_VERSION: lts/*

jobs:
  wpt-subsystem-update:
    if: github.repository == 'nodejs/node' || github.event_name == 'workflow_dispatch'
    runs-on: ubuntu-slim
    strategy:
      fail-fast: false
      matrix:
        subsystem: ${{ fromJSON(github.event.inputs.subsystems || '["url", "urlpattern", "WebCryptoAPI"]') }}

    steps:
      - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1  # v7.0.1
        with:
          persist-credentials: false

      - name: Install Node.js
        uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1  # v7.1.0
        with:
          node-version: ${{ env.NODE_VERSION }}

      - name: Install @node-core/utils
        run: npm install -g @node-core/utils

      - name: Setup @node-core/utils
        run: |
          ncu-config set username "$USERNAME"
          ncu-config set token "$GH_TOKEN"
          ncu-config set owner "${GITHUB_REPOSITORY_OWNER}"
          ncu-config set repo "$(echo "$GITHUB_REPOSITORY" | cut -d/ -f2)"
        env:
          USERNAME: ${{ secrets.JENKINS_USER }}
          GH_TOKEN: ${{ secrets.GH_USER_TOKEN }}

      - name: Update WPT for subsystem ${{ matrix.subsystem }}
        run: |
          git node wpt "$SUBSYSTEM"
          # TODO: Remove this workaround after @node-core/utils stops
          # regenerating test/fixtures/wpt/README.md for every subsystem
          # update.
          # git node wpt currently rewrites test/fixtures/wpt/README.md with a
          # generated summary for every subsystem update. versions.json is the
          # authoritative metadata, and keeping the README stable avoids
          # conflicts between concurrent WPT update PRs.
          git restore test/fixtures/wpt/README.md
        env:
          SUBSYSTEM: ${{ matrix.subsystem }}

      - name: Retrieve new version commit
        run: |
          new_version="$(
            node -p 'require("./test/fixtures/wpt/versions.json")[process.argv[1]].commit' "$SUBSYSTEM"
          )"
          {
            echo "long_version=$new_version"
            echo "short_version=${new_version:0:10}"
          } >> "$GITHUB_ENV"
        env:
          SUBSYSTEM: ${{ matrix.subsystem }}

      - name: Open or update PR for the subsystem update
        uses: gr2m/create-or-update-pull-request-action@b65137ca591da0b9f43bad7b24df13050ea45d1b  # v1.10.1
        with:
          # The create-or-update-pull-request-action matches the branch name by prefix,
          # which is why we need to add the -wpt suffix. If we dont do that, we risk matching wrong PRs,
          # like for example "url" mistakenly matching and updating the "urlpattern" PR
          # as seen in https://github.com/nodejs/node/pull/57368
          branch: actions/update-${{ matrix.subsystem }}-wpt
          author: Node.js GitHub Bot <github-bot@iojs.org>
          title: 'test: update WPT for ${{ matrix.subsystem }} to ${{ env.short_version }}'
          commit-message: 'test: update WPT for ${{ matrix.subsystem }} to ${{ env.short_version }}'
          labels: test
          update-pull-request-title-and-body: true
          body: >
            This is an automated update of the WPT for ${{ matrix.subsystem }} to
            https://github.com/web-platform-tests/wpt/commit/${{ env.long_version }}.
        env:
          GITHUB_TOKEN: ${{ secrets.GH_USER_TOKEN }}