stages:
  - build
  - package
  - deploy

golang-build:
  only:
    - master
    - uat
    - test
  stage: build
  image: golang:1.23.0
  before_script:
    - mkdir -p /root/go/pkg/mod
    - env && echo $GOPATH
  cache: [ ]
  variables:
    GOPATH: /root/go
  script:
    - |
      export GOPROXY="https://goproxy.cn"
      export GOPRIVATE="code.mylomen.com"
      export GONOPROXY="code.mylomen.com"
      export GONOSUMDB="code.mylomen.com"
      
      go mod download
      GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -mod=mod -ldflags="-w -s" main.go
  artifacts:
    paths:
      - ./main
    expire_in: 1 hour

docker-package:
  only:
    - master
    - uat
    - test
  stage: package
  script:
    - |
      docker info
      APP_NAME=$(basename "$PWD")
      echo ${APP_NAME}
      docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
      tag="${CI_REGISTRY}/mylomen/${APP_NAME}:${CI_COMMIT_BRANCH}-${CI_COMMIT_SHA}"
      echo "Running on branch '$CI_COMMIT_BRANCH': tag = $tag" && pwd && ls && ifconfig
      echo "docker build  -t \"${tag}\" ."
      docker build -t "${tag}" .
      docker push "${tag}"
      echo "CURRENT_IMAGE_URL=${tag}" > docker-build.env
      echo "APP_NAME=${APP_NAME}" >> docker-build.env
      docker rmi "${tag}"
      rm ./main
  artifacts:
    reports:
      dotenv: docker-build.env

deploy:
  only:
    - master
#  when: manual
  image: laoma/nomad:v1
  stage: deploy
  script:
    - nomad status -address=http://10.0.12.8:4646 -token=${PROD_NOMAD_TOKEN}
    - envsubst < nomad-job-test.tpl.hcl > nomad-job.hcl
    - cat nomad-job.hcl
    - nomad validate nomad-job.hcl
    - nomad plan -address=http://10.0.12.8:4646 -token=${PROD_NOMAD_TOKEN} nomad-job.hcl 2>&1 |sed 's/\(password[^ \t]*[ \t]*\).*/\1 ... /' |tee plan.log  ||  echo
    - export INDEX=$(grep -E -o -- '-check-index [0-9]+' plan.log |tr -dc 0-9)
    - nomad run -check-index $INDEX -token=${PROD_NOMAD_TOKEN} -address=http://10.0.12.8:4646 nomad-job.hcl
  dependencies:
    - docker-package