build(deps): bump actions/setup-python from 4 to 5 (#224) #867
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: | |
branches: | |
- "*" | |
# Version tags should start with "v" | |
tags: | |
- "v*" | |
pull_request: | |
branches: | |
- "*" | |
jobs: | |
build: | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ubuntu-latest, macos-latest, windows-latest] | |
build_type: [RelWithDebInfo, Debug] | |
release: [stable, HEAD] | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup Git User for Applying Patches | |
# See this thread for more details https://github.community/t/github-actions-bot-email-address/17204/5 | |
run: | | |
git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com" | |
git config --global user.name "github-actions[bot]" | |
- name: Install Linux system dependencies | |
if: runner.os == 'Linux' | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y rpm ccache doxygen graphviz xdot | |
- name: Install macOS system dependencies | |
if: runner.os == 'macOS' | |
run: | | |
echo "MACOSX_DEPLOYMENT_TARGET=10.15" >> ${GITHUB_ENV} | |
brew install \ | |
ccache \ | |
cmake \ | |
doxygen \ | |
graphviz | |
- name: Install Windows system dependencies | |
if: runner.os == 'Windows' | |
uses: nick-fields/retry@v2 | |
with: | |
timeout_minutes: 10 | |
max_attempts: 3 | |
command: choco install ccache doxygen.install graphviz | |
- name: Generate cache key | |
shell: cmake -P {0} | |
run: | | |
string(TIMESTAMP current_date "%Y-%m-%d-%H;%M;%S" UTC) | |
file(APPEND "$ENV{GITHUB_ENV}" "CACHE_KEY=build_${{ matrix.os }}_type-${{ matrix.build_type }}-${{ matrix.release }}\n") | |
file(APPEND "$ENV{GITHUB_ENV}" "CACHE_TIMESTAMP=${current_date}\n") | |
- name: Update the cache (ccache) | |
uses: actions/cache@v3 | |
with: | |
path: "${{ github.workspace }}/ccache" | |
key: ${{ env.CACHE_KEY }}_ccache_${{ env.CACHE_TIMESTAMP }} | |
restore-keys: | | |
${{ env.CACHE_KEY }}_ccache_ | |
- name: Setup ccache | |
working-directory: "${{ github.workspace }}" | |
shell: cmake -P {0} | |
run: | | |
file(MAKE_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/ccache") | |
file(APPEND "$ENV{GITHUB_ENV}" "CCACHE_BASEDIR=${CMAKE_CURRENT_SOURCE_DIR}\n") | |
file(APPEND "$ENV{GITHUB_ENV}" "CCACHE_DIR=${CMAKE_CURRENT_SOURCE_DIR}/ccache\n") | |
file(APPEND "$ENV{GITHUB_ENV}" "CCACHE_COMPRESS=true\n") | |
# Trial and error to get all files in here | |
file(APPEND "$ENV{GITHUB_ENV}" "CCACHE_COMPRESSLEVEL=10\n") | |
# This should be multiplied by the number of compilation jobs and be no | |
# larger than 5G, which is the cache max size | |
file(APPEND "$ENV{GITHUB_ENV}" "CCACHE_MAXSIZE=400M\n") | |
# Tell CMake to use ccache | |
file(APPEND "$ENV{GITHUB_ENV}" "CMAKE_CXX_COMPILER_LAUNCHER=ccache\n") | |
file(APPEND "$ENV{GITHUB_ENV}" "CMAKE_C_COMPILER_LAUNCHER=ccache\n") | |
# Clear stats before every build | |
execute_process(COMMAND ccache -z) | |
- name: CMake version | |
run: cmake --version | |
- name: Configure the project | |
shell: pwsh | |
run: cmake "--preset=ci-$("${{ matrix.os }}".split("-")[0])" | |
-DCMAKE_BUILD_TYPE=${{ matrix.build_type }} | |
-Dsleigh_RELEASE_TYPE=${{ matrix.release }} | |
- name: Build the project | |
run: cmake | |
--build build | |
--config ${{ matrix.build_type }} | |
-j 2 | |
-v | |
- name: Build the docs | |
run: cmake | |
--build build | |
--config ${{ matrix.build_type }} | |
--target docs | |
-v | |
- name: Run the example | |
run: cmake | |
--build build | |
-j 2 | |
--config ${{ matrix.build_type }} | |
--target sleigh_example_runner | |
- name: Run the install target | |
run: cmake --install build | |
--config ${{ matrix.build_type }} | |
--prefix install | |
- name: Smoketest sleigh lift | |
run: ./install/bin/sleigh-lift disassemble x86-64.sla 4881ecc00f0000 | |
- name: Test install directory | |
working-directory: tests/find_package | |
run: | | |
cmake -B build -S . "-Dsleigh_DIR=${{ github.workspace }}/install/lib/cmake/sleigh" -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} | |
cmake --build build -j 2 --config ${{ matrix.build_type }} | |
cd build | |
ctest -V -C ${{ matrix.build_type }} | |
- name: Test tool install directory | |
working-directory: extra-tools/sleigh-lift | |
run: | | |
cmake -B build -S . "-Dsleigh_DIR=${{ github.workspace }}/install/lib/cmake/sleigh" -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} | |
cmake --build build -j 2 --config ${{ matrix.build_type }} | |
cmake --install build --config ${{ matrix.build_type }} --prefix install | |
./install/bin/sleigh-lift --version | |
./install/bin/sleigh-lift disassemble x86-64.sla 4881ecc00f0000 | |
- name: Create the packages | |
run: cmake | |
--build build | |
-j 2 | |
--config ${{ matrix.build_type }} | |
--target package | |
- name: Test the DEB package | |
if: runner.os == 'Linux' | |
run: | | |
sudo dpkg -i build/*.deb | |
cmake -S tests/find_package -B find_package_build -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} | |
cmake --build find_package_build -j 2 --config ${{ matrix.build_type }} --verbose | |
- name: Locate the packages (RelWithDebInfo only) | |
if: matrix.build_type == 'RelWithDebInfo' | |
shell: bash | |
run: | | |
echo "DEB_PACKAGE_PATH=$(ls build/*.deb)" >> $GITHUB_ENV | |
echo "DEB_PACKAGE_NAME=$(cd build && ls *.deb)" >> $GITHUB_ENV | |
echo "RPM_PACKAGE_PATH=$(ls build/*.rpm)" >> $GITHUB_ENV | |
echo "RPM_PACKAGE_NAME=$(cd build && ls *.rpm)" >> $GITHUB_ENV | |
# Rename .tar.gz files for OS | |
pushd build | |
for f in *.tar.gz; do mv "$f" "${{ runner.os }}-$f"; done | |
popd | |
echo "TGZ_PACKAGE_PATH=$(ls build/*.tar.gz)" >> $GITHUB_ENV | |
echo "TGZ_PACKAGE_NAME=$(cd build && ls *.tar.gz)" >> $GITHUB_ENV | |
# DEB Package | |
- name: Upload the DEB package artifact (RelWithDebInfo only) | |
if: matrix.build_type == 'RelWithDebInfo' && runner.os == 'Linux' | |
uses: actions/upload-artifact@v3 | |
with: | |
name: ${{ env.DEB_PACKAGE_NAME }} | |
path: ${{ env.DEB_PACKAGE_PATH }} | |
- name: Release DEB package artifact (RelWithDebInfo only) | |
uses: softprops/action-gh-release@v0.1.15 | |
if: matrix.build_type == 'RelWithDebInfo' && runner.os == 'Linux' && startsWith(github.ref, 'refs/tags/') && matrix.release == 'stable' | |
with: | |
files: ${{ env.DEB_PACKAGE_PATH }} | |
# RPM Package | |
- name: Upload the RPM package artifact (RelWithDebInfo only) | |
if: matrix.build_type == 'RelWithDebInfo' && runner.os == 'Linux' | |
uses: actions/upload-artifact@v3 | |
with: | |
name: ${{ env.RPM_PACKAGE_NAME }} | |
path: ${{ env.RPM_PACKAGE_PATH }} | |
- name: Release RPM package artifact (RelWithDebInfo only) | |
uses: softprops/action-gh-release@v0.1.15 | |
if: matrix.build_type == 'RelWithDebInfo' && runner.os == 'Linux' && startsWith(github.ref, 'refs/tags/') && matrix.release == 'stable' | |
with: | |
files: ${{ env.RPM_PACKAGE_PATH }} | |
# TGZ Package | |
- name: Upload the TGZ package artifact (RelWithDebInfo only) | |
if: matrix.build_type == 'RelWithDebInfo' | |
uses: actions/upload-artifact@v3 | |
with: | |
name: ${{ env.TGZ_PACKAGE_NAME }} | |
path: ${{ env.TGZ_PACKAGE_PATH }} | |
- name: Release TGZ package artifact (RelWithDebInfo only) | |
uses: softprops/action-gh-release@v0.1.15 | |
if: matrix.build_type == 'RelWithDebInfo' && startsWith(github.ref, 'refs/tags/') && matrix.release == 'stable' | |
with: | |
files: ${{ env.TGZ_PACKAGE_PATH }} | |
# This step is down at the bottom because Windows fails but we still want | |
# to upload the built binaries, regardless. We also want to see if/when | |
# Windows tests start passing or are still failing, so there is no special | |
# handling. GitHub Actions does not support the concept of an allowable | |
# failure state | |
- name: Run the tests | |
working-directory: build | |
run: ctest -VV -C ${{ matrix.build_type }} | |
- name: ccache stats | |
run: ccache -s |