Skip to content

Commit 9a9dd14

Browse files
committed
ci(hidi): prepare stable publishing enablement
Set the main stable publishing flag while leaving previews and release conditions unchanged. Document the signed-pack acceptance, official publish-disabled proof, and source publisher cutover holds. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: c5dc39ed-4fe4-4004-a361-7b4d5660241f
1 parent 8b080b4 commit 9a9dd14

4 files changed

Lines changed: 62 additions & 17 deletions

File tree

‎.azure-pipelines/hidi-release.yml‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ variables:
1919
buildConfiguration: Release
2020
NuGetOrganizationName: 'openapinet'
2121
privateFeedBaseUrl: 'https://microsoftgraph.pkgs.visualstudio.com/0985d294-5762-4bc2-a565-161ef349ca3e/_packaging/GraphDeveloperExperiences_Public'
22-
# Keep OFF until destination merges and source publishing is cut over.
23-
hidiPublishingEnabled: 'false'
22+
# Merge only after official signed-pack verification and source publisher cutover.
23+
hidiPublishingEnabled: 'true'
2424
hidiPreviewPublishingEnabled: 'false'
2525

2626
resources:

‎CONTRIBUTING.md‎

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,13 +66,23 @@ Routing follows package directories, not commit scopes. Hidi tests outside the
6666
source package are excluded from OData releases and do not independently trigger
6767
a Hidi release. Root distribution/helper files remain outside the Hidi component;
6868
they follow the root package's standard routing, not custom Hidi routing.
69-
Existing root OData exclusions remain configured. The official Hidi
70-
package/container publishing gates remain disabled during migration.
69+
Existing root OData exclusions remain configured. On `main`, the official Hidi
70+
pipeline sets `hidiPublishingEnabled: 'true'` for stable tag publishing and
71+
retains `hidiPreviewPublishingEnabled: 'false'`; preview publishing remains off.
72+
This enablement must remain unmerged until the
73+
[release cutover prerequisites](src/Microsoft.OpenApi.Hidi/readme.md#release-cutover-prerequisites)
74+
are satisfied.
7175

7276
The ADO OData pipeline accepts `v3.*` tags and deploys only the exact OData
7377
package matching that tag and `Directory.Build.props`. The dedicated Hidi
7478
pipeline accepts `hidi-v3.*` tags; its package, symbols, executable, ZIP and
7579
container version must match the Hidi tag/project version. Malformed,
7680
other-component or mismatched tags fail validation rather than publishing a
77-
different component. With publishing disabled, branch/PR builds remain validation-only; the existing
78-
Hidi publishing flags, migration floor and protected environments are unchanged.
81+
different component. Branch/PR builds remain validation-only: the unchanged
82+
stable stage condition requires a successful build, the stable flag and a
83+
`refs/tags/hidi-v3.` prefix. The preview stage also requires the preview flag,
84+
which remains false. Tag validation, the migration floor and protected
85+
environments are unchanged. Changing main's YAML does not change an existing
86+
tagged revision or an already compiled pipeline run; publication requires an
87+
approved corrected release ref/version after cutover, not a rerun or retag of
88+
the old `hidi-v3.11.0` revision.

‎README.md‎

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,12 @@ The NuGet package remains `Microsoft.OpenApi.Hidi` and the command remains `hidi
9494
Hidi 3.x is maintained on `main`; Hidi 2.x is maintained on `support/v2`.
9595
Both tracks use independent versions and require the .NET 8 runtime.
9696
Building this repository, including the Hidi tests, requires the .NET 10 SDK.
97-
Destination Hidi release publishing is disabled during the migration; the
98-
source repository remains intact until the destination PRs are completed.
97+
The main Hidi pipeline sets `hidiPublishingEnabled: 'true'` for stable
98+
`hidi-v3.*` tag releases; `hidiPreviewPublishingEnabled: 'false'` keeps main
99+
previews off. This enablement must not merge until the signed-pack corrections
100+
are accepted, a fresh official publish-disabled build verifies the packaged
101+
Hidi DLL's signature and hash, and the source main publisher is retired for
102+
cutover. See [the release prerequisites](src/Microsoft.OpenApi.Hidi/readme.md#release-cutover-prerequisites).
99103

100104
---
101105

‎src/Microsoft.OpenApi.Hidi/readme.md‎

Lines changed: 40 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -68,10 +68,12 @@ does not change the existing OData test platform.
6868

6969
The gated main Hidi publisher preserves the ESRP NuGet contract from
7070
[microsoft/OpenAPI.NET#3107](https://github.com/microsoft/OpenAPI.NET/pull/3107)
71-
(source commit `e1a75437b76ebfc7c9eb446e9fd0b59a21afb14b`). Official builds include
71+
(source commit `e1a75437b76ebfc7c9eb446e9fd0b59a21afb14b`). Official builds are intended to include
7272
the signed Hidi `.nupkg`, a matching `.snupkg` and the private-feed version-check
7373
script in the `Hidi` artifact. The `nuget-org` release job consumes that artifact
74-
without a repository checkout or the Docker context.
74+
without a repository checkout or the Docker context. Outer NuGet signing and
75+
a signed executable do not prove that the DLL inside the package is signed;
76+
the cutover prerequisites below require separate verification.
7577

7678
Before ESRP publication, the job requires the exact `hidi-v3.*` release package
7779
and symbols with a version newer than 3.10.2. It checks
@@ -83,8 +85,9 @@ release's signed package, executable and ZIP attachments to be updated.
8385

8486
ESRP receives only the exact Hidi package and matching symbols under the
8587
`openapinet` organization, retaining the source's federated DevX connection,
86-
publisher identity, owners and approvers. This handoff does not enable publishing
87-
or grant pipeline permissions. Owners must separately verify private-feed token
88+
publisher identity, owners and approvers. The main pipeline sets the stable
89+
publishing flag to `'true'`, but this does not grant pipeline permissions.
90+
Owners must separately verify private-feed token
8891
access, the ESRP connection and protected `nuget-org` environment authorization
8992
before cutover; local packaging does not prove production signing or publishing.
9093

@@ -151,18 +154,46 @@ this handoff does not grant permissions or bypass service-connection approvals.
151154
The Dockerfile secret mount is optional, so local and GitHub Actions builds
152155
without a secret continue to use their default NuGet sources.
153156

154-
The migration baseline 3.10.2 is already published. Destination Hidi NuGet,
155-
GitHub release, stable Docker and preview Docker publishing are disabled until
156-
source cutover. The first destination stable release must advance the Hidi
157-
version; OData releases use separate artifacts and tags.
157+
The migration baseline 3.10.2 is already published and must not be republished.
158+
On `main`, `hidiPublishingEnabled: 'true'` enables the stable NuGet, GitHub release
159+
attachments and Docker stage only for successful `hidi-v3.*` tag builds.
160+
`hidiPreviewPublishingEnabled: 'false'` keeps preview Docker publishing off,
161+
so main branch and PR builds do not publish. The existing exact tag/project
162+
validation, version floor newer than 3.10.2 and environment approvals remain
163+
required. OData releases use separate artifacts and tags.
158164

159165
The gated official pipeline retains the consumer image
160166
`mcr.microsoft.com/openapi/hidi`, backed by
161167
`msgraphprodregistry.azurecr.io/public/openapi/hidi`. Stable images use `latest`
162168
and the independent Hidi version. Main previews use `nightly` and
163169
`VERSION.YYYYMMDDRUNNUM`, for `linux/amd64` and `linux/arm64/v8`.
164-
No image is pushed during this migration. Privileged cross-platform emulation
170+
This preparation does not authorize an image push. Privileged cross-platform emulation
165171
setup belongs only in the authorized CI pipeline, not a shared local environment.
172+
173+
### Release cutover prerequisites
174+
175+
Hold the stable enablement merge until the signed-pack corrections
176+
[#904](https://github.com/microsoft/OpenAPI.NET.OData/pull/904) (`support/v2`) and
177+
[#903](https://github.com/microsoft/OpenAPI.NET.OData/pull/903) (`main`) complete
178+
normal acceptance in v2-first order. Then verify a fresh official build with
179+
both publishing flags disabled: extract the Hidi DLL from the exact `.nupkg`,
180+
verify its genuine Microsoft Authenticode signature and SHA-256 equality with
181+
the signed DLL staged by that build, and verify the outer package and Windows
182+
executable signatures. A successful signing task or local packaging alone is
183+
not this proof. The old official artifacts contain an unsigned inner DLL and
184+
must not be republished.
185+
186+
The source main publisher must also be retired and cutover approved; source
187+
cleanup is tracked in
188+
[microsoft/OpenAPI.NET#3111](https://github.com/microsoft/OpenAPI.NET/pull/3111).
189+
This draft preparation does not perform that retirement or grant resource access.
190+
191+
Merging a YAML flag change on `main` does not change the YAML or binaries at an
192+
existing tag, or an already compiled pipeline run. The existing `hidi-v3.11.0`
193+
tag points to the old publish-disabled revision without the signed-pack fix.
194+
Do not move or reuse that tag, rerun it to publish, or republish its old artifact.
195+
Future publication requires a corrected release ref/version approved for cutover
196+
after the prerequisites above are met.
166197

167198
## How to use Hidi
168199

0 commit comments

Comments
 (0)