Skip to content

Conversation

Copy link
Contributor

Copilot AI commented Dec 8, 2025

The vendor update workflow creates PRs for all dependency updates, including trivial patch/minor changes, and uses generic messaging that doesn't indicate severity or properly handle singular dependencies.

Changes

Auto-merge for non-breaking updates

  • Minor/patch updates now commit directly to master, skipping PR creation
  • Major version changes still create PRs with breaking change warnings
  • Falls back to PR creation if direct push fails, with error details in logs

Semantic version analysis

  • Detects major/minor/patch changes using version comparison
  • Handles complex version strings (e.g., 2.52.0.windows.1) by extracting numeric components
  • Treats unparseable versions as potentially breaking

Improved messaging

  • PR titles: ⬆️ Update git-for-windows v2.52.0 (singular) vs ⬆️ Update 3 vendored dependencies (plural)
  • Single dependency updates: Shows package name and version (e.g., "📦 Updated git-for-windows from 2.52.0.windows.1 to 2.53.0.windows.1") instead of generic "1 dependency" messages
  • Change type indicators: ⚠️ major, ✨ minor, 🐛 patch, 🔄 unknown displayed as emojis in dependency table (removed redundant "Change Type" column)
  • Single emoji usage throughout (📦) - removed double emoji for consistency
  • Enhanced workflow summaries with contextual emojis throughout
  • Collapsible changelog section: Major version updates include a <details> section with links to full changelog comparison and release notes

Example version comparison logic:

# Extracts numeric parts: "2.52.0.windows.1" → "2.52.0"
$parts = $version.Split('.') | Where-Object { $_ -match '^\d+$' } | Select-Object -First 4
$ver = [System.Version]::Parse($parts -join '.')

if ($newVer.Major -gt $oldVer.Major) {
    $changeType = "major"
    $hasBreakingChanges = $true
}

PR output examples

Multiple dependencies (collapsed view):

Multiple dependencies (expanded changelog for major updates):

Single dependency update:

Modified files:

  • .github/workflows/vendor.yml - auto-merge logic, enhanced UI, changelog generation, and improved single dependency messaging
  • scripts/update.ps1 - version analysis and environment variable exports
Original prompt

Improve pluralization for the update vendor CI/CD task; if there is only 1 vendored dependency, name that (also before/after version) instead of the current phrase that reads Updates to 1 vendored dependencies.

Also, improve the generated messages, in addition to that, use proper emojis where needed. We can look at depandabot's features for inspiration for our own tooling.

Lastly, if all the updated vendored dependencies are only minor (or more insignificant) and don't introduce breaking changes, the CI/CD workflow task can attempt to directly merge without needing a manual PR approve to avoid bothering the developers/maintainers. If this was unable to do so, you can warn about the unability to automatically merge/approve the PR in the step logs. It is prefered not to generate a PR in this case and automatically just push to master. If not, it should not break the current workflow where manual approves result in merging the PR.


💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.

Copilot AI self-assigned this Dec 8, 2025
Copilot AI changed the title [WIP] Improve pluralization and messaging for vendor CI/CD updates Auto-merge non-breaking vendor updates with improved messaging Dec 8, 2025
Copilot AI requested a review from DRSDavidSoft December 8, 2025 21:01
Set-GHVariable -Name COUNT_UPDATED -Value $count
$newVersion = (Get-Content .\vendor\sources.json | ConvertFrom-Json)
$listUpdated = ""
$updateMessage = "| Name | Old Version | New Version |`n| :--- | ---- | ---- |`n"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@copilot Please remove Change Type column as it is excessive, instead if the update is major, add a <details> with <summary> of changes below the table that contains the changelog between the old and new version

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done in commit bf90303. Removed the "Change Type" column and added a collapsible <details> section below the table for major version updates with changelog and release notes links.

Example output with major update:

Collapsed view:
PR with collapsed changelog

Expanded view:
PR with expanded changelog

The table now shows only Name, Old Version, and New Version columns with emoji indicators (⚠️ for major, ✨ for minor, 🐛 for patch). Major updates include a details section with links to the full changelog comparison and release notes.

$emoji = if ($count -eq 1) { '📦' } else { '📦📦' }
echo "### 🔄 Updates Found" >> $env:GITHUB_STEP_SUMMARY
echo "" >> $env:GITHUB_STEP_SUMMARY
echo "**$count** vendor $word updated:" >> $env:GITHUB_STEP_SUMMARY
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@copilot Don't use multiple emoji icons, always use one.

Instead, if there is only an update to one dependency, use that name and version information, instead of 1 vendor updated message

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done in commit e6fea0b. Removed double emoji logic and updated single dependency messages to show the dependency name and version.

Example output for single update:

Single dependency update

The workflow now displays "📦 Updated git-for-windows from 2.52.0.windows.1 to 2.53.0.windows.1" instead of "📦 Automatically updated 1 dependency".

title: 'Updates to `${{ env.COUNT_UPDATED }}` vendored dependencies'
title: ${{ env.COUNT_UPDATED == '1' && format('⬆️ Update {0}', env.LIST_UPDATED) || format('⬆️ Update {0} vendored dependencies', env.COUNT_UPDATED) }}
body: |
### Automatically updated `${{ env.COUNT_UPDATED }}` dependencies:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@copilot Likewise, instead of "Automatically updated 1 dependency" message, just state the name and version of the package instead.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done in commit e6fea0b. The PR body now shows the package name and version for single updates.

Example output:

Single dependency update

For single updates, the heading displays "📦 Updated {name} from {old_version} to {new_version}" instead of the generic "Automatically updated 1 dependency" message.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants