SSH しか使えない Git リポジトリにコミットされた Golang パッケージを、dep で管理したい、という場面が出てきたので、とりあえず github のプライベートリポジトリで試してみました。
今回は、メインアプリ github.com/tily/goprivatea
から、パッケージ github.com/tily/goprivateb
をインポートしてみます。
goprivateb
(インポートされる側) の内容
goprivateb リポジトリにはこんな感じの main.go
しかコミットされていません。
package goprivateb
import (
"fmt"
)
func HelloFromGoPrivateB() {
fmt.Println("Hello from Go Private B")
}
goprivatea
(メインアプリ側) での開発しはじめる
$GOPATH/src/github.com/tily/goprivatea
で作業します。
まず、goprivateb を呼び出すアプリを作ります。
$ vi main.go
package main
import (
"github.com/tily/goprivateb"
)
func main() {
goprivateb.HelloFromGoPrivateB()
}
強制的に git が SSH を使うように設定する
ここで ~/.gitconfig
に下記内容を追加します。
こうすることで、git clone https://github.com/~
しようとしたときも強制的に git clone git@github.com:~
が実行される挙動となるようです。
$ vi ~/.gitconfig
[url "git@github.com:"]
insteadOf = https://github.com/
この状態で、一度 dep init
してみます。
まだ SSH に関する設定を行っていないので、エラーになります。
(あらかじめ github に対する SSH の設定をしている場合は、エラーにならないかもです。)
$ dep init
solve error: Unable to update repositoryUnable to cache github.com/tily/goprivateb
Unable to update repository
git 用の SSH 設定を行う
SSH の設定をします。
まず github に登録している公開鍵に対応した秘密鍵を設置します。
$ vi ~/.ssh/github_private.pem
-----BEGIN RSA PRIVATE KEY-----
(秘密鍵の中身)
-----END RSA PRIVATE KEY-----
次に、SSH の config ファイルに「ホストが github.com だった場合に、上記の秘密鍵を利用する」という設定を書きます。
$ vi ~/.ssh/config
Host github.com
IdentityFile ~/.ssh/github_private.pem
ちゃんと設定した上で dep init
ここまでやったら、dep init
がうまく通るようになっています。
$ dep init
Cached github.com/tily/goprivateb
lock.json
が書き込まれています。
$ cat lock.json
{
"memo": "e7e4f306375b10d5b683a5597e7f69f3839efc5c1a5491c260b270c18429d2bb",
"projects": [
{
"name": "github.com/tily/goprivateb",
"branch": "master",
"revision": "aa1c962f1847840c78326452288b5f0c05dcded4",
"packages": [
"."
]
}
]
}
vendor/
ディレクトリに必要なファイルもダウンロードされています。
$ ls vendor/github.com/tily/goprivateb/main.go
vendor/github.com/tily/goprivateb/main.go
メインアプリも実行することができました。
$ go run main.go
Hello from Go Private B
まとめ
SSH しか使えない Git リポジトリに置いた Golang パッケージを、dep で管理できることが確認できました。
社内環境等で、SSH しか使えない Git リポジトリに Golang パッケージを置いている場合に、便利ではないでしょうか。
(試行錯誤中なので、もっといいやり方があれば教えていただけると助かります。)