- 投稿日:
GitHub Actionsで前のジョブの結果を後続で利用したい時に使えるやつ
サンプルコード
- 適当な文字列を変数にセットして、各ジョブで出力する例
name: outputs sharing example
on:
pull_request:
jobs:
first:
runs-on: ubuntu-latest
outputs:
# <out-job-name>: ${{ steps.<step-id>.outputs.<in-job-name> }}
baz: ${{ steps.foo.outputs.bar }}
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- id: foo
# この場合、FOO-BARという値がセットされる
run: echo "::set-output name=bar::$(echo FOO-BAR)"
- id: test
# steps.<step-id>.outputs.<in-job-name>
run: echo "${{ steps.foo.outputs.bar }}"
second:
needs: [first]
runs-on: ubuntu-latest
steps:
- id: test
# needs.<job-id>.outputs.<out-job-name>
run: echo "${{ needs.first.outputs.baz }}"
参考
- 投稿日:
Issueの中にあるTasksの進捗状況集計したい。したくない?したいですよね!
実はGitHubのREST APIを叩いてもTasks情報を素直に取れません
仕方がないので雑に取得するためのシェルスクリプトを書きました
自作するまでの経緯
GH CLI では出来ない
GitHub CLI使ったら簡単に出来るやろ、そう思っていた時代が私にもありました
なんとできません
検索クエリ投げないとProjectで絞れないようなかったり、痒いところに手が届かない子ですし、まぁ許しましょう
REST APIでもできない
ちょっと待ってほしい、画面上表示されてるのにAPIとしては提供されてないの?
そんなのある?
そんなデータを提供している機能はない
2016年には問題提起されていたようですが絶賛放置中
仕方ないので自作した
API叩いてIssue本文からTasksの情報を雑に抜いて集計するだけのやつです
超雑なのでインデントとかコードフェンスの中とか何も考慮してません
- 投稿日:
pull_request
イベントの公式リファレンスが手薄くイベントの意味を明示してないので動きを実際に確認したものをメモ程度に。基本は意味のままだと思いますが…
opened: PRが開いたとき
reopened: PRが開き直されたとき
synchronize: PRに対してPushが走ったとき
- 公式リファレンス
特定ブランチから特定ブランチへのPRを阻止する
- サンプルで作っただけなので中身は適当
pull_request
はbranches
を先頭に書かないと、指定ブランチ以外でも走るので注意
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
- Kleopatoraを起動
- ファイル> New Pair Key
- 個人用のOpenPGP鍵ペアを生成
- 期限なし、パスフレーズは適当に
- Exportから
-----BEGIN PGP PUBLIC KEY BLOCK-----
の中身を全部GitHubのGPG keys/ Add new
に貼り付ける - 追加後にでてきた
Key ID
をgit config --global user.signingkey KeyID
としてcmd
に流す - 以下を流す(
gpg.program
はなくても動くが、あったほうが問題が起きない)
```bat
git config --global commit.gpgsign true
git config --global gpg.program "C:\Program Files (x86)\GnuPG\bin\gpg.exe"
``` - 管理者権限で
cmd
を起動し次のシンボリックリンクを作成mklink /D %USERPROFILE%.gnupg %AppData%\GnuPG
- VSCodeで適当なリポジトリを作成
- なんか適当にコミットする
- GitHubに投げる
- GitHubのコミット履歴にverified signatureがついてたら成功
Linux
- Windows側のKleopatoraから公開鍵と秘密鍵をエクスポートして持ってくる
gpg --import FooBarpublic.asc
で公開鍵をインポートgpg -k
でインポートされていることを確認し、下記XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
相当の部分をコピペ
pub rsa3072 2021-01-17 [SC]
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
uid [ 不明 ] Foo Bar <foobar@example.com>
sub rsa3072 2021-01-17 [E]
gpg --edit-key XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
trust
5
を選ぶquit
gpg -k
で信用度が[ 究極 ]
になっていることを確認gpg --import FooBarSECRET.asc
で秘密鍵をインポート- SSHで繋いでいる時でタイムアウトする場合、GUIプロンプトからの入力になっている可能性があるので、どうにかして入力
- XRDP経由なら
pkill gnome-session
を叩くと入れる
- Windowsの時と同様に次のコマンドを流す
git config --global user.signingkey KeyID
git config --global commit.gpgsign true
- VSCodeで適当なリポジトリを作成
- 何か適当にコミットする
- コミットがコケたらXRDPから入力する
- GitHubに投げる
- GitHubのコミット履歴にverified signatureがついてたら成功
CLIからやる場合でパスフレーズを何度も打ちたくないケース
以下の手順が参考になる
トラブルシュート
Key ID
を確認したい
以下のコマンドで確認可能
gpg --list-signatures