image: docker

services:
  - docker:dind

stages:
  - build
  - build-release


build: #This will be executed on every push. It builds an docker image, which is named after the branch, so you can always use the last state of the different branches.
  stage: build
  except:
    - master
  script:
    - echo "building for branch $CI_COMMIT_REF_NAME"
    - sudo docker pull python:3
    - sudo docker build -t gitlab.jonasled.de/jonasled/url_shorter_docker:$CI_COMMIT_REF_NAME . #Build the image with the name already set to push
    - sudo docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY #Login to docker registry, username and password will be filled while executing
    - sudo docker push gitlab.jonasled.de/jonasled/url_shorter_docker:$CI_COMMIT_REF_NAME #Push the image onto the Docker registry.


build-release: #This will be executed if you push on master, it makes a new release (latest) image
  stage: build
  only:
    - master
  script:
    - export version=`cat VERSION`
    - echo "building branch $CI_COMMIT_REF_NAME, Version $version"
    - git config --global user.name "build"
    - git config --global user.email "noreply@jonasled.de"
    - git tag -a $version -m "$version" #add a tag with the current version
    - git push --tags -o ci.skip ssh://git@gitlab.jonasled.de:2222/jonasled/url_shorter_docker #Push the tag to the repo ci.skip means don't build the image again. I've configured an ssh key for the runner user,so it can push via ssh.
    - sudo docker pull python:3
    - sudo docker build -t gitlab.jonasled.de/jonasled/url_shorter_docker . #Build the image with the name already set to push
    - sudo docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY #Login to docker registry, username and password will be filled while executing
    - sudo docker push gitlab.jonasled.de/jonasled/url_shorter_docker #Push the image onto the Docker registry.