runs-on: ubuntu-latest
container: quassel/quassel-build-env:${{ matrix.dist }}
strategy:
+ fail-fast: false
matrix:
- dist: [ debian-stable, debian-testing, ubuntu-xenial, ubuntu-bionic, ubuntu-eoan, ubuntu-focal ]
- cxx: [ gcc, clang++ ]
+ dist: [ debian-stable, debian-testing, ubuntu-xenial, ubuntu-bionic, ubuntu-focal, ubuntu-groovy ]
+ cxx: [ 'g++', 'clang++' ]
with-kde: [ -DWITH_KDE=ON ]
extra-options: [ -DWITH_WEBENGINE=ON ]
include:
CCACHE_BASEDIR: ${{ github.workspace }}
CCACHE_DIR: ${{ github.workspace }}/ccache
CCACHE_MAXSIZE: 100M
+ CXX: ${{ matrix.cxx }}
steps:
- name: Check out source code
CCACHE_MAXSIZE: 100M
steps:
+ - name: Select Xcode version
+ uses: maxim-lobanov/setup-xcode@v1
+ with:
+ # Newer Xcode versions may not officially be supported by Qt
+ xcode-version: '10.3'
+
- name: Check out source code
uses: actions/checkout@v2
with:
run: git fetch -f origin $GITHUB_REF:$GITHUB_REF
- name: Install dependencies
- run: brew update && brew install boost ccache ninja qca qt5
+ # Skip "brew update" as it can trigger 50+ minutes of updating.
+ # GitHub Actions intentionally disables the default auto-update on their
+ # macOS CI images (and macOS CI images usually update once a week).
+ #
+ # See https://github.com/actions/virtual-environments/issues/2173
+ # > We've set no auto-update intentionally here [...]
+ # And https://github.com/microsoft/appcenter/issues/293
+ #
+ # If Homebrew begins failing in the future due to out-of-date versions,
+ # it can be re-enabled here as follows...
+ # run: brew update && [below command]
+ run: brew install boost ccache ninja qca qt@5
- name: Get timestamp
id: get-timestamp
mkdir build
cd build && cmake $GITHUB_WORKSPACE \
-GNinja \
- -DCMAKE_PREFIX_PATH=/usr/local/opt/qt/lib/cmake \
+ -DWANT_CORE=ON \
+ -DWANT_QTCLIENT=ON \
+ -DWANT_MONO=ON \
+ -DCMAKE_PREFIX_PATH=$(brew --prefix)/opt/qt@5 \
+ -DCMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/bundles \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_TESTING=ON \
-DFATAL_WARNINGS=OFF \
- -DDEPLOY=ON \
- -DENABLE_SHARED=OFF
+ -DENABLE_SHARED=OFF \
+ -DBUNDLE=ON \
- name: Build
- run: |
- # Deploy scripts require qmake in the path
- export PATH=$PATH:/usr/local/opt/qt5/bin
- cd build && ninja
+ run: cd build && ninja
- name: Run tests
run: cd build && ctest
- name: Install
- run: cd build && DESTDIR=$GITHUB_WORKSPACE/image ninja install
+ run: cd build && ninja install
- name: Print ccache stats
run: ccache -s
uses: actions/upload-artifact@v2
with:
name: macOS
- path: ${{ github.workspace }}/build/*.dmg
+ path: ${{ github.workspace }}/bundles/*.dmg
# ------------------------------------------------------------------------------------------------------------------------------------------
build-windows:
path: ${{ github.workspace }}/packages/*
# ------------------------------------------------------------------------------------------------------------------------------------------
- create-release:
- name: Create release
+ post-build:
+ name: Post-Build
runs-on: ubuntu-latest
- if: startsWith(github.ref, 'refs/tags/')
needs: [ build-linux, build-macos, build-windows ]
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
uses: actions/checkout@v2
- name: Fetch tag information
+ if: startsWith(github.ref, 'refs/tags/')
run: git fetch -f origin $GITHUB_REF:$GITHUB_REF
- - name: Create release notes
- run: |
- # Use the tag's annotation as release notes
- TAGNAME=$(git rev-parse --abbrev-ref $GITHUB_REF)
- MESSAGE=$(git tag -l --format='%(contents)' $TAGNAME | perl -ne 'print if not /-----BEGIN PGP SIGNATURE-----/../-----END PGP SIGNATURE-----/')
- echo -e "Quassel $TAGNAME\n\n$MESSAGE" > release_notes.txt
-
- name: Download artifacts
uses: actions/download-artifact@v2
with:
- name: List artifacts
run: ls -lhR artifacts
+ - name: Check artifacts
+ run: |
+ # Sanity check: We should have exactly 5 files matching the given patterns
+ [[ 5 -eq $(find artifacts/ \( -type f -name 'Quassel*.dmg' -o -name 'quassel*.exe' -o -name 'quassel*.7z' \) -printf '.' | wc -c) ]]
+
+ - name: Create release notes
+ if: startsWith(github.ref, 'refs/tags/')
+ run: |
+ # Use the tag's annotation as release notes
+ TAGNAME=$(git rev-parse --abbrev-ref $GITHUB_REF)
+ MESSAGE=$(git tag -l --format='%(contents)' $TAGNAME | perl -ne 'print if not /-----BEGIN PGP SIGNATURE-----/../-----END PGP SIGNATURE-----/')
+ echo -e "Quassel $TAGNAME\n\n$MESSAGE" > release_notes.txt
+
- name: Prepare source archive
+ if: startsWith(github.ref, 'refs/tags/')
run: |
mkdir assets
TAGNAME=$(git rev-parse --abbrev-ref $GITHUB_REF)
git archive --format=tar --prefix=quassel-$TAGNAME/ $TAGNAME | xz > assets/quassel-$TAGNAME.tar.xz
- name: Prepare packages for release
+ if: startsWith(github.ref, 'refs/tags/')
run: |
TAGNAME=$(git rev-parse --abbrev-ref $GITHUB_REF)
for type in Client Core Mono; do
mv artifacts/Windows/quassel-*.7z assets/quassel-windows-$TAGNAME.7z
- name: Create checksums for release assets
+ if: startsWith(github.ref, 'refs/tags/')
run: find assets/ -type f -execdir sh -c 'sha256sum "$1" > "$1.sha256sum"' _ {} \;
- name: Create draft release
+ if: startsWith(github.ref, 'refs/tags/')
run: |
# The stock upload-release-asset action can only handle single files
# Instead, use the hub utility so we can upload all assets at once