Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
d4233b6
storm/e2e: port base host-state validation to Go (Phase 0 + base)
frhuelsz Jul 24, 2026
8b8d3e2
storm/e2e: port extensions host-state validation
frhuelsz Jul 24, 2026
3f0d16c
storm/e2e: port rollback and ab_update_staged validation
frhuelsz Jul 25, 2026
756b0be
storm/e2e: port verity host-state validation
frhuelsz Jul 25, 2026
a81d44e
storm/utils/sysinspect: add encryption inspection parsers
frhuelsz Jul 25, 2026
ed904b7
storm/e2e: port encryption host-state validation
frhuelsz Jul 25, 2026
c1b2d7e
storm/e2e: fix verity self-selection to root-verity only
frhuelsz Jul 25, 2026
c01585a
storm/e2e: expect install failure for rollback-intent scenarios
frhuelsz Jul 27, 2026
0ba1eba
storm/e2e: enable validated VM/host configs in the e2e allowlist
frhuelsz Jul 27, 2026
23c594f
storm/e2e: enable container runtime for VM e2e
frhuelsz Jul 27, 2026
3075b96
storm/e2e: stop tracking local e2e run outputs
frhuelsz Jul 27, 2026
7a55fe0
storm/e2e: stop tracking storm run metrics/logstream outputs
frhuelsz Jul 27, 2026
ebce43d
storm/e2e: tolerate expected rollback phonehome failure in install-os
frhuelsz Jul 27, 2026
273b5fa
storm/e2e: enable UKI/usr-verity configs via signing-cert + isUki fix
frhuelsz Jul 27, 2026
9324a5e
storm/e2e: tolerate active volume absent from partitionPaths (base A/B)
frhuelsz Jul 27, 2026
1b3b80e
storm/e2e: enable and validate the split config
frhuelsz Jul 28, 2026
d7a4c0e
storm/e2e: inject OCI extension images + image URL into Host Config
frhuelsz Jul 28, 2026
093c4a7
storm/e2e: wire extensions config through ACR in the pipeline
frhuelsz Jul 28, 2026
7993b7f
pipelines: add storm E2E tests to the testing-trident shortcut pipeline
frhuelsz Jul 28, 2026
b25a1cb
pipelines: build storm-trident from source in the shortcut storm E2E …
frhuelsz Jul 28, 2026
01907bb
pipelines: generate protobuf + certs before building storm-trident
frhuelsz Jul 28, 2026
3c7aae6
pipelines: build storm-trident in a dedicated stage for E2E shortcut
frhuelsz Jul 28, 2026
970f787
storm/e2e: log per-sub-check validation results + fix sysext status p…
frhuelsz Jul 28, 2026
652eb3e
storm/e2e: exclude UKI+PCR7-encryption configs from container runtime
frhuelsz Jul 28, 2026
14e014f
storm/e2e: strip PCR 7 for container instead of excluding UKI-encrypt…
frhuelsz Jul 28, 2026
238bca1
pipelines: delete extension images from ACR after storm E2E run
frhuelsz Jul 28, 2026
e10a2f6
pipelines: publish JUnit results from storm E2E runs
frhuelsz Jul 28, 2026
40fa5b0
pipelines: qualify storm JUnit classnames with scenario to avoid host…
frhuelsz Jul 28, 2026
0308311
tools: pin storm to live-ADO-groups branch commit for E2E validation
frhuelsz Jul 28, 2026
75ce3dc
pipelines: strip XML-illegal control bytes from storm JUnit before pu…
frhuelsz Jul 28, 2026
5acea3b
tools: re-pin storm to deterministic-ordering live-groups commit
frhuelsz Jul 29, 2026
d274bf9
storm/e2e: skip validate-ab-update-split when split A/B tests are ski…
frhuelsz Jul 29, 2026
6fb5b5f
storm/e2e: add auto-rollback after A/B update (parity with legacy for…
frhuelsz Jul 29, 2026
475d061
storm/e2e: fix auto-rollback to use a fresh image and tolerate the do…
frhuelsz Jul 29, 2026
40485d0
storm/e2e: add second A/B update (return into OS A) after auto-rollback
frhuelsz Jul 30, 2026
45e805e
storm/e2e: add manual-rollback test (VM A/B configs)
frhuelsz Jul 30, 2026
f9bcee4
storm/e2e: add rebuild-raid test (VM RAID configs, non-usr-verity)
frhuelsz Jul 30, 2026
60d6d82
storm/e2e: add host SELinux + tracing diagnostics validation (check-s…
frhuelsz Jul 30, 2026
ccab719
storm/e2e: self-provision versioned test images in scenario setup
frhuelsz Jul 31, 2026
43a19f1
storm/rollback: fold pipeline glue into the scenario
frhuelsz Aug 4, 2026
ec782a5
storm/e2e: namespace sysext ACR repo away from the legacy suite
frhuelsz Aug 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -366,4 +366,11 @@ vendor/

# Virtdeploy files
/tools/vm-netlaunch.yaml
/tools/virt-deploy-metadata.json
/tools/virt-deploy-metadata.json
# Local storm-trident e2e run outputs
/junit*.xml
/logs*/
/out*/
/logstream*.log
/*-metrics*.jsonl
/metrics-*.jsonl
1 change: 1 addition & 0 deletions .pipelines/templates/e2e-template.yml
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,7 @@ stages:
- template: stages/testing_e2e/storm_e2e.yml
parameters:
stageType: ${{ parameters.stageType }}
acrServiceConnectionName: ${{ parameters.acrServiceConnectionName }}

# Makefile validation, only for CI
- ${{ if eq(parameters.stageType, 'ci') }}:
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# Builds bin/storm-trident from the checked-out source. Used by the shortcut
# (testing-trident.yml) storm E2E path so the test matrix and validation logic
# come from the branch under test rather than a downloaded, possibly-stale
# go-tools artifact. Mirrors the storm-trident build in building-tools.yml.
#
# Assumes the trident sources are already checked out (checkout_trident.yml) and
# runs on a build-capable amd64 pool (e.g. trident-ubuntu-1es-pool-eastus2).
steps:
- template: avoid-pypi-usage.yml
- template: update-protoc.yml
parameters:
protocArch: x86_64
- bash: |
set -eux
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
echo "Adding '$(go env GOPATH)/bin' to PATH for subsequent tasks"
echo "##vso[task.prependpath]$(go env GOPATH)/bin"
displayName: "Install protoc-gen-go"
- bash: |
set -eux
# `make bin/storm-trident` only regenerates the embedded configurations;
# the protobuf (pkg/tridentgrpc) and TLS cert (pkg/rcp/tlscerts) sources
# are generated by other targets (e.g. bin/netlaunch) in a full build.
# Generate them here so the standalone storm-trident build succeeds.
#
# Remove any pre-existing binary first: the test jobs download a go-tools
# artifact (a possibly-stale storm-trident) before this step, and make's
# timestamp check would otherwise treat that binary as up-to-date and skip
# the rebuild, silently using the stale binary.
rm -f bin/storm-trident
cd tools
go generate pkg/rcp/tlscerts/certs.go
go generate pkg/tridentgrpc/grpc.go
cd ..
make bin/storm-trident
displayName: "Build storm-trident from source"
workingDirectory: $(TRIDENT_SOURCE_DIR)
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# Builds storm-trident once from the checked-out source and publishes it as a
# pipeline artifact, so the E2E stages (matrix definition + test execution) can
# consume the branch-under-test binary instead of a downloaded, possibly-stale
# go-tools artifact. Used by the testing-trident.yml shortcut (testingRun).
parameters:
- name: stageName
type: string
default: BuildStormTridentE2E

# Name of the published artifact containing the storm-trident binary.
- name: artifactName
type: string
default: storm-trident-e2e

stages:
- stage: ${{ parameters.stageName }}
displayName: Build storm-trident for E2E
dependsOn: []
jobs:
- job: BuildStormTrident
displayName: Build storm-trident from source
timeoutInMinutes: 15
pool:
type: linux
name: trident-ubuntu-1es-pool-eastus2
hostArchitecture: amd64
variables:
ob_outputDirectory: /tmp/${{ parameters.artifactName }}
ob_artifactBaseName: ${{ parameters.artifactName }}
steps:
- template: ../common_tasks/checkout_trident.yml
- template: ../common_tasks/build-storm-trident.yml
- bash: |
set -eux
mkdir -p $(ob_outputDirectory)
cp bin/storm-trident $(ob_outputDirectory)/storm-trident
workingDirectory: $(TRIDENT_SOURCE_DIR)
displayName: "Stage storm-trident artifact"
87 changes: 68 additions & 19 deletions .pipelines/templates/stages/testing_e2e/storm_e2e.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,47 @@ parameters:
displayName: "Pipeline configuration type"
type: string

- name: acrServiceConnectionName
displayName: "Service connection used to push extension/COSI images to ACR"
type: string
default: trident-dev-acr-write-umi-ECF

# When true, the E2E stages consume pre-built artifacts from the
# DownloadTestingElements stage (shortcut / testing-trident.yml) instead of
# depending on the in-pipeline build stages.
- name: testingRun
type: boolean
default: false

# Which VM runtimes to run. Both default to true so the full pipeline is
# unchanged; the shortcut pipeline toggles them individually.
- name: runVMHost
type: boolean
default: true

- name: runVMContainer
type: boolean
default: true

stages:
# In a testingRun (shortcut), build storm-trident once from source and publish
# it so the matrix-definition and test-execution stages consume the
# branch-under-test binary instead of a downloaded, possibly-stale go-tools
# artifact.
- ${{ if eq(parameters.testingRun, true) }}:
- template: build-storm-trident-stage.yml

- stage: DefineTests_E2E
displayName: Define all E2E test matrices
dependsOn:
- BuildingTools
- ${{ if eq(parameters.testingRun, true) }}:
- BuildStormTridentE2E
- ${{ else }}:
- BuildingTools
jobs:
- job: DefineTests
displayName: Get List of tests to run
timeoutInMinutes: 10
timeoutInMinutes: 15
pool:
type: linux

Expand All @@ -21,32 +53,49 @@ stages:

steps:
- template: ../common_tasks/checkout_trident.yml
- task: DownloadPipelineArtifact@2
displayName: "Download go-tools"
inputs:
buildType: current
artifactName: "go-tools"
patterns: |
storm-trident
targetPath: "$(TRIDENT_SOURCE_DIR)/bin"
# In a testingRun (shortcut) consume the storm-trident built from the
# branch under test (BuildStormTridentE2E); otherwise download it from
# the in-pipeline build's go-tools artifact.
- ${{ if eq(parameters.testingRun, true) }}:
- task: DownloadPipelineArtifact@2
displayName: "Download storm-trident (built from source)"
inputs:
buildType: current
artifactName: "storm-trident-e2e"
targetPath: "$(TRIDENT_SOURCE_DIR)/bin"
- ${{ else }}:
- task: DownloadPipelineArtifact@2
displayName: "Download go-tools"
inputs:
buildType: current
artifactName: "go-tools"
patterns: |
storm-trident
targetPath: "$(TRIDENT_SOURCE_DIR)/bin"
- bash: |
chmod +x ./bin/storm-trident
./bin/storm-trident script e2e-matrix "${{ parameters.stageType }}"
name: matrices
workingDirectory: $(TRIDENT_SOURCE_DIR)
displayName: Matrix of Trident configurations for E2E Tests

# TODO: enable once storm tests are ready
- template: test_execution_template.yml
parameters:
hardwareType: "VM"
runtimeType: "HOST"
- ${{ if parameters.runVMHost }}:
- template: test_execution_template.yml
parameters:
hardwareType: "VM"
runtimeType: "HOST"
testingRun: ${{ parameters.testingRun }}
acrServiceConnectionName: ${{ parameters.acrServiceConnectionName }}

# - template: test_execution_template.yml
# parameters:
# hardwareType: "VM"
# runtimeType: "CONTAINER"
- ${{ if parameters.runVMContainer }}:
- template: test_execution_template.yml
parameters:
hardwareType: "VM"
runtimeType: "CONTAINER"
testingRun: ${{ parameters.testingRun }}
acrServiceConnectionName: ${{ parameters.acrServiceConnectionName }}

# TODO: enable once bare-metal host setup is supported in storm
# - template: test_execution_template.yml
# parameters:
# hardwareType: "BM"
Expand Down
Loading
Loading