stages:
  - deploy_stage
  - failed_stage

image: node:lts-alpine # Use latest LTS version of Node.js on Alpine

deploy_job:
  stage: deploy_stage

  before_script:
    - 'which ssh-agent || (apk update && apk add git openssh-client)'
    - eval $(ssh-agent -s)
    - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null
    - mkdir -p ~/.ssh
    - chmod 700 ~/.ssh
    - echo "$SSH_KNOWN_HOSTS" > ~/.ssh/known_hosts
    - chmod 644 ~/.ssh/known_hosts

  script:
    - sh src/script.sh

    - git checkout master
    - git config --global user.name "curben-bot"
    - git config --global user.email "3048979-curben-bot@users.noreply.gitlab.com"

    # Commit the changes
    - sh src/commit.sh

    # Generate successful status badge
    - mkdir -p .gitlab/
    - sh src/badge.sh "success"
    - git add .gitlab/status.svg
    # Only commit when diff exists https://stackoverflow.com/a/8123841
    - git diff-index --quiet HEAD || git commit -m "Success pipeline"

    - ssh -T git@gitlab.com
    - git remote set-url origin git@gitlab.com:curben/tracking-filter.git
    - git push origin master

  rules:
    # Only trigger through schedule job in master branch
    - if: '$CI_COMMIT_REF_NAME == "master" && $CI_PIPELINE_SOURCE == "schedule"'
      when: always
    # Only trigger through "Run pipeline" in master branch
    - if: '$CI_COMMIT_REF_NAME == "master" && $CI_PIPELINE_SOURCE == "web"'
      when: always

  # Upload working folder as a job artifact
  artifacts:
    paths:
      - tmp/
    expire_in: 30 days

failed_job:
  stage: failed_stage

  before_script:
    - 'which ssh-agent || (apk update && apk add openssh-client git)'
    - eval $(ssh-agent -s)
    - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null
    - mkdir -p ~/.ssh
    - chmod 700 ~/.ssh
    - echo "$SSH_KNOWN_HOSTS" > ~/.ssh/known_hosts
    - chmod 644 ~/.ssh/known_hosts

  script:
    - git checkout master
    - git config --global user.name "curben-bot"
    - git config --global user.email "3048979-curben-bot@users.noreply.gitlab.com"

    - mkdir -p .gitlab/
    - sh src/badge.sh "failed"
    - git add .gitlab/status.svg
    - git diff-index --quiet HEAD || git commit -m "Failed pipeline"
    - ssh -T git@gitlab.com
    - git remote set-url origin git@gitlab.com:curben/tracking-filter.git
    - git push origin master

  rules:
    - if: '$CI_COMMIT_REF_NAME == "master" && $CI_PIPELINE_SOURCE == "schedule"'
      # Run this job only when deploy_job failed
      when: on_failure
    - if: '$CI_COMMIT_REF_NAME == "master" && $CI_PIPELINE_SOURCE == "web"'
      when: on_failure
