summaryrefslogtreecommitdiff
path: root/.github/workflows/build.yml
diff options
context:
space:
mode:
Diffstat (limited to '.github/workflows/build.yml')
-rw-r--r--.github/workflows/build.yml163
1 files changed, 163 insertions, 0 deletions
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
new file mode 100644
index 0000000..dc7143a
--- /dev/null
+++ b/.github/workflows/build.yml
@@ -0,0 +1,163 @@
+name: Build and Test
+
+on:
+ push:
+ branches: [ master, main ]
+ tags: [ 'v*' ]
+ pull_request:
+ branches: [ master, main ]
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ distro:
+ - 'debian:testing'
+ - 'fedora:latest'
+ include:
+ - distro: 'debian:testing'
+ distro_name: 'debian'
+ - distro: 'fedora:latest'
+ distro_name: 'fedora'
+
+ container:
+ image: ${{ matrix.distro }}
+
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v4
+
+ - name: Install dependencies (Debian)
+ if: matrix.distro_name == 'debian'
+ run: |
+ apt-get update
+ apt-get install -y \
+ autopoint \
+ clang \
+ clang-tools \
+ cppcheck \
+ gcc \
+ git \
+ libatk1.0-dev \
+ libglib2.0-dev \
+ libgmp-dev \
+ libgtk-3-dev \
+ libmpc-dev \
+ libmpfr-dev \
+ libxml2-dev \
+ make \
+ mate-common \
+ yelp-tools \
+ bison \
+ flex \
+ curl
+
+ - name: Install dependencies (Fedora)
+ if: matrix.distro_name == 'fedora'
+ run: |
+ dnf update -y
+ dnf install -y \
+ autoconf-archive \
+ clang \
+ clang-analyzer \
+ cppcheck-htmlreport \
+ bison \
+ desktop-file-utils \
+ flex \
+ gcc \
+ git \
+ gmp-devel \
+ gtk3 \
+ libmpc-devel \
+ libxml2-devel \
+ make \
+ mate-common \
+ mate-desktop-devel \
+ mpfr-devel \
+ redhat-rpm-config \
+ curl \
+ which
+
+ - name: Set up environment variables
+ run: |
+ export CPU_COUNT=$(nproc)
+ echo "CPU_COUNT=$CPU_COUNT" >> $GITHUB_ENV
+ echo "DISTRO_NAME=${{ matrix.distro_name }}" >> $GITHUB_ENV
+ echo "REPO_NAME=mate-calc" >> $GITHUB_ENV
+ echo "OWNER_NAME=mate-desktop" >> $GITHUB_ENV
+ export CHECKERS="-enable-checker deadcode.DeadStores -enable-checker alpha.deadcode.UnreachableCode -enable-checker alpha.core.CastSize -enable-checker alpha.core.CastToStruct -enable-checker alpha.core.IdenticalExpr -enable-checker alpha.core.SizeofPtr -enable-checker alpha.security.ArrayBoundV2 -enable-checker alpha.security.MallocOverflow -enable-checker alpha.security.ReturnPtrRange -enable-checker alpha.unix.SimpleStream -enable-checker alpha.unix.cstring.BufferOverlap -enable-checker alpha.unix.cstring.NotNullTerminated -enable-checker alpha.unix.cstring.OutOfBounds -enable-checker alpha.core.FixedAddr -enable-checker security.insecureAPI.strcpy"
+ echo "CHECKERS=$CHECKERS" >> $GITHUB_ENV
+
+ - name: Run cppcheck (Debian only)
+ if: matrix.distro_name == 'debian'
+ shell: bash
+ run: |
+ export CFLAGS="${CFLAGS:-} -Wsign-compare"
+ cppcheck --enable=warning,style,performance,portability,information,missingInclude .
+
+ - name: Generate build system
+ run: |
+ NOCONFIGURE=1 ./autogen.sh
+
+ - name: Configure with scan-build
+ run: |
+ scan-build $CHECKERS ./configure --enable-compile-warnings=maximum
+
+ - name: Build with scan-build
+ shell: bash
+ run: |
+ if [ $CPU_COUNT -gt 1 ]; then
+ if [ "$DISTRO_NAME" == "debian" ]; then
+ scan-build $CHECKERS --keep-cc --use-cc=clang --use-c++=clang++ -o html-report make -j $CPU_COUNT
+ make clean
+ fi
+ scan-build $CHECKERS --keep-cc -o html-report make -j $CPU_COUNT
+ else
+ if [ "$DISTRO_NAME" == "debian" ]; then
+ scan-build $CHECKERS --keep-cc --use-cc=clang --use-c++=clang++ -o html-report make
+ make clean
+ fi
+ scan-build $CHECKERS --keep-cc -o html-report make
+ fi
+
+ - name: Run additional checks (Fedora only)
+ if: matrix.distro_name == 'fedora'
+ run: |
+ cppcheck --xml --output-file=cppcheck.xml --enable=warning,style,performance,portability,information,missingInclude .
+ cppcheck-htmlreport --title=$REPO_NAME --file=cppcheck.xml --report-dir=cppcheck-htmlreport
+
+ - name: Generate index (Fedora only)
+ if: matrix.distro_name == 'fedora'
+ run: |
+ curl -Ls -o gen-index https://github.com/mate-desktop/mate-dev-scripts/raw/master/travis/gen-index.sh
+ chmod +x gen-index
+ ./gen-index -l 20 -i https://github.com/${OWNER_NAME}/mate-icon-theme/raw/master/mate/16x16/apps/accessories-calculator.png
+
+ - name: Run distcheck
+ run: |
+ make distcheck
+
+ - name: Upload HTML reports (Fedora only)
+ if: matrix.distro_name == 'fedora'
+ uses: actions/upload-artifact@v4
+ with:
+ name: html-report-${{ matrix.distro_name }}
+ path: html-report/
+ retention-days: 30
+
+ - name: Upload cppcheck reports (Fedora only)
+ if: matrix.distro_name == 'fedora'
+ uses: actions/upload-artifact@v4
+ with:
+ name: cppcheck-report-${{ matrix.distro_name }}
+ path: cppcheck-htmlreport/
+ retention-days: 30
+
+ - name: Upload distribution archives
+ if: matrix.distro_name == 'fedora'
+ uses: actions/upload-artifact@v4
+ with:
+ name: distribution-archives
+ path: mate-calc-*.tar.xz
+ retention-days: 90 \ No newline at end of file