Skip to content

Continuous Integration/Test attest action fails in forks because it uses pull_request #204

@jsoref

Description

@jsoref

https://github.com/actions/attest/actions/runs/12921612078/job/36045041753?pr=203

Run ./
Error: Error: missing "id-token" permission. Please add "permissions: id-token: write" to your workflow.

It is possible to fix this in various ways:

But, it's also possible to just do something like:

 on:
   pull_request:
     branches:
       - main
   push:
-    branches:
-      - main
-      - 'releases/*'
+    # no constraints for push, otherwise there's no CI for PRs from forks which is problematic
 permissions: {}
 
 jobs:
   test-typescript:
     name: TypeScript Tests
     runs-on: ubuntu-latest
     permissions:
       contents: read
 
     steps:
       - name: Checkout
         id: checkout
         uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
 
       - name: Setup Node.js
         id: setup-node
         uses: actions/setup-node@b39b52d1213e96004bfcb1c61a8a6fa8ab84f3e8 # v4.0.1
         with:
           node-version-file: .node-version
           cache: npm
 
       - name: Install Dependencies
         id: npm-ci
         run: npm ci
 
       - name: Check Format
         id: npm-format-check
         run: npm run format:check
 
       - name: Lint
         id: npm-lint
         run: npm run lint
 
       - name: Test
         id: npm-ci-test
         run: npm run ci-test
 
   test-attest:
     name: Test attest action
     runs-on: ubuntu-latest
     permissions:
       contents: read
       attestations: write
       id-token: write
     env:
       SUBJECT: /repos/${{ github.repository }}/tarball/${{ github.sha }}
     steps:
       - name: Checkout
         id: checkout
         uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
       - name: Calculate subject digest
         id: subject
         env:
           GH_TOKEN: ${{ github.token }}
         run: |
           SHA_256=$(gh api "${{ env.SUBJECT }}" | shasum -a 256 | cut -d " " -f 1)
           echo "sha-256=${SHA_256}" >> "$GITHUB_OUTPUT"
+      - name: Skip for PRs from forks
+        shell: bash
+        id: skip
+        if: github.event_name != 'push' || github.pull_request.head.user.login != github.pull_request.base.user.login
+        run: |
+          echo '::warning title=Test attest action skipped::Testing action requires permissions and isn't done for PRs from forks.'
+          echo 'skip=1' >> "$GITHUB_OUTPUT"
       - name: Run attest
         id: attest
+        if: ${{ ! steps.skip.outputs.skip }}
         env:
           INPUT_PRIVATE-SIGNING: 'true'
         uses: ./
         with:
           subject-name: 'https://api.github.com${{ env.SUBJECT }}'
           subject-digest: 'sha256:${{ steps.subject.outputs.sha-256 }}'
           predicate-type: 'https://in-toto.io/attestation/release/v0.1'
           predicate:
             '{"purl":"pkg:github/${{ github.repository }}@${{ github.sha }}"}'

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions