2023 年振り返り
自分が 2023 年にエンジニアとしてやったことの振り返りです。
去年の振り返りはこちら。
GitHub Followers: 180 => 245 (+65)
2023-12-31 時点の GitHub Status
Star 数 Top 6 は変わらずです。
新しく作った OSS
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 でも導入されていたりします(自分が導入したわけではない)。
tfprovidercheck は weekly.tf や Cloud Posse の DevOps "Office Hours" で取り上げられたりして嬉しかったです。
12 月は新しい OSS の開発を進めていて、年内にリリースは出来ませんでしたが、来年 1 月にはリリースしたいと思っています。
OSS contribution
merge された Pull Request の数: 32 個
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 を作成しました。
channel で aqua のバグについて呟いたらアドバイスもらって解決できたので良かったです。
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 が自動生成されます。
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