# .gitlab-ci.yml -- to test some source code build scenarios
# Copyright (C) 2016-2020  Olaf Meeuwissen
#
# License: GPL-3.0+

variables:
  REGISTRY_HUB: "registry.gitlab.com/sane-project/ci-envs"
  CONFIGURE_MINI: "--enable-silent-rules"
  CONFIGURE_FULL: "--with-usb --with-usb-record-replay --with-avahi --enable-pnm-backend --with-libcurl --with-poppler-glib"

stages:
  - tarball
  - compile
  - snapshot
  - release

# This job creates the source tarball that is the *sole* input to our
# compile stage.  The job is meant to be run on the stable release of
# Debian GNU/Linux.

make-dist:
  image: $REGISTRY_HUB:debian-bullseye-mini
  stage: tarball
  script:
  - git ls-files | xargs ./tools/style-check.sh
  - ./autogen.sh
  - ./tools/create-changelog.sh
  - ./configure
  - make dist
  artifacts:
    paths:
    - sane-backends-*.tar.gz
    expire_in: 1 day

.compile_template: &compile_definition
  stage: compile
  script:
  - mkdir build
  - cd build
  - tar xzf ../sane-backends-*.tar.gz --strip-components=1
  - ./configure $CONFIGURE_OPTS
  - make -j2 -k $MAKE_FLAGS

debian-10-full:
  image: $REGISTRY_HUB:debian-buster-full
  variables:
    CONFIGURE_OPTS: "$CONFIGURE_MINI $CONFIGURE_FULL"
    MAKE_FLAGS: "CFLAGS=-Werror CXXFLAGS=-Werror"
  <<: *compile_definition

debian-11-mini:
  image: $REGISTRY_HUB:debian-bullseye-mini
  variables:
    CONFIGURE_OPTS: "$CONFIGURE_MINI"
    MAKE_FLAGS: "CFLAGS=-Werror CXXFLAGS=-Werror"
  <<: *compile_definition

# In addition to the regular compile check, the full Debian stable
# environment is used to keep some of the HTML documentation that's
# available from our website up-to-date.

debian-11-full:
  image: $REGISTRY_HUB:debian-bullseye-full
  variables:
    CONFIGURE_OPTS: "$CONFIGURE_MINI $CONFIGURE_FULL"
    MAKE_FLAGS: "CFLAGS=-Werror CXXFLAGS=-Werror"
  <<: *compile_definition
  after_script:
  - make -C build/doc html-pages
  - rm -rf lists && mkdir lists && mv build/doc/*.html lists/
  - cd build/doc && doxygen doxygen-sanei.conf && mv sanei-html ../../doc
  artifacts:
    paths:
    - sane-backends-*.tar.gz
    - lists
    - doc/sanei-html
    expire_in: 1 day

fedora-36-clang:
  image: $REGISTRY_HUB:fedora-36-clang
  variables:
    CONFIGURE_OPTS: "$CONFIGURE_MINI $CONFIGURE_FULL"
    MAKE_FLAGS: "CFLAGS=-Werror CXXFLAGS=-Werror"
  <<: *compile_definition

alpine-3.15-musl:
  image: $REGISTRY_HUB:alpine-3.15-musl
  variables:
    CONFIGURE_OPTS: "$CONFIGURE_MINI $CONFIGURE_FULL"
    MAKE_FLAGS: "CFLAGS=-Werror CXXFLAGS=-Werror"
  <<: *compile_definition
  allow_failure: true

ubuntu-22.04-lts:
  image: $REGISTRY_HUB:ubuntu-jammy-dist
  variables:
    CONFIGURE_OPTS: "$CONFIGURE_MINI $CONFIGURE_FULL"
    MAKE_FLAGS: "CFLAGS=-Werror CXXFLAGS=-Werror"
  <<: *compile_definition

# This snapshot stage job makes sure that the source tarball has all
# it needs to rebuild itself, install everything built and cleans up
# without leaving any droppings behind when uninstalling.  The build
# result will be available as a snapshot for a limited time period.
# People that prefer a source tarball to work with should use this
# snapshot.
# Some HTML documentation derived from this project's source is also
# uploaded for use by our website so it uses the latest information.
# It gets these artifacts from the full compile job on Debian stable,
# hence the dependency.

make-distcheck:
  image: $REGISTRY_HUB:debian-bullseye-full
  stage: snapshot
  dependencies:
  - debian-11-full
  script:
  - tar xzf sane-backends-*.tar.gz --strip-components=1
  - rm sane-backends-*.tar.gz
  - ./configure
  - make distcheck
  artifacts:
    paths:
    - sane-backends-*.tar.gz
    - lists
    - doc/sanei-html
    expire_in: 90 days

# For release tags only, this manual job handles putting all of the
# releasables on the Project Releases page.  See the script for more
# details.

upload:
  image: alpine
  stage: release
  before_script:
    - apk --no-cache add curl git jq
  script:
    - ./tools/create-release.sh
  only:
    - tags
  when: manual
  variables:
    GIT_DEPTH: "3"
  allow_failure: false