Gitlab Pipeline

stages:
  - setup
  - compile
  - test
  - build
  - cook
  - deploy
  - upload


variables:
  ENGINE_FOLDER: "C:/opt/UnrealEngine/Engine"
  PROJECT_FOLDER: "C:/opt/Projects"
  PROJECT_NAME: "RTSGame"
  ANACONDA_FOLDER: "C:/opt/anaconda"
  OUTPUT: "C:/opt/Temporary/RTSGame"
  ARCHIVE: "C:/opt/Archive/"
  OUTPUT_NAME: RTSGame

# Cook the example project, for development to run tests
development:
  stage: compile

  # Only run on my own custom runner that already has UE5 setup
  tags:
    - windows-ue5

  script:
    - . "$ANACONDA_FOLDER/shell/condabin/conda-hook.ps1"
    - conda activate "$ANACONDA_FOLDER"
    - uecli init --engine $ENGINE_FOLDER --project $PROJECT_FOLDER
    - uecli editor cook $PROJECT_NAME --platform Windows --build Development


test:
  stage: test

  tags:
    - windows-ue5

  script:
    - . "$ANACONDA_FOLDER/shell/condabin/conda-hook.ps1"
    - conda activate "$ANACONDA_FOLDER"
    - uecli test run $PROJECT_NAME /Game/Maps/AbilityTest/AbilityTest Gamekit
    - uecli test run $PROJECT_NAME /Game/Maps/AbilityTest/AbilityTest Project.Functional

cook:
  stage: cook

  tags:
    - windows-ue5

  needs:
    - package-windows

  script:
    - $LATEST_TAG = git describe --tags --abbrev=0
    - . "$ANACONDA_FOLDER/shell/condabin/conda-hook.ps1"
    - conda activate "$ANACONDA_FOLDER"
    - uecli editor cook $PROJECT_NAME --platform Windows --build Shipping --output $OUTPUT
    - Compress-Archive -Force -CompressionLevel Optimal -Path $OUTPUT -DestinationPath $ARCHIVE/${OUTPUT_NAME}_${LATEST_TAG}_${CI_COMMIT_SHORT_SHA}.zip


# Generate the documentation, using gitlab pages
pages:
  stage: deploy
  image: python:3.9-alpine

  tags:
    - docker

  needs: []

  script:
    - apk update
    - apk add doxygen
    - apk add graphviz
    - apk add git
    - apk add make
    - pip install -e .
    - pip install -r requirements.txt
    - pip install -r Docs/requirements.txt
    - cd Docs
    - make build-doc
    - cd ..
    - mkdir .public
    - cp -r Docs/_build/html/* .public
    - rm -rf public
    - mv .public public
  artifacts:
    paths:
      - public
  rules:
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH


# Upload the end results, to gitlab package repository
upload-cook:
  stage: upload
  tags:
    - windows-ue5

  rules:
    - if: '$CI_COMMIT_TAG != null'
      when: never

  script:
    - $OUTPUT = $ARCHIVE/${OUTPUT_NAME}_${LATEST_TAG}_${CI_COMMIT_SHORT_SHA}.zip
    - $URL = "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/GamekitExample/${CI_COMMIT_TAG}/${OUTPUT_NAME}-Win64.zip"
    - Invoke-RestMethod -Headers @{ "JOB-TOKEN"="$CI_JOB_TOKEN" } -InFile ${OUTPUT_NAME} -uri "$URL" -Method put