GitHub Actions 小ネタメモ

開発に役立ちそうなJobをメモっておく。

目次

スペルチェック

最近チーム内のtypoが目立つのでスペルチェックをCIで回したい。
個人的にはIDEで開発時にwarning出してくれるのでそれである程度はチェックできているつもり。
全員に強制はできないので、CIで回しておくと良さげ。

VSCodeのExtensionとして有名な Code Spell CheckerCLI版 の GitHub Action版: streetsidesoftware/cspell-action があるのでこれを使う。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
name: 'Check spelling'
on:
pull_request:
branches: [main]

jobs:
spellcheck:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: streetsidesoftware/cspell-action@v1.0.1
id: cspell
with:
strict: false

プルリク作成時にでも動くようにしておけば良い。
エラーにしてしまうほど強制力は持たせたくないので、strictfalseで良いかなと思っている。
特定単語の除外とか細かい設定はcspell.jsonって名前でファイル置いておけば勝手に読んでくれる。

PR作成時に実施するようにしておくと、チェックした結果は以下のような感じで、File changedのところに出力される。

指摘が多いと見づらいので、コメントと同じようにクローズできると嬉しいがそういうのはできないっぽい。
それかインラインコメントみたいに指摘してくれると嬉しいなぁ。。。

あと変更があったファイルを対象にスペルチェックしているが、ファイル単位で動いているため、変更していない行もチェックされる。変更行のみにしたい。

別のリポジトリからファイルを取得する

共通の設定ファイルを別リポジトリから取ってきたい場合がある。
1ファイルだけなのでCloneするほどでもなく、git submodule 使うほど依存関係はない。

そんなときにactions/github-scriptを使ってrepos.getContentで対象ファイルを取得してみる。
対象ファイルはjsonファイル想定で、カレントディレクトリに配置するところまで。以下のような感じでできる。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
- uses: actions/github-script@v3
id: get_config
with:
# デフォルトのTOKENでは取得できないので、PERSONAL_ACCESS_TOKENを生成して、secretに設定しておく
github-token: ${{secrets.PERSONAL_ACCESS_TOKEN}}
script: |
const result = await github.repos.getContent({
owner: context.repo.owner,
repo: "repo_name",
path: "config.json" # 対象のファイルを指定
})
# jsonオブジェクトで取得される。
# `.data.content` 内にファイルの内容がBase64化されて入っているので、デコードする
return new Buffer.from(result.data.content, result.data.encoding).toString();

# 取得したデータをファイル化する
- name: set config file
env:
CONFIG: ${{ steps.get_config.outputs.result }} # returnした値が`outputs.result`で取得できる
run: | # 今回はjsonファイルを取得しているので中身はjsonのはず。jqで整えてからファイル出力する
echo $CONFIG | jq -r . > ./config.json

Pull Request にコメントする

actions/github-scriptを使って、issues.createCommentでコメントできる。

Issueではなく、Pull Requestのコメント作成だが、リクエストリソースはissues.createCommentを使う。

1
2
3
4
5
6
7
8
9
10
11
12
- uses: actions/github-script@v3
env:
MESSAGE: |
なんやかんやコメント!!
with:
script: |
github.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: process.env.MESSAGE
})

おわりに

随時追記していく。