Skip to content
Snippets Groups Projects
.gitlab-ci.yml 13.1 KiB
Newer Older
Nicolas Werner's avatar
Nicolas Werner committed
variables:
  CCACHE_COMPILERCHECK: content
  CCACHE_DIR: "${CI_PROJECT_DIR}/.ccache"
  # prevent configure tzdata hanging apt install commands
  DEBIAN_FRONTEND: noninteractive

Nicolas Werner's avatar
Nicolas Werner committed
build-clazy:
  stage: build
Nicolas Werner's avatar
Nicolas Werner committed
  image: ubuntu:22.04
Nicolas Werner's avatar
Nicolas Werner committed
  tags: [docker]
  variables:
    CLAZY_CHECKS: level0,level1,no-non-pod-global-static
    TRAVIS_OS_NAME: linux
  before_script:
    - apt-get update
Nicolas Werner's avatar
Nicolas Werner committed
    - apt-get -y install --no-install-suggests --no-install-recommends ca-certificates build-essential ninja-build cmake gcc make automake liblmdb-dev libre2-dev
        libssl-dev libqt5multimedia5-plugins libqt5multimediagsttools5 libqt5multimediaquick5 libqt5svg5-dev
        qtmultimedia5-dev qtquickcontrols2-5-dev qttools5-dev qttools5-dev-tools qtdeclarative5-dev
        qml-module-qtmultimedia qml-module-qtquick-controls2 qml-module-qtquick-layouts qml-module-qt-labs-platform
        qt5keychain-dev ccache clazy libcurl4-openssl-dev libevent-dev libspdlog-dev git nlohmann-json3-dev libcmark-dev asciidoc # libolm-dev
Nicolas Werner's avatar
Nicolas Werner committed
  script:
    - export PATH="/usr/local/bin/:/usr/lib/ccache:${PATH}"
    - export CMAKE_BUILD_PARALLEL_LEVEL=$(cat /proc/cpuinfo | awk '/^processor/{print $3}' | wc -l)
    - cmake -GNinja -H. -Bbuild
        -DCMAKE_INSTALL_PREFIX=.deps/usr
Nicolas Werner's avatar
Nicolas Werner committed
        -DHUNTER_ENABLED=OFF -DBUILD_SHARED_LIBS=OFF -DUSE_BUNDLED_OPENSSL=ON -DUSE_BUNDLED_MTXCLIENT=ON -DUSE_BUNDLED_COEURL=ON -DUSE_BUNDLED_LMDBXX=ON -DUSE_BUNDLED_OLM=ON
Nicolas Werner's avatar
Nicolas Werner committed
        -DVOIP=OFF
        -DCMAKE_BUILD_TYPE=Release
        -DCI_BUILD=ON -DFETCHCONTENT_QUIET=OFF -DCMAKE_CXX_COMPILER=clazy
Nicolas Werner's avatar
Nicolas Werner committed
    - cmake --build build
  rules:
    - if : '$CI_PIPELINE_TRIGGERED == null'
Nicolas Werner's avatar
Nicolas Werner committed
  cache:
    key: "$CI_JOB_NAME"
    paths:
      - .ccache

Nicolas Werner's avatar
Nicolas Werner committed
build-gcc11:
Nicolas Werner's avatar
Nicolas Werner committed
  stage: build
Nicolas Werner's avatar
Nicolas Werner committed
  image: ubuntu:22.04
Nicolas Werner's avatar
Nicolas Werner committed
  tags: [docker]
  variables:
    TRAVIS_OS_NAME: linux
  before_script:
    - apt-get update
    - apt-get -y install --no-install-suggests --no-install-recommends ca-certificates build-essential ninja-build cmake gcc make automake ccache liblmdb-dev
        libssl-dev libqt5multimedia5-plugins libqt5multimediagsttools5 libqt5multimediaquick5 libqt5svg5-dev
        qtmultimedia5-dev qtquickcontrols2-5-dev qttools5-dev qttools5-dev-tools qtdeclarative5-dev
        qml-module-qtmultimedia qml-module-qtquick-controls2 qml-module-qtquick-layouts qml-module-qt-labs-platform
        qt5keychain-dev ccache clazy libcurl4-openssl-dev libevent-dev libspdlog-dev git nlohmann-json3-dev libcmark-dev asciidoc # libolm-dev
Nicolas Werner's avatar
Nicolas Werner committed
    # need recommended deps for wget
    - apt-get -y install wget
    - /usr/sbin/update-ccache-symlinks
Nicolas Werner's avatar
Nicolas Werner committed
    - rm -rf ../.hunter &&  mv .hunter ../.hunter || true
Nicolas Werner's avatar
Nicolas Werner committed
  script:
Nicolas Werner's avatar
Nicolas Werner committed
    - export PATH="/usr/lib/ccache:${PATH}"
    - cmake -GNinja -H. -Bbuild
        -DCMAKE_INSTALL_PREFIX=.deps/usr
        -DHUNTER_ROOT="../.hunter"
        -DHUNTER_ENABLED=ON -DBUILD_SHARED_LIBS=OFF -DUSE_BUNDLED_OPENSSL=ON -DUSE_BUNDLED_LMDB=OFF -DUSE_BUNDLED_QTKEYCHAIN=OFF
        -DVOIP=OFF
        -DCMAKE_BUILD_TYPE=Release -DHUNTER_CONFIGURATION_TYPES=Release
        -DCI_BUILD=ON -DFETCHCONTENT_QUIET=OFF
        -DJSON_ImplicitConversions=OFF
    - cmake --build build
  after_script:
    - mv ../.hunter .hunter
  rules:
    - if : '$CI_PIPELINE_TRIGGERED == null'
Nicolas Werner's avatar
Nicolas Werner committed
  cache:
    key: "$CI_JOB_NAME"
    paths:
      - .hunter/
      - .ccache

build-gcc10:
  stage: build
  image: debian:bullseye
  tags: [docker]
  variables:
    TRAVIS_OS_NAME: linux
  before_script:
    - apt-get update
    - apt-get -y install --no-install-suggests --no-install-recommends ca-certificates build-essential ninja-build cmake gcc make automake ccache liblmdb-dev
        libssl-dev libqt5multimedia5-plugins libqt5multimediagsttools5 libqt5multimediaquick5 libqt5svg5-dev
        qtmultimedia5-dev qtquickcontrols2-5-dev qttools5-dev qttools5-dev-tools qtdeclarative5-dev
        qml-module-qtmultimedia qml-module-qtquick-controls2 qml-module-qtquick-layouts qml-module-qt-labs-platform
        qt5keychain-dev ccache clazy libcurl4-openssl-dev libevent-dev libspdlog-dev git nlohmann-json3-dev libcmark-dev asciidoc # libolm-dev
Nicolas Werner's avatar
Nicolas Werner committed
    # need recommended deps for wget
    - apt-get -y install wget
    - /usr/sbin/update-ccache-symlinks
    - rm -rf ../.hunter &&  mv .hunter ../.hunter || true
  script:
    - export PATH="/usr/lib/ccache:${PATH}"
Nicolas Werner's avatar
Nicolas Werner committed
    - cmake -GNinja -H. -Bbuild
        -DCMAKE_INSTALL_PREFIX=.deps/usr
Nicolas Werner's avatar
Nicolas Werner committed
        -DHUNTER_ROOT="../.hunter"
Nicolas Werner's avatar
Nicolas Werner committed
        -DHUNTER_ENABLED=ON -DBUILD_SHARED_LIBS=OFF -DUSE_BUNDLED_OPENSSL=ON -DUSE_BUNDLED_LMDB=OFF -DUSE_BUNDLED_QTKEYCHAIN=OFF
Nicolas Werner's avatar
Nicolas Werner committed
        -DCMAKE_BUILD_TYPE=Release -DHUNTER_CONFIGURATION_TYPES=Release
        -DCI_BUILD=ON -DFETCHCONTENT_QUIET=OFF
        -DJSON_ImplicitConversions=OFF
        -DMAN=OFF
Nicolas Werner's avatar
Nicolas Werner committed
    - cmake --build build
Nicolas Werner's avatar
Nicolas Werner committed
  after_script:
    - mv ../.hunter .hunter
  rules:
    - if : '$CI_PIPELINE_TRIGGERED == null'
Nicolas Werner's avatar
Nicolas Werner committed
  cache:
    key: "$CI_JOB_NAME"
    paths:
      - .hunter/
      - .ccache

build-macos:
  stage: build
  tags: [macos]
  before_script:
Nicolas Werner's avatar
Nicolas Werner committed
    - rm -rf ../.hunter &&  mv .hunter ../.hunter || true
Nicolas Werner's avatar
Nicolas Werner committed
  script:
    - ./.ci/macos/build.sh
Joe Donofry's avatar
Joe Donofry committed
  after_script:
Nicolas Werner's avatar
Nicolas Werner committed
    - mv ../.hunter .hunter
  rules:
    - if : '$CI_PIPELINE_TRIGGERED == null'
Joe Donofry's avatar
Joe Donofry committed
  artifacts:
    paths:
      - build/nheko.app # not putting this in 'artifacts' subdir because we don't want to put it on releases
Joe Donofry's avatar
Joe Donofry committed
    name: nheko-${CI_COMMIT_SHORT_SHA}-macos-app
    expose_as: 'macos-app'
    public: false
Nicolas Werner's avatar
Nicolas Werner committed
  cache:
    key: "${CI_JOB_NAME}"
    paths:
      - .hunter/
      - "${CCACHE_DIR}"

Joe Donofry's avatar
Joe Donofry committed
codesign-macos:
Joe Donofry's avatar
Joe Donofry committed
  tags: [macos]
  variables:
    PLAT: "intel"
Joe Donofry's avatar
Joe Donofry committed
  before_script:
    - pip3 install dmgbuild
  script:
    - export PATH=/usr/local/opt/qt@5/bin/:${PATH}
    - ./.ci/macos/notarize.sh
  after_script:
    - ./.ci/upload-nightly-gitlab.sh artifacts/nheko-${CI_COMMIT_SHORT_SHA}-${PLAT}.dmg
Joe Donofry's avatar
Joe Donofry committed
  needs:
    - job: build-macos
      optional: true # optional since we want to be able to also trigger this job from cirrus ci for apple silicon builds.
Joe Donofry's avatar
Joe Donofry committed
  rules:
Joe Donofry's avatar
Joe Donofry committed
    - if : '$CI_PIPELINE_TRIGGERED && $CI_COMMIT_REF_PROTECTED == "true"'
    - if : '$CI_COMMIT_BRANCH == "master"'
Joe Donofry's avatar
Joe Donofry committed
    - if : $CI_COMMIT_TAG
  artifacts:
    paths:
      - artifacts/nheko-${CI_COMMIT_SHORT_SHA}-${PLAT}.dmg
      - /tmp/notarize*
Joe Donofry's avatar
Joe Donofry committed
    name: nheko-${CI_COMMIT_SHORT_SHA}-macos

Nicolas Werner's avatar
Nicolas Werner committed
build-flatpak-amd64:
  stage: build
  image: ubuntu:latest
  #image: 'registry.gitlab.gnome.org/gnome/gnome-runtime-images/gnome:master'
  tags: [docker]
  before_script:
Nicolas Werner's avatar
Nicolas Werner committed
    - apt-get update && apt-get -y install flatpak-builder git python3 curl python3-aiohttp python3-tenacity gir1.2-ostree-1.0
Nicolas Werner's avatar
Nicolas Werner committed
    - flatpak remote-add --user --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
      # see https://github.com/flatpak/flatpak-builder/issues/495
    - git config --global protocol.file.allow always
Nicolas Werner's avatar
Nicolas Werner committed
  script:
    - export VERSION=$(git describe)
    - mkdir -p build-flatpak
    - cd build-flatpak
    - flatpak-builder --install-deps-from=flathub --user --disable-rofiles-fuse --ccache --repo=repo --default-branch=${CI_COMMIT_REF_NAME//\//_} --subject="Build of Nheko ${VERSION} `date`" app ../io.github.NhekoReborn.Nheko.yaml
Nicolas Werner's avatar
Nicolas Werner committed
    - flatpak build-bundle repo nheko-amd64.flatpak io.github.NhekoReborn.Nheko ${CI_COMMIT_REF_NAME//\//_}
Nicolas Werner's avatar
Nicolas Werner committed
  after_script:
    - bash ./.ci/upload-nightly-gitlab.sh build-flatpak/nheko-amd64.flatpak
    - (cd ./scripts && ./upload-to-flatpak-repo.sh ../build-flatpak/repo) || true
Joe Donofry's avatar
Joe Donofry committed
    - (cd .. && mkdir -p artifacts && cp build-flatpak/nheko-amd64.flatpak artifacts/) || true
  rules:
    - if : '$CI_PIPELINE_TRIGGERED == null'
Nicolas Werner's avatar
Nicolas Werner committed
  cache:
    key: "$CI_JOB_NAME"
    paths:
      - build-flatpak/.flatpak-builder/
  artifacts:
    expose_as: 'flatpak-amd64'
    paths: ['artifacts/nheko-amd64.flatpak']
Nicolas Werner's avatar
Nicolas Werner committed
    name: flatpak-${CI_COMMIT_REF_NAME}-${VERSION}-amd64

build-flatpak-arm64:
  stage: build
  image: ubuntu:latest
  #image: 'registry.gitlab.gnome.org/gnome/gnome-runtime-images/gnome:master'
  tags: [docker-arm64]
  before_script:
Nicolas Werner's avatar
Nicolas Werner committed
    - apt-get update && apt-get -y install flatpak-builder git python3 curl python3-aiohttp python3-tenacity gir1.2-ostree-1.0
Nicolas Werner's avatar
Nicolas Werner committed
    - flatpak remote-add --user --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
      # see https://github.com/flatpak/flatpak-builder/issues/495
    - git config --global protocol.file.allow always
Nicolas Werner's avatar
Nicolas Werner committed
  script:
    - export VERSION=$(git describe)
    - if [ "$(grep MemTotal /proc/meminfo | tr -cd '[0-9]')" -lt "6000000" ]; then export EXTRA_FLAGS='--jobs=3'; fi
Nicolas Werner's avatar
Nicolas Werner committed
    - mkdir -p build-flatpak
    - cd build-flatpak
    - flatpak-builder --install-deps-from=flathub --user --disable-rofiles-fuse --ccache $EXTRA_FLAGS --repo=repo --default-branch=${CI_COMMIT_REF_NAME//\//_} --subject="Build of Nheko ${VERSION} `date` for arm64" app ../io.github.NhekoReborn.Nheko.yaml
Nicolas Werner's avatar
Nicolas Werner committed
    - flatpak build-bundle repo nheko-arm64.flatpak io.github.NhekoReborn.Nheko ${CI_COMMIT_REF_NAME//\//_}
Nicolas Werner's avatar
Nicolas Werner committed
  after_script:
    - bash ./.ci/upload-nightly-gitlab.sh build-flatpak/nheko-arm64.flatpak
    - (cd ./scripts && ./upload-to-flatpak-repo.sh ../build-flatpak/repo) || true
Joe Donofry's avatar
Joe Donofry committed
    - (cd .. && mkdir -p artifacts && cp build-flatpak/nheko-arm64.flatpak artifacts/) || true
Joe Donofry's avatar
Joe Donofry committed
    - if : '$CI_PIPELINE_TRIGGERED == null'
Nicolas Werner's avatar
Nicolas Werner committed
  cache:
    key: "$CI_JOB_NAME"
    paths:
      - build-flatpak/.flatpak-builder/
  artifacts:
    expose_as: 'flatpak-arm64'
    paths: ['artifacts/nheko-arm64.flatpak']
Nicolas Werner's avatar
Nicolas Werner committed
    name: flatpak-${CI_COMMIT_REF_NAME}-${VERSION}-arm64

Zhymabek Roman's avatar
Zhymabek Roman committed
appimage-amd64:
  stage: build
  image: ubuntu:22.04
  tags: [docker]
  allow_failure: true
Zhymabek Roman's avatar
Zhymabek Roman committed
  before_script:
    # Installing the packages needed to download and install third-party tools
    - apt-get update && apt-get install -y software-properties-common git wget curl python3 python3-pip python3-setuptools
Zhymabek Roman's avatar
Zhymabek Roman committed

    # Installing the packages needed to compile nheko and third-party tools
    - apt-get -y install --no-install-suggests --no-install-recommends ca-certificates build-essential ninja-build cmake gcc make automake ccache liblmdb-dev 
        libssl-dev libqt5multimedia5-plugins libqt5multimediagsttools5 libqt5multimediaquick5 libqt5svg5-dev 
        qtmultimedia5-dev qtquickcontrols2-5-dev qttools5-dev qttools5-dev-tools qtdeclarative5-dev 
        qml-module-qtmultimedia qml-module-qtquick-controls2 qml-module-qtquick-layouts qml-module-qt-labs-platform 
        qt5keychain-dev ccache clazy libcurl4-openssl-dev libevent-dev libspdlog-dev nlohmann-json3-dev libcmark-dev asciidoc libre2-dev libgtest-dev libgl1-mesa-dev qml-module-qtquick-particles2
Zhymabek Roman's avatar
Zhymabek Roman committed

    # Installing the packages needed to build AppImage
    - apt-get -yq install breeze-icon-theme desktop-file-utils elfutils fakeroot file gnupg2 gtk-update-icon-cache libgdk-pixbuf2.0-dev libgdk-pixbuf2.0-0 libglib2.0-bin librsvg2-dev libyaml-dev strace zsync squashfs-tools

    - wget https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage -O /usr/local/bin/appimagetool && \
    - chmod +x /usr/local/bin/appimagetool

    - export HOME_DIR=$(pwd)

    # Workaround for https://github.com/AppImageCrafters/appimage-builder/issues/280
    - cd /tmp
    - git clone https://github.com/AppImageCrafters/appimage-builder
    - cd appimage-builder
    - git checkout 9733877eed75aea0fa8e9a1cd26c22d77a10aa4a
    - pip3 install .
    - pip3 install cffi
    - cd $HOME_DIR
Zhymabek Roman's avatar
Zhymabek Roman committed

    - /usr/sbin/update-ccache-symlinks
    - rm -rf ../.hunter &&  mv .hunter ../.hunter || true
    
  script:
    - export PATH="/usr/local/bin/:/usr/lib/ccache:${PATH}"
    - cmake -GNinja -H. -Bbuild
        -DCMAKE_INSTALL_PREFIX=/usr
        -DHUNTER_ROOT=".hunter"
        -DHUNTER_ENABLED=ON -DBUILD_SHARED_LIBS=OFF -DUSE_BUNDLED_OPENSSL=ON -DUSE_BUNDLED_LMDB=OFF -DUSE_BUNDLED_QTKEYCHAIN=OFF -DUSE_BUNDLED_LIBEVENT=OFF
        -DVOIP=OFF -DMAN=OFF
        -DCMAKE_BUILD_TYPE=Release -DHUNTER_CONFIGURATION_TYPES=Release
        -DCI_BUILD=ON -DFETCHCONTENT_QUIET=OFF
        -DJSON_ImplicitConversions=OFF
Zhymabek Roman's avatar
Zhymabek Roman committed
    - DESTDIR=`pwd`/AppDir ninja -C build install/local
    - DESTDIR=`pwd`/AppDir ninja -C build _deps/cmark-build/src/install
    - mkdir -p AppDir/usr/lib/x86_64-linux-gnu AppDir/lib/x86_64-linux-gnu
    - appimage-builder --skip-test
  after_script:
    - mkdir -p artifacts && cp nheko-latest-x86_64.AppImage artifacts/
Zhymabek Roman's avatar
Zhymabek Roman committed
    - bash ./.ci/upload-nightly-gitlab.sh nheko-latest-x86_64.AppImage
Nicolas Werner's avatar
Nicolas Werner committed
  rules:
    - if : '$CI_PIPELINE_TRIGGERED == null'
Zhymabek Roman's avatar
Zhymabek Roman committed
  artifacts:
    paths:
      - 'artifacts/nheko-latest-x86_64.AppImage'
Zhymabek Roman's avatar
Zhymabek Roman committed
    expire_in: 1 week
    expose_as: 'appimage-amd64'
  cache:
    key: "$CI_JOB_NAME"
    paths:
      - .hunter/
      - .ccache

Nicolas Werner's avatar
Nicolas Werner committed
linting:
  stage: build
  image: alpine:latest
  tags: [docker]
  before_script:
    - apk update && apk add make git python3 py3-pip
    - apk add clang-extra-tools --repository=http://dl-cdn.alpinelinux.org/alpine/edge/main
Nicolas Werner's avatar
Nicolas Werner committed
    - export PATH="$PATH:/root/.local/bin"
    - pip3 install --user reuse
Nicolas Werner's avatar
Nicolas Werner committed
  script:
    - make lint
Nicolas Werner's avatar
Nicolas Werner committed
    - make license
  rules:
    - if : '$CI_PIPELINE_TRIGGERED == null'
github-release:
  stage: deploy
  image: alpine:latest
  tags: [docker]
  rules:
Joe Donofry's avatar
Joe Donofry committed
    - if: '$CI_COMMIT_TAG =~ /^v\d+\.\d+\.\d+$/'
Joe Donofry's avatar
Joe Donofry committed
    - appimage-amd64
    - build-flatpak-arm64
    - build-flatpak-amd64
    - codesign-macos
Joe Donofry's avatar
Joe Donofry committed
    - apk update && apk add jq curl perl
    - ./.ci/update-github-release.sh