diff options
author | Jan Holthuis <jan.holthuis@ruhr-uni-bochum.de> | 2020-11-20 16:45:37 +0100 |
---|---|---|
committer | Jan Holthuis <jan.holthuis@ruhr-uni-bochum.de> | 2020-11-21 01:51:49 +0100 |
commit | 291dabd08d0a08f76cb335a64de392c4e10f9497 (patch) | |
tree | 5cda61f775d53cb79f8b276de08f4eada57cf3b4 /.github/workflows | |
parent | eeafb3d07e6b6363f3c2d1a860369d17a8c06693 (diff) |
GitHub Actions: Merge CI build steps using matrix build
Diffstat (limited to '.github/workflows')
-rw-r--r-- | .github/workflows/build.yml | 260 |
1 files changed, 128 insertions, 132 deletions
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index cb351bab61..b9ca24693e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -4,18 +4,53 @@ on: push: pull_request: -env: - CMAKEFLAGS_COMMON: -DCMAKE_BUILD_TYPE=Release -DBATTERY=ON -DBROADCAST=ON -DBULK=ON -DDEBUG_ASSERTIONS_FATAL=ON -DHID=ON -DLILV=ON -DOPUS=ON -DQTKEYCHAIN=ON -DVINYLCONTROL=ON - jobs: - build-ubuntu-gcc: - name: Ubuntu 18.04 (gcc) - runs-on: ubuntu-18.04 + build: + strategy: + matrix: + include: + - name: Ubuntu 18.04 (gcc) + os: ubuntu-18.04 + # TODO for Ubuntu Focal: Replace "-DFAAD=ON" with "-DFFMPEG=ON" + cmake_args: -DFAAD=ON -DKEYFINDER=ON -DLOCALECOMPARE=ON -DMAD=ON -DMODPLUG=ON -DWAVPACK=O + ctest_args: + ccache_path: ~/.ccache + cpack_generator: DEB + buildenv_script: tools/ubuntu_buildenv.sh + artifacts_name: Ubuntu DEB + artifacts_path: cmake_build/*.deb + - name: macOS 10.15 + os: macos-10.15 + cmake_args: -DCOREAUDIO=ON -DHSS1394=ON -DMACOS_BUNDLE=ON + # TODO: Fix this broken test on macOS + ctest_args: --exclude-regex DirectoryDAOTest.relocateDirectory + cpack_generator: DragNDrop + ccache_path: /Users/runner/Library/Caches/ccache + buildenv_script: tools/macos_buildenv.sh + artifacts_name: macOS-DMG + artifacts_path: cmake_build/*.dmg + + env: + # macOS codesigning + APPLE_CODESIGN_IDENTITY: 2C2B5D3EDCE82BA55E22E9A67F16F8D03E390870 + MACOS_CODESIGN_OPENSSL_PASSWORD: ${{ secrets.MACOS_CODESIGN_OPENSSL_PASSWORD }} + MACOS_CODESIGN_CERTIFICATE_PASSWORD: ${{ secrets.MACOS_CODESIGN_CERTIFICATE_PASSWORD }} + + runs-on: ${{ matrix.os }} + name: ${{ matrix.name }} steps: - - name: Check out repository + - name: "Check out repository" uses: actions/checkout@v2 - - name: Install build dependencies + - name: "Set up cmake" + uses: jwlawson/actions-setup-cmake@v1.4 + with: + # This should always match the mininum required version in + # our CMakeLists.txt + cmake-version: '3.13.x' + + - name: "[Ubuntu] Install apt dependencies" + if: runner.os == 'Linux' run: | sudo apt-get update && sudo apt-get install -y --no-install-recommends \ ccache \ @@ -54,173 +89,134 @@ jobs: qt5keychain-dev \ qtscript5-dev \ - - name: Set up cmake - uses: jwlawson/actions-setup-cmake@v1.4 - with: - # This should always match the mininum required version in - # our CMakeLists.txt - cmake-version: '3.13.x' + - name: "[macOS] Get build environment name" + if: runner.os == 'macOS' + id: buildenv_name + run: ${{ matrix.buildenv_script }} name --ghactions - - name: Create build directory - run: mkdir cmake_build - - name: Set up ccache cache + - name: "[macOS] Set up build environment cache" + if: runner.os == 'macOS' uses: actions/cache@v2 with: - path: ~/.ccache - key: ${{ runner.os }}-ccache-${{ github.head_ref }}-${{ github.run_number }} - restore-keys: | - ${{ runner.os }}-ccache-${{ github.head_ref }} - ${{ runner.os }}-ccache - - - name: Configure - run: cmake $CMAKE_FLAGS_COMMON $CMAKE_FLAGS_UBUNTU -S . -B cmake_build - env: - # TODO for Ubuntu Focal: Replace "-DFAAD=ON" with "-DFFMPEG=ON" - CMAKE_FLAGS_UBUNTU: -DFAAD=ON -DKEYFINDER=ON -DLOCALECOMPARE=ON -DMAD=ON -DMODPLUG=ON -DWAVPACK=ON - - - name: Set up problem matcher - uses: ammaraskar/gcc-problem-matcher@master + path: ${{ github.workspace }}/buildenv + key: macOS-build-environment-${{ steps.buildenv_name.outputs.buildenv_name }} - - name: Build - run: cmake --build . -j $(nproc) - working-directory: cmake_build + - name: "[macOS] Import Apple code signing identity" + id: codesign + if: runner.os == 'macOS' && env.MACOS_CODESIGN_OPENSSL_PASSWORD != null && env.MACOS_CODESIGN_CERTIFICATE_PASSWORD != null + run: | + # Decrypt the certificate + openssl enc -aes-256-cbc -d -md sha512 \ + -k "${MACOS_CODESIGN_OPENSSL_PASSWORD}" \ + -in /Users/runner/work/mixxx/mixxx/cmake/macos_developer_id_codesign_certificate.p12.enc \ + -out ~/certificate.p12 + + # Create a temporary keychain for the certificate and import it. + security create-keychain -p mixxx Mixxx.keychain + security unlock-keychain -p mixxx Mixxx.keychain + security import ~/certificate.p12 -k Mixxx.keychain \ + -P "${MACOS_CODESIGN_CERTIFICATE_PASSWORD}" -T /usr/bin/codesign + security set-key-partition-list -S "apple-tool:,apple:" -k mixxx Mixxx.keychain + # Add keychain to search list + security list-keychains -s Mixxx.keychain + + CMAKE_ARGS="-DAPPLE_CODESIGN_IDENTITY=${APPLE_CODESIGN_IDENTITY}" + echo "::set-output name=cmake_args::${CMAKE_ARGS}" - - name: Test - run: ctest --timeout 45 - working-directory: cmake_build + - name: "Set up build environment" + id: buildenv + run: ${{ matrix.buildenv_script }} setup --ghactions env: - GTEST_COLOR: 1 - CTEST_OUTPUT_ON_FAILURE: 1 - # Render analyzer waveform tests to an offscreen buffer - QT_QPA_PLATFORM: offscreen - - - name: Package - run: cpack -G DEB - working-directory: cmake_build + BUILDENV_BASEPATH: ${{ github.workspace }}/buildenv - - name: Deploy artifacts - uses: actions/upload-artifact@v2 - with: - name: Ubuntu DEB - path: cmake_build/*.deb - - build-mac: - name: macOS 10.15 - runs-on: macos-10.15 - env: - APPLE_CODESIGN_IDENTITY: 2C2B5D3EDCE82BA55E22E9A67F16F8D03E390870 - steps: - - name: clone Git repository - uses: actions/checkout@v2 + - name: "Set up ccache" + run: ccache -M 5G + env: + PATH: ${{ steps.buildenv.outputs.path }} - - name: ccache + - name: "Set up ccache cache" uses: actions/cache@v2 with: - path: /Users/runner/Library/Caches/ccache + path: ${{ matrix.ccache_path }} key: ${{ runner.os }}-ccache-${{ github.head_ref }}-${{ github.run_number }} restore-keys: | ${{ runner.os }}-ccache-${{ github.head_ref }} ${{ runner.os }}-ccache - - name: read build environment file - id: buildenv_name - run: tools/macos_buildenv.sh name --ghactions - - - name: macOS build environment cache - uses: actions/cache@v2 - env: - cache-name: macOS build environment - with: - path: /Users/runner/buildenv - key: macOS-build-environment-${{ steps.buildenv_name.outputs.name }} - - - name: Import code signing identity - env: - MACOS_CODESIGN_OPENSSL_PASSWORD: ${{ secrets.MACOS_CODESIGN_OPENSSL_PASSWORD }} - MACOS_CODESIGN_CERTIFICATE_PASSWORD: ${{ secrets.MACOS_CODESIGN_CERTIFICATE_PASSWORD }} - run: | - if [ -n "$MACOS_CODESIGN_OPENSSL_PASSWORD" ] && [ -n "$MACOS_CODESIGN_CERTIFICATE_PASSWORD" ]; then - # Decrypt the certificate - openssl enc -aes-256-cbc -d -md sha512 \ - -k ${MACOS_CODESIGN_OPENSSL_PASSWORD} \ - -in /Users/runner/work/mixxx/mixxx/cmake/macos_developer_id_codesign_certificate.p12.enc \ - -out ~/certificate.p12 - - # Create a temporary keychain for the certificate and import it. - security create-keychain -p mixxx Mixxx.keychain - security unlock-keychain -p mixxx Mixxx.keychain - security import ~/certificate.p12 -k Mixxx.keychain \ - -P ${MACOS_CODESIGN_CERTIFICATE_PASSWORD} -T /usr/bin/codesign - security set-key-partition-list -S apple-tool:,apple: -k mixxx Mixxx.keychain - # Add keychain to search list - security list-keychains -s Mixxx.keychain - - CMAKE_ARGS="-DAPPLE_CODESIGN_IDENTITY=${APPLE_CODESIGN_IDENTITY}" - fi - echo "::set-output name=cmake_args::${CMAKE_ARGS}" - - - name: Set up macOS build environment - id: buildenv - run: tools/macos_buildenv.sh setup --ghactions - - - name: Set up ccache - run: ccache -M 5G - env: - PATH: ${{ steps.buildenv.outputs.path }} - - - name: Create build directory + - name: "Create build directory" run: mkdir cmake_build - - name: Configure - run: cmake -L $CMAKE_FLAGS_COMMON $CMAKE_FLAGS_MAC .. + - name: "Configure" + run: | + cmake \ + -DCMAKE_BUILD_TYPE=Release \ + -DBATTERY=ON \ + -DBROADCAST=ON \ + -DBULK=ON \ + -DDEBUG_ASSERTIONS_FATAL=ON \ + -DHID=ON \ + -DLILV=ON \ + -DOPUS=ON \ + -DQTKEYCHAIN=ON \ + -DVINYLCONTROL=ON \ + ${CMAKE_FLAGS_EXTRA} \ + .. working-directory: cmake_build env: - CMAKE_FLAGS_MAC: -DCOREAUDIO=ON -DHSS1394=ON -DMACOS_BUNDLE=ON ${{ steps.buildenv.outputs.cmake_args }} ${{ steps.apple_codesign.outputs.cmake_args }} -DCMAKE_PREFIX_PATH=${{ steps.buildenv.outputs.cmake_prefix_path }} -DQt5_DIR=${{ steps.buildenv.outputs.qt_path }} - PATH: ${{ steps.buildenv.outputs.path }} - MACOSX_DEPLOYMENT_TARGET: ${{ steps.buildenv.outputs.macosx_deployment_target }} + PATH: ${{ steps.buildenv.outputs.path }} + CMAKE_FLAGS_EXTRA: ${{ matrix.cmake_args }} ${{ steps.apple_codesign.outputs.cmake_args }} -DCMAKE_PREFIX_PATH=${{ steps.buildenv.outputs.cmake_prefix_path }} -DQt5_DIR=${{ steps.buildenv.outputs.qt_path }} + MACOSX_DEPLOYMENT_TARGET: ${{ steps.buildenv.outputs.macosx_deployment_target }} + + - name: "Set up problem matcher" + uses: ammaraskar/gcc-problem-matcher@master - - name: Build - run: cmake --build . -j $(sysctl -n hw.physicalcpu) + - name: "Build" + run: cmake --build . working-directory: cmake_build env: + CMAKE_BUILD_PARALLEL_LEVEL: 2 # GitHub Actions automatically zstd compresses caches CCACHE_NOCOMPRESS: true PATH: ${{ steps.buildenv.outputs.path }} - - name: Print ccache stats + - name: "Print ccache stats" run: ccache -s env: PATH: ${{ steps.buildenv.outputs.path }} - - name: Test - run: ctest --timeout 45 --exclude-regex DirectoryDAOTest.relocateDirectory + - name: "Test" + run: ctest --timeout 45 ${{ matrix.ctest_args }} working-directory: cmake_build env: - PATH: ${{ steps.buildenv.outputs.path }} QT_QPA_PLATFORM_PLUGIN_PATH: ${{ steps.buildenv.outputs.qt_qpa_platform_plugin_path }} - GTEST_COLOR: 1 - CTEST_OUTPUT_ON_FAILURE: 1 # Render analyzer waveform tests to an offscreen buffer QT_QPA_PLATFORM: offscreen + GTEST_COLOR: 1 + CTEST_PARALLEL_LEVEL: 2 + CTEST_OUTPUT_ON_FAILURE: 1 - name: Benchmark run: cmake --build . --target mixxx-benchmark working-directory: cmake_build + env: + QT_QPA_PLATFORM_PLUGIN_PATH: ${{ steps.buildenv.outputs.qt_qpa_platform_plugin_path }} + # Render analyzer waveform tests to an offscreen buffer + QT_QPA_PLATFORM: offscreen - - name: Package - run: | - cpack -G DragNDrop - if [ -n "$MACOS_CODESIGN_OPENSSL_PASSWORD" ] && [ -n "$MACOS_CODESIGN_CERTIFICATE_PASSWORD" ]; then - codesign --verbose=4 --deep --force --options runtime \ - --sign $APPLE_CODESIGN_IDENTITY \ - --entitlements ../build/osx/entitlements.plist *.dmg - fi + - name: "Package" + run: cpack -G ${{ matrix.cpack_generator }} working-directory: cmake_build env: PATH: ${{ steps.buildenv.outputs.path }} - - name: Deploy artifacts + - name: "[macOS] Sign Package" + if: runner.os == 'macOS' && env.MACOS_CODESIGN_OPENSSL_PASSWORD != null && env.MACOS_CODESIGN_CERTIFICATE_PASSWORD != null + run: codesign --verbose=4 --deep --force --options runtime --sign "${APPLE_CODESIGN_IDENTITY}" --entitlements ../build/osx/entitlements.plist *.dmg + fi + working-directory: cmake_build + + - name: "Deploy artifacts" uses: actions/upload-artifact@v2 with: - name: macOS-DMG - path: cmake_build/*.dmg + name: ${{ matrix.artifacts_name }} + path: ${{ matrix.artifacts_path }} |