#chiroito ’s blog

Java を中心とした趣味の技術について

nektos/act でシークレットを使う

GitHub Action で Maven Central へアップロードするワークフローを作成していたときに困ったのでメモ

ワークフローは以下のYAMLで、シークレットには以下の2種類があります。

  • ユーザ名やパスワード、パスフレーズのように1行の文字列として表現されるもの
  • 鍵のように複数行からなる文字列として表現されるもの

これらはそれぞれ act へ渡す方法が異なります。

name: Deploy Snapshot

on:
  push:
    branches:
      - main

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Set up JDK 11
        uses: actions/setup-java@v3
        with:
          java-version: '11'
          distribution: 'temurin'
          java-package: 'jdk'
          cache: maven
          server-id: 'ossrh'
          server-username: OSSRH_USERNAME
          server-password: OSSRH_PASSWORD
          gpg-passphrase: SIGN_KEY_PASS
          gpg-private-key: ${{ secrets.MAVEN_GPG_PRIVATE_KEY }}

      - name: Test
        run: mvn -B package --file pom.xml

      - name: Deploy Production
        env:
          OSSRH_USERNAME: ${{ secrets.MAVEN_USERNAME }}
          OSSRH_PASSWORD: ${{ secrets.MAVEN_USER_PASSWORD }}
          SIGN_KEY_PASS: ${{ secrets.MAVEN_GPG_PASSPHRASE }}
        run: mvn -B deploy --no-transfer-progress -DskipTests --file jfr4jdbc-driver/pom.xml

act は以下のように実行します。

act --secret-file secretfile -s MAVEN_GPG_PRIVATE_KEY="$(< gpg.pem)" 

1行で記載できるものは --secret-file ファイル名 として指定し、複数行で記載するものは-s 変数名="$(< ファイル名)"とします。

1行で記載できるシークレットは以下のようにまとめてファイルに記載できます。

> cat secretfile
MAVEN_GPG_PASSPHRASE=xxx
MAVEN_USERNAME=xxx
MAVEN_USER_PASSWORD=xxx

鍵など1行で記載できないシークレットそれぞれファイルを用意します。

> cat gpg.pem
-----BEGIN PGP PRIVATE KEY BLOCK-----

xxxxx
-----END PGP PRIVATE KEY BLOCK-----