Drop llvm-15 + ubuntu 20.04 #229
Workflow file for this run
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: Linux CI | |
env: | |
# "Source" is set in the vcpkg install step | |
VCPKG_BINARY_SOURCES: 'clear;nuget,Source,readwrite;nugettimeout,3601' | |
# Self-hosted runners can hopefully reuse already downloaded packages | |
VCPKG_USE_NUGET_CACHE: 1 | |
VCPKG_DEFAULT_HOST_TRIPLET: 'x64-linux-rel' | |
on: | |
release: | |
types: | |
- published | |
pull_request: | |
paths-ignore: | |
- 'docker/**' | |
- '.github/**' | |
- '**.md' | |
- '!.github/workflows/vcpkg_ci_amd64*' | |
push: | |
paths-ignore: | |
- 'docker/**' | |
- '.github/**' | |
- '**.md' | |
- '!.github/workflows/vcpkg_ci_amd64*' | |
tags-ignore: | |
- 'v*' | |
branches: | |
- 'master' | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} | |
cancel-in-progress: true | |
jobs: | |
build: | |
strategy: | |
fail-fast: false | |
matrix: | |
image: | |
# 'name' is Docker image name whereas 'os' is more generic | |
- { os: 'ubuntu', name: 'ubuntu-v2', tag: '22.04' } | |
llvm: [ 'llvm-16[pasta]', 'llvm-16' ] | |
target_arch: [ 'x64', 'arm64' ] | |
container: | |
image: docker.pkg.github.com/lifting-bits/cxx-common/vcpkg-builder-${{ matrix.image.name }}:${{ matrix.image.tag }} | |
credentials: | |
username: ${{ github.actor }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
name: ${{matrix.image.os}}-${{matrix.image.tag}} ${{matrix.llvm}} ${{matrix.target_arch}} | |
runs-on: ubuntu-latest # run the job on the newly created runner | |
steps: | |
- name: Set Artifact Name | |
run: | | |
# Need to fix because paths with brackets cause issues | |
NAME="$(echo 'vcpkg_${{ matrix.image.os }}-${{ matrix.image.tag }}_${{ matrix.llvm }}_${{ matrix.target_arch == 'x64' && 'amd64' || matrix.target_arch }}' | tr '[' '-' | tr -d ']')" | |
echo "ARTIFACT_NAME=${NAME}" >> "$GITHUB_ENV" | |
- uses: actions/checkout@v3 | |
with: | |
submodules: recursive | |
fetch-depth: 2 | |
# Used to get commit message since PRs are on a merge commit | |
- name: Get commit message | |
shell: bash | |
run: | | |
git config --global --add safe.directory /__w/cxx-common/cxx-common | |
echo 'COMMIT_MESSAGE<<EOF' >> "$GITHUB_ENV" | |
if [[ '${{ github.event_name }}' == 'push' ]]; then | |
echo "$(git log --format=%B -n 1 HEAD)" >> "$GITHUB_ENV" | |
elif [[ '${{ github.event_name }}' == 'pull_request' ]]; then | |
echo "$(git log --format=%B -n 1 HEAD^2)" >> "$GITHUB_ENV" | |
fi | |
echo "EOF" >> "$GITHUB_ENV" | |
- name: Clear prior vcpkg directory | |
run: | | |
rm -rf "${{ github.workspace }}/vcpkg" | |
- name: Initialize vcpkg | |
shell: bash | |
run: | | |
df -h | |
ls -lah | |
{ read -r vcpkg_repo_url && read -r vcpkg_commit; } <./vcpkg_info.txt || exit 1 | |
git clone "${vcpkg_repo_url}" | |
git -C vcpkg checkout "${vcpkg_commit}" | |
df -h | |
ls -lah | |
./vcpkg/bootstrap-vcpkg.sh | |
echo "VCPKG_ROOT=$(pwd)/vcpkg" >> $GITHUB_ENV | |
df -h | |
ls -lah | |
- name: 'vcpkg install dependencies' | |
shell: 'bash' | |
run: | | |
export VCPKG_DISABLE_METRICS=1 | |
# Setup NuGet authentication | |
mono "$(${VCPKG_ROOT}/vcpkg fetch nuget | tail -n 1)" sources add \ | |
-source "https://nuget.pkg.github.com/${{ github.repository_owner }}/index.json" \ | |
-storepasswordincleartext \ | |
-name "Source" \ | |
-username "${{ github.repository_owner }}" \ | |
-password "${{ secrets.GITHUB_TOKEN }}" || true | |
mono "$(${VCPKG_ROOT}/vcpkg fetch nuget | tail -n 1)" sources update \ | |
-source "https://nuget.pkg.github.com/${{ github.repository_owner }}/index.json" \ | |
-storepasswordincleartext \ | |
-name "Source" \ | |
-username "${{ github.repository_owner }}" \ | |
-password "${{ secrets.GITHUB_TOKEN }}" | |
mono "$(${VCPKG_ROOT}/vcpkg fetch nuget | tail -n 1)" setapikey \ | |
-source "https://nuget.pkg.github.com/${{ github.repository_owner }}/index.json" \ | |
"${{ secrets.GITHUB_TOKEN }}" | |
./build_dependencies.sh --release --target-arch ${{ matrix.target_arch }} --export-dir ./${{ env.ARTIFACT_NAME }} ${{ matrix.llvm }} --clean-after-build --debug | |
echo "VCPKG_ROOT=$(pwd)/${{ env.ARTIFACT_NAME }}" >> $GITHUB_ENV | |
echo "TARGET_TRIPLET=${{ matrix.target_arch }}-linux-rel" >> $GITHUB_ENV | |
- name: Upload CMake logs on error | |
if: failure() | |
uses: actions/upload-artifact@v3 | |
with: | |
name: ${{ env.ARTIFACT_NAME }}_logs | |
path: ${{ github.workspace }}/vcpkg/buildtrees/**/*.log | |
- name: 'Export Packages' | |
if: contains(env.COMMIT_MESSAGE, 'debug artifacts') || github.event.release | |
shell: 'bash' | |
run: | | |
apt-get update | |
apt-get install -y pixz | |
tar --use-compress-program pixz -cf "${{ env.ARTIFACT_NAME }}.tar.xz" ./${{ env.ARTIFACT_NAME }} | |
- name: Publish Release Assets | |
if: github.event.release | |
uses: softprops/action-gh-release@v1 | |
with: | |
files: ${{ env.ARTIFACT_NAME }}.tar.xz | |
prerelease: ${{ contains(github.ref, 'pre') || contains(github.ref, 'rc') }} | |
token: ${{ secrets.RELEASE_TOKEN }} | |
- uses: actions/upload-artifact@v3 | |
if: contains(env.COMMIT_MESSAGE, 'debug artifacts') || github.event.release | |
with: | |
name: ${{ env.ARTIFACT_NAME }}.tar.xz | |
path: ${{ env.ARTIFACT_NAME }}.tar.xz | |
- name: Prepare ccache | |
id: ccache_prep | |
shell: bash | |
run: | | |
echo "CCACHE_COMPRESS=true" >> $GITHUB_ENV | |
echo "CCACHE_COMPILERCHECK=content" >> $GITHUB_ENV | |
echo "CCACHE_DIR=${{ github.workspace }}/.ccache" >> $GITHUB_ENV | |
echo "CMAKE_C_COMPILER_LAUNCHER=$(which ccache)" >> $GITHUB_ENV | |
echo "CMAKE_CXX_COMPILER_LAUNCHER=$(which ccache)" >> $GITHUB_ENV | |
echo "timestamp=$(date +"%Y-%m-%d-%H:%M:%S" --utc)" >> ${GITHUB_OUTPUT} | |
- name: ccache cache files | |
uses: actions/cache@v3 | |
with: | |
path: ${{ github.workspace }}/.ccache | |
key: ccache-${{ matrix.image.name }}-${{ matrix.image.tag }}-${{ matrix.target_arch }}-${{ matrix.llvm }}-${{ steps.ccache_prep.outputs.timestamp }} | |
restore-keys: | | |
ccache-${{ matrix.image.name }}-${{ matrix.image.tag }}-${{ matrix.target_arch }}-${{ matrix.llvm }}- | |
- name: ccache Initial stats | |
shell: bash | |
run: | | |
ccache --show-stats | |
- name: 'Rellic build' | |
shell: 'bash' | |
working-directory: rellic | |
if: matrix.target_arch == 'x64' | |
run: | | |
# Does not compile with gcc | |
export CC="$(which clang)" | |
export CXX="$(which clang++)" | |
cmake -G Ninja \ | |
-DCMAKE_VERBOSE_MAKEFILE=ON \ | |
"-DCMAKE_TOOLCHAIN_FILE=${VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake" \ | |
-DVCPKG_TARGET_TRIPLET=${TARGET_TRIPLET} \ | |
-DVCPKG_HOST_TRIPLET=${VCPKG_DEFAULT_HOST_TRIPLET} \ | |
"-DCMAKE_INSTALL_PREFIX=$(pwd)/install" \ | |
-S . -B build | |
cmake --build build | |
cmake --build build --target install | |
- name: 'Rellic test' | |
shell: 'bash' | |
working-directory: rellic/build | |
if: matrix.target_arch == 'x64' | |
run: | | |
../scripts/roundtrip.py ./tools/rellic-decomp ../tests/tools/decomp "${VCPKG_ROOT}/installed/${TARGET_TRIPLET}/bin/clang" | |
- name: 'Remill dependencies' | |
shell: 'bash' | |
if: matrix.target_arch == 'x64' | |
working-directory: remill | |
run: | | |
python3 -m pip install poetry | |
python3 -m pip install --user ./scripts/diff_tester_export_insns | |
git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com" | |
git config --global user.name "github-actions[bot]" | |
- name: 'Remill build' | |
shell: 'bash' | |
if: matrix.target_arch == 'x64' | |
working-directory: remill | |
run: | | |
if [[ '${{ matrix.image.tag }}' == '20.04' ]]; then | |
# Remill uses C++20 concepts that aren't supported by gcc-9 in 20.04 | |
export CC="$(which clang)" | |
export CXX="$(which clang++)" | |
fi | |
cmake -G Ninja \ | |
-DCMAKE_VERBOSE_MAKEFILE=ON \ | |
"-DCMAKE_TOOLCHAIN_FILE=${VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake" \ | |
-DVCPKG_TARGET_TRIPLET=${TARGET_TRIPLET} \ | |
-DVCPKG_HOST_TRIPLET=${VCPKG_DEFAULT_HOST_TRIPLET} \ | |
"-DCMAKE_INSTALL_PREFIX=$(pwd)/install" \ | |
-S . -B build | |
cmake --build build | |
cmake --install build | |
cmake --build build --target test_dependencies | |
- name: 'Remill test' | |
shell: 'bash' | |
working-directory: remill/build | |
if: matrix.target_arch == 'x64' | |
run: | | |
# Some tests fail on ubuntu 22.04 | |
env CTEST_OUTPUT_ON_FAILURE=1 ctest . || true | |
- name: 'Anvill build' | |
shell: 'bash' | |
working-directory: anvill | |
if: contains(matrix.llvm, 'llvm-15') && matrix.target_arch == 'x64' | |
run: | | |
# TODO: Does not support compilation with gcc | |
export CC="$(which clang)" | |
export CXX="$(which clang++)" | |
cmake -G Ninja \ | |
-DCMAKE_VERBOSE_MAKEFILE=ON \ | |
"-DCMAKE_INSTALL_PREFIX=$(pwd)/install" \ | |
"-DCMAKE_TOOLCHAIN_FILE=${VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake" \ | |
-DVCPKG_TARGET_TRIPLET=${TARGET_TRIPLET} \ | |
-DVCPKG_HOST_TRIPLET=${VCPKG_DEFAULT_HOST_TRIPLET} \ | |
-DANVILL_ENABLE_TESTS=true \ | |
-DANVILL_ENABLE_INSTALL=true \ | |
-DANVILL_ENABLE_PYTHON3_LIBS=OFF \ | |
"-Dremill_DIR=$(pwd)/../remill/install/lib/cmake/remill" \ | |
"-Dsleigh_DIR=$(pwd)/../remill/install/lib/cmake/sleigh" \ | |
-S . -B build | |
cmake --build build | |
cmake --install build | |
# NOTE: This is an old test that doesn't make sense anymore | |
# Need to find some other way to run a smoketest | |
#- name: 'Anvill test' | |
# shell: 'bash' | |
# working-directory: anvill | |
# if: contains(matrix.llvm, 'llvm-15') && matrix.target_arch == 'x64' | |
# run: | | |
# ./install/bin/anvill-decompile-spec --spec ../bin/Decompile/tests/specs/ret0.json --bc_out ./ret0.bc --ir_out ret0.ir | |
- name: Cache cleanup and reporting | |
shell: 'bash' | |
run: | | |
rm -rf vcpkg/{buildtrees,installed,packages} | |
ccache --show-stats |