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-----