Always specify exact versions of tools and dependencies in CI/CD workflows rather than using ‘latest’ or floating versions. This ensures build reproducibility, prevents unexpected failures when upstream dependencies change, and makes debugging easier.
Example:
# Instead of this (unstable):
- name: Setup golangci-lint
uses: golangci/golangci-lint-action@v2
with:
version: latest
# Do this (stable):
- name: Setup golangci-lint
uses: golangci/golangci-lint-action@v2
with:
version: v1.41.1
args: --verbose
Similarly, when defining test matrices, explicitly specify all supported versions to ensure comprehensive coverage across environments.
Enter the URL of a public GitHub repository