Skip to content

ci: enhance CI workflow with Windows support, improved LLVM installat… #8

ci: enhance CI workflow with Windows support, improved LLVM installat…

ci: enhance CI workflow with Windows support, improved LLVM installat… #8

Workflow file for this run

name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
workflow_dispatch:
env:
LLVM_VERSION: "20"
LLVM_RELEASE: "20.1.8"
BUILD_DIR: build
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
permissions:
contents: read
jobs:
build-and-test:
name: Linux — build & test
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
- name: Install LLVM ${{ env.LLVM_VERSION }}
run: |
set -eux
sudo apt-get update
sudo apt-get install -y --no-install-recommends ca-certificates curl gnupg
curl -fsSL https://apt.llvm.org/llvm-snapshot.gpg.key \
| sudo gpg --dearmor -o /etc/apt/keyrings/llvm.gpg
echo "deb [signed-by=/etc/apt/keyrings/llvm.gpg] http://apt.llvm.org/noble/ llvm-toolchain-noble-${LLVM_VERSION} main" \
| sudo tee /etc/apt/sources.list.d/llvm.list
sudo apt-get update
sudo apt-get install -y --no-install-recommends \
llvm-${LLVM_VERSION}-dev \
clang-${LLVM_VERSION} \
llvm-${LLVM_VERSION}-tools \
ninja-build
- name: Configure
run: |
cmake -B "$BUILD_DIR" -G Ninja \
-DLLVM_DIR=/usr/lib/llvm-${LLVM_VERSION}/lib/cmake/llvm \
-DCMAKE_BUILD_TYPE=Release
- name: Build
run: cmake --build "$BUILD_DIR"
- name: Upload plugin (Linux)
uses: actions/upload-artifact@v4
with:
name: obfuscator-linux
path: ${{ env.BUILD_DIR }}/passes/obfuscator.so
- name: Behavioral tests
run: ./tests/run_tests.sh
- name: IR tests (FileCheck)
run: ./tests/run_ir_tests.sh
windows-plugin:
name: Windows — plugin DLL (MSVC + official LLVM)
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
- name: Download LLVM ${{ env.LLVM_RELEASE }} (prebuilt)
shell: pwsh
env:
LLVM_TAR_URL: https://github.com/llvm/llvm-project/releases/download/llvmorg-${{ env.LLVM_RELEASE }}/clang+llvm-${{ env.LLVM_RELEASE }}-x86_64-pc-windows-msvc.tar.xz
run: |
Invoke-WebRequest -Uri $env:LLVM_TAR_URL -OutFile llvm.tar.xz
- name: Extract LLVM
shell: pwsh
run: |
tar -xf llvm.tar.xz
$root = Get-ChildItem -Directory | Where-Object { $_.Name -like 'clang+llvm-*' } | Select-Object -First 1
if (-not $root) { throw "Could not find extracted clang+llvm-* directory" }
$llvmDir = Join-Path $root.FullName "lib\cmake\llvm"
if (-not (Test-Path (Join-Path $llvmDir "LLVMConfig.cmake"))) {
throw "LLVMConfig.cmake not found under $llvmDir"
}
"LLVM_ROOT=$($root.FullName)" | Out-File -FilePath $env:GITHUB_ENV -Append
"LLVM_DIR=$llvmDir" | Out-File -FilePath $env:GITHUB_ENV -Append
- name: Install Ninja
run: choco install ninja -y
- uses: ilammy/msvc-dev-cmd@v1
with:
arch: x64
- name: Configure & build
shell: pwsh
run: |
cmake -B $env:BUILD_DIR -G Ninja `
-DCMAKE_BUILD_TYPE=Release `
"-DLLVM_DIR=$env:LLVM_DIR" `
-DCMAKE_C_COMPILER=cl `
-DCMAKE_CXX_COMPILER=cl
cmake --build $env:BUILD_DIR
- name: List build/passes (debug)
if: always()
shell: pwsh
run: Get-ChildItem -Path "$env:BUILD_DIR/passes" -Recurse -ErrorAction SilentlyContinue
- name: Upload plugin (Windows)
uses: actions/upload-artifact@v4
with:
name: obfuscator-windows-msvc
path: build/passes/obfuscator.dll
if-no-files-found: warn
lint:
name: clang-tidy
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
- name: Install LLVM ${{ env.LLVM_VERSION }} & clang-tidy
run: |
set -eux
sudo apt-get update
sudo apt-get install -y --no-install-recommends ca-certificates curl gnupg
curl -fsSL https://apt.llvm.org/llvm-snapshot.gpg.key \
| sudo gpg --dearmor -o /etc/apt/keyrings/llvm.gpg
echo "deb [signed-by=/etc/apt/keyrings/llvm.gpg] http://apt.llvm.org/noble/ llvm-toolchain-noble-${LLVM_VERSION} main" \
| sudo tee /etc/apt/sources.list.d/llvm.list
sudo apt-get update
sudo apt-get install -y --no-install-recommends \
llvm-${LLVM_VERSION}-dev \
clang-${LLVM_VERSION} \
clang-tidy-${LLVM_VERSION} \
ninja-build
- name: Configure (compile_commands.json)
run: |
cmake -B "$BUILD_DIR" -G Ninja \
-DLLVM_DIR=/usr/lib/llvm-${LLVM_VERSION}/lib/cmake/llvm \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON
- name: Run clang-tidy
run: |
clang-tidy-${LLVM_VERSION} \
-p "$BUILD_DIR" \
--warnings-as-errors='*' \
passes/src/*.cpp
format:
name: clang-format
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
- name: Install clang-format
run: |
set -eux
sudo apt-get update
sudo apt-get install -y --no-install-recommends ca-certificates curl gnupg
curl -fsSL https://apt.llvm.org/llvm-snapshot.gpg.key \
| sudo gpg --dearmor -o /etc/apt/keyrings/llvm.gpg
echo "deb [signed-by=/etc/apt/keyrings/llvm.gpg] http://apt.llvm.org/noble/ llvm-toolchain-noble-${LLVM_VERSION} main" \
| sudo tee /etc/apt/sources.list.d/llvm.list
sudo apt-get update
sudo apt-get install -y --no-install-recommends clang-format-${LLVM_VERSION}
- name: Check formatting
run: |
find passes/src passes/include \( -name '*.cpp' -o -name '*.h' \) \
| xargs clang-format-${LLVM_VERSION} --dry-run --Werror