Install libraries for host architecture too #761
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Build | |
on: | |
push: | |
# Only run on branches (not tags) | |
branches: | |
- '*' | |
workflow_dispatch: | |
workflow_run: | |
workflows: ['Update Mixxx'] | |
types: [completed] | |
env: | |
VCPKG_ROOT: '${{ github.workspace }}/vcpkg' | |
MIXXX_ROOT: '${{ github.workspace }}/mixxx' | |
SCRIPTS_ROOT: '${{ github.workspace }}/scripts' | |
jobs: | |
build: | |
strategy: | |
matrix: | |
include: | |
- name: macOS (arm64) | |
os: macos-11 | |
suffix: '' | |
triplet: arm64-osx-min1100-release | |
host_triplet: x64-osx-min1015-release | |
overlay_ports: vcpkg/overlay/osx:vcpkg/overlay/ports | |
ccache_path: ~/Library/Caches/ccache | |
cpack_generator: DragNDrop | |
package_extension: dmg | |
cmake_args: >- | |
-DMACOS_BUNDLE=ON | |
- name: macOS (x86_64) | |
os: macos-11 | |
suffix: '' | |
triplet: x64-osx-min1015-release | |
host_triplet: x64-osx-min1015-release | |
overlay_ports: vcpkg/overlay/osx:vcpkg/overlay/ports | |
ccache_path: ~/Library/Caches/ccache | |
cpack_generator: DragNDrop | |
package_extension: dmg | |
cmake_args: >- | |
-DMACOS_BUNDLE=ON | |
- name: macOS (arm64, Debug Assertions) | |
os: macos-11 | |
suffix: '-debugasserts' | |
triplet: arm64-osx-min1100-release | |
host_triplet: x64-osx-min1015-release | |
overlay_ports: vcpkg/overlay/osx:vcpkg/overlay/ports | |
ccache_path: ~/Library/Caches/ccache | |
cpack_generator: DragNDrop | |
package_extension: dmg | |
cmake_args: >- | |
-DDEBUG_ASSERTIONS_FATAL=ON | |
-DMACOS_BUNDLE=ON | |
- name: macOS (x86_64, Debug Assertions) | |
os: macos-11 | |
suffix: '-debugasserts' | |
triplet: x64-osx-min1015-release | |
host_triplet: x64-osx-min1015-release | |
overlay_ports: vcpkg/overlay/osx:vcpkg/overlay/ports | |
ccache_path: ~/Library/Caches/ccache | |
cpack_generator: DragNDrop | |
package_extension: dmg | |
cmake_args: >- | |
-DDEBUG_ASSERTIONS_FATAL=ON | |
-DMACOS_BUNDLE=ON | |
- name: Linux (x86_64) | |
os: ubuntu-latest | |
suffix: '' | |
triplet: x64-linux-release | |
host_triplet: x64-linux-release | |
overlay_ports: vcpkg/overlay/ports | |
ccache_path: ~/.ccache | |
cpack_generator: TGZ | |
package_extension: tar.gz | |
# On Linux we build without battery support since this pulls in a | |
# dependency on GLib which is tricky to get right in a static linking scenario. | |
# See https://github.com/fwcd/m1xxx/pull/48#issuecomment-1807378063 | |
cmake_args: >- | |
-DBATTERY=OFF | |
- name: Linux (x86_64, Debug Assertions) | |
os: ubuntu-latest | |
suffix: '-debugasserts' | |
triplet: x64-linux-release | |
host_triplet: x64-linux-release | |
overlay_ports: vcpkg/overlay/ports | |
ccache_path: ~/.ccache | |
cpack_generator: TGZ | |
package_extension: tar.gz | |
cmake_args: >- | |
-DDEBUG_ASSERTIONS_FATAL=ON | |
-DBATTERY=OFF | |
- name: Linux (arm64) | |
os: ubuntu-latest | |
triplet: arm64-linux-release | |
host_triplet: x64-linux-release | |
overlay_ports: vcpkg/overlay/ports | |
ccache_path: ~/.ccache | |
cpack_generator: TGZ | |
package_extension: tar.gz | |
cmake_args: >- | |
-DBATTERY=OFF | |
name: '${{ matrix.name }}' | |
runs-on: '${{ matrix.os }}' | |
env: | |
DEPS_BASE_NAME: 'deps-${{ matrix.triplet }}' | |
ARTIFACT_BASE_NAME: 'mixxx-${{ matrix.triplet }}${{ matrix.suffix }}' | |
VCPKG_DEFAULT_TRIPLET: '${{ matrix.triplet }}' | |
VCPKG_DEFAULT_HOST_TRIPLET: '${{ matrix.host_triplet }}' | |
VCPKG_OVERLAY_TRIPLETS: overlay/triplets:vcpkg/overlay/triplets | |
VCPKG_OVERLAY_PORTS: '${{ matrix.overlay_ports }}' | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: '0' # to compute the monotonic version correctly | |
submodules: true | |
- name: Fetch versions and paths | |
run: | | |
for mod in "${{ env.VCPKG_ROOT }}" "${{ env.MIXXX_ROOT }}"; do | |
echo "$(basename "$mod")_commit=$(cd $mod && git rev-parse HEAD)" >> "$GITHUB_ENV" | |
echo "$(basename "$mod")_commit_short=$(cd $mod && git rev-parse --short HEAD)" >> "$GITHUB_ENV" | |
done | |
echo "mixxx_version=$(scripts/mixxx-version)" >> "$GITHUB_ENV" | |
shell: bash | |
- name: Set up Linux build environment | |
if: runner.os == 'Linux' | |
run: ${{ env.SCRIPTS_ROOT }}/install-ubuntu-deps | |
- name: Set up macOS build environment | |
if: runner.os == 'macOS' | |
run: | | |
${{ env.SCRIPTS_ROOT }}/install-macos-deps | |
xcrun --show-sdk-version | |
# Build dependencies | |
- name: Bootstrap vcpkg | |
run: ${{ env.SCRIPTS_ROOT }}/bootstrap-vcpkg | |
- name: Set up vcpkg cache | |
uses: actions/cache@v3 | |
with: | |
path: ${{ env.VCPKG_ROOT }}/installed | |
# TODO: Include hashed list of installed packages in key? | |
key: vcpkg-installed-${{ matrix.os }}-${{ env.VCPKG_DEFAULT_TRIPLET }}-${{ env.vcpkg_commit }}-${{ github.ref }}-${{ github.run_number }} | |
restore-keys: | | |
vcpkg-installed-${{ matrix.os }}-${{ env.VCPKG_DEFAULT_TRIPLET }}-${{ env.vcpkg_commit }}-${{ github.ref }}- | |
vcpkg-installed-${{ matrix.os }}-${{ env.VCPKG_DEFAULT_TRIPLET }}-${{ env.vcpkg_commit }}- | |
- name: Check disk space | |
run: df -h | |
- name: Output vcpkg dependency graph | |
run: ${{ env.SCRIPTS_ROOT }}/install-vcpkg-deps --graph --no-install --no-remove | |
- name: Install vcpkg packages | |
run: ${{ env.SCRIPTS_ROOT }}/install-vcpkg-deps --clean-after-build | |
- name: Upload vcpkg build logs | |
if: always() | |
uses: actions/upload-artifact@v3 | |
with: | |
name: 'vcpkg-buildlogs-${{ matrix.triplet }}' | |
path: ${{ env.VCPKG_ROOT }}/buildtrees/**/*.log | |
- name: Save vcpkg cache | |
uses: actions/cache/save@v3 | |
with: | |
# TODO: Share the key and the path with the previous step | |
path: ${{ env.VCPKG_ROOT }}/installed | |
key: vcpkg-installed-${{ matrix.os }}-${{ env.VCPKG_DEFAULT_TRIPLET }}-${{ env.vcpkg_commit }}-${{ github.ref }}-${{ github.run_number }} | |
# Export dependency archive to artifacts | |
- name: Export vcpkg archive | |
if: matrix.suffix == '' | |
run: >- | |
${{ env.SCRIPTS_ROOT }}/vcpkg export | |
--x-all-installed | |
--zip | |
--output="${{ env.DEPS_BASE_NAME }}-${{ env.vcpkg_commit_short }}" | |
- name: Upload vcpkg archive | |
if: matrix.suffix == '' | |
uses: actions/upload-artifact@v3 | |
with: | |
name: ${{ env.DEPS_BASE_NAME }}-${{ env.vcpkg_commit_short }} | |
path: ${{ env.VCPKG_ROOT }}/${{ env.DEPS_BASE_NAME }}-${{ env.vcpkg_commit_short }}.zip | |
# Build Mixxx | |
- name: Configure build cache size | |
run: ccache -M 500M | |
- name: Set up build cache | |
uses: actions/cache@v3 | |
with: | |
path: ${{ matrix.ccache_path }} | |
key: ccache-${{ matrix.triplet }}-${{ env.mixxx_commit }}-${{ github.ref }}-${{ github.run_number }} | |
restore-keys: | | |
ccache-${{ matrix.triplet }}-${{ env.mixxx_commit }}-${{ github.ref }}- | |
ccache-${{ matrix.triplet }}-${{ env.mixxx_commit }}- | |
ccache-${{ matrix.triplet }}- | |
- name: Configure Mixxx build | |
run: >- | |
cmake | |
-G Ninja | |
-B build | |
-DCMAKE_TOOLCHAIN_FILE=${{ env.VCPKG_ROOT }}/scripts/buildsystems/vcpkg.cmake | |
-DCMAKE_BUILD_TYPE=RelWithDebInfo | |
-DQT6=ON | |
${{ matrix.cmake_args }} | |
working-directory: mixxx | |
- name: Upload Mixxx configuration logs | |
if: always() | |
uses: actions/upload-artifact@v3 | |
with: | |
name: configurelogs | |
path: ${{ env.MIXXX_ROOT }}/build/CMakeFiles/*.log | |
- name: Build Mixxx | |
run: cmake --build build --target mixxx | |
working-directory: mixxx | |
- name: Save build cache | |
if: always() | |
uses: actions/cache/save@v3 | |
with: | |
# TODO: Share the key with the setup step | |
path: ${{ matrix.ccache_path }} | |
key: ccache-${{ matrix.triplet }}-${{ env.mixxx_commit }}-${{ github.ref }}-${{ github.run_number }} | |
- name: Package Mixxx | |
run: cpack -G ${{ matrix.cpack_generator }} -V && mv *.${{ matrix.package_extension }} "mixxx-${{ env.mixxx_version }}-${{ matrix.triplet }}${{ matrix.suffix }}.${{ matrix.package_extension }}" | |
working-directory: mixxx/build | |
- name: Upload packaged Mixxx binaries | |
uses: actions/upload-artifact@v3 | |
with: | |
name: ${{ env.ARTIFACT_BASE_NAME }} | |
path: ${{ env.MIXXX_ROOT }}/build/*.${{ matrix.package_extension }} | |
release: | |
if: github.ref == 'refs/heads/main' | |
runs-on: ubuntu-latest | |
needs: [build] | |
env: | |
PACKAGE_GLOB: 'mixxx-*/*' | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: '0' # to compute the monotonic version correctly | |
submodules: true | |
- name: Fetch versions and paths | |
run: echo "mixxx_version=$(scripts/mixxx-version)" >> "$GITHUB_ENV" | |
shell: bash | |
- name: Download artifacts for all builds | |
uses: actions/download-artifact@v3 | |
with: | |
# TODO: Only download artifacts starting with 'mixxx-' to avoid needlessly downloading the dependency archives | |
path: '${{ env.MIXXX_ROOT }}/build' | |
- name: Create a release | |
env: | |
GH_TOKEN: ${{ github.token }} | |
run: | | |
version='${{ env.mixxx_version }}' | |
tag="v$version" | |
gh release create --title "$tag" "$tag" || true | |
gh release upload --clobber "$tag" '${{ env.MIXXX_ROOT }}'/build/${{ env.PACKAGE_GLOB }} |