Skip to content

GOAUTH環境変数の使い方

モジュールをダウンロードするときの認証機構。複数ある場合はセミコロンで区切る。

  • Documentation: go help goauth

GOAUTH はモジュールメタデータを取得するために利用される。Git等のVCSでデータを取り込む場合はVCS側でも適切な認証設定がされている必要がある。GitHub Actionsのデフォルトで付与されるGITHUB_TOKENはアクションを実行したリポジトリに限定されるので、この用途には使えない。

また、プライベートモジュールの場合はモジュールのチェックサムを持ってこれないので、最終的に以下のような形となる。

Terminal window
# GOPRIVATEの代わりにGONOPROXYまたはGONOSUMDBを設定してもいい
export GOPRIVATE=github.com/user/repo
export GOAUTH=xxx
git config credential.helper=xxx

Credential Helper設定する代わりに、git config url.insteadof するのでもいい。

何も利用しない。

Terminal window
GOAUTH=off

~/.netrc にパスワードを記述しておくと使われる。ファイルを別の場所に置きたい場合は NETRC 環境変数にパスをセットする。

Terminal window
GOAUTH=netrc

~/.netrc にはドメインとシークレットを書く。

machine github.com
login lufia
password xxxx

git-credential-helper からシークレットを取り出す。

Terminal window
GOAUTH="git dir"

ただし、これはあくまで git credential fill するだけなので、事前にGitへシークレットを与えておく必要がある。また、dir は絶対パスが必要で、相対パスを与えると以下のエラーになる。

go: GOAUTH=git dir method requires an absolute path to the git working directory, dir is not absolute

コマンドを実行した結果で認証する。これは command というキーがあるのではなく、上記どれでもない場合にコマンドとして扱われる。

Terminal window
GOAUTH="./auth.sh"

コマンドの出力はURLセクションとヘッダーセクションを空行で区切って出力する。複数のデータを返せるようになっているためなのか分からないけど、ヘッダーセクションの最後にも空行が必要。

Terminal window
echo https://github.com/example/
echo https://github.com/example/repo/
echo
echo Authorization: Bearer $token
echo

このコマンドには引数としてリポジトリのURLが渡ってくる。同様に、コマンドの標準入力には4xxエラーが発生したときのHTTPレスポンスが送られてくるので、必要ならこれらの情報も使っていい。

Terminal window
echo $1 # $1 = https://github.com/user/repo
cat >/dev/tty

go mod download -x すると動作しているログが標準エラーに出力される。ダウンロードするモジュールを絞りたい場合、引数にモジュール名を指定すればいい。