stages:
  - build_dev
  - build_test
  - build_prod
  - deploy_to_test
  - run_tests
  - deploy_to_prod

build_dev:
  stage: build_dev
  image: docker:stable
  services:
    - docker:dind
  variables:
    DOCKER_HOST: tcp://docker:2375
    DOCKER_DRIVER: overlay2
  script:
    - docker login -u "gitlab-ci-token" -p ${CI_JOB_TOKEN} ${CI_REGISTRY}
    - docker build -t ${CI_REGISTRY_IMAGE}/dev:${CI_PIPELINE_ID} .
    - docker push ${CI_REGISTRY_IMAGE}/dev:${CI_PIPELINE_ID}
  environment:
    name: ${CI_COMMIT_REF_NAME}
    url: https://xvideos.com
  only:
    - dev
  tags:
    - buidl1-dind

build_test:
  stage: build_test
  image: docker:stable
  services:
    - docker:dind
  variables:
    DOCKER_HOST: tcp://docker:2375
    DOCKER_DRIVER: overlay2
  script:
    - docker login -u "gitlab-ci-token" -p ${CI_JOB_TOKEN} ${CI_REGISTRY}
    - docker build -t ${CI_REGISTRY_IMAGE}/test:${CI_PIPELINE_ID} .
    - docker push ${CI_REGISTRY_IMAGE}/test:${CI_PIPELINE_ID}
  environment:
    name: ${CI_COMMIT_REF_NAME}
    url: https://xvideos.com
  only:
    - test
  tags:
    - buidl1-dind

build_prod:
  stage: build_prod
  image: docker:stable
  services:
    - docker:dind
  variables:
    DOCKER_HOST: tcp://docker:2375
    DOCKER_DRIVER: overlay2
  script:
    - docker login -u "gitlab-ci-token" -p ${CI_JOB_TOKEN} ${CI_REGISTRY}
    - docker build -t ${CI_REGISTRY_IMAGE}/prod:${CI_PIPELINE_ID} .
    - docker push ${CI_REGISTRY_IMAGE}/prod:${CI_PIPELINE_ID}
  environment:
    name: ${CI_COMMIT_REF_NAME}
    url: https://xvideos.com
  only:
    - release
  tags:
    - buidl1-dind

deploy_to_test:
  stage: deploy_to_test
  image: docker:stable
  services:
    - docker:dind
  variables:
    DOCKER_HOST: tcp://docker:2375
    DOCKER_DRIVER: overlay2
  script:
    - sed 's|_IMAGE_NAME_|'"${CI_REGISTRY_IMAGE}/test"'|g; s|_VERSION_|'"${CI_PIPELINE_ID}"'|g' app.tpl.yml > app.yml; cat app.yml
    - wget https://storage.googleapis.com/kubernetes-release/release/v1.13.3/bin/linux/amd64/kubectl && chmod +x ./kubectl
    - wget https://github.com/garethr/kubeval/releases/download/0.7.3/kubeval-linux-amd64.tar.gz && tar xvf kubeval-linux-amd64.tar.gz && ./kubeval app.yml
    - ./kubectl apply -f app.yml
#  allow_failure: true
  environment:
    name: ${CI_COMMIT_REF_NAME}
    url: https://xvideos.com
  only:
    - test
  tags:
    - buidl1-dind

run_test:
  stage: run_tests
  image: docker:stable
  services:
    - docker:dind
  variables:
    DOCKER_HOST: tcp://docker:2375
    DOCKER_DRIVER: overlay2
  script:
    - docker build -f Dockerfile-tests .
  allow_failure: true
  environment:
    name: ${CI_COMMIT_REF_NAME}
    url: https://xvideos.com
  only:
    - test
  tags:
    - buidl1-dind

deploy_to_prod:
  stage: deploy_to_prod
  image: docker:stable
  services:
    - docker:dind
  variables:
    DOCKER_HOST: tcp://docker:2375
    DOCKER_DRIVER: overlay2
  script:
    - sed 's|_IMAGE_NAME_|'"${CI_REGISTRY_IMAGE}/prod"'|g; s|_VERSION_|'"${CI_PIPELINE_ID}"'|g' node1.tpl.yml > node1.yml; cat node1.yml
    - sed 's|_IMAGE_NAME_|'"${CI_REGISTRY_IMAGE}/prod"'|g; s|_VERSION_|'"${CI_PIPELINE_ID}"'|g' node2.tpl.yml > node2.yml; cat node2.yml
    - sed 's|_IMAGE_NAME_|'"${CI_REGISTRY_IMAGE}/prod"'|g; s|_VERSION_|'"${CI_PIPELINE_ID}"'|g' node3.tpl.yml > node3.yml; cat node3.yml
    - sed 's|_IMAGE_NAME_|'"${CI_REGISTRY_IMAGE}/prod"'|g; s|_VERSION_|'"${CI_PIPELINE_ID}"'|g' seed1.tpl.yml > seed1.yml; cat seed1.yml
    - wget https://storage.googleapis.com/kubernetes-release/release/v1.13.3/bin/linux/amd64/kubectl && chmod +x ./kubectl
    - wget https://github.com/garethr/kubeval/releases/download/0.7.3/kubeval-linux-amd64.tar.gz && tar xvf kubeval-linux-amd64.tar.gz
    - ./kubeval node1.yml && ./kubeval node2.yml && ./kubeval node3.yml && ./kubeval seed1.yml
    - ./kubectl apply -f node1.yml
    - ./kubectl apply -f node2.yml
    - ./kubectl apply -f node3.yml
    - ./kubectl apply -f seed1.yml
  environment:
    name: ${CI_COMMIT_REF_NAME}
    url: https://xvideos.com
  only:
    - release
  tags:
    - buidl1-dind