diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 2d4f6cc..7192fe6 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -68,6 +68,57 @@ jobs: if: matrix.use_cross == true run: cross build --release --target ${{ matrix.target }} + - name: Import signing certificate + if: runner.os == 'macOS' + env: + APPLE_SIGNING_CERTIFICATE: ${{ secrets.APPLE_SIGNING_CERTIFICATE }} + APPLE_SIGNING_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_SIGNING_CERTIFICATE_PASSWORD }} + run: | + KEYCHAIN_PATH="$RUNNER_TEMP/signing.keychain-db" + KEYCHAIN_PASSWORD=$(openssl rand -hex 16) + echo "$APPLE_SIGNING_CERTIFICATE" | base64 --decode > "$RUNNER_TEMP/certificate.p12" + security create-keychain -p "$KEYCHAIN_PASSWORD" "$KEYCHAIN_PATH" + security set-keychain-settings -lut 900 "$KEYCHAIN_PATH" + security unlock-keychain -p "$KEYCHAIN_PASSWORD" "$KEYCHAIN_PATH" + security import "$RUNNER_TEMP/certificate.p12" \ + -k "$KEYCHAIN_PATH" \ + -P "$APPLE_SIGNING_CERTIFICATE_PASSWORD" \ + -T /usr/bin/codesign + security list-keychain -d user -s "$KEYCHAIN_PATH" + security set-key-partition-list -S apple-tool:,apple: -s -k "$KEYCHAIN_PASSWORD" "$KEYCHAIN_PATH" + + - name: Sign binary + if: runner.os == 'macOS' + run: | + IDENTITY=$(security find-identity -v -p codesigning "$RUNNER_TEMP/signing.keychain-db" \ + | grep "Developer ID Application" \ + | awk '{print $2}') + codesign \ + --deep \ + --force \ + --sign "$IDENTITY" \ + --options runtime \ + target/${{ matrix.target }}/release/openshell-image-builder + + - name: Notarize binary + if: runner.os == 'macOS' + env: + APPLE_ID: ${{ secrets.APPLE_ID }} + APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }} + APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }} + run: | + zip -j "$RUNNER_TEMP/openshell-image-builder.zip" \ + target/${{ matrix.target }}/release/openshell-image-builder + xcrun notarytool submit "$RUNNER_TEMP/openshell-image-builder.zip" \ + --apple-id "$APPLE_ID" \ + --password "$APPLE_ID_PASSWORD" \ + --team-id "$APPLE_TEAM_ID" \ + --wait + + - name: Clean up keychain + if: always() && runner.os == 'macOS' + run: security delete-keychain "$RUNNER_TEMP/signing.keychain-db" + - name: Upload artifact uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: