142 lines
4.0 KiB
YAML
142 lines
4.0 KiB
YAML
include:
|
|
- project: $TEMPLATES_PROJECT_NAME
|
|
file: 'docker-k8s-utils.yml'
|
|
ref: $TEMPLATES_DEFAULT_BRANCH
|
|
- project: $TEMPLATES_PROJECT_NAME
|
|
file: 'utils.yml'
|
|
ref: $TEMPLATES_DEFAULT_BRANCH
|
|
|
|
workflow:
|
|
rules:
|
|
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
|
|
when: never
|
|
# NO DEPLOYMENT
|
|
- if: '$CI_COMMIT_TAG == null'
|
|
variables:
|
|
IMAGE_TAG: $CI_COMMIT_REF_SLUG-$CI_COMMIT_SHORT_SHA
|
|
CONTAINER_IMAGE: $CI_REGISTRY_IMAGE:$IMAGE_TAG
|
|
changes:
|
|
- app/*
|
|
- app/*/*
|
|
- Dockerfile
|
|
- .gitlab-ci.yml
|
|
# STAGING/PRODUCTION - tags only
|
|
- if: '$CI_COMMIT_TAG =~ /(alpha)|(beta)|(rc)/'
|
|
variables:
|
|
IMAGE_TAG: $CI_COMMIT_TAG
|
|
CONTAINER_IMAGE: $CI_REGISTRY_IMAGE:$IMAGE_TAG
|
|
ENVIRONMENT: 'staging'
|
|
ENVIRONMENT_SHORT: 'stg'
|
|
- if: '$CI_COMMIT_TAG'
|
|
variables:
|
|
IMAGE_TAG: $CI_COMMIT_TAG
|
|
CONTAINER_IMAGE: $CI_REGISTRY_IMAGE:$IMAGE_TAG
|
|
ENVIRONMENT: 'production'
|
|
ENVIRONMENT_SHORT: 'prd'
|
|
|
|
variables:
|
|
SRC_ROOT_PATH: "./app"
|
|
VAULT_ADDR: https://vault.example.com
|
|
|
|
stages:
|
|
- lint
|
|
- build
|
|
- test
|
|
- release
|
|
|
|
variables:checker:
|
|
extends: .variables:checker
|
|
stage: .pre
|
|
variables:
|
|
VARS_TO_CHECK_APP: ""
|
|
VARS_TO_CHECK_SYSTEM: SRC_ROOT_PATH CONTAINER_IMAGE
|
|
|
|
# ###########################################
|
|
# Lint
|
|
# ###########################################
|
|
|
|
linter:
|
|
image: golangci/golangci-lint:v2.0.2-alpine
|
|
rules:
|
|
- changes:
|
|
- .gitlab-ci.yml
|
|
- app/*
|
|
- app/*/*
|
|
when: always
|
|
stage: lint
|
|
before_script:
|
|
- cd $SRC_ROOT_PATH
|
|
script:
|
|
- go mod tidy
|
|
- golangci-lint run --output.code-climate.path gl-code-quality-report.json --path-prefix /app/
|
|
artifacts:
|
|
reports:
|
|
codequality: $SRC_ROOT_PATH/gl-code-quality-report.json
|
|
build:application_test:
|
|
extends: .build:image
|
|
stage: build
|
|
variables:
|
|
BUILD_TARGET: dev
|
|
BUILD_IMAGE_DESTINATION: ${CONTAINER_IMAGE}_dev
|
|
BUILD_ARGS: ""
|
|
|
|
#######################################
|
|
# TEST
|
|
#######################################
|
|
|
|
go:tests:
|
|
image: ${CONTAINER_IMAGE}_dev
|
|
stage: test
|
|
before_script:
|
|
- cd $SRC_ROOT_PATH
|
|
- go mod tidy
|
|
- go install github.com/jstemmer/go-junit-report@latest
|
|
- go install github.com/boumenot/gocover-cobertura@latest
|
|
script:
|
|
- echo "Execute tests"
|
|
- go test ./... -v | go-junit-report > report-gotest.xml
|
|
- echo "Compute coverage"
|
|
- go test ./... -v -coverprofile=coverage.txt -covermode count
|
|
- gocover-cobertura < coverage.txt > report-coverage.xml
|
|
coverage: '/^coverage: \d+.\d+% of statements/'
|
|
artifacts:
|
|
reports:
|
|
junit: $SRC_ROOT_PATH/report-gotest.xml
|
|
coverage_report:
|
|
coverage_format: cobertura
|
|
path: $SRC_ROOT_PATH/report-coverage.xml
|
|
|
|
#######################################
|
|
# BUILD
|
|
# #####################################
|
|
|
|
build:image:
|
|
extends: .build:image
|
|
stage: build
|
|
rules:
|
|
- if: '$CI_COMMIT_TAG'
|
|
when: on_success
|
|
variables:
|
|
BUILD_TARGET: prod
|
|
BUILD_IMAGE_DESTINATION: $CONTAINER_IMAGE
|
|
BUILD_ARGS: ""
|
|
|
|
# ###########################################
|
|
# Release
|
|
# ###########################################
|
|
release:image:
|
|
image: hashicorp/vault:1.19.3
|
|
stage: release
|
|
environment: $ENVIRONMENT
|
|
before_script:
|
|
- echo "Authentification Vault"
|
|
- export VAULT_TOKEN=$(vault write -field=token auth/approle/login role_id=$VAULT_ROLE_ID secret_id=$VAULT_SECRET_ID)
|
|
script:
|
|
- echo "Push last tag on Vault"
|
|
- vault kv put app/<myApp>/$ENVIRONMENT_SHORT/image_latest name=$CONTAINER_IMAGE
|
|
needs:
|
|
- build:image
|
|
rules:
|
|
- if: '$CI_COMMIT_TAG'
|
|
when: on_success
|