Skip to content

Commit 271bd4e

Browse files
msyycCopilotCopilotscbedd
authored
Add daily pipeline to register unregistered azure-mgmt-* package names (#45485)
* Add daily pipeline to register unregistered azure-mgmt-* package names Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Disable step 3 (pipeline trigger) for testing, log results only Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Annotate step 3 with early return for testing, keep original code intact Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix Get-ChildItem glob pattern for _version.py discovery PowerShell does not support ** in -Path; use -Recurse -Filter instead. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Re-enable step 3: trigger name reservation pipeline Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Update eng/pipelines/register-package-name.yml Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update eng/pipelines/register-package-name.yml Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * update with review comments * Skip Publish stage when no packages found in Build Promote HasPackages to an output variable (isOutput=true) in the Build job and add a stage condition on Publish that checks it. When auto mode finds no packages to register, the Publish stage is cleanly skipped instead of running the approval gate and ESRP task unnecessarily. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix: move step 'name' after 'pwsh' for ADO parser compatibility ADO YAML identifies step type by the first key in the mapping. Having 'name' before 'pwsh' caused 'Unexpected value name' error. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * simplify the build a bit --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Scott Beddall <scbedd@microsoft.com>
1 parent b05d619 commit 271bd4e

3 files changed

Lines changed: 83 additions & 9 deletions

File tree

eng/pipelines/templates/jobs/build-namereserve-package.yml

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
parameters:
22
- name: NameForReservation
33
type: string
4+
default: 'auto'
45
- name: VersionForReservation
56
type: string
7+
default: '0.0.0'
68

79
jobs:
810
- job: generate_namereserve_package
@@ -20,15 +22,26 @@ jobs:
2022
python -m pip install -r eng/ci_tools.txt
2123
displayName: Install Dependencies
2224
23-
- pwsh: |
24-
$ErrorActionPreference = 'Stop'
25-
$PSNativeCommandUseErrorActionPreference = $true
25+
- ${{ if eq(parameters.NameForReservation, 'auto') }}:
26+
- pwsh: |
27+
python eng/scripts/discover_unpublished_packages.py `
28+
--output-dir "$(Build.ArtifactStagingDirectory)" `
29+
--version "${{ parameters.VersionForReservation }}"
30+
name: generatePackages
31+
displayName: Discover and Generate Name Reservation Packages
32+
33+
- ${{ else }}:
34+
- pwsh: |
35+
Write-Host "##vso[task.setvariable variable=HasPackages;isOutput=true]true"
36+
$ErrorActionPreference = 'Stop'
37+
$PSNativeCommandUseErrorActionPreference = $true
2638
27-
generate_namereserve_package `
28-
--package_version "${{ parameters.VersionForReservation }}" `
29-
--output_dir "$(Build.ArtifactStagingDirectory)" `
30-
"${{ parameters.NameForReservation }}"
31-
displayName: Generate Name Reservation Package
39+
generate_namereserve_package `
40+
--package_version "${{ parameters.VersionForReservation }}" `
41+
--output_dir "$(Build.ArtifactStagingDirectory)" `
42+
"${{ parameters.NameForReservation }}"
43+
name: generatePackages
44+
displayName: Generate Name Reservation Package
3245
3346
- template: /eng/common/pipelines/templates/steps/publish-1es-artifact.yml
3447
parameters:

eng/pipelines/templates/stages/publish-namereserve-package.yml

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,18 @@
1+
trigger: none
2+
pr: none
3+
4+
schedules:
5+
- cron: "0 22 * * *"
6+
displayName: Daily Package Name Registration
7+
branches:
8+
include:
9+
- main
10+
always: true
11+
112
parameters:
213
- name: NameForReservation
314
type: string
15+
default: 'auto'
416
- name: VersionForReservation
517
type: string
618
default: '0.0.0'
@@ -20,6 +32,11 @@ extends:
2032
- stage: Publish
2133
displayName: 'Publish Name Reservation Package'
2234
dependsOn: Build
35+
condition: >-
36+
and(
37+
succeeded(),
38+
ne(dependencies.Build.outputs['generate_namereserve_package.generatePackages.HasPackages'], 'false')
39+
)
2340
jobs:
2441
- deployment: PublishPackage
2542
displayName: "Publish to PyPI"
@@ -48,7 +65,7 @@ extends:
4865
- pwsh: |
4966
New-Item -ItemType Directory -Force -Path "$(PUBLISHDIRECTORY)"
5067
51-
Get-ChildItem -Path "$(Pipeline.Workspace)/NameReservePackage/${{parameters.NameForReservation}}" `
68+
Get-ChildItem -Path "$(Pipeline.Workspace)/NameReservePackage" -Recurse `
5269
| Where-Object { ($_.Name -like "*.tar.gz" -or $_.Name -like "*.whl") } `
5370
| Copy-Item -Destination "$(PUBLISHDIRECTORY)"
5471
Get-ChildItem "$(PUBLISHDIRECTORY)"
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
#!/usr/bin/env python
2+
3+
"""Discovers unreleased azure-mgmt-* packages not yet on PyPI and generates
4+
name-reservation placeholders for each."""
5+
6+
import argparse
7+
import sys
8+
9+
from ci_tools.functions import discover_targeted_packages
10+
from ci_tools.parsing import ParsedSetup
11+
from packaging_tools.generate_namereserve_package import generate_main
12+
from pypi_tools.pypi import PyPIClient
13+
14+
INITIAL_VERSION = "1.0.0b1"
15+
16+
17+
def _is_on_pypi(client, name):
18+
try:
19+
client.project(name)
20+
return True
21+
except Exception:
22+
return False
23+
24+
25+
if __name__ == "__main__":
26+
parser = argparse.ArgumentParser(description=__doc__)
27+
parser.add_argument("--output-dir", required=True)
28+
parser.add_argument("--version", default="0.0.0")
29+
parser.add_argument("--root-dir", default=".")
30+
args = parser.parse_args()
31+
32+
folders = discover_targeted_packages("azure-mgmt-*", args.root_dir, filter_type="Build", compatibility_filter=False)
33+
candidates = [ParsedSetup.from_path(f) for f in folders]
34+
pypi = PyPIClient()
35+
to_register = [p for p in candidates if p.version == INITIAL_VERSION and not _is_on_pypi(pypi, p.name)]
36+
37+
for pkg in to_register:
38+
print(f"Generating reservation package: {pkg.name}")
39+
generate_main(["--output_dir", args.output_dir, "--package_version", args.version, pkg.name])
40+
41+
if not to_register:
42+
print("No unregistered management packages found.")
43+
44+
print(f"##vso[task.setvariable variable=HasPackages;isOutput=true]{'true' if to_register else 'false'}")

0 commit comments

Comments
 (0)