👋

GitHub CLI拡張機能のリリース失敗を解消した

2024/10/16に公開

概要

自作の GitHub CLI 拡張機能をリリースする時に発生した、以下のエラーと解決方法の記録です。

android/amd64 requires external (cgo) linking, but cgo is not enabled

cf. GitHub CLI 拡張機能の作成

結論

結論から言うと、リリース用 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