Conversation
…ion of closed milestone releases
…ell output commands
… output variable naming
… in version promotion workflow
… stabilization init workflow
…to bypass GitHub security restrictions
…rate across workflows
…r multi-branch commit fan-out
…els from aborting cherry-pick workflow
…els from aborting cherry-pick workflow
Add a two-layer GitHub Actions design: - Generic Mistral AI Chat Completions API wrapper action - Release-notes-specific action with domain prompts from .windsurf/workflows/release-notes.md Wire into release-3-pr-to-main-closed.yml to generate AI-powered release titles and notes, with GitHub auto-generated notes preserved in a collapsed details block.
…s, and other CI improvements - Add concurrency controls to prevent race conditions across 5 workflows - Paginate listReleases in release-promotion.yml using github.paginate() - Add auto-discover, include-main-branches, exclude-branches inputs to patch-propagate.yml - Add summary/notification job to patch-propagate.yml for failed cherry-picks - Add promotion: freeze label check in release-promotion.yml - Auto-create promotion-blocked issue when release >30 days but blocked - Add version-format validation before branch cleanup in stabilization-2-complete.yml - Dereference annotated tags in stabilization-0-init.yml - Post-filter issue search results in check-issues-for-version/action.yml - Target stabilization branch for hash PR in release-4-build.yml - Create required labels (automation, needs-attention, promotion: freeze/blocked, has-conflicts) - Update RELEASE_WORKFLOW.md documentation
Hash PRs must target main for GitHub Pages deployment.
Added guideline for new components to use a zeroed GUID.
Updated guidelines on unit tests related to Rhino/Grasshopper references.
Contributor
There was a problem hiding this comment.
Pull request overview
This PR is a broad workflow-and-guidance sync from main into dev, mainly updating GitHub Actions release/stabilization automation and refreshing Windsurf rules/docs to match the current SmartHopper development process.
Changes:
- Adds a new stabilization/patch-propagation release flow across GitHub Actions, plus related supporting actions.
- Refactors release automation around manifest updates, release-note generation, Yak upload triggering, and branch/milestone handling.
- Refreshes internal docs/rules and minor metadata files to document the new workflows and conventions.
Reviewed changes
Copilot reviewed 62 out of 62 changed files in this pull request and generated 8 comments.
Show a summary per file
| File | Description |
|---|---|
src/SmartHopper.Infrastructure/SmartHopper.Infrastructure.csproj |
Removes BOM/header formatting difference. |
hashes/1.4.2-beta.json |
Adds generated provider hash manifest for 1.4.2-beta. |
docs/index.md |
Adds Development docs links. |
docs/Development/patch-propagation.md |
Documents new multi-branch patch propagation workflow. |
CHANGELOG.md |
Adds unreleased note about rules/workflows clarification. |
.windsurf/workflows/pr-description.md |
Fixes wording/formatting in PR description workflow doc. |
.windsurf/workflows/new-branch.md |
Clarifies branch creation workflow text. |
.windsurf/workflows/fix-compilation-messages.md |
Refines compiler-fix workflow wording. |
.windsurf/workflows/docs-update.md |
Updates docs workflow scope and output paths. |
.windsurf/workflows/commit-message.md |
Clarifies Conventional Commit guidance. |
.windsurf/workflows/code-style.md |
Rewrites style-cleanup instructions with clearer rules. |
.windsurf/workflows/changelog-review.md |
Clarifies changelog review wording. |
.windsurf/rules/windsurf-rules.md |
Updates how Windsurf rule files should be edited. |
.windsurf/rules/webchat-cdn.md |
Removes old CDN-specific rule file. |
.windsurf/rules/webchat-architecture.md |
Adds consolidated WebChat architecture rule. |
.windsurf/rules/tool-result-envelope.md |
Adds tool JSON envelope rule. |
.windsurf/rules/testing-and-build.md |
Adds build/test expectations for platform constraints. |
.windsurf/rules/target-platform-and-frameworks.md |
Clarifies target TFMs/platforms. |
.windsurf/rules/solution-structure.md |
Expands solution structure guidance. |
.windsurf/rules/refactor-stop-and-confirm.md |
Clarifies stop-and-confirm refactor policy. |
.windsurf/rules/provider-authentication.md |
Adds provider auth/secrets handling rule. |
.windsurf/rules/infrastructure-aitools.md |
Refreshes AI tools infrastructure guidance. |
.windsurf/rules/infrastructure-aiprovider.md |
Refreshes provider architecture guidance. |
.windsurf/rules/infrastructure-aicall.md |
Rewrites AICall architecture overview. |
.windsurf/rules/general-guidelines.md |
Updates general SmartHopper development guidance. |
.windsurf/rules/documentation-and-changelog.md |
Clarifies docs/changelog expectations. |
.windsurf/rules/data-tree-processing.md |
Adds Grasshopper data-tree processing rule. |
.windsurf/rules/component-conventions.md |
Expands component conventions. |
.windsurf/rules/code-dedup-architecture.md |
Minor wording cleanup. |
.windsurf/rules/architecture-thinking.md |
Clarifies architecture-first workflow guidance. |
.windsurf/rules/ai-tool-conventions.md |
Expands AI tool conventions. |
.windsurf/rules/ai-provider-conventions.md |
Expands AI provider conventions. |
.github/workflows/stabilization-2-complete.yml |
Adds stabilization completion/backport workflow. |
.github/workflows/stabilization-1-cancel.yml |
Adds stabilization cancellation workflow. |
.github/workflows/stabilization-0-init.yml |
Adds stabilization branch initialization workflow. |
.github/workflows/release-promotion.yml |
Reworks staged-release promotion logic around stabilization milestones. |
.github/workflows/release-auto-upload-yak.yml |
Removes old standalone Yak auto-upload workflow. |
.github/workflows/release-5-deploy-pages.yml |
Switches Pages deploy trigger to hash pushes on main. |
.github/workflows/release-4-build.yml |
Adjusts build checkout/PR assignment and moves Yak trigger here. |
.github/workflows/release-3-pr-to-main-closed.yml |
Extends release creation to main-* and AI-generated release notes. |
.github/workflows/release-2-pr-to-dev-closed.yml |
Extends dev→main PR automation to stabilization branches. |
.github/workflows/release-1-milestone.yml |
Makes release-prep target stabilization branches and update manifest text. |
.github/workflows/pr-version-validation.yml |
Extends PR version validation to main-*/dev-*. |
.github/workflows/pr-validation.yml |
Extends general PR validation to stabilization branches. |
.github/workflows/pr-manifest-validation.yml |
Extends manifest validation and reuses shared manifest-text action. |
.github/workflows/pr-delete-auto-branches.yml |
Adds patch/ branches to auto-delete list. |
.github/workflows/pr-build-hash-validation.yml |
Extends build/hash validation to stabilization branches. |
.github/workflows/patch-propagate.yml |
Adds manual multi-branch cherry-pick propagation workflow. |
.github/workflows/dev-update-manifest.yml |
Switches dev manifest updates to shared manifest-text action. |
.github/workflows/ci-dotnet-tests.yml |
Extends CI to stabilization branches. |
.github/workflows/RELEASE_WORKFLOW.md |
Documents new stabilization and patch-propagation flows. |
.github/actions/versioning/update-manifest-text/action.yml |
Adds reusable manifest note text update action. |
.github/actions/versioning/promote-version/action.yml |
Removes old promote-version composite action. |
.github/actions/versioning/move-milestone-items/action.yml |
Makes milestone-item moves stabilization-aware. |
.github/actions/versioning/manage-milestones/action.yml |
Simplifies milestone management behavior. |
.github/actions/versioning/check-issues-for-version/action.yml |
Tightens version-label matching for promotion checks. |
.github/actions/versioning/README.md |
Updates versioning action docs for new behavior. |
.github/actions/milestone/assign-pr/action.yml |
Adds optional explicit version input for milestone assignment. |
.github/actions/documentation/generate-release-notes/action.yml |
Adds AI-powered release-note generation action. |
.github/actions/cherry-pick-to-branch/action.yml |
Adds reusable cherry-pick-and-open-PR action. |
.github/actions/cherry-pick-to-branch/PR_TEMPLATE.md |
Adds PR template for propagated patches. |
.github/actions/ai/mistral-chat/action.yml |
Adds generic Mistral chat wrapper action. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| git config --local user.name "github-actions[bot]" | ||
| git add yak-package/manifest.yml | ||
| git commit -m "chore: update manifest text to ${{ steps.manifest_text.outputs.type }} version [skip ci]" | ||
| git commit -m "chore: update manifest text to ${{ steps.manifest_text.outputs.release-type }} version [skip ci]" |
| with: | ||
| pr-number: ${{ steps.hash-pr.outputs.hash_pr_number }} | ||
| token: ${{ secrets.GITHUB_TOKEN }} | ||
| version: ${{ needs.prep.outputs.version }} |
| json=$(echo "$raw" \ | ||
| | tr ',' '\n' \ | ||
| | sed 's/^[[:space:]]*//; s/[[:space:]]*$//' \ | ||
| | grep -v '^$' \ |
Comment on lines
+197
to
+207
| if (propagateResult === 'failure') { | ||
| // Create issue for manual attention | ||
| await github.rest.issues.create({ | ||
| owner: context.repo.owner, | ||
| repo: context.repo.repo, | ||
| title: `\ud83c\udf52 Patch propagate needs attention (run #${context.runNumber})`, | ||
| body: `One or more cherry-picks had conflicts or failures.\n\n` + | ||
| `**Run:** [#${context.runNumber}](${runUrl})\n` + | ||
| `**SHAs:** \`${shas}\`\n` + | ||
| `**Source branch:** \`${{ inputs.source-branch }}\`\n\n` + | ||
| `Please review the workflow run and resolve any draft PRs with conflict markers.`, |
Comment on lines
+207
to
+208
| `Please review the workflow run and resolve any draft PRs with conflict markers.`, | ||
| labels: ['automation', 'needs-attention'] |
Comment on lines
+101
to
+119
| // For each stabilization path, find the current staged release | ||
| // Priority: rc > beta > alpha (promote the most advanced stage that exists) | ||
| const stagePriority = ['rc', 'beta', 'alpha']; | ||
|
|
||
| for (const milestone of stabilizationMilestones) { | ||
| const base = milestone.title; // e.g. "1.4.2" | ||
| let currentStaged = null; | ||
|
|
||
| for (const stage of stagePriority) { | ||
| const candidate = `${base}-${stage}`; | ||
| if (releaseTags.has(candidate)) { | ||
| currentStaged = candidate; | ||
| console.log(`Stabilization path ${base}: current staged release is ${candidate}`); | ||
| break; | ||
| } | ||
| } | ||
|
|
||
| if (currentStaged) { | ||
| versionsToCheck.push(currentStaged); |
Comment on lines
+172
to
+174
| const frozen = issues.some(i => | ||
| i.labels.some(l => l.name.startsWith(`version: ${baseVersion}`)) | ||
| ); |
Comment on lines
+401
to
+402
| `- This issue will NOT be auto-closed \u2014 close it manually once resolved`, | ||
| labels: ['automation', 'promotion: blocked'] |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.