diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5051716..5dfc44a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -15,8 +15,19 @@ jobs: build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v7 - - uses: actions/setup-node@v7 + # Every `uses:` in this repository is pinned to a full commit SHA, with + # the release it belongs to in the trailing comment, and the repository + # requires it -- an unpinned ref fails the run rather than quietly + # resolving. A tag is a mutable pointer: `@v7` is whatever the publisher + # last moved it to, so trusting one is trusting every future version of + # that action, including the one pushed by whoever compromises the + # account. Read the comment for the version; the SHA is what runs. + # + # Dependabot updates both halves together on its weekly github-actions + # run, so this costs nothing to keep current -- do not "simplify" a pin + # back to a tag. + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: node-version: 26 cache: npm diff --git a/.github/workflows/cleanup.yml b/.github/workflows/cleanup.yml index fb9ddbb..95fb156 100644 --- a/.github/workflows/cleanup.yml +++ b/.github/workflows/cleanup.yml @@ -39,11 +39,12 @@ jobs: permissions: packages: write steps: - # Pinned to a commit rather than a moving major tag. This action is - # handed `packages: write` and its whole job is deletion, so a tag - # repointed at something else -- by a compromise or a mistake upstream -- - # is a bad day. v1.2.2. - - uses: dataaxiom/ghcr-cleanup-action@d52806a0dc70b430571a37da1fde39733ffd640f + # The only third-party action here that is not published by GitHub or + # Docker, and the one with the most to lose: it is handed + # `packages: write` and its whole job is deletion, so a ref repointed at + # something else -- by a compromise or a mistake upstream -- is a bad + # day. It was pinned to a commit long before the rest of them were. + - uses: dataaxiom/ghcr-cleanup-action@d52806a0dc70b430571a37da1fde39733ffd640f # v1.2.2 with: owner: Coffey-Labs package: ihasmail diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index a734e8d..20797c2 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -76,11 +76,11 @@ jobs: version: ${{ steps.v.outputs.version }} docker_tag: ${{ steps.v.outputs.docker_tag }} steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ inputs.ref || github.ref }} fetch-depth: 0 - - uses: actions/setup-node@v7 + - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: node-version: 26 - id: v @@ -108,18 +108,18 @@ jobs: - platform: linux/arm64 runner: ubuntu-24.04-arm steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ inputs.ref || github.ref }} - - uses: docker/setup-buildx-action@v4 - - uses: docker/login-action@v4 + - uses: docker/setup-buildx-action@594f3bf4285d9ea8dc53c9a0c9c4092420091003 # v4.4.0 + - uses: docker/login-action@dbcb813823bdd20940b903addbd779551569679f # v4.6.0 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Build and push by digest id: push - uses: docker/build-push-action@v7 + uses: docker/build-push-action@c3c9e263c25d99ce0380d002d59b67737d91b0dc # v7.4.0 with: context: . platforms: ${{ matrix.platform }} @@ -140,7 +140,7 @@ jobs: # `image@sha256:sha256:...` when the reference is rebuilt. digest="${{ steps.push.outputs.digest }}" touch "/tmp/digests/${digest#sha256:}" - - uses: actions/upload-artifact@v7 + - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: # One artifact per platform; the merge job globs them back together. name: digest-${{ strategy.job-index }} @@ -157,13 +157,13 @@ jobs: contents: read packages: write steps: - - uses: actions/download-artifact@v8 + - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: path: /tmp/digests pattern: digest-* merge-multiple: true - - uses: docker/setup-buildx-action@v4 - - uses: docker/login-action@v4 + - uses: docker/setup-buildx-action@594f3bf4285d9ea8dc53c9a0c9c4092420091003 # v4.4.0 + - uses: docker/login-action@dbcb813823bdd20940b903addbd779551569679f # v4.6.0 with: registry: ghcr.io username: ${{ github.actor }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 89ed715..be509e9 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -54,11 +54,11 @@ jobs: previous: ${{ steps.decide.outputs.previous }} count: ${{ steps.decide.outputs.count }} steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: main fetch-depth: 0 - - uses: actions/setup-node@v7 + - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: node-version: 26 - id: decide @@ -130,7 +130,7 @@ jobs: permissions: contents: write steps: - - uses: actions/checkout@v7 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: main fetch-depth: 0