Update Hex1b packages to 0.78.0 and add dependency-update skill#14400
Update Hex1b packages to 0.78.0 and add dependency-update skill#14400mitchdenny merged 6 commits intomainfrom
Conversation
- SKILL.md: Agent instructions for version lookup, changelog review, user confirmation, and pipeline orchestration - migrate-package.sh: Companion script to trigger and monitor the dotnet-migrate-package Azure DevOps pipeline (def 931) - AGENTS.md: Register new skill in Available Skills section
Replace migrate-package.sh with MigratePackage.cs using: - Azure.Identity (AzureCliCredential) for authentication - Azure DevOps .NET SDK (PipelinesHttpClient) for pipeline triggering via RunPipelineAsync and polling via GetRunAsync - Auto-detection of Microsoft corp tenant for token acquisition Add .editorconfig and Directory.Packages.props overrides to allow standalone #:package directives within the repo's CPM.
- Hex1b: 0.48.0 → 0.75.0 - Hex1b.McpServer: 0.48.0 → 0.75.0 - Hex1b.Tool: added at 0.75.0 (new dotnet tool) All three packages imported via dotnet-migrate-package pipeline: - Hex1b: Run 2898644 (succeeded) - Hex1b.McpServer: Run 2898645 (succeeded) - Hex1b.Tool: Run 2898650 (succeeded)
|
🚀 Dogfood this PR with:
curl -fsSL https://raw.githubusercontent.com/dotnet/aspire/main/eng/scripts/get-aspire-cli-pr.sh | bash -s -- 14400Or
iex "& { $(irm https://raw.githubusercontent.com/dotnet/aspire/main/eng/scripts/get-aspire-cli-pr.ps1) } 14400" |
There was a problem hiding this comment.
Pull request overview
Updates the repository’s Hex1b dependency family to 0.75.0, introduces the Hex1b.Tool local dotnet tool, and adds a new dependency-update skill (with a companion script) to standardize external NuGet dependency upgrade workflow via the internal mirroring pipeline.
Changes:
- Bumped
Hex1bandHex1b.McpServerto0.75.0and addedHex1b.Toolversion entry. - Added
hex1b.toolto the local tool manifest (.config/dotnet-tools.json). - Added a new
.github/skills/dependency-update/skill with documentation and a C# helper to trigger/poll thedotnet-migrate-packagepipeline; registered the skill inAGENTS.md.
Reviewed changes
Copilot reviewed 7 out of 7 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
| Directory.Packages.props | Updates Hex1b package versions and adds a Hex1b.Tool version entry. |
| .config/dotnet-tools.json | Adds hex1b.tool as a local dotnet tool at version 0.75.0. |
| AGENTS.md | Registers the new dependency-update skill in the skills list. |
| .github/skills/dependency-update/SKILL.md | Documents the dependency update workflow and how to use the companion script. |
| .github/skills/dependency-update/MigratePackage.cs | New helper script to trigger and monitor the AzDO dotnet-migrate-package pipeline. |
| .github/skills/dependency-update/Directory.Packages.props | Disables CPM for file-based scripts in this skill directory. |
| .github/skills/dependency-update/.editorconfig | Adds analyzer overrides intended for the standalone script(s). |
| async Task<(bool Success, string Output)> RunProcessAsync(string fileName, string arguments) | ||
| { | ||
| using var process = Process.Start(new ProcessStartInfo | ||
| { | ||
| FileName = fileName, | ||
| Arguments = arguments, | ||
| RedirectStandardOutput = true, | ||
| RedirectStandardError = true, | ||
| UseShellExecute = false | ||
| }); | ||
|
|
||
| if (process is null) | ||
| { | ||
| return (false, string.Empty); | ||
| } | ||
|
|
||
| var output = await process.StandardOutput.ReadToEndAsync(); | ||
| await process.WaitForExitAsync(); | ||
| return (process.ExitCode == 0, output); |
There was a problem hiding this comment.
RunProcessAsync redirects stderr but never reads it. This can deadlock/hang if the child process writes enough to stderr, and it also makes it harder to diagnose failures (errors are dropped). Either don’t redirect stderr, or read/merge stderr output (e.g., read both streams asynchronously) and include it in the returned output when the command fails.
| # Override repo-level analyzers for standalone tool scripts | ||
| root = true |
There was a problem hiding this comment.
Setting root = true here prevents the repo-level .editorconfig (which defines baseline whitespace/charset rules under [*]) from applying to files in this directory, not just the analyzer overrides. Other per-directory overrides in this repo (e.g., tools/scripts/.editorconfig, playground/.editorconfig, src/Vendoring/.editorconfig) don’t set root = true; consider removing it so you inherit the global formatting rules while still overriding the specific diagnostics for these scripts.
Directory.Packages.props
Outdated
| <PackageVersion Include="Hex1b" Version="0.48.0" /> | ||
| <PackageVersion Include="Hex1b.McpServer" Version="0.48.0" /> | ||
| <PackageVersion Include="Hex1b" Version="0.75.0" /> | ||
| <PackageVersion Include="Hex1b.McpServer" Version="0.75.0" /> |
There was a problem hiding this comment.
Hex1b.Tool is added to central package management, but the repo only references it via the local dotnet tool manifest (.config/dotnet-tools.json), not via any PackageReference. Since dotnet tool restore doesn’t use Directory.Packages.props, consider removing this entry (or add a short comment explaining why it’s tracked here) to avoid an orphaned version declaration.
| <PackageVersion Include="Hex1b.McpServer" Version="0.75.0" /> | |
| <PackageVersion Include="Hex1b.McpServer" Version="0.75.0" /> | |
| <!-- Hex1b.Tool is used via .config/dotnet-tools.json; tracked here intentionally for central version management --> |
| pollInterval = int.Parse(args[++i]); | ||
| break; | ||
| case "--timeout": | ||
| timeout = int.Parse(args[++i]); | ||
| break; | ||
| case "--migration-type": |
There was a problem hiding this comment.
The option parsing uses args[++i] and int.Parse(...) without validating that a value exists (or that it’s an integer/positive). A missing value (e.g., --timeout at end) will throw, and invalid values will crash the script. Please add bounds checks and use int.TryParse (also validate pollInterval > 0 and timeout > 0) and surface a friendly usage error instead of an exception.
| pollInterval = int.Parse(args[++i]); | |
| break; | |
| case "--timeout": | |
| timeout = int.Parse(args[++i]); | |
| break; | |
| case "--migration-type": | |
| if (i + 1 >= args.Length) | |
| { | |
| LogError("Missing value for --poll-interval. Expected a positive integer (seconds)."); | |
| PrintUsage(); | |
| return; | |
| } | |
| if (!int.TryParse(args[i + 1], out int parsedPollInterval) || parsedPollInterval <= 0) | |
| { | |
| LogError($"Invalid value for --poll-interval: '{args[i + 1]}'. Expected a positive integer (seconds)."); | |
| PrintUsage(); | |
| return; | |
| } | |
| pollInterval = parsedPollInterval; | |
| i++; | |
| break; | |
| case "--timeout": | |
| if (i + 1 >= args.Length) | |
| { | |
| LogError("Missing value for --timeout. Expected a positive integer (seconds)."); | |
| PrintUsage(); | |
| return; | |
| } | |
| if (!int.TryParse(args[i + 1], out int parsedTimeout) || parsedTimeout <= 0) | |
| { | |
| LogError($"Invalid value for --timeout: '{args[i + 1]}'. Expected a positive integer (seconds)."); | |
| PrintUsage(); | |
| return; | |
| } | |
| timeout = parsedTimeout; | |
| i++; | |
| break; | |
| case "--migration-type": | |
| if (i + 1 >= args.Length) | |
| { | |
| LogError("Missing value for --migration-type."); | |
| PrintUsage(); | |
| return; | |
| } |
🎬 CLI E2E Test RecordingsThe following terminal recordings are available for commit
📹 Recordings uploaded automatically from CI run #21817321943 |
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
|
@copilot open a new pull request to apply changes based on the comments in this thread |
|
@mitchdenny I've opened a new pull request, #14403, to work on those changes. Once the pull request is ready, I'll request review from you. |
| - **cli-e2e-testing**: Guide for writing Aspire CLI end-to-end tests using Hex1b terminal automation | ||
| - **test-management**: Quarantines or disables flaky/problematic tests using the QuarantineTools utility | ||
| - **connection-properties**: Expert for creating and improving Connection Properties in Aspire resources | ||
| - **dependency-update**: Guides dependency version updates by checking nuget.org, triggering the dotnet-migrate-package Azure DevOps pipeline, and monitoring runs |
There was a problem hiding this comment.
@mitchdenny why was this required? Don't llms that support agent-skills automatically read the headers if all available skills?
Summary
Update external Hex1b package family to 0.78.0 and add the new
Hex1b.Tooldotnet tool. Also introduces a newdependency-updateCopilot skill for streamlining external dependency imports.Package Updates
Package Import
All three packages were imported to the internal NuGet feeds via the
dotnet-migrate-packagepipeline:Changes
Directory.Packages.props— Updated Hex1b and Hex1b.McpServer versions, added Hex1b.Tool.config/dotnet-tools.json— Addedhex1b.toolas a local dotnet tool.github/skills/dependency-update/— New Copilot skill for managing external dependency updates via the Azure DevOpsdotnet-migrate-packagepipelineAGENTS.md— Registered the new skill in the Available Skills section