🦖
DiffからTODOコメントを集めてPRにコメントする
よくTODOコメントを溜めてしまうので、
Pull requestに追加されたTODOコメントをそのPRにコメントするGitHub Actionsのワークフローを作りました。
✅ 対象読者
- 個人開発者
- mainブランチをTODOコメントで汚したくない人
⭐ 特徴
- Diffに残っているTODOコメントのみ収集するので、もとからあるTODOコメントは含まないようにした
- regexを指定してカスタマイズできる
- JSONを出力するので、表示形式をカスタマイズできる
対応しているコメント
// TODO: 対応
// TODO: 連続した行コメント
// 2行目
/* TODO:
* 複数行コメント
*/
設定を変えることで他のコメントの対応もできます。
例
name: Find TODOs in pull requests
on:
pull_request:
jobs:
find-todos:
# コメントするのに必要
permissions:
pull-requests: write
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
# Diffに含まれるTODOコメントを収集
- uses: indigo-san/todo-comments-in-pr@v1
id: todos
# マークダウン形式に変換
# Permalinkを使うようにしています
- name: Generate a summary of the tasks
uses: actions/github-script@v7
id: summary
with:
result-encoding: string
script: |
const tasks = JSON.parse(String.raw`${{ steps.todos.outputs.tasks }}`);
let body = tasks.map(task => `https://github.com/${{ github.repository }}/blob/${{ github.sha }}/${task.fileName}#L${task.startLine}-L${task.endLine}`).join('\n');
if (tasks.length > 0) {
body = `The following TODO comments were found:\n\n${body}`;
} else {
body = 'No TODO comments were found.';
}
return body;
- name: Comment on the pull request
uses: marocchino/sticky-pull-request-comment@v2
with:
header: todo-cooments
recreate: true
message: |
${{ steps.summary.outputs.result }}
入力
path
任意 TODO を検索するファイルへのパス。JSON配列を指定する必要がある。
(デフォルト: ["*.cs","*.js","*.jsx","*.ts","*.tsx","*.css","*.scss","*.sass"]
)
commit
任意 現在のコミットと比較するコミット。
(デフォルト: ${{ github.event.pull_request.base.ref }}
)
single_line_comment
任意 単一行のコメントに一致する正規表現パターン。
(デフォルト: \/\/.*
)
multi_line_comment_start
任意 複数行のコメントの先頭に一致する正規表現パターン。
(デフォルト: \/\*
)
multi_line_comment_end
任意 複数行のコメントの末尾に一致する正規表現パターン。
(デフォルト: \*\/
)
regex
任意 キーワードに一致する正規表現パターン。
(デフォルト: TODO
)
出力
tasks
差分から見つかったタスクのリスト。
[
{
"startLine": 1,
"endLine": 1,
"content": "// TODO: test",
"fileName": "path/to/file"
}
]
tasks_count
差分で見つかったタスクの数。
Discussion