1
0
mirror of https://blitiri.com.ar/repos/chasquid synced 2025-12-17 14:37:02 +00:00
Files
go-chasquid-smtp/.gitlab-ci.yml
Alberto Bertogli 887a1cef68 gitlab-ci: Only run the image jobs if we have credentials
The image jobs should only run if there are valid credentials for
pushing the images to the respective registries, to avoid false
negatives in the test pipeline.

This can happen when the gitlab CI is run on projects that aren't set up
to push docker images, either because they're clones of the official
repo, or they are under a different gitlab instance (e.g. Debian's
salsa).

We do it by using a "rules:if" clause on specific variables:
- for Docker, $DOCKER_REGISTRY_USER which is set externally
- for GitLab, $CI_REGISTRY_IMAGE which has the address of the registry
  tied to the project.

Note that for GitLab we can't use the credentials for conditional
execution directly, since they are "persisted variables" which are not
available in this context (see [1] for more details). The
$CI_REGISTRY_IMAGE should be good enough to determine whether image
registry is enabled for the repo.

[1]: https://docs.gitlab.com/ee/ci/variables/where_variables_can_be_used.html#persisted-variables
2020-11-22 12:46:58 +00:00

95 lines
2.4 KiB
YAML

stages:
- test
- image
# Go tests, on various Go versions.
.golang_template: &golang
stage: test
before_script:
- useradd --create-home --user-group testing
- chown -R testing:testing $GOPATH/ .
script:
- su testing -c "go mod download"
- su testing -c "go get ./..."
- su testing -c "make all"
- su testing -c "go test ./..."
- su testing -c "go test -race ./..."
golang_1.11:
<<: *golang
image: golang:1.11 # Version in Debian stable.
variables:
GO111MODULE: "on"
golang_latest:
<<: *golang
image: golang:latest
# Integration test, using the module versions from the repository.
integration_stable:
stage: test
image: docker:stable
services:
- docker:dind
script:
- docker info
- docker build -t chasquid-test -f test/Dockerfile .
- docker run chasquid-test env
- docker run --name test1 chasquid-test make test
after_script:
- docker cp test1:/go/src/blitiri.com.ar/go/chasquid docker-out/
artifacts:
when: always
expire_in: 1 hour
paths:
- docker-out/
# Integration test, using the latest module versions.
integration_latest:
stage: test
image: docker:stable
services:
- docker:dind
script:
- docker info
- docker build -t chasquid-test --build-arg GO_GET_ARGS="-u=patch" -f test/Dockerfile .
- docker run chasquid-test env
- docker run --name test1 chasquid-test make test
after_script:
- docker cp test1:/go/src/blitiri.com.ar/go/chasquid docker-out/
artifacts:
when: always
expire_in: 1 hour
paths:
- docker-out/
# Build docker image, upload to gitlab registry.
gitlab:
stage: image
rules:
- if: '$CI_REGISTRY_IMAGE'
image: docker:stable
services:
- docker:dind
script:
- docker info
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- docker build -t $CI_REGISTRY_IMAGE:$CI_BUILD_REF_NAME -f docker/Dockerfile .
- docker push $CI_REGISTRY_IMAGE:$CI_BUILD_REF_NAME
# Build docker image, upload to dockerhub registry.
dockerhub:
stage: image
rules:
- if: '$DOCKER_REGISTRY_USER'
image: docker:stable
services:
- docker:dind
script:
- docker info
- docker login -u $DOCKER_REGISTRY_USER -p $DOCKER_REGISTRY_PASSWORD docker.io
- docker build -t index.docker.io/albertito/chasquid:$CI_BUILD_REF_NAME -f docker/Dockerfile .
- docker push index.docker.io/albertito/chasquid:$CI_BUILD_REF_NAME