variables: IMAGE_VERSION: $CI_COMMIT_SHORT_SHA IMAGE_TYPE: users LATEST_NAME: main GOLANGCI_LINT_VERSION: 'v1.56.2' default: image: debian:11 services: - name: docker:24.0.7-dind alias: docker stages: - check - build - test - release - release-latest before_script: - id - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - docker login -u gnomezworc -p $DOCKERHUB_TOKEN lint: image: golangci/golangci-lint:$GOLANGCI_LINT_VERSION stage: check before_script: [] services: [] script: - golangci-lint run --issues-exit-code 0 --out-format code-climate | tee gl-code-quality-report.json artifacts: reports: codequality: gl-code-quality-report.json paths: - gl-code-quality-report.json build: stage: build image: docker:23.0.3-cli artifacts: paths: - $IMAGE_TYPE-$IMAGE_VERSION-release.tar.gz variables: DOCKER_TLS_VERIFY: 1 DOCKER_CERT_PATH: /certs/client DOCKER_PATH: '.' script: - docker build --pull -t $CI_REGISTRY_IMAGE:$IMAGE_VERSION-release --target release $DOCKER_PATH - docker save $CI_REGISTRY_IMAGE:$IMAGE_VERSION-release | gzip > $IMAGE_TYPE-$IMAGE_VERSION-release.tar.gz needs: - lint integration_test: stage: test image: golang:1.21-alpine variables: DOCKER_TLS_VERIFY: 1 DOCKER_CERT_PATH: /certs/client DOCKER_HOST: tcp://docker:2376/ DOCKER_URL: docker before_script: - apk update && apk add --no-cache docker-cli - apk add bash - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - docker login -u gnomezworc -p $DOCKERHUB_TOKEN script: - bash -ex ./scripts/prepar_test.sh - . ./config/test.src - go test -v ./cmd/ - go install gotest.tools/gotestsum@latest - gotestsum --junitfile report.xml --format testname needs: - build release-latest: stage: release-latest image: docker:23.0.3-cli variables: DOCKER_TLS_VERIFY: 1 DOCKER_CERT_PATH: /certs/client script: - docker load --input $IMAGE_TYPE-$IMAGE_VERSION-release.tar.gz - docker images - docker tag $CI_REGISTRY_IMAGE:$IMAGE_VERSION-release $CI_REGISTRY_IMAGE:latest - docker push $CI_REGISTRY_IMAGE:latest dependencies: - build rules: - if: $CI_COMMIT_BRANCH == $LATEST_NAME needs: - build - integration_test release: stage: release image: docker:23.0.3-cli variables: DOCKER_TLS_VERIFY: 1 DOCKER_CERT_PATH: /certs/client script: - docker load --input $IMAGE_TYPE-$IMAGE_VERSION-release.tar.gz - docker images - docker tag $CI_REGISTRY_IMAGE:$IMAGE_VERSION-release $CI_REGISTRY_IMAGE:$CI_COMMIT_TAG - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_TAG dependencies: - build only: refs: - tags needs: - build - integration_test