diff --git a/.github/workflows/package-production.yml b/.github/workflows/package-production.yml index 5283ed74..f5088f44 100644 --- a/.github/workflows/package-production.yml +++ b/.github/workflows/package-production.yml @@ -4,6 +4,15 @@ on: schedule: - cron: '17 3 * * *' workflow_dispatch: + pull_request: + paths: + - '.github/workflows/package-production.yml' + - 'executors/**' + - 'implementations/**' + - 'release/**' + - 'scenarios/**' + - 'scripts/package/**' + - 'templates/**' permissions: contents: read @@ -15,15 +24,15 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v7 - name: Setup .NET - uses: actions/setup-dotnet@v4 + uses: actions/setup-dotnet@v6 with: dotnet-version: 10.0.x - name: Setup Go - uses: actions/setup-go@v5 + uses: actions/setup-go@v7 with: go-version: 1.26.x cache-dependency-path: | @@ -56,12 +65,21 @@ jobs: echo "CARGO_TARGET_X86_64_PC_WINDOWS_GNU_LINKER=x86_64-w64-mingw32-gcc" >> "$GITHUB_ENV" echo "CARGO_TARGET_X86_64_UNKNOWN_LINUX_MUSL_LINKER=$rust_lld" >> "$GITHUB_ENV" + - name: Verify Docker Engine + shell: pwsh + run: | + $serverVersion = @(docker version --format '{{.Server.Version}}' 2>$null) + if ($LASTEXITCODE -ne 0 -or [string]::IsNullOrWhiteSpace(($serverVersion -join ' ').Trim())) { + throw 'Docker Engine is required for the full ProtocolLab component catalog build.' + } + Write-Host "Docker Engine $($serverVersion -join ' ') is available." + - name: Build all ProtocolLab component packages (never publishes) shell: pwsh run: ./scripts/package/Build-AllProtocolLabComponentPackages.ps1 -Clean - name: Upload package production artifacts - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: protocol-lab-component-packages if-no-files-found: error diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 00000000..ebd678d4 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,118 @@ +name: package-release + +on: + workflow_dispatch: + inputs: + ref: + description: 'Commit or branch to build' + required: true + default: main + type: string + release_tag: + description: 'Immutable release tag to create when dry_run is false' + required: true + type: string + release_intent: + description: 'Reviewed release intent path in this checkout' + required: true + type: string + dry_run: + description: 'Build and validate assets without creating a GitHub release' + required: true + default: true + type: boolean + +permissions: + contents: write + +jobs: + package-release: + runs-on: ubuntu-latest + env: + RELEASE_TAG: ${{ inputs.release_tag }} + RELEASE_INTENT: ${{ inputs.release_intent }} + + steps: + - name: Checkout requested source + uses: actions/checkout@v7 + with: + ref: ${{ inputs.ref }} + + - name: Setup .NET + uses: actions/setup-dotnet@v6 + with: + dotnet-version: 10.0.x + + - name: Setup Go + uses: actions/setup-go@v7 + with: + go-version: 1.26.x + cache-dependency-path: | + implementations/quic-go-http3/go.sum + executors/quic-go-raw-load/source/go.sum + + - name: Verify Docker Engine + shell: pwsh + run: | + $serverVersion = @(docker version --format '{{.Server.Version}}' 2>$null) + if ($LASTEXITCODE -ne 0 -or [string]::IsNullOrWhiteSpace(($serverVersion -join ' ').Trim())) { + throw 'Docker Engine is required for the full ProtocolLab component catalog build.' + } + Write-Host "Docker Engine $($serverVersion -join ' ') is available." + + - name: Validate reviewed release intent + shell: pwsh + run: | + $intentPath = Join-Path (Get-Location) $env:RELEASE_INTENT + if (-not (Test-Path -LiteralPath $intentPath -PathType Leaf)) { + throw "Release intent was not found: $intentPath" + } + $intent = Get-Content -LiteralPath $intentPath -Raw | ConvertFrom-Json + if ([string]$intent.schemaVersion -ne 'protocol-lab.release-intent.v1') { throw 'Release intent has an unsupported schemaVersion.' } + if ([string]$intent.classification -ne 'release') { throw 'Package publication requires classification=release.' } + if ([string]$intent.status -ne 'approved') { throw 'Package publication requires status=approved.' } + if (@($intent.components).Count -eq 0) { throw 'A release intent must name at least one component.' } + if ([string]::IsNullOrWhiteSpace($env:RELEASE_TAG)) { throw 'release_tag must not be empty.' } + if ($env:RELEASE_TAG -notmatch '^[A-Za-z0-9][A-Za-z0-9._/-]*$') { throw "release_tag contains unsupported characters: $env:RELEASE_TAG" } + + - name: Build and validate all package artifacts + shell: pwsh + run: ./scripts/package/Build-AllProtocolLabComponentPackages.ps1 -Clean + + - name: Run release-system validation + shell: pwsh + run: | + ./scripts/package/Test-ProtocolLabComponentReleaseGraph.ps1 + ./scripts/package/Test-ProtocolLabReleaseIntents.ps1 + $attestationScript = Join-Path (Get-Location) 'scripts/package/Test-ProtocolLabPackageBuildAttestation.ps1' + $packages = @(Get-ChildItem -LiteralPath artifacts/packages -File -Filter '*.plabpkg' | Sort-Object Name) + if ($packages.Count -eq 0) { throw 'No package artifacts were produced.' } + foreach ($package in $packages) { + $attestationPath = "$($package.FullName).build-attestation.json" + if (-not (Test-Path -LiteralPath $attestationPath -PathType Leaf)) { throw "Missing build attestation for $($package.Name)." } + & $attestationScript -PackagePath $package.FullName -AttestationPath $attestationPath -RequireParityEligible + } + + - name: Upload validated package assets + uses: actions/upload-artifact@v7 + with: + name: protocol-lab-component-release-assets + if-no-files-found: error + path: | + artifacts/packages/*.plabpkg + artifacts/packages/*.plabpkg.build-attestation.json + artifacts/packages/package-index.json + artifacts/packages/package-index.md + artifacts/packages/SHA256SUMS.txt + artifacts/packages/package-validation-summary.json + artifacts/packages/package-validation-summary.md + + - name: Create GitHub release + if: ${{ inputs.dry_run == false }} + env: + GH_TOKEN: ${{ github.token }} + shell: pwsh + run: | + $assets = @(Get-ChildItem -LiteralPath artifacts/packages -File | Where-Object { $_.Name -match '\.(plabpkg|json|md|txt)$' } | ForEach-Object FullName) + if ($assets.Count -eq 0) { throw 'No validated package release assets were produced.' } + & gh release create $env:RELEASE_TAG --target '${{ inputs.ref }}' --title $env:RELEASE_TAG --notes-file artifacts/packages/package-index.md @assets diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml index 91c22286..01fc12b7 100644 --- a/.github/workflows/validate.yml +++ b/.github/workflows/validate.yml @@ -7,11 +7,31 @@ on: - main jobs: + documentation: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v7 + + - name: Validate public documentation entrypoints + shell: pwsh + run: ./scripts/package/Test-ProtocolLabComponentDocumentation.ps1 + + scenario-packages: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v7 + + - name: Validate scenario package authority and declarations + shell: pwsh + run: ./scripts/package/Test-ProtocolLabScenarioPackages.ps1 + manifests: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v7 - name: Validate component manifests shell: pwsh @@ -22,17 +42,17 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v7 with: fetch-depth: 0 - name: Setup .NET - uses: actions/setup-dotnet@v4 + uses: actions/setup-dotnet@v6 with: dotnet-version: 10.0.x - name: Setup Go - uses: actions/setup-go@v5 + uses: actions/setup-go@v7 with: go-version: 1.26.x diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 445775eb..ebf8f650 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -60,11 +60,15 @@ Run the focused package validation before review: ```powershell pwsh ./scripts/package/Validate-ProtocolLabComponentManifests.ps1 +pwsh ./scripts/package/Test-ProtocolLabComponentReleaseGraph.ps1 +pwsh ./scripts/package/Test-ProtocolLabComponentDocumentation.ps1 ``` When changing package builders, also run the affected wrapper under `scripts/package/` and confirm the generated `.plabpkg` remains under -`artifacts/packages/`. +`artifacts/packages/`. Run the full-catalog builder for changes to shared +packaging or release behavior; it requires a running Docker Engine and the +toolchains listed in [scripts/package/README.md](scripts/package/README.md). ## Style diff --git a/README.md b/README.md index 4bb81c39..0eaa3f6f 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,23 @@ This repository owns ProtocolLab components that are useful outside the core pub - shared toolchain pins used to build those packages - package scripts and manifest templates +## Start Here + +Choose the path that matches what you are trying to do: + +| Goal | Start here | +| --- | --- | +| Understand ProtocolLab's public contracts | [`incursa/protocol-lab`](https://github.com/incursa/protocol-lab) | +| Verify a package or build one from source | [Third-party package guide](docs/third-party-package-consumption.md) | +| Add or update a component | [Adding a component](#adding-a-component) and [CONTRIBUTING.md](CONTRIBUTING.md) | +| Run a hosted experiment | [lab.incursa.com](https://lab.incursa.com/) | + +Public package availability is visible on the +[Releases page](https://github.com/incursa/protocol-lab-components/releases). +If no release is listed, use the source-build quickstart in the third-party +guide; a GitHub Actions artifact or locally built package is not a published +release. + The default ownership model is a component monorepo. Kestrel HTTP/1, Kestrel HTTP/2, Caddy HTTP/1, and small alternate executors should not each become a new repository just because they produce separate ProtocolLab packages. They share package conventions, release plumbing, validation scripts, and usually the same maintainers. Separate repositories should be created only when there is a concrete boundary that makes shared operation more expensive than useful: @@ -108,6 +125,14 @@ Package IDs should use a stable dotted namespace: Versioning is per package. A Caddy HTTP/1 wrapper can ship `0.2.0` while Kestrel HTTP/1 remains `0.1.0`. +Third-party consumers should start with +[`docs/third-party-package-consumption.md`](docs/third-party-package-consumption.md). +It documents how to obtain a release artifact, verify its hash and build +attestation, inspect the package manifests, and pin the package in an +immutable ProtocolLab run plan. The manual release workflow is +[`release.yml`](.github/workflows/release.yml); it is dry-run +by default and requires an approved release intent before it can publish. + Shared scripts may build all packages, but publish and release metadata must preserve each package ID and version. Do not replace per-package identity with one repository-wide package version. ## Adding A Component @@ -120,9 +145,15 @@ Shared scripts may build all packages, but publish and release metadata must pre Adding Kestrel HTTP/1 or Caddy HTTP/1 is a normal component addition in this repository. It does not require creating another repository. -## Current Lane Packages +## Package Catalog + +The authoritative inventory is the set of component-local +`protocol-lab-package.json` files and the reviewed +[`release/component-graph.v1.json`](release/component-graph.v1.json). Run the +manifest validator to obtain the current package count. The lists below are +selected lane examples, not a complete catalog. -Implementation packages: +Selected implementation packages: - `org.protocol-lab.components.implementation.kestrel-http1` - `org.protocol-lab.components.implementation.kestrel-http2` @@ -147,7 +178,7 @@ Implementation packages: - `org.protocol-lab.components.implementation.aioquic-raw` - `org.protocol-lab.components.implementation.quiche-raw` -Test-executor packages: +Selected test-executor packages: - `org.protocol-lab.components.executor.http1-reference` - `org.protocol-lab.components.executor.http1-go-smoke` @@ -157,7 +188,7 @@ Test-executor packages: - `org.protocol-lab.components.executor.h3spec-http3-qpack` - `org.protocol-lab.components.executor.aioquic-rfc9220-websocket` -Scenario-pack packages: +Selected scenario-pack packages: - `org.protocol-lab.components.scenario.raw-quic-transport` - `org.protocol-lab.components.scenario.h3spec-http3-qpack` diff --git a/docs/README.md b/docs/README.md index 4087d3ab..de3c9a15 100644 --- a/docs/README.md +++ b/docs/README.md @@ -2,6 +2,18 @@ This documentation supports the component package repository. +## Start Here + +- [Third-party package consumption](third-party-package-consumption.md) gives + the shortest verified path to build, inspect, attest, and pin a package. +- [Package scripts](../scripts/package/README.md) documents individual and + full-catalog builders, prerequisites, and generated evidence. +- [Root README](../README.md) explains repository ownership and package + boundaries. +- [Releases](https://github.com/incursa/protocol-lab-components/releases) is + the authoritative public distribution surface. If it is empty, build from + source; workflow artifacts are not releases. + ## Repository Surfaces - [Root README](../README.md) explains the monorepo boundary, package layout, @@ -32,7 +44,7 @@ This documentation supports the component package repository. - [Contributor agreement automation](contributor-agreement-automation.md) records the owner setup required for the CLA workflow. - The QUIC/HTTP/3 parity matrix lives in - `C:\shared\src\incursa\quic-dotnet\docs\protocol-lab\quic-http3-component-parity-matrix.md` + [`incursa/quic-dotnet`](https://github.com/incursa/quic-dotnet/blob/main/docs/protocol-lab/quic-http3-component-parity-matrix.md) because `quic-dotnet` owns the Incursa support and proof story. ## Manifest Names diff --git a/docs/third-party-package-consumption.md b/docs/third-party-package-consumption.md new file mode 100644 index 00000000..981305aa --- /dev/null +++ b/docs/third-party-package-consumption.md @@ -0,0 +1,162 @@ +# Third-party ProtocolLab package consumption + +ProtocolLab has two deliberately separate inputs: + +1. the public contract repository, which defines scenarios, schemas, run-plan + rules, and result contracts; and +2. a component package, which supplies an implementation, test executor, or + scenario pack together with its execution-only manifest. + +A package is not a conformance result. It declares what it provides. A lab or +runner must still select compatible packages, execute the selected scenario, +retain the package identities, and report `unsupported` or `unavailable` +explicitly when a cell cannot run. + +## Choose your path + +- To evaluate the package contract today, use the source quickstart below. +- To consume a published bundle, first check the + [Releases page](https://github.com/incursa/protocol-lab-components/releases). +- To author a new component, read [CONTRIBUTING.md](../CONTRIBUTING.md) and + copy the closest manifest under [`templates/`](../templates/). +- To understand scenarios, run plans, results, and claim boundaries, use the + public [`incursa/protocol-lab`](https://github.com/incursa/protocol-lab) + repository. + +A GitHub Actions artifact is build evidence, not a public release. If the +Releases page is empty, no downloadable release bundle has been published yet. + +## Five-minute source verification + +This path needs Git and PowerShell 7. It deliberately builds a declarative raw +QUIC scenario package, so Docker and protocol runtime dependencies are not +required: + +```powershell +git clone https://github.com/incursa/protocol-lab-components.git +Set-Location protocol-lab-components + +pwsh ./scripts/package/Validate-ProtocolLabComponentManifests.ps1 + +$outputRoot = Join-Path (Get-Location) 'artifacts/quickstart' +pwsh ./scripts/package/Build-RawQuicScenarioPackage.ps1 ` + -OutputRoot $outputRoot + +$package = Get-ChildItem -LiteralPath $outputRoot -File ` + -Filter 'org.protocol-lab.components.scenario.raw-quic-transport.*.plabpkg' | + Sort-Object Name | + Select-Object -Last 1 + +pwsh ./scripts/package/Test-ProtocolLabPackageBuildAttestation.ps1 ` + -PackagePath $package.FullName ` + -AttestationPath ($package.FullName + '.build-attestation.json') ` + -RequireParityEligible +``` + +Success produces one `.plabpkg`, its matching build attestation, and a final +`Validated package build attestation` message. Run this from a clean checkout; +dirty-source packages are diagnostic-only and intentionally fail the parity +gate. + +## Obtain and verify a released package + +Download the `.plabpkg`, its matching `.plabpkg.build-attestation.json`, and +the release `SHA256SUMS.txt` from a ProtocolLab Components release. Verify the +archive before extracting it: + +```powershell +Get-FileHash .\org.protocol-lab.components.scenario.raw-quic-transport.0.1.15.plabpkg -Algorithm SHA256 +Get-Content .\SHA256SUMS.txt + +pwsh .\scripts\package\Test-ProtocolLabPackageBuildAttestation.ps1 ` + -PackagePath .\org.protocol-lab.components.scenario.raw-quic-transport.0.1.15.plabpkg ` + -AttestationPath .\org.protocol-lab.components.scenario.raw-quic-transport.0.1.15.plabpkg.build-attestation.json ` + -RequireParityEligible +``` + +Use the exact filenames and versions from `package-index.json`; the version in +this example is illustrative. Do not replace a retained package with another +archive carrying the same `packageId` and `packageVersion`. The immutable +identity is: + +```text +packageId@packageVersion#sha256 +``` + +The attestation must identify a clean source checkout for any result that is +claimed as source/package parity. Dirty-source builds are diagnostic-only. + +## Inspect the package boundary + +Every ProtocolLab package must contain these root entries: + +```text +protocol-lab-package.json public package v2 manifest +protocol-lab.internal.json execution-only manifest +package-build-provenance.json dependency-closure provenance +``` + +The public manifest is the only source for package identity and advertised +component IDs. The internal manifest describes environments and entrypoints; +it must not be used to infer public protocol support. The package-relative +entry manifests are the catalog inputs that the selected runner resolves. + +## Pin a run plan + +Run plans must pin the package identity and hash, then select IDs supplied by +those packages. A package reference uses this exact form: + +```text +packageId|packageVersion|sha256 +``` + +For a raw QUIC run, the scenario pack, implementation package, and executor +package are separate selections. The existing raw QUIC component identities +include: + +```text +org.protocol-lab.components.scenario.raw-quic-transport +org.protocol-lab.components.implementation.quic-go-raw +org.protocol-lab.components.executor.quic-go-raw-load +``` + +The `quic-dotnet-raw-dev` package remains owned and built by the `quic-dotnet` +repository. It is consumed as an implementation package alongside the raw +QUIC scenario and executor packages; this repository does not silently replace +it with `quic-go-raw` or infer parity across implementations. + +## Build a third-party package + +A third-party implementation owner should: + +1. use a package ID in a namespace admitted by the target package index; +2. declare a stable semantic `packageVersion` in + `protocol-lab-package.json`; +3. keep execution-only requirements in `protocol-lab.internal.json`; +4. run the manifest validator and package-local smoke tests; +5. build from a clean checkout so the attestation is parity-eligible; and +6. submit the package, attestation, SHA-256, public manifests, and exact + source commit together. + +The full catalog builder also exercises Docker-backed packages. For that +workflow, install Docker Desktop or Docker Engine, keep the Docker daemon +running, and ensure `docker` is on `PATH`; the builder performs this check +before starting package builds. Individual package builders may have narrower +requirements, which are declared by their internal manifest and toolchain +files. + +The package builder emits deterministic archive bytes for the same declared +component closure, configuration, runtime identifier, and toolchain. A +changed package requires a new package version. The package release workflow +is intentionally manual and dry-run by default; publishing also requires a +reviewed release intent. The workflow is +[`.github/workflows/release.yml`](../.github/workflows/release.yml). + +## What this does not prove + +Package validation proves package shape, provenance, and declared inventory. It +does not prove that every scenario runs on every operating system, that a +third-party implementation is conformant, or that a performance comparison is +publishable. Those claims require a package-pinned execution campaign with +retained telemetry, environment identity, repetitions, and the public result +schema. diff --git a/executors/aioquic-rfc9220-websocket/test-executors/aioquic-rfc9220-websocket.yaml b/executors/aioquic-rfc9220-websocket/test-executors/aioquic-rfc9220-websocket.yaml index 1f2ddb56..37366c0b 100644 --- a/executors/aioquic-rfc9220-websocket/test-executors/aioquic-rfc9220-websocket.yaml +++ b/executors/aioquic-rfc9220-websocket/test-executors/aioquic-rfc9220-websocket.yaml @@ -153,7 +153,6 @@ metricsAvailability: - operation-outcomes parser: id: protocol-lab-rfc9220-json - type: protocol-lab-rfc9220-json preservesRawOutput: true telemetry: supported: true diff --git a/executors/curl-http3-client/test-executors/curl-http3-client.yaml b/executors/curl-http3-client/test-executors/curl-http3-client.yaml index 054161c4..addcf67d 100644 --- a/executors/curl-http3-client/test-executors/curl-http3-client.yaml +++ b/executors/curl-http3-client/test-executors/curl-http3-client.yaml @@ -102,7 +102,6 @@ metricsAvailability: - validation parser: id: protocol-lab-http-json - type: protocol-lab-http-json preservesRawOutput: true telemetry: supported: true diff --git a/executors/go-dns-doh2-executor/protocol-lab-package.json b/executors/go-dns-doh2-executor/protocol-lab-package.json index 5ebcc0c5..d8cd89c8 100644 --- a/executors/go-dns-doh2-executor/protocol-lab-package.json +++ b/executors/go-dns-doh2-executor/protocol-lab-package.json @@ -26,5 +26,5 @@ ] } ], - "dependencies": {} + "dependencies": {"requiredCapabilities": []} } diff --git a/executors/go-dns-doh2-executor/test-executors/go-dns-doh2-executor.yaml b/executors/go-dns-doh2-executor/test-executors/go-dns-doh2-executor.yaml index f95519c1..fb76bc97 100644 --- a/executors/go-dns-doh2-executor/test-executors/go-dns-doh2-executor.yaml +++ b/executors/go-dns-doh2-executor/test-executors/go-dns-doh2-executor.yaml @@ -44,6 +44,5 @@ supportedArtifactTypes: metricsAvailability: {available: true, availableKinds: [validation, queries-per-second, latency-percentiles, time-to-first-byte, operation-outcomes, bytes, http2, tls-negotiation]} parser: id: protocol-lab-dns-doh2-json - type: protocol-lab-dns-doh2-json preservesRawOutput: true telemetry: {supported: true, supported_contract_versions: [telemetry-bundle-v1], supported_scopes: [test-executor, load-generator], supported_artifact_kinds: [summary, metrics, stdout, stderr, raw], export_modes: [inline, artifact-bundle], metadata: {optional: true, implementation_owned: true, description: The executor emits exact DNS wire, HTTP/2, and TLS negotiation proof; the runner owns stdout/stderr and saturation telemetry.}} diff --git a/executors/go-dns-doh3-executor/protocol-lab-package.json b/executors/go-dns-doh3-executor/protocol-lab-package.json index 90bfc0dc..a800a4df 100644 --- a/executors/go-dns-doh3-executor/protocol-lab-package.json +++ b/executors/go-dns-doh3-executor/protocol-lab-package.json @@ -36,5 +36,5 @@ ] } ], - "dependencies": {} + "dependencies": {"requiredCapabilities": []} } diff --git a/executors/go-dns-doh3-executor/source/go.mod b/executors/go-dns-doh3-executor/source/go.mod index 913de728..c0188348 100644 --- a/executors/go-dns-doh3-executor/source/go.mod +++ b/executors/go-dns-doh3-executor/source/go.mod @@ -9,11 +9,11 @@ require ( require ( github.com/quic-go/qpack v0.6.0 // indirect - golang.org/x/crypto v0.51.0 // indirect - golang.org/x/mod v0.35.0 // indirect + golang.org/x/crypto v0.53.0 // indirect + golang.org/x/mod v0.36.0 // indirect golang.org/x/net v0.55.0 // indirect - golang.org/x/sync v0.20.0 // indirect - golang.org/x/sys v0.45.0 // indirect - golang.org/x/text v0.37.0 // indirect - golang.org/x/tools v0.44.0 // indirect + golang.org/x/sync v0.21.0 // indirect + golang.org/x/sys v0.46.0 // indirect + golang.org/x/text v0.38.0 // indirect + golang.org/x/tools v0.45.0 // indirect ) diff --git a/executors/go-dns-doh3-executor/source/go.sum b/executors/go-dns-doh3-executor/source/go.sum index 6fa5bf44..e3a0e43b 100644 --- a/executors/go-dns-doh3-executor/source/go.sum +++ b/executors/go-dns-doh3-executor/source/go.sum @@ -16,19 +16,19 @@ github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= go.uber.org/mock v0.5.2 h1:LbtPTcP8A5k9WPXj54PPPbjcI4Y6lhyOZXn+VS7wNko= go.uber.org/mock v0.5.2/go.mod h1:wLlUxC2vVTPTaE3UD51E0BGOAElKrILxhVSDYQLld5o= -golang.org/x/crypto v0.51.0 h1:IBPXwPfKxY7cWQZ38ZCIRPI50YLeevDLlLnyC5wRGTI= -golang.org/x/crypto v0.51.0/go.mod h1:8AdwkbraGNABw2kOX6YFPs3WM22XqI4EXEd8g+x7Oc8= -golang.org/x/mod v0.35.0 h1:Ww1D637e6Pg+Zb2KrWfHQUnH2dQRLBQyAtpr/haaJeM= -golang.org/x/mod v0.35.0/go.mod h1:+GwiRhIInF8wPm+4AoT6L0FA1QWAad3OMdTRx4tFYlU= +golang.org/x/crypto v0.53.0 h1:QZ4Muo8THX6CizN2vPPd5fBGHyogrdK9fG4wLPFUsto= +golang.org/x/crypto v0.53.0/go.mod h1:DNLU434OwVakk9PzuwV8w62mAJpRJL3vsgcfp4Qnsio= +golang.org/x/mod v0.36.0 h1:JJjpVx6myfUsUdAzZuOSTTmRE0PfZeNWzzvKrP7amb4= +golang.org/x/mod v0.36.0/go.mod h1:moc6ELqsWcOw5Ef3xVprK5ul/MvtVvkIXLziUOICjUQ= golang.org/x/net v0.55.0 h1:bcvxaJn3e1U6InsFWt1JUq1aSjnRxLzT2rtD2KfkDF8= golang.org/x/net v0.55.0/go.mod h1:L5U2KuzuOe1lY7Z+aWVIKK6qEeJXnXV9yzGA+WCHJww= -golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4= -golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= -golang.org/x/sys v0.45.0 h1:dO4czNzziLiiXplLQgBCEpCvXQ3dnkn0SdaZSYdQ+FY= -golang.org/x/sys v0.45.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= -golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc= -golang.org/x/text v0.37.0/go.mod h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38= -golang.org/x/tools v0.44.0 h1:UP4ajHPIcuMjT1GqzDWRlalUEoY+uzoZKnhOjbIPD2c= -golang.org/x/tools v0.44.0/go.mod h1:KA0AfVErSdxRZIsOVipbv3rQhVXTnlU6UhKxHd1seDI= +golang.org/x/sync v0.21.0 h1:HLII4xRRTtCRkxYp4HNFF0Js/Og6q2i++KXbg0gHCwM= +golang.org/x/sync v0.21.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= +golang.org/x/sys v0.46.0 h1:noSf2Fq6F8DBgS+LysIkx7rIExoNHJsxOAtPp4rthXw= +golang.org/x/sys v0.46.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/text v0.38.0 h1:sXmwo9DwP3OK9EZ7PqAdaooSGozfl/3a6/xJcbzPRhE= +golang.org/x/text v0.38.0/go.mod h1:YXZt3QhHUKYT53r2lLKFIVi6Ao1jdzrTR/KQ09qyxF4= +golang.org/x/tools v0.45.0 h1:18qN3FAooORvApf5XjCXgsuayZOEtXf6JK18I3+ONa8= +golang.org/x/tools v0.45.0/go.mod h1:LuUGqqaXcXMEFEruIVJVm5mgDD8vww/z/SR1gQ4uE/0= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/executors/go-dns-doh3-executor/test-executors/go-dns-doh3-executor.yaml b/executors/go-dns-doh3-executor/test-executors/go-dns-doh3-executor.yaml index 718f5dbd..0d6eafed 100644 --- a/executors/go-dns-doh3-executor/test-executors/go-dns-doh3-executor.yaml +++ b/executors/go-dns-doh3-executor/test-executors/go-dns-doh3-executor.yaml @@ -37,5 +37,5 @@ supportedArtifactTypes: - {type: load.stdout.log, producedByStates: [stopped, failed]} - {type: load.stderr.log, producedByStates: [stopped, failed]} metricsAvailability: {available: true, availableKinds: [validation, queries-per-second, latency-percentiles, time-to-first-byte, operation-outcomes, bytes, quic, tls-negotiation]} -parser: {id: protocol-lab-dns-doh3-json, type: protocol-lab-dns-doh3-json, preservesRawOutput: true} +parser: {id: protocol-lab-dns-doh3-json, preservesRawOutput: true} telemetry: {supported: true, supported_contract_versions: [telemetry-bundle-v1], supported_scopes: [test-executor, load-generator], supported_artifact_kinds: [summary, metrics, stdout, stderr, raw], export_modes: [inline, artifact-bundle]} diff --git a/executors/go-dns-doq-executor/protocol-lab-package.json b/executors/go-dns-doq-executor/protocol-lab-package.json index b2fe0bb5..94952ea8 100644 --- a/executors/go-dns-doq-executor/protocol-lab-package.json +++ b/executors/go-dns-doq-executor/protocol-lab-package.json @@ -24,5 +24,5 @@ ] } ], - "dependencies": {} + "dependencies": {"requiredCapabilities": []} } diff --git a/executors/go-dns-doq-executor/source/go.mod b/executors/go-dns-doq-executor/source/go.mod index abd67175..76731aac 100644 --- a/executors/go-dns-doq-executor/source/go.mod +++ b/executors/go-dns-doq-executor/source/go.mod @@ -5,7 +5,7 @@ go 1.25.0 require github.com/quic-go/quic-go v0.60.0 require ( - golang.org/x/crypto v0.51.0 // indirect + golang.org/x/crypto v0.53.0 // indirect golang.org/x/net v0.55.0 // indirect - golang.org/x/sys v0.45.0 // indirect + golang.org/x/sys v0.46.0 // indirect ) diff --git a/executors/go-dns-doq-executor/source/go.sum b/executors/go-dns-doq-executor/source/go.sum index 7b2a1969..4e7a1bcb 100644 --- a/executors/go-dns-doq-executor/source/go.sum +++ b/executors/go-dns-doq-executor/source/go.sum @@ -10,11 +10,11 @@ github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= go.uber.org/mock v0.5.2 h1:LbtPTcP8A5k9WPXj54PPPbjcI4Y6lhyOZXn+VS7wNko= go.uber.org/mock v0.5.2/go.mod h1:wLlUxC2vVTPTaE3UD51E0BGOAElKrILxhVSDYQLld5o= -golang.org/x/crypto v0.51.0 h1:IBPXwPfKxY7cWQZ38ZCIRPI50YLeevDLlLnyC5wRGTI= -golang.org/x/crypto v0.51.0/go.mod h1:8AdwkbraGNABw2kOX6YFPs3WM22XqI4EXEd8g+x7Oc8= +golang.org/x/crypto v0.53.0 h1:QZ4Muo8THX6CizN2vPPd5fBGHyogrdK9fG4wLPFUsto= +golang.org/x/crypto v0.53.0/go.mod h1:DNLU434OwVakk9PzuwV8w62mAJpRJL3vsgcfp4Qnsio= golang.org/x/net v0.55.0 h1:bcvxaJn3e1U6InsFWt1JUq1aSjnRxLzT2rtD2KfkDF8= golang.org/x/net v0.55.0/go.mod h1:L5U2KuzuOe1lY7Z+aWVIKK6qEeJXnXV9yzGA+WCHJww= -golang.org/x/sys v0.45.0 h1:dO4czNzziLiiXplLQgBCEpCvXQ3dnkn0SdaZSYdQ+FY= -golang.org/x/sys v0.45.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/sys v0.46.0 h1:noSf2Fq6F8DBgS+LysIkx7rIExoNHJsxOAtPp4rthXw= +golang.org/x/sys v0.46.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/executors/go-dns-doq-executor/test-executors/go-dns-doq-executor.yaml b/executors/go-dns-doq-executor/test-executors/go-dns-doq-executor.yaml index 626087ea..1250c7ca 100644 --- a/executors/go-dns-doq-executor/test-executors/go-dns-doq-executor.yaml +++ b/executors/go-dns-doq-executor/test-executors/go-dns-doq-executor.yaml @@ -44,6 +44,5 @@ supportedArtifactTypes: metricsAvailability: {available: true, availableKinds: [validation, queries-per-second, latency-percentiles, time-to-first-byte, operation-outcomes, bytes, quic, tls-negotiation]} parser: id: protocol-lab-dns-doq-json - type: protocol-lab-dns-doq-json preservesRawOutput: true telemetry: {supported: true, supported_contract_versions: [telemetry-bundle-v1], supported_scopes: [test-executor, load-generator], supported_artifact_kinds: [summary, metrics, stdout, stderr, raw], export_modes: [inline, artifact-bundle], metadata: {optional: true, implementation_owned: true, description: The executor emits exact DNS wire, QUIC stream, and TLS negotiation proof; the runner owns stdout/stderr and saturation telemetry.}} diff --git a/executors/go-dns-dot-executor/protocol-lab-package.json b/executors/go-dns-dot-executor/protocol-lab-package.json index b2b86254..01e83c6d 100644 --- a/executors/go-dns-dot-executor/protocol-lab-package.json +++ b/executors/go-dns-dot-executor/protocol-lab-package.json @@ -26,5 +26,5 @@ ] } ], - "dependencies": {} + "dependencies": {"requiredCapabilities": []} } diff --git a/executors/go-dns-dot-executor/test-executors/go-dns-dot-executor.yaml b/executors/go-dns-dot-executor/test-executors/go-dns-dot-executor.yaml index 89b803e5..0665ec57 100644 --- a/executors/go-dns-dot-executor/test-executors/go-dns-dot-executor.yaml +++ b/executors/go-dns-dot-executor/test-executors/go-dns-dot-executor.yaml @@ -42,6 +42,5 @@ supportedArtifactTypes: metricsAvailability: {available: true, availableKinds: [validation, queries-per-second, latency-percentiles, operation-outcomes, bytes, tls-negotiation]} parser: id: protocol-lab-dns-dot-json - type: protocol-lab-dns-dot-json preservesRawOutput: true telemetry: {supported: true, supported_contract_versions: [telemetry-bundle-v1], supported_scopes: [test-executor, load-generator], supported_artifact_kinds: [summary, metrics, stdout, stderr, raw], export_modes: [inline, artifact-bundle], metadata: {optional: true, implementation_owned: true, description: The executor emits exact DNS wire and TLS negotiation proof; the runner owns stdout/stderr and saturation telemetry.}} diff --git a/executors/go-dns-tcp-executor/protocol-lab-package.json b/executors/go-dns-tcp-executor/protocol-lab-package.json index 5d1ef079..de6b975f 100644 --- a/executors/go-dns-tcp-executor/protocol-lab-package.json +++ b/executors/go-dns-tcp-executor/protocol-lab-package.json @@ -1 +1 @@ -{"schemaVersion":"protocol-lab-package-v2","packageId":"org.protocol-lab.components.executor.go-dns-tcp-executor","packageVersion":"0.1.0","kind":"test-executor","displayName":"Go Classic DNS TCP Test Executor","entryManifests":["test-executors/go-dns-tcp-executor.yaml"],"providedTestExecutors":[{"testExecutorId":"go-dns-tcp-executor","displayName":"Go Classic DNS TCP Test Executor","protocols":["dns-tcp"],"scenarios":["dns.classic.tcp.query.a"],"tests":["dns.classic.tcp.query.a"]}],"dependencies":{}} +{"schemaVersion":"protocol-lab-package-v2","packageId":"org.protocol-lab.components.executor.go-dns-tcp-executor","packageVersion":"0.1.0","kind":"test-executor","displayName":"Go Classic DNS TCP Test Executor","entryManifests":["test-executors/go-dns-tcp-executor.yaml"],"providedTestExecutors":[{"testExecutorId":"go-dns-tcp-executor","displayName":"Go Classic DNS TCP Test Executor","protocols":["dns-tcp"],"scenarios":["dns.classic.tcp.query.a"],"tests":["dns.classic.tcp.query.a"]}],"dependencies":{"requiredCapabilities":[]}} diff --git a/executors/go-dns-tcp-executor/test-executors/go-dns-tcp-executor.yaml b/executors/go-dns-tcp-executor/test-executors/go-dns-tcp-executor.yaml index dcadacd5..cf1d3850 100644 --- a/executors/go-dns-tcp-executor/test-executors/go-dns-tcp-executor.yaml +++ b/executors/go-dns-tcp-executor/test-executors/go-dns-tcp-executor.yaml @@ -34,5 +34,5 @@ supportedArtifactTypes: - {type: load.stdout.log, producedByStates: [stopped, failed]} - {type: load.stderr.log, producedByStates: [stopped, failed]} metricsAvailability: {available: true, availableKinds: [validation, queries-per-second, latency-percentiles, operation-outcomes, bytes]} -parser: {id: protocol-lab-dns-classic-tcp-json, type: protocol-lab-dns-classic-tcp-json, preservesRawOutput: true} +parser: {id: protocol-lab-dns-classic-tcp-json, preservesRawOutput: true} telemetry: {supported: true, supported_contract_versions: [telemetry-bundle-v1], supported_scopes: [test-executor, load-generator], supported_artifact_kinds: [summary, metrics, stdout, stderr, raw], export_modes: [inline, artifact-bundle]} diff --git a/executors/go-dns-udp-executor/protocol-lab-package.json b/executors/go-dns-udp-executor/protocol-lab-package.json index 242e4d53..1bf3b7ce 100644 --- a/executors/go-dns-udp-executor/protocol-lab-package.json +++ b/executors/go-dns-udp-executor/protocol-lab-package.json @@ -6,5 +6,5 @@ "displayName":"Go Classic DNS UDP Test Executor", "entryManifests":["test-executors/go-dns-udp-executor.yaml"], "providedTestExecutors":[{"testExecutorId":"go-dns-udp-executor","displayName":"Go Classic DNS UDP Test Executor","protocols":["dns-udp"],"scenarios":["dns.classic.udp.query.a","dns.classic.udp-truncated-tcp-retry"],"tests":["dns.classic.udp.query.a","dns.classic.udp-truncated-tcp-retry"]}], - "dependencies":{} + "dependencies":{"requiredCapabilities":[]} } diff --git a/executors/go-dns-udp-executor/test-executors/go-dns-udp-executor.yaml b/executors/go-dns-udp-executor/test-executors/go-dns-udp-executor.yaml index 1252ad19..d213b438 100644 --- a/executors/go-dns-udp-executor/test-executors/go-dns-udp-executor.yaml +++ b/executors/go-dns-udp-executor/test-executors/go-dns-udp-executor.yaml @@ -35,5 +35,5 @@ supportedArtifactTypes: &artifacts - {type: load.stdout.log, producedByStates: [stopped, failed]} - {type: load.stderr.log, producedByStates: [stopped, failed]} metricsAvailability: {available: true, availableKinds: [validation, queries-per-second, latency-percentiles, operation-outcomes, retry-count, bytes]} -parser: {id: protocol-lab-dns-classic-udp-json, type: protocol-lab-dns-classic-udp-json, preservesRawOutput: true} +parser: {id: protocol-lab-dns-classic-udp-json, preservesRawOutput: true} telemetry: {supported: true, supported_contract_versions: [telemetry-bundle-v1], supported_scopes: [test-executor, load-generator], supported_artifact_kinds: [summary, metrics, stdout, stderr, raw], export_modes: [inline, artifact-bundle]} diff --git a/executors/go-grpc-h2-executor/protocol-lab-package.json b/executors/go-grpc-h2-executor/protocol-lab-package.json index fdb21620..992fee36 100644 --- a/executors/go-grpc-h2-executor/protocol-lab-package.json +++ b/executors/go-grpc-h2-executor/protocol-lab-package.json @@ -12,5 +12,5 @@ "scenarios": ["grpc.h2.unary.echo","grpc.h2.unary.empty","grpc.h2.unary.fixed-metadata","grpc.h2.unary.gzip","grpc.h2.unary.large","grpc.h2.server-streaming.echo","grpc.h2.client-streaming.echo","grpc.h2.bidi-streaming.echo","grpc.h2.trailers-only-status","grpc.h2.deadline-exceeded","grpc.h2.client-cancellation","grpc.h2.unary.echo-new-channel"], "tests": ["grpc.h2.unary.echo","grpc.h2.unary.empty","grpc.h2.unary.fixed-metadata","grpc.h2.unary.gzip","grpc.h2.unary.large","grpc.h2.server-streaming.echo","grpc.h2.client-streaming.echo","grpc.h2.bidi-streaming.echo","grpc.h2.trailers-only-status","grpc.h2.deadline-exceeded","grpc.h2.client-cancellation","grpc.h2.unary.echo-new-channel"] }], - "dependencies": {} + "dependencies": {"requiredCapabilities": []} } diff --git a/executors/go-grpc-h2-executor/test-executors/go-grpc-h2-executor.yaml b/executors/go-grpc-h2-executor/test-executors/go-grpc-h2-executor.yaml index 3824bdca..1315353b 100644 --- a/executors/go-grpc-h2-executor/test-executors/go-grpc-h2-executor.yaml +++ b/executors/go-grpc-h2-executor/test-executors/go-grpc-h2-executor.yaml @@ -72,7 +72,6 @@ metricsAvailability: availableKinds: [validation, rpc-latency-percentiles, operation-outcomes, connection-and-stream-topology, byte-accounting] parser: id: protocol-lab-grpc-h2-json - type: protocol-lab-grpc-h2-json preservesRawOutput: true telemetry: supported: true diff --git a/executors/go-http1-executor/protocol-lab-package.json b/executors/go-http1-executor/protocol-lab-package.json index b687c7af..df3cf76c 100644 --- a/executors/go-http1-executor/protocol-lab-package.json +++ b/executors/go-http1-executor/protocol-lab-package.json @@ -24,5 +24,5 @@ ] } ], - "dependencies": {} + "dependencies": {"requiredCapabilities": []} } diff --git a/executors/go-http1-executor/test-executors/go-http1-executor.yaml b/executors/go-http1-executor/test-executors/go-http1-executor.yaml index c2b6bc0a..7c5e253d 100644 --- a/executors/go-http1-executor/test-executors/go-http1-executor.yaml +++ b/executors/go-http1-executor/test-executors/go-http1-executor.yaml @@ -93,7 +93,6 @@ metricsAvailability: - operation-outcomes parser: id: protocol-lab-http-json - type: protocol-lab-http-json preservesRawOutput: true telemetry: supported: true diff --git a/executors/go-http1-websocket-executor/protocol-lab-package.json b/executors/go-http1-websocket-executor/protocol-lab-package.json index f7c19a24..14b35493 100644 --- a/executors/go-http1-websocket-executor/protocol-lab-package.json +++ b/executors/go-http1-websocket-executor/protocol-lab-package.json @@ -12,5 +12,5 @@ "scenarios":["http1.websocket.rfc6455.cleartext.upgrade","http1.websocket.rfc6455.cleartext.control-frames","http1.websocket.rfc6455.cleartext.text-echo","http1.websocket.rfc6455.cleartext.binary-echo","http1.websocket.rfc6455.cleartext.close"], "tests":["http1.websocket.rfc6455.cleartext.upgrade","http1.websocket.rfc6455.cleartext.control-frames","http1.websocket.rfc6455.cleartext.text-echo","http1.websocket.rfc6455.cleartext.binary-echo","http1.websocket.rfc6455.cleartext.close"] }], - "dependencies":{} + "dependencies":{"requiredCapabilities":[]} } diff --git a/executors/go-http1-websocket-executor/test-executors/go-http1-websocket-executor.yaml b/executors/go-http1-websocket-executor/test-executors/go-http1-websocket-executor.yaml index df36626f..7b6aebf2 100644 --- a/executors/go-http1-websocket-executor/test-executors/go-http1-websocket-executor.yaml +++ b/executors/go-http1-websocket-executor/test-executors/go-http1-websocket-executor.yaml @@ -42,7 +42,7 @@ supportedArtifactTypes: - {type: result.json, producedByStates: [stopped, failed]} - {type: websocket-executor-result.json, producedByStates: [stopped, failed]} metricsAvailability: {available: true, availableKinds: [validation, connections-per-second, messages-per-second, bytes-per-second, latency-percentiles, operation-outcomes]} -parser: {id: protocol-lab-websocket-h1-json, type: protocol-lab-websocket-h1-json, preservesRawOutput: true} +parser: {id: protocol-lab-websocket-h1-json, preservesRawOutput: true} telemetry: supported: true supported_contract_versions: [telemetry-bundle-v1] diff --git a/executors/go-http1-websocket-tls-executor/protocol-lab-package.json b/executors/go-http1-websocket-tls-executor/protocol-lab-package.json index c387d1fc..ecab39e4 100644 --- a/executors/go-http1-websocket-tls-executor/protocol-lab-package.json +++ b/executors/go-http1-websocket-tls-executor/protocol-lab-package.json @@ -12,5 +12,5 @@ "scenarios":["http1.websocket.rfc6455.tls.upgrade","http1.websocket.rfc6455.tls.control-frames","http1.websocket.rfc6455.tls.text-echo","http1.websocket.rfc6455.tls.binary-echo","http1.websocket.rfc6455.tls.close","http1.websocket.rfc6455.tls.subprotocol-text-echo","http1.websocket.rfc6455.tls.permessage-deflate-binary-echo"], "tests":["http1.websocket.rfc6455.tls.upgrade","http1.websocket.rfc6455.tls.control-frames","http1.websocket.rfc6455.tls.text-echo","http1.websocket.rfc6455.tls.binary-echo","http1.websocket.rfc6455.tls.close","http1.websocket.rfc6455.tls.subprotocol-text-echo","http1.websocket.rfc6455.tls.permessage-deflate-binary-echo"] }], - "dependencies":{} + "dependencies":{"requiredCapabilities":[]} } diff --git a/executors/go-http1-websocket-tls-executor/test-executors/go-http1-websocket-tls-executor.yaml b/executors/go-http1-websocket-tls-executor/test-executors/go-http1-websocket-tls-executor.yaml index 786bd92a..5ecead6b 100644 --- a/executors/go-http1-websocket-tls-executor/test-executors/go-http1-websocket-tls-executor.yaml +++ b/executors/go-http1-websocket-tls-executor/test-executors/go-http1-websocket-tls-executor.yaml @@ -54,7 +54,7 @@ supportedArtifactTypes: - {type: result.json, producedByStates: [stopped, failed]} - {type: websocket-executor-result.json, producedByStates: [stopped, failed]} metricsAvailability: {available: true, availableKinds: [validation, connections-per-second, messages-per-second, bytes-per-second, latency-percentiles, operation-outcomes]} -parser: {id: protocol-lab-websocket-h1-tls-json, type: protocol-lab-websocket-h1-tls-json, preservesRawOutput: true} +parser: {id: protocol-lab-websocket-h1-tls-json, preservesRawOutput: true} telemetry: supported: true supported_contract_versions: [telemetry-bundle-v1] diff --git a/executors/go-http2-executor/protocol-lab-package.json b/executors/go-http2-executor/protocol-lab-package.json index 3db9d205..163859e6 100644 --- a/executors/go-http2-executor/protocol-lab-package.json +++ b/executors/go-http2-executor/protocol-lab-package.json @@ -24,5 +24,5 @@ ] } ], - "dependencies": {} + "dependencies": {"requiredCapabilities": []} } diff --git a/executors/go-http2-executor/test-executors/go-http2-executor.yaml b/executors/go-http2-executor/test-executors/go-http2-executor.yaml index 444bc42f..82fdd76e 100644 --- a/executors/go-http2-executor/test-executors/go-http2-executor.yaml +++ b/executors/go-http2-executor/test-executors/go-http2-executor.yaml @@ -106,7 +106,6 @@ metricsAvailability: - connection-and-stream-topology parser: id: protocol-lab-http-json - type: protocol-lab-http-json preservesRawOutput: true telemetry: supported: true diff --git a/executors/go-http2-websocket-executor/protocol-lab-package.json b/executors/go-http2-websocket-executor/protocol-lab-package.json index 4f5e2c07..bf80acd6 100644 --- a/executors/go-http2-websocket-executor/protocol-lab-package.json +++ b/executors/go-http2-websocket-executor/protocol-lab-package.json @@ -1 +1 @@ -{"schemaVersion":"protocol-lab-package-v2","packageId":"org.protocol-lab.components.executor.go-http2-websocket-executor","packageVersion":"0.2.0","kind":"test-executor","displayName":"Go HTTP/2 RFC 8441 WebSocket Test Executor","entryManifests":["test-executors/go-http2-websocket-executor.yaml"],"providedTestExecutors":[{"testExecutorId":"go-http2-websocket-executor","displayName":"Go HTTP/2 RFC 8441 WebSocket Test Executor","protocols":["h2","tls"],"scenarios":["http2.websocket.rfc8441.extended-connect","http2.websocket.rfc8441.control-frames","http2.websocket.rfc8441.text-echo","http2.websocket.rfc8441.binary-echo","http2.websocket.rfc8441.close","http2.websocket.rfc8441.multi-message-text-echo"],"tests":["http2.websocket.rfc8441.extended-connect","http2.websocket.rfc8441.control-frames","http2.websocket.rfc8441.text-echo","http2.websocket.rfc8441.binary-echo","http2.websocket.rfc8441.close","http2.websocket.rfc8441.multi-message-text-echo"]}],"dependencies":{}} +{"schemaVersion":"protocol-lab-package-v2","packageId":"org.protocol-lab.components.executor.go-http2-websocket-executor","packageVersion":"0.2.0","kind":"test-executor","displayName":"Go HTTP/2 RFC 8441 WebSocket Test Executor","entryManifests":["test-executors/go-http2-websocket-executor.yaml"],"providedTestExecutors":[{"testExecutorId":"go-http2-websocket-executor","displayName":"Go HTTP/2 RFC 8441 WebSocket Test Executor","protocols":["h2","tls"],"scenarios":["http2.websocket.rfc8441.extended-connect","http2.websocket.rfc8441.control-frames","http2.websocket.rfc8441.text-echo","http2.websocket.rfc8441.binary-echo","http2.websocket.rfc8441.close","http2.websocket.rfc8441.multi-message-text-echo"],"tests":["http2.websocket.rfc8441.extended-connect","http2.websocket.rfc8441.control-frames","http2.websocket.rfc8441.text-echo","http2.websocket.rfc8441.binary-echo","http2.websocket.rfc8441.close","http2.websocket.rfc8441.multi-message-text-echo"]}],"dependencies":{"requiredCapabilities":[]}} diff --git a/executors/go-http2-websocket-executor/test-executors/go-http2-websocket-executor.yaml b/executors/go-http2-websocket-executor/test-executors/go-http2-websocket-executor.yaml index 2e553579..a1e6faf6 100644 --- a/executors/go-http2-websocket-executor/test-executors/go-http2-websocket-executor.yaml +++ b/executors/go-http2-websocket-executor/test-executors/go-http2-websocket-executor.yaml @@ -50,5 +50,5 @@ supportedArtifactTypes: - {type: load.stderr.log, producedByStates: [stopped, failed]} - {type: unsupported.json, producedByStates: [failed]} metricsAvailability: {available: true, availableKinds: [validation, connections-per-second, messages-per-second, bytes-per-second, latency-percentiles, operation-outcomes, configured-capacity, observed-active-connections, effective-concurrency, effective-streams]} -parser: {id: protocol-lab-websocket-h2-json, type: protocol-lab-websocket-h2-json, preservesRawOutput: true} +parser: {id: protocol-lab-websocket-h2-json, preservesRawOutput: true} telemetry: {supported: true, supported_contract_versions: [telemetry-bundle-v1], supported_scopes: [test-executor, load-generator], supported_artifact_kinds: [summary, metrics, stdout, stderr, raw], export_modes: [inline, artifact-bundle]} diff --git a/executors/go-masque-connect-udp-executor/protocol-lab-package.json b/executors/go-masque-connect-udp-executor/protocol-lab-package.json index 7e8948f9..ca3a1221 100644 --- a/executors/go-masque-connect-udp-executor/protocol-lab-package.json +++ b/executors/go-masque-connect-udp-executor/protocol-lab-package.json @@ -12,5 +12,5 @@ "scenarios": ["masque.connect-udp-tunnel"], "tests": ["masque.connect-udp-tunnel"] }], - "dependencies": {} + "dependencies": {"requiredCapabilities": []} } diff --git a/executors/go-masque-connect-udp-executor/test-executors/go-masque-connect-udp-executor.yaml b/executors/go-masque-connect-udp-executor/test-executors/go-masque-connect-udp-executor.yaml index bdb2bfab..c7e7ee8b 100644 --- a/executors/go-masque-connect-udp-executor/test-executors/go-masque-connect-udp-executor.yaml +++ b/executors/go-masque-connect-udp-executor/test-executors/go-masque-connect-udp-executor.yaml @@ -29,5 +29,5 @@ supportedArtifactTypes: - {type: load.stderr.log, producedByStates: [stopped, failed]} - {type: unsupported.json, producedByStates: [failed]} metricsAvailability: {available: true, availableKinds: [validation, tunnels-per-second, datagrams-per-second, datagram-latency-percentiles, operation-outcomes, effective-tunnels]} -parser: {id: protocol-lab-masque-json, type: protocol-lab-masque-json, preservesRawOutput: true} +parser: {id: protocol-lab-masque-json, preservesRawOutput: true} telemetry: {supported: true, supported_contract_versions: [telemetry-bundle-v1], supported_scopes: [test-executor, load-generator], supported_artifact_kinds: [summary, metrics, stdout, stderr, raw], export_modes: [inline, artifact-bundle]} diff --git a/executors/go-tls12-executor/protocol-lab-package.json b/executors/go-tls12-executor/protocol-lab-package.json index 4380410c..be630715 100644 --- a/executors/go-tls12-executor/protocol-lab-package.json +++ b/executors/go-tls12-executor/protocol-lab-package.json @@ -6,5 +6,5 @@ "displayName":"Go TLS 1.2 Compatibility Executor", "entryManifests":["test-executors/go-tls12-executor.yaml"], "providedTestExecutors":[{"testExecutorId":"go-tls12-executor","displayName":"Go TLS 1.2 Compatibility Executor","protocols":["tls"],"scenarios":["tls.handshake.full.tls12"],"tests":["tls.handshake.full.tls12"]}], - "dependencies":{} + "dependencies":{"requiredCapabilities":[]} } diff --git a/executors/go-tls12-executor/test-executors/go-tls12-executor.yaml b/executors/go-tls12-executor/test-executors/go-tls12-executor.yaml index aee7cb43..aed23590 100644 --- a/executors/go-tls12-executor/test-executors/go-tls12-executor.yaml +++ b/executors/go-tls12-executor/test-executors/go-tls12-executor.yaml @@ -33,7 +33,7 @@ supportedArtifactTypes: - {type: tls-executor-result.json, producedByStates: [stopped, failed]} - {type: tls-load-summary.json, producedByStates: [stopped, failed]} metricsAvailability: {available: true, availableKinds: [validation, handshakes-per-second, latency-percentiles, operation-outcomes, tls-negotiation]} -parser: {id: protocol-lab-tls-json, type: protocol-lab-tls-json, preservesRawOutput: true} +parser: {id: protocol-lab-tls-json, preservesRawOutput: true} telemetry: supported: true supported_contract_versions: [telemetry-bundle-v1] diff --git a/executors/go-tls13-executor/protocol-lab-package.json b/executors/go-tls13-executor/protocol-lab-package.json index fcdd0621..8f036a23 100644 --- a/executors/go-tls13-executor/protocol-lab-package.json +++ b/executors/go-tls13-executor/protocol-lab-package.json @@ -12,5 +12,5 @@ "scenarios": ["tls.handshake.full", "tls.handshake.resumed", "tls.record.throughput", "tls.record.coverage"], "tests": ["tls.handshake.full", "tls.handshake.resumed", "tls.record.throughput", "tls.record.coverage"] }], - "dependencies": {} + "dependencies": {"requiredCapabilities": []} } diff --git a/executors/go-tls13-executor/test-executors/go-tls13-executor.yaml b/executors/go-tls13-executor/test-executors/go-tls13-executor.yaml index 3f1207ba..d9461ca7 100644 --- a/executors/go-tls13-executor/test-executors/go-tls13-executor.yaml +++ b/executors/go-tls13-executor/test-executors/go-tls13-executor.yaml @@ -59,7 +59,6 @@ metricsAvailability: availableKinds: [validation, handshakes-per-second, bytes-per-second, latency-percentiles, total-transferred-bytes, operation-outcomes, tls-negotiation, record-observation] parser: id: protocol-lab-tls-json - type: protocol-lab-tls-json preservesRawOutput: true telemetry: supported: true diff --git a/executors/go-tls13-mtls-executor/protocol-lab-package.json b/executors/go-tls13-mtls-executor/protocol-lab-package.json index ba0902b7..5b026403 100644 --- a/executors/go-tls13-mtls-executor/protocol-lab-package.json +++ b/executors/go-tls13-mtls-executor/protocol-lab-package.json @@ -12,5 +12,5 @@ "scenarios": ["tls.handshake.mutual-auth"], "tests": ["tls.handshake.mutual-auth"] }], - "dependencies": {} + "dependencies": {"requiredCapabilities": []} } diff --git a/executors/go-tls13-mtls-executor/test-executors/go-tls13-mtls-executor.yaml b/executors/go-tls13-mtls-executor/test-executors/go-tls13-mtls-executor.yaml index 794ef82d..b735b793 100644 --- a/executors/go-tls13-mtls-executor/test-executors/go-tls13-mtls-executor.yaml +++ b/executors/go-tls13-mtls-executor/test-executors/go-tls13-mtls-executor.yaml @@ -44,7 +44,6 @@ metricsAvailability: availableKinds: [validation, handshakes-per-second, latency-percentiles, operation-outcomes, tls-negotiation, peer-authentication] parser: id: protocol-lab-tls-json - type: protocol-lab-tls-json preservesRawOutput: true telemetry: supported: true diff --git a/executors/go-utls-tls13-chacha20-executor/protocol-lab-package.json b/executors/go-utls-tls13-chacha20-executor/protocol-lab-package.json index c5d56a65..466823e5 100644 --- a/executors/go-utls-tls13-chacha20-executor/protocol-lab-package.json +++ b/executors/go-utls-tls13-chacha20-executor/protocol-lab-package.json @@ -1 +1 @@ -{"schemaVersion":"protocol-lab-package-v2","packageId":"org.protocol-lab.components.executor.go-utls-tls13-chacha20-executor","packageVersion":"0.1.0","kind":"test-executor","displayName":"Go uTLS TLS 1.3 ChaCha20 Executor","entryManifests":["test-executors/go-utls-tls13-chacha20-executor.yaml"],"providedTestExecutors":[{"testExecutorId":"go-utls-tls13-chacha20-executor","displayName":"Go uTLS TLS 1.3 ChaCha20 Executor","protocols":["tls"],"scenarios":["tls.handshake.full.chacha20"],"tests":["tls.handshake.full.chacha20"]}],"dependencies":{}} +{"schemaVersion":"protocol-lab-package-v2","packageId":"org.protocol-lab.components.executor.go-utls-tls13-chacha20-executor","packageVersion":"0.1.0","kind":"test-executor","displayName":"Go uTLS TLS 1.3 ChaCha20 Executor","entryManifests":["test-executors/go-utls-tls13-chacha20-executor.yaml"],"providedTestExecutors":[{"testExecutorId":"go-utls-tls13-chacha20-executor","displayName":"Go uTLS TLS 1.3 ChaCha20 Executor","protocols":["tls"],"scenarios":["tls.handshake.full.chacha20"],"tests":["tls.handshake.full.chacha20"]}],"dependencies":{"requiredCapabilities":[]}} diff --git a/executors/go-utls-tls13-chacha20-executor/source/go.mod b/executors/go-utls-tls13-chacha20-executor/source/go.mod index d82e478f..d62d84e3 100644 --- a/executors/go-utls-tls13-chacha20-executor/source/go.mod +++ b/executors/go-utls-tls13-chacha20-executor/source/go.mod @@ -7,6 +7,6 @@ require github.com/refraction-networking/utls v1.8.2 require ( github.com/andybalholm/brotli v1.0.6 // indirect github.com/klauspost/compress v1.17.4 // indirect - golang.org/x/crypto v0.36.0 // indirect - golang.org/x/sys v0.31.0 // indirect + golang.org/x/crypto v0.53.0 // indirect + golang.org/x/sys v0.46.0 // indirect ) diff --git a/executors/go-utls-tls13-chacha20-executor/source/go.sum b/executors/go-utls-tls13-chacha20-executor/source/go.sum index 3e8a6d1e..8ced1f08 100644 --- a/executors/go-utls-tls13-chacha20-executor/source/go.sum +++ b/executors/go-utls-tls13-chacha20-executor/source/go.sum @@ -4,7 +4,7 @@ github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= github.com/refraction-networking/utls v1.8.2 h1:j4Q1gJj0xngdeH+Ox/qND11aEfhpgoEvV+S9iJ2IdQo= github.com/refraction-networking/utls v1.8.2/go.mod h1:jkSOEkLqn+S/jtpEHPOsVv/4V4EVnelwbMQl4vCWXAM= -golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34= -golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc= -golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= -golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/crypto v0.53.0 h1:QZ4Muo8THX6CizN2vPPd5fBGHyogrdK9fG4wLPFUsto= +golang.org/x/crypto v0.53.0/go.mod h1:DNLU434OwVakk9PzuwV8w62mAJpRJL3vsgcfp4Qnsio= +golang.org/x/sys v0.46.0 h1:noSf2Fq6F8DBgS+LysIkx7rIExoNHJsxOAtPp4rthXw= +golang.org/x/sys v0.46.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= diff --git a/executors/go-utls-tls13-chacha20-executor/test-executors/go-utls-tls13-chacha20-executor.yaml b/executors/go-utls-tls13-chacha20-executor/test-executors/go-utls-tls13-chacha20-executor.yaml index 373d1835..8f2d02ae 100644 --- a/executors/go-utls-tls13-chacha20-executor/test-executors/go-utls-tls13-chacha20-executor.yaml +++ b/executors/go-utls-tls13-chacha20-executor/test-executors/go-utls-tls13-chacha20-executor.yaml @@ -31,5 +31,5 @@ supportedArtifactTypes: - {type: tls-executor-result.json, producedByStates: [stopped, failed]} - {type: tls-load-summary.json, producedByStates: [stopped, failed]} metricsAvailability: {available: true, availableKinds: [validation, handshakes-per-second, latency-percentiles, operation-outcomes, tls-negotiation]} -parser: {id: protocol-lab-tls-json, type: protocol-lab-tls-json, preservesRawOutput: true} +parser: {id: protocol-lab-tls-json, preservesRawOutput: true} telemetry: {supported: true, supported_contract_versions: [telemetry-bundle-v1], supported_scopes: [test-executor, load-generator], supported_artifact_kinds: [summary, metrics, stdout, stderr, raw], export_modes: [inline, artifact-bundle], metadata: {optional: true, implementation_owned: true, description: The executor emits exact uTLS ClientHello and negotiated TLS proof; the runner owns stdout/stderr and saturation telemetry.}} diff --git a/executors/go-webtransport-executor/protocol-lab-package.json b/executors/go-webtransport-executor/protocol-lab-package.json index eb1ab0cf..c4cd9b17 100644 --- a/executors/go-webtransport-executor/protocol-lab-package.json +++ b/executors/go-webtransport-executor/protocol-lab-package.json @@ -12,5 +12,5 @@ "scenarios": ["webtransport.session-bidi-echo", "webtransport.session-datagram-echo"], "tests": ["webtransport.session-bidi-echo", "webtransport.session-datagram-echo"] }], - "dependencies": {} + "dependencies": {"requiredCapabilities": []} } diff --git a/executors/go-webtransport-executor/source/go.mod b/executors/go-webtransport-executor/source/go.mod index 1a3b2c2b..3713d20c 100644 --- a/executors/go-webtransport-executor/source/go.mod +++ b/executors/go-webtransport-executor/source/go.mod @@ -10,8 +10,8 @@ require ( require ( github.com/dunglas/httpsfv v1.1.0 // indirect github.com/quic-go/qpack v0.6.0 // indirect - golang.org/x/crypto v0.51.0 // indirect + golang.org/x/crypto v0.53.0 // indirect golang.org/x/net v0.55.0 // indirect - golang.org/x/sys v0.45.0 // indirect - golang.org/x/text v0.37.0 // indirect + golang.org/x/sys v0.46.0 // indirect + golang.org/x/text v0.38.0 // indirect ) diff --git a/executors/go-webtransport-executor/source/go.sum b/executors/go-webtransport-executor/source/go.sum index 6d7007e3..153172ac 100644 --- a/executors/go-webtransport-executor/source/go.sum +++ b/executors/go-webtransport-executor/source/go.sum @@ -16,13 +16,13 @@ github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= go.uber.org/mock v0.5.2 h1:LbtPTcP8A5k9WPXj54PPPbjcI4Y6lhyOZXn+VS7wNko= go.uber.org/mock v0.5.2/go.mod h1:wLlUxC2vVTPTaE3UD51E0BGOAElKrILxhVSDYQLld5o= -golang.org/x/crypto v0.51.0 h1:IBPXwPfKxY7cWQZ38ZCIRPI50YLeevDLlLnyC5wRGTI= -golang.org/x/crypto v0.51.0/go.mod h1:8AdwkbraGNABw2kOX6YFPs3WM22XqI4EXEd8g+x7Oc8= +golang.org/x/crypto v0.53.0 h1:QZ4Muo8THX6CizN2vPPd5fBGHyogrdK9fG4wLPFUsto= +golang.org/x/crypto v0.53.0/go.mod h1:DNLU434OwVakk9PzuwV8w62mAJpRJL3vsgcfp4Qnsio= golang.org/x/net v0.55.0 h1:bcvxaJn3e1U6InsFWt1JUq1aSjnRxLzT2rtD2KfkDF8= golang.org/x/net v0.55.0/go.mod h1:L5U2KuzuOe1lY7Z+aWVIKK6qEeJXnXV9yzGA+WCHJww= -golang.org/x/sys v0.45.0 h1:dO4czNzziLiiXplLQgBCEpCvXQ3dnkn0SdaZSYdQ+FY= -golang.org/x/sys v0.45.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= -golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc= -golang.org/x/text v0.37.0/go.mod h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38= +golang.org/x/sys v0.46.0 h1:noSf2Fq6F8DBgS+LysIkx7rIExoNHJsxOAtPp4rthXw= +golang.org/x/sys v0.46.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/text v0.38.0 h1:sXmwo9DwP3OK9EZ7PqAdaooSGozfl/3a6/xJcbzPRhE= +golang.org/x/text v0.38.0/go.mod h1:YXZt3QhHUKYT53r2lLKFIVi6Ao1jdzrTR/KQ09qyxF4= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/executors/go-webtransport-executor/test-executors/go-webtransport-executor.yaml b/executors/go-webtransport-executor/test-executors/go-webtransport-executor.yaml index 71ac69c7..ee546574 100644 --- a/executors/go-webtransport-executor/test-executors/go-webtransport-executor.yaml +++ b/executors/go-webtransport-executor/test-executors/go-webtransport-executor.yaml @@ -33,5 +33,5 @@ supportedArtifactTypes: - {type: load.stderr.log, producedByStates: [stopped, failed]} - {type: unsupported.json, producedByStates: [failed]} metricsAvailability: {available: true, availableKinds: [validation, sessions-per-second, datagrams-per-second, bytes-per-second, stream-latency-percentiles, datagram-latency-percentiles, operation-outcomes, effective-streams, effective-sessions]} -parser: {id: protocol-lab-webtransport-json, type: protocol-lab-webtransport-json, preservesRawOutput: true} +parser: {id: protocol-lab-webtransport-json, preservesRawOutput: true} telemetry: {supported: true, supported_contract_versions: [telemetry-bundle-v1], supported_scopes: [test-executor, load-generator], supported_artifact_kinds: [summary, metrics, stdout, stderr, raw], export_modes: [inline, artifact-bundle]} diff --git a/executors/h3spec-http3-qpack/test-executors/h3spec-http3-qpack.yaml b/executors/h3spec-http3-qpack/test-executors/h3spec-http3-qpack.yaml index 3a60d8e1..a7b30ee6 100644 --- a/executors/h3spec-http3-qpack/test-executors/h3spec-http3-qpack.yaml +++ b/executors/h3spec-http3-qpack/test-executors/h3spec-http3-qpack.yaml @@ -113,7 +113,6 @@ metricsAvailability: - summary parser: id: protocol-lab-h3spec-json - type: protocol-lab-h3spec-json preservesRawOutput: true telemetry: supported: true diff --git a/executors/openssl-tls13-key-update-executor/protocol-lab-package.json b/executors/openssl-tls13-key-update-executor/protocol-lab-package.json index 6bd982e7..26008f05 100644 --- a/executors/openssl-tls13-key-update-executor/protocol-lab-package.json +++ b/executors/openssl-tls13-key-update-executor/protocol-lab-package.json @@ -12,5 +12,5 @@ "scenarios": ["tls.key-update.diagnostic"], "tests": ["tls.key-update.diagnostic"] }], - "dependencies": {} + "dependencies": {"requiredCapabilities": []} } diff --git a/executors/openssl-tls13-key-update-executor/test-executors/openssl-tls13-key-update-executor.yaml b/executors/openssl-tls13-key-update-executor/test-executors/openssl-tls13-key-update-executor.yaml index 534c1713..18f98058 100644 --- a/executors/openssl-tls13-key-update-executor/test-executors/openssl-tls13-key-update-executor.yaml +++ b/executors/openssl-tls13-key-update-executor/test-executors/openssl-tls13-key-update-executor.yaml @@ -46,7 +46,6 @@ metricsAvailability: availableKinds: [validation, operation-outcomes, transferred-bytes, tls-negotiation, key-update] parser: id: protocol-lab-tls-json - type: protocol-lab-tls-json preservesRawOutput: true telemetry: supported: true diff --git a/executors/quic-go-raw-load/source/go.mod b/executors/quic-go-raw-load/source/go.mod index 7664bdfa..ecd7ee25 100644 --- a/executors/quic-go-raw-load/source/go.mod +++ b/executors/quic-go-raw-load/source/go.mod @@ -7,7 +7,7 @@ toolchain go1.26.5 require github.com/quic-go/quic-go v0.60.0 require ( - golang.org/x/crypto v0.51.0 // indirect + golang.org/x/crypto v0.53.0 // indirect golang.org/x/net v0.55.0 // indirect - golang.org/x/sys v0.45.0 // indirect + golang.org/x/sys v0.46.0 // indirect ) diff --git a/executors/quic-go-raw-load/source/go.sum b/executors/quic-go-raw-load/source/go.sum index 7b2a1969..4e7a1bcb 100644 --- a/executors/quic-go-raw-load/source/go.sum +++ b/executors/quic-go-raw-load/source/go.sum @@ -10,11 +10,11 @@ github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= go.uber.org/mock v0.5.2 h1:LbtPTcP8A5k9WPXj54PPPbjcI4Y6lhyOZXn+VS7wNko= go.uber.org/mock v0.5.2/go.mod h1:wLlUxC2vVTPTaE3UD51E0BGOAElKrILxhVSDYQLld5o= -golang.org/x/crypto v0.51.0 h1:IBPXwPfKxY7cWQZ38ZCIRPI50YLeevDLlLnyC5wRGTI= -golang.org/x/crypto v0.51.0/go.mod h1:8AdwkbraGNABw2kOX6YFPs3WM22XqI4EXEd8g+x7Oc8= +golang.org/x/crypto v0.53.0 h1:QZ4Muo8THX6CizN2vPPd5fBGHyogrdK9fG4wLPFUsto= +golang.org/x/crypto v0.53.0/go.mod h1:DNLU434OwVakk9PzuwV8w62mAJpRJL3vsgcfp4Qnsio= golang.org/x/net v0.55.0 h1:bcvxaJn3e1U6InsFWt1JUq1aSjnRxLzT2rtD2KfkDF8= golang.org/x/net v0.55.0/go.mod h1:L5U2KuzuOe1lY7Z+aWVIKK6qEeJXnXV9yzGA+WCHJww= -golang.org/x/sys v0.45.0 h1:dO4czNzziLiiXplLQgBCEpCvXQ3dnkn0SdaZSYdQ+FY= -golang.org/x/sys v0.45.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/sys v0.46.0 h1:noSf2Fq6F8DBgS+LysIkx7rIExoNHJsxOAtPp4rthXw= +golang.org/x/sys v0.46.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/executors/quic-go-raw-load/test-executors/quic-go-raw-load.yaml b/executors/quic-go-raw-load/test-executors/quic-go-raw-load.yaml index 16537d8b..9efd999c 100644 --- a/executors/quic-go-raw-load/test-executors/quic-go-raw-load.yaml +++ b/executors/quic-go-raw-load/test-executors/quic-go-raw-load.yaml @@ -135,15 +135,12 @@ scenarioCoverage: status: supported quic.transport.stream-download.1mb: status: supported - behavior: exact deterministic 1MiB server-to-client payload validation quic.transport.stream-throughput.16mb: status: supported quic.transport.sustained-stream.256x64kb: status: supported - behavior: exactly 256 sequential 64KiB writes on one long-lived stream quic.transport.sustained-download.256x64kb: status: supported - behavior: exact deterministic 16MiB server-to-client payload delivered as 256 sequential 64KiB writes quic.transport.latency.echo-1kb: status: supported quic.transport.multiplex.100x1kb: diff --git a/executors/rustls-tls13-early-data-executor/protocol-lab-package.json b/executors/rustls-tls13-early-data-executor/protocol-lab-package.json index 29a32017..a213ef59 100644 --- a/executors/rustls-tls13-early-data-executor/protocol-lab-package.json +++ b/executors/rustls-tls13-early-data-executor/protocol-lab-package.json @@ -12,5 +12,5 @@ "scenarios": ["tls.early-data.accepted", "tls.early-data.rejected"], "tests": ["tls.early-data.accepted", "tls.early-data.rejected"] }], - "dependencies": {} + "dependencies": {"requiredCapabilities": []} } diff --git a/executors/rustls-tls13-early-data-executor/test-executors/rustls-tls13-early-data-executor.yaml b/executors/rustls-tls13-early-data-executor/test-executors/rustls-tls13-early-data-executor.yaml index 0bdf8d1c..5fdadc19 100644 --- a/executors/rustls-tls13-early-data-executor/test-executors/rustls-tls13-early-data-executor.yaml +++ b/executors/rustls-tls13-early-data-executor/test-executors/rustls-tls13-early-data-executor.yaml @@ -48,7 +48,6 @@ metricsAvailability: availableKinds: [validation, handshakes-per-second, latency-percentiles, operation-outcomes, tls-negotiation, resumption, early-data] parser: id: protocol-lab-tls-json - type: protocol-lab-tls-json preservesRawOutput: true telemetry: supported: true diff --git a/executors/xquic-http3-client/test-executors/xquic-http3-client.yaml b/executors/xquic-http3-client/test-executors/xquic-http3-client.yaml index a068c22e..640ab79a 100644 --- a/executors/xquic-http3-client/test-executors/xquic-http3-client.yaml +++ b/executors/xquic-http3-client/test-executors/xquic-http3-client.yaml @@ -65,7 +65,6 @@ metricsAvailability: - validation parser: id: protocol-lab-http-json - type: protocol-lab-http-json preservesRawOutput: true telemetry: supported: true @@ -80,6 +79,3 @@ telemetry: - raw export_modes: - artifact-bundle -executionMetadata: - upstreamImage: ghcr.io/alibaba/xquic/xquic-interop@sha256:875df1e9935c6a07e26d7b5ae14df9edd06703061ce35920234a97d6991c58e0 - manifest: protocol-lab.internal.json diff --git a/implementations/aioquic-raw/source/requirements-build.txt b/implementations/aioquic-raw/source/requirements-build.txt index 8eedf3be..8410915f 100644 --- a/implementations/aioquic-raw/source/requirements-build.txt +++ b/implementations/aioquic-raw/source/requirements-build.txt @@ -3,13 +3,13 @@ altgraph==0.17.5 attrs==26.1.0 certifi==2026.6.17 cffi==2.1.0 -cryptography==49.0.0 +cryptography==50.0.0 packaging==26.2 pycparser==3.0 pyinstaller==6.17.0 pyinstaller-hooks-contrib==2026.6 pylsqpack==0.3.24 -pyopenssl==26.3.0 +pyopenssl==26.4.0 service-identity==26.1.0 setuptools==83.0.0 typing-extensions==4.16.0 diff --git a/implementations/gnutls-serv/protocol-lab-package.json b/implementations/gnutls-serv/protocol-lab-package.json index 137f10c0..c27c709e 100644 --- a/implementations/gnutls-serv/protocol-lab-package.json +++ b/implementations/gnutls-serv/protocol-lab-package.json @@ -11,5 +11,5 @@ "protocols": ["tls"], "scenarios": ["tls.handshake.full"] }], - "dependencies": {} + "dependencies": {"requiredCapabilities": []} } diff --git a/implementations/go-dns-classic-authority/protocol-lab-package.json b/implementations/go-dns-classic-authority/protocol-lab-package.json index 72403d67..45d4285b 100644 --- a/implementations/go-dns-classic-authority/protocol-lab-package.json +++ b/implementations/go-dns-classic-authority/protocol-lab-package.json @@ -6,5 +6,5 @@ "displayName":"Go Classic DNS Local Fixture Authority", "entryManifests":["implementations/go-dns-classic-authority.yaml"], "providedImplementations":[{"implementationId":"go-dns-classic-authority","displayName":"Go Classic DNS Local Fixture Authority","protocols":["dns-udp","dns-tcp"],"scenarios":["dns.classic.udp.query.a","dns.classic.tcp.query.a","dns.classic.udp-truncated-tcp-retry"]}], - "dependencies":{} + "dependencies":{"requiredCapabilities":[]} } diff --git a/implementations/go-dns-doh2/protocol-lab-package.json b/implementations/go-dns-doh2/protocol-lab-package.json index ca1b152c..123f0157 100644 --- a/implementations/go-dns-doh2/protocol-lab-package.json +++ b/implementations/go-dns-doh2/protocol-lab-package.json @@ -20,5 +20,5 @@ ] } ], - "dependencies": {} + "dependencies": {"requiredCapabilities": []} } diff --git a/implementations/go-dns-doh3/protocol-lab-package.json b/implementations/go-dns-doh3/protocol-lab-package.json index 6406246b..404aa79c 100644 --- a/implementations/go-dns-doh3/protocol-lab-package.json +++ b/implementations/go-dns-doh3/protocol-lab-package.json @@ -26,5 +26,5 @@ ] } ], - "dependencies": {} + "dependencies": {"requiredCapabilities": []} } diff --git a/implementations/go-dns-doh3/source/go.mod b/implementations/go-dns-doh3/source/go.mod index d412c8d8..2dcb48ac 100644 --- a/implementations/go-dns-doh3/source/go.mod +++ b/implementations/go-dns-doh3/source/go.mod @@ -9,11 +9,11 @@ require ( require ( github.com/quic-go/qpack v0.6.0 // indirect - golang.org/x/crypto v0.51.0 // indirect - golang.org/x/mod v0.35.0 // indirect + golang.org/x/crypto v0.53.0 // indirect + golang.org/x/mod v0.36.0 // indirect golang.org/x/net v0.55.0 // indirect - golang.org/x/sync v0.20.0 // indirect - golang.org/x/sys v0.45.0 // indirect - golang.org/x/text v0.37.0 // indirect - golang.org/x/tools v0.44.0 // indirect + golang.org/x/sync v0.21.0 // indirect + golang.org/x/sys v0.46.0 // indirect + golang.org/x/text v0.38.0 // indirect + golang.org/x/tools v0.45.0 // indirect ) diff --git a/implementations/go-dns-doh3/source/go.sum b/implementations/go-dns-doh3/source/go.sum index 6fa5bf44..e3a0e43b 100644 --- a/implementations/go-dns-doh3/source/go.sum +++ b/implementations/go-dns-doh3/source/go.sum @@ -16,19 +16,19 @@ github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= go.uber.org/mock v0.5.2 h1:LbtPTcP8A5k9WPXj54PPPbjcI4Y6lhyOZXn+VS7wNko= go.uber.org/mock v0.5.2/go.mod h1:wLlUxC2vVTPTaE3UD51E0BGOAElKrILxhVSDYQLld5o= -golang.org/x/crypto v0.51.0 h1:IBPXwPfKxY7cWQZ38ZCIRPI50YLeevDLlLnyC5wRGTI= -golang.org/x/crypto v0.51.0/go.mod h1:8AdwkbraGNABw2kOX6YFPs3WM22XqI4EXEd8g+x7Oc8= -golang.org/x/mod v0.35.0 h1:Ww1D637e6Pg+Zb2KrWfHQUnH2dQRLBQyAtpr/haaJeM= -golang.org/x/mod v0.35.0/go.mod h1:+GwiRhIInF8wPm+4AoT6L0FA1QWAad3OMdTRx4tFYlU= +golang.org/x/crypto v0.53.0 h1:QZ4Muo8THX6CizN2vPPd5fBGHyogrdK9fG4wLPFUsto= +golang.org/x/crypto v0.53.0/go.mod h1:DNLU434OwVakk9PzuwV8w62mAJpRJL3vsgcfp4Qnsio= +golang.org/x/mod v0.36.0 h1:JJjpVx6myfUsUdAzZuOSTTmRE0PfZeNWzzvKrP7amb4= +golang.org/x/mod v0.36.0/go.mod h1:moc6ELqsWcOw5Ef3xVprK5ul/MvtVvkIXLziUOICjUQ= golang.org/x/net v0.55.0 h1:bcvxaJn3e1U6InsFWt1JUq1aSjnRxLzT2rtD2KfkDF8= golang.org/x/net v0.55.0/go.mod h1:L5U2KuzuOe1lY7Z+aWVIKK6qEeJXnXV9yzGA+WCHJww= -golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4= -golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= -golang.org/x/sys v0.45.0 h1:dO4czNzziLiiXplLQgBCEpCvXQ3dnkn0SdaZSYdQ+FY= -golang.org/x/sys v0.45.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= -golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc= -golang.org/x/text v0.37.0/go.mod h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38= -golang.org/x/tools v0.44.0 h1:UP4ajHPIcuMjT1GqzDWRlalUEoY+uzoZKnhOjbIPD2c= -golang.org/x/tools v0.44.0/go.mod h1:KA0AfVErSdxRZIsOVipbv3rQhVXTnlU6UhKxHd1seDI= +golang.org/x/sync v0.21.0 h1:HLII4xRRTtCRkxYp4HNFF0Js/Og6q2i++KXbg0gHCwM= +golang.org/x/sync v0.21.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= +golang.org/x/sys v0.46.0 h1:noSf2Fq6F8DBgS+LysIkx7rIExoNHJsxOAtPp4rthXw= +golang.org/x/sys v0.46.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/text v0.38.0 h1:sXmwo9DwP3OK9EZ7PqAdaooSGozfl/3a6/xJcbzPRhE= +golang.org/x/text v0.38.0/go.mod h1:YXZt3QhHUKYT53r2lLKFIVi6Ao1jdzrTR/KQ09qyxF4= +golang.org/x/tools v0.45.0 h1:18qN3FAooORvApf5XjCXgsuayZOEtXf6JK18I3+ONa8= +golang.org/x/tools v0.45.0/go.mod h1:LuUGqqaXcXMEFEruIVJVm5mgDD8vww/z/SR1gQ4uE/0= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/implementations/go-dns-doq/protocol-lab-package.json b/implementations/go-dns-doq/protocol-lab-package.json index 2d3f0905..26c10658 100644 --- a/implementations/go-dns-doq/protocol-lab-package.json +++ b/implementations/go-dns-doq/protocol-lab-package.json @@ -20,5 +20,5 @@ ] } ], - "dependencies": {} + "dependencies": {"requiredCapabilities": []} } diff --git a/implementations/go-dns-doq/source/go.mod b/implementations/go-dns-doq/source/go.mod index a0c2824e..461997b1 100644 --- a/implementations/go-dns-doq/source/go.mod +++ b/implementations/go-dns-doq/source/go.mod @@ -5,7 +5,7 @@ go 1.25.0 require github.com/quic-go/quic-go v0.60.0 require ( - golang.org/x/crypto v0.51.0 // indirect + golang.org/x/crypto v0.53.0 // indirect golang.org/x/net v0.55.0 // indirect - golang.org/x/sys v0.45.0 // indirect + golang.org/x/sys v0.46.0 // indirect ) diff --git a/implementations/go-dns-doq/source/go.sum b/implementations/go-dns-doq/source/go.sum index 7b2a1969..4e7a1bcb 100644 --- a/implementations/go-dns-doq/source/go.sum +++ b/implementations/go-dns-doq/source/go.sum @@ -10,11 +10,11 @@ github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= go.uber.org/mock v0.5.2 h1:LbtPTcP8A5k9WPXj54PPPbjcI4Y6lhyOZXn+VS7wNko= go.uber.org/mock v0.5.2/go.mod h1:wLlUxC2vVTPTaE3UD51E0BGOAElKrILxhVSDYQLld5o= -golang.org/x/crypto v0.51.0 h1:IBPXwPfKxY7cWQZ38ZCIRPI50YLeevDLlLnyC5wRGTI= -golang.org/x/crypto v0.51.0/go.mod h1:8AdwkbraGNABw2kOX6YFPs3WM22XqI4EXEd8g+x7Oc8= +golang.org/x/crypto v0.53.0 h1:QZ4Muo8THX6CizN2vPPd5fBGHyogrdK9fG4wLPFUsto= +golang.org/x/crypto v0.53.0/go.mod h1:DNLU434OwVakk9PzuwV8w62mAJpRJL3vsgcfp4Qnsio= golang.org/x/net v0.55.0 h1:bcvxaJn3e1U6InsFWt1JUq1aSjnRxLzT2rtD2KfkDF8= golang.org/x/net v0.55.0/go.mod h1:L5U2KuzuOe1lY7Z+aWVIKK6qEeJXnXV9yzGA+WCHJww= -golang.org/x/sys v0.45.0 h1:dO4czNzziLiiXplLQgBCEpCvXQ3dnkn0SdaZSYdQ+FY= -golang.org/x/sys v0.45.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/sys v0.46.0 h1:noSf2Fq6F8DBgS+LysIkx7rIExoNHJsxOAtPp4rthXw= +golang.org/x/sys v0.46.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/implementations/go-dns-dot/protocol-lab-package.json b/implementations/go-dns-dot/protocol-lab-package.json index 465759ff..d4ef5551 100644 --- a/implementations/go-dns-dot/protocol-lab-package.json +++ b/implementations/go-dns-dot/protocol-lab-package.json @@ -20,5 +20,5 @@ ] } ], - "dependencies": {} + "dependencies": {"requiredCapabilities": []} } diff --git a/implementations/go-grpc-h2/protocol-lab-package.json b/implementations/go-grpc-h2/protocol-lab-package.json index 1c02ce84..5fff97d7 100644 --- a/implementations/go-grpc-h2/protocol-lab-package.json +++ b/implementations/go-grpc-h2/protocol-lab-package.json @@ -11,5 +11,5 @@ "protocols": ["h2"], "scenarios": ["grpc.h2.unary.echo","grpc.h2.unary.empty","grpc.h2.unary.fixed-metadata","grpc.h2.unary.gzip","grpc.h2.unary.large","grpc.h2.server-streaming.echo","grpc.h2.client-streaming.echo","grpc.h2.bidi-streaming.echo","grpc.h2.trailers-only-status","grpc.h2.deadline-exceeded","grpc.h2.client-cancellation","grpc.h2.unary.echo-new-channel"] }], - "dependencies": {} + "dependencies": {"requiredCapabilities": []} } diff --git a/implementations/go-http1-websocket-tls/protocol-lab-package.json b/implementations/go-http1-websocket-tls/protocol-lab-package.json index 0e39a33f..26e2ac08 100644 --- a/implementations/go-http1-websocket-tls/protocol-lab-package.json +++ b/implementations/go-http1-websocket-tls/protocol-lab-package.json @@ -11,5 +11,5 @@ "protocols":["h1","tls"], "scenarios":["http1.websocket.rfc6455.tls.upgrade","http1.websocket.rfc6455.tls.control-frames","http1.websocket.rfc6455.tls.text-echo","http1.websocket.rfc6455.tls.binary-echo","http1.websocket.rfc6455.tls.close","http1.websocket.rfc6455.tls.subprotocol-text-echo","http1.websocket.rfc6455.tls.permessage-deflate-binary-echo"] }], - "dependencies":{} + "dependencies":{"requiredCapabilities":[]} } diff --git a/implementations/go-http1-websocket/protocol-lab-package.json b/implementations/go-http1-websocket/protocol-lab-package.json index 7ce4ebe1..dc18a4ea 100644 --- a/implementations/go-http1-websocket/protocol-lab-package.json +++ b/implementations/go-http1-websocket/protocol-lab-package.json @@ -11,5 +11,5 @@ "protocols":["h1"], "scenarios":["http1.websocket.rfc6455.cleartext.upgrade","http1.websocket.rfc6455.cleartext.control-frames","http1.websocket.rfc6455.cleartext.text-echo","http1.websocket.rfc6455.cleartext.binary-echo","http1.websocket.rfc6455.cleartext.close"] }], - "dependencies":{} + "dependencies":{"requiredCapabilities":[]} } diff --git a/implementations/go-tls12/protocol-lab-package.json b/implementations/go-tls12/protocol-lab-package.json index 2ebbdd5f..9b4a232e 100644 --- a/implementations/go-tls12/protocol-lab-package.json +++ b/implementations/go-tls12/protocol-lab-package.json @@ -6,5 +6,5 @@ "displayName": "Go TLS 1.2 Compatibility Target", "entryManifests": ["implementations/go-tls12.yaml"], "providedImplementations": [{"implementationId":"go-tls12","displayName":"Go crypto/tls TLS 1.2 Compatibility","protocols":["tls"],"scenarios":["tls.handshake.full.tls12"]}], - "dependencies": {} + "dependencies": {"requiredCapabilities": []} } diff --git a/implementations/go-tls13-chacha20/protocol-lab-package.json b/implementations/go-tls13-chacha20/protocol-lab-package.json index 5c269173..f21b254e 100644 --- a/implementations/go-tls13-chacha20/protocol-lab-package.json +++ b/implementations/go-tls13-chacha20/protocol-lab-package.json @@ -1 +1 @@ -{"schemaVersion":"protocol-lab-package-v2","packageId":"org.protocol-lab.components.implementation.go-tls13-chacha20","packageVersion":"0.1.0","kind":"implementation","displayName":"Go TLS 1.3 ChaCha20 Target","entryManifests":["implementations/go-tls13-chacha20.yaml"],"providedImplementations":[{"implementationId":"go-tls13-chacha20","displayName":"Go crypto/tls TLS 1.3 ChaCha20","protocols":["tls"],"scenarios":["tls.handshake.full.chacha20"]}],"dependencies":{}} +{"schemaVersion":"protocol-lab-package-v2","packageId":"org.protocol-lab.components.implementation.go-tls13-chacha20","packageVersion":"0.1.0","kind":"implementation","displayName":"Go TLS 1.3 ChaCha20 Target","entryManifests":["implementations/go-tls13-chacha20.yaml"],"providedImplementations":[{"implementationId":"go-tls13-chacha20","displayName":"Go crypto/tls TLS 1.3 ChaCha20","protocols":["tls"],"scenarios":["tls.handshake.full.chacha20"]}],"dependencies":{"requiredCapabilities":[]}} diff --git a/implementations/go-tls13-mtls/protocol-lab-package.json b/implementations/go-tls13-mtls/protocol-lab-package.json index c8106e14..64234b1b 100644 --- a/implementations/go-tls13-mtls/protocol-lab-package.json +++ b/implementations/go-tls13-mtls/protocol-lab-package.json @@ -11,5 +11,5 @@ "protocols": ["tls"], "scenarios": ["tls.handshake.mutual-auth"] }], - "dependencies": {} + "dependencies": {"requiredCapabilities": []} } diff --git a/implementations/go-tls13/protocol-lab-package.json b/implementations/go-tls13/protocol-lab-package.json index 8fa95d35..18d51ac3 100644 --- a/implementations/go-tls13/protocol-lab-package.json +++ b/implementations/go-tls13/protocol-lab-package.json @@ -11,5 +11,5 @@ "protocols": ["tls"], "scenarios": ["tls.handshake.full", "tls.handshake.resumed", "tls.record.throughput", "tls.record.coverage"] }], - "dependencies": {} + "dependencies": {"requiredCapabilities": []} } diff --git a/implementations/grpc-java-netty/source/pom.xml b/implementations/grpc-java-netty/source/pom.xml index 2c896c07..4265b12d 100644 --- a/implementations/grpc-java-netty/source/pom.xml +++ b/implementations/grpc-java-netty/source/pom.xml @@ -1,6 +1,6 @@ 4.0.0org.protocollabgrpc-java-netty-target0.1.0 - 211.73.03.25.5 + 211.83.13.25.5 io.grpcgrpc-netty-shaded${grpc.version} io.grpcgrpc-protobuf${grpc.version} diff --git a/implementations/jetty-http2-websocket/docker/pom.xml b/implementations/jetty-http2-websocket/docker/pom.xml index fa8335d9..4c661ea7 100644 --- a/implementations/jetty-http2-websocket/docker/pom.xml +++ b/implementations/jetty-http2-websocket/docker/pom.xml @@ -4,7 +4,7 @@ org.protocol-lab protocol-lab-jetty-http2-websocket 0.1.1 - 21UTF-812.1.9 + 21UTF-812.1.12 org.eclipse.jettyjetty-server${jetty.version} org.eclipse.jettyjetty-alpn-server${jetty.version} diff --git a/implementations/jetty-websocket/docker/pom.xml b/implementations/jetty-websocket/docker/pom.xml index 42ac0ab3..d5dab17d 100644 --- a/implementations/jetty-websocket/docker/pom.xml +++ b/implementations/jetty-websocket/docker/pom.xml @@ -7,7 +7,7 @@ 21 UTF-8 - 12.1.9 + 12.1.12 diff --git a/implementations/kestrel-http2-websocket/protocol-lab-package.json b/implementations/kestrel-http2-websocket/protocol-lab-package.json index 39d94222..4060a125 100644 --- a/implementations/kestrel-http2-websocket/protocol-lab-package.json +++ b/implementations/kestrel-http2-websocket/protocol-lab-package.json @@ -1 +1 @@ -{"schemaVersion":"protocol-lab-package-v2","packageId":"org.protocol-lab.components.implementation.kestrel-http2-websocket","packageVersion":"0.1.2","kind":"implementation","displayName":"Kestrel HTTP/2 RFC 8441 WebSocket Origin","entryManifests":["implementations/kestrel-http2-websocket.yaml"],"providedImplementations":[{"implementationId":"kestrel-http2-websocket","displayName":"Kestrel HTTP/2 RFC 8441 WebSocket Origin","protocols":["h2","tls"],"scenarios":["http2.websocket.rfc8441.extended-connect","http2.websocket.rfc8441.control-frames","http2.websocket.rfc8441.text-echo","http2.websocket.rfc8441.binary-echo","http2.websocket.rfc8441.close","http2.websocket.rfc8441.multi-message-text-echo"]}],"dependencies":{}} +{"schemaVersion":"protocol-lab-package-v2","packageId":"org.protocol-lab.components.implementation.kestrel-http2-websocket","packageVersion":"0.1.2","kind":"implementation","displayName":"Kestrel HTTP/2 RFC 8441 WebSocket Origin","entryManifests":["implementations/kestrel-http2-websocket.yaml"],"providedImplementations":[{"implementationId":"kestrel-http2-websocket","displayName":"Kestrel HTTP/2 RFC 8441 WebSocket Origin","protocols":["h2","tls"],"scenarios":["http2.websocket.rfc8441.extended-connect","http2.websocket.rfc8441.control-frames","http2.websocket.rfc8441.text-echo","http2.websocket.rfc8441.binary-echo","http2.websocket.rfc8441.close","http2.websocket.rfc8441.multi-message-text-echo"]}],"dependencies":{"requiredCapabilities":[]}} diff --git a/implementations/openssl-s-server/protocol-lab-package.json b/implementations/openssl-s-server/protocol-lab-package.json index aa42cc15..95a7a02f 100644 --- a/implementations/openssl-s-server/protocol-lab-package.json +++ b/implementations/openssl-s-server/protocol-lab-package.json @@ -11,5 +11,5 @@ "protocols": ["tls"], "scenarios": ["tls.handshake.full"] }], - "dependencies": {} + "dependencies": {"requiredCapabilities": []} } diff --git a/implementations/openssl-tls13-key-update/protocol-lab-package.json b/implementations/openssl-tls13-key-update/protocol-lab-package.json index cf517509..c691f614 100644 --- a/implementations/openssl-tls13-key-update/protocol-lab-package.json +++ b/implementations/openssl-tls13-key-update/protocol-lab-package.json @@ -11,5 +11,5 @@ "protocols": ["tls"], "scenarios": ["tls.key-update.diagnostic"] }], - "dependencies": {} + "dependencies": {"requiredCapabilities": []} } diff --git a/implementations/quic-go-http3/go.mod b/implementations/quic-go-http3/go.mod index e6c00a6f..c719d132 100644 --- a/implementations/quic-go-http3/go.mod +++ b/implementations/quic-go-http3/go.mod @@ -6,8 +6,8 @@ require github.com/quic-go/quic-go v0.60.0 require ( github.com/quic-go/qpack v0.6.0 // indirect - golang.org/x/crypto v0.51.0 // indirect + golang.org/x/crypto v0.53.0 // indirect golang.org/x/net v0.55.0 // indirect - golang.org/x/sys v0.45.0 // indirect - golang.org/x/text v0.37.0 // indirect + golang.org/x/sys v0.46.0 // indirect + golang.org/x/text v0.38.0 // indirect ) diff --git a/implementations/quic-go-http3/go.sum b/implementations/quic-go-http3/go.sum index f4f3cc25..ced72652 100644 --- a/implementations/quic-go-http3/go.sum +++ b/implementations/quic-go-http3/go.sum @@ -12,13 +12,13 @@ github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= go.uber.org/mock v0.5.2 h1:LbtPTcP8A5k9WPXj54PPPbjcI4Y6lhyOZXn+VS7wNko= go.uber.org/mock v0.5.2/go.mod h1:wLlUxC2vVTPTaE3UD51E0BGOAElKrILxhVSDYQLld5o= -golang.org/x/crypto v0.51.0 h1:IBPXwPfKxY7cWQZ38ZCIRPI50YLeevDLlLnyC5wRGTI= -golang.org/x/crypto v0.51.0/go.mod h1:8AdwkbraGNABw2kOX6YFPs3WM22XqI4EXEd8g+x7Oc8= +golang.org/x/crypto v0.53.0 h1:QZ4Muo8THX6CizN2vPPd5fBGHyogrdK9fG4wLPFUsto= +golang.org/x/crypto v0.53.0/go.mod h1:DNLU434OwVakk9PzuwV8w62mAJpRJL3vsgcfp4Qnsio= golang.org/x/net v0.55.0 h1:bcvxaJn3e1U6InsFWt1JUq1aSjnRxLzT2rtD2KfkDF8= golang.org/x/net v0.55.0/go.mod h1:L5U2KuzuOe1lY7Z+aWVIKK6qEeJXnXV9yzGA+WCHJww= -golang.org/x/sys v0.45.0 h1:dO4czNzziLiiXplLQgBCEpCvXQ3dnkn0SdaZSYdQ+FY= -golang.org/x/sys v0.45.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= -golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc= -golang.org/x/text v0.37.0/go.mod h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38= +golang.org/x/sys v0.46.0 h1:noSf2Fq6F8DBgS+LysIkx7rIExoNHJsxOAtPp4rthXw= +golang.org/x/sys v0.46.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/text v0.38.0 h1:sXmwo9DwP3OK9EZ7PqAdaooSGozfl/3a6/xJcbzPRhE= +golang.org/x/text v0.38.0/go.mod h1:YXZt3QhHUKYT53r2lLKFIVi6Ao1jdzrTR/KQ09qyxF4= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/implementations/quic-go-raw/source/go.mod b/implementations/quic-go-raw/source/go.mod index 0b54d04c..d4434f20 100644 --- a/implementations/quic-go-raw/source/go.mod +++ b/implementations/quic-go-raw/source/go.mod @@ -5,7 +5,7 @@ go 1.25.0 require github.com/quic-go/quic-go v0.60.0 require ( - golang.org/x/crypto v0.51.0 // indirect + golang.org/x/crypto v0.53.0 // indirect golang.org/x/net v0.55.0 // indirect - golang.org/x/sys v0.45.0 // indirect + golang.org/x/sys v0.46.0 // indirect ) diff --git a/implementations/quic-go-raw/source/go.sum b/implementations/quic-go-raw/source/go.sum index 7b2a1969..4e7a1bcb 100644 --- a/implementations/quic-go-raw/source/go.sum +++ b/implementations/quic-go-raw/source/go.sum @@ -10,11 +10,11 @@ github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= go.uber.org/mock v0.5.2 h1:LbtPTcP8A5k9WPXj54PPPbjcI4Y6lhyOZXn+VS7wNko= go.uber.org/mock v0.5.2/go.mod h1:wLlUxC2vVTPTaE3UD51E0BGOAElKrILxhVSDYQLld5o= -golang.org/x/crypto v0.51.0 h1:IBPXwPfKxY7cWQZ38ZCIRPI50YLeevDLlLnyC5wRGTI= -golang.org/x/crypto v0.51.0/go.mod h1:8AdwkbraGNABw2kOX6YFPs3WM22XqI4EXEd8g+x7Oc8= +golang.org/x/crypto v0.53.0 h1:QZ4Muo8THX6CizN2vPPd5fBGHyogrdK9fG4wLPFUsto= +golang.org/x/crypto v0.53.0/go.mod h1:DNLU434OwVakk9PzuwV8w62mAJpRJL3vsgcfp4Qnsio= golang.org/x/net v0.55.0 h1:bcvxaJn3e1U6InsFWt1JUq1aSjnRxLzT2rtD2KfkDF8= golang.org/x/net v0.55.0/go.mod h1:L5U2KuzuOe1lY7Z+aWVIKK6qEeJXnXV9yzGA+WCHJww= -golang.org/x/sys v0.45.0 h1:dO4czNzziLiiXplLQgBCEpCvXQ3dnkn0SdaZSYdQ+FY= -golang.org/x/sys v0.45.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/sys v0.46.0 h1:noSf2Fq6F8DBgS+LysIkx7rIExoNHJsxOAtPp4rthXw= +golang.org/x/sys v0.46.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/implementations/rust-hyper-origin/source/Cargo.lock b/implementations/rust-hyper-origin/source/Cargo.lock index 4ead5779..dd7847e1 100644 --- a/implementations/rust-hyper-origin/source/Cargo.lock +++ b/implementations/rust-hyper-origin/source/Cargo.lock @@ -46,9 +46,9 @@ checksum = "b588b76d00fde79687d7646a9b5bdf3cc0f655e0bbd080335a95d7e96f3587da" [[package]] name = "bytes" -version = "1.10.1" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" +checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04" [[package]] name = "cfg-if" diff --git a/implementations/rust-hyper-origin/source/Cargo.toml b/implementations/rust-hyper-origin/source/Cargo.toml index a9c00e53..a5e9f21b 100644 --- a/implementations/rust-hyper-origin/source/Cargo.toml +++ b/implementations/rust-hyper-origin/source/Cargo.toml @@ -6,7 +6,7 @@ rust-version = "1.88" license = "MIT OR Apache-2.0" [dependencies] -bytes = "=1.10.1" +bytes = "=1.12.1" http-body-util = "=0.1.3" hyper = { version = "=1.6.0", features = ["http1", "http2", "server"] } hyper-util = { version = "=0.1.16", features = ["http1", "http2", "server", "tokio"] } diff --git a/implementations/rustls-tls13-early-data/protocol-lab-package.json b/implementations/rustls-tls13-early-data/protocol-lab-package.json index 9671a38e..40e51a2c 100644 --- a/implementations/rustls-tls13-early-data/protocol-lab-package.json +++ b/implementations/rustls-tls13-early-data/protocol-lab-package.json @@ -11,5 +11,5 @@ "protocols": ["tls"], "scenarios": ["tls.early-data.accepted", "tls.early-data.rejected"] }], - "dependencies": {} + "dependencies": {"requiredCapabilities": []} } diff --git a/implementations/rustls-tls13/protocol-lab-package.json b/implementations/rustls-tls13/protocol-lab-package.json index d90f195b..ab2e340e 100644 --- a/implementations/rustls-tls13/protocol-lab-package.json +++ b/implementations/rustls-tls13/protocol-lab-package.json @@ -11,5 +11,5 @@ "protocols": ["tls"], "scenarios": ["tls.handshake.full"] }], - "dependencies": {} + "dependencies": {"requiredCapabilities": []} } diff --git a/implementations/webtransport-go/go.mod b/implementations/webtransport-go/go.mod index 6debf450..72d37005 100644 --- a/implementations/webtransport-go/go.mod +++ b/implementations/webtransport-go/go.mod @@ -10,8 +10,8 @@ require ( require ( github.com/dunglas/httpsfv v1.1.0 // indirect github.com/quic-go/qpack v0.6.0 // indirect - golang.org/x/crypto v0.51.0 // indirect + golang.org/x/crypto v0.53.0 // indirect golang.org/x/net v0.55.0 // indirect - golang.org/x/sys v0.45.0 // indirect - golang.org/x/text v0.37.0 // indirect + golang.org/x/sys v0.46.0 // indirect + golang.org/x/text v0.38.0 // indirect ) diff --git a/implementations/webtransport-go/go.sum b/implementations/webtransport-go/go.sum index 6d7007e3..153172ac 100644 --- a/implementations/webtransport-go/go.sum +++ b/implementations/webtransport-go/go.sum @@ -16,13 +16,13 @@ github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= go.uber.org/mock v0.5.2 h1:LbtPTcP8A5k9WPXj54PPPbjcI4Y6lhyOZXn+VS7wNko= go.uber.org/mock v0.5.2/go.mod h1:wLlUxC2vVTPTaE3UD51E0BGOAElKrILxhVSDYQLld5o= -golang.org/x/crypto v0.51.0 h1:IBPXwPfKxY7cWQZ38ZCIRPI50YLeevDLlLnyC5wRGTI= -golang.org/x/crypto v0.51.0/go.mod h1:8AdwkbraGNABw2kOX6YFPs3WM22XqI4EXEd8g+x7Oc8= +golang.org/x/crypto v0.53.0 h1:QZ4Muo8THX6CizN2vPPd5fBGHyogrdK9fG4wLPFUsto= +golang.org/x/crypto v0.53.0/go.mod h1:DNLU434OwVakk9PzuwV8w62mAJpRJL3vsgcfp4Qnsio= golang.org/x/net v0.55.0 h1:bcvxaJn3e1U6InsFWt1JUq1aSjnRxLzT2rtD2KfkDF8= golang.org/x/net v0.55.0/go.mod h1:L5U2KuzuOe1lY7Z+aWVIKK6qEeJXnXV9yzGA+WCHJww= -golang.org/x/sys v0.45.0 h1:dO4czNzziLiiXplLQgBCEpCvXQ3dnkn0SdaZSYdQ+FY= -golang.org/x/sys v0.45.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= -golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc= -golang.org/x/text v0.37.0/go.mod h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38= +golang.org/x/sys v0.46.0 h1:noSf2Fq6F8DBgS+LysIkx7rIExoNHJsxOAtPp4rthXw= +golang.org/x/sys v0.46.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/text v0.38.0 h1:sXmwo9DwP3OK9EZ7PqAdaooSGozfl/3a6/xJcbzPRhE= +golang.org/x/text v0.38.0/go.mod h1:YXZt3QhHUKYT53r2lLKFIVi6Ao1jdzrTR/KQ09qyxF4= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/release/component-graph.v1.json b/release/component-graph.v1.json index 239b0f28..cc433c4a 100644 --- a/release/component-graph.v1.json +++ b/release/component-graph.v1.json @@ -1786,6 +1786,36 @@ "build": { "script": "scripts/package/Build-EnvoyConnectUdpPackage.ps1", "arguments": [] }, "inputs": { "payload": ["implementations/envoy-connect-udp"], "buildRecipe": ["scripts/package/Build-EnvoyConnectUdpPackage.ps1"], "shared": ["shared.package-builder"], "fixtures": [], "templates": [], "contracts": [{ "id": "protocol-lab-package-v2", "repository": "protocol-lab", "version": "v2" }], "toolchains": [{ "id": "docker", "version": "declared-runtime" }, { "id": "powershell", "version": "7" }] }, "dependsOn": [{ "componentId": "masque-connect-udp-performance", "kind": "compatibility" }], "reverseDependencies": [], "owners": ["@SamuelMcAravey"], "smoke": null + }, + { + "id": "go-nethttp-http2", "packageId": "org.protocol-lab.components.implementation.go-nethttp-http2", "packageRoot": "implementations/go-nethttp-http2", "kind": "implementation", "migrationState": "modeled", + "build": { "script": "scripts/package/Build-GoNetHttpHttp2Package.ps1", "arguments": ["win-x64", "linux-x64"] }, + "inputs": { "payload": ["implementations/go-nethttp-http2"], "buildRecipe": ["scripts/package/Build-GoNetHttpHttp2Package.ps1", "scripts/package/Build-GoNetHttpOriginPackage.ps1"], "shared": ["shared.package-builder"], "fixtures": [], "templates": [], "contracts": [{ "id": "protocol-lab-package-v2", "repository": "protocol-lab", "version": "v2" }], "toolchains": [{ "id": "go", "version": "declared-runtime" }, { "id": "powershell", "version": "7" }] }, + "dependsOn": [], "reverseDependencies": [], "owners": ["@SamuelMcAravey"], "smoke": null + }, + { + "id": "haproxy-http-gateway", "packageId": "org.protocol-lab.components.implementation.haproxy-http-gateway", "packageRoot": "implementations/haproxy-http-gateway", "kind": "implementation", "migrationState": "modeled", + "build": { "script": "scripts/package/Build-HaproxyHttpGatewayPackage.ps1", "arguments": [] }, + "inputs": { "payload": ["implementations/haproxy-http-gateway"], "buildRecipe": ["scripts/package/Build-HaproxyHttpGatewayPackage.ps1"], "shared": ["shared.package-builder"], "fixtures": [], "templates": [], "contracts": [{ "id": "protocol-lab-package-v2", "repository": "protocol-lab", "version": "v2" }], "toolchains": [{ "id": "docker", "version": "declared-runtime" }, { "id": "bash", "version": "declared-runtime" }, { "id": "powershell", "version": "7" }] }, + "dependsOn": [], "reverseDependencies": [], "owners": ["@SamuelMcAravey"], "smoke": null + }, + { + "id": "jetty-http-origin", "packageId": "org.protocol-lab.components.implementation.jetty-http-origin", "packageRoot": "implementations/jetty-http-origin", "kind": "implementation", "migrationState": "modeled", + "build": { "script": "scripts/package/Build-JettyHttpOriginPackage.ps1", "arguments": [] }, + "inputs": { "payload": ["implementations/jetty-http-origin"], "buildRecipe": ["scripts/package/Build-JettyHttpOriginPackage.ps1"], "shared": ["shared.package-builder"], "fixtures": [], "templates": [], "contracts": [{ "id": "protocol-lab-package-v2", "repository": "protocol-lab", "version": "v2" }], "toolchains": [{ "id": "docker", "version": "declared-runtime" }, { "id": "bash", "version": "declared-runtime" }, { "id": "powershell", "version": "7" }] }, + "dependsOn": [], "reverseDependencies": [], "owners": ["@SamuelMcAravey"], "smoke": null + }, + { + "id": "node-http2", "packageId": "org.protocol-lab.components.implementation.node-http2", "packageRoot": "implementations/node-http2", "kind": "implementation", "migrationState": "modeled", + "build": { "script": "scripts/package/Build-NodeHttp2Package.ps1", "arguments": [] }, + "inputs": { "payload": ["implementations/node-http2"], "buildRecipe": ["scripts/package/Build-NodeHttp2Package.ps1"], "shared": ["shared.package-builder"], "fixtures": [], "templates": [], "contracts": [{ "id": "protocol-lab-package-v2", "repository": "protocol-lab", "version": "v2" }], "toolchains": [{ "id": "node", "version": "declared-runtime" }, { "id": "docker", "version": "declared-runtime" }, { "id": "powershell", "version": "7" }] }, + "dependsOn": [], "reverseDependencies": [], "owners": ["@SamuelMcAravey"], "smoke": null + }, + { + "id": "rust-hyper-origin", "packageId": "org.protocol-lab.components.implementation.rust-hyper-origin", "packageRoot": "implementations/rust-hyper-origin", "kind": "implementation", "migrationState": "modeled", + "build": { "script": "scripts/package/Build-RustHyperOriginPackage.ps1", "arguments": [] }, + "inputs": { "payload": ["implementations/rust-hyper-origin"], "buildRecipe": ["scripts/package/Build-RustHyperOriginPackage.ps1"], "shared": ["shared.package-builder"], "fixtures": [], "templates": [], "contracts": [{ "id": "protocol-lab-package-v2", "repository": "protocol-lab", "version": "v2" }], "toolchains": [{ "id": "docker", "version": "declared-runtime" }, { "id": "bash", "version": "declared-runtime" }, { "id": "powershell", "version": "7" }] }, + "dependsOn": [], "reverseDependencies": [], "owners": ["@SamuelMcAravey"], "smoke": null } ], "externalComponentContract": { diff --git a/scenarios/aioquic-rfc9220-websocket/protocol-lab-package.json b/scenarios/aioquic-rfc9220-websocket/protocol-lab-package.json index f0bd4c84..f775653d 100644 --- a/scenarios/aioquic-rfc9220-websocket/protocol-lab-package.json +++ b/scenarios/aioquic-rfc9220-websocket/protocol-lab-package.json @@ -12,9 +12,7 @@ "scenarios/http3/websocket/rfc9220-close.yaml", "scenarios/http3/websocket/rfc9220-fragmented-binary-echo.yaml", "suites/aioquic-rfc9220-websocket-proof.yaml", - "suites/aioquic-rfc9220-websocket-fragmentation-diagnostic.yaml", - "load-profiles/websocket-smoke.yaml", - "load-profiles/diagnostic.yaml" + "suites/aioquic-rfc9220-websocket-fragmentation-diagnostic.yaml" ], "providedScenarios": [ { diff --git a/scenarios/dns-classic-calibration/protocol-lab-package.json b/scenarios/dns-classic-calibration/protocol-lab-package.json index 3ec46bb7..7b4f85b9 100644 --- a/scenarios/dns-classic-calibration/protocol-lab-package.json +++ b/scenarios/dns-classic-calibration/protocol-lab-package.json @@ -4,7 +4,7 @@ "packageVersion":"0.1.1", "kind":"scenario-pack", "displayName":"Classic DNS Calibration Diagnostic Scenario Pack", - "entryManifests":["scenarios/dns/classic/query-a-udp.yaml","scenarios/dns/classic/query-a-tcp.yaml","scenarios/dns/classic/udp-truncated-tcp-retry.yaml","suites/dns-classic-calibration-diagnostic-smoke.yaml","load-profiles/dns-classic-diagnostic.yaml","fixtures/canonical-plab-test-a-v2.json","fixtures/canonical-dnskey-plab-test-large-edns-dnssec-shaped.json"], + "entryManifests":["scenarios/dns/classic/query-a-udp.yaml","scenarios/dns/classic/query-a-tcp.yaml","scenarios/dns/classic/udp-truncated-tcp-retry.yaml","suites/dns-classic-calibration-diagnostic-smoke.yaml"], "providedScenarios":[ {"scenarioId":"dns.classic.udp.query.a","displayName":"Classic DNS UDP Deterministic A Calibration","protocols":["dns-udp"]}, {"scenarioId":"dns.classic.tcp.query.a","displayName":"Classic DNS TCP Deterministic A Calibration","protocols":["dns-tcp"]}, diff --git a/scenarios/dns-doh2-performance/protocol-lab-package.json b/scenarios/dns-doh2-performance/protocol-lab-package.json index 3579bf8e..ff4c7f03 100644 --- a/scenarios/dns-doh2-performance/protocol-lab-package.json +++ b/scenarios/dns-doh2-performance/protocol-lab-package.json @@ -4,7 +4,7 @@ "packageVersion":"0.3.0", "kind":"scenario-pack", "displayName":"DNS-over-HTTPS HTTP/2 Performance Smoke Scenario Pack", - "entryManifests":["scenarios/dns/doh2/query-a.yaml","scenarios/dns/doh2/interoperability-query-a.yaml","scenarios/dns/doh2/resolver-interoperability-query-a.yaml","suites/dns-doh2-performance-smoke.yaml","suites/dns-doh2-interoperability-smoke.yaml","suites/dns-doh2-resolver-interoperability-smoke.yaml","load-profiles/secure-dns-smoke.yaml","fixtures/canonical-plab-test-a.json","fixtures/canonical-resolver-plab-test-a-v2.json","fixtures/secure-dns-tls13-profile-v1.json","fixtures/secure-dns-interoperability-profile-v2.json"], + "entryManifests":["scenarios/dns/doh2/query-a.yaml","scenarios/dns/doh2/interoperability-query-a.yaml","scenarios/dns/doh2/resolver-interoperability-query-a.yaml","suites/dns-doh2-performance-smoke.yaml","suites/dns-doh2-interoperability-smoke.yaml","suites/dns-doh2-resolver-interoperability-smoke.yaml"], "providedScenarios":[{"scenarioId":"dns.doh2.query.a","displayName":"DNS over HTTPS HTTP/2 Deterministic A Query","protocols":["doh2"]},{"scenarioId":"dns.doh2.interoperability.query.a","displayName":"DNS over HTTPS HTTP/2 Authoritative Interoperability A Query","protocols":["doh2"]},{"scenarioId":"dns.doh2.resolver.interoperability.query.a","displayName":"DNS over HTTPS HTTP/2 Recursive Resolver Interoperability A Query","protocols":["doh2"]}], "providedSuites":[{"suiteId":"dns-doh2-performance-smoke","displayName":"DNS over HTTPS HTTP/2 Performance Smoke","protocols":["doh2"]},{"suiteId":"dns-doh2-interoperability-smoke","displayName":"DNS over HTTPS HTTP/2 Authoritative Interoperability Smoke","protocols":["doh2"],"purpose":"diagnostic","resultKind":"diagnostic"},{"suiteId":"dns-doh2-resolver-interoperability-smoke","displayName":"DNS over HTTPS HTTP/2 Recursive Resolver Interoperability Smoke","protocols":["doh2"],"purpose":"diagnostic","resultKind":"diagnostic"}] } diff --git a/scenarios/dns-doh3-performance/protocol-lab-package.json b/scenarios/dns-doh3-performance/protocol-lab-package.json index 8ec8d39d..395063e7 100644 --- a/scenarios/dns-doh3-performance/protocol-lab-package.json +++ b/scenarios/dns-doh3-performance/protocol-lab-package.json @@ -1 +1 @@ -{"schemaVersion":"protocol-lab-package-v2","packageId":"org.protocol-lab.components.scenario.dns-doh3-performance","packageVersion":"0.2.0","kind":"scenario-pack","displayName":"DNS-over-HTTPS HTTP/3 Performance Scenario Pack","entryManifests":["scenarios/dns/doh3/query-a.yaml","scenarios/dns/doh3/interoperability-query-a.yaml","scenarios/dns/doh3/get-a.yaml","scenarios/dns/doh3/query-aaaa.yaml","scenarios/dns/doh3/query-cname-chain.yaml","scenarios/dns/doh3/query-large-dnssec-shaped.yaml","scenarios/dns/doh3/query-nodata.yaml","scenarios/dns/doh3/query-nxdomain.yaml","suites/dns-doh3-performance-smoke.yaml","suites/dns-doh3-semantics-diagnostic-smoke.yaml","suites/dns-doh3-performance-comparison.yaml","suites/dns-doh3-interoperability-smoke.yaml","load-profiles/secure-dns-smoke.yaml","load-profiles/secure-dns-comparison.yaml","fixtures/canonical-plab-test-a.json","fixtures/canonical-plab-test-a-v2.json","fixtures/canonical-plab-test-aaaa.json","fixtures/canonical-alias-plab-test-cname-chain.json","fixtures/canonical-dnskey-plab-test-large-edns-dnssec-shaped.json","fixtures/canonical-plab-test-txt-nodata.json","fixtures/canonical-missing-plab-test-nxdomain.json","fixtures/secure-dns-tls13-profile-v1.json","fixtures/secure-dns-interoperability-profile-v2.json"],"providedScenarios":[{"scenarioId":"dns.doh3.query.a","displayName":"DoH3 deterministic A POST","protocols":["doh3"]},{"scenarioId":"dns.doh3.get.a","displayName":"DoH3 deterministic A GET","protocols":["doh3"]},{"scenarioId":"dns.doh3.query.aaaa","displayName":"DoH3 deterministic AAAA POST","protocols":["doh3"]},{"scenarioId":"dns.doh3.query.cname-chain","displayName":"DoH3 deterministic CNAME chain POST","protocols":["doh3"]},{"scenarioId":"dns.doh3.query.large-dnssec-shaped","displayName":"DoH3 large DNSSEC-shaped POST","protocols":["doh3"]},{"scenarioId":"dns.doh3.query.nodata","displayName":"DoH3 deterministic NODATA POST","protocols":["doh3"]},{"scenarioId":"dns.doh3.query.nxdomain","displayName":"DoH3 deterministic NXDOMAIN POST","protocols":["doh3"]},{"scenarioId":"dns.doh3.interoperability.query.a","displayName":"DoH3 authoritative interoperability A POST","protocols":["doh3"]}],"providedSuites":[{"suiteId":"dns-doh3-performance-smoke","protocols":["doh3"]},{"suiteId":"dns-doh3-semantics-diagnostic-smoke","protocols":["doh3"]},{"suiteId":"dns-doh3-performance-comparison","protocols":["doh3"]},{"suiteId":"dns-doh3-interoperability-smoke","protocols":["doh3"],"purpose":"diagnostic","resultKind":"diagnostic"}]} +{"schemaVersion":"protocol-lab-package-v2","packageId":"org.protocol-lab.components.scenario.dns-doh3-performance","packageVersion":"0.2.0","kind":"scenario-pack","displayName":"DNS-over-HTTPS HTTP/3 Performance Scenario Pack","entryManifests":["scenarios/dns/doh3/query-a.yaml","scenarios/dns/doh3/interoperability-query-a.yaml","scenarios/dns/doh3/get-a.yaml","scenarios/dns/doh3/query-aaaa.yaml","scenarios/dns/doh3/query-cname-chain.yaml","scenarios/dns/doh3/query-large-dnssec-shaped.yaml","scenarios/dns/doh3/query-nodata.yaml","scenarios/dns/doh3/query-nxdomain.yaml","suites/dns-doh3-performance-smoke.yaml","suites/dns-doh3-semantics-diagnostic-smoke.yaml","suites/dns-doh3-performance-comparison.yaml","suites/dns-doh3-interoperability-smoke.yaml"],"providedScenarios":[{"scenarioId":"dns.doh3.query.a","displayName":"DoH3 deterministic A POST","protocols":["doh3"]},{"scenarioId":"dns.doh3.get.a","displayName":"DoH3 deterministic A GET","protocols":["doh3"]},{"scenarioId":"dns.doh3.query.aaaa","displayName":"DoH3 deterministic AAAA POST","protocols":["doh3"]},{"scenarioId":"dns.doh3.query.cname-chain","displayName":"DoH3 deterministic CNAME chain POST","protocols":["doh3"]},{"scenarioId":"dns.doh3.query.large-dnssec-shaped","displayName":"DoH3 large DNSSEC-shaped POST","protocols":["doh3"]},{"scenarioId":"dns.doh3.query.nodata","displayName":"DoH3 deterministic NODATA POST","protocols":["doh3"]},{"scenarioId":"dns.doh3.query.nxdomain","displayName":"DoH3 deterministic NXDOMAIN POST","protocols":["doh3"]},{"scenarioId":"dns.doh3.interoperability.query.a","displayName":"DoH3 authoritative interoperability A POST","protocols":["doh3"]}],"providedSuites":[{"suiteId":"dns-doh3-performance-smoke","protocols":["doh3"]},{"suiteId":"dns-doh3-semantics-diagnostic-smoke","protocols":["doh3"]},{"suiteId":"dns-doh3-performance-comparison","protocols":["doh3"]},{"suiteId":"dns-doh3-interoperability-smoke","protocols":["doh3"],"purpose":"diagnostic","resultKind":"diagnostic"}]} diff --git a/scenarios/dns-doq-performance/protocol-lab-package.json b/scenarios/dns-doq-performance/protocol-lab-package.json index 99564b76..44208413 100644 --- a/scenarios/dns-doq-performance/protocol-lab-package.json +++ b/scenarios/dns-doq-performance/protocol-lab-package.json @@ -4,7 +4,7 @@ "packageVersion":"0.2.0", "kind":"scenario-pack", "displayName":"DNS-over-QUIC Performance Smoke Scenario Pack", - "entryManifests":["scenarios/dns/doq/query-a.yaml","scenarios/dns/doq/interoperability-query-a.yaml","suites/dns-doq-performance-smoke.yaml","suites/dns-doq-interoperability-smoke.yaml","load-profiles/secure-dns-smoke.yaml","fixtures/canonical-plab-test-a.json","fixtures/secure-dns-tls13-profile-v1.json","fixtures/secure-dns-interoperability-profile-v2.json"], + "entryManifests":["scenarios/dns/doq/query-a.yaml","scenarios/dns/doq/interoperability-query-a.yaml","suites/dns-doq-performance-smoke.yaml","suites/dns-doq-interoperability-smoke.yaml"], "providedScenarios":[{"scenarioId":"dns.doq.query.a","displayName":"DNS over QUIC Deterministic A Query","protocols":["doq"]},{"scenarioId":"dns.doq.interoperability.query.a","displayName":"DNS over QUIC Authoritative Interoperability A Query","protocols":["doq"]}], "providedSuites":[{"suiteId":"dns-doq-performance-smoke","displayName":"DNS over QUIC Performance Smoke","protocols":["doq"]},{"suiteId":"dns-doq-interoperability-smoke","displayName":"DNS over QUIC Authoritative Interoperability Smoke","protocols":["doq"],"purpose":"diagnostic","resultKind":"diagnostic"}] } diff --git a/scenarios/dns-dot-performance/protocol-lab-package.json b/scenarios/dns-dot-performance/protocol-lab-package.json index 11c42d4a..b3f40da0 100644 --- a/scenarios/dns-dot-performance/protocol-lab-package.json +++ b/scenarios/dns-dot-performance/protocol-lab-package.json @@ -4,7 +4,7 @@ "packageVersion":"0.3.0", "kind":"scenario-pack", "displayName":"DNS-over-TLS Performance Smoke Scenario Pack", - "entryManifests":["scenarios/dns/dot/query-a.yaml","scenarios/dns/dot/interoperability-query-a.yaml","scenarios/dns/dot/resolver-interoperability-query-a.yaml","suites/dns-dot-performance-smoke.yaml","suites/dns-dot-interoperability-smoke.yaml","suites/dns-dot-resolver-interoperability-smoke.yaml","load-profiles/secure-dns-smoke.yaml","fixtures/canonical-plab-test-a.json","fixtures/canonical-resolver-plab-test-a-v2.json","fixtures/secure-dns-tls13-profile-v1.json","fixtures/secure-dns-interoperability-profile-v2.json"], + "entryManifests":["scenarios/dns/dot/query-a.yaml","scenarios/dns/dot/interoperability-query-a.yaml","scenarios/dns/dot/resolver-interoperability-query-a.yaml","suites/dns-dot-performance-smoke.yaml","suites/dns-dot-interoperability-smoke.yaml","suites/dns-dot-resolver-interoperability-smoke.yaml"], "providedScenarios":[{"scenarioId":"dns.dot.query.a","displayName":"DNS over TLS Deterministic A Query","protocols":["dot"]},{"scenarioId":"dns.dot.interoperability.query.a","displayName":"DNS over TLS Authoritative Interoperability A Query","protocols":["dot"]},{"scenarioId":"dns.dot.resolver.interoperability.query.a","displayName":"DNS over TLS Recursive Resolver Interoperability A Query","protocols":["dot"]}], "providedSuites":[{"suiteId":"dns-dot-performance-smoke","displayName":"DNS over TLS Performance Smoke","protocols":["dot"]},{"suiteId":"dns-dot-interoperability-smoke","displayName":"DNS over TLS Authoritative Interoperability Smoke","protocols":["dot"],"purpose":"diagnostic","resultKind":"diagnostic"},{"suiteId":"dns-dot-resolver-interoperability-smoke","displayName":"DNS over TLS Recursive Resolver Interoperability Smoke","protocols":["dot"],"purpose":"diagnostic","resultKind":"diagnostic"}] } diff --git a/scenarios/grpc-h2-performance/protocol-lab-package.json b/scenarios/grpc-h2-performance/protocol-lab-package.json index e785692c..fd61178a 100644 --- a/scenarios/grpc-h2-performance/protocol-lab-package.json +++ b/scenarios/grpc-h2-performance/protocol-lab-package.json @@ -20,10 +20,7 @@ "suites/grpc-h2-performance-smoke.yaml", "suites/grpc-h2-contract-breadth-smoke.yaml", "suites/grpc-h2-terminal-outcomes-diagnostic.yaml", - "suites/grpc-h2-new-channel-diagnostic.yaml", - "load-profiles/grpc-h2-smoke.yaml", - "load-profiles/grpc-h2-diagnostic.yaml", - "load-profiles/grpc-h2-channel-churn.yaml" + "suites/grpc-h2-new-channel-diagnostic.yaml" ], "providedScenarios": [ { diff --git a/scenarios/http1-performance/protocol-lab-package.json b/scenarios/http1-performance/protocol-lab-package.json index a5b49cad..65eea96a 100644 --- a/scenarios/http1-performance/protocol-lab-package.json +++ b/scenarios/http1-performance/protocol-lab-package.json @@ -8,9 +8,7 @@ "scenarios/http1/core/plaintext.yaml", "scenarios/http1/core/json.yaml", "suites/http1-performance-smoke.yaml", - "suites/http1-comparison-benchmark.yaml", - "load-profiles/http1-smoke.yaml", - "load-profiles/http1-comparison.yaml" + "suites/http1-comparison-benchmark.yaml" ], "providedScenarios": [ { diff --git a/scenarios/http1-websocket-cleartext-performance/protocol-lab-package.json b/scenarios/http1-websocket-cleartext-performance/protocol-lab-package.json index b94c3a2e..dbf134ad 100644 --- a/scenarios/http1-websocket-cleartext-performance/protocol-lab-package.json +++ b/scenarios/http1-websocket-cleartext-performance/protocol-lab-package.json @@ -10,8 +10,7 @@ "scenarios/http1/websocket/rfc6455-cleartext-text-echo.yaml", "scenarios/http1/websocket/rfc6455-cleartext-binary-echo.yaml", "scenarios/http1/websocket/rfc6455-cleartext-close.yaml", - "suites/http1-websocket-cleartext-performance-smoke.yaml", - "load-profiles/websocket-smoke.yaml" + "suites/http1-websocket-cleartext-performance-smoke.yaml" ], "providedScenarios": [ {"scenarioId":"http1.websocket.rfc6455.cleartext.upgrade","displayName":"RFC 6455 HTTP/1.1 Cleartext Upgrade","protocols":["h1"]}, diff --git a/scenarios/http1-websocket-tls-performance/protocol-lab-package.json b/scenarios/http1-websocket-tls-performance/protocol-lab-package.json index 3b0d2222..258644db 100644 --- a/scenarios/http1-websocket-tls-performance/protocol-lab-package.json +++ b/scenarios/http1-websocket-tls-performance/protocol-lab-package.json @@ -12,8 +12,7 @@ "scenarios/http1/websocket/rfc6455-tls-close.yaml", "scenarios/http1/websocket/rfc6455-tls-subprotocol-text-echo.yaml", "scenarios/http1/websocket/rfc6455-tls-permessage-deflate-binary-echo.yaml", - "suites/http1-websocket-tls-performance-smoke.yaml", - "load-profiles/websocket-smoke.yaml" + "suites/http1-websocket-tls-performance-smoke.yaml" ], "providedScenarios": [ {"scenarioId":"http1.websocket.rfc6455.tls.upgrade","displayName":"RFC 6455 HTTP/1.1 TLS Upgrade","protocols":["h1","tls"]}, diff --git a/scenarios/http2-performance/protocol-lab-package.json b/scenarios/http2-performance/protocol-lab-package.json index 1800a478..81e06729 100644 --- a/scenarios/http2-performance/protocol-lab-package.json +++ b/scenarios/http2-performance/protocol-lab-package.json @@ -8,10 +8,7 @@ "scenarios/http2/core/plaintext.yaml", "scenarios/http2/core/json.yaml", "suites/http2-performance-smoke.yaml", - "suites/http2-comparison-benchmark.yaml", - "load-profiles/http2-smoke.yaml", - "load-profiles/http2-diagnostic.yaml", - "load-profiles/http2-comparison.yaml" + "suites/http2-comparison-benchmark.yaml" ], "providedScenarios": [ { diff --git a/scenarios/http2-websocket-performance/protocol-lab-package.json b/scenarios/http2-websocket-performance/protocol-lab-package.json index 6b395c41..070ba4de 100644 --- a/scenarios/http2-websocket-performance/protocol-lab-package.json +++ b/scenarios/http2-websocket-performance/protocol-lab-package.json @@ -13,10 +13,7 @@ "scenarios/http2/websocket/rfc8441-multi-message-text-echo.yaml", "suites/http2-websocket-performance-smoke.yaml", "suites/http2-websocket-performance-comparison.yaml", - "suites/http2-websocket-multi-message-diagnostic.yaml", - "load-profiles/websocket-smoke.yaml", - "load-profiles/websocket-comparison.yaml", - "load-profiles/diagnostic.yaml" + "suites/http2-websocket-multi-message-diagnostic.yaml" ], "providedScenarios": [ {"scenarioId":"http2.websocket.rfc8441.extended-connect","displayName":"RFC 8441 Extended CONNECT","protocols":["h2","tls"]}, diff --git a/scenarios/http2-websocket-performance/validate.ps1 b/scenarios/http2-websocket-performance/validate.ps1 index 394400eb..0c82a2c3 100644 --- a/scenarios/http2-websocket-performance/validate.ps1 +++ b/scenarios/http2-websocket-performance/validate.ps1 @@ -7,6 +7,4 @@ foreach($property in $lock.files.PSObject.Properties){$path=Join-Path $PSScriptR $manifest=Get-Content -LiteralPath (Join-Path $PSScriptRoot 'protocol-lab-package.json') -Raw|ConvertFrom-Json if($manifest.packageVersion-ne'0.1.2'){throw 'HTTP/2 WebSocket scenario package version must be 0.1.2.'} if((@($manifest.providedSuites.suiteId)-join ',')-ne'http2-websocket-performance-smoke,http2-websocket-performance-comparison,http2-websocket-multi-message-diagnostic'){throw 'HTTP/2 WebSocket suite declarations mismatch.'} -$expectedLoadProfiles=@('load-profiles/websocket-smoke.yaml','load-profiles/websocket-comparison.yaml','load-profiles/diagnostic.yaml') -foreach($loadProfile in $expectedLoadProfiles){if($loadProfile-notin@($manifest.entryManifests)){throw "HTTP/2 WebSocket load-profile entry manifest missing: $loadProfile"}} Write-Output "Validated HTTP/2 WebSocket scenario package authority lock at $($lock.commit)." diff --git a/scenarios/masque-connect-udp-performance/protocol-lab-package.json b/scenarios/masque-connect-udp-performance/protocol-lab-package.json index 89afcc0d..4bfe9c13 100644 --- a/scenarios/masque-connect-udp-performance/protocol-lab-package.json +++ b/scenarios/masque-connect-udp-performance/protocol-lab-package.json @@ -6,8 +6,7 @@ "displayName": "MASQUE CONNECT-UDP Performance Scenario Pack", "entryManifests": [ "scenarios/masque/connect-udp-tunnel.yaml", - "suites/masque-connect-udp-performance-comparison.yaml", - "load-profiles/masque-connect-udp-comparison.yaml" + "suites/masque-connect-udp-performance-comparison.yaml" ], "providedScenarios": [{"scenarioId": "masque.connect-udp-tunnel", "displayName": "MASQUE CONNECT-UDP Datagram Echo Tunnel", "protocols": ["masque", "h3", "udp"]}], "providedSuites": [{"suiteId": "masque-connect-udp-performance-comparison", "displayName": "MASQUE CONNECT-UDP Performance Comparison Candidate", "purpose": "benchmark", "resultKind": "benchmark", "protocols": ["masque", "h3", "udp"], "testExecutors": ["go-masque-connect-udp-executor"]}] diff --git a/scenarios/masque-connect-udp-performance/validate.ps1 b/scenarios/masque-connect-udp-performance/validate.ps1 index 273b393b..281d30c1 100644 --- a/scenarios/masque-connect-udp-performance/validate.ps1 +++ b/scenarios/masque-connect-udp-performance/validate.ps1 @@ -8,5 +8,4 @@ foreach($property in $lock.files.PSObject.Properties){$path=Join-Path $PSScriptR $manifest=Get-Content -LiteralPath (Join-Path $PSScriptRoot 'protocol-lab-package.json') -Raw|ConvertFrom-Json if($manifest.packageVersion-ne'0.1.1'){throw 'MASQUE scenario package version must be 0.1.1.'} if((@($manifest.providedSuites.suiteId)-join ',')-ne'masque-connect-udp-performance-comparison'){throw 'MASQUE suite declaration mismatch.'} -if('load-profiles/masque-connect-udp-comparison.yaml'-notin@($manifest.entryManifests)){throw 'MASQUE load-profile entry manifest missing.'} Write-Output "Validated MASQUE scenario package authority lock at $($lock.commit)." diff --git a/scenarios/tls13-handshake-performance/protocol-lab-package.json b/scenarios/tls13-handshake-performance/protocol-lab-package.json index ebb6038c..e97a3056 100644 --- a/scenarios/tls13-handshake-performance/protocol-lab-package.json +++ b/scenarios/tls13-handshake-performance/protocol-lab-package.json @@ -17,12 +17,7 @@ "scenarios/tls/record/throughput.yaml", "suites/tls-performance-smoke.yaml", "suites/tls-contract-breadth-smoke.yaml", - "suites/tls-security-diagnostics.yaml", - "load-profiles/tls-smoke.yaml", - "load-profiles/tls-diagnostic.yaml", - "fixtures/public-contracts/tls-record-coverage/valid/tls-record-coverage-v1.json", - "fixtures/public-contracts/tls-profile-v2/valid/tls13-aes128gcm-p256-server-auth-v2.json", - "fixtures/public-contracts/tls/valid/tls13-p256-profile-v1.json" + "suites/tls-security-diagnostics.yaml" ], "providedScenarios": [ { "scenarioId": "tls.handshake.full", "displayName": "TLS 1.3 Full Handshake", "protocols": ["tls"] }, diff --git a/scenarios/webtransport-performance/protocol-lab-package.json b/scenarios/webtransport-performance/protocol-lab-package.json index 0d466767..c1d9e899 100644 --- a/scenarios/webtransport-performance/protocol-lab-package.json +++ b/scenarios/webtransport-performance/protocol-lab-package.json @@ -8,9 +8,7 @@ "scenarios/webtransport/session-bidi-echo.yaml", "scenarios/webtransport/session-datagram-echo.yaml", "suites/webtransport-performance-smoke.yaml", - "suites/webtransport-datagram-performance-smoke.yaml", - "load-profiles/webtransport-smoke.yaml", - "load-profiles/webtransport-datagram-smoke.yaml" + "suites/webtransport-datagram-performance-smoke.yaml" ], "providedScenarios": [ {"scenarioId": "webtransport.session-bidi-echo", "displayName": "WebTransport Session Bidirectional Echo", "protocols": ["webtransport", "h3"]}, diff --git a/scenarios/webtransport-performance/validate.ps1 b/scenarios/webtransport-performance/validate.ps1 index 8aa4371b..275baa9f 100644 --- a/scenarios/webtransport-performance/validate.ps1 +++ b/scenarios/webtransport-performance/validate.ps1 @@ -7,5 +7,4 @@ foreach($property in $lock.files.PSObject.Properties){$path=Join-Path $PSScriptR $manifest=Get-Content -LiteralPath (Join-Path $PSScriptRoot 'protocol-lab-package.json') -Raw|ConvertFrom-Json if($manifest.packageVersion-ne'0.2.0'){throw 'WebTransport scenario package version must be 0.2.0.'} if((@($manifest.providedSuites.suiteId)-join ',')-ne'webtransport-performance-smoke,webtransport-datagram-performance-smoke'){throw 'WebTransport suite declaration mismatch.'} -foreach($path in @('load-profiles/webtransport-smoke.yaml','load-profiles/webtransport-datagram-smoke.yaml')){if($path-notin@($manifest.entryManifests)){throw "WebTransport load-profile entry manifest missing: $path"}} Write-Output "Validated WebTransport scenario package authority lock at $($lock.commit)." diff --git a/scripts/package/Build-AllProtocolLabComponentPackages.ps1 b/scripts/package/Build-AllProtocolLabComponentPackages.ps1 index 800809e4..01f5a5fe 100644 --- a/scripts/package/Build-AllProtocolLabComponentPackages.ps1 +++ b/scripts/package/Build-AllProtocolLabComponentPackages.ps1 @@ -33,6 +33,18 @@ function Assert-PathIsUnderRoot { } } +function Assert-DockerEngineAvailable { + $docker = Get-Command docker -ErrorAction SilentlyContinue + if ($null -eq $docker) { + throw 'The full ProtocolLab component catalog requires Docker Engine. Install Docker Desktop or Docker Engine, ensure docker is on PATH, and retry.' + } + + $serverVersion = @(& $docker.Source version --format '{{.Server.Version}}' 2>$null) + if ($LASTEXITCODE -ne 0 -or [string]::IsNullOrWhiteSpace(($serverVersion -join ' ').Trim())) { + throw 'The Docker CLI is available, but the Docker Engine is not responding. Start the Docker service and retry the full ProtocolLab component catalog build.' + } +} + function Read-ZipJsonEntry { param( [Parameter(Mandatory)][System.IO.Compression.ZipArchive]$Archive, @@ -256,6 +268,7 @@ function Write-ValidationSummaryMarkdown { $Root = (Resolve-Path $Root).Path $OutputRoot = [System.IO.Path]::GetFullPath($OutputRoot) Assert-PathIsUnderRoot -CandidatePath $OutputRoot -ExpectedRoot $Root +Assert-DockerEngineAvailable New-Item -ItemType Directory -Force -Path $OutputRoot | Out-Null @@ -292,6 +305,8 @@ $packageBuilds = @( [pscustomobject]@{ componentPath = 'implementations/go-tls13'; script = 'Build-GoTls13ImplementationPackage.ps1'; arguments = @('linux-x64') }, [pscustomobject]@{ componentPath = 'implementations/rustls-tls13'; script = 'Build-RustlsTls13ImplementationPackage.ps1'; arguments = @('win-x64') }, [pscustomobject]@{ componentPath = 'implementations/rustls-tls13'; script = 'Build-RustlsTls13ImplementationPackage.ps1'; arguments = @('linux-x64') }, + [pscustomobject]@{ componentPath = 'implementations/rustls-tls13-early-data'; script = 'Build-RustlsTls13EarlyDataImplementationPackage.ps1'; arguments = @('win-x64') }, + [pscustomobject]@{ componentPath = 'implementations/rustls-tls13-early-data'; script = 'Build-RustlsTls13EarlyDataImplementationPackage.ps1'; arguments = @('linux-x64') }, [pscustomobject]@{ componentPath = 'implementations/s2n-tls13'; script = 'Build-S2nTls13Package.ps1'; arguments = @() }, [pscustomobject]@{ componentPath = 'implementations/wolfssl-tls13'; script = 'Build-WolfsslTls13Package.ps1'; arguments = @() }, [pscustomobject]@{ componentPath = 'implementations/go-tls13-mtls'; script = 'Build-GoTls13MtlsImplementationPackage.ps1'; arguments = @('win-x64') }, @@ -314,8 +329,21 @@ $packageBuilds = @( [pscustomobject]@{ componentPath = 'implementations/go-dns-doh3'; script = 'Build-GoDnsDoh3Package.ps1'; arguments = @('linux-x64') }, [pscustomobject]@{ componentPath = 'implementations/go-http1-websocket'; script = 'Build-GoHttp1WebSocketImplementationPackage.ps1'; arguments = @('win-x64') }, [pscustomobject]@{ componentPath = 'implementations/go-http1-websocket'; script = 'Build-GoHttp1WebSocketImplementationPackage.ps1'; arguments = @('linux-x64') }, + [pscustomobject]@{ componentPath = 'implementations/go-http1-websocket-tls'; script = 'Build-GoHttp1WebSocketTlsImplementationPackage.ps1'; arguments = @('win-x64') }, + [pscustomobject]@{ componentPath = 'implementations/go-http1-websocket-tls'; script = 'Build-GoHttp1WebSocketTlsImplementationPackage.ps1'; arguments = @('linux-x64') }, + [pscustomobject]@{ componentPath = 'implementations/go-nethttp-http1'; script = 'Build-GoNetHttpHttp1Package.ps1'; arguments = @('win-x64') }, + [pscustomobject]@{ componentPath = 'implementations/go-nethttp-http1'; script = 'Build-GoNetHttpHttp1Package.ps1'; arguments = @('linux-x64') }, + [pscustomobject]@{ componentPath = 'implementations/go-nethttp-http2'; script = 'Build-GoNetHttpHttp2Package.ps1'; arguments = @('win-x64') }, + [pscustomobject]@{ componentPath = 'implementations/go-nethttp-http2'; script = 'Build-GoNetHttpHttp2Package.ps1'; arguments = @('linux-x64') }, + [pscustomobject]@{ componentPath = 'implementations/grpc-cpp'; script = 'Build-GrpcCppPackage.ps1'; arguments = @() }, + [pscustomobject]@{ componentPath = 'implementations/grpc-dotnet'; script = 'Build-GrpcDotNetPackage.ps1'; arguments = @() }, + [pscustomobject]@{ componentPath = 'implementations/grpc-java-netty'; script = 'Build-GrpcJavaNettyPackage.ps1'; arguments = @() }, + [pscustomobject]@{ componentPath = 'implementations/grpc-js'; script = 'Build-GrpcJsPackage.ps1'; arguments = @() }, [pscustomobject]@{ componentPath = 'implementations/websocat-http1-websocket'; script = 'Build-WebsocatHttp1WebSocketPackage.ps1'; arguments = @() }, [pscustomobject]@{ componentPath = 'implementations/node-ws-websocket'; script = 'Build-NodeWsWebSocketPackage.ps1'; arguments = @() }, + [pscustomobject]@{ componentPath = 'implementations/node-http1'; script = 'Build-NodeHttp1Package.ps1'; arguments = @() }, + [pscustomobject]@{ componentPath = 'implementations/node-http2'; script = 'Build-NodeHttp2Package.ps1'; arguments = @() }, + [pscustomobject]@{ componentPath = 'implementations/jetty-http-origin'; script = 'Build-JettyHttpOriginPackage.ps1'; arguments = @() }, [pscustomobject]@{ componentPath = 'implementations/jetty-websocket'; script = 'Build-JettyWebSocketPackage.ps1'; arguments = @() }, [pscustomobject]@{ componentPath = 'implementations/uwebsockets-websocket'; script = 'Build-UWebSocketsWebSocketPackage.ps1'; arguments = @() }, [pscustomobject]@{ componentPath = 'implementations/go-dns-doq'; script = 'Build-GoDnsDoqPackage.ps1'; arguments = @('win-x64') }, @@ -344,6 +372,7 @@ $packageBuilds = @( [pscustomobject]@{ componentPath = 'implementations/quic-go-http3'; script = 'Build-QuicGoHttp3Package.ps1'; arguments = @() }, [pscustomobject]@{ componentPath = 'implementations/quic-go-raw'; script = 'Build-QuicGoRawPackage.ps1'; arguments = @() }, [pscustomobject]@{ componentPath = 'implementations/quinn-raw'; script = 'Build-QuinnRawPackage.ps1'; arguments = @() }, + [pscustomobject]@{ componentPath = 'implementations/rust-hyper-origin'; script = 'Build-RustHyperOriginPackage.ps1'; arguments = @() }, [pscustomobject]@{ componentPath = 'implementations/s2n-quic-raw'; script = 'Build-S2nQuicRawPackage.ps1'; arguments = @() }, [pscustomobject]@{ componentPath = 'implementations/picoquic-raw'; script = 'Build-PicoquicRawPackage.ps1'; arguments = @() }, [pscustomobject]@{ componentPath = 'implementations/aioquic-raw'; script = 'Build-AioquicRawPackage.ps1'; arguments = @() }, @@ -390,6 +419,10 @@ $packageBuilds = @( [pscustomobject]@{ componentPath = 'executors/go-dns-doh3-executor'; script = 'Build-GoDnsDoh3ExecutorPackage.ps1'; arguments = @('linux-x64') }, [pscustomobject]@{ componentPath = 'executors/go-http1-websocket-executor'; script = 'Build-GoHttp1WebSocketExecutorPackage.ps1'; arguments = @('win-x64') }, [pscustomobject]@{ componentPath = 'executors/go-http1-websocket-executor'; script = 'Build-GoHttp1WebSocketExecutorPackage.ps1'; arguments = @('linux-x64') }, + [pscustomobject]@{ componentPath = 'executors/go-http1-websocket-tls-executor'; script = 'Build-GoHttp1WebSocketTlsExecutorPackage.ps1'; arguments = @('win-x64') }, + [pscustomobject]@{ componentPath = 'executors/go-http1-websocket-tls-executor'; script = 'Build-GoHttp1WebSocketTlsExecutorPackage.ps1'; arguments = @('linux-x64') }, + [pscustomobject]@{ componentPath = 'executors/rustls-tls13-early-data-executor'; script = 'Build-RustlsTls13EarlyDataExecutorPackage.ps1'; arguments = @('win-x64') }, + [pscustomobject]@{ componentPath = 'executors/rustls-tls13-early-data-executor'; script = 'Build-RustlsTls13EarlyDataExecutorPackage.ps1'; arguments = @('linux-x64') }, [pscustomobject]@{ componentPath = 'executors/go-dns-doq-executor'; script = 'Build-GoDnsDoqExecutorPackage.ps1'; arguments = @('win-x64') }, [pscustomobject]@{ componentPath = 'executors/go-dns-doq-executor'; script = 'Build-GoDnsDoqExecutorPackage.ps1'; arguments = @('linux-x64') }, [pscustomobject]@{ componentPath = 'executors/go-dns-udp-executor'; script = 'Build-GoDnsUdpExecutorPackage.ps1'; arguments = @('win-x64') }, @@ -405,6 +438,7 @@ $packageBuilds = @( [pscustomobject]@{ componentPath = 'scenarios/dns-doh2-performance'; script = 'Build-DnsDoh2PerformanceScenarioPackage.ps1'; arguments = @() }, [pscustomobject]@{ componentPath = 'scenarios/dns-doh3-performance'; script = 'Build-DnsDoh3PerformanceScenarioPackage.ps1'; arguments = @() }, [pscustomobject]@{ componentPath = 'scenarios/http1-websocket-cleartext-performance'; script = 'Build-Http1WebSocketCleartextScenarioPackage.ps1'; arguments = @() }, + [pscustomobject]@{ componentPath = 'scenarios/http1-websocket-tls-performance'; script = 'Build-Http1WebSocketTlsScenarioPackage.ps1'; arguments = @() }, [pscustomobject]@{ componentPath = 'scenarios/dns-doq-performance'; script = 'Build-DnsDoqPerformanceScenarioPackage.ps1'; arguments = @() }, [pscustomobject]@{ componentPath = 'scenarios/dns-classic-calibration'; script = 'Build-DnsClassicCalibrationScenarioPackage.ps1'; arguments = @() }, [pscustomobject]@{ componentPath = 'executors/h3spec-http3-qpack'; script = 'Build-H3SpecHttp3QpackPackage.ps1'; arguments = @() }, @@ -419,6 +453,23 @@ $packageBuilds = @( [pscustomobject]@{ componentPath = 'scenarios/masque-connect-udp-performance'; script = 'Build-MasqueConnectUdpScenarioPackage.ps1'; arguments = @() } ) +$manifestRoots = @( + Get-ChildItem -LiteralPath @( + (Join-Path $Root 'implementations'), + (Join-Path $Root 'executors'), + (Join-Path $Root 'scenarios') + ) -Recurse -File -Filter 'protocol-lab-package.json' | + ForEach-Object { Get-RelativePath -BasePath $Root -Path $_.Directory.FullName } | + Sort-Object -Unique +) +$builderRoots = @($packageBuilds | ForEach-Object { $_.componentPath } | Sort-Object -Unique) +$missingBuilderRoots = @( + $manifestRoots | Where-Object { $_ -notin $builderRoots } +) +if ($missingBuilderRoots.Count -gt 0) { + throw "Full package builder has no build entry for manifest root(s): $($missingBuilderRoots -join ', ')" +} + $builderResults = [System.Collections.Generic.List[object]]::new() $builtArtifacts = [System.Collections.Generic.List[System.IO.FileInfo]]::new() diff --git a/scripts/package/Build-GoUtlsTls13Chacha20ExecutorPackage.ps1 b/scripts/package/Build-GoUtlsTls13Chacha20ExecutorPackage.ps1 index f045cfae..5c9f78fa 100644 --- a/scripts/package/Build-GoUtlsTls13Chacha20ExecutorPackage.ps1 +++ b/scripts/package/Build-GoUtlsTls13Chacha20ExecutorPackage.ps1 @@ -1,3 +1,99 @@ [CmdletBinding()] -param([ValidateSet('win-x64','linux-x64')][string]$RuntimeIdentifier='win-x64',[string]$Root=(Resolve-Path (Join-Path $PSScriptRoot '../..')).Path,[string]$OutputRoot=(Join-Path $Root 'artifacts/packages'),[switch]$AllowDirtySource) -$ErrorActionPreference='Stop';$Root=[IO.Path]::GetFullPath($Root);$OutputRoot=[IO.Path]::GetFullPath($OutputRoot);$componentName='go-utls-tls13-chacha20-executor';$componentRoot=Join-Path $Root "executors/$componentName";$sourceRoot=Join-Path $componentRoot 'source';& go -C $sourceRoot test -count=1 ./...;if($LASTEXITCODE-ne 0){throw 'go-utls-tls13-chacha20-executor tests failed.'};$rid=switch($RuntimeIdentifier){'win-x64'{@{os='windows';arch='x64';goOs='windows';goArch='amd64';name='go-utls-tls13-chacha20-executor.exe'}}'linux-x64'{@{os='linux';arch='x64';goOs='linux';goArch='amd64';name='go-utls-tls13-chacha20-executor'}}};$staging=Join-Path $OutputRoot "$componentName/$RuntimeIdentifier";$packageRoot=Join-Path $staging 'package';Remove-Item -LiteralPath $staging -Recurse -Force -ErrorAction SilentlyContinue;New-Item -ItemType Directory -Force -Path (Join-Path $packageRoot "bin/$RuntimeIdentifier"),(Join-Path $packageRoot 'test-executors'),(Join-Path $packageRoot 'certs'),(Join-Path $packageRoot 'third-party')|Out-Null;$oldOS=$env:GOOS;$oldArch=$env:GOARCH;try{$env:GOOS=$rid.goOs;$env:GOARCH=$rid.goArch;& go -C $sourceRoot build -buildvcs=false -trimpath -o (Join-Path $packageRoot "bin/$RuntimeIdentifier/$($rid.name)") .;if($LASTEXITCODE-ne 0){throw "go-utls-tls13-chacha20-executor build failed for $RuntimeIdentifier."}}finally{$env:GOOS=$oldOS;$env:GOARCH=$oldArch};Copy-Item (Join-Path $componentRoot 'protocol-lab-package.json') $packageRoot;Copy-Item (Join-Path $componentRoot 'test-executors/go-utls-tls13-chacha20-executor.yaml') (Join-Path $packageRoot 'test-executors');Copy-Item (Join-Path $componentRoot 'toolchain.json') $packageRoot;Copy-Item (Join-Path $componentRoot 'certs/*') (Join-Path $packageRoot 'certs');$moduleCache=(& go env GOMODCACHE).Trim();$licenses=[ordered]@{'utls-LICENSE.txt'='github.com/refraction-networking/utls@v1.8.2/LICENSE';'brotli-LICENSE.txt'='github.com/andybalholm/brotli@v1.0.6/LICENSE';'klauspost-compress-LICENSE.txt'='github.com/klauspost/compress@v1.17.4/LICENSE';'golang-x-crypto-LICENSE.txt'='golang.org/x/crypto@v0.36.0/LICENSE';'golang-x-sys-LICENSE.txt'='golang.org/x/sys@v0.31.0/LICENSE'};foreach($license in $licenses.GetEnumerator()){$source=Join-Path $moduleCache $license.Value;if(-not(Test-Path -LiteralPath $source -PathType Leaf)){throw "Required third-party license missing: $source"};Copy-Item -LiteralPath $source -Destination (Join-Path $packageRoot "third-party/$($license.Key)")};$binaryPath="bin/$RuntimeIdentifier/$($rid.name)";$internal=Get-Content (Join-Path $componentRoot 'protocol-lab.internal.json') -Raw|ConvertFrom-Json;$internal.environments=@([ordered]@{os=$rid.os;arch=$rid.arch;entrypoint=[ordered]@{kind='process';path=$binaryPath;arguments=@();workingDirectory='.'}});$internal|ConvertTo-Json -Depth 20|Set-Content (Join-Path $packageRoot 'protocol-lab.internal.json') -Encoding utf8NoBOM;& (Join-Path $PSScriptRoot 'Build-ProtocolLabComponentPackage.ps1') -Root $Root -OutputRoot $OutputRoot -ComponentPath $packageRoot -SourceComponentPath $componentRoot -BuildConfiguration Release -RuntimeIdentifier $RuntimeIdentifier -ArtifactSuffix $RuntimeIdentifier -PreparedPackageRoot -AllowDirtySource:$AllowDirtySource +param( + [ValidateSet('win-x64', 'linux-x64')][string]$RuntimeIdentifier = 'win-x64', + [string]$Root = (Resolve-Path (Join-Path $PSScriptRoot '../..')).Path, + [string]$OutputRoot = (Join-Path $Root 'artifacts/packages'), + [switch]$AllowDirtySource +) + +$ErrorActionPreference = 'Stop' +$Root = [IO.Path]::GetFullPath($Root) +$OutputRoot = [IO.Path]::GetFullPath($OutputRoot) +$componentName = 'go-utls-tls13-chacha20-executor' +$componentRoot = Join-Path $Root "executors/$componentName" +$sourceRoot = Join-Path $componentRoot 'source' + +& go -C $sourceRoot test -count=1 ./... +if ($LASTEXITCODE -ne 0) { + throw 'go-utls-tls13-chacha20-executor tests failed.' +} + +$rid = switch ($RuntimeIdentifier) { + 'win-x64' { @{ os = 'windows'; arch = 'x64'; goOs = 'windows'; goArch = 'amd64'; name = 'go-utls-tls13-chacha20-executor.exe' } } + 'linux-x64' { @{ os = 'linux'; arch = 'x64'; goOs = 'linux'; goArch = 'amd64'; name = 'go-utls-tls13-chacha20-executor' } } +} +$staging = Join-Path $OutputRoot "$componentName/$RuntimeIdentifier" +$packageRoot = Join-Path $staging 'package' +Remove-Item -LiteralPath $staging -Recurse -Force -ErrorAction SilentlyContinue +New-Item -ItemType Directory -Force -Path ` + (Join-Path $packageRoot "bin/$RuntimeIdentifier"), ` + (Join-Path $packageRoot 'test-executors'), ` + (Join-Path $packageRoot 'certs'), ` + (Join-Path $packageRoot 'third-party') | Out-Null + +$oldOS = $env:GOOS +$oldArch = $env:GOARCH +try { + $env:GOOS = $rid.goOs + $env:GOARCH = $rid.goArch + & go -C $sourceRoot build -buildvcs=false -trimpath -o (Join-Path $packageRoot "bin/$RuntimeIdentifier/$($rid.name)") . + if ($LASTEXITCODE -ne 0) { + throw "go-utls-tls13-chacha20-executor build failed for $RuntimeIdentifier." + } +} +finally { + $env:GOOS = $oldOS + $env:GOARCH = $oldArch +} + +Copy-Item (Join-Path $componentRoot 'protocol-lab-package.json') $packageRoot +Copy-Item (Join-Path $componentRoot 'test-executors/go-utls-tls13-chacha20-executor.yaml') (Join-Path $packageRoot 'test-executors') +Copy-Item (Join-Path $componentRoot 'toolchain.json') $packageRoot +Copy-Item (Join-Path $componentRoot 'certs/*') (Join-Path $packageRoot 'certs') + +$licenses = [ordered]@{ + 'utls-LICENSE.txt' = 'github.com/refraction-networking/utls' + 'brotli-LICENSE.txt' = 'github.com/andybalholm/brotli' + 'klauspost-compress-LICENSE.txt' = 'github.com/klauspost/compress' + 'golang-x-crypto-LICENSE.txt' = 'golang.org/x/crypto' + 'golang-x-sys-LICENSE.txt' = 'golang.org/x/sys' +} +foreach ($license in $licenses.GetEnumerator()) { + $moduleRoot = (& go -C $sourceRoot list -m -f '{{.Dir}}' $license.Value).Trim() + if ($LASTEXITCODE -ne 0 -or [string]::IsNullOrWhiteSpace($moduleRoot)) { + throw "Unable to resolve third-party module directory: $($license.Value)" + } + + $source = Join-Path $moduleRoot 'LICENSE' + if (-not (Test-Path -LiteralPath $source -PathType Leaf)) { + throw "Required third-party license missing: $source" + } + Copy-Item -LiteralPath $source -Destination (Join-Path $packageRoot "third-party/$($license.Key)") +} + +$binaryPath = "bin/$RuntimeIdentifier/$($rid.name)" +$internal = Get-Content (Join-Path $componentRoot 'protocol-lab.internal.json') -Raw | ConvertFrom-Json +$internal.environments = @( + [ordered]@{ + os = $rid.os + arch = $rid.arch + entrypoint = [ordered]@{ + kind = 'process' + path = $binaryPath + arguments = @() + workingDirectory = '.' + } + } +) +$internal | ConvertTo-Json -Depth 20 | Set-Content (Join-Path $packageRoot 'protocol-lab.internal.json') -Encoding utf8NoBOM + +& (Join-Path $PSScriptRoot 'Build-ProtocolLabComponentPackage.ps1') ` + -Root $Root ` + -OutputRoot $OutputRoot ` + -ComponentPath $packageRoot ` + -SourceComponentPath $componentRoot ` + -BuildConfiguration Release ` + -RuntimeIdentifier $RuntimeIdentifier ` + -ArtifactSuffix $RuntimeIdentifier ` + -PreparedPackageRoot ` + -AllowDirtySource:$AllowDirtySource diff --git a/scripts/package/Get-ProtocolLabComponentReleaseSelection.ps1 b/scripts/package/Get-ProtocolLabComponentReleaseSelection.ps1 index c8b5c289..b9afa534 100644 --- a/scripts/package/Get-ProtocolLabComponentReleaseSelection.ps1 +++ b/scripts/package/Get-ProtocolLabComponentReleaseSelection.ps1 @@ -17,7 +17,10 @@ $unknown = [System.Collections.Generic.List[string]]::new() $templatePaths = @($graph.templates | ForEach-Object paths | ForEach-Object { $_ }) foreach ($inputPath in @($ChangedPath)) { - $path = ([string]$inputPath).Replace('\', '/').TrimStart('./') + $path = ([string]$inputPath).Replace('\', '/') + while ($path.StartsWith('./', [System.StringComparison]::Ordinal)) { + $path = $path.Substring(2) + } if ([string]::IsNullOrWhiteSpace($path)) { continue } $matched = $false if ($path -eq 'release/component-graph.v1.json' -or $path.StartsWith('release/release-intents/', [System.StringComparison]::OrdinalIgnoreCase)) { diff --git a/scripts/package/Invoke-ProtocolLabComponentSelectedBuilds.ps1 b/scripts/package/Invoke-ProtocolLabComponentSelectedBuilds.ps1 index 8a50978c..17948362 100644 --- a/scripts/package/Invoke-ProtocolLabComponentSelectedBuilds.ps1 +++ b/scripts/package/Invoke-ProtocolLabComponentSelectedBuilds.ps1 @@ -15,11 +15,15 @@ $selection = & (Join-Path $PSScriptRoot 'Get-ProtocolLabComponentReleaseSelectio if ($selection.fullBuildDryRunRequired) { Write-Warning "Unknown release inputs require legacy full-build dry-run under policy '$((Get-Content -LiteralPath $GraphPath -Raw | ConvertFrom-Json).unmodeledPackagePolicy)': $($selection.unknownPaths -join ', ')" } -if (-not $SkipBuild) { +if (-not $SkipBuild -and $selection.fullBuildDryRunRequired) { + Write-Host 'Skipping component-selected builds because the full package-production workflow is required.' +} +elseif (-not $SkipBuild) { foreach ($component in @($selection.selectedComponents)) { $scriptPath = Join-Path $Root $component.script Write-Host "Building selected component $($component.componentId) with $($component.script)." - & $scriptPath @($component.arguments) -Root $Root + $buildArguments = @($component.arguments | Where-Object { $null -ne $_ }) + & $scriptPath @buildArguments -Root $Root if ($LASTEXITCODE -ne 0) { throw "Selected component build failed for '$($component.componentId)'." } } } diff --git a/scripts/package/ProtocolLabComponentRelease.Common.ps1 b/scripts/package/ProtocolLabComponentRelease.Common.ps1 index 50856700..fed22c1b 100644 --- a/scripts/package/ProtocolLabComponentRelease.Common.ps1 +++ b/scripts/package/ProtocolLabComponentRelease.Common.ps1 @@ -71,9 +71,26 @@ function Get-ProtocolLabDeclaredFiles { @(Get-Item -LiteralPath $absolute -Force) } + $eligiblePayloadPaths = $null + if ($PackagePayload) { + $eligiblePayloadPaths = [System.Collections.Generic.HashSet[string]]::new([System.StringComparer]::OrdinalIgnoreCase) + $gitFiles = @(& git -C $Root ls-files --cached --others --exclude-standard -- $relative 2>$null) + if ($LASTEXITCODE -ne 0) { + throw "Unable to resolve the versioned and unignored package payload for '$relative'." + } + + foreach ($gitFile in $gitFiles) { + [void]$eligiblePayloadPaths.Add(([string]$gitFile).Replace('\', '/')) + } + } + foreach ($file in $candidates) { $fileRelative = [System.IO.Path]::GetRelativePath($Root, $file.FullName).Replace('\', '/') if ($PackagePayload) { + if (-not $eligiblePayloadPaths.Contains($fileRelative)) { + continue + } + $parts = $fileRelative -split '/' if ($parts -contains 'artifacts' -or $parts -contains 'packages' -or $parts -contains 'bin' -or $parts -contains 'obj' -or $parts -contains 'package.protocol-lab.json' -or $parts[-1] -eq 'README.md') { diff --git a/scripts/package/README.md b/scripts/package/README.md index c6083c99..7f3538a6 100644 --- a/scripts/package/README.md +++ b/scripts/package/README.md @@ -14,6 +14,14 @@ Component-specific build steps may live beside the component, but shared packagi ## Package Builders +For a first package build that does not require Docker, follow the +[five-minute source verification](../../docs/third-party-package-consumption.md#five-minute-source-verification). + +The full catalog requires PowerShell 7, Git, Docker Engine, .NET 10, Go, +Node.js, and Rust (`cargo` and `rustc`). Docker must be running, not merely +installed. Individual component builders can require fewer tools; consult the +component's `protocol-lab.internal.json`, toolchain metadata, and README. + Use the full package build orchestrator for CI artifacts and release handoff: ```powershell diff --git a/scripts/package/Test-Http2WebSocketThreePackageSmoke.ps1 b/scripts/package/Test-Http2WebSocketThreePackageSmoke.ps1 index bcdc27d1..b98eeba6 100644 --- a/scripts/package/Test-Http2WebSocketThreePackageSmoke.ps1 +++ b/scripts/package/Test-Http2WebSocketThreePackageSmoke.ps1 @@ -52,8 +52,9 @@ $authority = Get-Content (Join-Path $scenarioRoot 'authority-lock.json') -Raw | if ($authority.commit -ne '8c4bbe8b7ee94b0e53427dd5ac15e7ede7b77574') { throw 'authority commit mismatch' } if ($scenarioManifest.packageVersion -ne '0.1.2' -or $executorManifest.packageVersion -ne '0.2.0' -or $targetManifest.packageVersion -ne '0.1.2') { throw 'immutable package version mismatch' } if ($scenarioManifest.providedScenarios.Count -ne 6 -or $executorManifest.providedTestExecutors[0].scenarios.Count -ne 6 -or $targetManifest.providedImplementations[0].scenarios.Count -ne 6) { throw 'six-ID package claim mismatch' } -$loadProfileEntries = @($scenarioManifest.entryManifests | Where-Object { $_ -like 'load-profiles/*' } | Sort-Object) -if (($loadProfileEntries -join ',') -ne 'load-profiles/diagnostic.yaml,load-profiles/websocket-comparison.yaml,load-profiles/websocket-smoke.yaml') { throw 'scenario load-profile entry mismatch' } +foreach ($loadProfile in @('load-profiles/diagnostic.yaml', 'load-profiles/websocket-comparison.yaml', 'load-profiles/websocket-smoke.yaml')) { + if (-not (Test-Path -LiteralPath (Join-Path $scenarioRoot $loadProfile) -PathType Leaf)) { throw "scenario load-profile missing from package: $loadProfile" } +} foreach ($license in @('golang-x-net-LICENSE.txt', 'golang-x-text-LICENSE.txt')) { if (-not (Test-Path (Join-Path $executorRoot "third-party/$license"))) { throw "missing $license" } } diff --git a/scripts/package/Test-ProtocolLabComponentAwareReleaseSystem.ps1 b/scripts/package/Test-ProtocolLabComponentAwareReleaseSystem.ps1 index c1acfb12..559e5166 100644 --- a/scripts/package/Test-ProtocolLabComponentAwareReleaseSystem.ps1 +++ b/scripts/package/Test-ProtocolLabComponentAwareReleaseSystem.ps1 @@ -20,6 +20,14 @@ try { $after = Get-ClosureDigest 'http2-performance-scenarios' } finally { Remove-Item -LiteralPath $unrelatedPath -Force -ErrorAction SilentlyContinue } if ($before -ne $after) { throw 'An unrelated documentation file changed the modeled component closure digest.' } +$ignoredBuildRoot = Join-Path $Root 'scenarios/http2-performance/target/component-closure-ignore-test' +$ignoredBuildFile = Join-Path $ignoredBuildRoot 'active-build.lock' +New-Item -ItemType Directory -Force -Path $ignoredBuildRoot | Out-Null +Set-Content -LiteralPath $ignoredBuildFile -Value 'generated and gitignored build state' -Encoding utf8NoBOM +try { $afterIgnoredBuild = Get-ClosureDigest 'http2-performance-scenarios' } +finally { Remove-Item -LiteralPath $ignoredBuildRoot -Recurse -Force -ErrorAction SilentlyContinue } +if ($before -ne $afterIgnoredBuild) { throw 'Gitignored build output changed the modeled component closure digest.' } + $selection = & (Join-Path $PSScriptRoot 'Get-ProtocolLabComponentReleaseSelection.ps1') -Root $Root -GraphPath $graphPath -ChangedPath 'scenarios/http2-performance/scenarios/http2/core/plaintext.yaml' | ConvertFrom-Json if (@($selection.selectedComponents.componentId | Sort-Object) -join ',' -ne 'apache-http2,caddy-http2,go-http2-executor,http2-performance-scenarios,kestrel-http2,nginx-http2') { throw 'Declared reverse-dependency selection did not include the complete modeled HTTP/2 cohort.' @@ -114,6 +122,8 @@ if (@($certificateSelection.selectedComponents.componentId | Sort-Object) -join } $unknown = & (Join-Path $PSScriptRoot 'Get-ProtocolLabComponentReleaseSelection.ps1') -Root $Root -GraphPath $graphPath -ChangedPath 'unmodeled-release-input.txt' | ConvertFrom-Json if (-not $unknown.fullBuildDryRunRequired) { throw 'Unknown changes must require conservative full-build dry-run.' } +$dotPrefixedPath = & (Join-Path $PSScriptRoot 'Get-ProtocolLabComponentReleaseSelection.ps1') -Root $Root -GraphPath $graphPath -ChangedPath './.github/workflows/validate.yml' | ConvertFrom-Json +if (@($dotPrefixedPath.unknownPaths) -notcontains '.github/workflows/validate.yml') { throw 'A leading ./ prefix must not remove the dot from a repository path.' } Remove-Item -LiteralPath $ArtifactRoot -Recurse -Force -ErrorAction SilentlyContinue New-Item -ItemType Directory -Force -Path $ArtifactRoot | Out-Null diff --git a/scripts/package/Test-ProtocolLabComponentDocumentation.ps1 b/scripts/package/Test-ProtocolLabComponentDocumentation.ps1 new file mode 100644 index 00000000..3d86d966 --- /dev/null +++ b/scripts/package/Test-ProtocolLabComponentDocumentation.ps1 @@ -0,0 +1,58 @@ +[CmdletBinding()] +param( + [string]$Root = (Resolve-Path (Join-Path $PSScriptRoot '../..')).Path +) + +$ErrorActionPreference = 'Stop' +$Root = (Resolve-Path -LiteralPath $Root).Path +$documents = @( + 'README.md', + 'CONTRIBUTING.md', + 'docs/README.md', + 'docs/third-party-package-consumption.md', + 'scripts/package/README.md' +) +$errors = [System.Collections.Generic.List[string]]::new() +$linkPattern = [regex]'!?(?:\[[^\]]*\])\((?[^)]+)\)' +$localPathPattern = [regex]'(?[A-Za-z]:[\\/])' + +foreach ($relativeDocument in $documents) { + $documentPath = Join-Path $Root $relativeDocument + if (-not (Test-Path -LiteralPath $documentPath -PathType Leaf)) { + [void]$errors.Add("Missing public documentation entrypoint: $relativeDocument") + continue + } + + $content = Get-Content -LiteralPath $documentPath -Raw + if ($localPathPattern.IsMatch($content)) { + [void]$errors.Add("$relativeDocument contains an absolute workstation path.") + } + + foreach ($match in $linkPattern.Matches($content)) { + $target = $match.Groups['target'].Value.Trim().Trim('<', '>') + if ($target -match '^(?:https?://|mailto:|#)') { + continue + } + + $pathPart = ($target -split '#', 2)[0] + if ([string]::IsNullOrWhiteSpace($pathPart)) { + continue + } + + if ([System.IO.Path]::IsPathRooted($pathPart)) { + [void]$errors.Add("$relativeDocument links to an absolute local path: $target") + continue + } + + $resolvedTarget = [System.IO.Path]::GetFullPath((Join-Path (Split-Path -Parent $documentPath) $pathPart)) + if (-not (Test-Path -LiteralPath $resolvedTarget)) { + [void]$errors.Add("$relativeDocument has a broken repository link: $target") + } + } +} + +if ($errors.Count -gt 0) { + throw ($errors -join [Environment]::NewLine) +} + +Write-Host "Validated $($documents.Count) public documentation entrypoint(s)." diff --git a/scripts/package/Test-ProtocolLabScenarioPackages.ps1 b/scripts/package/Test-ProtocolLabScenarioPackages.ps1 new file mode 100644 index 00000000..23054ee6 --- /dev/null +++ b/scripts/package/Test-ProtocolLabScenarioPackages.ps1 @@ -0,0 +1,23 @@ +[CmdletBinding()] +param( + [string]$Root = (Resolve-Path (Join-Path $PSScriptRoot '../..')).Path +) + +$ErrorActionPreference = 'Stop' +$Root = (Resolve-Path -LiteralPath $Root).Path +$scenarioRoot = Join-Path $Root 'scenarios' +$validators = @( + Get-ChildItem -LiteralPath $scenarioRoot -Filter validate.ps1 -Recurse -File | + Sort-Object FullName +) + +if ($validators.Count -eq 0) { + throw 'No scenario package validators were found.' +} + +foreach ($validator in $validators) { + Write-Host "Validating $($validator.Directory.Name)" + & $validator.FullName +} + +Write-Host "Validated $($validators.Count) scenario package(s)." diff --git a/scripts/package/Validate-ProtocolLabComponentManifests.ps1 b/scripts/package/Validate-ProtocolLabComponentManifests.ps1 index c8813faa..0696ffd0 100644 --- a/scripts/package/Validate-ProtocolLabComponentManifests.ps1 +++ b/scripts/package/Validate-ProtocolLabComponentManifests.ps1 @@ -184,6 +184,9 @@ foreach ($file in $publicManifestFiles) { elseif ($manifest.kind -eq 'test-executor' -and $entryPath -notmatch '^test-executors/') { $errors.Add("$($file.FullName): test-executor entry manifest '$entryPath' must be under test-executors/.") } + elseif ($manifest.kind -eq 'scenario-pack' -and $entryPath -notmatch '^(scenarios|suites|specifications)/') { + $errors.Add("$($file.FullName): scenario-pack entry manifest '$entryPath' must be under scenarios/, suites/, or specifications/.") + } $entryFullPath = Join-Path $file.DirectoryName $entryPath if (-not (Test-Path -LiteralPath $entryFullPath -PathType Leaf)) {