Go
golang
BitbucketPipelines

【Bitbucket Pipelines】Go 言語の依存パッケージ(vendor/)等を cache する

pre-defined cache の中に golang のものは無かったので、自分で定義する必要がある。

以下は dep を使った例。


bitbucket-pipelines.yml

image: golang

pipelines:
default:
- step:
caches:
- gobin # ※ dep 等もキャッシュしている
- vendor # 依存パッケージのキャッシュ
script:
- IMPORT_PATH="${GOPATH}/src/bitbucket.org/${BITBUCKET_REPO_OWNER}/${BITBUCKET_REPO_SLUG}"
- mkdir -pv "${IMPORT_PATH}"
- tar -cO --exclude-vcs --exclude=bitbucket-pipelines.yml . | tar -xv -C "${IMPORT_PATH}"
- cd "${IMPORT_PATH}"
- make setup
- make

definitions:
caches:
gobin: "${GOPATH}/bin"
vendor: "${GOPATH}/src/bitbucket.org/${BITBUCKET_REPO_OWNER}/${BITBUCKET_REPO_SLUG}/vendor"


※以下のような Makefile の想定


Makefile

DEP := ${GOPATH}/bin/dep

.PHONY: default setup build

default: build

setup: $(DEP)
$(DEP) ensure -vendor-only

$(DEP):
go get -u github.com/golang/dep/cmd/dep

build:
go build



メモ

キャッシュを展開したあとに、同じ階層に tar でソースコードを展開しているのできちんとキャッシュが効くか不安だったが、問題無さそうだった。


参考