Skip to content

added locate openssl step #20

added locate openssl step

added locate openssl step #20

Workflow file for this run

name: Debug CI
on:
push:
branches:
- '**'
permissions:
contents: read
env:
OPENSSL_VERSION: 3.5.6
jobs:
static-analysis:
name: Static Analysis (Linux)
runs-on: ubuntu-latest
container:
image: debian:trixie
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Install analysis dependencies
run: |
apt-get update
apt-get install -y cmake ninja-build libssl-dev zlib1g-dev libzstd-dev clang lld llvm cppcheck clang-tidy
- name: Configure compile database
env:
CC: clang
CXX: clang++
run: |
cmake -S . -B build -G Ninja \
-DCMAKE_BUILD_TYPE=Debug \
-DBYEBYEVPN_ENABLE_TESTS=OFF \
-DBYEBYEVPN_WARNINGS_AS_ERRORS=ON
- name: Run cppcheck
run: |
cppcheck --std=c++20 --enable=warning,style,performance,portability \
--suppress=normalCheckLevelMaxBranches \
--error-exitcode=1 --inline-suppr --quiet src
- name: Run clang-tidy
run: |
find src -name '*.cpp' -print0 | xargs -0 -r clang-tidy -p build
debug-build-linux:
name: Debug Build Artifacts (Linux)
needs: [static-analysis]
runs-on: ubuntu-latest
container:
image: debian:trixie
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Install dependencies
run: |
apt-get update
apt-get install -y cmake ninja-build libssl-dev zlib1g-dev libzstd-dev clang lld llvm
- name: Configure CMake
env:
CC: clang
CXX: clang++
run: |
cmake -S . -B build -G Ninja \
-DCMAKE_BUILD_TYPE=Debug \
-DBYEBYEVPN_ENABLE_TESTS=OFF \
-DBYEBYEVPN_WARNINGS_AS_ERRORS=ON
- name: Build
run: cmake --build build --parallel
- name: Prepare artifacts
run: |
mkdir -p staging
cp build/byebyevpn "staging/byebyevpn-${{ github.ref_name }}-linux-amd64"
- name: Upload debug artifacts
uses: actions/upload-artifact@4cec3d8aa04e39d1a68397de0c4cd6fb9dce8ec1 # v4.6.1
with:
name: byebyevpn-${{ github.ref_name }}-linux-amd64
path: staging/*
retention-days: 7
debug-build-windows:
name: Debug Build Artifacts (Windows)
needs: [static-analysis]
runs-on: windows-latest
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Install OpenSSL
run: choco install openssl -y --no-progress
- name: Locate OpenSSL
id: openssl
shell: pwsh
run: |
$dir = (Get-ChildItem "C:\Program Files\OpenSSL*" -Directory | Sort-Object Name -Descending | Select-Object -First 1).FullName
if (-not $dir) { throw "OpenSSL installation directory not found" }
Write-Host "Found OpenSSL at: $dir"
echo "root=$dir" >> $env:GITHUB_OUTPUT
- name: Configure CMake
env:
CC: clang
CXX: clang++
run: cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Debug -DBYEBYEVPN_ENABLE_TESTS=OFF -DBYEBYEVPN_WARNINGS_AS_ERRORS=ON -DOPENSSL_ROOT_DIR="${{ steps.openssl.outputs.root }}"
- name: Build
run: cmake --build build --parallel
- name: Prepare artifacts
shell: cmd
run: |
if not exist staging mkdir staging
copy build\byebyevpn.exe "staging\byebyevpn-${{ github.ref_name }}-windows-x64.exe"
- name: Upload debug artifacts
uses: actions/upload-artifact@4cec3d8aa04e39d1a68397de0c4cd6fb9dce8ec1 # v4.6.1
with:
name: byebyevpn-${{ github.ref_name }}-windows-x64.exe
path: staging/*
retention-days: 7
coverage:
name: Coverage (Linux)
needs: [static-analysis]
runs-on: ubuntu-latest
container:
image: debian:trixie
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Install dependencies
run: |
apt-get update
apt-get install -y cmake ninja-build libssl-dev zlib1g-dev libzstd-dev clang lld llvm
- name: Configure CMake (coverage)
env:
CC: clang
CXX: clang++
run: |
cmake -S . -B build-cov -G Ninja \
-DCMAKE_BUILD_TYPE=Debug \
-DBYEBYEVPN_ENABLE_TESTS=ON \
-DBYEBYEVPN_WARNINGS_AS_ERRORS=ON \
-DCMAKE_CXX_FLAGS="-fprofile-instr-generate -fcoverage-mapping" \
-DCMAKE_EXE_LINKER_FLAGS="-fprofile-instr-generate"
- name: Build (coverage)
run: cmake --build build-cov --parallel
- name: Run unit tests (coverage)
run: |
mkdir -p build-cov/profiles
export LLVM_PROFILE_FILE="$GITHUB_WORKSPACE/build-cov/profiles/byebyevpn_tests-%p.profraw"
ctest --test-dir build-cov --output-on-failure
- name: Capture coverage
run: |
llvm-profdata merge -sparse build-cov/profiles/*.profraw -o build-cov/coverage.profdata
llvm-cov export -format=lcov \
-instr-profile=build-cov/coverage.profdata \
-ignore-filename-regex='.*/(_deps|tests|build-cov)/.*' \
build-cov/tests/byebyevpn_tests > coverage.info
llvm-cov show \
-format=html \
-output-dir=coverage-html \
-instr-profile=build-cov/coverage.profdata \
-ignore-filename-regex='.*/(_deps|tests|build-cov)/.*' \
build-cov/tests/byebyevpn_tests
- name: Upload coverage artifacts
uses: actions/upload-artifact@4cec3d8aa04e39d1a68397de0c4cd6fb9dce8ec1 # v4.6.1
with:
name: coverage-linux
path: |
coverage.info
coverage-html
retention-days: 7
sanitizer-asan-ubsan:
name: Sanitizers ASan+UBSan (Linux)
needs: [static-analysis]
runs-on: ubuntu-latest
container:
image: ghcr.io/applone/sans:1.0.0
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Build custom OpenSSL
uses: ./.github/actions/build-custom-openssl
with:
openssl-version: ${{ env.OPENSSL_VERSION }}
install-prefix: ${{ github.workspace }}/deps/openssl-asan-ubsan
sanitizer-flags: '-fsanitize=address,undefined -fno-omit-frame-pointer'
cache-key: openssl-${{ env.OPENSSL_VERSION }}-asan-ubsan-sans-1.0.0-${{ runner.os }}
- name: Configure CMake (ASan+UBSan)
env:
CC: clang
CXX: clang++
run: |
LIBCXX_ROOT="/opt/libcxx_asan_ubsan"
SAN_FLAGS="-fsanitize=address,undefined -fno-omit-frame-pointer"
cmake -S . -B build-asan-ubsan -G Ninja \
-DCMAKE_BUILD_TYPE=Debug \
-DBYEBYEVPN_ENABLE_TESTS=ON \
-DBYEBYEVPN_ENABLE_ASAN=ON \
-DBYEBYEVPN_ENABLE_UBSAN=ON \
-DOPENSSL_ROOT_DIR="${{ github.workspace }}/deps/openssl-asan-ubsan" \
-DBYEBYEVPN_WARNINGS_AS_ERRORS=ON \
-DCMAKE_CXX_FLAGS="${SAN_FLAGS} -stdlib=libc++ -isystem ${LIBCXX_ROOT}/include/c++/v1" \
-DCMAKE_EXE_LINKER_FLAGS="${SAN_FLAGS} -stdlib=libc++ -L${LIBCXX_ROOT}/lib -Wl,-rpath,${LIBCXX_ROOT}/lib"
- name: Build (ASan+UBSan)
run: cmake --build build-asan-ubsan --parallel
- name: Run unit tests (ASan+UBSan)
run: |
export LD_LIBRARY_PATH="/opt/libcxx_asan_ubsan/lib:${LD_LIBRARY_PATH:-}"
ctest --test-dir build-asan-ubsan --output-on-failure
sanitizer-tsan:
name: Sanitizer TSan (Linux)
needs: [static-analysis]
runs-on: ubuntu-latest
container:
image: ghcr.io/applone/sans:1.0.0
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Build custom OpenSSL
uses: ./.github/actions/build-custom-openssl
with:
openssl-version: ${{ env.OPENSSL_VERSION }}
install-prefix: ${{ github.workspace }}/deps/openssl-tsan
sanitizer-flags: '-fsanitize=thread -fno-omit-frame-pointer'
cache-key: openssl-${{ env.OPENSSL_VERSION }}-tsan-sans-1.0.0-${{ runner.os }}
- name: Configure CMake (TSan)
env:
CC: clang
CXX: clang++
run: |
LIBCXX_ROOT="/opt/libcxx_tsan"
SAN_FLAGS="-fsanitize=thread -fno-omit-frame-pointer"
cmake -S . -B build-tsan -G Ninja \
-DCMAKE_BUILD_TYPE=Debug \
-DBYEBYEVPN_ENABLE_TESTS=ON \
-DBYEBYEVPN_ENABLE_TSAN=ON \
-DOPENSSL_ROOT_DIR="${{ github.workspace }}/deps/openssl-tsan" \
-DBYEBYEVPN_WARNINGS_AS_ERRORS=ON \
-DCMAKE_CXX_FLAGS="${SAN_FLAGS} -stdlib=libc++ -isystem ${LIBCXX_ROOT}/include/c++/v1" \
-DCMAKE_EXE_LINKER_FLAGS="${SAN_FLAGS} -stdlib=libc++ -L${LIBCXX_ROOT}/lib -Wl,-rpath,${LIBCXX_ROOT}/lib"
- name: Build (TSan)
run: cmake --build build-tsan --parallel
- name: Run unit tests (TSan)
run: |
export LD_LIBRARY_PATH="/opt/libcxx_tsan/lib:${LD_LIBRARY_PATH:-}"
ctest --test-dir build-tsan --output-on-failure
sanitizer-msan:
name: Sanitizer MSan (Linux)
needs: [static-analysis]
runs-on: ubuntu-latest
container:
image: ghcr.io/applone/sans:1.0.0
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Build custom OpenSSL
uses: ./.github/actions/build-custom-openssl
with:
openssl-version: ${{ env.OPENSSL_VERSION }}
install-prefix: ${{ github.workspace }}/deps/openssl-msan
sanitizer-flags: '-fsanitize=memory -fsanitize-memory-track-origins=2 -fno-omit-frame-pointer'
cache-key: openssl-${{ env.OPENSSL_VERSION }}-msan-sans-1.0.0-${{ runner.os }}
- name: Configure CMake (MSan)
env:
CC: clang
CXX: clang++
run: |
LIBCXX_ROOT="/opt/libcxx_msan"
SAN_FLAGS="-fsanitize=memory -fsanitize-memory-track-origins=2 -fno-omit-frame-pointer"
cmake -S . -B build-msan -G Ninja \
-DCMAKE_BUILD_TYPE=Debug \
-DBYEBYEVPN_ENABLE_TESTS=ON \
-DBYEBYEVPN_ENABLE_MSAN=ON \
-DOPENSSL_ROOT_DIR="${{ github.workspace }}/deps/openssl-msan" \
-DBYEBYEVPN_WARNINGS_AS_ERRORS=ON \
-DCMAKE_CXX_FLAGS="${SAN_FLAGS} -stdlib=libc++ -isystem ${LIBCXX_ROOT}/include/c++/v1" \
-DCMAKE_EXE_LINKER_FLAGS="${SAN_FLAGS} -stdlib=libc++ -L${LIBCXX_ROOT}/lib -Wl,-rpath,${LIBCXX_ROOT}/lib"
- name: Build (MSan)
run: cmake --build build-msan --parallel
- name: Run unit tests (MSan)
run: |
export LD_LIBRARY_PATH="/opt/libcxx_msan/lib:${LD_LIBRARY_PATH:-}"
ctest --test-dir build-msan --output-on-failure