PowerShell Local Resource Manager Part 4
krymtkts/pslrm の開発をした。
Update-PSLResource を使えば、実行後に psreq.lock.psd1 の差分から依存関係の更新を検知できる。
それを使って Dependabot のような自動的な更新したくてそういう GitHub Actions workflow をこしらえた。
pslrm/.github/workflows/bump.yml at d42f35ea69c63159ff5043106bbdfc4a1b5113d1 · krymtkts/pslrm
name: Bump dependencies
on:
schedule:
- cron: "0 20 * * 5" # Every Friday at 06:00 JST
workflow_dispatch:
concurrency:
group: bump-dependencies
cancel-in-progress: false
permissions:
contents: write
pull-requests: write
jobs:
bump:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
with:
ref: main
- name: Restore modules from PSGallery
shell: pwsh
run: |
Set-PSResourceRepository PSGallery -Trusted
Import-Module ./pslrm.psd1 -Force
Restore-PSLResource
- name: Bump dependencies
shell: pwsh
run: |
Import-Module ./pslrm.psd1 -Force
Update-PSLResource
- name: Detect lockfile changes
id: lockfile
shell: pwsh
run: |
$diff = git status --porcelain -- psreq.lock.psd1
if ($diff) {
"changed=true" >> $env:GITHUB_OUTPUT
Write-Host "Lockfile changes detected."
} else {
"changed=false" >> $env:GITHUB_OUTPUT
Write-Host "No lockfile changes detected."
}
- name: Create or update pull request
if: steps.lockfile.outputs.changed == 'true'
env:
GH_TOKEN: ${{ github.token }}
shell: pwsh
run: |
git config user.name 'github-actions[bot]'
git config user.email '41898282+github-actions[bot]@users.noreply.github.com'
$branch = 'chore/bump-pslrm-dependencies'
git switch --force-create $branch
git add -- psreq.lock.psd1
$stagedLockfile = git diff --cached --name-only -- psreq.lock.psd1
if (-not $stagedLockfile) {
Write-Host 'No staged lockfile changes to commit.'
exit 0
}
$title = 'Bump pslrm dependencies.'
git commit --message $title
git push --force --set-upstream origin $branch
$baseBranch = 'main'
$prNumber = gh pr list --base $baseBranch --head $branch --state open --json number --jq '.[0].number'
if ($prNumber) {
Write-Host "Pull request #$prNumber already exists."
} else {
$body = 'Automated dependency bump generated by Update-PSLResource.'
gh pr create --base $baseBranch --head $branch --title $title --body $body
}
つい昨日いい感じに動き PR #1 は作成されたのだが、運用してみてちょっとした問題があるとわかった。
単純な話だが GitHub Actions の仕様で bot が作った PR に対して CI の GitHub Actions workflow が起動しないというものだ。
pull_request の節には書いてないようだが check_run check_suite には書いてある様子。
CI が pull_request じゃなく pull_request_target を使っていれば起動できるが、そこは本質じゃない。
あるべき像としては pslrm の GitHub Actions workflow 側で GitHub CLI の GH_TOKEN に PAT を使うのがいいっぽい。
GitHub App を使う手もあるが、その方式が一番一般的ぽい。
次のステップとしては PowerShell Gallery に公開している pslrm を使う third-party Action を作りたく、その場合も PAT がいいみたい。
なのでその方向でも調整していこうと思っているが、旅の途中なので着手はできてない。
他にも PR のために作成する branch name が固定だったり、 description が簡素過ぎたりもある。 Dependabot ぽくするなら label もつけたいしな。 その辺りも含めて機能を揃えられたら、 third-party Action として良さげかなと考えている。 如何せん third-party Action を作ったことがないから、手探りで進めていく予定。
続く。