scala/sbt-ci-releaseでライブラリをパブリッシュする/PGP鍵の生成(旧)
これは自動化できる
メアドまわりをGitHubからもってくるために認証する
code:sh
gh auth refresh -h github.com -s user
自動的に鍵を生成する
スクリプトはlinux/zsh前提ですがたぶんbashでも動くはず……
リポジトリのディレクトリに移動しておく
code:sh
openssl rand 1000 | tr -dc ':alnum::punct:' | tr -d '\\' | fold -w 32 | head -1 > pgp-passphrase KEY_NAME=$(gh repo view --json owner,name | jq -r '.owner.login + "/" + .name + " CI bot"')
cat > gen-key-script <<EOF
Key-Type: EDDSA
Key-Curve: ed25519
Key-Usage: sign
Passphrase: $(< pgp-passphrase)
Name-Real: $KEY_NAME
Name-Email: $(gh api user/emails --jq '.[].email' | head -n1)
Expire-Date: 0
EOF
gpg --batch --gen-key gen-key-script
KEY_ID=$(gpg --list-secret-keys --with-colons | grep -B3 -m1 "$KEY_NAME" | grep -e '^fpr' | cut -d : -f 10)
echo Key ID is: $KEY_ID
gpg --armor --batch --pinentry-mode loopback --passphrase-file pgp-passphrase --export-secret-keys "$KEY_ID" | openssl base64 | tr -d '\n' > pgp-secret-key
鍵を公開する
code:sh
gpg --keyserver hkp://keyserver.ubuntu.com --send-key $KEY_ID && \
gpg --keyserver hkp://keys.openpgp.org --send-key $KEY_ID
openpgp.orgからメールが来るので承認する
鍵をCIに登録する(GitHubにホストしている前提)
code:sh
gh secret set PGP_PASSPHRASE < pgp-passphrase
gh secret set PGP_SECRET < pgp-secret-key
gh secret set SONATYPE_USERNAME --body "$SONATYPE_USERNAME"
# dotenvxの場合は
# dotenvx run -- bash -c 'gh secret set SONATYPE_USERNAME --body "$SONATYPE_USERNAME"'
gh secret set SONATYPE_PASSWORD --body "$SONATYPE_PASSWORD"
# dotenvx run -- bash -c 'gh secret set SONATYPE_PASSWORD --body "$SONATYPE_PASSWORD"'
もういらないのでローカルの鍵ファイルを消す
$ shred -uv pgp-passphrase pgp-secret-key gen-key-script
または
$ srm pgp-passphrase pgp-secret-key gen-key-script