# use the verse rocker image, as it contains tidyverse, devtools and some texlive
image: rocker/tidyverse

variables:
  # Set `CCACHE_BASEDIR` and `CCACHE_DIR` to point `ccache` towards the cached
  # path on the gitlab-runner. This enables to cache the output of `ccache`
  # between various runs.
  CCACHE_BASEDIR: "${CI_PROJECT_DIR}"
  CCACHE_DIR: "${CI_PROJECT_DIR}/ccache"
  # Set `ccache` to `content` to prevent rebuilding of the CI/CD containers to
  # trigger a recreate of the cache. By using `content` the compiler's `mtime`
  # is not considered as part of the hash.
  CCACHE_COMPILERCHECK: "content"
  # Enable caching for `apt-get`.
  APT_CACHE_DIR: "${CI_PROJECT_DIR}/apt-cache"
  # Export `noninteractive` frontend to prevent requesting user input.
  DEBIAN_FRONTEND: "noninteractive"
  R_LIBS_USER: "RLIB/library"
  SOURCE_FILE: "inst/rmarkdown/templates/posterdown_ids/skeleton/skeleton.Rmd"

# define stages of runner. at the moment,
# just build (no test or deploy).
stages:
  - build

build-job:
  stage: build

  cache:
    key: posterdown-ids
    paths:
      - cache
      - apt-cache/
      - ccache/
      - RLIB/library/

  artifacts:
    paths:
      - "target/*"

  before_script:
    - source `find .. -name section_helper.sh`

    - start_section apt_mirrors "Configuring apt mirror and retries"
    - . /etc/os-release || true
    - |
      # Prefer mirror lists (automatic, resilient). Optionally force a German mirror
      # by setting APT_FORCE_DE_MIRROR=1 in CI/CD variables if you want a fixed DE mirror.
      # Handle both classic sources.list and Deb822 .sources files.
      set -eu
      APT_FILES=(/etc/apt/sources.list /etc/apt/sources.list.d/*.list /etc/apt/sources.list.d/*.sources)
      # shellcheck disable=SC2068
      APT_FILES=( ${APT_FILES[@]} )
      echo "--- os-release (selected) ---"
      grep -E '^(ID|VERSION_ID|VERSION_CODENAME|UBUNTU_CODENAME)=' /etc/os-release || true
      echo "--- resolved APT source files ---"
      for f in ${APT_FILES[@]}; do [ -e "$f" ] && echo "  - $f"; done
      echo "--- env summary ---"
      echo "APT_FORCE_DE_MIRROR=${APT_FORCE_DE_MIRROR:-} ID=${ID:-} VERSION_CODENAME=${VERSION_CODENAME:-} UBUNTU_CODENAME=${UBUNTU_CODENAME:-}"
      echo "--- apt sources (pre) ---"
      for f in ${APT_FILES[@]}; do
        [ -e "$f" ] || continue
        echo "### $f"
        grep -nE '^(deb|deb-src)|^(Types|URIs|Suites|Components)=' "$f" || sed -n '1,40p' "$f" || true
      done
      echo "--- rewrite mode decision ---"
      AUTOPICK="${APT_AUTOPICK_MIRROR:-}"
      if [ "${APT_FORCE_DE_MIRROR:-}" = "auto" ]; then AUTOPICK=1; fi
      if [ "${AUTOPICK}" = "1" ]; then
        echo "Mode=AUTO_PICK OS=${ID:-unknown}"
        if [ "${ID:-}" = "ubuntu" ] && command -v curl >/dev/null 2>&1; then
          CODE_NAME="${UBUNTU_CODENAME:-${VERSION_CODENAME:-}}"
          LIST_URL="https://mirrors.ubuntu.com/mirrors.txt"
          echo "Fetching mirror list: $LIST_URL"
          MIRRORS=$(curl -fsSL "$LIST_URL" | grep -E '^https?://.+' | sed 's#/*$##' | head -n 20 || true)
          BEST_URL=""; BEST_TIME="9999"
          echo "Testing up to 20 mirrors for ${CODE_NAME} InRelease"
          for m in $MIRRORS; do
            TEST_URL="$m/dists/${CODE_NAME}/InRelease"
            RES=$(curl -m 3 --connect-timeout 2 -o /dev/null -s -w '%{time_total} %{http_code}' "$TEST_URL" || echo "9.999 000")
            TME=${RES%% *}; CODE=${RES##* }
            echo "  $(printf '%6s' "$TME")s  $CODE  $m"
            if [ "$CODE" = "200" ]; then
              BETTER=$(awk -v a="$TME" -v b="$BEST_TIME" 'BEGIN{print (a<b)?"1":"0"}')
              if [ "$BETTER" = "1" ]; then BEST_TIME="$TME"; BEST_URL="$m"; fi
            fi
          done
          if [ -n "$BEST_URL" ]; then
            MIRROR_URL="${BEST_URL}"
            echo "Selected fastest: $MIRROR_URL (time=${BEST_TIME}s)"
            for f in ${APT_FILES[@]}; do
              [ -e "$f" ] || continue
              # Replace any Ubuntu archive base with selected mirror
              sed -i -E "s#https?://[^ ]*/ubuntu#${MIRROR_URL}#g" "$f" || true
              sed -i -E "s#mirror://mirrors\.ubuntu\.com/mirrors\.txt#${MIRROR_URL}#g" "$f" || true
            done
          else
            echo "Autopick failed to find a working mirror; falling back to mirror list."
            AUTOPICK=0
          fi
        else
          echo "Autopick not available (non-Ubuntu or curl missing); falling back."
          AUTOPICK=0
        fi
      fi
      if [ "${AUTOPICK}" != "1" ] && [ "${APT_FORCE_DE_MIRROR:-}" = "1" ]; then
        echo "Mode=FORCED_MIRROR OS=${ID:-unknown}"
        if [ "${ID:-}" = "ubuntu" ]; then
          MIRROR_URL="http://de.archive.ubuntu.com/ubuntu"
          for f in ${APT_FILES[@]}; do
            [ -e "$f" ] || continue
            sed -i -E "s#https?://[^ ]*ubuntu.com/ubuntu#${MIRROR_URL}#g" "$f" || true
            sed -i -E "s#mirror://mirrors\.ubuntu\.com/mirrors\.txt#${MIRROR_URL}#g" "$f" || true
          done
        elif [ "${ID:-}" = "debian" ]; then
          MIRROR_URL="http://ftp.de.debian.org/debian"
          for f in ${APT_FILES[@]}; do
            [ -e "$f" ] || continue
            sed -i -E "s#https?://(deb|ftp)[^ ]*debian.org/debian#${MIRROR_URL}#g" "$f" || true
            sed -i -E "s#mirror://mirrors\.debian\.org/debian#${MIRROR_URL}#g" "$f" || true
          done
        fi
      elif [ "${AUTOPICK}" != "1" ]; then
        echo "Mode=MIRROR_LIST OS=${ID:-unknown}"
        if [ "${ID:-}" = "ubuntu" ]; then
          for f in ${APT_FILES[@]}; do [ -e "$f" ] && sed -i -E 's#https?://[^ ]*ubuntu.com/ubuntu#mirror://mirrors.ubuntu.com/mirrors.txt#g' "$f" || true; done
        elif [ "${ID:-}" = "debian" ]; then
          for f in ${APT_FILES[@]}; do [ -e "$f" ] && sed -i -E 's#https?://(deb|ftp)[^ ]*debian.org/debian#mirror://mirrors.debian.org/debian#g' "$f" || true; done
        fi
      fi
      echo "--- apt sources (post) ---"
      for f in ${APT_FILES[@]}; do
        [ -e "$f" ] || continue
        echo "### $f"
        grep -nE '^(deb|deb-src)|^(Types|URIs|Suites|Components)=' "$f" || sed -n '1,40p' "$f" || true
      done
      # Show which mirror hosts remain after rewriting, to aid debugging
      echo "APT_FORCE_DE_MIRROR=${APT_FORCE_DE_MIRROR:-} ID=${ID:-} VERSION_CODENAME=${VERSION_CODENAME:-}"
      grep -R "archive\.ubuntu\.com/ubuntu\|ubuntu\.com/ubuntu\|debian\.org/debian\|mirrors\.ubuntu\.com\|mirrors\.debian\.org" -n /etc/apt || true
      echo "--- apt origins (apt-cache policy) ---"
      apt-cache policy | sed -n '1,120p' || true
      printf 'Acquire::Retries "5";\nAcquire::http::Timeout "30";\nAcquire::https::Timeout "30";\nAcquire::http::Pipeline-Depth "0";\n' > /etc/apt/apt.conf.d/99retries
    - end_section apt_mirrors

    - start_section install_linux_packages "Installing missing Linux packages"
    - mkdir -pv $APT_CACHE_DIR ccache $R_LIBS_USER
    - apt-get -o Acquire::Retries=5 -o Acquire::http::Timeout=30 -o Acquire::https::Timeout=30 update
    - apt-get install --no-install-recommends -o dir::cache::archives="$APT_CACHE_DIR" -y libasound2t64 npm curl ccache libvulkan1 libu2f-udev fonts-liberation build-essential libglpk40 libcurl4-gnutls-dev libxml2-dev libsodium-dev libsecret-1-dev libfontconfig1-dev libssl-dev libxt6 libpq-dev imagemagick ghostscript inkscape scour poppler-utils qpdf fonts-stix
    # The distro Node (18, EOL) is too old for current tooling. Install the
    # current Node.js LTS (24.x) from the official tarball into /usr/local, which
    # precedes /usr/bin on PATH so `node`/`npx` resolve to it. We deliberately do
    # NOT use NodeSource/apt: its `nodejs` package does not satisfy `nodejs:any`,
    # which breaks the distro `libnode-dev`/`node-acorn` sysdeps pak installs later.
    - NODE_TARBALL=$(curl -fsSL https://nodejs.org/dist/latest-v24.x/ | grep -oE 'node-v24\.[0-9]+\.[0-9]+-linux-x64\.tar\.gz' | head -n1)
    - curl -fsSL "https://nodejs.org/dist/latest-v24.x/$NODE_TARBALL" | tar -xz -C /usr/local --strip-components=1
    - node --version
    - npx @puppeteer/browsers install chrome-headless-shell@stable
    - export CHROME=$(find ~+ -name chrome-headless-shell -type f)
    - echo "CHROME=$CHROME"
    - ln -s $CHROME /usr/bin/google-chrome
    - ln -s $(which ccache) /usr/local/sbin/gcc
    - ln -s $(which ccache) /usr/local/sbin/g++
    - locale-gen de_DE.utf8 en_GB.utf8 en_US.utf8
    - end_section install_linux_packages

    - start_section testing_chromium "Testing chrome"
    - google-chrome --version
    - end_section testing_chromium

    - start_section install_fonts "Installing Fira and emoji fonts"
    - curl -Ls https://github.com/mozilla/Fira/archive/refs/tags/4.202.tar.gz | tar -C /usr/share/fonts -zx --wildcards "*.otf"
    - apt-get install --no-install-recommends -o dir::cache::archives="$APT_CACHE_DIR" -y fonts-noto-color-emoji fonts-symbola
    - fc-cache
    - end_section install_fonts

    - start_section install_r_packages "Installing missing R packages"
#    - echo -e 'local({r <- getOption("repos")\n r["CRAN"] <- "https://cloud.r-project.org"\n options(repos=r)})' > ~/.Rprofile
    - echo "options(Ncpus=$(nproc))" >> ~/.Rprofile
    - R -e "install.packages('pak', dependencies=TRUE)"
    - R -e "pak::pak(c('devtools', 'scales', 'sp', 'raster', 'kableExtra', 'DT', 'svglite', 'qrcode', 'ggthemes', 'patchwork', 'pagedown'), dependencies=TRUE)"
    - R -e 'devtools::install_git("https://korap.ids-mannheim.de/gerrit/IDS-Mannheim/idsThemeR", dependencies=TRUE)'
    - R -e 'devtools::install_git("https://korap.ids-mannheim.de/gerrit/IDS-Mannheim/posterdown", dependencies=TRUE)'
    - end_section install_r_packages

    - start_section testing_html2pdf "Testing PDF export"
    - ./ci/html2pdf https://google.com
    - ls -l ./google.pdf
    - end_section testing_html2pdf

  script:
    - start_section installing "Installing posterdown.ids"
    - R -e 'devtools::install()'
    - end_section installing
    - start_section render "Generating demo artifacts"
    - R_CACHE_ROOTPATH=./cache R -e "require(rmarkdown); render('$SOURCE_FILE', output_format='posterdown.ids::posterdown_ids', output_dir='target')"
    - export SVG=target/$(basename $SOURCE_FILE .Rmd).svg
    - export HTML=target/$(basename $SOURCE_FILE .Rmd).html
    - export PDF=target/$(basename $SOURCE_FILE .Rmd).pdf
    - ./ci/html2pdf $HTML $PDF 1
    # Variant for printing on fabric, where solid black bleeds out: replace all
    # vector black by 15% grey (keeps QR codes scannable and text crisp).
    - ./ci/pdf-lighten-black $PDF target/$(basename $SOURCE_FILE .Rmd)_fabric.pdf
    - gs -sDEVICE=pdfwrite -dNOPAUSE -dBATCH -sPAPERSIZE=a1 -dFIXEDMEDIA -dPDFFitPage -sOutputFile=target/$(basename $SOURCE_FILE .Rmd)_a1.pdf $PDF
    - inkscape -b white --pdf-poppler -o $SVG $PDF || true
    - scour -i $SVG -o target/skeleton_optimized.svg --enable-viewboxing --enable-id-stripping --shorten-ids --indent=none
    - end_section render
