GitHub CLI拡張機能のリリース失敗を解消した
概要
自作の GitHub CLI 拡張機能をリリースする時に発生した、以下のエラーと解決方法の記録です。
android/amd64 requires external (cgo) linking, but cgo is not enabled
結論
結論から言うと、リリース用 GitHub Action ワークフロー内で使用しているアクションcli/gh-extension-precompile
のバージョンをv1からv2に変更したら解決しました。
環境
- MacOS v15.0.1
- Go v1.23.2
- GitHub CLI v2.58.0
エラー発生時の状況
背景
- 自作 GitHub CLI 拡張機能 iced-penguin/gh-easy-label
-
gh extension create --precompiled=go
によってプロジェクトを作成 - リリース用の GitHub Actions ワークフロー(
release.yml
)は上記コマンドで自動生成されたもの
release.yml
name: release
on:
push:
tags:
- "v*"
permissions:
contents: write
id-token: write
attestations: write
jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: cli/gh-extension-precompile@v1
with:
generate_attestations: true
go_version_file: go.mod
エラー内容
GitHub Actions のログを一部抜粋:
Run cli/gh-extension-precompile@v1
Run actions/setup-go@v5
Setup go version spec 1.23.2
Found in cache @ /opt/hostedtoolcache/go/1.23.2/x64
Added go to the path
Successfully set up Go version 1.23.2
/opt/hostedtoolcache/go/1.23.2/x64/bin/go env GOMODCACHE
/opt/hostedtoolcache/go/1.23.2/x64/bin/go env GOCACHE
/home/runner/go/pkg/mod
/home/runner/.cache/go-build
Cache is not found
go version go1.23.2 linux/amd64
go env
Run if [ -n "$INPUT_TOKEN" ]; then
Run if [ -n "$INPUT_TAG" ]; then
Run if [ -n "$INPUT_TITLE" ]; then
Run ${GITHUB_ACTION_PATH//\\//}/build_and_release.sh
go: downloading github.com/cli/go-gh/v2 v2.10.0
go: downloading github.com/olekukonko/tablewriter v0.0.5
go: downloading github.com/spf13/cobra v1.8.1
go: downloading gopkg.in/yaml.v2 v2.4.0
go: downloading github.com/mattn/go-runewidth v0.0.15
go: downloading github.com/spf13/pflag v1.0.5
go: downloading github.com/cli/safeexec v1.0.0
go: downloading github.com/rivo/uniseg v0.4.7
android/amd64 requires external (cgo) linking, but cgo is not enabled
Error: Process completed with exit code 1.
android/amd64 requires external (cgo) linking, but cgo is not enabled
が出力されていることがわかります。
解決策
エラーメッセージから察するにandroid/amd64
をビルド対象から外すか、cgoを有効化するかが必要そうです。ワークフローではcli/gh-extension-precompile
アクションを使用しているので何かしらの設定項目がないかどうか公式リポジトリcli/gh-extension-precompileを覗いてみたところ、以下のような記述がありました。
gh-extension-precompile@v2 introduces a breaking change by disabling android-arm64 and android-amd64 build targets by default due to Go external linking requirements.
v2ではビルド対象からandroid/amd64
が外されているらしい。よく見ると自分はv1を使っている。ということは単にワークフローのバージョンを上げれば済むのでは?
ということでv2に変更して再度ワークフローを走らせたところ成功しました。
修正後の GitHub Actions:
name: release
on:
push:
tags:
- "v*"
permissions:
contents: write
id-token: write
attestations: write
jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: cli/gh-extension-precompile@v2 # v1 -> v2 に書き換え
with:
generate_attestations: true
go_version_file: go.mod
まとめ
バージョンの確認は大事。
Discussion