diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000000..4c0d4bddb5 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,23 @@ +version: 2 + +updates: + # Actions are pinned to commit SHAs, which never drift on their own. Dependabot is + # what turns that into a reviewed update instead of a silent one: it opens a PR when + # a pinned action has a new release, bumping both the SHA and its version comment. + - package-ecosystem: github-actions + directory: / + schedule: + interval: weekly + day: monday + time: '04:00' + timezone: Europe/Berlin + # One grouped PR per week rather than one per action. + groups: + github-actions: + patterns: + - '*' + open-pull-requests-limit: 5 + labels: + - dependencies + commit-message: + prefix: '`General`:' diff --git a/.github/workflows/check-translation-keys.yml b/.github/workflows/check-translation-keys.yml index 39b16a50ea..11399e5f04 100644 --- a/.github/workflows/check-translation-keys.yml +++ b/.github/workflows/check-translation-keys.yml @@ -17,8 +17,8 @@ jobs: name: Check if translation keys are consistent runs-on: ubuntu-latest steps: - - uses: actions/checkout@v6 - - uses: actions/setup-python@v6 + - uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6.1.0 + - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0 with: python-version: '3.14' - name: Check if translation keys match diff --git a/.github/workflows/deploy-user-documentation.yml b/.github/workflows/deploy-user-documentation.yml index 3483bdb23e..82166f48ae 100644 --- a/.github/workflows/deploy-user-documentation.yml +++ b/.github/workflows/deploy-user-documentation.yml @@ -23,12 +23,12 @@ jobs: build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6.1.0 - name: Setup pnpm - uses: pnpm/action-setup@v6 + uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10 - - uses: actions/setup-node@v6 + - uses: actions/setup-node@249970729cb0ef3589644e2896645e5dc5ba9c38 # v6.5.0 with: node-version: ${{ env.NODE_VERSION }} cache: 'pnpm' @@ -43,7 +43,7 @@ jobs: run: pnpm run build - name: Upload artifact - uses: actions/upload-pages-artifact@v5 + uses: actions/upload-pages-artifact@fc324d3547104276b827a68afc52ff2a11cc49c9 # v5.0.0 with: path: docs/build @@ -56,4 +56,4 @@ jobs: steps: - name: Deploy to GitHub Pages id: deployment - uses: actions/deploy-pages@v5 + uses: actions/deploy-pages@cd2ce8fcbc39b97be8ca5fce6e763baed58fa128 # v5.0.0 diff --git a/.github/workflows/pr-check.yml b/.github/workflows/pr-check.yml index be3d7567ec..e358bd68c1 100644 --- a/.github/workflows/pr-check.yml +++ b/.github/workflows/pr-check.yml @@ -36,11 +36,13 @@ jobs: validate-pr-title: name: Validate PR Title - if: github.event_name == 'pull_request' + # Dependabot titles come from a template, and whether it writes "Bump" or "bump" is + # decided by its own heuristic, so the capitalisation rule below cannot be relied on. + if: github.event_name == 'pull_request' && github.event.pull_request.user.login != 'dependabot[bot]' runs-on: ubuntu-latest timeout-minutes: 1 steps: - - uses: Slashgear/action-check-pr-title@v5.0.1 + - uses: Slashgear/action-check-pr-title@161cede0311ec624ae3ee76a2c27522f7b6fa2d8 # v5.0.1 with: regexp: '^`(Bugfix|Development|Documentation|Test|General)`:\s[A-Z].*$' @@ -49,8 +51,8 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 2 steps: - - uses: actions/checkout@v6 - - uses: gradle/actions/wrapper-validation@v5 + - uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6.1.0 + - uses: gradle/actions/wrapper-validation@0723195856401067f7a2779048b490ace7a47d7c # v5.0.2 with: min-wrapper-count: 1 @@ -65,10 +67,10 @@ jobs: needs: validate-gradle-wrapper steps: - name: Checkout code - uses: actions/checkout@v6 + uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6.1.0 - name: Setup Java - uses: actions/setup-java@v5 + uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5.7.0 with: distribution: 'temurin' java-version: | @@ -77,7 +79,7 @@ jobs: cache: 'gradle' - name: Setup Gradle - uses: gradle/actions/setup-gradle@v5 + uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5.0.2 with: gradle-version: ${{ env.GRADLE_VERSION }} @@ -114,21 +116,21 @@ jobs: # --- Upload Results --- - name: Upload JUnit Test Results if: success() || failure() - uses: actions/upload-artifact@v7 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: junit-test-results path: build/test-results/test/*.xml - name: Upload Coverage Report if: success() || failure() - uses: actions/upload-artifact@v7 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: coverage-report-server path: build/reports/jacoco/test/ # --- Test Reports --- - name: Annotate Test Results - uses: ashley-taylor/junit-report-annotations-action@f9c1a5cbe28479439f82b80a5402a6d3aa1990ac + uses: ashley-taylor/junit-report-annotations-action@f9c1a5cbe28479439f82b80a5402a6d3aa1990ac # untagged master commit, 2023-02-22 if: always() && github.event.pull_request.user.login != 'dependabot[bot]' with: access-token: ${{ secrets.GITHUB_TOKEN }} @@ -136,7 +138,7 @@ jobs: numFailures: 99 - name: Test Report - uses: dorny/test-reporter@v2 + uses: dorny/test-reporter@df6247429542221bc30d46a036ee47af1102c451 # v2.7.0 if: success() || failure() with: name: Server Tests & Architecture @@ -145,7 +147,7 @@ jobs: - name: Post Coverage Comment if: failure() && github.event_name == 'pull_request' - uses: peter-evans/create-or-update-comment@v5 + uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5.0.0 with: token: ${{ secrets.GITHUB_TOKEN }} issue-number: ${{ github.event.pull_request.number }} @@ -171,15 +173,15 @@ jobs: timeout-minutes: 30 steps: - name: Checkout code - uses: actions/checkout@v6 + uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6.1.0 with: fetch-depth: 0 - name: Setup pnpm - uses: pnpm/action-setup@v6 + uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10 - name: Setup Node.js - uses: actions/setup-node@v6 + uses: actions/setup-node@249970729cb0ef3589644e2896645e5dc5ba9c38 # v6.5.0 with: node-version: ${{ env.NODE_VERSION }} cache: 'pnpm' @@ -213,14 +215,14 @@ jobs: # --- Upload Results --- - name: Upload Coverage Report if: success() || failure() - uses: actions/upload-artifact@v7 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: coverage-report-client path: build/test-results/vitest/coverage/ - name: Post Coverage Comment if: failure() && github.event_name == 'pull_request' - uses: peter-evans/create-or-update-comment@v5 + uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5.0.0 with: token: ${{ secrets.GITHUB_TOKEN }} issue-number: ${{ github.event.pull_request.number }} @@ -252,24 +254,24 @@ jobs: pull-requests: write steps: - name: Checkout code - uses: actions/checkout@v6 + uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6.1.0 with: ref: ${{ github.event.pull_request.head.ref }} fetch-depth: 0 token: ${{ secrets.BOT_USER_TOKEN }} - name: Setup Java - uses: actions/setup-java@v5 + uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5.7.0 with: distribution: 'temurin' java-version: ${{ env.JAVA_VERSION }} cache: 'gradle' - name: Setup pnpm - uses: pnpm/action-setup@v6 + uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10 - name: Setup Node.js - uses: actions/setup-node@v6 + uses: actions/setup-node@249970729cb0ef3589644e2896645e5dc5ba9c38 # v6.5.0 with: node-version: ${{ env.NODE_VERSION }} cache: 'pnpm' @@ -381,25 +383,25 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@v6 + uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6.1.0 - name: Setup Gradle - uses: gradle/actions/setup-gradle@v5 + uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5.0.2 with: gradle-version: ${{ env.GRADLE_VERSION }} - name: Setup Java - uses: actions/setup-java@v5 + uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5.7.0 with: distribution: 'temurin' java-version: ${{ env.JAVA_VERSION }} cache: 'gradle' - name: Setup pnpm - uses: pnpm/action-setup@v6 + uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10 - name: Setup Node.js - uses: actions/setup-node@v6 + uses: actions/setup-node@249970729cb0ef3589644e2896645e5dc5ba9c38 # v6.5.0 with: node-version: ${{ env.NODE_VERSION }} cache: 'pnpm' @@ -528,7 +530,7 @@ jobs: # The treosh/lighthouse-ci-action ships its own bundled @lhci/cli, so no # separate install step is needed. - name: ✅ Run Lighthouse for ${{ matrix.role }} - uses: treosh/lighthouse-ci-action@3e7e23fb74242897f95c0ba9cabad3d0227b9b18 + uses: treosh/lighthouse-ci-action@3e7e23fb74242897f95c0ba9cabad3d0227b9b18 # v12.6.2 with: urls: ${{ steps.lighthouse-urls.outputs.urls }} configPath: ./lighthouserc.json @@ -552,14 +554,14 @@ jobs: # --- Upload Logs on Failure --- - name: Upload Client Log if: failure() && !vars.AET_CLIENT_URL - uses: actions/upload-artifact@v7 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: lighthouse-client-log-${{ matrix.role }} path: client.log - name: Upload Server Log if: failure() - uses: actions/upload-artifact@v7 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: lighthouse-server-log-${{ matrix.role }} path: server.log diff --git a/.github/workflows/pullrequest-closed.yml b/.github/workflows/pullrequest-closed.yml index 8df5e86ac0..f7e3efd677 100644 --- a/.github/workflows/pullrequest-closed.yml +++ b/.github/workflows/pullrequest-closed.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Delete image - uses: bots-house/ghcr-delete-image-action@v1.1.0 + uses: bots-house/ghcr-delete-image-action@3827559c68cb4dcdf54d813ea9853be6d468d3a4 # v1.1.0 with: owner: ${{ github.repository_owner }} name: doc-apply diff --git a/.github/workflows/pullrequest-coverage-reporter.yml b/.github/workflows/pullrequest-coverage-reporter.yml index d14c4ef067..d497ee486f 100644 --- a/.github/workflows/pullrequest-coverage-reporter.yml +++ b/.github/workflows/pullrequest-coverage-reporter.yml @@ -21,7 +21,7 @@ jobs: steps: - name: Get PR info id: pr - uses: actions/github-script@v8 + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 with: script: | const prs = context.payload.workflow_run.pull_requests; @@ -44,7 +44,7 @@ jobs: } core.setFailed('Could not find PR'); - - uses: actions/checkout@v6 + - uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6.1.0 with: ref: ${{ github.event.workflow_run.head_sha }} fetch-depth: 0 @@ -53,7 +53,7 @@ jobs: run: git fetch origin "${{ steps.pr.outputs.base_ref }}" - name: Download client coverage artifact - uses: actions/download-artifact@v4 + uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: name: coverage-report-client path: build/test-results/vitest/coverage/ @@ -62,7 +62,7 @@ jobs: continue-on-error: true - name: Download server coverage artifact - uses: actions/download-artifact@v4 + uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: name: coverage-report-server path: build/reports/jacoco/test/ @@ -71,7 +71,7 @@ jobs: continue-on-error: true - name: Setup Node.js - uses: actions/setup-node@v6 + uses: actions/setup-node@249970729cb0ef3589644e2896645e5dc5ba9c38 # v6.5.0 with: node-version: 24 @@ -99,7 +99,7 @@ jobs: fi - name: Update PR description - uses: actions/github-script@v8 + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 with: github-token: ${{ secrets.GITHUB_TOKEN }} script: | diff --git a/.github/workflows/pullrequest-labeler.yml b/.github/workflows/pullrequest-labeler.yml index ba6ba003fb..6fe1064cf8 100644 --- a/.github/workflows/pullrequest-labeler.yml +++ b/.github/workflows/pullrequest-labeler.yml @@ -7,7 +7,7 @@ jobs: label: runs-on: ubuntu-latest steps: - - uses: actions/labeler@v6 + - uses: actions/labeler@b8dd2d9be0f68b860e7dae5dae7d772984eacd6d # v6.2.0 with: repo-token: '${{ secrets.GITHUB_TOKEN }}' sync-labels: true diff --git a/.github/workflows/pullrequest-opened.yml b/.github/workflows/pullrequest-opened.yml index 3876aa372f..eb29cf2d23 100644 --- a/.github/workflows/pullrequest-opened.yml +++ b/.github/workflows/pullrequest-opened.yml @@ -8,6 +8,6 @@ jobs: runs-on: ubuntu-latest steps: - name: Assign Pull Request to its Author - uses: technote-space/assign-author@v1 + uses: technote-space/assign-author@9558557c5c4816f38bd06176fbc324ba14bb3160 # v1.6.2 with: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/pullrequest-ready-to-merge-validator.yml b/.github/workflows/pullrequest-ready-to-merge-validator.yml index 64227e878f..15a95a7b10 100644 --- a/.github/workflows/pullrequest-ready-to-merge-validator.yml +++ b/.github/workflows/pullrequest-ready-to-merge-validator.yml @@ -15,7 +15,7 @@ jobs: steps: - name: Validate PR is ready to merge - uses: actions/github-script@v8 + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 with: github-token: ${{ secrets.GITHUB_TOKEN }} script: | diff --git a/.github/workflows/pullrequest-readyforreview.yml b/.github/workflows/pullrequest-readyforreview.yml index 540eee85b8..a843955741 100644 --- a/.github/workflows/pullrequest-readyforreview.yml +++ b/.github/workflows/pullrequest-readyforreview.yml @@ -8,7 +8,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Label "ready for review" - uses: actions/github-script@v8 + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 with: github-token: ${{secrets.GITHUB_TOKEN}} script: | diff --git a/.github/workflows/pullrequest-stale.yml b/.github/workflows/pullrequest-stale.yml index ec11187be8..1fc0ed2371 100644 --- a/.github/workflows/pullrequest-stale.yml +++ b/.github/workflows/pullrequest-stale.yml @@ -9,7 +9,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check for stale PRs - uses: actions/stale@v10 + uses: actions/stale@1e223db275d687790206a7acac4d1a11bd6fe629 # v10.4.0 with: days-before-stale: 7 days-before-close: 14