Skip to content
Permalink
master
Switch branches/tags
Go to file
 
 
Cannot retrieve contributors at this time
104 lines (87 sloc) 3.26 KB
machine:
environment:
# make some env vars to save typing
# GWS should already exists on the ubuntu trusty build image
GWS: "$HOME/.go_workspace"
A: "$GWS/src/github.com/$CIRCLE_PROJECT_USERNAME"
B: "$A/$CIRCLE_PROJECT_REPONAME"
# Use to install Custom golang from https://golang.org/dl/
GODIST: "go1.9.linux-amd64.tar.gz"
GODIST_HASH: "d70eadefce8e160638a9a6db97f7192d8463069ab33138893ad3bf31b0650a79"
# server-syncstorage container to test against
PYSYNC_VERSION: "1.6.9"
services:
- docker
# install custom golang
post:
- mkdir -p download
- test -e download/$GODIST || curl -o download/$GODIST https://storage.googleapis.com/golang/$GODIST
# verify it
- echo "$GODIST_HASH download/$GODIST" | sha256sum -c
- sudo rm -rf /usr/local/go
- sudo tar -C /usr/local -xzf download/$GODIST
dependencies:
cache_directories:
- ~/download
override:
# ported from https://discuss.circleci.com/t/overriding-go-inference-in-the-dependencies-phase/660
# put the source in $GOPATH
- mkdir -p $GWS/pkg $GWS/bin $A
- ln -fs $HOME/$CIRCLE_PROJECT_REPONAME $B
# make it *only* $GWS, dunno why there's two defaults in there
- echo 'export GOPATH=$GWS' >> ~/.circlerc
# pre-compile go-sqlite3 to save time in testing/docker container building
- cd "$B" && go install ./vendor/github.com/mattn/go-sqlite3
# create a version.json
- >
printf '{"commit":"%s","version":"%s","source":"https://github.com/%s/%s","build":"%s"}\n'
"$CIRCLE_SHA1"
"$CIRCLE_TAG"
"$CIRCLE_PROJECT_USERNAME"
"$CIRCLE_PROJECT_REPONAME"
"$CIRCLE_BUILD_URL" > version.json
- cp version.json $CIRCLE_ARTIFACTS
# build a static binary
- cd "$B" && go build --ldflags '-extldflags "-static"' .
# build image and put its sha256 into artifacts to aid verification
- docker build -t "app:build" .
- test -e $CIRCLE_ARTIFACTS/bin || mkdir -p $CIRCLE_ARTIFACTS/bin
- cp go-syncstorage $CIRCLE_ARTIFACTS/bin/go-syncstorage-linux-amd64-$CIRCLE_SHA1
test:
override:
- cd "$B" && go vet ./token ./syncstorage ./web
- cd "$B" && go test -v ./token ./syncstorage ./web
- >
docker run
--net=host
--detach=true
-e "PORT=8888"
-e "HOST=127.0.0.1"
-e "SECRETS=secret"
-e "DATA_DIR=:memory:"
app:build
- sleep 3
- >
docker run
--net=host mozilla/server-syncstorage:$PYSYNC_VERSION
test_endpoint "http://127.0.0.1:8888#secret"
deployment:
hub_latest:
branch: master
commands:
- docker login -e $DOCKER_EMAIL -u $DOCKER_USER -p $DOCKER_PASS
- docker tag app:build ${DOCKERHUB_REPO}:latest
- docker push ${DOCKERHUB_REPO}:latest
hub_releases:
tag: /.*/
commands:
- docker login -e $DOCKER_EMAIL -u $DOCKER_USER -p $DOCKER_PASS
- docker tag app:build ${DOCKERHUB_REPO}:${CIRCLE_TAG}
- docker push ${DOCKERHUB_REPO}:${CIRCLE_TAG}
# push any releases candidate branches to DockerHub
hub_release_candidates:
branch: /rc_.*/
commands:
- docker login -e $DOCKER_EMAIL -u $DOCKER_USER -p $DOCKER_PASS
- docker tag app:build ${DOCKERHUB_REPO}:${CIRCLE_BRANCH}
- docker push ${DOCKERHUB_REPO}:${CIRCLE_BRANCH}