CI 用の GitHub Actions が諸々アップデートされていた
Go で Excel ファイルを扱う Excelize パッケージがバージョンアップしていた。
なので,このパッケージを使っている拙作の goark/csvdata パッケージもバージョンを上げた。
ぶっちゃけ go.mod
ファイルだけ更新してもよかったのだが,少し前に公式の GitHub Actions である actions/setup-go や actions/checkout が v3 系に上がっているのに気付いたこともあり,諸々更新することにした。
github/codeql-action
GitHub が買収して手に入れたコードチェッカの GitHub Actions。 Workflow の設定例はこんな感じらしい。
Go コードのチェックをするなら “Initialize CodeQL
” のコメント部分を解除して
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v2
# Override language selection by uncommenting this and choosing your languages
with:
languages: go
とすればよい。
CodeQL は v2 系に上がったことでかなり深いところまでチェックするようになったようだ。
たとえば今回の goark/csvdata パッケージにはカラムの値を sql
.NullByte
型に変換して返す
func (r *Rows) ColumnNullByte(s string, base int) (sql.NullByte, error) {
res, err := r.ColumnNullInt64(s, base)
if err != nil {
return sql.NullByte{Valid: false}, errs.Wrap(err)
}
return sql.NullByte{Byte: byte(res.Int64), Valid: true}, nil
}
というメソッドがあるのだが,最後の
return sql.NullByte{Byte: byte(res.Int64), Valid: true}, nil
で「範囲チェックなしで素のまま型変換すんな,ゴラァ(←超意訳)」と怒られてしまった。 素直な私は「なるほど」と納得して
func (r *Rows) ColumnNullByte(s string, base int) (sql.NullByte, error) {
res, err := r.ColumnNullInt64(s, base)
if err != nil {
return sql.NullByte{Valid: false}, errs.Wrap(err)
}
if res.Valid && (res.Int64 < 0 || res.Int64 > math.MaxUint8) {
return sql.NullByte{Valid: false}, errs.Wrap(strconv.ErrRange)
}
return sql.NullByte{Byte: byte(res.Int64 & 0xff), Valid: true}, nil
}
と修正しましたとさ。 今までは何も言われなかったのに。 とほほ
golangci/golangci-lint-action
golangci-lint は Go 用の複合 linter。 Workflow の設定例はこんな感じ。
こっちも v3 系に上がっているが, lint は日常的に使ってる(ていうか VS Code ならリアルタイムで走るようにできる)ので特に問題なし。 よかったよかった。
sonatype-nexus-community/nancy-github-action
Sonatype Nancy は Go の依存パッケージについて既知の脆弱性をチェックしてくれるツール。 こちらは特に変わってなかった。 Workflow の設定例はこんな感じ。
これも個人的に常用しているので無問題。
goreleaser/goreleaser-action
みんな大好き,複数プラットフォームの実行バイナリを同時生成して GitHub のリリースページまで作ってくれる GoReleaser の GitHub Actions。 こちらは v3 系に上がったね(2022-08-06 修正)。
この記事を書くのに goreleaser/goreleaser-action のページを眺めてて気がついたのだが, OpenPGP 電子署名も生成してくれるんだね。 Secret として隠蔽してくれるとはいえ, OpenPGP の秘密鍵やパスフレーズを GitHub 側に預託(escrow ← 言い方!)するのは抵抗があるなぁ。 まぁ,これは保留ということで。
ブックマーク
- golangci-lint を GitHub Actions で使う
- Go 依存パッケージの脆弱性検査
- GitHub Actions でクロス・コンパイル(GoReleaser 編)
- Go のコードでも GitHub Code Scanning が使えるらしい
参考図書
- プログラミング言語Go (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)
- Alan A.A. Donovan (著), Brian W. Kernighan (著), 柴田 芳樹 (翻訳)
- 丸善出版 2016-06-20
- 単行本(ソフトカバー)
- 4621300253 (ASIN), 9784621300251 (EAN), 4621300253 (ISBN), 9784621300251 (ISBN)
- 評価
著者のひとりは(あの「バイブル」とも呼ばれる)通称 “K&R” の K のほうである。この本は Go 言語の教科書と言ってもいいだろう。
- デベロッパーゴースーパーゴラン Tシャツ
- Geek Go Super Golang Tees
- ウェア&シューズ
- B09C2XBC2F (ASIN)
- 評価
ついカッとなってポチった。反省はしない