Skip to content

Generate PDFs on CI #924

Generate PDFs on CI

Generate PDFs on CI #924

Workflow file for this run

name: Build
# Run workflow when manually triggered, part of a pull request or on a tag push (release)
on:
workflow_dispatch:
pull_request:
push:
branches:
- 'main'
tags:
- '*'
jobs:
gendocs:
name: gen_docs
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Generate readme.md from readme.md.in
shell: cmake -P {0}
run: |
file(READ CHANGELOG.md CHANGELOG ENCODING UTF-8)
configure_file(packaging/README.md.in packaging/README.md @ONLY)
- name: Generate PDFs
uses: baileyjm02/markdown-to-pdf@v1
with:
input_dir: packaging
output_dir: packaging/pdfs
build_html: false
- name: Upload PDFs
uses: actions/upload-artifact@v2
with:
name: pdfs
path: packaging/pdfs
build:
name: ${{ matrix.config.name }}
runs-on: ${{ matrix.config.os }}
needs: gendocs
env:
CCACHE_WIN_VERSION: 4.2.1
CCACHE_DIR: ${{ github.workspace }}/.ccache
CCACHE_COMPRESS: 'true'
CCACHE_COMPRESSLEVEL: '5'
CCACHE_MAXSIZE: '500M'
CCACHE_BASEDIR: '${{ github.workspace }}'
strategy:
matrix:
config:
- name: "Windows Latest MSVC"
os: windows-latest
package: true
cmake_preset: "windows-packaging-release"
vcpkg_triplet: x64-windows-static
test: true
- name: "Windows Latest MSVC RelWithDebInfo"
os: windows-latest
package: true
cmake_preset: "windows-packaging-relwithdebinfo"
vcpkg_triplet: x64-windows-static
test: true
- name: "macOS Latest Clang x64"
os: macos-latest
package: true
cmake_preset: "macos-packaging-release"
vcpkg_triplet: x64-osx-10_13
test: true
- name: "macOS Latest Clang arm64"
os: macos-latest
package: true
cmake_preset: "macos-arm64-packaging-release"
vcpkg_triplet: arm64-osx-11_0
test: false
- name: "Ubuntu 20.04"
os: ubuntu-20.04
package: true
cmake_preset: "linux-packaging-release"
vcpkg_triplet: x64-linux
test: true
steps:
- name: Set Conditional Environment Variables (Win)
if: matrix.config.os == 'windows-latest'
run: |
echo "VCPKG_DEFAULT_BINARY_CACHE=C:/tmp/vcpkg_cache" >> $env:GITHUB_ENV
- name: Set Conditional Environment Variables (NOT Win)
if: matrix.config.os != 'windows-latest'
run: |
echo "VCPKG_DEFAULT_BINARY_CACHE=${{ github.workspace }}/vcpkg_cache" >> $GITHUB_ENV
- name: 'Windows Disk Space'
if: matrix.config.os == 'windows-latest'
run: Get-PSDrive
- name: 'Checkout repo recursively.'
uses: actions/checkout@v3
with:
submodules: recursive
fetch-depth: 0
- name: Download generated PDFs
uses: actions/download-artifact@v2
with:
name: 'pdfs'
path: packaging
- name: Display structure of downloaded files
run: ls packaging
- name: 'Install ninja-build tool.'
uses: seanmiddleditch/gha-setup-ninja@v3
- name: 'Create vcpkg cache dir.'
run: cmake -E make_directory ${{ env.VCPKG_DEFAULT_BINARY_CACHE }}
- name: 'Prepare timestamp.'
id: cache_timestamp
shell: cmake -P {0}
run: |
string(TIMESTAMP current_date "%Y-%m-%d-%H;%M;%S" UTC)
file(APPEND "$ENV{GITHUB_OUTPUT}" "timestamp=${current_date}\n")
- name: 'Restore vcpkg and its artifacts.'
uses: actions/cache@v3
with:
path: ${{ env.VCPKG_DEFAULT_BINARY_CACHE }}
key: ${{ matrix.config.name }}-vcpkg-${{ steps.cache_timestamp.outputs.timestamp }}
restore-keys: |
${{ matrix.config.name }}-vcpkg-
- name: 'Windows: Install ccache.'
if: matrix.config.os == 'windows-latest'
shell: cmake -P {0}
run: |
set(ccache_url "https://github.com/cristianadam/ccache/releases/download/v$ENV{CCACHE_WIN_VERSION}/Windows.tar.xz")
file(DOWNLOAD "${ccache_url}" ./ccache.tar.xz SHOW_PROGRESS)
execute_process(COMMAND ${CMAKE_COMMAND} -E tar xvf ./ccache.tar.xz)
working-directory: ${{ runner.workspace }}
- name: 'Windows: Add ccache location to PATH.'
if: matrix.config.os == 'windows-latest'
run: |
echo "${{ runner.workspace }}" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
- name: 'macOS: Install ccache.'
if: matrix.config.os == 'macos-latest'
run: |
brew install ccache
- name: 'macOS: Install pkg-config.'
if: matrix.config.os == 'macos-latest'
run: |
brew install pkg-config
- name: 'linux: Install dependencies.'
if: startsWith(matrix.config.os, 'ubuntu')
run: |
sudo apt-get install -y ccache libx11-dev libxcursor-dev libxext-dev libxinerama-dev libxrandr-dev libglu1-mesa-dev libfreetype6-dev
- name: 'Cache ccache files.'
uses: actions/cache@v3
with:
path: ${{ env.CCACHE_DIR }}
key: ${{ matrix.config.name }}-ccache-${{ steps.cache_timestamp.outputs.timestamp }}
restore-keys: |
${{ matrix.config.name }}-ccache-
- name: 'Zero ccache stats.'
run: ccache -z
- name: 'Print ccache config.'
run: ccache -p
- name: 'Set install prefix.'
id: cmake_install_prefix
env:
RUNNER_WORKSPACE: ${{ runner.workspace }}
shell: cmake -P {0}
run: |
string(REPLACE " " "_" NAME_NO_SPACES "${{ matrix.config.name }}")
file(TO_CMAKE_PATH "$ENV{RUNNER_WORKSPACE}" RUNNER_WORKSPACE)
set(INSTALL_DIR "${NAME_NO_SPACES}")
file(TO_NATIVE_PATH "${RUNNER_WORKSPACE}/${INSTALL_DIR}" PREFIX)
file(APPEND "$ENV{GITHUB_OUTPUT}" "install_prefix_setup=${PREFIX}\n")
file(APPEND "$ENV{GITHUB_OUTPUT}" "install_dir=${INSTALL_DIR}\n")
if(APPLE)
file(APPEND "$ENV{GITHUB_OUTPUT}" "install_prefix=${PREFIX}/Setup\ EAR\ Production\ Suite.app/Contents/Resources\n")
else()
file(APPEND "$ENV{GITHUB_OUTPUT}" "install_prefix=${PREFIX}\n")
endif()
- name: 'Windows: set up developer environment'
uses: ilammy/msvc-dev-cmd@v1
if: matrix.config.os == 'windows-latest'
- name: 'Git Status'
run: git status
- name: 'Configure with CMake, vcpkg and ccmake (Win)'
if: matrix.config.os == 'windows-latest'
run: cmake --preset ${{ matrix.config.cmake_preset }} -DCMAKE_INSTALL_PREFIX="${{ steps.cmake_install_prefix.outputs.install_prefix }}" -DEPS_CI=ON -DVCPKG_INSTALL_OPTIONS="--x-buildtrees-root=C:/tmp/vcpkg_buildtrees;--downloads-root=C:/tmp/vcpkg_downloads;--x-packages-root=C:/tmp/vcpkg_packages" -DVCPKG_INSTALLED_DIR="C:/tmp/vcpkg_installed"
env:
CMAKE_C_COMPILER_LAUNCHER: 'ccache'
CMAKE_CXX_COMPILER_LAUNCHER: 'ccache'
- name: 'Configure with CMake, vcpkg and ccmake (NOT Win)'
if: matrix.config.os != 'windows-latest'
run: cmake --preset ${{ matrix.config.cmake_preset }} -DCMAKE_INSTALL_PREFIX="${{ steps.cmake_install_prefix.outputs.install_prefix }}" -DEPS_CI=ON
env:
CMAKE_C_COMPILER_LAUNCHER: 'ccache'
CMAKE_CXX_COMPILER_LAUNCHER: 'ccache'
- name: 'Git Status'
run: git status
- name: 'Prune the vcpkg cache'
run: cmake -P "${{ github.workspace }}/.github/workflows/expire_vcpkg_cache.cmake"
- name: 'Windows Disk Space'
if: matrix.config.os == 'windows-latest'
run: Get-PSDrive
- name: 'Build using CMake and Ninja via CMake preset.'
run: cmake --build --preset ${{ matrix.config.cmake_preset }}
- name: 'Print ccache stats.'
run: ccache -s
- name: 'Windows Disk Space'
if: matrix.config.os == 'windows-latest'
run: Get-PSDrive
- name: 'Run tests.'
if: ${{ matrix.config.test }}
run: ctest --preset '${{ matrix.config.cmake_preset }}'
- name: 'Install to output dir.'
if: ${{ matrix.config.package }}
run: |
cmake -E make_directory "${{ steps.cmake_install_prefix.outputs.install_prefix }}"
cmake --build --preset ${{ matrix.config.cmake_preset }} --target install
- name: 'unix: Tar output dir.'
if: ${{ matrix.config.package && !startsWith(matrix.config.os, 'windows') }}
run: tar -cvf ${{ steps.cmake_install_prefix.outputs.install_dir }}.tar -C ${{ steps.cmake_install_prefix.outputs.install_prefix_setup }} .
- name: 'unix: Upload Tar as build artifact.'
if: ${{ matrix.config.package && !startsWith(matrix.config.os, 'windows') }}
uses: actions/upload-artifact@v2
with:
name: ${{ steps.cmake_install_prefix.outputs.install_dir }}
path: ${{ steps.cmake_install_prefix.outputs.install_dir }}.tar
- name: 'Windows: Upload output dir as build artifact.'
if: ${{ matrix.config.package && matrix.config.os == 'windows-latest' }}
uses: actions/upload-artifact@v2
with:
name: ${{ steps.cmake_install_prefix.outputs.install_dir }}
path: ${{ steps.cmake_install_prefix.outputs.install_prefix_setup }}
- name: 'Windows Disk Space'
if: matrix.config.os == 'windows-latest'
run: Get-PSDrive
# Clean up windows tmp dir
- name: 'Clean up temporary files (Win)'
if: matrix.config.os == 'windows-latest'
run: cmake -E rm -rf "C:/tmp"
mac_universal_bin:
name: mac_universal_bin
runs-on: macos-latest
needs: build
steps:
- uses: actions/download-artifact@v2
with:
name: 'macOS_Latest_Clang_x64'
path: 'macOS_Latest_Clang_x64'
- uses: actions/download-artifact@v2
with:
name: 'macOS_Latest_Clang_arm64'
path: 'macOS_Latest_Clang_arm64'
- name: 'un-tar x64'
run: tar -xf macOS_Latest_Clang_x64.tar && rm macOS_Latest_Clang_x64.tar
working-directory: macOS_Latest_Clang_x64
- name: 'un-tar arm64'
run: tar -xf macOS_Latest_Clang_arm64.tar && rm macOS_Latest_Clang_arm64.tar
working-directory: macOS_Latest_Clang_arm64
- name: 'dir listing'
run: ls -R
- name: 'build ub'
run: |
intel_dir="macOS_Latest_Clang_x64"
arm_dir="macOS_Latest_Clang_arm64"
ub_dir="macOS_Latest_Clang_universal"
cp -r $intel_dir $ub_dir
function make_ub() {
intel_bin="$1"
arm_bin=$(echo "$intel_bin" | sed "s:$intel_dir:$arm_dir:")
ub_bin=$(echo "$intel_bin" | sed "s:$intel_dir:$ub_dir:")
if [ ! -f "$arm_bin" ]; then
echo "$arm_bin not found"
exit 1
fi
lipo "$intel_bin" "$arm_bin" -create -output "$ub_bin"
}
LIBS=`find $intel_dir -name '*.dylib'`
# note: "! -name '*.*'" excludes files with an extension (auxiliary files)
PLUGINS=`find $intel_dir -path '*vst3/Contents/MacOS/*' ! -name '*.*'`
APPS=`find $intel_dir -path '*app/Contents/MacOS/*' ! -name '*.*'`
# don't forget project upgrade command line util
EXES=`find $intel_dir -name 'project_upgrade'`
IFS=$'\n'
for exe in $EXES; do
echo "Making UB Exectuable from: $exe"
make_ub "$exe"
done
for lib in $LIBS; do
echo "Making UB Library from: $lib"
make_ub "$lib"
done
for plugin in $PLUGINS; do
echo "Making UB Plugin from: $plugin"
make_ub "$plugin"
done
for app in $APPS; do
echo "Making UB App from: $app"
make_ub "$app"
done
- name: 'dir listing'
run: ls -R
- name: 'tar ub'
run: tar -cvf macOS_Latest_Clang_universal.tar -C macOS_Latest_Clang_universal .
- uses: actions/upload-artifact@v2
with:
name: 'macOS_Latest_Clang_universal'
path: 'macOS_Latest_Clang_universal.tar'