From c4812a1c3a6ccfceeb23b20810b3315075de9e29 Mon Sep 17 00:00:00 2001 From: Yi Huang Date: Tue, 27 Jun 2023 11:31:40 -0700 Subject: [PATCH] Resue build workflows (#3720) - Refactor the build workflow into a resusable workflow. Other workflows that need build artifacts can just call the build workflow. The reusable build workflow is essentially a function that takes various build parameters. This enables us to build and test binaries in different environments and improve how we build stuff in one place. - Merge stress and BVT into the same workflow so we build once for everything. --- .github/workflows/build-reuse-unix.yml | 98 +++++++ .github/workflows/build-reuse-win.yml | 97 ++++++ .github/workflows/build-reuse-winkernel.yml | 84 ++++++ .github/workflows/build.yml | 308 +++++++++----------- .github/workflows/bvt.yml | 176 ----------- .github/workflows/stress.yml | 108 ------- .github/workflows/test.yml | 270 +++++++++++++++++ 7 files changed, 687 insertions(+), 454 deletions(-) create mode 100644 .github/workflows/build-reuse-unix.yml create mode 100644 .github/workflows/build-reuse-win.yml create mode 100644 .github/workflows/build-reuse-winkernel.yml delete mode 100644 .github/workflows/bvt.yml delete mode 100644 .github/workflows/stress.yml create mode 100644 .github/workflows/test.yml diff --git a/.github/workflows/build-reuse-unix.yml b/.github/workflows/build-reuse-unix.yml new file mode 100644 index 000000000..44c8bccde --- /dev/null +++ b/.github/workflows/build-reuse-unix.yml @@ -0,0 +1,98 @@ +name: Build Unix + +# The caller is responsible for making sure all options passed to this workflow are valid and compatible with each other. + +on: + workflow_dispatch: + workflow_call: + inputs: + config: + required: false + default: 'Release' + type: string + # options: + # - Debug + # - Release + plat: + required: false + type: string + default: 'linux' + # options: + # - linux + # - android + # - ios + # - macos + os: + required: false + type: string + default: 'ubuntu-20.04' + # options: + # - ubuntu-20.04 + # - ubuntu-22.04 + # - macos-12 + arch: + required: false + default: 'x64' + type: string + # options: + # - x86 + # - x64 + tls: + required: false + default: 'schannel' + type: string + # options: + # - openssl + # - openssl3 + static: + required: false + default: '' + type: string + systemcrypto: + required: false + default: '' + type: string + clang: + required: false + default: '' + type: string + codecheck: + required: false + default: '' + type: string + sanitize: + required: false + default: '' + type: string + test: + required: false + default: '' + type: string + +permissions: read-all + +jobs: + build-unix-reuse: + name: Build + runs-on: ${{ inputs.os }} + steps: + - name: Checkout repository + uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 + with: + fetch-depth: 0 + - name: Prepare Machine + shell: pwsh + run: scripts/prepare-machine.ps1 -ForBuild -Tls ${{ inputs.tls }} + - name: Build For Test + if: inputs.test == '-Test' + shell: pwsh + run: scripts/build.ps1 -Config ${{ inputs.config }} -Platform ${{ inputs.plat }} -Arch ${{ inputs.arch }} -Tls ${{ inputs.tls }} -DisablePerf ${{ inputs.static }} ${{ inputs.clang }} ${{ inputs.systemcrypto }} ${{ inputs.codecheck }} ${{ inputs.sanitize }} + - name: Build + if: inputs.test == '' + shell: pwsh + run: scripts/build.ps1 -Config ${{ inputs.config }} -Platform ${{ inputs.plat }} -Arch ${{ inputs.arch }} -Tls ${{ inputs.tls }} ${{ inputs.static }} ${{ inputs.clang }} ${{ inputs.codecheck }} + - name: Upload build artifacts + uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce + with: + name: ${{ inputs.config }}-${{ inputs.plat }}-${{ inputs.os }}-${{ inputs.arch }}-${{ inputs.tls }}${{ inputs.static }}${{ inputs.clang }}${{ inputs.systemcrypto }}${{ inputs.codecheck }}${{ inputs.sanitize }}${{ inputs.test }} + path: artifacts \ No newline at end of file diff --git a/.github/workflows/build-reuse-win.yml b/.github/workflows/build-reuse-win.yml new file mode 100644 index 000000000..c47b7e702 --- /dev/null +++ b/.github/workflows/build-reuse-win.yml @@ -0,0 +1,97 @@ +name: Build WinUser + +# The caller is responsible for making sure all options passed to this workflow are valid and compatible with each other. + +on: + workflow_dispatch: + workflow_call: + inputs: + config: + required: false + default: 'Release' + type: string + # options: + # - Debug + # - Release + plat: + required: false + type: string + default: 'windows' + # options: + # - windows + # - uwp + # - winkernel + os: + required: false + type: string + default: 'windows-2019' + # options: + # - windows-2019 + # - windows-2022 + arch: + required: false + default: 'x64' + type: string + # options: + # - x86 + # - x64 + # - arm64 + tls: + required: false + default: 'schannel' + type: string + # options: + # - openssl + # - openssl3 + # - schannel + xdp: + required: false + default: '' + type: string + static: + required: false + default: '' + type: string + sanitize: + required: false + default: '' + type: string + test: + required: false + default: '' + type: string + +permissions: read-all + +jobs: + build-windows-reuse: + if: inputs.plat == 'windows' || inputs.plat == 'uwp' + name: Build + runs-on: windows-2019 # workaround windows-2022 compiler issue for sanitizer + steps: + - name: Checkout repository + uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 + with: + fetch-depth: 0 + - name: Install Perl + uses: shogo82148/actions-setup-perl@0bb5af61b3945a80585229183e7ac50a97d7996c + with: + perl-version: '5.34' + - name: Install NASM + uses: ilammy/setup-nasm@321e6ed62a1fc77024a3bd853deb33645e8b22c4 + - name: Prepare Machine + shell: pwsh + run: scripts/prepare-machine.ps1 -ForBuild -Tls ${{ inputs.tls }} + - name: Build For Test + if: inputs.test == '-Test' + shell: pwsh + run: scripts/build.ps1 -Config ${{ inputs.config }} -Platform ${{ inputs.plat }} -Arch ${{ inputs.arch }} -Tls ${{ inputs.tls }} -DisablePerf -DynamicCRT ${{ inputs.xdp }} ${{ inputs.sanitize }} + - name: Build + if: inputs.test == '' + shell: pwsh + run: scripts/build.ps1 -Config ${{ inputs.config }} -Platform ${{ inputs.plat }} -Arch ${{ inputs.arch }} -Tls ${{ inputs.tls }} ${{ inputs.xdp }} ${{ inputs.sanitize }} ${{ inputs.static }} + - name: Upload build artifacts + uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce + with: + name: ${{ inputs.config }}-${{ inputs.plat }}-${{ inputs.os }}-${{ inputs.arch }}-${{ inputs.tls }}${{ inputs.xdp }}${{ inputs.sanitize }}${{ inputs.static }}${{ inputs.test }} + path: artifacts diff --git a/.github/workflows/build-reuse-winkernel.yml b/.github/workflows/build-reuse-winkernel.yml new file mode 100644 index 000000000..4e9d57d92 --- /dev/null +++ b/.github/workflows/build-reuse-winkernel.yml @@ -0,0 +1,84 @@ +name: Build WinKernel + +# The caller is responsible for making sure all options passed to this workflow are valid and compatible with each other. + +on: + workflow_dispatch: + workflow_call: + inputs: + config: + required: false + default: 'Release' + type: string + # options: + # - Debug + # - Release + plat: + required: false + type: string + default: 'winkernel' + # options: + # - winkernel + os: + required: false + type: string + default: 'windows-2019' + # options: + # - windows-2019 + # - windows-2022 + arch: + required: false + default: 'x64' + type: string + # options: + # - x86 + # - x64 + # - arm64 + tls: + required: false + default: 'schannel' + type: string + # options: + # - openssl + # - openssl3 + # - schannel + test: + required: false + default: '' + type: string + +permissions: read-all + +jobs: + build-windows-kernel-reuse: + name: Build + runs-on: ${{ inputs.os }} + steps: + - name: Checkout repository + uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 + with: + fetch-depth: 0 + - name: Prepare Machine + shell: pwsh + run: scripts/prepare-machine.ps1 -ForBuild -ForKernel + - name: Add msbuild to PATH + uses: microsoft/setup-msbuild@1ff57057b5cfdc39105cd07a01d78e9b0ea0c14c + - name: Nuget Restore + shell: pwsh + run: msbuild msquic.kernel.sln -t:restore /p:RestorePackagesConfig=true /p:Configuration=${{ inputs.config }} /p:Platform=${{ inputs.arch }} + - name: Build + if: inputs.test == '-Test' + shell: pwsh + run: msbuild msquic.kernel.sln /p:Configuration=${{ inputs.config }} /p:Platform=${{ inputs.arch }} /p:QUIC_VER_SUFFIX=-official /p:QUIC_VER_GIT_HASH=${{ github.sha }} + - name: Build + if: inputs.test == '' + shell: pwsh + run: msbuild msquic.kernel.sln /p:Configuration=${{ inputs.config }} /p:Platform=${{ inputs.arch }} /p:QUIC_VER_SUFFIX=-official + - name: Sign Kernel + shell: pwsh + run: scripts/sign.ps1 -Config ${{ inputs.config }} -Arch ${{ inputs.arch }} -Tls ${{ inputs.tls }} + - name: Upload build artifacts + uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce + with: + name: ${{ inputs.config }}-${{ inputs.plat }}-${{ inputs.os }}-${{ inputs.arch }}-${{ inputs.tls }}${{ inputs.test }} + path: artifacts diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 7dfc53bbc..1c1a86ef1 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -20,147 +20,15 @@ concurrency: permissions: read-all jobs: - build-ubuntu: - name: Build - strategy: - fail-fast: false - matrix: - plat: [linux, android] - os: ['20.04', '22.04'] - arch: [x86, x64] - tls: [openssl, openssl3] - systemcrypto: ['', '-UseSystemOpenSSLCrypto'] - static: ['', '-Static'] - clang: ['', '-Clang'] - codecheck: ['', '-CodeCheck'] - exclude: - # Android doesn't support x86 - - plat: android - arch: x86 - # Android doesn't use system crypto - - plat: android - systemcrypto: '-UseSystemOpenSSLCrypto' - # No openssl3 system crypto on 20.04 - - plat: linux ' - os: '20.04' - tls: 'openssl3' - systemcrypto: '-UseSystemOpenSSLCrypto' - # No openssl system crypto on 22.04 - - plat: linux ' - os: '22.04' - tls: 'openssl' - systemcrypto: '-UseSystemOpenSSLCrypto' - # Android doesn't use Clang - - plat: android - clang: '-Clang' - # Android doesn't use CodeCheck - - plat: android - codecheck: '-CodeCheck' - # No need to combine SystemCrypto and CodeCheck - - systemcrypto: '-UseSystemOpenSSLCrypto' - codecheck: '-CodeCheck' - # No need to combine Static and CodeCheck - - static: '-Static' - codecheck: '-CodeCheck' - # No need to combine Clang and CodeCheck - - clang: '-Clang' - codecheck: '-CodeCheck' - runs-on: ubuntu-${{ matrix.os }} - steps: - - name: Checkout repository - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 - with: - fetch-depth: 0 - - name: Prepare Machine - shell: pwsh - run: scripts/prepare-machine.ps1 -ForBuild -Tls ${{ matrix.tls }} - - name: Build Debug - shell: pwsh - run: scripts/build.ps1 -Config Debug -Platform ${{ matrix.plat }} -Arch ${{ matrix.arch }} -Tls ${{ matrix.tls }} ${{ matrix.static }} ${{ matrix.clang }} ${{ matrix.codecheck }} - - name: Build Release - if: matrix.codecheck != '-CodeCheck' # TODO: FIX: Release builds with CodeCheck fail - shell: pwsh - run: scripts/build.ps1 -Config Release -Platform ${{ matrix.plat }} -Arch ${{ matrix.arch }} -Tls ${{ matrix.tls }} ${{ matrix.static }} ${{ matrix.clang }} ${{ matrix.codecheck }} - - build-ubuntu-cross-compile: - name: Build - needs: [] - strategy: - fail-fast: false - matrix: - plat: [linux] - os: ['20.04', '22.04'] - arch: [arm, arm64] - tls: [openssl, openssl3] - toolchain: ['cmake/toolchains/arm-linux.cmake', 'cmake/toolchains/aarch64-linux.cmake'] - static: ['', '-Static'] - exclude: - - arch: arm - toolchain: 'cmake/toolchains/aarch64-linux.cmake' - - arch: arm64 - toolchain: 'cmake/toolchains/arm-linux.cmake' - runs-on: ubuntu-${{ matrix.os }} - container: - image: ghcr.io/microsoft/msquic/linux-build-xcomp - steps: - - name: Checkout repository - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 - with: - fetch-depth: 0 - submodules: 'recursive' - - name: Set ownership - run: | - # this is to fix GIT not liking owner of the checkout dir - chown -R $(id -u):$(id -g) $PWD - - name: Prepare Machine - shell: pwsh - run: scripts/prepare-machine.ps1 -ForOneBranch -InitSubmodules - - name: Build Debug - shell: pwsh - run: scripts/build.ps1 -Config Debug -Arch ${{ matrix.arch }} -ToolchainFile ${{ matrix.toolchain }} -Tls ${{ matrix.tls }} -DisableLogs -OneBranch ${{ matrix.static }} - - name: Build Release - shell: pwsh - run: scripts/build.ps1 -Config Release -Arch ${{ matrix.arch }} -ToolchainFile ${{ matrix.toolchain }} -Tls ${{ matrix.tls }} -DisableLogs -OneBranch ${{ matrix.static }} - - build-macOS: - name: Build - needs: [] - strategy: - fail-fast: false - matrix: - plat: [macos, ios] - os: ['12'] - arch: [x86, x64, arm64] - tls: [openssl, openssl3] - static: ['', '-Static'] - exclude: - # iOS doesn't support x86 - - plat: ios - arch: x86 - runs-on: macos-${{ matrix.os }} - steps: - - name: Checkout repository - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 - with: - fetch-depth: 0 - - name: Prepare Machine - shell: pwsh - run: scripts/prepare-machine.ps1 -ForBuild -Tls ${{ matrix.tls }} - - name: Build Debug - shell: pwsh - run: scripts/build.ps1 -Config Debug -Platform ${{ matrix.plat }} -Arch ${{ matrix.arch }} -Tls ${{ matrix.tls }} ${{ matrix.static }} - - name: Build Release - shell: pwsh - run: scripts/build.ps1 -Config Release -Platform ${{ matrix.plat }} -Arch ${{ matrix.arch }} -Tls ${{ matrix.tls }} ${{ matrix.static }} - build-windows: - name: Build + name: WinUser needs: [] strategy: fail-fast: false matrix: + config: ['Debug', 'Release'] plat: [windows, uwp] # TODO: Support gamecore_console - os: ['2019', '2022'] + os: ['windows-2019', 'windows-2022'] arch: [x86, x64, arm64] tls: [schannel, openssl, openssl3] static: ['', '-Static'] @@ -187,58 +55,158 @@ jobs: # XDP only supports x64 currently - arch: arm64 xdp: '-UseXdp' - runs-on: windows-${{ matrix.os }} - steps: - - name: Checkout repository - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 - with: - fetch-depth: 0 - - name: Install Perl - uses: shogo82148/actions-setup-perl@0bb5af61b3945a80585229183e7ac50a97d7996c - with: - perl-version: '5.34' - - name: Install NASM - uses: ilammy/setup-nasm@321e6ed62a1fc77024a3bd853deb33645e8b22c4 - - name: Prepare Machine - shell: pwsh - run: scripts/prepare-machine.ps1 -ForBuild -Tls ${{ matrix.tls }} - - name: Build Debug - shell: pwsh - run: scripts/build.ps1 -Config Debug -Platform ${{ matrix.plat }} -Arch ${{ matrix.arch }} -Tls ${{ matrix.tls }} ${{ matrix.static }} ${{ matrix.xdp }} - - name: Build Release - shell: pwsh - run: scripts/build.ps1 -Config Release -Platform ${{ matrix.plat }} -Arch ${{ matrix.arch }} -Tls ${{ matrix.tls }} ${{ matrix.static }} ${{ matrix.xdp }} + uses: ./.github/workflows/build-reuse-win.yml + with: + config: ${{ matrix.config }} + plat: ${{ matrix.plat }} + os: ${{ matrix.os }} + arch: ${{ matrix.arch }} + tls: ${{ matrix.tls }} + static: ${{ matrix.static }} + xdp: ${{ matrix.xdp }} build-windows-kernel: - name: Build + name: WinKernel needs: [] strategy: fail-fast: false matrix: + config: ['Debug', 'Release'] plat: [winkernel] - os: ['2019', '2022'] + os: ['windows-2019', 'windows-2022'] arch: [x64, arm64] tls: [schannel] - runs-on: windows-${{ matrix.os }} + uses: ./.github/workflows/build-reuse-winkernel.yml + with: + config: ${{ matrix.config }} + plat: ${{ matrix.plat }} + os: ${{ matrix.os }} + arch: ${{ matrix.arch }} + tls: ${{ matrix.tls }} + + build-macOS: + name: MacOs + needs: [] + strategy: + fail-fast: false + matrix: + config: ['Debug', 'Release'] + plat: [macos, ios] + os: ['macos-12'] + arch: [x86, x64, arm64] + tls: [openssl, openssl3] + static: ['', '-Static'] + exclude: + # iOS doesn't support x86 + - plat: ios + arch: x86 + uses: ./.github/workflows/build-reuse-unix.yml + with: + config: ${{ matrix.config }} + plat: ${{ matrix.plat }} + os: ${{ matrix.os }} + arch: ${{ matrix.arch }} + tls: ${{ matrix.tls }} + static: ${{ matrix.static }} + + build-ubuntu: + name: Ubuntu + needs: [] + strategy: + fail-fast: false + matrix: + config: ['Debug', 'Release'] + plat: [linux, android] + os: ['ubuntu-20.04', 'ubuntu-22.04'] + arch: [x86, x64] + tls: [openssl, openssl3] + systemcrypto: ['', '-UseSystemOpenSSLCrypto'] + static: ['', '-Static'] + clang: ['', '-Clang'] + codecheck: ['', '-CodeCheck'] + exclude: + # Android doesn't support x86 + - plat: android + arch: x86 + # Android doesn't use system crypto + - plat: android + systemcrypto: '-UseSystemOpenSSLCrypto' + # No openssl3 system crypto on ubuntu-20.04 + - plat: linux ' + os: 'ubuntu-20.04' + tls: 'openssl3' + systemcrypto: '-UseSystemOpenSSLCrypto' + # No openssl system crypto on ubuntu-22.04 + - plat: linux ' + os: 'ubuntu-22.04' + tls: 'openssl' + systemcrypto: '-UseSystemOpenSSLCrypto' + # Android doesn't use Clang + - plat: android + clang: '-Clang' + # Android doesn't use CodeCheck + - plat: android + codecheck: '-CodeCheck' + # No need to combine SystemCrypto and CodeCheck + - systemcrypto: '-UseSystemOpenSSLCrypto' + codecheck: '-CodeCheck' + # No need to combine Static and CodeCheck + - static: '-Static' + codecheck: '-CodeCheck' + # No need to combine Clang and CodeCheck + - clang: '-Clang' + codecheck: '-CodeCheck' + # Release builds fail with CodeCheck + - config: 'Release' + codecheck: '-CodeCheck' + uses: ./.github/workflows/build-reuse-unix.yml + with: + config: ${{ matrix.config }} + plat: ${{ matrix.plat }} + os: ${{ matrix.os }} + arch: ${{ matrix.arch }} + tls: ${{ matrix.tls }} + systemcrypto: ${{ matrix.systemcrypto }} + static: ${{ matrix.static }} + clang: ${{ matrix.clang }} + codecheck: ${{ matrix.codecheck }} + + build-ubuntu-cross-compile: + name: UbuntuArm + needs: [] + strategy: + fail-fast: false + matrix: + plat: [linux] + os: ['ubuntu-20.04', 'ubuntu-22.04'] + arch: [arm, arm64] + tls: [openssl, openssl3] + toolchain: ['cmake/toolchains/arm-linux.cmake', 'cmake/toolchains/aarch64-linux.cmake'] + static: ['', '-Static'] + exclude: + - arch: arm + toolchain: 'cmake/toolchains/aarch64-linux.cmake' + - arch: arm64 + toolchain: 'cmake/toolchains/arm-linux.cmake' + runs-on: ${{ matrix.os }} + container: + image: ghcr.io/microsoft/msquic/linux-build-xcomp steps: - name: Checkout repository uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 with: fetch-depth: 0 + submodules: 'recursive' + - name: Set ownership + run: | + # this is to fix GIT not liking owner of the checkout dir + chown -R $(id -u):$(id -g) $PWD - name: Prepare Machine shell: pwsh - run: scripts/prepare-machine.ps1 -ForBuild -ForKernel - - name: Add msbuild to PATH - uses: microsoft/setup-msbuild@1ff57057b5cfdc39105cd07a01d78e9b0ea0c14c - - name: Nuget Restore Debug - shell: pwsh - run: msbuild msquic.kernel.sln -t:restore /p:RestorePackagesConfig=true /p:Configuration=Debug /p:Platform=${{ matrix.arch }} + run: scripts/prepare-machine.ps1 -ForOneBranch -InitSubmodules - name: Build Debug shell: pwsh - run: msbuild msquic.kernel.sln /p:Configuration=Debug /p:Platform=${{ matrix.arch }} /p:QUIC_VER_SUFFIX=-official - - name: Nuget Restore Release - shell: pwsh - run: msbuild msquic.kernel.sln -t:restore /p:RestorePackagesConfig=true /p:Configuration=Release /p:Platform=${{ matrix.arch }} + run: scripts/build.ps1 -Config Debug -Arch ${{ matrix.arch }} -ToolchainFile ${{ matrix.toolchain }} -Tls ${{ matrix.tls }} -DisableLogs -OneBranch ${{ matrix.static }} - name: Build Release shell: pwsh - run: msbuild msquic.kernel.sln /p:Configuration=Release /p:Platform=${{ matrix.arch }} /p:QUIC_VER_SUFFIX=-official + run: scripts/build.ps1 -Config Release -Arch ${{ matrix.arch }} -ToolchainFile ${{ matrix.toolchain }} -Tls ${{ matrix.tls }} -DisableLogs -OneBranch ${{ matrix.static }} diff --git a/.github/workflows/bvt.yml b/.github/workflows/bvt.yml deleted file mode 100644 index 1e94739e1..000000000 --- a/.github/workflows/bvt.yml +++ /dev/null @@ -1,176 +0,0 @@ -name: BVT - -on: - workflow_dispatch: - push: - branches: - - main - - release/* - pull_request: - branches: - - main - - release/* - -concurrency: - # Cancel any workflow currently in progress for the same PR. - # Allow running concurrently with any other commits. - group: bvt-${{ github.event.pull_request.number || github.sha }} - cancel-in-progress: true - -permissions: read-all - -jobs: - bvt: - name: BVT - strategy: - fail-fast: false - matrix: - os: [ubuntu-20.04, ubuntu-22.04, windows-2019, windows-2022] # TODO: Add macos-12 - arch: [x64] - tls: [schannel, openssl, openssl3] - systemcrypto: ['', '-UseSystemOpenSSLCrypto'] - xdp: ['', '-UseXdp'] - qtip: ['', '-UseQtip'] - sanitize: ['', '-Sanitize'] - exclude: - # Schannel only supported on windows-2022 - - os: ubuntu-20.04 - tls: schannel - - os: ubuntu-22.04 - tls: schannel - - os: macos-12 - tls: schannel - - os: windows-2019 - tls: schannel - # System crypto only suppored on Ubuntu - - os: macos-12 - systemcrypto: '-UseSystemOpenSSLCrypto' - - os: windows-2019 - systemcrypto: '-UseSystemOpenSSLCrypto' - - os: windows-2022 - systemcrypto: '-UseSystemOpenSSLCrypto' - - os: ubuntu-20.04 - tls: openssl3 - systemcrypto: '-UseSystemOpenSSLCrypto' - - os: ubuntu-22.04 - tls: openssl - systemcrypto: '-UseSystemOpenSSLCrypto' - # Linux and Windows Schannel use ASAN - - os: ubuntu-20.04 - sanitize: '' - - os: ubuntu-22.04 - sanitize: '' - - tls: schannel - sanitize: '' - # OpenSSL on Windows and macOS doesn't work with ASAN - - os: macos-12 - sanitize: '-Sanitize' - - os: windows-2019 - tls: openssl - sanitize: '-Sanitize' - - os: windows-2019 - tls: openssl3 - sanitize: '-Sanitize' - - os: windows-2022 - tls: openssl - sanitize: '-Sanitize' - - os: windows-2022 - tls: openssl3 - sanitize: '-Sanitize' - # XDP stuff is on latest Windows only - - os: ubuntu-20.04 - xdp: '-UseXdp' - - os: ubuntu-22.04 - xdp: '-UseXdp' - - os: macos-12 - xdp: '-UseXdp' - - os: windows-2019 - xdp: '-UseXdp' - # QTIP only works with XDP - - xdp: '' - qtip: '-UseQtip' - runs-on: ${{ matrix.os }} - steps: - - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 - with: - fetch-depth: 0 - - name: Install Perl - if: runner.os == 'Windows' - uses: shogo82148/actions-setup-perl@0bb5af61b3945a80585229183e7ac50a97d7996c - with: - perl-version: '5.34' - - name: Install NASM - if: runner.os == 'Windows' - uses: ilammy/setup-nasm@321e6ed62a1fc77024a3bd853deb33645e8b22c4 - - name: Prepare Machine - run: scripts/prepare-machine.ps1 -Tls ${{ matrix.tls }} -ForBuild -ForTest ${{ matrix.xdp }} - shell: pwsh - - name: Build - shell: pwsh - run: scripts/build.ps1 -Config Debug -Arch ${{ matrix.arch }} -Tls ${{ matrix.tls }} -DisableTools -DisablePerf -DynamicCRT ${{ matrix.systemcrypto }} ${{ matrix.xdp }} ${{ matrix.sanitize }} - - name: Install ETW Manifest - if: runner.os == 'Windows' - shell: pwsh - run: | - $MsQuicDll = ".\artifacts\bin\windows\${{ matrix.arch }}_Debug_${{ matrix.tls }}\msquic.dll" - $ManifestPath = ".\src\manifest\MsQuicEtw.man" - wevtutil.exe um $ManifestPath - wevtutil.exe im $ManifestPath /rf:$($MsQuicDll) /mf:$($MsQuicDll) - - name: Test - shell: pwsh - timeout-minutes: 120 - run: scripts/test.ps1 -Config Debug -Arch ${{ matrix.arch }} -Tls ${{ matrix.tls }} -OsRunner ${{ matrix.os }} -GHA -LogProfile Full.Light -GenerateXmlResults ${{ matrix.xdp }} ${{ matrix.qtip }} - - name: Upload on Failure - uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce - if: failure() - with: - name: ${{ matrix.os }}-${{ matrix.arch }}-${{ matrix.tls }}${{ matrix.systemcrypto }}${{ matrix.xdp }}${{ matrix.qtip }}${{ matrix.sanitize }} - path: artifacts - - bvt-kernel: - name: BVT Kernel - needs: [] - strategy: - fail-fast: false - matrix: - os: ['windows-2022'] - arch: [x64] - tls: [schannel] - runs-on: ${{ matrix.os }} - steps: - - name: Checkout repository - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 - - name: Prepare Machine - shell: pwsh - run: scripts/prepare-machine.ps1 -ForBuild -ForTest -ForKernel - - name: Add msbuild to PATH - uses: microsoft/setup-msbuild@1ff57057b5cfdc39105cd07a01d78e9b0ea0c14c - - name: Nuget Restore - shell: pwsh - run: msbuild msquic.kernel.sln -t:restore /p:RestorePackagesConfig=true /p:Configuration=Debug /p:Platform=${{ matrix.arch }} - - name: Build Kernel - shell: pwsh - run: msbuild msquic.kernel.sln /p:Configuration=Debug /p:Platform=${{ matrix.arch }} /p:QUIC_VER_SUFFIX=-official /p:QUIC_VER_GIT_HASH=${{ github.sha }} - - name: Build User - shell: pwsh - run: scripts/build.ps1 -Config Debug -Arch ${{ matrix.arch }} -Tls ${{ matrix.tls }} -DisableTools -DisablePerf - - name: Sign Kernel - shell: pwsh - run: scripts/sign.ps1 -Config Debug -Arch ${{ matrix.arch }} -Tls ${{ matrix.tls }} - - name: Install ETW Manifest - shell: pwsh - run: | - $MsQuicDll = ".\artifacts\bin\windows\${{ matrix.arch }}_Debug_${{ matrix.tls }}\msquic.dll" - $ManifestPath = ".\src\manifest\MsQuicEtw.man" - wevtutil.exe um $ManifestPath - wevtutil.exe im $ManifestPath /rf:$($MsQuicDll) /mf:$($MsQuicDll) - - name: Test - shell: pwsh - timeout-minutes: 90 - run: scripts/test.ps1 -Config Debug -Arch ${{ matrix.arch }} -Tls ${{ matrix.tls }} -GHA -LogProfile Full.Light -GenerateXmlResults -Kernel -Filter -*ValidateConfiguration:*ValidAlpnLengths:*ResumeRejection*:*ClientCertificate*:*LoadBalanced* - - name: Upload on Failure - uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce - if: failure() - with: - name: ${{ matrix.os }}-winkernel-${{ matrix.arch }}-${{ matrix.tls }} - path: artifacts diff --git a/.github/workflows/stress.yml b/.github/workflows/stress.yml deleted file mode 100644 index 21a342743..000000000 --- a/.github/workflows/stress.yml +++ /dev/null @@ -1,108 +0,0 @@ -name: Stress - -on: - workflow_dispatch: - push: - branches: - - main - - release/* - pull_request: - branches: - - main - - release/* - -concurrency: - # Cancel any workflow currently in progress for the same PR. - # Allow running concurrently with any other commits. - group: stress-${{ github.event.pull_request.number || github.sha }} - cancel-in-progress: true - -permissions: read-all - -jobs: - stress: - strategy: - fail-fast: false - matrix: - os: [ubuntu-20.04, macos-12, windows-2019, windows-2022] - arch: [x64] - tls: [schannel, openssl, openssl3] - xdp: ['', '-UseXdp'] - sanitize: ['', '-Sanitize'] - exclude: - # Schannel only supported on windows-2022 - - os: ubuntu-20.04 - tls: schannel - - os: macos-12 - tls: schannel - - os: windows-2019 - tls: schannel - # Linux and Windows Schannel use ASAN - - os: ubuntu-20.04 - sanitize: '' - - tls: schannel - sanitize: '' - # OpenSSL on Windows and macOS doesn't work with ASAN - - os: macos-12 - sanitize: '-Sanitize' - - os: windows-2019 - tls: openssl - sanitize: '-Sanitize' - - os: windows-2019 - tls: openssl3 - sanitize: '-Sanitize' - - os: windows-2022 - tls: openssl - sanitize: '-Sanitize' - - os: windows-2022 - tls: openssl3 - sanitize: '-Sanitize' - # XDP stuff is Windows only - - os: ubuntu-20.04 - xdp: '-UseXdp' - - os: macos-12 - xdp: '-UseXdp' - runs-on: ${{ matrix.os }} - name: Stress - env: - main-timeout: 3600000 - main-repeat: 100 - main-allocfail: 100 - pr-timeout: 600000 - pr-repeat: 20 - pr-allocfail: 100 - steps: - - name: Checkout repository - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 - with: - fetch-depth: 0 - - name: Install Perl - if: runner.os == 'Windows' - uses: shogo82148/actions-setup-perl@0bb5af61b3945a80585229183e7ac50a97d7996c - with: - perl-version: '5.34' - - name: Install NASM - if: runner.os == 'Windows' - uses: ilammy/setup-nasm@321e6ed62a1fc77024a3bd853deb33645e8b22c4 - - name: Prepare Machine - run: scripts/prepare-machine.ps1 -Tls ${{ matrix.tls }} -ForBuild -ForTest ${{ matrix.xdp }} - shell: pwsh - - name: Build - shell: pwsh - run: scripts/build.ps1 -Config Debug -Arch ${{ matrix.arch }} -Tls ${{ matrix.tls }} -DisableTest -DisablePerf -DynamicCRT ${{ matrix.xdp }} ${{ matrix.sanitize }} - - name: spinquic (PR) - if: github.event_name == 'pull_request' - timeout-minutes: 15 - shell: pwsh - run: scripts/spin.ps1 -AZP -Config Debug -Arch ${{ matrix.arch }} -Tls ${{ matrix.tls }} -Timeout ${{ env.pr-timeout }} -RepeatCount ${{ env.pr-repeat }} -AllocFail ${{ env.pr-allocfail }} ${{ matrix.xdp }} - - name: spinquic (Official) - if: github.event_name != 'pull_request' - timeout-minutes: 65 - shell: pwsh - run: scripts/spin.ps1 -AZP -Config Debug -Arch ${{ matrix.arch }} -Tls ${{ matrix.tls }} -Timeout ${{ env.main-timeout }} -RepeatCount ${{ env.main-repeat }} -AllocFail ${{ env.main-allocfail }} ${{ matrix.xdp }} - - name: Upload on Failure - uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce - if: failure() - with: - name: ${{ matrix.os }}-${{ matrix.arch }}-${{ matrix.tls }}${{ matrix.xdp }}${{ matrix.sanitize }} - path: artifacts diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 000000000..8f49c3abe --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,270 @@ +name: Test + +on: + workflow_dispatch: + push: + branches: + - main + - release/* + pull_request: + branches: + - main + - release/* + +concurrency: + # Cancel any workflow currently in progress for the same PR. + # Allow running concurrently with any other commits. + group: bvt-${{ github.event.pull_request.number || github.sha }} + cancel-in-progress: true + +permissions: read-all + +jobs: + build-windows-kernel: + name: Build WinKernel + strategy: + fail-fast: false + matrix: + vec: [ + { config: "Debug", plat: "winkernel", os: "windows-2022", arch: "x64", tls: "schannel", test: "-Test" }, + ] + uses: ./.github/workflows/build-reuse-winkernel.yml + with: + config: ${{ matrix.vec.config }} + plat: ${{ matrix.vec.plat }} + os: ${{ matrix.vec.os }} + arch: ${{ matrix.vec.arch }} + tls: ${{ matrix.vec.tls }} + test: ${{ matrix.vec.test }} + + build-windows: + name: Build WinUser + strategy: + fail-fast: false + matrix: + vec: [ + { config: "Debug", plat: "windows", os: "windows-2019", arch: "x64", tls: "openssl", test: "-Test" }, + { config: "Debug", plat: "windows", os: "windows-2019", arch: "x64", tls: "openssl3", test: "-Test" }, + { config: "Debug", plat: "windows", os: "windows-2019", arch: "x64", tls: "openssl", xdp: "-UseXdp", test: "-Test" }, + { config: "Debug", plat: "windows", os: "windows-2019", arch: "x64", tls: "openssl3", xdp: "-UseXdp", test: "-Test" }, + { config: "Debug", plat: "windows", os: "windows-2022", arch: "x64", tls: "schannel", test: "-Test" }, + { config: "Debug", plat: "windows", os: "windows-2022", arch: "x64", tls: "schannel", sanitize: "-Sanitize", test: "-Test" }, + { config: "Debug", plat: "windows", os: "windows-2022", arch: "x64", tls: "schannel", xdp: "-UseXdp", sanitize: "-Sanitize", test: "-Test" }, + { config: "Debug", plat: "windows", os: "windows-2022", arch: "x64", tls: "openssl", test: "-Test" }, + { config: "Debug", plat: "windows", os: "windows-2022", arch: "x64", tls: "openssl", xdp: "-UseXdp", test: "-Test" }, + { config: "Debug", plat: "windows", os: "windows-2022", arch: "x64", tls: "openssl3", test: "-Test" }, + { config: "Debug", plat: "windows", os: "windows-2022", arch: "x64", tls: "openssl3", xdp: "-UseXdp", test: "-Test" }, + ] + uses: ./.github/workflows/build-reuse-win.yml + with: + config: ${{ matrix.vec.config }} + plat: ${{ matrix.vec.plat }} + os: ${{ matrix.vec.os }} + arch: ${{ matrix.vec.arch }} + tls: ${{ matrix.vec.tls }} + xdp: ${{ matrix.vec.xdp }} + sanitize: ${{ matrix.vec.sanitize }} + test: ${{ matrix.vec.test }} + + build-unix: + name: Build Unix + strategy: + fail-fast: false + matrix: + vec: [ + { config: "Debug", plat: "macos", os: "macos-12", arch: "x64", tls: "openssl", test: "-Test" }, + { config: "Debug", plat: "macos", os: "macos-12", arch: "x64", tls: "openssl3", test: "-Test" }, + { config: "Debug", plat: "linux", os: "ubuntu-20.04", arch: "x64", tls: "openssl", sanitize: "-Sanitize", test: "-Test" }, + { config: "Debug", plat: "linux", os: "ubuntu-20.04", arch: "x64", tls: "openssl", systemcrypto: "-UseSystemOpenSSLCrypto", sanitize: "-Sanitize", test: "-Test" }, + { config: "Debug", plat: "linux", os: "ubuntu-20.04", arch: "x64", tls: "openssl3", sanitize: "-Sanitize", test: "-Test" }, + { config: "Debug", plat: "linux", os: "ubuntu-22.04", arch: "x64", tls: "openssl", sanitize: "-Sanitize", test: "-Test" }, + { config: "Debug", plat: "linux", os: "ubuntu-22.04", arch: "x64", tls: "openssl3", sanitize: "-Sanitize", test: "-Test" }, + { config: "Debug", plat: "linux", os: "ubuntu-22.04", arch: "x64", tls: "openssl3", systemcrypto: "-UseSystemOpenSSLCrypto", sanitize: "-Sanitize", test: "-Test" }, + ] + uses: ./.github/workflows/build-reuse-unix.yml + with: + config: ${{ matrix.vec.config }} + plat: ${{ matrix.vec.plat }} + os: ${{ matrix.vec.os }} + arch: ${{ matrix.vec.arch }} + tls: ${{ matrix.vec.tls }} + systemcrypto: ${{ matrix.vec.systemcrypto }} + sanitize: ${{ matrix.vec.sanitize }} + test: ${{ matrix.vec.test }} + + bvt: + name: BVT + needs: [build-windows, build-unix] + strategy: + fail-fast: false + matrix: + vec: [ + { config: "Debug", plat: "linux", os: "ubuntu-20.04", arch: "x64", tls: "openssl", sanitize: "-Sanitize", test: "-Test" }, + { config: "Debug", plat: "linux", os: "ubuntu-20.04", arch: "x64", tls: "openssl", systemcrypto: "-UseSystemOpenSSLCrypto", sanitize: "-Sanitize", test: "-Test" }, + { config: "Debug", plat: "linux", os: "ubuntu-20.04", arch: "x64", tls: "openssl3", sanitize: "-Sanitize", test: "-Test" }, + { config: "Debug", plat: "linux", os: "ubuntu-22.04", arch: "x64", tls: "openssl", sanitize: "-Sanitize", test: "-Test" }, + { config: "Debug", plat: "linux", os: "ubuntu-22.04", arch: "x64", tls: "openssl3", sanitize: "-Sanitize", test: "-Test" }, + { config: "Debug", plat: "linux", os: "ubuntu-22.04", arch: "x64", tls: "openssl3", systemcrypto: "-UseSystemOpenSSLCrypto", sanitize: "-Sanitize", test: "-Test" }, + { config: "Debug", plat: "windows", os: "windows-2019", arch: "x64", tls: "openssl", test: "-Test" }, + { config: "Debug", plat: "windows", os: "windows-2019", arch: "x64", tls: "openssl3", test: "-Test" }, + { config: "Debug", plat: "windows", os: "windows-2022", arch: "x64", tls: "schannel", sanitize: "-Sanitize", test: "-Test" }, + { config: "Debug", plat: "windows", os: "windows-2022", arch: "x64", tls: "schannel", xdp: "-UseXdp", sanitize: "-Sanitize", test: "-Test" }, + { config: "Debug", plat: "windows", os: "windows-2022", arch: "x64", tls: "schannel", xdp: "-UseXdp", useqtip: "-UseQtip", sanitize: "-Sanitize", test: "-Test" }, + { config: "Debug", plat: "windows", os: "windows-2022", arch: "x64", tls: "openssl", test: "-Test" }, + { config: "Debug", plat: "windows", os: "windows-2022", arch: "x64", tls: "openssl", xdp: "-UseXdp", test: "-Test" }, + { config: "Debug", plat: "windows", os: "windows-2022", arch: "x64", tls: "openssl", xdp: "-UseXdp", useqtip: "-UseQtip", test: "-Test" }, + { config: "Debug", plat: "windows", os: "windows-2022", arch: "x64", tls: "openssl3", test: "-Test" }, + { config: "Debug", plat: "windows", os: "windows-2022", arch: "x64", tls: "openssl3", xdp: "-UseXdp", test: "-Test" }, + { config: "Debug", plat: "windows", os: "windows-2022", arch: "x64", tls: "openssl3", xdp: "-UseXdp", useqtip: "-UseQtip", test: "-Test" }, + ] + runs-on: ${{ matrix.vec.os }} + steps: + - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 + with: + fetch-depth: 0 + - name: Download Build Artifacts + uses: actions/download-artifact@9bc31d5ccc31df68ecc42ccf4149144866c47d8a + if: matrix.vec.plat == 'windows' + with: + name: ${{ matrix.vec.config }}-${{ matrix.vec.plat }}-${{ matrix.vec.os }}-${{ matrix.vec.arch }}-${{ matrix.vec.tls }}${{ matrix.vec.xdp }}${{ matrix.vec.sanitize }}${{ matrix.vec.test }} + path: artifacts + - name: Download Build Artifacts + uses: actions/download-artifact@9bc31d5ccc31df68ecc42ccf4149144866c47d8a + if: matrix.vec.plat == 'linux' + with: + name: ${{ matrix.vec.config }}-${{ matrix.vec.plat }}-${{ matrix.vec.os }}-${{ matrix.vec.arch }}-${{ matrix.vec.tls }}${{ matrix.vec.systemcrypto }}${{ matrix.vec.sanitize }}${{ matrix.vec.test }} + path: artifacts + - name: Prepare Machine + run: scripts/prepare-machine.ps1 -Tls ${{ matrix.vec.tls }} -ForTest ${{ matrix.vec.xdp }} + shell: pwsh + - name: Install ETW Manifest + if: matrix.vec.plat == 'windows' + shell: pwsh + run: | + $MsQuicDll = ".\artifacts\bin\windows\${{ matrix.vec.arch }}_${{ matrix.vec.config }}_${{ matrix.vec.tls }}\msquic.dll" + $ManifestPath = ".\src\manifest\MsQuicEtw.man" + wevtutil.exe um $ManifestPath + wevtutil.exe im $ManifestPath /rf:$($MsQuicDll) /mf:$($MsQuicDll) + - name: Test + shell: pwsh + timeout-minutes: 120 + run: scripts/test.ps1 -Config ${{ matrix.vec.config }} -Arch ${{ matrix.vec.arch }} -Tls ${{ matrix.vec.tls }} -OsRunner ${{ matrix.vec.os }} -GHA -LogProfile Full.Light -GenerateXmlResults ${{ matrix.vec.xdp }} ${{ matrix.vec.qtip }} + - name: Upload on Failure + uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce + if: failure() + with: + name: ${{ matrix.vec.config }}-${{ matrix.vec.plat }}-${{ matrix.vec.os }}-${{ matrix.vec.arch }}-${{ matrix.vec.tls }}${{ matrix.vec.xdp }}${{ matrix.vec.qtip }}${{ matrix.vec.systemcrypto }}${{ matrix.vec.sanitize }} + path: artifacts + + bvt-kernel: + name: BVT Kernel + needs: [build-windows, build-windows-kernel] + strategy: + fail-fast: false + matrix: + vec: [ + { config: "Debug", plat: "winkernel", os: "windows-2022", arch: "x64", tls: "schannel", test: "-Test" }, + ] + runs-on: ${{ matrix.vec.os }} + steps: + - name: Checkout repository + uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 + - name: Download Build Artifacts + uses: actions/download-artifact@9bc31d5ccc31df68ecc42ccf4149144866c47d8a + with: + name: ${{ matrix.vec.config }}-${{ matrix.vec.plat }}-${{ matrix.vec.os }}-${{ matrix.vec.arch }}-${{ matrix.vec.tls }}${{ matrix.vec.test }} + path: artifacts + - name: Download Build Artifacts for Testing From WinUser + uses: actions/download-artifact@9bc31d5ccc31df68ecc42ccf4149144866c47d8a + with: + name: ${{ matrix.vec.config }}-windows-${{ matrix.vec.os }}-${{ matrix.vec.arch }}-${{ matrix.vec.tls }}${{ matrix.vec.test }} + path: artifacts + - name: Prepare Machine + shell: pwsh + run: scripts/prepare-machine.ps1 -ForTest -ForKernel + - name: Install ETW Manifest + shell: pwsh + run: | + $MsQuicDll = ".\artifacts\bin\windows\${{ matrix.vec.arch }}_Debug_${{ matrix.vec.tls }}\msquic.dll" + $ManifestPath = ".\src\manifest\MsQuicEtw.man" + wevtutil.exe um $ManifestPath + wevtutil.exe im $ManifestPath /rf:$($MsQuicDll) /mf:$($MsQuicDll) + - name: Test + shell: pwsh + timeout-minutes: 90 + run: scripts/test.ps1 -Config ${{ matrix.vec.config }} -Arch ${{ matrix.vec.arch }} -Tls ${{ matrix.vec.tls }} -GHA -LogProfile Full.Light -GenerateXmlResults -Kernel -Filter -*ValidateConfiguration:*ValidAlpnLengths:*ResumeRejection*:*ClientCertificate*:*LoadBalanced* + - name: Upload on Failure + uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce + if: failure() + with: + name: ${{ matrix.vec.config }}-${{ matrix.vec.plat }}-${{ matrix.vec.os }}-${{ matrix.vec.arch }}-${{ matrix.vec.tls }} + path: artifacts + + stress: + name: Stress + needs: [build-windows, build-unix] + strategy: + fail-fast: false + matrix: + vec: [ + { config: "Debug", plat: "linux", os: "ubuntu-20.04", arch: "x64", tls: "openssl", sanitize: "-Sanitize", test: "-Test" }, + { config: "Debug", plat: "linux", os: "ubuntu-20.04", arch: "x64", tls: "openssl3", sanitize: "-Sanitize", test: "-Test" }, + { config: "Debug", plat: "macos", os: "macos-12", arch: "x64", tls: "openssl", test: "-Test" }, + { config: "Debug", plat: "macos", os: "macos-12", arch: "x64", tls: "openssl3", test: "-Test" }, + { config: "Debug", plat: "windows", os: "windows-2019", arch: "x64", tls: "openssl", test: "-Test" }, + { config: "Debug", plat: "windows", os: "windows-2019", arch: "x64", tls: "openssl", xdp: "-UseXdp", test: "-Test" }, + { config: "Debug", plat: "windows", os: "windows-2019", arch: "x64", tls: "openssl3", test: "-Test" }, + { config: "Debug", plat: "windows", os: "windows-2019", arch: "x64", tls: "openssl3", xdp: "-UseXdp", test: "-Test" }, + { config: "Debug", plat: "windows", os: "windows-2022", arch: "x64", tls: "schannel", sanitize: "-Sanitize", test: "-Test" }, + { config: "Debug", plat: "windows", os: "windows-2022", arch: "x64", tls: "schannel", xdp: "-UseXdp", sanitize: "-Sanitize", test: "-Test" }, + { config: "Debug", plat: "windows", os: "windows-2022", arch: "x64", tls: "openssl", test: "-Test" }, + { config: "Debug", plat: "windows", os: "windows-2022", arch: "x64", tls: "openssl", xdp: "-UseXdp", test: "-Test" }, + { config: "Debug", plat: "windows", os: "windows-2022", arch: "x64", tls: "openssl3", test: "-Test" }, + { config: "Debug", plat: "windows", os: "windows-2022", arch: "x64", tls: "openssl3", xdp: "-UseXdp", test: "-Test" }, + ] + runs-on: ${{ matrix.vec.os }} + env: + main-timeout: 3600000 + main-repeat: 100 + main-allocfail: 100 + pr-timeout: 600000 + pr-repeat: 20 + pr-allocfail: 100 + steps: + - name: Checkout repository + uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 + with: + fetch-depth: 0 + - uses: actions/download-artifact@9bc31d5ccc31df68ecc42ccf4149144866c47d8a + if: matrix.vec.plat == 'windows' + with: + name: ${{ matrix.vec.config }}-${{ matrix.vec.plat }}-${{ matrix.vec.os }}-${{ matrix.vec.arch }}-${{ matrix.vec.tls }}${{ matrix.vec.xdp }}${{ matrix.vec.sanitize }}${{ matrix.vec.test }} + path: artifacts + - uses: actions/download-artifact@9bc31d5ccc31df68ecc42ccf4149144866c47d8a + if: matrix.vec.plat == 'linux' || matrix.vec.plat == 'macos' + with: + name: ${{ matrix.vec.config }}-${{ matrix.vec.plat }}-${{ matrix.vec.os }}-${{ matrix.vec.arch }}-${{ matrix.vec.tls }}${{ matrix.vec.sanitize }}${{ matrix.vec.test }} + path: artifacts + - name: Fix permissions for Unix + if: matrix.vec.plat == 'linux' || matrix.vec.plat == 'macos' + run: | + sudo chmod -R 777 artifacts + - name: Prepare Machine + run: scripts/prepare-machine.ps1 -Tls ${{ matrix.vec.tls }} -ForTest ${{ matrix.vec.xdp }} + shell: pwsh + - name: spinquic (PR) + if: github.event_name == 'pull_request' + timeout-minutes: 15 + shell: pwsh + run: scripts/spin.ps1 -AZP -Config ${{ matrix.vec.config }} -Arch ${{ matrix.vec.arch }} -Tls ${{ matrix.vec.tls }} -Timeout ${{ env.pr-timeout }} -RepeatCount ${{ env.pr-repeat }} -AllocFail ${{ env.pr-allocfail }} ${{ matrix.vec.xdp }} + - name: spinquic (Official) + if: github.event_name != 'pull_request' + timeout-minutes: 65 + shell: pwsh + run: scripts/spin.ps1 -AZP -Config ${{ matrix.vec.config }} -Arch ${{ matrix.vec.arch }} -Tls ${{ matrix.vec.tls }} -Timeout ${{ env.main-timeout }} -RepeatCount ${{ env.main-repeat }} -AllocFail ${{ env.main-allocfail }} ${{ matrix.vec.xdp }} + - name: Upload on Failure + uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce + if: failure() + with: + name: ${{ matrix.vec.config }}-${{ matrix.vec.plat }}-${{ matrix.vec.os }}-${{ matrix.vec.arch }}-${{ matrix.vec.tls }}${{ matrix.vec.xdp }}${{ matrix.vec.sanitize }} + path: artifacts \ No newline at end of file