🐧

2023 年振り返り

2023/12/31に公開

自分が 2023 年にエンジニアとしてやったことの振り返りです。

去年の振り返りはこちら。

https://techblog.szksh.cloud/what-i-did-2022

GitHub Followers: 180 => 245 (+65)

2023-12-31 時点の GitHub Status

image

Star 数 Top 6 は変わらずです。

image

新しく作った OSS

https://suzuki-shunsuke.github.io/profile/oss-development

17 個 (他にもある気はしますが)

first release date name lang type short description
2023-12-29 slog-error Go library Go library to embed Attr into error for slog
2023-12-15 go-jsonnet-native-functions Go library Go package porting several Go's standard libraries functions to go-jsonnet's native functions
2023-12-10 aws-secrets-manager-get-action TypeScript GitHub Actions GitHub Actions to get secrets from AWS Secrets Manager
2023-11-21 nllint Go CLI Linter to check newlines at the end of files
2023-11-05 tfprovidercheck Go CLI Censor Terraform Providers
2023-10-08 mkghtag Go CLI Create GitHub Tags via API
2023-09-02 trivy-config-action TypeScript GitHub Actions GitHub Actions for trivy config
2023-07-12 zerolog-error Go library Embed fields into error for zerolog
2023-04-14 pinact Go CLI Pin GitHub Actions versions
2023-03-09 go-mod-tidy-workflow YAML GitHub Actions Workflow GitHub Actions Reusable Workflow to run go mod tidy and push a commit
2023-03-09 go-mod-tidy-action shell script GitHub Actions GitHub Actions to run go mod tidy and push a commit to a pull request
2023-02-03 go-test-full-workflow YAML GitHub Actions Workflow GitHub Actions Reusable Workflow for testing Go application
2023-01-22 ghalint Go CLI GitHub Actions Linter
2023-01-15 renovate-config-validator-workflow YAML GitHub Actions Workflow GitHub Actions Reusable Workflow for renovate-config-validator
2023-01-15 actionlint-workflow YAML GitHub Actions Workflow GitHub Actions Reusable Workflow for actionlint
2023-01-14 go-release-workflow YAML GitHub Actions Workflow GitHub Actions Reusable Workflow for releasing Go application
2023-01-14 go-test-workflow YAML GitHub Actions Workflow GitHub Actions Reusable Workflow for testing Go application

あまり大きな OSS はありませんが、 ghalint や pinact は Mercari でも導入されていたりします(自分が導入したわけではない)。

https://engineering.mercari.com/blog/entry/20231223-mercoin-github-actions/

tfprovidercheck は weekly.tf や Cloud Posse の DevOps "Office Hours" で取り上げられたりして嬉しかったです。

https://www.weekly.tf/p/issue-147-terraform-aws-drift-checks-and-where-did-all-the-terraform-testing-go

https://www.youtube.com/watch?v=7kXmHpqnydM&t=143s

12 月は新しい OSS の開発を進めていて、年内にリリースは出来ませんでしたが、来年 1 月にはリリースしたいと思っています。

OSS contribution

merge された Pull Request の数: 32 個

https://suzuki-shunsuke.github.io/profile/oss-contribution

merged date repository lang PR's short description
2023-12-21 makew0rld/didder YAML (GoReleaser) ci: replace --rm-dist with --clean
2023-12-21 makew0rld/didder YAML (GoReleaser) chore: update GoReleaser to release assets for darwin/arm64 and windows/arm64
2023-12-19 so-dang-cool/dt markdown docs: fix a broken link
2023-12-04 tkuchiki/slp Shell Script ci: add checksums of *.tar.gz to checksum files
2023-11-30 cocogitto/cocogitto YAML (GitHub Actions) ci: fix the format of release assets
2023-11-17 particledecay/kconf YAML (GoReleaser) chore: remove a double quote from asset names
2023-11-15 boz/kail YAML (GoReleaser) ci: fix deprecation warnings
2023-11-10 boz/kail YAML (GitHub Actions) ci: add the permission packages: write to push images to ghcr.io
2023-11-10 ikanago/omekasy YAML (GitHub Actions) ci: fix a bug that prebuilt binaries aren't published to GitHub Releases
2023-11-05 shuaibiyy/awesome-terraform markdown Add tfprovidercheck
2023-10-29 mmarkdown/mmark YAML (GitHub Actions) ci: set up GoReleaser
2023-10-29 xeol-io/xeol YAML (GitHub Actions) ci: run the Release workflow by the push tag event
2023-10-29 xeol-io/xeol markdown docs: fix the SLSA provenance file name
2023-10-26 notaryproject/notation markdown docs: fix broken links
2023-10-03 k1LoW/stubin markdown docs: fix the wrong link to GitHub Releases
2023-08-25 renovatebot/renovate TypeScript fix(renovate-config-validator): support .renovaterc
2023-08-24 showwin/speedtest-go GoReleaser chore: fix GoReleaser's deprecated config
2023-08-05 rhysd/actionlint Go fix: fix activity types of the event watch
2023-07-31 github/docs markdown fix wrong activity type starred
2023-07-29 grpc-ecosystem/grpc-gateway GoReleaser chore: replace the Goreleaser's deprecated option --rm-dist to --clean
2023-07-29 grpc-ecosystem/grpc-gateway GoReleaser chore: stop using the GoReleaser's deprecated field archives.replacements
2023-07-06 Shopify/ejson GoReleaser ci: update goreleaser to v1.18.1 to release assets for darwin/arm64
2023-07-01 sunny0826/kubecm GoReleaser chore: fix asset names
2023-07-01 tilt-dev/tilt typos fix: fix typos using typos
2023-06-28 tilt-dev/tilt GoReleaser chore: replace GoReleaser's deprecated option --rm-dist to --clean
2023-06-28 tilt-dev/tilt GoReleaser chore: upgrade GoReleaser to v1.18.2
2023-06-07 goreleaser/nfpm GoReleaser chore: remove space from asset name
2023-05-22 honojs/hono fix typo
2023-04-14 gotestyourself/gotestsum CircleCI ci: update goreleaser 1.7.0 to 1.17.0 for windows/arm64
2023-03-11 slsa-framework/slsa-verifier Configuration file (YAML) chore: add a file extension ".exe" to Windows artifacts
2023-01-07 slsa-framework/slsa-verifier Github Actions chore: release assets for multiple platforms
2023-01-06 slsa-framework/slsa-verifier Github Actions ci: fix a deprecation warning

aqua-registry をメンテしていると色々な OSS のリリース周りのバグに遭遇します。
CI がこけてリリースされてなかったり、特定の環境用のリリースがこけたりスキップされてしまったり、 checksum ファイルが壊れていたり、色々あります。
こういった問題は結構メンテナーが気づかなかったり放置されたりします。
そういったバグを見つけては報告したり修正したりしました。
なので、自分が全く使ったことのない OSS にもコントリビューションしてたりします。

aqua

v1.33.0 aqua aqua.yaml や aqua-checksums.json, aqua-policy.yaml などを一つのディレクトリにまとめられるようにしました
v1.34.0 generate-registry: version_overrides や testdata の自動生成に対応しました
v1.35.0 checksum が見つからなかったときに checksum file の中身を出力するようにしました
v1.36.0 package の実行ファイルが見つからなかったときに package のファイル一覧を出力するようにしました
v1.37.0 checksum file のパーサーをデフォルトでいい感じにしました(正規表現を書かなくて済むようになりました)
v2 Release https://aquaproj.github.io/docs/reference/upgrade-guide/v2/
v2.3.0 policy をより扱いやすくしました。 policy コマンドや Git Repository root's Policy file を導入しました
v2.5.0 コマンドをデフォルトで execve(2) で実行するようにしました (Windows 以外)
v2.8.0 cargo install で package をインストールできるようにしました
v2.10.0 info コマンドを追加しました。問い合わせ対応でユーザーの環境を把握するのに便利です
v2.11.0 package の uninstall に対応しました
v2.11.0 v2 で廃止された go type package に代わり、 go_build package を導入しました。 go install コマンドでインストール出来ない場合があるため
v2.13.0 registry を簡潔に記述できるようにするための field 追加
v2.14.0 registry や package を update する update コマンドを追加しました
v2.16.2 Scoop で aqua をインストールできるようにしました
v2.17.4 Winget で aqua をインストールできるようにしました
v2.20.0 windows/arm64 環境で windows/amd64 用の実行ファイルを簡単にインストールできるように windows_arm_emulation フィールドを追加しました
v2.21.0 Registry インストール時に YAML を JSON に変換することで巨大な Registry の読み込みを高速化しました

v2 をリリースしました。 policy を使ってデフォルトで standard registry 以外を禁止しました。
これはセキュリティ的に重要な変更でしたが、 policy があまり使い勝手の良いものではなかったため、 standard registry 以外を使っている場合の体験が悪くなってしまいました。
そこで色々知恵を振り絞った結果、 policy コマンドや Git Repository root's Policy file という機能を開発しました。
これは悪くない発明だったと思います。

aqua 用の Discord Channel の Open

Discord に招待されたので channel を作成しました。

https://discord.com/channels/1141777454164365382/1162444533959757955

https://github.com/orgs/aquaproj/discussions/2341

channel で aqua のバグについて呟いたらアドバイスもらって解決できたので良かったです。

https://github.com/aquaproj/aqua/issues/2470

aqua-registry

ほぼ 1 日 1 つのペースで増えてました。

aqua gr コマンドを改善し、 version_overrides や testdata の自動生成に対応したり、生成されるコードの品質を改善したりしました。
ただ、 Registry の自動生成は本当に難しい話で、まだ改善の余地はありそうです。
aqua-registry の Developer Experience の改善も行っていて、 Earthly から Docker + Shell Script の独自実装に置き換えてローカルで CI 同様に複数環境のテストを行えるようにしました。
これにより、いちいち commit, push しなくてもローカルで効率よくテストが行えるようになりました。
ただ、この変更により逆に躓いている人がいるような気がするので、ドキュメントを整備するなり改善の余地はありそうです。

GitHub Repository が transfer された package の自動修正

aqua-registry で GitHub Repository が transfer された package を自動修正するようになりました。
これは aqua-registry を管理する側からすると画期的なことです。
以下のような PR が自動生成されます。

https://github.com/aquaproj/aqua-registry/pulls?q=is%3Apr+is%3Aclosed+transfer+author%3Aapp%2Faquaproj-aqua-registry+is%3Amerged

https://github.com/aquaproj/aqua-registry/pull/17326

aqua の package の多くは GitHub Repository と関連づいていますが、それらが transfer されることが時々あります。
Org に移ったり名前が変わったり
そうした際に aqua-registry を修正する必要がありますが、今までは「たまたま気づいたら手で直す」という運用になっていて自動化されてませんでしたし、 transfer されたことに気づかず放置されているものもありました。
まぁ GitHub が redirect してくれるので transfer されても即座にインストールできなくなるわけではないですが、新しい package 名で検索しても見つからなかったり、最悪古い GitHub Repository が悪意のある repository にいつの間にかすり替わってしまうセキュリティ的なリスクもあります(可能性としては低いですが)。
そこで今回は package を自動で修正するようにしました。
GitHub Actions の schedule event で job を定期実行しているので PR が作られるまでは若干タイムラグがありますが、 24 時間以内には作られるはずです。
修正に伴いパッケージ名も新しいリポジトリ名に合わせて修正されますが、互換性を維持するため(古いパッケージ名でもインストールできるようにするため)、古いパッケージ名も alias として残すようにしています。
詳細は上記の自動生成された PR を見てみればわかるでしょう。

tfcmt

  • v4.0.0 => v4.8.0
  • GitHub Star 251 => 338

v4.2.0 ローカルファイルへの出力に対応
v4.3.0 pull request 番号などのパラメータを環境変数で渡せるようにしました
v4.4.0 terraform plan の結果が No change な場合にコメントしないように出来るようにしました
v4.4.1 terraform コマンドを graceful に終了できるようにシグナルハンドリングを修正しました
v4.4.2 tained されたリソースの扱いを修正しました
v4.4.2 terraform の -replace option で replace されるリソースの扱いを修正しました
v4.5.0 moved リソースを changed resources のリストに追加しました
v4.5.0 imported リソースを changed resources のリストに追加しました
v4.5.1 terraform の outputs だけ変更された場合に parse error が起こるのを修正しました
v4.7.0 OpenTofu をサポートしました(ただし今後もサポートしていくかは未定)
v4.8.0 GitHub Access Token を環境変数 TFCMT_GITHUB_TOKEN で渡せるようにしました

tfaction

v0.5.20 => v1.0.1

v0.5.21 tfmigrate の GCS history backend をサポートしました
v0.5.23 terraform apply が実行された際に、同じ workfing directory に関する pull request の自動更新を設定で無効化出来るようにしました(非推奨)
v0.5.24 既存の pull request に対して tfmigrate の migration file を scaffold 出来るようになりました
v0.5.25 working directory を scaffold する際に aqua.yaml の生成や package の追加を無効化出来るようにしました => v1 でデフォルト無効になりました
v0.6.0 Drift Detection のサポート
v0.6.3 Trivy をサポートしました。 Trivy を有効化したり、 tflint や tfsec を無効化したり出来るようにしました => v1 でデフォルトで tfsec が無効化され、 trivy が有効化されました
v0.6.8 aqua-checksums.json の自動更新に対応しました
v0.7.0 Plan file の保存先を S3 や GCS から GitHub Actions Artifact に移行しました
v0.7.0 pull request workflow が pull request branch の 最新の commit hash で実行されているか検証するようにしました
v0.7.1 pull_request_target をサポートしました
v0.7.3 terraform apply が実行された際に、同じ workfing directory に関する pull request の自動更新を pull request label で無効化出来るようになりました
v0.7.3 tfmigrate と terraform 用の job をマージできるようにしました
v1 Release

v0.7.0 ではセキュリティ的に非常に重要な改善が入りました。
セキュリティだけではなく利便性も向上しました。
AWS や GCS への直接的な依存がなくなったはずです。

そして遂に v1 をリリースしました。

v0.7.0 及び v1.0.0 のリリースの際には有志の方に検証のご協力を頂きました。ありがとうございました。

ここ最近、 tfaction 便利というお声を頂くことが増えた気がします。
そういってもらえるとメンテするモチベが上がるので、 tfaction に限らず自分の OSS 使ってくれている方は star するなり SNS でつぶやくなりブログで紹介するなりしてもらえると助かります。

zenn 本

2023-10-01 aqua CLI Version Manager 入門

ブログ

2023-11-05 tfprovidercheck - 危険な Terraform Provider の実行を防ぐ
2023-10-22 pull_request_target で GitHub Actions の改竄を防ぐ
2023-10-16 aqua update による Registry と Package のアップデート
2023-09-05 tfaction が Trivy をサポート
2023-06-25 18 の User/Org に GitHub Sponsor で寄付をしました (2023-06)
2023-06-17 ghcp を使って GitHub API で commit や branch を生成する
2023-06-05 tfaction による Terraform の Drift Detection
2023-05-14 GitHub Actions による Renovate の安全自動マージ
2023-05-01 pinact - GitHub Actions のバージョンを commit hash で固定
2023-02-12 GitHub Actions の secrets の公開範囲と permissions を最小限にする

English

2023-11-05 Prevent malicious Terraform Providers
2023-10-23 Secure GitHub Actions by pull_request_target
2023-06-06 Terraform's Drift Detection by tfaction
2023-03-07 Improve OSS issue management with GitHub Issue/Discussion template and actions
2023-03-03 Debug application in Windows by GitHub Actions and action-tmate
2023-02-12 Minimize the scope of secrets and permissions in GitHub Actions
2023-01-26 Update of aqua CLI Version Manager in 2022

その他

  • 12 月 NeoVim から VSCode へ移行
  • 12 月 GitHub Actions の JavaScript Action のために TypeScript を勉強し直しました
  • GitHub Sponsor 始めました
  • 自分の OSS を利用している企業・団体を README などに掲載し始めました

来年やりたいこと

  • 現在開発中の新しい OSS のリリース。 1 月にはリリースできると思います
  • tfaction の JavaScript Action の大幅なリファクタリングと、より安全な Secret 管理の仕組みのリリース

Discussion