git » chasquid » smarthost » tree

[smarthost] / .gitlab-ci.yml

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.17:
  <<: *golang
  image: golang:1.17    # Oldest supported Go version.

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_COMMIT_REF_NAME -f docker/Dockerfile .
    - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME
    - |
      if [ $CI_COMMIT_REF_NAME == master ]; then
          docker tag $CI_REGISTRY_IMAGE:master $CI_REGISTRY_IMAGE:latest
          docker push $CI_REGISTRY_IMAGE:latest
      fi

# 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_COMMIT_REF_NAME -f docker/Dockerfile .
    - docker push index.docker.io/albertito/chasquid:$CI_COMMIT_REF_NAME
    - |
      if [ $CI_COMMIT_REF_NAME == master ]; then
          docker tag index.docker.io/albertito/chasquid:master index.docker.io/albertito/chasquid:latest
          docker push index.docker.io/albertito/chasquid:latest
      fi