Skip to content

Connect v3 CI, fuzz campaigns and guarded release publication #18

Connect v3 CI, fuzz campaigns and guarded release publication

Connect v3 CI, fuzz campaigns and guarded release publication #18

name: v3 installed package validation
on:
push:
branches: [v3, master]
pull_request:
branches: [v3, master]
workflow_dispatch:
permissions:
contents: read
jobs:
linux:
runs-on: ubuntu-24.04
timeout-minutes: 90
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
- name: Prerequisites
run: sudo apt-get update && sudo apt-get install -y clang autoconf automake libtool pkg-config python3 perl libcurl4-openssl-dev binutils python3-venv
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020
with:
node-version: '24.15.0'
- name: Selected client environment and executable Git provenance
run: |
mkdir -p "$RUNNER_TEMP/package-evidence"
exec > >(tee "$RUNNER_TEMP/package-evidence/clients.log") 2>&1
python3 -c 'import subprocess; subprocess.run(["git", "--version"], check=True)'
python3 -m venv "$RUNNER_TEMP/package-evidence/clients"
"$RUNNER_TEMP/package-evidence/clients/bin/python" -m pip install -r test/integ/http2-client-requirements.txt
- name: Build selected prerequisites
run: python3 scripts/prepare-v3-package-ci.py --output "$RUNNER_TEMP/package-evidence/prerequisites"
- name: Bootstrap
run: ./bootstrap
- name: Installed matrix
run: |
prefix=()
if ! python3 -c 'import socket; s=socket.socket(); s.bind(("127.0.0.1",443)); s.close()'; then
prefix=(sudo env "PATH=$PATH" GIT_CONFIG_COUNT=1 GIT_CONFIG_KEY_0=safe.directory "GIT_CONFIG_VALUE_0=$PWD")
fi
"${prefix[@]}" python3 scripts/check-v3-installed-consumer.py --output "$RUNNER_TEMP/package-evidence/matrix" --provider-prefix "$RUNNER_TEMP/package-evidence/prerequisites/provider" --pkg-config-dir /usr/lib/x86_64-linux-gnu/pkgconfig --pkg-config-dir /usr/share/pkgconfig --client-python "$RUNNER_TEMP/package-evidence/clients/bin/python" --node node --compiler clang++ --cc clang --jobs 2
- if: always()
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02
with:
name: v3-package-linux-${{ github.sha }}
path: ${{ runner.temp }}/package-evidence
retention-days: 14
if-no-files-found: error
macos:
runs-on: macos-15
timeout-minutes: 90
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
- name: Prerequisites
run: brew install autoconf automake libtool pkg-config python curl llvm
- name: Select complete C++20 compiler and runtime
run: bash scripts/ci-macos-toolchain.sh
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020
with:
node-version: '24.15.0'
- name: Selected client environment and executable Git provenance
run: |
mkdir -p "$RUNNER_TEMP/package-evidence"
exec > >(tee "$RUNNER_TEMP/package-evidence/clients.log") 2>&1
python3 -c 'import subprocess; subprocess.run(["git", "--version"], check=True)'
python3 -m venv "$RUNNER_TEMP/package-evidence/clients"
"$RUNNER_TEMP/package-evidence/clients/bin/python" -m pip install -r test/integ/http2-client-requirements.txt
- name: Build selected prerequisites
run: python3 scripts/prepare-v3-package-ci.py --output "$RUNNER_TEMP/package-evidence/prerequisites"
- name: Bootstrap
run: ./bootstrap
- name: Installed matrix
run: |
prefix=()
if ! python3 -c 'import socket; s=socket.socket(); s.bind(("127.0.0.1",443)); s.close()'; then
prefix=(sudo env "PATH=$PATH" GIT_CONFIG_COUNT=1 GIT_CONFIG_KEY_0=safe.directory "GIT_CONFIG_VALUE_0=$PWD")
fi
"${prefix[@]}" python3 scripts/check-v3-installed-consumer.py --output "$RUNNER_TEMP/package-evidence/matrix" --provider-prefix "$RUNNER_TEMP/package-evidence/prerequisites/provider" --pkg-config-dir "$(brew --prefix)/share/pkgconfig" --client-python "$RUNNER_TEMP/package-evidence/clients/bin/python" --node node --compiler "$V3_CXX" --cc "$V3_CC" --jobs 2
- name: Make privileged proof readable by artifact upload
if: always()
run: |
if [ -d "$RUNNER_TEMP/package-evidence" ]; then
sudo chown -R "$(id -u):$(id -g)" "$RUNNER_TEMP/package-evidence"
fi
- if: always()
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02
with:
name: v3-package-macos-${{ github.sha }}
path: |
${{ runner.temp }}/package-evidence
${{ runner.temp }}/v3-toolchain
retention-days: 14
if-no-files-found: error
mingw64:
runs-on: windows-2022
timeout-minutes: 90
defaults:
run:
shell: msys2 {0}
steps:
- name: Keep selected Git source bytes unchanged
shell: pwsh
run: git config --global core.autocrlf false
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
- uses: msys2/setup-msys2@e9898307ac31d1a803454791be09ab9973336e1c
with:
msystem: MINGW64
path-type: inherit
update: true
install: >-
autotools base-devel perl git
mingw-w64-x86_64-clang mingw-w64-x86_64-gcc mingw-w64-x86_64-binutils
mingw-w64-x86_64-python mingw-w64-x86_64-pkgconf mingw-w64-x86_64-libtool mingw-w64-x86_64-curl mingw-w64-x86_64-libsystre
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020
with:
node-version: '24.15.0'
- name: Selected client environment and executable Git provenance
run: |
mkdir -p "$RUNNER_TEMP/package-evidence"
exec > >(tee "$RUNNER_TEMP/package-evidence/clients.log") 2>&1
export PATH="/c/Program Files/Git/cmd:$PATH"
/mingw64/bin/python - <<'GIT_PROBE'
import shutil, subprocess
print('selected native Git:', shutil.which('git'), flush=True)
for arguments in (['--version'], ['rev-parse', '--verify', 'HEAD^{commit}']):
result = subprocess.run(['git'] + arguments, capture_output=True, text=True)
print('git', *arguments, 'exit=' + str(result.returncode), flush=True)
print(result.stdout[-2048:], end='', flush=True)
print(result.stderr[-2048:], end='', flush=True)
result.check_returncode()
GIT_PROBE
/mingw64/bin/python -m venv "$RUNNER_TEMP/package-evidence/clients"
"$(cygpath -m "$RUNNER_TEMP/package-evidence/clients/bin/python.exe")" -m pip install -r test/integ/http2-client-requirements.txt
- name: Build selected prerequisites
run: |
export PATH="/c/Program Files/Git/cmd:$PATH"
/mingw64/bin/python scripts/prepare-v3-package-ci.py --output "$RUNNER_TEMP/package-evidence/prerequisites"
- name: Bootstrap
run: ./bootstrap
- name: Installed matrix (native Python; IOCP and WSAPoll)
run: |
export PATH="/c/Program Files/Git/cmd:$PATH"
/mingw64/bin/python scripts/check-v3-installed-consumer.py --output "$RUNNER_TEMP/package-evidence/matrix" \
--provider-prefix "$(cygpath -m "$RUNNER_TEMP/package-evidence/prerequisites/provider")" --toolchain-prefix "$(cygpath -m /mingw64)" \
--client-python "$(cygpath -m "$RUNNER_TEMP/package-evidence/clients/bin/python.exe")" --node node --compiler clang++ --cc clang --jobs 2
- if: always()
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02
with:
name: v3-package-mingw64-${{ github.sha }}
path: ${{ runner.temp }}/package-evidence
retention-days: 14
if-no-files-found: error
freebsd:
runs-on: ubuntu-24.04
timeout-minutes: 180
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
- name: freebsd_instance
uses: vmactions/freebsd-vm@c9f815bc7aa0d34c9fdd0619b034a32d6ca7b57e
with:
release: '14.3'
mem: 8192
cpu: 2
prepare: pkg install -y bash autoconf automake libtool pkgconf python3 gmake curl binutils perl5 llvm19 git node24
run: |
export RUNNER_TEMP=/tmp/v3-package-${{ github.run_id }}-${{ github.run_attempt }}
mkdir -p "$RUNNER_TEMP/package-evidence"
trap 'cp -R "$RUNNER_TEMP/package-evidence" ./package-evidence' EXIT
if [ "$(node --version)" != v24.15.0 ]; then
mkdir -p "$RUNNER_TEMP/node-source"
node_logs="$RUNNER_TEMP/package-evidence/node-source"
mkdir -p "$node_logs"
curl --fail --location https://nodejs.org/dist/v24.15.0/node-v24.15.0.tar.gz -o "$RUNNER_TEMP/node-source/node-v24.15.0.tar.gz"
test "$(sha256 -q "$RUNNER_TEMP/node-source/node-v24.15.0.tar.gz")" = 729de494dd2872e5a3a6c32a1cd156a5413d4aca2772b2d873ee86bb5531bcd9
tar -xzf "$RUNNER_TEMP/node-source/node-v24.15.0.tar.gz" -C "$RUNNER_TEMP/node-source"
(
cd "$RUNNER_TEMP/node-source/node-v24.15.0"
{
node_llvm_bin="$(llvm-config19 --bindir)"
export CC="$node_llvm_bin/clang" CXX="$node_llvm_bin/clang++"
printf 'CC=%s\nCXX=%s\n' "$CC" "$CXX"
"$CC" --version
"$CXX" --version
} > "$node_logs/compiler.log" 2>&1
./configure --prefix="$RUNNER_TEMP/node" > "$node_logs/configure.log" 2>&1
gmake -j2 > "$node_logs/build.log" 2>&1
gmake install >> "$node_logs/build.log" 2>&1
)
export PATH="$RUNNER_TEMP/node/bin:$PATH"
fi
test "$(node --version)" = v24.15.0
python3 -c 'import subprocess; subprocess.run(["git", "--version"], check=True)'
python3 -m venv "$RUNNER_TEMP/package-evidence/clients"
"$RUNNER_TEMP/package-evidence/clients/bin/python" -m pip install -r test/integ/http2-client-requirements.txt
python3 scripts/prepare-v3-package-ci.py --output "$RUNNER_TEMP/package-evidence/prerequisites" --make gmake
./bootstrap
python3 scripts/check-v3-installed-consumer.py --output "$RUNNER_TEMP/package-evidence/matrix" \
--provider-prefix "$RUNNER_TEMP/package-evidence/prerequisites/provider" \
--client-python "$RUNNER_TEMP/package-evidence/clients/bin/python" --node node --pkg-config-dir /usr/local/share/pkgconfig --compiler clang++ --cc clang --make gmake --jobs 2
- name: Recover FreeBSD evidence
if: always()
run: |
mkdir -p package-evidence
scp -O -r freebsd:/tmp/v3-package-${{ github.run_id }}-${{ github.run_attempt }}/package-evidence/. package-evidence/
- if: always()
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02
with:
name: v3-package-freebsd-${{ github.sha }}
path: package-evidence
retention-days: 14
if-no-files-found: error