stages:
  - pages
  - calendar
  - deploy

cache:
  paths:
    - ~/.cache/pip/
    - public/

variables:
  GIT_SUBMODULE_STRATEGY: recursive

build_pages:
  image: "golang:1.10-alpine3.8"
  stage: pages
  variables:
    SHELL: "/bin/sh"
  artifacts:
    expire_in: "1 week"
    untracked: true
  script:
    - rm -rf public/*
    - apk add --no-cache --upgrade hugo
    - hugo $(cat .hugo-params)

build_calendar:
  image: "python:3.7-alpine3.8"
  stage: calendar
  dependencies: 
    - build_pages
  artifacts:
    expire_in: "1 week"
    untracked: true
  variables:
    SHELL: "/bin/sh"
  script:
    - apk --no-cache update
    - pip install -r requirements.txt
    - python tools/merge_cals.py
    - cp static/all.ics public/all.ics
    - upcoming="$(python tools/gen_upcoming.py static/all.ics 20 5|tr '\n' ' ')" && sed -i "s#CALENDAR#$upcoming#g" public/index.html

deploy_staging:
  image: "alpine:3.8"
  stage: deploy
  dependencies: 
    - build_calendar
  variables:
    SHELL: "/bin/sh"
  script:
    - apk --no-cache --upgrade add openssh-client rsync
    - mkdir -p ~/.ssh
    - eval $(ssh-agent -s)
    - echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config
    - echo "$PRIVATE_KEY" | ssh-add -
    - rsync -e "ssh -l deploy -p 31337" -av --delete public/ 195.160.173.9:staging
  when: on_success
  environment:
    name: staging
    url: https://staging.berlin.ccc.de/
  artifacts:
    expire_in: "1 week"
    paths:
      - public/
  only:
     - staging

deploy_production:
  image: "alpine:3.8"
  stage: deploy
  dependencies: 
    - build_calendar
  variables:
    SHELL: "/bin/sh"
  script:
    - apk --no-cache --upgrade add openssh-client rsync
    - mkdir -p ~/.ssh
    - eval $(ssh-agent -s)
    - echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config
    - echo "$PRIVATE_KEY" | ssh-add -
    - rsync -e "ssh -l deploy -p 31337" -av --delete public/ 195.160.173.9:production
  when: on_success
  environment:
    name: production
    url: https://berlin.ccc.de/
  artifacts:
    expire_in: "1 week"
    paths:
      - public/
  only:
     - production