Skip to content

Fix v3 native CI shutdown and FreeBSD evidence transport #53

Fix v3 native CI shutdown and FreeBSD evidence transport

Fix v3 native CI shutdown and FreeBSD evidence transport #53

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 make
- 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" --toolchain-prefix "$V3_PACKAGE_TOOLCHAIN" --make gmake --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:
copyback: 'false'
release: '14.3'
mem: 8192
cpu: 2
prepare: pkg install -y bash autoconf automake libtool pkgconf python3 gmake curl binutils perl5 llvm19 git node24 cmake ninja
run: |
set -eu
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
# Guest root must trust only the host checkout, including in Python's Git children.
export GIT_CONFIG_COUNT=1 GIT_CONFIG_KEY_0=safe.directory GIT_CONFIG_VALUE_0="$PWD"
git_log="$RUNNER_TEMP/package-evidence/git-provenance.log"
{
printf 'checkout=%s\n' "$PWD" && command -v git && git --version &&
git rev-parse --verify 'HEAD^{commit}'
} > "$git_log" 2>&1 || { cat "$git_log" >&2; exit 1; }
cat "$git_log"
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 scripts/ci-freebsd-toolchain.py --output "$RUNNER_TEMP/package-evidence/toolchain"
. "$RUNNER_TEMP/package-evidence/toolchain/toolchain.env"
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 "$V3_CXX" --cc "$V3_CC" --toolchain-prefix "$V3_PACKAGE_TOOLCHAIN" --make gmake --jobs 2
- name: Recover FreeBSD evidence
id: freebsd-evidence
if: always()
run: |
printf 'path=package-evidence\n' >> "$GITHUB_OUTPUT"
# SCP follows existing destination links from automatic rsync copyback.
recovery_root="$(mktemp -d "$RUNNER_TEMP/freebsd-evidence.XXXXXX")"
if scp -O -r "freebsd:/tmp/v3-package-${{ github.run_id }}-${{ github.run_attempt }}/package-evidence" "$recovery_root/"; then
printf 'path=%s/package-evidence\n' "$recovery_root" >> "$GITHUB_OUTPUT"
else
exit "$?"
fi
- if: always()
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02
with:
name: v3-package-freebsd-${{ github.sha }}
path: ${{ steps.freebsd-evidence.outputs.path || 'package-evidence' }}
retention-days: 14
if-no-files-found: error