Skip to main content

ADR-013 Pinning Versions

Date: 21-08-2025

Status

✅ Accepted

Context

Package management tools and similar marketplace ecosystems (npm, github actions etc) have seen an increase in the number of supply chain attacks. The recent successful exploitation of tj-actions/changes-files where all existing releases and tags where repointed to malicous code is a prime example of the direction attacks are taking.

Similar supply chain attacks have happend to most of the common providers with popular libraries and base docker images being obvious targets due to their widespread use. These are happening more frequently and as they are generally part of our build steps there is significant security risks such as exfiltration of secrets and credentials.

Decision

All github actions will be imported using the specific git sha / hash (example: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0). Use renovate to aid in keeping this updated with its helpers:pinGitHubActionDigests configuration option.

Where possible, docker images will be pinned to specific sha (example: golang:1.24.4-alpine@sha256:68932fa6d4d4059845c8f40ad7e654e626f3ebd3706eef7846f319293ab5cb7a). Renovate has a docker:pinDigests helper to keep these updated.

Where possible, application code will pin to specific versions of dependancies with their respective package managers.

Consequences

  • Initial effort required to find and update current GitHub actions
  • Additional overhead when creating and updating docker images to be be more exact
  • Extra care when using third party tools
This page was last reviewed on 21 August 2025. It needs to be reviewed again on 21 August 2027 by the page owner #opg-webops-community .
This page was set to be reviewed before 21 August 2027 by the page owner #opg-webops-community. This might mean the content is out of date.