Codebase list libgweather / HEAD .gitlab-ci.yml
HEAD

Tree @HEAD (Download .tar.gz)

.gitlab-ci.yml @HEADraw · history · blame

variables:

stages:
  - style-check
  - build
  - analysis
  - docs
  - deploy

.only-default:
  only:
    - merge_requests
    - branches
  except:
    - tags

style-check-diff:
  extends: .only-default
  image: fedora:latest
  stage: style-check
  script:
    - dnf install -y clang-tools-extra curl diffutils git
    - sh -x ./.gitlab-ci/run-style-check.sh

# Recipe for setting up the build
# @PROJECT_DEPS: the dependencies of the project (on Fedora)
# @MESON_VERSION: the version of Meson required by the project
.build-setup:
  image: fedora:latest
  extends: .only-default
  before_script:
    # Undo delangification present in the Fedora Docker images
    - rm -f /etc/rpm/macros.image-language-conf
    - dnf reinstall -y glib2 glibc || dnf update -y glib2 glibc
    # Add French locale support for tests
    - dnf install -y glibc-langpack-fr
    - dnf install -y ${PROJECT_DEPS}
    - pip3 install --user meson==${MESON_VERSION}
    - export PATH="$PATH:$HOME/.local/bin"

# Default build recipe
# @PROJECT_DEPS: the dependencies of the project (on Fedora)
# @MESON_VERSION: the version of Meson required by the project
# @MESON_EXTRA_FLAGS: extra arguments for the meson setup invocation
.build-default:
  image: fedora:latest
  extends: .only-default
  before_script:
    # Undo delangification present in the Fedora Docker images
    - rm -f /etc/rpm/macros.image-language-conf
    - dnf reinstall -y glib2 glibc || dnf update -y glib2 glibc
    # Add French locale support for tests
    - dnf install -y glibc-langpack-fr
    - dnf install -y ${PROJECT_DEPS}
    - pip3 install --user meson==${MESON_VERSION}
    - export PATH="$PATH:$HOME/.local/bin"
  script:
    - meson setup ${MESON_EXTRA_FLAGS} --prefix /usr _build .
    - meson compile -C _build
    - meson install -C _build
    - meson test -C _build
  artifacts:
    reports:
      junit: "_build/meson-logs/testlog.junit.xml"
    when: always
    name: "libgweather-${CI_COMMIT_REF_NAME}"
    paths:
      - "${CI_PROJECT_DIR}/_build/meson-logs"
      - "${CI_PROJECT_DIR}/_build/libgweather/GWeather-4.0.gir"
      - "${CI_PROJECT_DIR}/_build/libgweather/gweather4.vapi"

# Inherit to build the API reference via gi-docgen
# @PROJECT_DEPS: the dependencies of the project (on Fedora)
# @MESON_VERSION: the version of Meson required by the project
# @MESON_EXTRA_FLAGS: extra arguments for the meson setup invocation
# @DOCS_FLAGS: doc-related arguments for the meson setup invocation
# @DOCS_PATH: the docs output directory under the build directory
.gidocgen-build:
  image: fedora:latest
  before_script:
    - export PATH="$HOME/.local/bin:$PATH"
    - dnf install -y python3 python3-pip python3-wheel gobject-introspection-devel graphviz ninja-build redhat-rpm-config
    - dnf install -y ${PROJECT_DEPS}
    - pip3 install --user meson==${MESON_VERSION} gi-docgen jinja2 Markdown markupsafe pygments toml typogrify
  script:
    - meson setup ${MESON_EXTRA_FLAGS} ${DOCS_FLAGS} _docs .
    - meson compile -C _docs
    - |
      pushd "_docs/${DOCS_PATH}" > /dev/null
      tar cf ${CI_PROJECT_NAME}-docs.tar .
      popd > /dev/null
    - mv _docs/${DOCS_PATH}/${CI_PROJECT_NAME}-docs.tar .
  artifacts:
    when: always
    name: 'Documentation'
    expose_as: 'Download the API reference'
    paths:
      - ${CI_PROJECT_NAME}-docs.tar

fedora-x86_64:
  extends: .build-default
  stage: build
  needs: []
  variables:
    PROJECT_DEPS:
      gdk-pixbuf2-devel
      geocode-glib-devel
      gettext
      git
      gobject-introspection-devel
      itstool
      libsoup-devel
      libxml2-devel
      ninja-build
      pylint
      python3
      python3-gobject
      python3-pip
      python3-wheel
      redhat-rpm-config
      vala
    MESON_VERSION: "0.55.3"
    MESON_EXTRA_FLAGS: "--buildtype=debug -Dwerror=true -Dgtk_doc=false"

fedora-x86_64-soup3:
  extends: .build-default
  stage: build
  needs: []
  variables:
    PROJECT_DEPS:
      gcc-c++
      gdk-pixbuf2-devel
      geocode-glib-devel
      gettext
      git
      gnutls-devel
      gobject-introspection-devel
      itstool
      json-glib-devel
      libnghttp2-devel
      libpsl-devel
      libsoup-devel
      libxml2-devel
      ninja-build
      pylint
      python3
      python3-gobject
      python3-pip
      python3-wheel
      redhat-rpm-config
      sqlite-devel
      vala
    MESON_VERSION: "0.55.3"
    MESON_EXTRA_FLAGS: "--buildtype=debug -Dwerror=true -Dgtk_doc=false -Dsoup2=false"
  before_script:
    # Undo delangification present in the Fedora Docker images
    - rm -f /etc/rpm/macros.image-language-conf
    - dnf reinstall -y glib2 glibc || dnf update -y glib2 glibc
    # Add French locale support for tests
    - dnf install -y glibc-langpack-fr
    - dnf install -y ${PROJECT_DEPS}
    - pip3 install --user meson==${MESON_VERSION}
    - export PATH="$PATH:$HOME/.local/bin"
    # Build newer glib and glib-networking for libsoup3, can be removed with Fedora 35's release
    - git clone https://gitlab.gnome.org/GNOME/glib.git && pushd glib
    - git checkout 2.70.0
    - meson _build --prefix=/usr
    - ninja -C _build install
    - popd
    - git clone https://gitlab.gnome.org/GNOME/glib-networking.git && pushd glib-networking
    - git checkout 2.70.0
    - meson _build --prefix=/usr
    - ninja -C _build install
    - popd
    # Build libsoup3 and geocode-glib against libsoup3
    - git clone --depth=1 https://gitlab.gnome.org/GNOME/libsoup.git && pushd libsoup
    - meson _build --prefix=/usr -Dtls_check=false -Dgtk_doc=false
    - ninja -C _build install
    - popd
    - git clone https://gitlab.gnome.org/GNOME/geocode-glib.git && pushd geocode-glib
    - meson _build --prefix=/usr -Dsoup2=false -Denable-gtk-doc=false
    - ninja -C _build install
    - popd

static-scan:
  extends: .build-setup
  stage: analysis
  needs: []
  variables:
    PROJECT_DEPS:
      clang
      clang-analyzer
      clang-tools-extra
      gdk-pixbuf2-devel
      geocode-glib-devel
      gettext
      git
      gobject-introspection-devel
      itstool
      libsoup-devel
      libxml2-devel
      ninja-build
      pylint
      python3
      python3-gobject
      python3-pip
      python3-wheel
      redhat-rpm-config
    MESON_VERSION: "0.55.3"
    MESON_EXTRA_FLAGS: "--buildtype=debug -Dgtk_doc=false -Dintrospection=false"
  script:
    - meson setup --prefix /usr ${MESON_EXTRA_FLAGS} _scan_build .
    - ninja -C _scan_build scan-build
  artifacts:
    name: "gweather-${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}"
    when: always
    paths:
      - "_scan_build/meson-logs/scanbuild"

asan-build:
  extends: .build-setup
  stage: analysis
  needs: []
  variables:
    PROJECT_DEPS:
      clang
      clang-analyzer
      clang-tools-extra
      gdk-pixbuf2-devel
      geocode-glib-devel
      gettext
      git
      gobject-introspection-devel
      itstool
      libasan
      libsoup-devel
      libxml2-devel
      ninja-build
      pylint
      python3
      python3-gobject
      python3-pip
      python3-wheel
      redhat-rpm-config
      vala
    MESON_VERSION: "0.55.3"
    MESON_EXTRA_FLAGS: "--buildtype=debug -Db_sanitize=address -Db_lundef=false -Dintrospection=false -Dgtk_doc=false"
  script:
    - CC=clang meson setup --prefix /usr ${MESON_EXTRA_FLAGS} _asan_build .
    - meson compile -C _asan_build
    - meson test -C _asan_build
  artifacts:
    name: "gweather-${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}"
    when: always
    paths:
      - "_asan_build/meson-logs"
  allow_failure: true

coverage:
  extends: .build-setup
  stage: analysis
  needs: []
  variables:
    PROJECT_DEPS:
      gdk-pixbuf2-devel
      geocode-glib-devel
      gettext
      git
      gobject-introspection-devel
      itstool
      lcov
      libsoup-devel
      libxml2-devel
      ninja-build
      pylint
      python3
      python3-gobject
      python3-pip
      python3-wheel
      redhat-rpm-config
    MESON_VERSION: "0.55.3"
    MESON_EXTRA_FLAGS: "--buildtype=debug -Dgtk_doc=false -Dintrospection=false"
    CFLAGS: "-coverage -ftest-coverage -fprofile-arcs"
  script:
    - meson setup --prefix /usr ${MESON_EXTRA_FLAGS} _build .
    - meson compile -C _build
    - meson install -C _build
    - mkdir -p _coverage
    - lcov --config-file .gitlab-ci/lcovrc --directory _build --capture --initial --output-file "_coverage/${CI_JOB_NAME}-baseline.lcov"
    - meson test -C _build
    - lcov --config-file .gitlab-ci/lcovrc --directory _build --capture --output-file "_coverage/${CI_JOB_NAME}.lcov"
    - bash -x .gitlab-ci/gen-coverage.sh
  coverage: '/^\s+lines\.+:\s+([\d.]+\%)\s+/'
  artifacts:
    name: "gweather-${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}"
    when: always
    paths:
      - "_build/meson-logs"
      - "_coverage"

reference:
  stage: docs
  needs: []
  extends: .gidocgen-build
  variables:
    PROJECT_DEPS:
      gdk-pixbuf2-devel
      geocode-glib-devel
      gettext
      git
      gobject-introspection-devel
      itstool
      libsoup-devel
      libxml2-devel
      ninja-build
      pylint
      python3
      python3-gobject
      python3-pip
      python3-wheel
      redhat-rpm-config
      vala
    MESON_VERSION: "0.55.3"
    DOCS_FLAGS: -Dgtk_doc=true
    DOCS_PATH: doc/libgweather-4.0

pages:
  stage: deploy
  needs: ['reference']
  script:
    - mkdir public && cd public
    - tar xf ../${CI_PROJECT_NAME}-docs.tar
  artifacts:
    paths:
      - public
  only:
    - master
    - main