ci: Select explicit Xcode version on macOS
[quassel.git] / .github / workflows / main.yml
index 9c589fd..c0dae8e 100644 (file)
@@ -17,9 +17,10 @@ jobs:
     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:
@@ -38,6 +39,7 @@ jobs:
         CCACHE_BASEDIR: ${{ github.workspace }}
         CCACHE_DIR: ${{ github.workspace }}/ccache
         CCACHE_MAXSIZE: 100M
+        CXX: ${{ matrix.cxx }}
 
     steps:
     - name: Check out source code
@@ -91,6 +93,12 @@ jobs:
       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:
@@ -101,7 +109,18 @@ jobs:
       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 qt5
 
     - name: Get timestamp
       id: get-timestamp
@@ -200,10 +219,9 @@ jobs:
         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 }}
@@ -213,15 +231,9 @@ jobs:
       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:
@@ -230,13 +242,28 @@ jobs:
     - 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
@@ -246,9 +273,11 @@ jobs:
         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