From e55c6a4b46708233a6016a253156a8967442f3a8 Mon Sep 17 00:00:00 2001 From: Star Rauchenberger Date: Tue, 2 May 2023 23:10:11 -0400 Subject: Does this work --- .github/workflows/build-binaries.yml | 93 ++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 .github/workflows/build-binaries.yml (limited to '.github/workflows/build-binaries.yml') diff --git a/.github/workflows/build-binaries.yml b/.github/workflows/build-binaries.yml new file mode 100644 index 0000000..0ecff40 --- /dev/null +++ b/.github/workflows/build-binaries.yml @@ -0,0 +1,93 @@ +# Copyright (c) 2021-2022-2023 Luca Cappa +# Released under the term specified in file LICENSE.txt +# SPDX short identifier: MIT + +# A "pure" GitHub workflow using CMake, Ninja and vcpkg to build a C/C++ codebase. +# It leverages both CMakePresets.json and vcpkg.json. +# It is called "pure workflow" because it is an example which minimizes the usage of +# custom GitHub Actions, but leverages directly the tools that could be easily run on +# your development machines (i.e. CMake, vcpkg, Ninja) to ensure a perfectly identical +# and reproducible local build (on your development machine) and a remote build on +# build agents. +name: build-binaries +on: + workflow_dispatch: + +jobs: + job: + name: ${{ matrix.os }}-${{ github.workflow }} + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, macos-latest, windows-latest] + include: + - os: windows-latest + triplet: x64-windows + - os: ubuntu-latest + triplet: x64-linux + - os: macos-latest + triplet: x64-osx + env: + # Indicates the location of the vcpkg as a Git submodule of the project repository. + VCPKG_ROOT: ${{ github.workspace }}/vendor/vcpkg + # Tells vcpkg where binary packages are stored. + VCPKG_DEFAULT_BINARY_CACHE: ${{ github.workspace }}/vendor/vcpkg/bincache + # Let's use GitHub Action cache as storage for the vcpkg Binary Caching feature. + VCPKG_BINARY_SOURCES: 'clear;x-gha,readwrite' + + steps: + # Set env vars needed for vcpkg to leverage the GitHub Action cache as a storage + # for Binary Caching. + - uses: actions/github-script@v6 + with: + script: | + core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || ''); + core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || ''); + + - uses: actions/checkout@v3 + with: + submodules: true + - name: "Create directory '${{ env.VCPKG_DEFAULT_BINARY_CACHE }}'" + run: mkdir -p $VCPKG_DEFAULT_BINARY_CACHE + shell: bash + + # Setup the build machine with the most recent versions of CMake and Ninja. Both are cached if not already: on subsequent runs both will be +quickly restored from GitHub cache service. + - uses: lukka/get-cmake@latest + + # Restore vcpkg from the GitHub Action cache service. Note that packages are restored by vcpkg's binary caching + # when it is being run afterwards by CMake. + - name: Restore vcpkg + uses: actions/cache@v3 + with: + # The first path is the location of vcpkg: it contains the vcpkg executable and data files, as long as the + # built package archives (aka binary cache) which are located by VCPKG_DEFAULT_BINARY_CACHE env var. + # The other paths starting with '!' are exclusions: they contain termporary files generated during the build of the installed packages. + path: | + ${{ env.VCPKG_ROOT }} + !${{ env.VCPKG_ROOT }}/buildtrees + !${{ env.VCPKG_ROOT }}/packages + !${{ env.VCPKG_ROOT }}/downloads + !${{ env.VCPKG_ROOT }}/installed + # The key is composed in a way that it gets properly invalidated whenever a different version of vcpkg is being used. + key: | + ${{ hashFiles( '.git/modules/vcpkg/HEAD' )}} + + # On Windows runners, let's ensure to have the Developer Command Prompt environment setup correctly. + # As used here the Developer Command Prompt created is targeting x64 and using the default the Windows SDK. + - uses: ilammy/msvc-dev-cmd@v1 + + # Run CMake to generate Ninja project files, using the vcpkg's toolchain file to resolve and install + # the dependencies as specified in vcpkg.json. Note that the vcpkg's toolchain is specified + # in the CMakePresets.json file. + # This step also runs vcpkg with Binary Caching leveraging GitHub Action cache to + # store the built packages artifacts. + - name: Restore from cache the dependencies and generate project files + run: | + cmake --preset lingo-ap-tracker-preset + + # Build (Release configuration only) the whole project with Ninja (which is spawn by CMake). + - name: Build (Release configuration) + run: | + cmake --build --preset lingo-ap-tracker-preset --config Release -- cgit 1.4.1