更新日:
投稿日:

pull_requestイベントの公式リファレンスが手薄くイベントの意味を明示してないので動きを実際に確認したものをメモ程度に。基本は意味のままだと思いますが…

opened: PRが開いたとき
reopened: PRが開き直されたとき
synchronize: PRに対してPushが走ったとき

特定ブランチから特定ブランチへのPRを阻止する

  • サンプルで作っただけなので中身は適当
    • pull_requestbranchesを先頭に書かないと、指定ブランチ以外でも走るので注意
name: testing on opend PR to main
on:
  pull_request:
    branches:
      - main
    types:
      - opened
      - reopened
      - synchronize
jobs:
  # 事前ブランチチェック
  before-check:
    runs-on: ubuntu-latest
    steps:
      - name: fail case
        if: startsWith(github.head_ref, 'test/') && github.base_ref == 'main'
        # test/* ブランチから main ブランチ宛である場合
        # exit 1で終了することで Workflow を failure 扱いにする
        # https://docs.github.com/ja/actions/creating-actions/setting-exit-codes-for-actions
        run: exit 1
        # 前の if に入らなければ、そのまま次のジョブにつながる
  after-exec:
    # 指定されたジョブの成功を要求、失敗している場合、このジョブを実行しない
    # 必然的に線形実行になる(並列では走らない)
    needs: [before-check]
    runs-on: ubuntu-latest
    steps:
      - name: TEST!
        run: echo "RUN after-exec"
更新日:
投稿日:

取り敢えず各ジョブの中で使うやつ

今まで使っていた::set-outputは2023-05-31に廃止される予定なので置き換える必要があります。

GitHub Actions: Deprecating save-state and set-output commands

サンプルコード

  • 設定方法:echo "<KEY>=<VALUE>" >> "$GITHUB_OUTPUT"
  • 参照方法:steps.<ID>.outputs.{KEY}
name: variable example
on:
  workflow_dispatch:
jobs:
  ubuntu-testing:
    runs-on: ubuntu-latest
    steps:
      - id: example
        run: echo "value=hoge" >> "$GITHUB_OUTPUT"
      - name: disp
        run: echo ${{ steps.example.outputs.value }}

確認環境

Windows

あらかじめgpgのパスをPATHに通しておくと良い
参考値:C:\Program Files (x86)\GnuPG\bin

Env Ver
Windows 10 Pro Build 19042.804
git 2.30.0.windows.1
VSCode 1.53.2
Kleopatra Gpg4win-3.1.15

Linux

Windows側からVSCodeのRemote - SSHで接続

Env Ver
Ubuntu Desktop 20.04.2
git 2.25.1
gpg 2.2.19

手順

Windows

  1. Kleopatoraを起動
  2. ファイル> New Pair Key
  3. 個人用のOpenPGP鍵ペアを生成
    1. 期限なし、パスフレーズは適当に
  4. Exportから -----BEGIN PGP PUBLIC KEY BLOCK----- の中身を全部GitHubの GPG keys/ Add new に貼り付ける
  5. 追加後にでてきた Key IDgit config --global user.signingkey KeyID として cmd に流す
  6. 以下を流す(gpg.program はなくても動くが、あったほうが問題が起きない)
    ```bat
    git config --global commit.gpgsign true
    git config --global gpg.program "C:\Program Files (x86)\GnuPG\bin\gpg.exe"
    ```
  7. 管理者権限で cmd を起動し次のシンボリックリンクを作成
    1. mklink /D %USERPROFILE%.gnupg %AppData%\GnuPG
  8. VSCodeで適当なリポジトリを作成
  9. なんか適当にコミットする
  10. GitHubに投げる
  11. GitHubのコミット履歴にverified signatureがついてたら成功

Linux

  1. Windows側のKleopatoraから公開鍵と秘密鍵をエクスポートして持ってくる
  2. gpg --import FooBarpublic.asc で公開鍵をインポート
  3. gpg -k でインポートされていることを確認し、下記XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX相当の部分をコピペ
pub rsa3072 2021-01-17 [SC]
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
uid [ 不明 ] Foo Bar <foobar@example.com>
sub rsa3072 2021-01-17 [E]
  1. gpg --edit-key XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  2. trust
  3. 5を選ぶ
  4. quit
  5. gpg -kで信用度が[ 究極 ]になっていることを確認
  6. gpg --import FooBarSECRET.ascで秘密鍵をインポート
    1. SSHで繋いでいる時でタイムアウトする場合、GUIプロンプトからの入力になっている可能性があるので、どうにかして入力
    2. XRDP経由ならpkill gnome-sessionを叩くと入れる
  7. Windowsの時と同様に次のコマンドを流す
    1. git config --global user.signingkey KeyID
    2. git config --global commit.gpgsign true
  8. VSCodeで適当なリポジトリを作成
  9. 何か適当にコミットする
    1. コミットがコケたらXRDPから入力する
  10. GitHubに投げる
  11. GitHubのコミット履歴にverified signatureがついてたら成功
CLIからやる場合でパスフレーズを何度も打ちたくないケース

以下の手順が参考になる

WSL2のUbuntuでGPGキーのパスフレーズを記憶させる

トラブルシュート

Key IDを確認したい

以下のコマンドで確認可能

gpg --list-signatures

GPGキーを消したい

GPGキーの消し方