# (C) 2020,2022 Jack Lloyd # (C) 2022 René Meusel, Rohde & Schwarz Cybersecurity # # Botan is released under the Simplified BSD License (see license.txt) name: ci permissions: contents: read # implicitly all other scopes not listed become none on: push: branches: [ master ] pull_request: branches: [ master ] # cancel running workflows when new commits are being pushed in pull requests # but not on the master branch concurrency: group: ${{ github.workflow }} @ ${{ github.head_ref || github.run_id }} cancel-in-progress: true jobs: windows: name: "Windows" strategy: fail-fast: false matrix: include: - target: shared arch: x86_64 host_os: windows-2022 - target: static arch: x86_64 host_os: windows-2022 - target: amalgamation arch: x86_64 host_os: windows-2022 - target: shared arch: x86 host_os: windows-2022 runs-on: ${{ matrix.host_os }} steps: - uses: actions/checkout@v3 - name: Setup Build Agent uses: ./.github/actions/setup-build-agent with: target: ${{ matrix.target }} cache-key: ${{ matrix.host_os }}-msvc-${{ matrix.arch }}-${{ matrix.target }} arch: ${{ matrix.arch }} - name: Build and Test Botan run: python3 ./src/scripts/ci_build.py --cc='msvc' --make-tool='ninja' --cpu='${{ matrix.arch }}' --test-results-dir=junit_results ${{ matrix.target }} linux: name: "Linux" strategy: fail-fast: false matrix: include: - compiler: gcc target: shared - compiler: gcc target: amalgamation - compiler: gcc target: static - compiler: clang target: shared runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v3 - name: Setup Build Agent uses: ./.github/actions/setup-build-agent with: target: ${{ matrix.target }} cache-key: linux-${{ matrix.compiler }}-x86_64-${{ matrix.target }} - name: Build and Test Botan run: python3 ./src/scripts/ci_build.py --cc='${{ matrix.compiler }}' --test-results-dir=junit_results ${{ matrix.target }} macos: name: "macOS" strategy: fail-fast: false matrix: include: - target: shared compiler: clang - target: amalgamation compiler: clang runs-on: macos-13 steps: - uses: actions/checkout@v3 - name: Setup Build Agent uses: ./.github/actions/setup-build-agent with: target: ${{ matrix.target }} cache-key: macos-${{ matrix.compiler }}-x86_64-${{ matrix.target }} - name: Build and Test Botan run: python3 ./src/scripts/ci_build.py --cc='${{ matrix.compiler }}' --test-results-dir=junit_results ${{ matrix.target }} clang-tidy: name: "Clang Tidy" runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v3 - name: Setup Build Agent uses: ./.github/actions/setup-build-agent with: target: clang-tidy cache-key: linux-x86_64-clang-tidy - name: Configure Build run: python3 ./configure.py --cc=clang - name: Run Clang Tidy run: | ./src/scripts/ci/gh_get_changes_in_pr.py $(git rev-parse HEAD) --api-token=${{ secrets.GITHUB_TOKEN }} | \ python3 ./src/scripts/dev_tools/run_clang_tidy.py --verbose --take-file-list-from-stdin --export-fixes-dir=clang_tidy_diagnostics - name: Display Clang Tidy Results if: failure() run: ./src/scripts/ci/gh_clang_tidy_fixes_in_pr.py clang_tidy_diagnostics analysis: name: "Analysis" strategy: fail-fast: false matrix: include: - target: coverage compiler: gcc host_os: ubuntu-22.04 - target: sanitizer compiler: msvc host_os: windows-2022 make_tool: ninja - target: sanitizer compiler: clang host_os: ubuntu-22.04 - target: sanitizer compiler: gcc host_os: ubuntu-22.04 - target: valgrind compiler: gcc host_os: ubuntu-22.04 - target: fuzzers compiler: gcc host_os: ubuntu-22.04 - target: lint compiler: gcc host_os: ubuntu-22.04 - target: format compiler: gcc host_os: ubuntu-22.04 runs-on: ${{ matrix.host_os }} env: COVERALLS_REPO_TOKEN: pbLoTMBxC1DFvbws9WfrzVOvfEdEZTcCS steps: - uses: actions/checkout@v3 with: path: ./source - name: Fetch BoringSSL fork for BoGo tests uses: actions/checkout@v3 with: repository: randombit/boringssl ref: rene/runner-20230705 path: ./boringssl if: matrix.target == 'coverage' || matrix.target == 'sanitizer' - name: Setup Build Agent uses: ./source/.github/actions/setup-build-agent with: target: ${{ matrix.target }} cache-key: ${{ matrix.host_os }}-${{ matrix.compiler }}-x86_64-${{ matrix.target }} - name: Build and Test Botan run: python3 ./source/src/scripts/ci_build.py --root-dir=${{ github.workspace }}/source --build-dir=${{ github.workspace }}/build --boringssl-dir=${{ github.workspace }}/boringssl --cc='${{ matrix.compiler }}' --make-tool='${{ matrix.make_tool }}' --test-results-dir=junit_results ${{ matrix.target }} specials: name: "Special" strategy: fail-fast: false matrix: include: - target: examples compiler: gcc host_os: ubuntu-22.04 - target: minimized compiler: gcc host_os: ubuntu-22.04 - target: bsi compiler: gcc host_os: ubuntu-22.04 runs-on: ${{ matrix.host_os }} steps: - uses: actions/checkout@v3 with: path: ./source - name: Setup Build Agent uses: ./source/.github/actions/setup-build-agent with: target: ${{ matrix.target }} cache-key: ${{ matrix.host_os }}-${{ matrix.compiler }}-x86_64-${{ matrix.target }} - name: Build and Test Botan run: python3 ./source/src/scripts/ci_build.py --root-dir=${{ github.workspace }}/source --build-dir=${{ github.workspace }}/build --boringssl-dir=${{ github.workspace }}/boringssl --cc='${{ matrix.compiler }}' --make-tool='${{ matrix.make_tool }}' --test-results-dir=junit_results ${{ matrix.target }} x-compile: name: "Cross" strategy: fail-fast: false matrix: include: - target: cross-i386 compiler: gcc host_os: ubuntu-22.04 - target: cross-arm32 compiler: gcc host_os: ubuntu-22.04 - target: cross-arm64 compiler: gcc host_os: ubuntu-22.04 - target: cross-ppc64 compiler: gcc host_os: ubuntu-22.04 - target: cross-riscv64 compiler: gcc host_os: ubuntu-22.04 - target: cross-s390x compiler: gcc host_os: ubuntu-22.04 - target: cross-android-arm32 compiler: clang host_os: ubuntu-22.04 - target: cross-android-arm64 compiler: clang host_os: ubuntu-22.04 - target: static compiler: gcc host_os: windows-2022 make_tool: mingw32-make - target: cross-ios-arm64 compiler: clang host_os: macos-13 - target: emscripten compiler: emcc host_os: macos-13 runs-on: ${{ matrix.host_os }} env: ANDROID_NDK: android-ndk-r26 steps: - uses: actions/checkout@v3 - name: Setup Build Agent uses: ./.github/actions/setup-build-agent with: target: ${{ matrix.target }} cache-key: ${{ matrix.host_os }}-${{ matrix.compiler }}-xcompile-${{ matrix.target }} - name: Build and Test Botan run: python3 ./src/scripts/ci_build.py --cc='${{ matrix.compiler }}' --test-results-dir=junit_results ${{ matrix.target }}