stages:          # List of stages for jobs, and their order of execution
  - build
  - pretest
  - unittest
  - packaging
  - secret_detection

variables:
  EXTLIB: "/usr/local/perl5/"
  PERL5LIB: "$EXTLIB/lib/perl5/:lib"
  # Make sure to use only codenames that are supported by SLUB's Debian repo server!
  DEBIAN_DEFAULT_RELEASE: "bookworm"
  DEBIAN_RELEASE: "${DEBIAN_DEFAULT_RELEASE}"
  DEBIAN_RELEASES: "${DEBIAN_DEFAULT_RELEASE}"
  IMAGE_TARGET: "${HARBOR_HOST}/${HARBOR_PROJECT}/${DEBIAN_DEFAULT_RELEASE}_${HARBOR_PROJECT}"
  FF_USE_FASTZIP: "true"
  # These can be specified per job or per pipeline
  ARTIFACT_COMPRESSION_LEVEL: "fast"
  CACHE_COMPRESSION_LEVEL: "fast"
#  CI_DEBUG_TRACE: "true"
  CACHEDIR: "${CI_PROJECT_NAME}/${CI_COMMIT_BRANCH}/"

default:
  timeout: 30m
  image:
    # use this image for all later stages that happen after the build stage
    name: "${IMAGE_TARGET}:latest"
  before_script:    # These steps are run before EACH job.
    - export PERL5LIB
    - export PATH="$PATH:$EXTLIB/bin"
    - export Log4perl=1
  cache:
    paths:
      - ${CACHEDIR}
    #- docker login -u ${HARBOR_USER} -p ${HARBOR_PASSWORD} ${HARBOR_HOST}
  #after_script:
    #- docker logout

build-env-job:       # This job runs in the build stage, which runs first.
  stage: build
  tags:
    - "docker"
  image:
    # Use Kaniko base image to build a Docker image to use as the base image for later jobs.
    name: gcr.io/kaniko-project/executor:debug
    entrypoint: [""]
  # Do not run the before_script tasks here, they wouldn't be included in the Docker image. Instead, provide an empty list of tasks.
  before_script: []
  # docu: https://docs.gitlab.com/ee/ci/docker/using_kaniko.html, this is basically copy-pasted from there
  script:
    - mkdir -p /kaniko/.docker;
    - echo -n "{\"auths\":{\"${HARBOR_HOST}\":{\"auth\":\"$(echo -n ${HARBOR_USERNAME}:${HARBOR_PASSWORD} | base64 -w 0)\"}},\"$(printf "%s" "$CI_DEPENDENCY_PROXY_SERVER" | cut -d':' -f1)\":{\"auth\":\"$( printf "%s:%s" "$CI_DEPENDENCY_PROXY_USER" "$CI_DEPENDENCY_PROXY_PASSWORD" | base64 -w 0 )\"}}}" | tee /kaniko/.docker/config.json
    - echo "CI_PROJECT_DIR=${CI_PROJECT_DIR}";
    # In this task, Kaniko executor is called to build the Image based on the Dockerfile provided with "--dockerfile".
    - >-
      /kaniko/executor
      --context "${CI_PROJECT_DIR}"
      --dockerfile "${CI_PROJECT_DIR}/gitlab-ci/Dockerfile"
      --destination "${IMAGE_TARGET}:latest"
      --build-arg "GITDIR=${CI_PROJECT_DIR}"
      --build-arg "DEBIAN_RELEASE"
      --cache=true
      --cache-repo=${CI_REGISTRY_IMAGE}
      --cache-copy-layers=true
      --snapshot-mode=redo
      --use-new-run
      --ignore-var-run

perl-unit-test-job:   # This job runs in the test stage.
    stage: unittest    # It only starts when the job in the build stage completes successfully.
    timeout: 60m
    tags:
      - "docker"
    script:
      - prove -l t/
    dependencies:
      - build-env-job

perl-quality-test-job:   # This job runs in the test stage.
    stage: pretest    # It only starts when the job in the build stage completes successfully.
    timeout: 30m
    tags:
      - "docker"
    script:
      - prove -l xt/
    dependencies:
      - build-env-job

create-debian-packages:
  stage: packaging
  timeout: 30m
  tags:
    - "docker"
  script:
    - mkdir debian
    - |
      cat <<RULES | sed -e "s/##TAB##/\\t/g" > debian/rules
      #!/usr/bin/make -f
      export DH_VERBOSE=1
      %:
      ##TAB##dh \$@ --with dist-zilla
      RULES
    - |
      cat <<CONTROL | sed -e "s/##TAB##/\\t/g" > debian/control
      Source: tools-for-technical-analysts
      Priority: extra
      Maintainer: andreas.romeyke@slub-dresden.de
      Section: main
      Build-Depends:  apt-file, \
      apt-utils, \
      asciidoc-base, \
      asciidoctor, \
      bash, \
      build-essential, \
      coreutils, \
      cpanminus, \
      common-application4archivematica, \
      dh-make-perl, \
      dh-dist-zilla, \
      git, \
      libapp-cmd-perl, \
      libc-dev-bin, \
      libc6-dev, \
      libcryptx-perl, \
      libdate-calc-perl, \
      libdata-printer-perl, \
      libperl-prereqscanner-perl, \
      libperl-version-perl, \
      libregexp-optimizer-perl, \
      libsoap-lite-perl, \
      libssl-dev, \
      libsys-cpu-perl, \
      libtest-cmd-perl, \
      libtext-csv-perl, \
      libtext-csv-xs-perl, \
      zlib1g-dev

      Package: tools-for-technical-analysts
      Architecture: any
      Section: main
      Priority: extra
      Description: Tools for Technical Analysts for Archivematica, an open source based digital preservation system by Artefactual
      Depends: common-application4archivematica, \
      libcryptx-perl, \
      libdate-calc-perl, \
      libdata-printer-perl, \
      libperl-prereqscanner-perl, \
      libperl-version-perl, \
      libregexp-optimizer-perl, \
      libsoap-lite-perl
      CONTROL
    - |
      cat <<CHANGELOG > debian/changelog
      tools-for-technical-analysts (1.0) stable; urgency=medium
      CHANGELOG
    - echo 10 > debian/compat
    - echo "(c) 2015-2024 Romeyke @ SLUB Dresden" > debian/copyright
    - cat -e debian/rules
    - ls -lha ../
    - dpkg-buildpackage -uc -us
    - ls -lha ./
    - ls -lha ../
    - mkdir -p artifacts/
    - cp ../*.deb artifacts/
    #- cd ../ ; dh-make-perl ${CI_PROJECT_DIR}
  dependencies:
    - perl-unit-test-job
    - perl-quality-test-job
  artifacts:
    paths:
      - artifacts/*.deb
