mirror of
https://github.com/cmderdev/cmder.git
synced 2026-03-02 17:06:07 +08:00
Compare commits
27 Commits
master
...
copilot/im
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ae3ed7718c | ||
|
|
1e2d8eb47d | ||
|
|
d495b06726 | ||
|
|
a6f0015b16 | ||
|
|
8c0e2c542c | ||
|
|
f2bde614d4 | ||
|
|
7b86263b0a | ||
|
|
10a0675c96 | ||
|
|
400cdfed54 | ||
|
|
a475de2d4c | ||
|
|
1afbd4ae49 | ||
|
|
82f7fdd61a | ||
|
|
e598536485 | ||
|
|
9cfff38939 | ||
|
|
2cc1125f62 | ||
|
|
4911924259 | ||
|
|
cd2c4ec877 | ||
|
|
0f6584fa02 | ||
|
|
570b1d6043 | ||
|
|
fa2a34a4c0 | ||
|
|
e6fea0bbab | ||
|
|
bf90303c96 | ||
|
|
e64c0b110d | ||
|
|
f2e8ae5189 | ||
|
|
4d21982f26 | ||
|
|
be60888258 | ||
|
|
d61a4f7f36 |
7
.github/dependabot.yml
vendored
7
.github/dependabot.yml
vendored
@@ -1,7 +1,12 @@
|
|||||||
|
# To get started with Dependabot version updates, you'll need to specify which
|
||||||
|
# package ecosystems to update and where the package manifests are located.
|
||||||
|
# Please see the documentation for all configuration options:
|
||||||
|
# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
|
||||||
|
|
||||||
version: 2
|
version: 2
|
||||||
updates:
|
updates:
|
||||||
# Enable version updates for GitHub Actions
|
# Enable version updates for GitHub Actions
|
||||||
- package-ecosystem: "github-actions"
|
- package-ecosystem: "github-actions" # See documentation for possible values
|
||||||
directory: "/" # Location of package manifests
|
directory: "/" # Location of package manifests
|
||||||
schedule:
|
schedule:
|
||||||
interval: "weekly"
|
interval: "weekly"
|
||||||
|
|||||||
44
.github/workflows/build.yml
vendored
44
.github/workflows/build.yml
vendored
@@ -42,17 +42,24 @@ jobs:
|
|||||||
- name: Summary - Repository checkout
|
- name: Summary - Repository checkout
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
run: |
|
run: |
|
||||||
echo "## 📦 Build Cmder - Workflow Summary" >> $env:GITHUB_STEP_SUMMARY
|
$summary = @"
|
||||||
echo "" >> $env:GITHUB_STEP_SUMMARY
|
## 📦 Build Cmder - Workflow Summary
|
||||||
echo "### Repository Information" >> $env:GITHUB_STEP_SUMMARY
|
|
||||||
echo "| Property | Value |" >> $env:GITHUB_STEP_SUMMARY
|
<small>Build started: $buildTime</small>
|
||||||
echo "| --- | --- |" >> $env:GITHUB_STEP_SUMMARY
|
|
||||||
echo "| Repository | \`${{ github.repository }}\` |" >> $env:GITHUB_STEP_SUMMARY
|
### Repository Information
|
||||||
echo "| Branch | \`${{ github.ref_name }}\` |" >> $env:GITHUB_STEP_SUMMARY
|
| Property | Value |
|
||||||
echo "| Commit | \`${{ github.sha }}\` |" >> $env:GITHUB_STEP_SUMMARY
|
| --- | --- |
|
||||||
echo "| Actor | @${{ github.actor }} |" >> $env:GITHUB_STEP_SUMMARY
|
| Repository | [``${{ github.repository }}``](https://github.com/${{ github.repository }}) |
|
||||||
echo "| Workflow | \`${{ github.workflow }}\` |" >> $env:GITHUB_STEP_SUMMARY
|
| Branch | [``$branchName``]($branchLink) |
|
||||||
echo "" >> $env:GITHUB_STEP_SUMMARY
|
| Commit | [``${{ github.sha }}``](https://github.com/${{ github.repository }}/commit/${{ github.sha }}) |
|
||||||
|
| Actor | [@${{ github.actor }}](https://github.com/${{ github.actor }}) |
|
||||||
|
| Workflow | ``${{ github.workflow }}`` |
|
||||||
|
| Cmder Version | **$cmderVersion** |
|
||||||
|
"@
|
||||||
|
$summary += "`n"
|
||||||
|
|
||||||
|
$summary | Add-Content -Path $env:GITHUB_STEP_SUMMARY -Encoding utf8
|
||||||
|
|
||||||
- name: Add MSBuild to PATH
|
- name: Add MSBuild to PATH
|
||||||
uses: microsoft/setup-msbuild@v2
|
uses: microsoft/setup-msbuild@v2
|
||||||
@@ -66,10 +73,17 @@ jobs:
|
|||||||
if: success()
|
if: success()
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
run: |
|
run: |
|
||||||
echo "### ✅ Build Status" >> $env:GITHUB_STEP_SUMMARY
|
$summary = @"
|
||||||
echo "" >> $env:GITHUB_STEP_SUMMARY
|
|
||||||
echo "Cmder launcher successfully compiled." >> $env:GITHUB_STEP_SUMMARY
|
---
|
||||||
echo "" >> $env:GITHUB_STEP_SUMMARY
|
|
||||||
|
### Build Status
|
||||||
|
|
||||||
|
✅ Cmder built successfully.
|
||||||
|
|
||||||
|
"@
|
||||||
|
|
||||||
|
$summary | Add-Content -Path $env:GITHUB_STEP_SUMMARY -Encoding utf8
|
||||||
|
|
||||||
- name: Pack the built files
|
- name: Pack the built files
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
|
|||||||
65
.github/workflows/codeql.yml
vendored
65
.github/workflows/codeql.yml
vendored
@@ -50,20 +50,21 @@ jobs:
|
|||||||
- name: Summary - CodeQL analysis started
|
- name: Summary - CodeQL analysis started
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
run: |
|
run: |
|
||||||
$summary = @(
|
$summary = @"
|
||||||
'## 🔒 CodeQL Security Analysis - Workflow Summary'
|
## 🔒 CodeQL Security Analysis - Workflow Summary
|
||||||
''
|
|
||||||
'### Analysis Configuration'
|
### Analysis Configuration
|
||||||
''
|
|
||||||
'| Property | Value |'
|
| Property | Value |
|
||||||
'| --- | --- |'
|
| --- | --- |
|
||||||
'| Repository | `${{ github.repository }}` |'
|
| Repository | ``${{ github.repository }}`` |
|
||||||
'| Branch | `${{ github.ref_name }}` |'
|
| Branch | ``${{ github.ref_name }}`` |
|
||||||
'| Language | `${{ matrix.language }}` |'
|
| Language | ``${{ matrix.language }}`` |
|
||||||
'| Commit | `${{ github.sha }}` |'
|
| Commit | ``${{ github.sha }}`` |
|
||||||
''
|
|
||||||
)
|
"@
|
||||||
$summary | Add-Content -Path $env:GITHUB_STEP_SUMMARY
|
|
||||||
|
$summary | Add-Content -Path $env:GITHUB_STEP_SUMMARY -Encoding utf8
|
||||||
|
|
||||||
# Initializes the CodeQL tools for scanning.
|
# Initializes the CodeQL tools for scanning.
|
||||||
- name: Initialize CodeQL
|
- name: Initialize CodeQL
|
||||||
@@ -89,13 +90,14 @@ jobs:
|
|||||||
if: success()
|
if: success()
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
run: |
|
run: |
|
||||||
$summary = @(
|
$summary = @"
|
||||||
'### ✅ Build Completed'
|
### ✅ Build Completed
|
||||||
''
|
|
||||||
'Cmder launcher built successfully for CodeQL analysis.'
|
Cmder launcher built successfully for CodeQL analysis.
|
||||||
''
|
|
||||||
)
|
"@
|
||||||
$summary | Add-Content -Path $env:GITHUB_STEP_SUMMARY
|
|
||||||
|
$summary | Add-Content -Path $env:GITHUB_STEP_SUMMARY -Encoding utf8
|
||||||
|
|
||||||
- name: Perform CodeQL Analysis
|
- name: Perform CodeQL Analysis
|
||||||
uses: github/codeql-action/analyze@v4
|
uses: github/codeql-action/analyze@v4
|
||||||
@@ -106,13 +108,14 @@ jobs:
|
|||||||
if: success()
|
if: success()
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
run: |
|
run: |
|
||||||
$summary = @(
|
$summary = @"
|
||||||
'### 🔍 CodeQL Analysis Results'
|
### 🔍 CodeQL Analysis Results
|
||||||
''
|
|
||||||
'✅ CodeQL security analysis completed successfully.'
|
✅ CodeQL security analysis completed successfully.
|
||||||
''
|
|
||||||
'**Language analyzed:** `${{ matrix.language }}`'
|
**Language analyzed:** ``${{ matrix.language }}``
|
||||||
''
|
|
||||||
'> Check the Security tab for detailed findings and recommendations.'
|
> Check the Security tab for detailed findings and recommendations.
|
||||||
)
|
"@
|
||||||
$summary | Add-Content -Path $env:GITHUB_STEP_SUMMARY
|
|
||||||
|
$summary | Add-Content -Path $env:GITHUB_STEP_SUMMARY -Encoding utf8
|
||||||
|
|||||||
2
.github/workflows/tests.yml
vendored
2
.github/workflows/tests.yml
vendored
@@ -39,6 +39,8 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v6
|
- uses: actions/checkout@v6
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
- name: Summary - Test execution started
|
- name: Summary - Test execution started
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
|
|||||||
243
.github/workflows/vendor.yml
vendored
243
.github/workflows/vendor.yml
vendored
@@ -34,10 +34,11 @@ jobs:
|
|||||||
$summary = @(
|
$summary = @(
|
||||||
'## 📦 Update Vendor - Workflow Summary'
|
'## 📦 Update Vendor - Workflow Summary'
|
||||||
''
|
''
|
||||||
'Checking for vendor dependency updates...'
|
'🔍 Checking for vendor dependency updates...'
|
||||||
''
|
''
|
||||||
)
|
)
|
||||||
$summary | Add-Content -Path $env:GITHUB_STEP_SUMMARY
|
|
||||||
|
$summary | Add-Content -Path $env:GITHUB_STEP_SUMMARY -Encoding utf8
|
||||||
|
|
||||||
- id: make-changes
|
- id: make-changes
|
||||||
name: Checking for updates
|
name: Checking for updates
|
||||||
@@ -46,72 +47,256 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
$currentVersion = (Get-Content .\vendor\sources.json | ConvertFrom-Json)
|
$currentVersion = (Get-Content .\vendor\sources.json | ConvertFrom-Json)
|
||||||
. .\scripts\update.ps1 -verbose
|
. .\scripts\update.ps1 -verbose
|
||||||
|
|
||||||
|
# Export count of updated packages (update.ps1 is expected to set $count)
|
||||||
|
if (-not ($count)) { $count = 0 }
|
||||||
Set-GHVariable -Name COUNT_UPDATED -Value $count
|
Set-GHVariable -Name COUNT_UPDATED -Value $count
|
||||||
|
|
||||||
$newVersion = (Get-Content .\vendor\sources.json | ConvertFrom-Json)
|
$newVersion = (Get-Content .\vendor\sources.json | ConvertFrom-Json)
|
||||||
$listUpdated = ""
|
$listUpdated = ""
|
||||||
$updateMessage = "| Name | Old Version | New Version |`n| :--- | ---- | ---- |`n"
|
$updateMessage = "| Name | Old Version | New Version |`n| :--- | :---: | :---: |`n"
|
||||||
|
$majorUpdates = @()
|
||||||
|
$singleDepName = ""
|
||||||
|
$singleDepOldVersion = ""
|
||||||
|
$singleDepNewVersion = ""
|
||||||
foreach ($s in $newVersion) {
|
foreach ($s in $newVersion) {
|
||||||
$oldVersion = ($currentVersion | Where-Object {$_.name -eq $s.name}).version
|
$oldVersion = ($currentVersion | Where-Object {$_.name -eq $s.name}).version
|
||||||
if ($s.version -ne $oldVersion) {
|
if ($s.version -ne $oldVersion) {
|
||||||
$repoUrl = ($repoUrl = $s.Url.Replace("/archive/", "/releases/")).Substring(0, $repoUrl.IndexOf("/releases/")) + "/releases"
|
$repoUrl = ($repoUrl = $s.Url.Replace("/archive/", "/releases/")).Substring(0, $repoUrl.IndexOf("/releases/")) + "/releases"
|
||||||
|
|
||||||
|
# Store single dependency info for messages (only if this is the only update)
|
||||||
|
if ($count -eq 1) {
|
||||||
|
$singleDepName = $s.name
|
||||||
|
$singleDepOldVersion = $oldVersion
|
||||||
|
$singleDepNewVersion = $s.version
|
||||||
|
}
|
||||||
|
|
||||||
|
# Determine change type and emoji
|
||||||
|
$changeType = "unknown"
|
||||||
|
$emoji = "🔄"
|
||||||
|
$isMajor = $false
|
||||||
|
try {
|
||||||
|
# Handle versions with more than 4 parts
|
||||||
|
$oldVerStr = $oldVersion.Split('-')[0]
|
||||||
|
$newVerStr = $s.version.Split('-')[0]
|
||||||
|
|
||||||
|
# Split by dots and take only numeric parts, first 4 max
|
||||||
|
$oldParts = $oldVerStr.Split('.') | Where-Object { $_ -match '^\d+$' } | Select-Object -First 4
|
||||||
|
$newParts = $newVerStr.Split('.') | Where-Object { $_ -match '^\d+$' } | Select-Object -First 4
|
||||||
|
|
||||||
|
# Ensure we have at least 2 parts (major.minor)
|
||||||
|
if ($oldParts.Count -ge 2 -and $newParts.Count -ge 2) {
|
||||||
|
$oldVerParseable = $oldParts -join '.'
|
||||||
|
$newVerParseable = $newParts -join '.'
|
||||||
|
|
||||||
|
$oldVer = [System.Version]::Parse($oldVerParseable)
|
||||||
|
$newVer = [System.Version]::Parse($newVerParseable)
|
||||||
|
|
||||||
|
if ($newVer.Major -gt $oldVer.Major) {
|
||||||
|
$changeType = "major"
|
||||||
|
$emoji = "🔥"
|
||||||
|
$isMajor = $true
|
||||||
|
} elseif ($newVer.Minor -gt $oldVer.Minor) {
|
||||||
|
$changeType = "minor"
|
||||||
|
$emoji = "🚀"
|
||||||
|
} else {
|
||||||
|
$changeType = "patch"
|
||||||
|
$emoji = "⬆️"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch {
|
||||||
|
$changeType = "unknown"
|
||||||
|
$emoji = "🔄"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Track major updates for changelog section
|
||||||
|
if ($isMajor) {
|
||||||
|
$compareUrl = "$repoUrl/compare/v$oldVersion...v$($s.version)"
|
||||||
|
$majorUpdates += @{
|
||||||
|
name = $s.name
|
||||||
|
oldVersion = $oldVersion
|
||||||
|
newVersion = $s.version
|
||||||
|
compareUrl = $compareUrl
|
||||||
|
repoUrl = $repoUrl
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$listUpdated += "$($s.name) v$($s.version), "
|
$listUpdated += "$($s.name) v$($s.version), "
|
||||||
$updateMessage += "| **[$($s.name)]($repoUrl)** | $oldVersion | **$($s.version)** |`n"
|
$updateMessage += "| $emoji **[$($s.name)]($repoUrl)** | \`$oldVersion\` | **\`$($s.version)\`** |`n"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($count -eq 0) { return }
|
if ($count -eq 0) { return }
|
||||||
|
|
||||||
Set-GHVariable -Name LIST_UPDATED -Value $listUpdated.Trim(', ')
|
Set-GHVariable -Name LIST_UPDATED -Value $listUpdated.Trim(', ')
|
||||||
echo "UPDATE_MESSAGE<<<EOF`n$updateMessage`n<EOF" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8
|
# Set single dependency variables (they will only be used if COUNT_UPDATED is 1)
|
||||||
|
# Use safe fallback values in case variables weren't set (shouldn't happen but prevents errors)
|
||||||
|
if ([string]::IsNullOrEmpty($singleDepName) -and $count -eq 1) {
|
||||||
|
# This shouldn't happen, but if it does, log a warning
|
||||||
|
Write-Warning "Single dependency name not set despite count being 1"
|
||||||
|
$singleDepName = "unknown-package"
|
||||||
|
$singleDepOldVersion = "unknown"
|
||||||
|
$singleDepNewVersion = "unknown"
|
||||||
|
} elseif ([string]::IsNullOrEmpty($singleDepName)) {
|
||||||
|
# For multiple dependencies, set placeholder values (won't be used)
|
||||||
|
$singleDepName = ""
|
||||||
|
$singleDepOldVersion = ""
|
||||||
|
$singleDepNewVersion = ""
|
||||||
|
}
|
||||||
|
|
||||||
|
Set-GHVariable -Name SINGLE_DEP_NAME -Value $singleDepName
|
||||||
|
Set-GHVariable -Name SINGLE_DEP_OLD_VERSION -Value $singleDepOldVersion
|
||||||
|
Set-GHVariable -Name SINGLE_DEP_NEW_VERSION -Value $singleDepNewVersion
|
||||||
|
|
||||||
|
# Write multiline UPDATE_MESSAGE to GITHUB_ENV
|
||||||
|
Add-Content -Path $env:GITHUB_ENV -Value "UPDATE_MESSAGE<<EOF"
|
||||||
|
Add-Content -Path $env:GITHUB_ENV -Value $updateMessage
|
||||||
|
Add-Content -Path $env:GITHUB_ENV -Value "EOF"
|
||||||
|
|
||||||
|
# Generate major updates changelog section and export
|
||||||
|
if ($majorUpdates.Count -gt 0) {
|
||||||
|
$changelogSection = "`n<details>`n<summary>🔥 Major version updates - View changelog</summary>`n`n"
|
||||||
|
foreach ($update in $majorUpdates) {
|
||||||
|
$changelogSection += "### [$($update.name)]($($update.repoUrl))`n"
|
||||||
|
$changelogSection += "**$($update.oldVersion)** → **$($update.newVersion)**`n`n"
|
||||||
|
$changelogSection += "- [View full changelog]($($update.compareUrl))`n"
|
||||||
|
$changelogSection += "- [Release notes]($($update.repoUrl)/tag/v$($update.newVersion))`n`n"
|
||||||
|
}
|
||||||
|
$changelogSection += "</details>`n"
|
||||||
|
|
||||||
|
Add-Content -Path $env:GITHUB_ENV -Value "CHANGELOG_SECTION<<EOF"
|
||||||
|
Add-Content -Path $env:GITHUB_ENV -Value $changelogSection
|
||||||
|
Add-Content -Path $env:GITHUB_ENV -Value "EOF"
|
||||||
|
Add-Content -Path $env:GITHUB_ENV -Value "HAS_BREAKING_CHANGES=True"
|
||||||
|
} else {
|
||||||
|
Add-Content -Path $env:GITHUB_ENV -Value "CHANGELOG_SECTION="
|
||||||
|
Add-Content -Path $env:GITHUB_ENV -Value "HAS_BREAKING_CHANGES=False"
|
||||||
|
}
|
||||||
|
|
||||||
- name: Summary - Update check results
|
- name: Summary - Update check results
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
run: |
|
run: |
|
||||||
$count = [int]$env:COUNT_UPDATED
|
$count = [int]$env:COUNT_UPDATED
|
||||||
|
|
||||||
if ($count -eq 0) {
|
if ($count -eq 0) {
|
||||||
$summary = @(
|
$summary = @(
|
||||||
'### ✅ No Updates Available'
|
'### ✅ No Updates Available'
|
||||||
''
|
''
|
||||||
'All vendor dependencies are up to date.'
|
'All vendor dependencies are up to date! 🎉'
|
||||||
|
''
|
||||||
)
|
)
|
||||||
$summary | Add-Content -Path $env:GITHUB_STEP_SUMMARY
|
|
||||||
} else {
|
} else {
|
||||||
$word = if ($count -eq 1) { 'dependency' } else { 'dependencies' }
|
$word = if ($count -eq 1) { 'dependency' } else { 'dependencies' }
|
||||||
$summary = @(
|
$summary = @(
|
||||||
'### 🔄 Updates Found'
|
'### 🔄 Updates Found'
|
||||||
''
|
''
|
||||||
"**$count** vendor $word updated:"
|
|
||||||
''
|
|
||||||
$env:UPDATE_MESSAGE
|
|
||||||
''
|
|
||||||
)
|
)
|
||||||
$summary | Add-Content -Path $env:GITHUB_STEP_SUMMARY
|
$summary += '📦 **' + $env:SINGLE_DEP_NAME + '** updated from `' + $env:SINGLE_DEP_OLD_VERSION + '` to `' + $env:SINGLE_DEP_NEW_VERSION + '`' + [Environment]::NewLine + [Environment]::NewLine
|
||||||
|
$summary += '📦 **' + $count + '** vendor ' + $word + ' updated:' + [Environment]::NewLine + [Environment]::NewLine
|
||||||
|
}
|
||||||
|
|
||||||
|
$summary += $env:UPDATE_MESSAGE + [Environment]::NewLine
|
||||||
|
|
||||||
|
# Check if we can auto-merge (only minor/patch changes)
|
||||||
|
$hasBreaking = $env:HAS_BREAKING_CHANGES -eq 'True'
|
||||||
|
if ($hasBreaking) {
|
||||||
|
$summary += '> ⚠️ **Note:** This update contains major version changes that may include breaking changes.'
|
||||||
|
} else {
|
||||||
|
$summary += '> ℹ️ **Note:** This update only contains minor or patch changes.'
|
||||||
|
}
|
||||||
|
|
||||||
|
$summary | Add-Content -Path $env:GITHUB_STEP_SUMMARY -Encoding utf8
|
||||||
|
|
||||||
|
- name: Auto-merge minor updates
|
||||||
|
if: env.COUNT_UPDATED > 0 && env.HAS_BREAKING_CHANGES != 'True'
|
||||||
|
shell: pwsh
|
||||||
|
run: |
|
||||||
|
try {
|
||||||
|
echo "### 🚀 Auto-merging Updates" >> $env:GITHUB_STEP_SUMMARY
|
||||||
|
echo "" >> $env:GITHUB_STEP_SUMMARY
|
||||||
|
echo "Attempting to automatically merge non-breaking changes to master..." >> $env:GITHUB_STEP_SUMMARY
|
||||||
|
|
||||||
|
git config --global user.name "github-actions[bot]"
|
||||||
|
git config --global user.email "github-actions[bot]@users.noreply.github.com"
|
||||||
|
|
||||||
|
# Commit the changes
|
||||||
|
git add vendor/sources.json
|
||||||
|
$commitResult = git commit -m "⬆️ Update dependencies ($env:LIST_UPDATED)"
|
||||||
|
|
||||||
|
# Push directly to master
|
||||||
|
git push origin HEAD:master
|
||||||
|
|
||||||
|
echo "" >> $env:GITHUB_STEP_SUMMARY
|
||||||
|
echo "✅ **Success!** Updates have been automatically merged to master." >> $env:GITHUB_STEP_SUMMARY
|
||||||
|
echo "" >> $env:GITHUB_STEP_SUMMARY
|
||||||
|
echo "**Updated dependencies:** $env:LIST_UPDATED" >> $env:GITHUB_STEP_SUMMARY
|
||||||
|
|
||||||
|
# Set a flag to skip PR creation
|
||||||
|
echo "AUTO_MERGED=true" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8
|
||||||
|
} catch {
|
||||||
|
echo "" >> $env:GITHUB_STEP_SUMMARY
|
||||||
|
echo "⚠️ **Warning:** Unable to automatically merge updates." >> $env:GITHUB_STEP_SUMMARY
|
||||||
|
echo "" >> $env:GITHUB_STEP_SUMMARY
|
||||||
|
echo "**Error:** $($_.Exception.Message)" >> $env:GITHUB_STEP_SUMMARY
|
||||||
|
echo "" >> $env:GITHUB_STEP_SUMMARY
|
||||||
|
echo "Falling back to creating a pull request..." >> $env:GITHUB_STEP_SUMMARY
|
||||||
|
|
||||||
|
Write-Warning "Failed to auto-merge: $($_.Exception.Message)"
|
||||||
|
|
||||||
|
# Reset the commit if one was made
|
||||||
|
if ($commitResult) {
|
||||||
|
git reset --hard HEAD~1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Set flag to create PR instead
|
||||||
|
echo "AUTO_MERGED=false" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8
|
||||||
}
|
}
|
||||||
|
|
||||||
- uses: peter-evans/create-pull-request@v8
|
- uses: peter-evans/create-pull-request@v8
|
||||||
if: env.COUNT_UPDATED > 0
|
if: env.COUNT_UPDATED > 0 && (env.HAS_BREAKING_CHANGES == 'True' || env.AUTO_MERGED == 'false')
|
||||||
with:
|
with:
|
||||||
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: |
|
body: |
|
||||||
### Automatically updated `${{ env.COUNT_UPDATED }}` dependencies:
|
### ${{ env.COUNT_UPDATED == 1 && format('📦 Updated {0} from `{1}` to `{2}`', env.SINGLE_DEP_NAME, env.SINGLE_DEP_OLD_VERSION, env.SINGLE_DEP_NEW_VERSION) || format('📦 Automatically updated `{0}` dependencies', env.COUNT_UPDATED) }}
|
||||||
|
|
||||||
${{ env.UPDATE_MESSAGE }}
|
${{ env.UPDATE_MESSAGE }}
|
||||||
|
|
||||||
|
${{ env.CHANGELOG_SECTION }}
|
||||||
|
|
||||||
---
|
---
|
||||||
Please verify and then **Merge** the pull request to update.
|
|
||||||
|
${{ env.HAS_BREAKING_CHANGES == 'True' && '⚠️ **This update contains major version changes that may include breaking changes.**' || 'ℹ️ This update only contains minor or patch changes.' }}
|
||||||
|
|
||||||
|
Please verify and then **Merge** the pull request to apply the updates.
|
||||||
commit-message: '⬆️ Update dependencies (${{ env.LIST_UPDATED }})'
|
commit-message: '⬆️ Update dependencies (${{ env.LIST_UPDATED }})'
|
||||||
branch: update-vendor
|
branch: update-vendor
|
||||||
base: master
|
base: master
|
||||||
|
|
||||||
- name: Summary - Pull request created
|
- name: Summary - Pull request created
|
||||||
if: env.COUNT_UPDATED > 0
|
if: env.COUNT_UPDATED > 0 && (env.HAS_BREAKING_CHANGES == 'True' || env.AUTO_MERGED == 'false')
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
run: |
|
run: |
|
||||||
$summary = @(
|
$updatedLine = if (-not [string]::IsNullOrEmpty($env:LIST_UPDATED)) { "**Updated dependencies:** $env:LIST_UPDATED" } else { "**Updated dependencies:** " }
|
||||||
'### 🎉 Pull Request Created'
|
$summary = @"
|
||||||
''
|
### 🎉 Pull Request Created
|
||||||
'A pull request has been created to update the vendor dependencies.'
|
|
||||||
''
|
A pull request has been created to update the vendor dependencies.
|
||||||
'**Branch:** `update-vendor`'
|
|
||||||
''
|
**Branch:** `update-vendor`
|
||||||
$env:LIST_UPDATED -and "**Updated dependencies:** $env:LIST_UPDATED" -or "**Updated dependencies:** "
|
|
||||||
''
|
$updatedLine
|
||||||
'> Please review and merge the pull request to apply the updates.'
|
|
||||||
)
|
"@
|
||||||
$summary | Add-Content -Path $env:GITHUB_STEP_SUMMARY
|
|
||||||
|
if ($env:HAS_BREAKING_CHANGES -eq 'True') {
|
||||||
|
$summary += "> ⚠️ **Manual review required:** This update contains major version changes."
|
||||||
|
} else {
|
||||||
|
$summary += "> ℹ️ **Note:** Auto-merge failed, manual review required."
|
||||||
|
}
|
||||||
|
|
||||||
|
$summary += @"
|
||||||
|
> Please review and merge the pull request to apply the updates.
|
||||||
|
|
||||||
|
"@
|
||||||
|
|
||||||
|
$summary | Add-Content -Path $env:GITHUB_STEP_SUMMARY -Encoding utf8
|
||||||
|
|||||||
@@ -259,6 +259,8 @@ function Fetch-DownloadUrl {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$count = 0
|
$count = 0
|
||||||
|
$hasBreakingChanges = $false
|
||||||
|
$updateDetails = @()
|
||||||
|
|
||||||
# Read the current sources content
|
# Read the current sources content
|
||||||
$sources = Get-Content $sourcesPath | Out-String | ConvertFrom-Json
|
$sources = Get-Content $sourcesPath | Out-String | ConvertFrom-Json
|
||||||
@@ -301,6 +303,52 @@ foreach ($s in $sources) {
|
|||||||
# }
|
# }
|
||||||
|
|
||||||
$count++
|
$count++
|
||||||
|
|
||||||
|
# Analyze version change type
|
||||||
|
$changeType = "unknown"
|
||||||
|
try {
|
||||||
|
# Try parsing as semantic version
|
||||||
|
# Handle versions with more than 4 parts by taking only the first 3-4 parts
|
||||||
|
$oldVerStr = $s.version.Split('-')[0]
|
||||||
|
$newVerStr = $version.Split('-')[0]
|
||||||
|
|
||||||
|
# Split by dots and take only numeric parts, first 4 max
|
||||||
|
$oldParts = $oldVerStr.Split('.') | Where-Object { $_ -match '^\d+$' } | Select-Object -First 4
|
||||||
|
$newParts = $newVerStr.Split('.') | Where-Object { $_ -match '^\d+$' } | Select-Object -First 4
|
||||||
|
|
||||||
|
# Ensure we have at least 2 parts (major.minor)
|
||||||
|
if ($oldParts.Count -ge 2 -and $newParts.Count -ge 2) {
|
||||||
|
$oldVerParseable = $oldParts -join '.'
|
||||||
|
$newVerParseable = $newParts -join '.'
|
||||||
|
|
||||||
|
$oldVer = [System.Version]::Parse($oldVerParseable)
|
||||||
|
$newVer = [System.Version]::Parse($newVerParseable)
|
||||||
|
|
||||||
|
if ($newVer.Major -gt $oldVer.Major) {
|
||||||
|
$changeType = "major"
|
||||||
|
$hasBreakingChanges = $true
|
||||||
|
} elseif ($newVer.Minor -gt $oldVer.Minor) {
|
||||||
|
$changeType = "minor"
|
||||||
|
} else {
|
||||||
|
$changeType = "patch"
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
# Not enough numeric parts for semantic versioning
|
||||||
|
throw "Not enough numeric version parts"
|
||||||
|
}
|
||||||
|
} catch {
|
||||||
|
# If semantic versioning fails, treat as unknown (potentially breaking)
|
||||||
|
$changeType = "unknown"
|
||||||
|
$hasBreakingChanges = $true
|
||||||
|
Write-Verbose "Could not parse version as semantic version, treating as potentially breaking"
|
||||||
|
}
|
||||||
|
|
||||||
|
$updateDetails += @{
|
||||||
|
name = $s.name
|
||||||
|
oldVersion = $s.version
|
||||||
|
newVersion = $version
|
||||||
|
changeType = $changeType
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$s.url = $downloadUrl
|
$s.url = $downloadUrl
|
||||||
@@ -314,12 +362,16 @@ if ($count -eq 0) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Export update details for GitHub Actions
|
||||||
|
if ($Env:GITHUB_ACTIONS -eq 'true') {
|
||||||
|
$updateDetailsJson = $updateDetails | ConvertTo-Json -Compress
|
||||||
|
Write-Output "UPDATE_DETAILS=$updateDetailsJson" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8
|
||||||
|
Write-Output "HAS_BREAKING_CHANGES=$hasBreakingChanges" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8
|
||||||
|
Write-Output "::notice title=Task Complete::Successfully updated $count dependencies."
|
||||||
|
}
|
||||||
|
|
||||||
if ($Env:APPVEYOR -eq 'True') {
|
if ($Env:APPVEYOR -eq 'True') {
|
||||||
Add-AppveyorMessage -Message "Successfully updated $count dependencies." -Category Information
|
Add-AppveyorMessage -Message "Successfully updated $count dependencies." -Category Information
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($Env:GITHUB_ACTIONS -eq 'true') {
|
|
||||||
Write-Output "::notice title=Task Complete::Successfully updated $count dependencies."
|
|
||||||
}
|
|
||||||
|
|
||||||
Write-Host -ForegroundColor green "Successfully updated $count dependencies."
|
Write-Host -ForegroundColor green "Successfully updated $count dependencies."
|
||||||
|
|||||||
Reference in New Issue
Block a user