mirror of
https://blitiri.com.ar/repos/chasquid
synced 2025-12-17 14:37:02 +00:00
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
95 lines
2.4 KiB
YAML
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
|