resolve conflicts

This commit is contained in:
David Refoua
2026-04-12 04:51:54 +03:30
6 changed files with 389 additions and 106 deletions

View File

@@ -12,6 +12,7 @@ on:
- "v*"
pull_request:
branches: [ "master", "development" ]
workflow_dispatch:
#---------------------------------#
# environment configuration #
@@ -42,21 +43,91 @@ jobs:
- name: Summary - Repository checkout
shell: pwsh
run: |
# Get Cmder version
. scripts/utils.ps1
$cmderVersion = Get-VersionStr
$buildTime = (Get-Date).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ")
# Determine branch and PR information
$refName = "${{ github.ref_name }}"
$headRef = "${{ github.head_ref }}"
$eventName = "${{ github.event_name }}"
$prNumber = $null
$actualBranchName = $refName
$branchLink = ""
$prLink = ""
# Check if this is a PR merge ref (e.g., "3061/merge")
if ($refName -match '^(\d+)/(merge|head)$') {
$prNumber = $Matches[1]
# Use head_ref for the actual branch name if available
if ($headRef) {
$actualBranchName = $headRef
}
$branchLink = "https://github.com/${{ github.repository }}/tree/$actualBranchName"
$prLink = "https://github.com/${{ github.repository }}/pull/$prNumber"
} elseif ($eventName -eq "pull_request") {
# This is a pull request event
$prNumber = "${{ github.event.pull_request.number }}"
if ($headRef) {
$actualBranchName = $headRef
}
$branchLink = "https://github.com/${{ github.repository }}/tree/$actualBranchName"
$prLink = "https://github.com/${{ github.repository }}/pull/$prNumber"
} else {
# Regular branch, link to the branch tree
$branchLink = "https://github.com/${{ github.repository }}/tree/$refName"
}
$summary = @"
## 📦 Build Cmder - Workflow Summary
<small>Build started: $buildTime</small>
<small>Build started: ``$buildTime``</small>
### Repository Information
| Property | Value |
| --- | --- |
| Repository | [``${{ github.repository }}``](https://github.com/${{ github.repository }}) |
| Branch | [``$branchName``]($branchLink) |
| Branch | [``$actualBranchName``]($branchLink) |
$(if ($prNumber) { "| Pull Request | [#$prNumber]($prLink) |" })
| 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** |
---
### 🗃️ Vendor Packages ([sources.json](vendor/sources.json))
| Package | Version |
| --- | --- |
"@
# Read vendor sources.json and add to summary
$vendorSources = Get-Content -Raw "vendor/sources.json" | ConvertFrom-Json
if ($vendorSources.Count -eq 0) {
$summary += "`n| _No vendor packages found_ | |"
} else {
foreach ($vendor in $vendorSources) {
# Create release link based on vendor package
$versionLink = "$($vendor.version)"
if ($vendor.url) {
# Extract owner/repo/tag from the URL and create release link
# Handle both /releases/download/ and /archive/ URLs
if ($vendor.url -match 'github\.com/([^/]+)/([^/]+)/(releases/download|archive)/([^/]+)') {
$owner = $Matches[1]
$repo = $Matches[2]
$pathType = $Matches[3]
$tag = $Matches[4]
if ($pathType -eq 'archive') {
$tag = $tag -replace '\.(?:tar\.gz|tgz|zip)$', ''
}
$versionLink = "[$($vendor.version)](https://github.com/$owner/$repo/releases/tag/$tag)"
}
}
$summary += "`n| ``$($vendor.name)`` | $versionLink |"
}
}
$summary += "`n"
$summary | Add-Content -Path $env:GITHUB_STEP_SUMMARY -Encoding utf8
@@ -77,8 +148,6 @@ jobs:
---
### Build Status
✅ Cmder built successfully.
"@
@@ -90,26 +159,6 @@ jobs:
working-directory: scripts
run: .\pack.ps1 -verbose
- name: Summary - Package artifacts
if: success()
shell: pwsh
run: |
echo "### 📦 Artifacts Created" >> $env:GITHUB_STEP_SUMMARY
echo "" >> $env:GITHUB_STEP_SUMMARY
echo "| Artifact | Size | Hash (SHA256) |" >> $env:GITHUB_STEP_SUMMARY
echo "| --- | --- | --- |" >> $env:GITHUB_STEP_SUMMARY
$artifacts = @("cmder.zip", "cmder.7z", "cmder_mini.zip")
foreach ($artifact in $artifacts) {
$path = "build/$artifact"
if (Test-Path $path) {
$size = (Get-Item $path).Length / 1MB
# Truncate hash to first 16 chars for summary readability (full hash in hashes.txt)
$hash = (Get-FileHash $path -Algorithm SHA256).Hash.Substring(0, 16)
echo "| \`$artifact\` | $([math]::Round($size, 2)) MB | \`$hash...\` |" >> $env:GITHUB_STEP_SUMMARY
}
}
echo "" >> $env:GITHUB_STEP_SUMMARY
- name: Upload artifact (cmder.zip)
uses: actions/upload-artifact@v7
with:
@@ -142,15 +191,55 @@ jobs:
- name: Summary - Artifacts uploaded
if: success()
shell: pwsh
env:
GH_TOKEN: ${{ github.token }}
run: |
echo "### ☁️ Upload Status" >> $env:GITHUB_STEP_SUMMARY
echo "" >> $env:GITHUB_STEP_SUMMARY
echo "All artifacts successfully uploaded to GitHub Actions:" >> $env:GITHUB_STEP_SUMMARY
echo '- ✅ `cmder.zip`' >> $env:GITHUB_STEP_SUMMARY
echo '- ✅ `cmder.7z`' >> $env:GITHUB_STEP_SUMMARY
echo '- ✅ `cmder_mini.zip`' >> $env:GITHUB_STEP_SUMMARY
echo '- ✅ `hashes.txt`' >> $env:GITHUB_STEP_SUMMARY
echo "" >> $env:GITHUB_STEP_SUMMARY
# Source utility functions
. scripts/utils.ps1
$summary = @"
### 🗃️ Artifacts
| Artifact | Size | Hash (SHA256) |
| --- | --- | --- |
"@
# Get all files from the build directory (excluding directories and hidden files)
if (Test-Path "build") {
$buildFiles = Get-ChildItem -Path "build" -File | Where-Object { -not $_.Name.StartsWith('.') } | Sort-Object Name
foreach ($file in $buildFiles) {
$artifact = $file.Name
$path = $file.FullName
$sizeFormatted = Format-FileSize -Bytes $file.Length
$hash = (Get-FileHash $path -Algorithm SHA256).Hash
# Try to get the actual artifact download URL
$downloadUrl = Get-ArtifactDownloadUrl -ArtifactName $artifact -Repository "${{ github.repository }}" -RunId "${{ github.run_id }}"
$warning = ""
if (-not $downloadUrl) {
# Fallback to workflow run page if artifact URL fetch fails
$downloadUrl = "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
$warning = " ⚠️"
}
# Determine emoji based on file type
if ($artifact -match '\.txt$') {
$emoji = "📄"
} elseif ($artifact -match '\.(zip|rar|7z)$') {
$emoji = "🗄️"
} else {
$emoji = "📦"
}
$summary += "`n| $emoji [``$artifact``$warning]($downloadUrl) | $sizeFormatted | ``$hash`` |"
}
}
$summary += "`n"
$summary | Add-Content -Path $env:GITHUB_STEP_SUMMARY -Encoding utf8
- name: Create Release
uses: softprops/action-gh-release@v2
@@ -168,14 +257,20 @@ jobs:
if: startsWith(github.ref, 'refs/tags/')
shell: pwsh
run: |
echo "### 🚀 Release Information" >> $env:GITHUB_STEP_SUMMARY
echo "" >> $env:GITHUB_STEP_SUMMARY
echo "Draft release created for tag: **\`${{ github.ref_name }}\`**" >> $env:GITHUB_STEP_SUMMARY
echo "" >> $env:GITHUB_STEP_SUMMARY
echo "Release includes:" >> $env:GITHUB_STEP_SUMMARY
echo "- Full version (\`cmder.zip\`, \`cmder.7z\`)" >> $env:GITHUB_STEP_SUMMARY
echo "- Mini version (\`cmder_mini.zip\`)" >> $env:GITHUB_STEP_SUMMARY
echo "- File hashes (\`hashes.txt\`)" >> $env:GITHUB_STEP_SUMMARY
echo "" >> $env:GITHUB_STEP_SUMMARY
echo "> ⚠️ Release is in **draft** mode. Please review and publish manually." >> $env:GITHUB_STEP_SUMMARY
$summary = @"
---
### Release Information
🚀 Draft release created for tag: **``${{ github.ref_name }}``**
Release includes:
- Full version (``cmder.zip``, ``cmder.7z``)
- Mini version (``cmder_mini.zip``)
- File hashes (``hashes.txt``)
> ⚠️ Release is in **draft** mode. Please review and publish manually.
"@
$summary | Add-Content -Path $env:GITHUB_STEP_SUMMARY -Encoding utf8

View File

@@ -51,16 +51,16 @@ jobs:
shell: pwsh
run: |
$summary = @"
## 🔒 CodeQL Security Analysis - Workflow Summary
## 🔒 CodeQL Security Analysis - Workflow Summary
### Analysis Configuration
### Analysis Configuration
| Property | Value |
| --- | --- |
| Repository | ``${{ github.repository }}`` |
| Branch | ``${{ github.ref_name }}`` |
| Language | ``${{ matrix.language }}`` |
| Commit | ``${{ github.sha }}`` |
| Property | Value |
| --- | --- |
| Repository | ``${{ github.repository }}`` |
| Branch | ``${{ github.ref_name }}`` |
| Language | ``${{ matrix.language }}`` |
| Commit | ``${{ github.sha }}`` |
"@
@@ -91,9 +91,9 @@ jobs:
shell: pwsh
run: |
$summary = @"
### ✅ Build Completed
### ✅ Build Completed
Cmder launcher built successfully for CodeQL analysis.
Cmder launcher built successfully for CodeQL analysis.
"@
@@ -109,13 +109,13 @@ jobs:
shell: pwsh
run: |
$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 -Encoding utf8

View File

@@ -45,16 +45,27 @@ jobs:
- name: Summary - Test execution started
shell: pwsh
run: |
echo "## 🧪 Run Tests - Workflow Summary" >> $env:GITHUB_STEP_SUMMARY
echo "" >> $env:GITHUB_STEP_SUMMARY
echo "### Test Environment" >> $env:GITHUB_STEP_SUMMARY
echo "| Property | Value |" >> $env:GITHUB_STEP_SUMMARY
echo "| --- | --- |" >> $env:GITHUB_STEP_SUMMARY
echo "| Repository | \`${{ github.repository }}\` |" >> $env:GITHUB_STEP_SUMMARY
echo "| Branch | \`${{ github.ref_name }}\` |" >> $env:GITHUB_STEP_SUMMARY
echo "| Commit | \`${{ github.sha }}\` |" >> $env:GITHUB_STEP_SUMMARY
echo "| Runner OS | \`${{ runner.os }}\` |" >> $env:GITHUB_STEP_SUMMARY
echo "" >> $env:GITHUB_STEP_SUMMARY
# Get Cmder version
. scripts/utils.ps1
$cmderVersion = Get-VersionStr
$summary = @"
## ✅ Run Tests - Workflow Summary
### Test Environment
| Property | Value |
| --- | --- |
| Repository | ``${{ github.repository }}`` |
| Branch | ``${{ github.ref_name }}`` |
| Commit | ``${{ github.sha }}`` |
| Runner OS | ``${{ runner.os }}`` |
| Cmder Version | **$cmderVersion** |
| PowerShell Version | **$($PSVersionTable.PSVersion)** |
| Event | ``${{ github.event_name }}`` |
"@
$summary | Add-Content -Path $env:GITHUB_STEP_SUMMARY -Encoding utf8
- name: Initialize vendors
shell: pwsh
@@ -65,53 +76,127 @@ jobs:
if: success()
shell: pwsh
run: |
echo "### ⚙️ Vendor Initialization" >> $env:GITHUB_STEP_SUMMARY
echo "" >> $env:GITHUB_STEP_SUMMARY
echo "✅ Vendor dependencies initialized successfully." >> $env:GITHUB_STEP_SUMMARY
echo "" >> $env:GITHUB_STEP_SUMMARY
# Get vendor versions from sources.json
$vendorInfo = @()
$sources = Get-Content "vendor\sources.json" -Raw | ConvertFrom-Json
foreach ($source in $sources) {
$dir = $source.name
if (-not $dir) {
continue
}
$versionFile = "vendor/$dir/.cmderver"
if (Test-Path $versionFile) {
$version = Get-Content $versionFile -Raw
$vendorInfo += "- **$dir**: $($version.Trim())"
}
}
$summary = @"
### ⚙️ Vendor Initialization
✅ Vendor dependencies initialized successfully.
**Vendor Versions:**
"@
$(
if ($vendorInfo.Count -eq 0) {
$summary += "_No vendor version information available._"
} else {
$summary += $vendorInfo -join "`n"
}
)
$summary | Add-Content -Path $env:GITHUB_STEP_SUMMARY -Encoding utf8
- name: Summary - Test results table header
if: success()
shell: pwsh
run: |
echo "### 📋 Test Results" >> $env:GITHUB_STEP_SUMMARY
echo "" >> $env:GITHUB_STEP_SUMMARY
echo "| Test | Status |" >> $env:GITHUB_STEP_SUMMARY
echo "| --- | --- |" >> $env:GITHUB_STEP_SUMMARY
$summary = @"
### 📋 Test Results
| Test | Status | Duration |
| --- | --- | --- |
"@
$summary | Add-Content -Path $env:GITHUB_STEP_SUMMARY -Encoding utf8
- name: Testing Clink Shell
id: test-clink
shell: pwsh
run: |
$startTime = Get-Date
cmd /c vendor\init.bat /v /d /t
$duration = [math]::Round(((Get-Date) - $startTime).TotalSeconds, 2)
echo "duration=$duration" >> $env:GITHUB_OUTPUT
- name: Summary - Clink Shell test
if: success()
shell: pwsh
run: |
echo "| Clink Shell | ✅ Passed |" >> $env:GITHUB_STEP_SUMMARY
$duration = "${{ steps.test-clink.outputs.duration }}"
if ($duration) {
$duration = "$duration s"
} else {
$duration = "N/A"
}
"| Clink Shell | ✅ Passed | $duration |" | Add-Content -Path $env:GITHUB_STEP_SUMMARY -Encoding utf8
- name: Testing PowerShell
id: test-powershell
shell: pwsh
run: |
$startTime = Get-Date
PowerShell.exe -ExecutionPolicy Bypass -NoLogo -NoProfile -Command "$env:CMDER_DEBUG='1'; . 'vendor\profile.ps1'"
$duration = [math]::Round(((Get-Date) - $startTime).TotalSeconds, 2)
echo "duration=$duration" >> $env:GITHUB_OUTPUT
- name: Summary - PowerShell test
if: success()
shell: pwsh
run: |
echo "| PowerShell | ✅ Passed |" >> $env:GITHUB_STEP_SUMMARY
$duration = "${{ steps.test-powershell.outputs.duration }}"
if ($duration) {
$duration = "$duration s"
} else {
$duration = "N/A"
}
"| PowerShell | ✅ Passed | $duration |" | Add-Content -Path $env:GITHUB_STEP_SUMMARY -Encoding utf8
- name: Testing Bash
id: test-bash
shell: pwsh
run: |
$startTime = Get-Date
bash vendor/cmder.sh
$duration = [math]::Round(((Get-Date) - $startTime).TotalSeconds, 2)
echo "duration=$duration" >> $env:GITHUB_OUTPUT
- name: Summary - Bash test
if: success()
shell: pwsh
run: |
echo "| Bash | ✅ Passed |" >> $env:GITHUB_STEP_SUMMARY
$duration = "${{ steps.test-bash.outputs.duration }}"
if ($duration) {
$duration = "$duration s"
} else {
$duration = "N/A"
}
"| Bash | ✅ Passed | $duration |" | Add-Content -Path $env:GITHUB_STEP_SUMMARY -Encoding utf8
- name: Summary - All tests completed
if: success()
shell: pwsh
run: |
echo "" >> $env:GITHUB_STEP_SUMMARY
echo "### ✅ All Tests Completed" >> $env:GITHUB_STEP_SUMMARY
echo "" >> $env:GITHUB_STEP_SUMMARY
echo "All shell environments tested successfully!" >> $env:GITHUB_STEP_SUMMARY
$summary = @"
### ✅ All Tests Completed
All shell environments tested successfully!
**Test Coverage:**
- ✅ Clink shell environment (Windows cmd.exe with Clink)
- ✅ PowerShell environment (with Cmder profile)
- ✅ Bash environment (Git Bash integration)
"@
$summary | Add-Content -Path $env:GITHUB_STEP_SUMMARY -Encoding utf8

View File

@@ -31,12 +31,12 @@ jobs:
- name: Summary - Workflow started
shell: pwsh
run: |
$summary = @(
'## 📦 Update Vendor - Workflow Summary'
''
'🔍 Checking for vendor dependency updates...'
''
)
$summary = @"
## 📦 Update Vendor - Workflow Summary
Checking for vendor dependency updates...
"@
$summary | Add-Content -Path $env:GITHUB_STEP_SUMMARY -Encoding utf8
@@ -45,14 +45,14 @@ jobs:
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
$currentVersion = (Get-Content .\vendor\sources.json | ConvertFrom-Json)
$currentVersion = (Get-Content -Raw .\vendor\sources.json | ConvertFrom-Json)
. .\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
$newVersion = (Get-Content .\vendor\sources.json | ConvertFrom-Json)
$newVersion = (Get-Content -Raw .\vendor\sources.json | ConvertFrom-Json)
$listUpdated = ""
$updateMessage = "| Name | Old Version | New Version |`n| :--- | :---: | :---: |`n"
$majorUpdates = @()
@@ -149,6 +149,7 @@ jobs:
Set-GHVariable -Name SINGLE_DEP_NEW_VERSION -Value $singleDepNewVersion
# Write multiline UPDATE_MESSAGE to GITHUB_ENV
## echo "UPDATE_MESSAGE<<EOF`n$updateMessage`nEOF" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8
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"
@@ -179,23 +180,22 @@ jobs:
$count = [int]$env:COUNT_UPDATED
if ($count -eq 0) {
$summary = @(
'### ✅ No Updates Available'
''
'All vendor dependencies are up to date! 🎉'
''
)
$summary = @"
### ✅ No Updates Available
All vendor dependencies are up to date! 🎉
"@
} else {
$word = if ($count -eq 1) { 'dependency' } else { 'dependencies' }
$summary = @(
'### 🔄 Updates Found'
''
)
$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 = @"
### 🔄 Updates Found
"@
$summary += '📦 **' + $env:SINGLE_DEP_NAME + '** updated from `' + $env:SINGLE_DEP_OLD_VERSION + '` to `' + $env:SINGLE_DEP_NEW_VERSION + '`' + "`n" + "`n"
$summary += '📦 **' + $count + '** vendor ' + $word + ' updated:' + "`n" + "`n"
}
$summary += $env:UPDATE_MESSAGE + [Environment]::NewLine
$summary += $env:UPDATE_MESSAGE + "`n"
# Check if we can auto-merge (only minor/patch changes)
$hasBreaking = $env:HAS_BREAKING_CHANGES -eq 'True'
@@ -276,15 +276,14 @@ jobs:
if: env.COUNT_UPDATED > 0 && (env.HAS_BREAKING_CHANGES == 'True' || env.AUTO_MERGED == 'false')
shell: pwsh
run: |
$updatedLine = if (-not [string]::IsNullOrEmpty($env:LIST_UPDATED)) { "**Updated dependencies:** $env:LIST_UPDATED" } else { "**Updated dependencies:** " }
$summary = @"
### 🎉 Pull Request Created
A pull request has been created to update the vendor dependencies.
**Branch:** `update-vendor`
**Branch:** ``update-vendor``
$updatedLine
$(if (-not [string]::IsNullOrEmpty($env:LIST_UPDATED)) { "**Updated dependencies:** $env:LIST_UPDATED" } else { "**Updated dependencies:** " })
"@