What changed, and why it matters
This commit updates the versions of third-party GitHub Actions used in the project's automated build and release pipelines and locks them to specific, unchangeable commit hashes. It also adds a minor workaround for a Homebrew warning. The change is a routine supply-chain hardening measure; it does not introduce any obvious security vulnerability and likely reduces the risk of a compromised or malicious action update silently affecting future builds.
No immediate security response is required. Review the pinned commit hashes against the official upstream repositories to confirm they correspond to the claimed versions, verify that the new action major versions do not break least-privilege permissions, and ensure workflow permissions remain minimal. Treat this as a positive hardening change.
Security signals we found
Pinning GitHub Actions to immutable commit hashes is a supply-chain security best practice
Major-version bumps of actions may include upstream security fixes, but the diff itself does not disclose specific vulnerabilities
No changes to secret handling, permissions, or build commands beyond version pinning and a brew tap workaround
No vendor disclosure of a security issue or CVE is present in the commit message or diff
Evidence from the diff
The patch pins all referenced GitHub Actions from floating major-version tags (e.g., @v6, @v3) to immutable commit SHAs with version comments (e.g., actions/checkout@9c091bb… # v7.0.0). This prevents tag-retagging or supply-chain attacks where a maintainer replaces a tag with malicious code. Several actions are also bumped to newer major versions (checkout v6→v7, setup-buildx-action v3→v4, login-action v3→v4, metadata-action v5→v6, build-push-action v5→v7, attest-build-provenance v2→v4, upload-artifact v4→v7, download-artifact v4→v8, create-pull-request v6→v8/v8.1.1, flutter-action v2→v2.23.0, rust-toolchain stable pinned, setup-xcode v1→v1.7.0, action-gh-release v1→v3). Two workflow steps add brew untap aws/tap 2>/dev/null || true to suppress newer Homebrew warnings about untrusted taps. No application code, secrets handling, or build logic changes are present.
Changed components
.github/workflows/build-builder-image.yml.github/workflows/build-monero-c.yml.github/workflows/release.ymlInspect captured patch +52 / −47
diff --git a/.github/workflows/build-builder-image.yml b/.github/workflows/build-builder-image.yml
index 52271a3..ec2f2cd 100644
--- a/.github/workflows/build-builder-image.yml
+++ b/.github/workflows/build-builder-image.yml
@@ -26,7 +26,7 @@ jobs:
steps:
- name: Checkout repository
- uses: actions/checkout@v6
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Extract Flutter version from pubspec.yaml
id: flutter
@@ -36,10 +36,10 @@ jobs:
echo "Using Flutter version: ${FLUTTER_VERSION}"
- name: Set up Docker Buildx
- uses: docker/setup-buildx-action@v3
+ uses: docker/setup-buildx-action@bb05f3f5519dd87d3ba754cc423b652a5edd6d2c # v4.2.0
- name: Log in to GitHub Container Registry
- uses: docker/login-action@v3
+ uses: docker/login-action@af1e73f918a031802d376d3c8bbc3fe56130a9b0 # v4.4.0
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
@@ -47,7 +47,7 @@ jobs:
- name: Extract metadata for Docker
id: meta
- uses: docker/metadata-action@v5
+ uses: docker/metadata-action@dc802804100637a589fabce1cb79ff13a1411302 # v6.2.0
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
tags: |
@@ -56,7 +56,7 @@ jobs:
- name: Build and push Docker image
id: build
- uses: docker/build-push-action@v5
+ uses: docker/build-push-action@53b7df96c91f9c12dcc8a07bcb9ccacbed38856a # v7.3.0
with:
context: .
file: Dockerfile.builder
@@ -70,7 +70,7 @@ jobs:
cache-to: type=gha,mode=max
- name: Generate artifact attestation
- uses: actions/attest-build-provenance@v2
+ uses: actions/attest-build-provenance@0f67c3f4856b2e3261c31976d6725780e5e4c373 # v4.1.1
with:
subject-name: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
subject-digest: ${{ steps.build.outputs.digest }}
diff --git a/.github/workflows/build-monero-c.yml b/.github/workflows/build-monero-c.yml
index e4e4a8e..00114e8 100644
--- a/.github/workflows/build-monero-c.yml
+++ b/.github/workflows/build-monero-c.yml
@@ -15,7 +15,7 @@ jobs:
image: debian:bookworm@sha256:30482e873082e906a4908c10529180aefb6f77620aea7404b909829fadc5d168
steps:
- name: Checkout repository
- uses: actions/checkout@v6
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Build monero_c
env:
@@ -28,7 +28,7 @@ jobs:
cp monero_c/monero_libwallet2_api_c/build/x86_64-linux-gnu/libwallet2_api_c.so artifacts/monero_libwallet2_api_c.so
- name: Upload artifact
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: x86_64-linux-gnu
path: artifacts/monero_libwallet2_api_c.so
@@ -40,7 +40,7 @@ jobs:
image: debian:trixie@sha256:d07d1b51c39f51188e60be9b64e6bf769fa94e187f092bc32b91305cfa34ba5a
steps:
- name: Checkout repository
- uses: actions/checkout@v6
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Build monero_c
env:
@@ -53,7 +53,7 @@ jobs:
cp monero_c/monero_libwallet2_api_c/build/x86_64-linux-android/libwallet2_api_c.so artifacts/libmonero_libwallet2_api_c.so
- name: Upload artifact
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: x86_64-linux-android
path: artifacts/libmonero_libwallet2_api_c.so
@@ -65,7 +65,7 @@ jobs:
image: debian:trixie@sha256:d07d1b51c39f51188e60be9b64e6bf769fa94e187f092bc32b91305cfa34ba5a
steps:
- name: Checkout repository
- uses: actions/checkout@v6
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Build monero_c
env:
@@ -78,7 +78,7 @@ jobs:
cp monero_c/monero_libwallet2_api_c/build/aarch64-linux-android/libwallet2_api_c.so artifacts/libmonero_libwallet2_api_c.so
- name: Upload artifact
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: aarch64-linux-android
path: artifacts/libmonero_libwallet2_api_c.so
@@ -90,7 +90,7 @@ jobs:
image: debian:trixie@sha256:d07d1b51c39f51188e60be9b64e6bf769fa94e187f092bc32b91305cfa34ba5a
steps:
- name: Checkout repository
- uses: actions/checkout@v6
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Build monero_c
env:
@@ -103,7 +103,7 @@ jobs:
cp monero_c/monero_libwallet2_api_c/build/armv7a-linux-androideabi/libwallet2_api_c.so artifacts/libmonero_libwallet2_api_c.so
- name: Upload artifact
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: armv7a-linux-androideabi
path: artifacts/libmonero_libwallet2_api_c.so
@@ -115,7 +115,7 @@ jobs:
image: debian:bookworm@sha256:30482e873082e906a4908c10529180aefb6f77620aea7404b909829fadc5d168
steps:
- name: Checkout repository
- uses: actions/checkout@v6
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Build monero_c
env:
@@ -130,7 +130,7 @@ jobs:
cp monero_c/release/monero/x86_64-w64-mingw32_libssp-0.dll artifacts/libssp-0.dll
- name: Upload artifact
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: x86_64-w64-mingw32
path: artifacts/
@@ -145,15 +145,16 @@ jobs:
- aarch64-apple-iossimulator
steps:
- name: Checkout app repo (for the monero_c commit pinned in pubspec.lock)
- uses: actions/checkout@v6
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Setup Xcode
- uses: maxim-lobanov/setup-xcode@v1
+ uses: maxim-lobanov/setup-xcode@ed7a3b1fda3918c0306d1b724322adc0b8cc0a90 # v1.7.0
with:
xcode-version: "16.2"
- name: Install dependencies
run: |
+ brew untap aws/tap 2>/dev/null || true # runner pre-taps it; newer brew nags about untrusted taps
brew install ccache cmake autoconf automake libtool
- name: Build monero_c for ${{ matrix.target }} (pinned to pubspec.lock)
@@ -173,7 +174,7 @@ jobs:
./build_single.sh monero ${{ matrix.target }} -j$(sysctl -n hw.logicalcpu)
- name: Upload built library
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: ${{ matrix.target }}
path: /tmp/monero_c/monero_libwallet2_api_c/build/${{ matrix.target }}/libwallet2_api_c.dylib
@@ -184,13 +185,13 @@ jobs:
needs: build-ios-targets
steps:
- name: Download aarch64-apple-ios artifact
- uses: actions/download-artifact@v4
+ uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
with:
name: aarch64-apple-ios
path: device-lib
- name: Download aarch64-apple-iossimulator artifact
- uses: actions/download-artifact@v4
+ uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
with:
name: aarch64-apple-iossimulator
path: simulator-lib
@@ -248,7 +249,7 @@ jobs:
rm -rf device simulator device-lib simulator-lib
- name: Upload XCFramework artifact
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: MoneroWallet-xcframework
path: MoneroWallet.xcframework
@@ -265,40 +266,40 @@ jobs:
- create-ios-xcframework
steps:
- name: Checkout repository
- uses: actions/checkout@v6
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Download x86_64-linux-gnu artifact
- uses: actions/download-artifact@v4
+ uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
with:
name: x86_64-linux-gnu
path: artifacts/x86_64-linux-gnu
- name: Download x86_64-linux-android artifact
- uses: actions/download-artifact@v4
+ uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
with:
name: x86_64-linux-android
path: artifacts/x86_64-linux-android
- name: Download aarch64-linux-android artifact
- uses: actions/download-artifact@v4
+ uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
with:
name: aarch64-linux-android
path: artifacts/aarch64-linux-android
- name: Download armv7a-linux-androideabi artifact
- uses: actions/download-artifact@v4
+ uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
with:
name: armv7a-linux-androideabi
path: artifacts/armv7a-linux-androideabi
- name: Download iOS XCFramework artifact
- uses: actions/download-artifact@v4
+ uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
with:
name: MoneroWallet-xcframework
path: artifacts/MoneroWallet.xcframework
- name: Download x86_64-w64-mingw32 artifact
- uses: actions/download-artifact@v4
+ uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
with:
name: x86_64-w64-mingw32
path: artifacts/x86_64-w64-mingw32
@@ -333,7 +334,7 @@ jobs:
run: rm -rf artifacts
- name: Create Pull Request
- uses: peter-evans/create-pull-request@v8
+ uses: peter-evans/create-pull-request@5f6978faf089d4d20b00c7766989d076bb2fc7f1 # v8.1.1
with:
token: ${{ secrets.GITHUB_TOKEN }}
commit-message: "Update monero_c libraries"
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 06c2832..5f1eef2 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -20,7 +20,7 @@ jobs:
version_matches: ${{ steps.check.outputs.VERSION_MATCHES }}
steps:
- name: Checkout repository
- uses: actions/checkout@v6
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Check if pubspec version matches tag
id: check
@@ -59,7 +59,7 @@ jobs:
- name: Create Pull Request
if: steps.check.outputs.VERSION_MATCHES == 'false'
- uses: peter-evans/create-pull-request@v6
+ uses: peter-evans/create-pull-request@5f6978faf089d4d20b00c7766989d076bb2fc7f1 # v8.1.1
with:
token: ${{ secrets.GITHUB_TOKEN }}
commit-message: "chore: bump version to ${{ github.ref_name }}"
@@ -94,7 +94,7 @@ jobs:
echo "TAG=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT
- name: Checkout repository
- uses: actions/checkout@v6
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
sparse-checkout: pubspec.yaml
sparse-checkout-cone-mode: false
@@ -122,7 +122,7 @@ jobs:
df -h
- name: Checkout repository
- uses: actions/checkout@v6
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
submodules: recursive
@@ -159,7 +159,7 @@ jobs:
cp -v build/app/outputs/bundle/release/app-release.aab "dist/skylight-wallet-${VERSION}.aab"
- name: Upload artifacts
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: android
path: |
@@ -173,7 +173,7 @@ jobs:
needs: version
steps:
- name: Checkout repository
- uses: actions/checkout@v6
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
submodules: recursive
@@ -194,7 +194,7 @@ jobs:
cp -v appimage/skylight-wallet-*.AppImage dist/
- name: Upload artifacts
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: linux-x86_64
path: |
@@ -208,12 +208,12 @@ jobs:
needs: version
steps:
- name: Checkout repository
- uses: actions/checkout@v6
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
submodules: recursive
- name: Set up Flutter
- uses: subosito/flutter-action@v2
+ uses: subosito/flutter-action@1a449444c387b1966244ae4d4f8c696479add0b2 # v2.23.0
with:
channel: stable
flutter-version: ${{ needs.version.outputs.flutter_version }}
@@ -225,8 +225,9 @@ jobs:
run: choco install innosetup -y
- name: Set up Rust
- uses: dtolnay/rust-toolchain@stable
+ uses: dtolnay/rust-toolchain@4be7066ada62dd38de10e7b70166bc74ed198c30 # stable
with:
+ toolchain: stable
targets: x86_64-pc-windows-msvc
- name: Build Windows release
@@ -238,7 +239,7 @@ jobs:
& 'C:\Program Files (x86)\Inno Setup 6\ISCC.exe' /DAppVersion=$version windows\installer.iss
- name: Upload artifacts
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: windows-x64
path: windows/Output/*.exe
@@ -250,22 +251,25 @@ jobs:
needs: version
steps:
- name: Checkout repository
- uses: actions/checkout@v6
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
submodules: recursive
- name: Set up Flutter
- uses: subosito/flutter-action@v2
+ uses: subosito/flutter-action@1a449444c387b1966244ae4d4f8c696479add0b2 # v2.23.0
with:
channel: stable
flutter-version: ${{ needs.version.outputs.flutter_version }}
- name: Install CocoaPods
- run: brew install cocoapods
+ run: |
+ brew untap aws/tap 2>/dev/null || true # runner pre-taps it; newer brew nags about untrusted taps
+ brew install cocoapods
- name: Set up Rust
- uses: dtolnay/rust-toolchain@stable
+ uses: dtolnay/rust-toolchain@4be7066ada62dd38de10e7b70166bc74ed198c30 # stable
with:
+ toolchain: stable
targets: aarch64-apple-ios
- name: Import code signing
@@ -357,7 +361,7 @@ jobs:
contents: write
steps:
- name: Download build artifacts
- uses: actions/download-artifact@v4
+ uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
with:
path: dist
@@ -384,7 +388,7 @@ jobs:
find dist -name "*.asc" -type f -print
- name: Create Release
- uses: softprops/action-gh-release@v1
+ uses: softprops/action-gh-release@718ea10b132b3b2eba29c1007bb80653f286566b # v3.0.1
with:
name: ${{ needs.version.outputs.tag }}
draft: false
Why this scored 19/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.