diff options
author | Wu Xiaotian <[email protected]> | 2025-05-18 23:33:07 +0800 |
---|---|---|
committer | Wu Xiaotian <[email protected]> | 2025-05-19 20:52:52 +0800 |
commit | e4a3b94677155195313bcf6b45d9d0bc5b14a503 (patch) | |
tree | 08f228fa08f3285efe16842794941014460d1f1d | |
parent | 1fcc7d19a4847528b18b3d7a408136136b377043 (diff) | |
download | atril-e4a3b94677155195313bcf6b45d9d0bc5b14a503.tar.bz2 atril-e4a3b94677155195313bcf6b45d9d0bc5b14a503.tar.xz |
CI: Try to use github action
-rw-r--r-- | .github/dependabot.yml | 8 | ||||
-rwxr-xr-x | .github/workflows/archlinux.sh | 44 | ||||
-rwxr-xr-x | .github/workflows/builds.sh | 75 | ||||
-rw-r--r-- | .github/workflows/builds.yml | 93 | ||||
-rwxr-xr-x | .github/workflows/debian.sh | 56 | ||||
-rwxr-xr-x | .github/workflows/fedora.sh | 51 | ||||
-rwxr-xr-x | .github/workflows/mate-desktop.sh | 97 | ||||
-rw-r--r-- | .github/workflows/release.yml | 39 | ||||
-rwxr-xr-x | .github/workflows/ubuntu.sh | 56 |
9 files changed, 519 insertions, 0 deletions
diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 00000000..80851cd3 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,8 @@ +# Enable dependabot to keep our GHA pins automatically +# updated, so we don't fall too far behind in the future +version: 2 +updates: + - package-ecosystem: github-actions + directory: "/" + schedule: + interval: weekly diff --git a/.github/workflows/archlinux.sh b/.github/workflows/archlinux.sh new file mode 100755 index 00000000..dfc83d2c --- /dev/null +++ b/.github/workflows/archlinux.sh @@ -0,0 +1,44 @@ +#!/usr/bin/bash + +# Use grouped output messages +infobegin() { + echo "::group::${1}" +} +infoend() { + echo "::endgroup::" +} + +# Required packages on Archlinux +requires=( + ccache # Use ccache to speed up build + clang # Build with clang on Archlinux + meson # Used for meson build +) + +requires+=( + autoconf-archive + caja + djvulibre + gcc + git + glib2-devel + gobject-introspection + itstool + libgxps + make + mate-common + mate-desktop + poppler-glib + texlive-bin + webkit2gtk + which + yelp-tools +) + +infobegin "Update system" +pacman --noconfirm -Syu +infoend + +infobegin "Install dependency packages" +pacman --noconfirm -S ${requires[@]} +infoend diff --git a/.github/workflows/builds.sh b/.github/workflows/builds.sh new file mode 100755 index 00000000..6f749307 --- /dev/null +++ b/.github/workflows/builds.sh @@ -0,0 +1,75 @@ +#!/usr/bin/bash + +set -e +set -o pipefail + +CPUS=$(grep processor /proc/cpuinfo | wc -l) + +# Use grouped output messages +infobegin() { + echo "::group::${1}" +} +infoend() { + echo "::endgroup::" +} + +# Run meson first, then run autotools +# Because meson dist requires a clean git workspace +# Autotools will modify some files (such as po, etc.), making them dirty. +if [ -f meson.build ]; then + + infobegin "Configure (meson)" + meson setup _build --prefix=/usr + infoend + + infobegin "Build (meson)" + meson compile -C _build + infoend + + infobegin "Test (meson)" + ninja -C _build test || { + # ModuleNotFoundError: No module named 'dogtail' + echo "Ignore test fail" + } + infoend + + infobegin "Dist (meson)" + # Git safedirectory stop ninja dist + # https://github.com/git/git/commit/8959555cee7ec045958f9b6dd62e541affb7e7d9 + # https://git-scm.com/docs/git-config/2.35.2#Documentation/git-config.txt-safedirectory + git config --global --add safe.directory ${PWD} + ninja -C _build dist || { + # ModuleNotFoundError: No module named 'dogtail' + echo "Ignore test fail" + } + infoend +fi + +if [ -f autogen.sh ]; then + infobegin "Configure (autotools)" + NOCONFIGURE=1 ./autogen.sh + ./configure --prefix=/usr --enable-compile-warnings=maximum || { + cat config.log + exit 1 + } + infoend + + infobegin "Build (autotools)" + make -j ${CPUS} + infoend + + infobegin "Check (autotools)" + make -j ${CPUS} check || { + find -name test-suite.log -exec cat {} \; + # ModuleNotFoundError: No module named 'dogtail' + echo "Ignore test fail" + } + infoend + + infobegin "Distcheck (autotools)" + make -j ${CPUS} distcheck || { + # ModuleNotFoundError: No module named 'dogtail' + echo "Ignore test fail" + } + infoend +fi diff --git a/.github/workflows/builds.yml b/.github/workflows/builds.yml new file mode 100644 index 00000000..e71c9ad5 --- /dev/null +++ b/.github/workflows/builds.yml @@ -0,0 +1,93 @@ +name: CI Build + +on: + push: + branches: + - master + pull_request: + branches: + - master + workflow_dispatch: + +# cancel already running builds of the same branch or pull request +concurrency: + group: ci-${{ github.workflow }}-${{ github.event.pull_request.number || github.head_ref || github.sha }} + cancel-in-progress: true + +env: + MATE_DESKTOP_VERSION: 1.28.2 + CACHE_PATH: /tmp/.cache + +jobs: + build: + name: Build on ${{matrix.container}} (using ${{matrix.cc}}) + runs-on: ubuntu-latest + container: + image: ${{matrix.container}} + volumes: + - /tmp/.cache + + strategy: + fail-fast: false # don't cancel other jobs in the matrix if one fails + matrix: + container: + [ + "debian:testing", + "fedora:latest", + "ubuntu:rolling", + "archlinux:latest", + ] + cc: ["gcc"] + cxx: ["g++"] + include: + - container: "archlinux:latest" + cc: "clang" + cxx: "clang++" + + env: + # Speed up build with ccache + CC: ccache ${{ matrix.cc }} + CXX: ccache ${{ matrix.cxx }} + CONTAINER: ${{ matrix.container }} + + steps: + - name: Setup environment variables + id: distro-name + shell: bash + run: | + split=(${CONTAINER//:/ }) + distro=${split[0]} + short_sha=${SHA:0:8} + echo "DISTRO=$distro" | tee -a $GITHUB_ENV + - name: Install git command + shell: bash + run: | + echo "::group::Install git ..." + apt-get update -qq && apt-get install --assume-yes git || true + dnf update -y && dnf install -y git || true + pacman --noconfirm -Sy git || true + echo "::endgroup::" + - name: Repository checkout + uses: actions/checkout@v4 + with: + submodules: "true" + - name: Install dependency packages + run: .github/workflows/${{ env.DISTRO }}.sh + - name: Enable ccache to speed up builds + uses: hendrikmuhs/[email protected] + with: + key: ${{ env.DISTRO }}-${{ matrix.cc }} + + # INFO: M-C-C depends mate-desktop 1.27.1+, so we should install it from source. + - name: Cache mate-desktop binary packages + uses: actions/cache@v3 + id: cache-mate-desktop + with: + path: ${{ env.CACHE_PATH }} + key: ${{ env.DISTRO }}-build-mate-desktop-${{env.MATE_DESKTOP_VERSION}} + - name: Built and install mate-desktop from source + run: .github/workflows/mate-desktop.sh ${{env.MATE_DESKTOP_VERSION}} ${{ env.CACHE_PATH }} + # INFO: M-C-C depends mate-desktop 1.27.1+, install finished. + + - name: Build the source code + run: .github/workflows/builds.sh diff --git a/.github/workflows/debian.sh b/.github/workflows/debian.sh new file mode 100755 index 00000000..b0953dc5 --- /dev/null +++ b/.github/workflows/debian.sh @@ -0,0 +1,56 @@ +#!/usr/bin/bash + +# Use grouped output messages +infobegin() { + echo "::group::${1}" +} +infoend() { + echo "::endgroup::" +} + +# Required packages on Debian +requires=( + ccache # Use ccache to speed up build + meson # Used for meson build +) + +requires+=( + at-spi2-core + autopoint + git + gobject-introspection + libcaja-extension-dev + libdjvulibre-dev + libgail-3-dev + libgirepository1.0-dev + libglib2.0-dev + libgtk-3-dev + libgxps-dev + libkpathsea-dev + libmate-desktop-dev + libpoppler-glib-dev + libsecret-1-dev + libsm-dev + libspectre-dev + libsynctex-dev + libtiff-dev + libwebkit2gtk-4.1-dev + libx11-dev + libxml2-dev + lsb-release + make + mate-common + xsltproc + yelp-tools + zlib1g-dev +) + +infobegin "Update system" +apt-get update -qq +infoend + +infobegin "Install dependency packages" +env DEBIAN_FRONTEND=noninteractive \ + apt-get install --assume-yes \ + ${requires[@]} +infoend diff --git a/.github/workflows/fedora.sh b/.github/workflows/fedora.sh new file mode 100755 index 00000000..ef1eae54 --- /dev/null +++ b/.github/workflows/fedora.sh @@ -0,0 +1,51 @@ +#!/usr/bin/bash + +# Use grouped output messages +infobegin() { + echo "::group::${1}" +} +infoend() { + echo "::endgroup::" +} + +# Required packages on Fedora +requires=( + ccache # Use ccache to speed up build + meson # Used for meson build +) + +requires+=( + autoconf-archive + cairo-gobject-devel + caja-devel + desktop-file-utils + djvulibre-devel + gcc + gcc-c++ + git + gobject-introspection-devel + gtk3-devel + libXt-devel + libglade2-devel + libgxps-devel + libjpeg-turbo-devel + libsecret-devel + libspectre-devel + libtiff-devel + make + mate-common + mate-desktop-devel + poppler-glib-devel + redhat-rpm-config + texlive-lib-devel + webkit2gtk4.1-devel + yelp-tools +) + +infobegin "Update system" +dnf update -y +infoend + +infobegin "Install dependency packages" +dnf install -y ${requires[@]} +infoend diff --git a/.github/workflows/mate-desktop.sh b/.github/workflows/mate-desktop.sh new file mode 100755 index 00000000..8e76b048 --- /dev/null +++ b/.github/workflows/mate-desktop.sh @@ -0,0 +1,97 @@ +#!/usr/bin/bash + +set -e +set -o pipefail + +NAME="mate-desktop" +TEMP_DIR=$(mktemp -d) +OS=$(cat /etc/os-release | grep ^ID | head -n 1 | awk -F= '{ print $2}') +TAG=$1 +CACHE_DIR=$2 + +# Use grouped output messages +infobegin() { + echo "::group::${1}" +} +infoend() { + echo "::endgroup::" +} + +# Required packages to build mate-desktop +debian_requires=( + libgirepository1.0-dev + yelp-tools + iso-codes + gobject-introspection +) + +fedora_requires=( + iso-codes-devel + gobject-introspection +) + +ubuntu_requires=( + yelp-tools + iso-codes +) + +requires=$(eval echo '${'"${OS}_requires[@]}") + +infobegin "Install Depends for mate-desktop" +case ${OS} in +arch) + #pacman --noconfirm -Syu + #pacman --noconfirm -S ${requires[@]} + ;; +debian | ubuntu) + apt-get update -qq + env DEBIAN_FRONTEND=noninteractive \ + apt-get install --assume-yes --no-install-recommends ${requires[@]} + ;; +fedora) + dnf update -y + dnf install -y ${requires[@]} + ;; +esac +infoend + +# Use cached packages first +if [ -f $CACHE_DIR/${NAME}-${TAG}.tar.xz ]; then + echo "Found cache package, reuse it" + tar -C / -Jxf $CACHE_DIR/${NAME}-${TAG}.tar.xz +else + git clone --recurse-submodules https://github.com/mate-desktop/${NAME} + + # Foldable output information + infobegin "Configure" + cd ${NAME} + git checkout v${TAG} + if [[ ${OS} == "debian" || ${OS} == "ubuntu" ]]; then + ./autogen.sh --prefix=/usr --libdir=/usr/lib/x86_64-linux-gnu --libexecdir=/usr/lib/x86_64-linux-gnu || { + cat config.log + exit 1 + } + else + ./autogen.sh --prefix=/usr || { + cat config.log + exit 1 + } + fi + infoend + + infobegin "Build" + make -j ${JOBS} + infoend + + infobegin "Install" + make install + infoend + + # Cache this package version + infobegin "Cache" + [ -d ${CACHE_DIR} ] || mkdir -p ${CACHE_DIR} + make install DESTDIR=${TEMP_DIR} + cd $TEMP_DIR + tar -J -cf $CACHE_DIR/${NAME}-${TAG}.tar.xz * + infoend +fi diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 00000000..2134f9ac --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,39 @@ +name: Release Version +on: + push: + tags: + - "v*.*.*" + +env: + MATE_DESKTOP_VERSION: 1.28.2 + CACHE_PATH: /tmp/.cache + +jobs: + release: + name: Release New Version + runs-on: ubuntu-latest + steps: + - name: Repository checkout + uses: actions/checkout@v3 + with: + submodules: "true" + + - name: Install dependency packages + run: sudo .github/workflows/ubuntu.sh + + - name: Install higher version Mate component packages + run: sudo .github/workflows/mate-desktop.sh ${{env.MATE_DESKTOP_VERSION}} ${{ env.CACHE_PATH }} + + - name: Build the source code + run: .github/workflows/builds.sh + + - name: Install GH CLI + uses: dev-hanz-ops/[email protected] + with: + gh-cli-version: 2.39.1 + + - name: Create github release + run: | + gh release create ${{ github.ref_name }} --title ${{ github.ref_name }} --generate-notes _build/meson-dist/* + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/ubuntu.sh b/.github/workflows/ubuntu.sh new file mode 100755 index 00000000..6a50d4ed --- /dev/null +++ b/.github/workflows/ubuntu.sh @@ -0,0 +1,56 @@ +#!/usr/bin/bash + +# Use grouped output messages +infobegin() { + echo "::group::${1}" +} +infoend() { + echo "::endgroup::" +} + +# Required packages on Ubuntu +requires=( + ccache # Use ccache to speed up build + meson # Used for meson build +) + +requires+=( + autopoint + clang + clang-tools + git + gobject-introspection + libcaja-extension-dev + libdjvulibre-dev + libgail-3-dev + libgirepository1.0-dev + libglib2.0-dev + libgtk-3-dev + libgxps-dev + libkpathsea-dev + libmate-desktop-dev + libpoppler-glib-dev + libsecret-1-dev + libsm-dev + libspectre-dev + libsynctex-dev + libtiff-dev + libx11-dev + libxml2-dev + lsb-release + make + mate-common + xsltproc + yelp-tools + zlib1g-dev +) + +infobegin "Update system" +apt-get update -y +infoend + +infobegin "Install dependency packages" +env DEBIAN_FRONTEND=noninteractive \ + apt-get install --assume-yes \ + ${requires[@]} +infoend |