Go言語で書いたコードをprivateリポジトリに置いてて、そのコードを他のリポジトリから呼び出すためのメモです。
やりたいこと
GitHubのprivateリポジトリにGo言語で書いたライブラリを置いていました。
このライブラリのリポジトリを、publicに変えることなくprivateのままimportして使いたいのです。
単純にimportしようとしたらエラーになる
こんな感じでprivateリポジトリのライブラリをimportしようとしたら
package main
import (
"github.com/<ユーザ名>/golang-lib"
)
...
こんなエラーが表示されてビルドに失敗しました。
$ go build ../src/main.go [master]
go: finding module for package github.com/<ユーザ名>/golang-lib
../src/main.go:7:2: cannot find module providing package github.com/<ユーザ名>/golang-lib: module github.com/<ユーザ名>/golang-lib: git ls-remote -q origin in /home/user/go/pkg/mod/cache/vcs/588e0f756a53aa1a73372233db9fe1a5389215117dfbe15996c0de76f955b419: exit status 128:
fatal: could not read Username for 'https://github.com': terminal prompts disabled
Confirm the import path was entered correctly.
If this is a private repository, see https://golang.org/doc/faq#git_https for additional information.
解決方法
エラーメッセージの「privateリポジトリの場合はここを見な!」みたいなメッセージとともに表示されたURLを覗いてみます。
Frequently Asked Questions (FAQ) - The Go Programming Language
ここでは解決方法として、
~/.netrc
にGitHubのアカウント名とAPIのアクセストークンを書いて認証を突破する方法- GitHubに登録してるsshの鍵を利用して認証を突破する方法
の2つが紹介されていました。
今回は後者の方法を試してみます。
なお、当然ながらこの方法の場合、事前にGitHubに鍵を登録しておく必要があります。
~/.gitconfig
に以下の設定を追加します。
[url "ssh://git@github.com/"]
insteadOf = https://github.com/
これで再度ビルドしてみます。
$ go build ../src/main.go
go: downloading github.com/<ユーザ名>/golang-lib v0.0.0-20201229201758-0ee219d61b2f
../src/main.go:7:2: github.com/<ユーザ名>/golang-lib@v0.0.0-20201229201758-0ee219d61b2f: verifying module: github.com/<ユーザ名>/golang-lib@v0.0.0-20201229201758-0ee219d61b2f: reading https://sum.golang.org/lookup/github.com/<ユーザ名>/golang-lib@v0.0.0-20201229201758-0ee219d61b2f: 410 Gone
server response:
not found: github.com/<ユーザ名>/golang-lib@v0.0.0-20201229201758-0ee219d61b2f: invalid version: git fetch -f origin refs/heads/*:refs/heads/* refs/tags/*:refs/tags/* in /tmp/gopath/pkg/mod/cache/vcs/588e0f756a53aa1a73372233db9fe1a5389215117dfbe15996c0de76f955b419: exit status 128:
fatal: could not read Username for 'https://github.com': terminal prompts disabled
何やらさっきとは違うエラーが表示されてまたビルドがコケました。
エラーメッセージでいろいろと調べてみると、どうやらGo言語のバージョン1.3以降はGOPRIVATE
という環境変数を設定する必要がありそうです。
なので、↓のような感じで、参照したいprivateリポジトリのパスを設定してやります。
export GOPRIVATE="github.com/<ユーザ名>/golang-lib"
これで無事にビルドが成功しました。
参考:
How to fix "invalid version" and "could not read Username" in "go get" of a private repository?
I want to use private repositories that are hosted at GitHub in another GoLang-project. What I did: I created a private ...
コメント