image: golang:latest variables: REPO_NAME: gitlab.com/mporrato/uBrowserSync CMDS: "ubsserver" PLATFORMS: "linux/amd64 linux/arm64 linux/armv6" before_script: - mkdir -p $GOPATH/src/$(dirname $REPO_NAME) - ln -svf $CI_PROJECT_DIR $GOPATH/src/$REPO_NAME - mkdir -p $CI_PROJECT_DIR/bin - cd $GOPATH/src/$REPO_NAME - go version stages: - lint - test - build go-vet: stage: lint script: - go vet $(go list ./... | grep -v /vendor/) go-test: stage: test script: - go test -race $(go list ./... | grep -v /vendor/) go-build: stage: build script: | for platform in $PLATFORMS ; do IFS="/" read GOOS GOARCH <<< "$platform" case $GOARCH in armv*) GOARM=$(tr -cd "0-9" <<< $GOARCH) GOARCH=arm SUFFIX="$GOOS-${GOARCH}v$GOARM" export GOARM ;; *) SUFFIX="$GOOS-$GOARCH" unset GOARM ;; esac export GOOS GOARCH for bin in $CMDS ; do echo "BUILDING $bin for $platform" go build -ldflags="-s -w" -trimpath -o bin/$bin-$SUFFIX ./cmd/$bin done done artifacts: paths: - bin/ docker-build: image: docker:20 stage: build services: - docker:20-dind variables: IMAGE_NAME: $CI_REGISTRY_IMAGE/ubsserver DOCKER_TLS_CERTDIR: "/certs" before_script: - docker version script: - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - docker build -f ./docker/ubsserver/Dockerfile -t $IMAGE_NAME:$CI_COMMIT_REF_NAME . - docker tag $IMAGE_NAME:$CI_COMMIT_REF_NAME $IMAGE_NAME:latest - docker push $IMAGE_NAME --all-tags only: - tags