From 620f56535e33cc5ad259cdfd5798e9200e794287 Mon Sep 17 00:00:00 2001 From: "Yury V. Zaytsev" Date: Sat, 1 Jun 2024 18:02:06 +0200 Subject: [PATCH] Ticket #4170: implement CI via GitHub Actions Signed-off-by: Yury V. Zaytsev --- .github/workflows/ci-alpine.yml | 44 ++++++++++++++ .github/workflows/ci-fedora.yml | 47 +++++++++++++++ .github/workflows/ci-macos.yml | 42 +++++++++++++ .github/workflows/ci-solaris.yml | 46 ++++++++++++++ .github/workflows/ci-ubuntu.yml | 100 +++++++++++++++++++++++++++++++ 5 files changed, 279 insertions(+) create mode 100644 .github/workflows/ci-alpine.yml create mode 100644 .github/workflows/ci-fedora.yml create mode 100644 .github/workflows/ci-macos.yml create mode 100644 .github/workflows/ci-solaris.yml create mode 100644 .github/workflows/ci-ubuntu.yml diff --git a/.github/workflows/ci-alpine.yml b/.github/workflows/ci-alpine.yml new file mode 100644 index 0000000000..d4c47338fd --- /dev/null +++ b/.github/workflows/ci-alpine.yml @@ -0,0 +1,44 @@ +name: ci-alpine + +on: [ push, pull_request ] + +jobs: + build-alpine: + runs-on: ubuntu-latest + container: + image: alpine:latest + timeout-minutes: 5 + if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository + + steps: + - uses: actions/checkout@v4 + + - name: Install dependencies + run: | + apk add autoconf automake build-base libtool pkgconf sudo + apk add aspell-dev check-dev e2fsprogs-dev gettext-dev glib-dev gpm-dev libssh2-dev perl slang-dev + + - name: Bootstrap build system + run: ./autogen.sh + + - name: Build default configuration + run: | + # Tests must be run as a non-root user + adduser --home "$(pwd)" --no-create-home --disabled-password test + chown test -R "$(pwd)" + + sudo -u test -i \ + ./configure \ + --prefix="$(pwd)/install-prefix" \ + --enable-mclib \ + --enable-aspell + + sudo -u test -i make -j$(nproc) + sudo -u test -i make check + sudo -u test -i make install + + - uses: actions/upload-artifact@v4 + if: failure() + with: + name: test-suite-logs-alpine + path: ./**/test-suite.log diff --git a/.github/workflows/ci-fedora.yml b/.github/workflows/ci-fedora.yml new file mode 100644 index 0000000000..21b6f9637f --- /dev/null +++ b/.github/workflows/ci-fedora.yml @@ -0,0 +1,47 @@ +name: ci-fedora + +on: [ push, pull_request ] + +jobs: + build-fedora: + runs-on: ubuntu-latest + container: + image: fedora:latest + timeout-minutes: 5 + if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository + + steps: + - uses: actions/checkout@v4 + + - name: Install dependencies + run: | + dnf install -y autoconf automake gcc gettext-devel libtool make pkgconfig + dnf install -y aspell-devel check-devel gpm-devel libX11-devel "pkgconfig(ext2fs)" "pkgconfig(glib-2.0)" "pkgconfig(gmodule-2.0)" "pkgconfig(libssh2)" "pkgconfig(slang)" + + # For tests + dnf install -y glibc-gconv-extra + + - name: Bootstrap build system + run: ./autogen.sh + + - name: Build default configuration + run: | + # Tests must be run as a non-root user + useradd --home "$(pwd)" test + chown test -R "$(pwd)" + + sudo -u test -i \ + ./configure \ + --prefix="$(pwd)/install-prefix" \ + --enable-mclib \ + --enable-aspell + + sudo -u test -i make -j$(nproc) + sudo -u test -i make check + sudo -u test -i make install + + - uses: actions/upload-artifact@v4 + if: failure() + with: + name: test-suite-logs-fedora + path: ./**/test-suite.log diff --git a/.github/workflows/ci-macos.yml b/.github/workflows/ci-macos.yml new file mode 100644 index 0000000000..3d04b2fbc5 --- /dev/null +++ b/.github/workflows/ci-macos.yml @@ -0,0 +1,42 @@ +name: ci-macos + +on: [ push, pull_request ] + +jobs: + build-macos: + runs-on: macos-latest + timeout-minutes: 5 + if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository + + env: + CFLAGS: -Wno-assign-enum + + steps: + - uses: actions/checkout@v4 + + - name: Install dependencies + run: | + brew install autoconf automake gettext check gnu-indent libtool pkg-config + brew install aspell e2fsprogs glib libssh2 openssl s-lang + + # unzip is part of the base system + + - name: Bootstrap build system + run: ./autogen.sh + + - name: Build default configuration + run: | + ./configure \ + --prefix="$(pwd)/install-prefix" \ + --enable-mclib \ + --enable-aspell=/opt/homebrew + + make -j$(sysctl -n hw.logicalcpu) + make check + make install + + - uses: actions/upload-artifact@v4 + if: failure() + with: + name: test-suite-logs-macos + path: ./**/test-suite.log diff --git a/.github/workflows/ci-solaris.yml b/.github/workflows/ci-solaris.yml new file mode 100644 index 0000000000..69a4decde5 --- /dev/null +++ b/.github/workflows/ci-solaris.yml @@ -0,0 +1,46 @@ +name: ci-solaris + +on: [ push ] + +jobs: + build-solaris: + runs-on: ubuntu-latest + timeout-minutes: 15 + if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository + + steps: + - uses: actions/checkout@v4 + + - name: Build on Solaris + uses: vmactions/solaris-vm@v1 + with: + release: "11.4-gcc" # autoconf automake developer/gcc/gcc-c libtool pkg-config + prepare: | + pkg install --no-backup-be --no-refresh --accept -v \ + aspell check glib2 libssh2 libx11 + + run: | + ./autogen.sh + + useradd -d "$(pwd)" test + chown test -R $(pwd) + + su - test -c ' \ + export PKG_CONFIG_PATH=/usr/lib/64/pkgconfig \ + \ + ./configure \ + --prefix="$(pwd)/install-prefix" \ + --with-screen=ncurses \ + --enable-mclib \ + --enable-aspell && \ + \ + make && \ + make check && \ + make install \ + ' + + - uses: actions/upload-artifact@v4 + if: failure() + with: + name: test-suite-logs-solaris + path: ./**/test-suite.log diff --git a/.github/workflows/ci-ubuntu.yml b/.github/workflows/ci-ubuntu.yml new file mode 100644 index 0000000000..00c65fdb4c --- /dev/null +++ b/.github/workflows/ci-ubuntu.yml @@ -0,0 +1,100 @@ +name: ci-ubuntu + +on: [ push, pull_request ] + +jobs: + build-ubuntu: + runs-on: ubuntu-latest + timeout-minutes: 10 + if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository + + steps: + - uses: actions/checkout@v4 + + - name: Install dependencies + run: | + sudo apt-get install -y autoconf autopoint check gettext indent libtool pkg-config + sudo apt-get install -y e2fslibs-dev libaspell-dev libglib2.0-dev libgpm-dev libncurses5-dev libpcre2-dev libslang2-dev libssh2-1-dev libx11-dev unzip + + - name: Bootstrap build system + run: ./autogen.sh + + - name: Build distribution archive + run: | + mkdir -p build-distrib && cd $_ + + ../configure + + make dist-bzip2 + + - name: Build full configuration + run: | + tar -xjf $(ls build-distrib/mc-*.tar.bz2) --one-top-level=build-full + cd build-full + + ../configure \ + --prefix="$(pwd)/install" \ + --enable-mclib \ + --enable-aspell \ + --enable-vfs-undelfs \ + --enable-werror + + make indent + # TODO: exit 1 + git ls-files --modified + + make -j$(nproc) + make check + make install + + - name: Build ncurses & pcre2 configuration + run: | + tar -xjf $(ls build-distrib/mc-*.tar.bz2) --one-top-level=build-ncurses + cd build-ncurses + + ../configure \ + --prefix="$(pwd)/install" \ + --with-screen=ncurses \ + --with-search-engine=pcre2 \ + --enable-werror + + make -j$(nproc) + make check + + - name: Build minimal configuration + run: | + tar -xjf $(ls build-distrib/mc-*.tar.bz2) --one-top-level=build-minimal + cd build-minimal + + ../configure \ + --prefix="$(pwd)/install" \ + --disable-shared \ + --disable-static \ + --disable-maintainer-mode \ + --disable-largefile \ + --disable-nls \ + --disable-rpath \ + --disable-charset \ + --disable-mclib \ + --disable-assert \ + --disable-aspell \ + --disable-background \ + --disable-vfs \ + --disable-doxygen-doc \ + --without-x \ + --without-gpm-mouse \ + --without-internal-edit \ + --without-diff-viewer \ + --without-subshell \ + --enable-tests \ + --enable-werror + + make -j$(nproc) + make check + + - uses: actions/upload-artifact@v4 + if: failure() + with: + name: test-suite-logs-ubuntu + path: build-*/**/test-suite.log +