hitode909の日記

趣味はマリンスポーツですの日記です

update-cpanfileのバージョン1.0.0からJSON出力形式を変えました! CIから使ってる人はお気をつけください!!!

update-cpanfileが定期的にライブラリをアップデートしてくれる暮らしになったのだけど、Changesへのリンクを作ることができず、差分のチェックは人間の仕事となっていて、やや不便だった。
MetaCPAN的には、ChangesのURLを組み立てるにはdistribution nameが必要なので、JSONの出力に加えようとしたのだけど、これまで出力していたJSONの構造は[ [ $package_name, $version ] ]となっていて、これにdistribution nameを足すのは付け焼き刃すぎる。
Makefileがハードタブをやめるタイミングを逃して未だにハードタブを使っている話を思い出したので、早いうちにえいっと変えてしまおう、と、[{package_name, version, dist_name, path}]という形のJSONに変えて、バージョン1.0.0としてリリースした。


サンプルのYAMLも新しいデータ構造に対応していて、このあたりが変わっています。.package_nameが、以前は.[0]とかだった。

      - name: report
        id: report
        run: |
          echo "::set-output name=title::Update $(echo '${{ steps.update.outputs.updated_packages }}' | jq -r '[.[] | .package_name] | join(", ")')"
          echo "::set-output name=body::$(echo '${{ steps.update.outputs.updated_packages }}' | jq -r 'map("- [\(.package_name)](https://metacpan.org/pod/\(.package_name)) == \(.version) ([Changes](https://metacpan.org/changes/distribution/\(.dist_name)))") | join("%0A")')"
https://github.com/hitode909/App-UpdateCPANfile/blob/1489abda5f5840f057b57f9f2c6874dd2479d257/.github/workflows/update-cpanfile.yml#L26


これで生成されるMarkdownはこんな感じでChangesへのリンクが添付されるようになった。

- [DBIx::Handler::Sunny](https://metacpan.org/pod/DBIx::Handler::Sunny) == 0.02 ([Changes](https://metacpan.org/changes/distribution/DBIx-Handler-Sunny))
___
Automated changes by [update-cpanfile](https://metacpan.org/pod/distribution/App-UpdateCPANfile/script/update-cpanfile) version 1.0.0


0.08→1.0.0という異常なバージョンのジャンプになってしまったけど、セマンティックなバージョンをつけておくと、ここでは快適変更がありますぞ、ということを伝えられて便利だと思う。



サンプルのYAMLではcpanm --notest App::UpdateCPANfilelして最新版をインストールしているけど、これをプロダクションのCIでも動かしていると、今日1.0.0が出たタイミングで壊れ、かつ将来的に2.0.0が出たときにふたたび互換性が失われてぶっ壊れてしまうと思われる。
cpanm --notest HITODE/App-UpdateCPANfile-1.0.0.tar.gz などして、使うバージョンを固定するとよさそう。
update-cpanfile側でもGitHub ActionsのComposite Run Stepsを提供するのがよいかな、とも考えています。