diff --git a/.github/workflows/dry-run.yml b/.github/workflows/dry-run.yml index c91b58a44..b99074c9e 100644 --- a/.github/workflows/dry-run.yml +++ b/.github/workflows/dry-run.yml @@ -649,3 +649,39 @@ jobs: name: soak-asan-${{ matrix.goos }}-${{ matrix.goarch }} path: soak-results/ retention-days: 14 + + soak-asan-windows: + if: ${{ inputs.soak_level == 'full' && !inputs.skip_builds }} + needs: [build-windows] + runs-on: windows-latest + timeout-minutes: 45 + steps: + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 + - uses: msys2/setup-msys2@4f806de0a5a7294ffabaff804b38a9b435a73bda # v2 + with: + msystem: CLANG64 + path-type: inherit + install: >- + mingw-w64-clang-x86_64-python3 + git + coreutils + - name: Build (ASan, no LeakSan on Windows) + shell: msys2 {0} + run: | + SANITIZE="-fsanitize=address,undefined -fno-omit-frame-pointer" + scripts/build.sh CC=clang CXX=clang++ EXTRA_CFLAGS="$SANITIZE" EXTRA_LDFLAGS="$SANITIZE" + - name: ASan soak (15 min, no leak detection) + shell: msys2 {0} + env: + ASAN_OPTIONS: "detect_leaks=0:halt_on_error=0:log_path=soak-results/asan" + run: | + BIN=build/c/codebase-memory-mcp + [ -f "${BIN}.exe" ] && BIN="${BIN}.exe" + scripts/soak-test.sh "$BIN" 15 + - name: Upload ASan soak metrics + if: always() + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 + with: + name: soak-asan-windows-amd64 + path: soak-results/ + retention-days: 14 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 41f850ede..d565f05e8 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -641,6 +641,42 @@ jobs: path: soak-results/ retention-days: 14 + soak-asan-windows: + if: ${{ inputs.soak_level == 'full' }} + needs: [build-windows] + runs-on: windows-latest + timeout-minutes: 45 + steps: + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 + - uses: msys2/setup-msys2@4f806de0a5a7294ffabaff804b38a9b435a73bda # v2 + with: + msystem: CLANG64 + path-type: inherit + install: >- + mingw-w64-clang-x86_64-python3 + git + coreutils + - name: Build (ASan, no LeakSan on Windows) + shell: msys2 {0} + run: | + SANITIZE="-fsanitize=address,undefined -fno-omit-frame-pointer" + scripts/build.sh --version ${{ inputs.version }} CC=clang CXX=clang++ EXTRA_CFLAGS="$SANITIZE" EXTRA_LDFLAGS="$SANITIZE" + - name: ASan soak (15 min, no leak detection) + shell: msys2 {0} + env: + ASAN_OPTIONS: "detect_leaks=0:halt_on_error=0:log_path=soak-results/asan" + run: | + BIN=build/c/codebase-memory-mcp + [ -f "${BIN}.exe" ] && BIN="${BIN}.exe" + scripts/soak-test.sh "$BIN" 15 + - name: Upload ASan soak metrics + if: always() + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 + with: + name: soak-asan-windows-amd64 + path: soak-results/ + retention-days: 14 + # ── Step 6: Create DRAFT release (not public yet) ───────────── release-draft: needs: [smoke-unix, smoke-windows, security-static, codeql-gate, soak-quick, soak-quick-windows]