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

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

build-job:
  stage: build

  cache:
    key: revealjs
    paths:
      - ./cache

  artifacts:
    paths:
      - "target/*"
      - "target/ids_files/*"

  before_script:
    - source `find .. -name section_helper.sh`
    - start_section install_linux_packages "Installing missing Linux packages"
    - apt-get update
    - apt-get install -y 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 libnss3
      libuv1t64 libgbm-dev libxss1 libappindicator3-1 libasound2t64
      libatk-bridge2.0-0 libgtk-3-0 libnspr4 libnss3 libgbm-dev ca-certificates
      curl gnupg
    - curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key |
      sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
    - NODE_MAJOR=20
    - echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg]
      https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | tee
      /etc/apt/sources.list.d/nodesource.list
    - apt-get update && apt-get install nodejs -y
    - node --version
    - npm install puppeteer
    - locale-gen de_DE.utf8 en_GB.utf8 en_US.utf8
    - end_section install_linux_packages

    - start_section setup_deployment "Setup deployment"
    - "command -v ssh-agent >/dev/null || apt-get install openssh-client -y"

    ##
    ## Run ssh-agent (inside the build environment)
    ##
    - eval $(ssh-agent -s)

    ##
    ## Give the right permissions, otherwise ssh-add will refuse to add files
    ## Add the SSH key stored in SSH_PRIVATE_KEY file type CI/CD variable to the agent store
    ##
    - chmod 400 "$SSH_PRIVATE_KEY"
    - ssh-add "$SSH_PRIVATE_KEY"

    ##
    ## Create the SSH directory and give it the right permissions
    ##
    - mkdir -p ~/.ssh
    - chmod 700 ~/.ssh
    - end_section setup_deployment

    - start_section test_puppeteer "Testing puppeteer"
    - ./ci/screenshot https://www.google.com /tmp/google.png
    - end_section test_puppeteer

    - start_section install_r_packages "Installing missing R packages"
    - R -e "install.packages(c('devtools', 'remotes', 'RKorAPClient', 'httr',
      'tidytext', 'httpuv', 'scales', 'sp', 'raster', 'kableExtra', 'DT',
      'svglite', 'qrcode', 'rsvg', 'highcharter'))"
    - R -e
      'remotes::install_git("https://korap.ids-mannheim.de/gerrit/IDS-Mannheim/idsThemeR")'
    - R -e 'devtools::install(".")'
    - end_section install_r_packages

  script:
    - start_section render "Running scripts"
    - R_CACHE_ROOTPATH=./cache R -e "require(rmarkdown);
      render('examples/ids.Rmd',
      output_format='revealjs.ids::revealjs_presentation', output_dir='target')"
    - ./ci/screenshot file://`pwd`/target/ids.html target/title.png
      file://`pwd`/target/ids.html#/light-verb-constructions target/lvc.png
      file://`pwd`/target/ids.html#/registered-users target/users.png
      file://`pwd`/target/ids.html#/references-1 target/references.png
    - end_section render
    - start_section deploy "Deploying slides"
    - scp -ro StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null
      target/ids*
      cowner@klinux10:/vol/work/kupietz/slides/2023-10-08-Revealjs-demo/
