Skip to content

Commit ab812cb

Browse files
Apply Databricks Labs Repository Lockdown policy (#19)
* Add scripts/security/ action-pinning tooling Implements the three-script workflow from the Databricks Labs Repository Lockdown policy: list-external-actions -> resolve-action-ref -> pin-gh-actions. - list-external-actions: emits every third-party action referenced under .github/ (requires yq by Mike Farah). - resolve-action-ref: for each action, finds the most recent release tag published before the cutoff (2026-03-10T00:00:00Z) and resolves it to a commit SHA. Handles both mono-repo conventions: subpath-prefixed tags (databrickslabs/sandbox/acceptance -> acceptance/v0.4.4) and top-level shared tags (github/codeql-action/analyze -> v4.32.6, where the subpath is just a directory inside a repo using a unified tag series). - pin-gh-actions: consumes resolve-action-ref output, rewrites every matching `uses:` under .github/ with the SHA form + tag comment, and stages (but does not commit) the result. Skips databricks/databrickslabs actions per policy. Deviates from the blueprint reference in one way: does not auto-create or switch branches, because GeoBrix manages branches manually. README documents the typical flow and the 2026-03-10 cutoff. Co-authored-by: Isaac * Pin external GitHub Actions to commit SHAs (cutoff 2026-03-10) Every third-party `uses:` under .github/workflows/ and .github/actions/ is now pinned to the commit SHA of the most recent release published before 2026-03-10T00:00:00Z, with the release tag preserved as an inline comment for cross-reference (the comment is informational only — reviewers must re-verify the SHA against the upstream release). Generated by running: ./scripts/security/list-external-actions \ | xargs ./scripts/security/resolve-action-ref \ | ./scripts/security/pin-gh-actions Resolutions (all 15 external refs, ordered; every ref was on a mutable tag prior to this change): actions/cache@v4, v5 -> cdf6c1fa... # v5.0.3 actions/checkout@v5 -> de0fac2e... # v6.0.2 (major bump) actions/deploy-pages@v4 -> d6db9016... # v4.0.5 actions/download-artifact@v5 -> 70fc10c6... # v8.0.0 (major bump) actions/setup-java@v5 -> be666c2f... # v5.2.0 actions/setup-node@v4 -> 53b83947... # v6.3.0 (major bump) actions/setup-python@v5 -> a309ff8b... # v6.2.0 (major bump) actions/upload-artifact@v5 -> bbbca2dd... # v7.0.0 (major bump) actions/upload-pages-artifact@v3-> 7b1f4a76... # v4.0.0 (major bump) codecov/codecov-action@v5 -> 671740ac... # v5.5.2 github/codeql-action/*@v4 -> 0d579ffd... # v4.32.6 pypa/gh-action-pypi-publish@... -> ed0c5393... # v1.13.0 Major-version jumps are consistent with the policy ("latest release before the cutoff") but carry breaking-change risk — reviewers should validate each bump against the action's CHANGELOG before merge. In particular, upload-artifact v4+ and download-artifact v4+ changed artifact immutability semantics; the new versions may interact with the existing upload_artifacts composite action in ways worth exercising under CI before unblocking. Local composite action refs (./.github/actions/*) are unaffected — they're first-party. Co-authored-by: Isaac * Scope non-exempt secrets to environment: runtime; disable release workflows Databricks Labs Repository Lockdown policy requires any workflow using a non-exempt secret (anything other than GITHUB_TOKEN or CODECOV_TOKEN) to run inside a single protected GitHub Environment. GeoBrix uses REPO_ACCESS_TOKEN (PAT fallback for private-repo checkout) across most workflows, so every job that calls actions/checkout with that token now sets `environment: runtime`. Changes: - Added `permissions: contents: read` at top level where missing (codeql-analysis, publish-maven, release) and removed stray top-level `id-token: write` from build_main / build_python / build_scala / build_scala_by_package / codecov-scala-parallel / codecov-upload (none of those jobs request OIDC tokens). - deploy-docs: moved `pages: write` and `id-token: write` from top level down to the deploy job only (least privilege). The build job keeps `environment: runtime` for its REPO_ACCESS_TOKEN checkout; the deploy job keeps its existing `environment: github-pages`. - doc-tests: added `environment: runtime` on all three (currently disabled) jobs that perform REPO_ACCESS_TOKEN checkouts, so they are compliant when re-enabled. - release.yml: changed `environment: release` -> `environment: runtime` to converge on the single protected env the policy expects. - release.yml + publish-maven.yml: DISABLED via `if: false` on their publish jobs with a banner comment explaining the policy context and how to re-enable. GeoBrix is not publishing to PyPI or GitHub Packages from Actions today; we will coordinate with Labs before re-enabling. Exempt secrets per policy (GITHUB_TOKEN, CODECOV_TOKEN) are untouched and do not require the protected environment. Co-authored-by: Isaac * Add 7-day Dependabot cooldown; document github-actions ecosystem opt-out Labs Repository Lockdown policy: every Dependabot ecosystem in the repo must apply a cooldown so we are not the first adopters of a just-released (possibly compromised) version. Applied `cooldown.default-days: 7` to both maven and pip ecosystems. The policy also excludes `github-actions` from Dependabot entirely — action SHAs are refreshed manually via scripts/security/pin-gh-actions so bumps are reviewed as part of the security workflow rather than as auto-opened PRs. Added a comment documenting the intentional absence. Co-authored-by: Isaac * Pin base image digest; checksum-verify Hadoop/GDAL/Maven downloads Databricks Labs Repository Lockdown policy requires all build-time binary fetches to be integrity-verified and all base images to be pinned by digest so a compromised registry/mirror cannot silently swap bytes. Dockerfile changes: - Pinned `FROM ubuntu:24.04` to the multi-arch manifest-list digest `sha256:c4a8d5503dfb2a3eb8ab5f807da5bc69a85730fb49b5cfca2330194ebcc41c7b` (kept `# ubuntu:24.04` comment for human readability). - Hadoop 3.4.0 tarball: replaced `wget | tar` stream with download -> sha512sum -c -> extract, using the official HADOOP_SHA512 from downloads.apache.org/.sha512. - GDAL 3.11.4 tarball: same pattern with a locally-computed SHA-256. OSGeo only publishes MD5; we MD5-verified the upstream download (9f4fa4b3be48fb60d5dd76fecb11a5f6) then computed and pinned SHA-256. - Apache Maven 3.9.9: replaced the dynamic `.sha512` fetch (which reads the checksum from the same origin as the tarball and therefore provides no protection against origin compromise) with an in-Dockerfile pinned MAVEN_SHA512 ARG, cross-checked against archive.apache.org. scripts/util/install_hadoop.sh: - Not referenced by the build; kept as a manual mirror of the Dockerfile flow. Rewrote with `set -euo pipefail`, a pinned HADOOP_SHA512, and `sha512sum -c` verification. Made executable. Each checksum has a matching comment documenting the authoritative source and the requirement to bump it in lockstep with the underlying version. Co-authored-by: Isaac * Pin PDAL to commit SHA; add origin-guard banner to disabled doc-tests jobs Addresses review feedback on PR #19: 1. Pin PDAL 2.8.2 to commit SHA 736fa0a66af4bed7105dff5fa152edf26bbb8a3a. Tags are mutable; switch the pdal-builder stage from `git clone -b <tag>` to `git fetch --depth 1 origin <SHA>` + `git checkout FETCH_HEAD`. New ARG PDAL_SHA is documented alongside PDAL_VERSION with the bump procedure, matching the Hadoop/GDAL/Maven pattern. 2. Add a SECURITY banner above the `if: false` line on each disabled job in doc-tests.yml (test-python-docs, test-scala-docs, validate-structure). These jobs now bind environment: runtime (which scopes REPO_ACCESS_TOKEN); combined with the workflow_run trigger and head_sha checkout used by two of the three jobs, naively re-enabling would expose REPO_ACCESS_TOKEN to fork-controlled code. Banner prescribes the required origin guard: if: github.event.workflow_run.head_repository.full_name == github.repository Banner also added to test-scala-docs since copy-paste from siblings is the likely re-enable path. Co-authored-by: Isaac * Add CODEOWNERS pointing all paths at @databrickslabs/geobrix-write Required by the Databricks Labs Repository Lockdown policy. Combined with branch protection, the listed team must approve every PR before merge. Pattern matches sibling labs repos (ucx, blueprint, dqx): root-level CODEOWNERS with a single `*` rule pointing to the per-repo write team. Co-authored-by: Isaac
1 parent 5b95993 commit ab812cb

22 files changed

Lines changed: 539 additions & 75 deletions

.github/actions/python_build/action.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ runs:
1212
using: "composite"
1313
steps:
1414
- name: Configure python interpreter
15-
uses: actions/setup-python@v5
15+
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
1616
with:
1717
cache: 'pip'
1818
cache-dependency-path: '.ci-pip-cache-key'

.github/actions/scala_build/action.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ runs:
1818
using: "composite"
1919
steps:
2020
- name: Configure JDK
21-
uses: actions/setup-java@v5
21+
uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0
2222
with:
2323
java-version: '17'
2424
distribution: 'zulu'
@@ -28,7 +28,7 @@ runs:
2828
shell: bash
2929
run: echo "MAVEN_OPTS=-Xmx4g -XX:+UseG1GC" >> $GITHUB_ENV
3030
- name: Configure python interpreter
31-
uses: actions/setup-python@v5
31+
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
3232
with:
3333
cache: 'pip' # caches dependencies for faster subsequent runs
3434
cache-dependency-path: '.ci-pip-cache-key'

.github/actions/upload_artifacts/action.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@ runs:
44
using: "composite"
55
steps:
66
- name: upload build artifacts
7-
uses: actions/upload-artifact@v5
7+
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
88
with:
99
name: build-artifacts
1010
path: staging/build-artifacts/*
1111
- name: upload user artifacts
12-
uses: actions/upload-artifact@v5
12+
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
1313
with:
1414
name: user-artifacts
1515
path: staging/user-artifacts/*

.github/dependabot.yml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,20 @@ updates:
77
directory: "/"
88
schedule:
99
interval: "weekly"
10+
# Labs lockdown policy: wait 7 days after a release before opening a PR
11+
# (reduces exposure to supply-chain attacks that rely on fast-propagating new versions).
12+
cooldown:
13+
default-days: 7
1014

1115
- package-ecosystem: "pip"
1216
directory: "/python/geobrix"
1317
schedule:
1418
interval: "weekly"
19+
# Labs lockdown policy: wait 7 days after a release before opening a PR
20+
# (reduces exposure to supply-chain attacks that rely on fast-propagating new versions).
21+
cooldown:
22+
default-days: 7
23+
24+
# NOTE: No `github-actions` ecosystem entry: the lockdown policy disables
25+
# Dependabot updates for Actions so SHA pins are not silently bumped.
26+
# Action SHAs are refreshed manually via `scripts/security/pin-gh-actions`.

.github/workflows/build_main.yml

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,19 @@ on:
1515
workflow_dispatch: {}
1616
permissions:
1717
contents: read
18-
id-token: write
1918
jobs:
2019
# Regenerate doc-snippet-inventory and push to the PR branch (not master). Only for PRs targeting master.
2120
update-doc-inventory:
2221
runs-on: larger
2322
if: github.event_name == 'pull_request' && github.base_ref == 'master'
23+
# Scoped to protected env so REPO_ACCESS_TOKEN is only available to approved workflow runs.
24+
environment: runtime
2425
permissions:
26+
# Needed to push the regenerated inventory back onto the PR head branch.
2527
contents: write
2628
steps:
2729
- name: Checkout PR head branch
28-
uses: actions/checkout@v5
30+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
2931
with:
3032
token: ${{ secrets.REPO_ACCESS_TOKEN || secrets.GITHUB_TOKEN }}
3133
ref: ${{ github.head_ref }}
@@ -41,6 +43,8 @@ jobs:
4143
git push origin HEAD:${{ github.head_ref }}
4244
build:
4345
runs-on: larger
46+
# Checkout uses REPO_ACCESS_TOKEN (non-exempt secret), so gate behind the protected env.
47+
environment: runtime
4448
env:
4549
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
4650
strategy:
@@ -52,14 +56,14 @@ jobs:
5256
spark: [ 4.0.0 ]
5357
steps:
5458
- name: checkout code
55-
uses: actions/checkout@v5
59+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
5660
with:
5761
token: ${{ secrets.REPO_ACCESS_TOKEN || secrets.GITHUB_TOKEN }}
5862
- name: Create pip cache key file
5963
run: |
6064
echo "${{ github.ref }}-${{ matrix.python }}-${{ matrix.numpy }}-${{ matrix.spark }}-${{ matrix.gdal }}" > .ci-pip-cache-key
6165
- name: Cache apt packages
62-
uses: actions/cache@v5
66+
uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3
6367
with:
6468
path: .cache/apt-archives
6569
key: apt-${{ runner.os }}-${{ hashFiles('.github/actions/scala_build/action.yml', '.github/actions/python_build/action.yml') }}
@@ -96,7 +100,7 @@ jobs:
96100
fi
97101
ls -la coverage-reports/
98102
- name: Upload coverage artifacts
99-
uses: actions/upload-artifact@v5
103+
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
100104
with:
101105
name: coverage-reports
102106
path: coverage-reports
@@ -113,12 +117,12 @@ jobs:
113117
contents: read
114118
steps:
115119
- name: Download coverage artifacts
116-
uses: actions/download-artifact@v5
120+
uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0
117121
with:
118122
name: coverage-reports
119123
path: coverage-reports
120124
- name: Upload to Codecov
121-
uses: codecov/codecov-action@v5
125+
uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2
122126
with:
123127
token: ${{ secrets.CODECOV_TOKEN }}
124128
directory: coverage-reports

.github/workflows/build_python.yml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,11 @@ on:
66
- "python/**"
77
permissions:
88
contents: read
9-
id-token: write
109
jobs:
1110
build:
1211
runs-on: larger
12+
# Checkout uses REPO_ACCESS_TOKEN (non-exempt secret), so gate behind the protected env.
13+
environment: runtime
1314
env:
1415
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
1516
strategy:
@@ -21,14 +22,14 @@ jobs:
2122
spark: [ 4.0.0 ]
2223
steps:
2324
- name: checkout code
24-
uses: actions/checkout@v5
25+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
2526
with:
2627
token: ${{ secrets.REPO_ACCESS_TOKEN || secrets.GITHUB_TOKEN }}
2728
- name: Create pip cache key file
2829
run: |
2930
echo "${{ github.ref }}-${{ matrix.python }}-${{ matrix.numpy }}-${{ matrix.spark }}-${{ matrix.gdal }}" > .ci-pip-cache-key
3031
- name: Cache apt packages
31-
uses: actions/cache@v4
32+
uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3
3233
with:
3334
path: .cache/apt-archives
3435
key: apt-${{ runner.os }}-${{ hashFiles('.github/actions/scala_build/action.yml', '.github/actions/python_build/action.yml') }}

.github/workflows/build_scala.yml

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,11 @@ on:
55
- "scala/**"
66
permissions:
77
contents: read
8-
id-token: write
98
jobs:
109
build:
1110
runs-on: larger
11+
# Checkout uses REPO_ACCESS_TOKEN (non-exempt secret), so gate behind the protected env.
12+
environment: runtime
1213
env:
1314
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
1415
strategy:
@@ -20,14 +21,14 @@ jobs:
2021
spark: [ 4.0.0 ]
2122
steps:
2223
- name: checkout code
23-
uses: actions/checkout@v5
24+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
2425
with:
2526
token: ${{ secrets.REPO_ACCESS_TOKEN || secrets.GITHUB_TOKEN }}
2627
- name: Create pip cache key file
2728
run: |
2829
echo "${{ github.ref }}-${{ matrix.python }}-${{ matrix.numpy }}-${{ matrix.spark }}-${{ matrix.gdal }}" > .ci-pip-cache-key
2930
- name: Cache apt packages
30-
uses: actions/cache@v5
31+
uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3
3132
with:
3233
path: .cache/apt-archives
3334
key: apt-${{ runner.os }}-${{ hashFiles('.github/actions/scala_build/action.yml', '.github/actions/python_build/action.yml') }}
@@ -38,7 +39,7 @@ jobs:
3839
- name: upload artifacts
3940
uses: ./.github/actions/upload_artifacts
4041
- name: Publish test coverage to Codecov
41-
uses: codecov/codecov-action@v5
42+
uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2
4243
with:
4344
token: ${{ secrets.CODECOV_TOKEN }}
4445
files: target/scoverage.xml,target/scoverage-report/scoverage.xml

.github/workflows/build_scala_by_package.yml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,13 @@ on:
99

1010
permissions:
1111
contents: read
12-
id-token: write
1312

1413
jobs:
1514
test-package:
1615
name: Test ${{ matrix.package }}
1716
runs-on: larger
17+
# Checkout uses REPO_ACCESS_TOKEN (non-exempt secret), so gate behind the protected env.
18+
environment: runtime
1819
env:
1920
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
2021
strategy:
@@ -28,7 +29,7 @@ jobs:
2829
spark: [4.0.0]
2930
steps:
3031
- name: Checkout
31-
uses: actions/checkout@v5
32+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
3233
with:
3334
token: ${{ secrets.REPO_ACCESS_TOKEN || secrets.GITHUB_TOKEN }}
3435

@@ -37,7 +38,7 @@ jobs:
3738
echo "${{ github.ref }}-${{ matrix.python }}-${{ matrix.numpy }}-${{ matrix.spark }}-${{ matrix.gdal }}" > .ci-pip-cache-key
3839
3940
- name: Cache apt packages
40-
uses: actions/cache@v5
41+
uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3
4142
with:
4243
path: .cache/apt-archives
4344
key: apt-${{ runner.os }}-${{ hashFiles('.github/actions/scala_build/action.yml') }}

.github/workflows/codecov-scala-parallel.yml

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,13 @@ on:
1313

1414
permissions:
1515
contents: read
16-
id-token: write
1716

1817
jobs:
1918
coverage-package:
2019
name: Coverage ${{ matrix.package }}
2120
runs-on: larger
21+
# Checkout uses REPO_ACCESS_TOKEN (non-exempt secret), so gate behind the protected env.
22+
environment: runtime
2223
env:
2324
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
2425
strategy:
@@ -32,7 +33,7 @@ jobs:
3233
spark: [4.0.0]
3334
steps:
3435
- name: Checkout
35-
uses: actions/checkout@v5
36+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
3637
with:
3738
token: ${{ secrets.REPO_ACCESS_TOKEN || secrets.GITHUB_TOKEN }}
3839

@@ -41,7 +42,7 @@ jobs:
4142
echo "${{ github.ref }}-${{ matrix.python }}-${{ matrix.numpy }}-${{ matrix.spark }}-${{ matrix.gdal }}" > .ci-pip-cache-key
4243
4344
- name: Cache apt packages
44-
uses: actions/cache@v5
45+
uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3
4546
with:
4647
path: .cache/apt-archives
4748
key: apt-${{ runner.os }}-${{ hashFiles('.github/actions/scala_build/action.yml') }}
@@ -55,7 +56,7 @@ jobs:
5556
suite_pattern: "com.databricks.labs.gbx.${{ matrix.package }}.*"
5657

5758
- name: Upload scoverage for package
58-
uses: actions/upload-artifact@v5
59+
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
5960
with:
6061
name: scoverage-${{ matrix.package }}
6162
path: target/scoverage.xml
@@ -66,14 +67,16 @@ jobs:
6667
runs-on: larger
6768
needs: coverage-package
6869
if: always() && needs.coverage-package.result == 'success'
70+
# Checkout uses REPO_ACCESS_TOKEN (non-exempt secret), so gate behind the protected env.
71+
environment: runtime
6972
steps:
7073
- name: Checkout
71-
uses: actions/checkout@v5
74+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
7275
with:
7376
token: ${{ secrets.REPO_ACCESS_TOKEN || secrets.GITHUB_TOKEN }}
7477

7578
- name: Download all package coverage artifacts
76-
uses: actions/download-artifact@v5
79+
uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0
7780
with:
7881
path: coverage-artifacts
7982
pattern: scoverage-*
@@ -97,7 +100,7 @@ jobs:
97100
fi
98101
99102
- name: Upload to Codecov
100-
uses: codecov/codecov-action@v5
103+
uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2
101104
with:
102105
token: ${{ secrets.CODECOV_TOKEN }}
103106
files: merged/scoverage.xml

.github/workflows/codecov-upload.yml

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,13 @@ on:
1616

1717
permissions:
1818
contents: read
19-
id-token: write
2019

2120
jobs:
2221
coverage:
2322
name: Build, test with coverage, upload
2423
runs-on: larger
24+
# Checkout uses REPO_ACCESS_TOKEN (non-exempt secret), so gate behind the protected env.
25+
environment: runtime
2526
env:
2627
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
2728
strategy:
@@ -33,7 +34,7 @@ jobs:
3334
spark: [ 4.0.0 ]
3435
steps:
3536
- name: Checkout code
36-
uses: actions/checkout@v5
37+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
3738
with:
3839
token: ${{ secrets.REPO_ACCESS_TOKEN || secrets.GITHUB_TOKEN }}
3940

@@ -42,7 +43,7 @@ jobs:
4243
echo "${{ github.ref }}-${{ matrix.python }}-${{ matrix.numpy }}-${{ matrix.spark }}-${{ matrix.gdal }}" > .ci-pip-cache-key
4344
4445
- name: Cache apt packages
45-
uses: actions/cache@v5
46+
uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3
4647
with:
4748
path: .cache/apt-archives
4849
key: apt-${{ runner.os }}-${{ hashFiles('.github/actions/scala_build/action.yml', '.github/actions/python_build/action.yml') }}
@@ -60,7 +61,7 @@ jobs:
6061
enable_coverage: "true"
6162

6263
- name: Upload coverage to Codecov
63-
uses: codecov/codecov-action@v5
64+
uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2
6465
with:
6566
token: ${{ secrets.CODECOV_TOKEN }}
6667
files: target/scoverage.xml,target/scoverage-report/scoverage.xml,python/geobrix/coverage.xml

0 commit comments

Comments
 (0)