123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300 |
- # SuperTux
- # Copyright (C) 2020-2021 Jacob Burroughs <maths22@gmail.com>
- # 2020-2022 A. Semphris <semphris@protonmail.com>
- #
- # This program is free software: you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
- # the Free Software Foundation, either version 3 of the License, or
- # (at your option) any later version.
- #
- # This program is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- # GNU General Public License for more details.
- #
- # You should have received a copy of the GNU General Public License
- # along with this program. If not, see <https://www.gnu.org/licenses/>.
- name: GNU/Linux
- on:
- workflow_dispatch:
- push:
- branches:
- - master
- tags:
- - '*'
- pull_request: {}
- jobs:
- gnulinux:
- strategy:
- fail-fast: false
- matrix:
- arch: [32, 64]
- os: [ubuntu-20.04]
- compiler: [gcc, clang]
- build_type: [Debug, RelWithDebInfo]
- glbinding: [ON, OFF]
- exclude:
- - arch: 32
- glbinding: ON
- include:
- - os: ubuntu-20.04
- build_type: RelWithDebInfo
- compiler: gcc
- arch: 64
- glbinding: OFF
- release: ON
- source: ON
- documentation: ON
- - os: ubuntu-20.04
- build_type: Debug
- compiler: gcc
- arch: 64
- glbinding: OFF
- coverage: ON
- # TODO: Working Linux 32-bit packaging
- runs-on: ${{ matrix.os }}
- steps:
- - uses: actions/checkout@v4
- with:
- # Fetch the whole tree so git describe works
- fetch-depth: 0
- submodules: recursive
- - name: Install 64-bit dependencies
- if: ${{ matrix.arch == 64 }}
- run: |
- sudo apt-get update
- sudo apt-get install -y \
- cmake \
- build-essential \
- automake \
- gtk-doc-tools \
- rpm \
- rename \
- sshpass \
- clang-6.0 \
- g++-8 \
- gcc-multilib \
- g++-multilib \
- libgtest-dev \
- libc++-dev \
- libogg-dev \
- libvorbis-dev \
- libopenal-dev \
- libsdl2-dev \
- libsdl2-image-dev \
- libfreetype6-dev \
- libharfbuzz-dev \
- libfribidi-dev \
- libglib2.0-dev \
- libraqm-dev \
- libglew-dev \
- libglbinding-dev \
- libcurl4-openssl-dev \
- libglm-dev \
- zlib1g-dev \
- lcov \
- doxygen
- - name: Install 32-bit dependencies
- if: ${{ matrix.arch == 32 }}
- env:
- DOWNGRADE_PCRE: ${{ matrix.os == 'ubuntu-20.04' && '1' || '' }}
- run: |
- sudo dpkg --add-architecture i386
- sudo apt-get update
- if [ "$DOWNGRADE_PCRE" ]; then
- # Github is adding a lot of unnecessary deb.sury.org
- # packages into ubuntu-20.04, this causes
- # libharfbuzz-dev:i386 to fail due to issues related to
- # libpcre2-8-0 from deb.sury.org. Remove all that and
- # downgrade to official versions.
- sudo apt-get remove --yes php.* libzip4:amd64
- sudo apt-get install --yes --allow-downgrades \
- libpcre2-16-0:amd64=10.34-7 \
- libpcre2-32-0:amd64=10.34-7 \
- libpcre2-8-0:amd64=10.34-7 \
- libpcre2-dev:amd64=10.34-7 \
- libpcre2-posix2:amd64=10.34-7
- fi
- sudo apt-get install -y \
- cmake \
- build-essential \
- automake \
- gtk-doc-tools \
- rpm \
- rename \
- sshpass \
- gcc-multilib \
- g++-multilib \
- libgtest-dev:i386 \
- libogg-dev:i386 \
- libvorbis-dev:i386 \
- libopenal-dev:i386 \
- libsdl2-dev:i386 \
- libsdl2-image-dev:i386 \
- libfreetype6-dev:i386 \
- libcurl4-openssl-dev:i386 \
- libharfbuzz-dev:i386 \
- libfribidi-dev:i386 \
- libglm-dev \
- zlib1g-dev
- # Nethier GLEW nor glbinding exist in 32-bit for Ubuntu 20.04, so snatch the debs from 16.04 instead
- wget archive.ubuntu.com/ubuntu/pool/main/g/glew/libglew1.13_1.13.0-2_i386.deb && sudo dpkg -i libglew1.13_1.13.0-2_i386.deb
- wget archive.ubuntu.com/ubuntu/pool/main/g/glew/libglew-dev_1.13.0-2_i386.deb && sudo dpkg -i libglew-dev_1.13.0-2_i386.deb
- - name: Set compiler (gcc)
- if: ${{ matrix.compiler == 'gcc' }}
- run: |
- echo "CXX=g++" >> $GITHUB_ENV
- echo "CC=gcc" >> $GITHUB_ENV
- - name: Set compiler (clang)
- if: ${{ matrix.compiler == 'clang' }}
- run: |
- echo "CXX=clang++" >> $GITHUB_ENV
- echo "CC=clang" >> $GITHUB_ENV
- - name: Configure build
- env:
- BUILD_TYPE: ${{ matrix.build_type }}
- ARCH: ${{ matrix.arch == 32 && '-DCMAKE_C_FLAGS=-m32 -DCMAKE_CXX_FLAGS=-m32' || '' }}
- MAKE_DOCS: ${{ matrix.documentation }}
- GLBINDING: ${{ matrix.glbinding }}
- # FIXME: GoogleTest isn't detected by CMake on Ubuntu 18.04
- # (also check the step that invokes the tests with ./test_supertux2)
- TESTS: ${{ matrix.os == 'ubuntu-20.04' }}
- run: |
- cmake --version
- $CXX --version
- mkdir "build"
- cd "build"
- cmake .. -DCMAKE_BUILD_TYPE=$BUILD_TYPE $ARCH -DBUILD_TESTS=$TESTS \
- -DWARNINGS=ON -DWERROR=ON -DGLBINDING_ENABLED=$GLBINDING \
- -DCMAKE_INSTALL_MESSAGE=NEVER -DCMAKE_INSTALL_PREFIX=/usr \
- -DBUILD_DOCUMENTATION=$MAKE_DOCS -DINSTALL_SUBDIR_BIN=bin \
- -DINSTALL_SUBDIR_SHARE=share/supertux2 -DENABLE_DISCORD=ON
- - name: Build and install
- working-directory: build
- run: |
- make -j3 VERBOSE=1
- make install DESTDIR="/tmp/supertux" VERBOSE=1
- - name: Run tests
- # FIXME: GoogleTest isn't detected by CMake on Ubuntu 18.04
- # (also check the step that invokes CMake with -DBUILD_TESTS)
- if: ${{ matrix.os == 'ubuntu-20.04' }}
- working-directory: build
- run: ./test_supertux2
- - name: Make coverage
- if: ${{ matrix.coverage }}
- working-directory: build
- run: |
- lcov --capture --directory . --exclude '/usr/*' --exclude '*/tests/*'\
- --exclude '*/external/*' --output-file coverage.info
- mkdir coverage
- cd coverage
- genhtml ../coverage.info
- - name: Make documentation
- if: ${{ matrix.documentation }}
- working-directory: build
- run: |
- doxygen docs/Doxyfile
- - name: Package
- if: ${{ matrix.arch != '32' }}
- env:
- OS_NAME: ${{ matrix.os }}
- ARCH: ${{ matrix.arch }} # TODO: Working Linux 32-bit packaging
- COMPILER_NAME: ${{ matrix.compiler }}
- BUILD_NAME: ${{ matrix.build_type }}
- PACKAGE: 'ON'
- SOURCE: ${{ matrix.source }}
- working-directory: build
- run: ../.ci_scripts/package.sh
- - name: Upload AppImage
- uses: actions/upload-artifact@v4
- with:
- name: "${{ matrix.os }}-${{ matrix.arch }}-${{ matrix.compiler }}-${{ matrix.build_type }}${{ matrix.glbinding == 'ON' && '-glbinding' || '' }}-appimage"
- path: build/upload/*.AppImage
- if-no-files-found: ignore
- - name: Upload source
- uses: actions/upload-artifact@v4
- with:
- name: "source"
- path: build/upload/*Source.tar.gz
- if-no-files-found: ignore
- - name: Upload coverage
- uses: actions/upload-artifact@v4
- with:
- name: "coverage"
- path: build/coverage/*
- if-no-files-found: ignore
- - name: Upload documentation
- uses: actions/upload-artifact@v4
- with:
- name: "documentation"
- path: build/docs/doxygen/html/*
- if-no-files-found: ignore
- - name: Upload tar archives
- uses: actions/upload-artifact@v4
- with:
- name: "${{ matrix.os }}-${{ matrix.arch }}-${{ matrix.compiler }}-${{ matrix.build_type }}${{ matrix.glbinding == 'ON' && '-glbinding' || '' }}-tgz"
- path: build/upload/*Linux.tar.gz
- if-no-files-found: ignore
- - name: Upload to nightlies
- uses: anshulrgoyal/upload-s3-action@master
- if: matrix.release && env.CI_KEY != null
- env:
- CI_KEY: ${{ secrets.CI_DOWNLOAD_ACCESS_KEY_ID }}
- with:
- aws_bucket: supertux-ci-downloads
- aws_key_id: ${{ secrets.CI_DOWNLOAD_ACCESS_KEY_ID }}
- aws_secret_access_key: ${{ secrets.CI_DOWNLOAD_SECRET_ACCESS_KEY }}
- source_dir: 'build/upload'
- destination_dir: "${{ github.sha }}/gh-actions/${{ matrix.os }}-${{ matrix.arch }}/${{ github.run_id }}"
- - name: Post uploaded file
- if: matrix.release && env.DOWNLOAD_APIKEY != null
- working-directory: build
- run: ../.ci_scripts/deploy.sh
- env:
- PREFIX: "${{ github.sha }}/gh-actions/${{ matrix.os }}-${{ matrix.arch }}/${{ github.run_id }}"
- DOWNLOAD_APIKEY: ${{ secrets.DOWNLOAD_APIKEY }}
- BRANCH_NAME: ${{ github.head_ref || github.ref_name }}
- - name: Prepare Release
- if: startsWith(github.ref, 'refs/tags/') && matrix.release && github.repository_owner == 'supertux'
- env:
- OS: ${{ matrix.os }}
- ARCH: ${{ matrix.arch }}
- run: |
- if [ "$ARCH" = "32" ]; then
- rename 's/.tar.gz/-32.tar.gz/' build/upload/SuperTux-*
- fi
- - name: Create Release
- if: startsWith(github.ref, 'refs/tags/') && matrix.release && github.repository_owner == 'supertux'
- uses: softprops/action-gh-release@v1
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- with:
- files: 'build/upload/SuperTux-*'
- draft: true
|