stages:
  - test
  - build
  - release

.go_template:
  image: golang:latest

sast:
  stage: test

include:
- template: Security/SAST.gitlab-ci.yml
- template: Security/Dependency-Scanning.gitlab-ci.yml

format:
  extends: .go_template
  stage: test
  script:
    - make check/fmt

vet:
  extends: .go_template
  stage: test
  allow_failure: true
  script:
    - make vet

test:
  extends: .go_template
  stage: test
  script:
    - make test

build:
  extends: .go_template
  stage: build
  script:
    - make build
  artifacts:
    paths:
      - fail2ban_exporter
    expire_in: 1 day

release:
  stage: release
  image: docker:stable
  services:
    - docker:dind
  variables:
    DOCKER_REGISTRY: $CI_REGISTRY
    DOCKER_USERNAME: $CI_REGISTRY_USER
    DOCKER_PASSWORD: $CI_REGISTRY_PASSWORD
    GIT_DEPTH: 0
  rules:
    - if: $CI_COMMIT_TAG =~ /^v.*$/
  script:
    - docker run --rm --privileged \
      -v $PWD:/go/src/gitlab.com/hectorjsmith/fail2ban-prometheus-exporter \
      -w /go/src/gitlab.com/hectorjsmith/fail2ban-prometheus-exporter \
      -v /var/run/docker.sock:/var/run/docker.sock \
      -e DOCKER_USERNAME -e DOCKER_PASSWORD -e DOCKER_REGISTRY  \
      -e GITLAB_TOKEN \
      goreleaser/goreleaser release --clean

tag images:
  stage: release
  image: docker:stable
  services:
    - docker:dind
  needs:
    - release
  rules:
    - if: $CI_COMMIT_TAG =~ /^v\d+\.\d+\.\d+$/
  variables:
    IMAGE_NAME: registry.gitlab.com/hectorjsmith/fail2ban-prometheus-exporter
  script:
    - ./.gitlab-ci/tagLatestImage.sh