default:
  image: alpine:latest
  tags: [ docker ]

variables:
  SERVER:
  WEBUI:
  MYSQL:
  PYLIB:

stages:
  - info
  - commit
  - pages

info:
  stage: info
  script:
    - echo "SERVER=$SERVER"
    - echo "WEBUI=$WEBUI"
    - echo "PYLIB=$PYLIB"
    - echo "MYSQL=$MYSQL"

add-commit:
  rules:
    - if: $CI_PIPELINE_SOURCE == "pipeline"
    - if: $CI_PIPELINE_SOURCE == "web"
  stage: commit
  before_script:
    - apk add curl
  script:
    - test -z "$CIPRIVATETOKEN" && echo "CIPRIVATETOKEN variable was empty" && exit 1;
    - test -z "$SERVER" && echo "SERVER variable was empty" && exit 1;

    - COLON=':'

      # delete last line (array closing bracket ']')
    - sed -i '$d' versions.json

      # add new record
    - echo ",{\"server\"${COLON} \"$SERVER\", \"mysqlbackend\"${COLON} \"$MYSQL\", \"pylib\"${COLON} \"$PYLIB\", \"webui\"${COLON} \"$WEBUI\" }" >> versions.json

      # add closing ] again
    - echo "\n]"

      # create the commit.json which is to send to the commit api of gitlab
    - echo -n "{\"branch\"${COLON} \"main\", \"commit_message\"${COLON} \"new commit via ci pipeline\", \"actions\"${COLON} [ { \"action\"${COLON} \"update\", \"file_path\"${COLON} \"versions.json\", \"encoding\"${COLON} \"base64\", \"content\"${COLON} \"" > commit.json
    - echo -n "$(base64 versions.json)" >> commit.json
    - echo -n '" } ] }' >> commit.json

      # for debugging
    - cat commit.json

      # commit the changes (which then triggers the pages job)
    - curl --fail-with-body --request POST --header "PRIVATE-TOKEN${COLON} $CIPRIVATETOKEN" --header "Content-Type${COLON} application/json" --data "$(cat commit.json)" "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/repository/commits"

pages:
  rules:
    - changes:
      - versions.json
  stage: pages
  script:
    - mkdir -p public
    - cp versions.json public/
    - echo '<a href="versions.json">versions.json</a>' > public/index.html
  artifacts:
    paths:
      - public