mirror of
https://github.com/cmderdev/cmder.git
synced 2025-12-13 09:18:54 +08:00
Compare commits
23 Commits
copilot/op
...
copilot/im
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e6fea0bbab | ||
|
|
bf90303c96 | ||
|
|
e64c0b110d | ||
|
|
f2e8ae5189 | ||
|
|
4d21982f26 | ||
|
|
be60888258 | ||
|
|
d61a4f7f36 | ||
|
|
d05d03117a | ||
|
|
1509616205 | ||
|
|
6a698046a0 | ||
|
|
148f685bb3 | ||
|
|
73685145ea | ||
|
|
799f63de1f | ||
|
|
6da8e5849e | ||
|
|
25ac8f113e | ||
|
|
40ddf9a451 | ||
|
|
0db2dbf6f8 | ||
|
|
d285f63068 | ||
|
|
62cccaf284 | ||
|
|
e79f54e16e | ||
|
|
24427c1a41 | ||
|
|
a918a6aae1 | ||
|
|
d3ae747a6d |
29
.github/workflows/branches.yml
vendored
29
.github/workflows/branches.yml
vendored
@@ -19,10 +19,25 @@ jobs:
|
||||
# Steps represent a sequence of tasks that will be executed as part of the job
|
||||
steps:
|
||||
# Checks-out the repository under $GITHUB_WORKSPACE, so the job can access it
|
||||
- uses: actions/checkout@v5
|
||||
- uses: actions/checkout@v6
|
||||
with:
|
||||
fetch-depth: 0 # fetch all history for all branches and tags
|
||||
|
||||
- name: Summary - Merge operation started
|
||||
shell: bash
|
||||
run: |
|
||||
echo "## 🔀 Update Branches - Workflow Summary" >> $GITHUB_STEP_SUMMARY
|
||||
echo "" >> $GITHUB_STEP_SUMMARY
|
||||
echo "### Merge Operation" >> $GITHUB_STEP_SUMMARY
|
||||
echo "" >> $GITHUB_STEP_SUMMARY
|
||||
echo "| Property | Value |" >> $GITHUB_STEP_SUMMARY
|
||||
echo "| --- | --- |" >> $GITHUB_STEP_SUMMARY
|
||||
echo "| Source Branch | \`master\` |" >> $GITHUB_STEP_SUMMARY
|
||||
echo "| Target Branch | \`development\` |" >> $GITHUB_STEP_SUMMARY
|
||||
echo "| Triggered by | @${{ github.actor }} |" >> $GITHUB_STEP_SUMMARY
|
||||
echo "| Commit | \`${{ github.sha }}\` |" >> $GITHUB_STEP_SUMMARY
|
||||
echo "" >> $GITHUB_STEP_SUMMARY
|
||||
|
||||
# Runs a single command using the runners shell
|
||||
- name: Merge master into development
|
||||
run: |
|
||||
@@ -31,3 +46,15 @@ jobs:
|
||||
git checkout development
|
||||
git merge --no-ff master
|
||||
git push origin development
|
||||
|
||||
- name: Summary - Merge completed
|
||||
if: success()
|
||||
shell: bash
|
||||
run: |
|
||||
echo "### ✅ Merge Successful" >> $GITHUB_STEP_SUMMARY
|
||||
echo "" >> $GITHUB_STEP_SUMMARY
|
||||
echo "The \`master\` branch has been successfully merged into \`development\`." >> $GITHUB_STEP_SUMMARY
|
||||
echo "" >> $GITHUB_STEP_SUMMARY
|
||||
echo "**Merge type:** No fast-forward merge" >> $GITHUB_STEP_SUMMARY
|
||||
echo "" >> $GITHUB_STEP_SUMMARY
|
||||
echo "> The development branch is now synchronized with the latest changes from master." >> $GITHUB_STEP_SUMMARY
|
||||
|
||||
74
.github/workflows/build.yml
vendored
74
.github/workflows/build.yml
vendored
@@ -35,10 +35,25 @@ jobs:
|
||||
discussions: write
|
||||
steps:
|
||||
- name: Check out repository code (Action from GitHub)
|
||||
uses: actions/checkout@v5
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Summary - Repository checkout
|
||||
shell: pwsh
|
||||
run: |
|
||||
echo "## 📦 Build Cmder - Workflow Summary" >> $env:GITHUB_STEP_SUMMARY
|
||||
echo "" >> $env:GITHUB_STEP_SUMMARY
|
||||
echo "### Repository Information" >> $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 "| Actor | @${{ github.actor }} |" >> $env:GITHUB_STEP_SUMMARY
|
||||
echo "| Workflow | \`${{ github.workflow }}\` |" >> $env:GITHUB_STEP_SUMMARY
|
||||
echo "" >> $env:GITHUB_STEP_SUMMARY
|
||||
|
||||
- name: Add MSBuild to PATH
|
||||
uses: microsoft/setup-msbuild@v2
|
||||
|
||||
@@ -47,11 +62,40 @@ jobs:
|
||||
working-directory: scripts
|
||||
run: .\build.ps1 -Compile -verbose
|
||||
|
||||
- name: Summary - Build completed
|
||||
if: success()
|
||||
shell: pwsh
|
||||
run: |
|
||||
echo "### ✅ Build Status" >> $env:GITHUB_STEP_SUMMARY
|
||||
echo "" >> $env:GITHUB_STEP_SUMMARY
|
||||
echo "Cmder launcher successfully compiled." >> $env:GITHUB_STEP_SUMMARY
|
||||
echo "" >> $env:GITHUB_STEP_SUMMARY
|
||||
|
||||
- name: Pack the built files
|
||||
shell: pwsh
|
||||
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@v5
|
||||
with:
|
||||
@@ -77,6 +121,19 @@ jobs:
|
||||
path: build/hashes.txt
|
||||
name: hashes.txt
|
||||
|
||||
- name: Summary - Artifacts uploaded
|
||||
if: success()
|
||||
shell: pwsh
|
||||
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
|
||||
|
||||
- name: Create Release
|
||||
uses: softprops/action-gh-release@v2
|
||||
with:
|
||||
@@ -88,3 +145,18 @@ jobs:
|
||||
draft: true
|
||||
generate_release_notes: true
|
||||
if: startsWith(github.ref, 'refs/tags/')
|
||||
|
||||
- name: Summary - Release created
|
||||
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
|
||||
|
||||
38
.github/workflows/codeql.yml
vendored
38
.github/workflows/codeql.yml
vendored
@@ -45,7 +45,22 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v5
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Summary - CodeQL analysis started
|
||||
shell: pwsh
|
||||
run: |
|
||||
echo "## 🔒 CodeQL Security Analysis - Workflow Summary" >> $env:GITHUB_STEP_SUMMARY
|
||||
echo "" >> $env:GITHUB_STEP_SUMMARY
|
||||
echo "### Analysis Configuration" >> $env:GITHUB_STEP_SUMMARY
|
||||
echo "" >> $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 "| Language | \`${{ matrix.language }}\` |" >> $env:GITHUB_STEP_SUMMARY
|
||||
echo "| Commit | \`${{ github.sha }}\` |" >> $env:GITHUB_STEP_SUMMARY
|
||||
echo "" >> $env:GITHUB_STEP_SUMMARY
|
||||
|
||||
# Initializes the CodeQL tools for scanning.
|
||||
- name: Initialize CodeQL
|
||||
@@ -67,7 +82,28 @@ jobs:
|
||||
working-directory: scripts
|
||||
run: .\build.ps1 -Compile -verbose
|
||||
|
||||
- name: Summary - Build status
|
||||
if: success()
|
||||
shell: pwsh
|
||||
run: |
|
||||
echo "### ✅ Build Completed" >> $env:GITHUB_STEP_SUMMARY
|
||||
echo "" >> $env:GITHUB_STEP_SUMMARY
|
||||
echo "Cmder launcher built successfully for CodeQL analysis." >> $env:GITHUB_STEP_SUMMARY
|
||||
echo "" >> $env:GITHUB_STEP_SUMMARY
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v4
|
||||
with:
|
||||
category: "/language:${{matrix.language}}"
|
||||
|
||||
- name: Summary - Analysis completed
|
||||
if: success()
|
||||
shell: pwsh
|
||||
run: |
|
||||
echo "### 🔍 CodeQL Analysis Results" >> $env:GITHUB_STEP_SUMMARY
|
||||
echo "" >> $env:GITHUB_STEP_SUMMARY
|
||||
echo "✅ CodeQL security analysis completed successfully." >> $env:GITHUB_STEP_SUMMARY
|
||||
echo "" >> $env:GITHUB_STEP_SUMMARY
|
||||
echo "**Language analyzed:** \`${{ matrix.language }}\`" >> $env:GITHUB_STEP_SUMMARY
|
||||
echo "" >> $env:GITHUB_STEP_SUMMARY
|
||||
echo "> Check the Security tab for detailed findings and recommendations." >> $env:GITHUB_STEP_SUMMARY
|
||||
|
||||
63
.github/workflows/tests.yml
vendored
63
.github/workflows/tests.yml
vendored
@@ -38,17 +38,78 @@ jobs:
|
||||
continue-on-error: false
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v5
|
||||
- uses: actions/checkout@v6
|
||||
|
||||
- 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
|
||||
|
||||
- name: Initialize vendors
|
||||
shell: pwsh
|
||||
working-directory: scripts
|
||||
run: .\build.ps1 -verbose
|
||||
|
||||
- name: Summary - Vendor initialization
|
||||
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
|
||||
|
||||
- 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
|
||||
|
||||
- name: Testing Clink Shell
|
||||
run: |
|
||||
cmd /c vendor\init.bat /v /d /t
|
||||
|
||||
- name: Summary - Clink Shell test
|
||||
if: success()
|
||||
shell: pwsh
|
||||
run: |
|
||||
echo "| Clink Shell | ✅ Passed |" >> $env:GITHUB_STEP_SUMMARY
|
||||
- name: Testing PowerShell
|
||||
run: |
|
||||
PowerShell.exe -ExecutionPolicy Bypass -NoLogo -NoProfile -Command "$env:CMDER_DEBUG='1'; . 'vendor\profile.ps1'"
|
||||
|
||||
- name: Summary - PowerShell test
|
||||
if: success()
|
||||
shell: pwsh
|
||||
run: |
|
||||
echo "| PowerShell | ✅ Passed |" >> $env:GITHUB_STEP_SUMMARY
|
||||
- name: Testing Bash
|
||||
run: |
|
||||
bash vendor/cmder.sh
|
||||
|
||||
- name: Summary - Bash test
|
||||
if: success()
|
||||
shell: pwsh
|
||||
run: |
|
||||
echo "| Bash | ✅ Passed |" >> $env:GITHUB_STEP_SUMMARY
|
||||
|
||||
- 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
|
||||
|
||||
205
.github/workflows/vendor.yml
vendored
205
.github/workflows/vendor.yml
vendored
@@ -24,10 +24,18 @@ jobs:
|
||||
pull-requests: write
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v5
|
||||
- uses: actions/checkout@v6
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Summary - Workflow started
|
||||
shell: pwsh
|
||||
run: |
|
||||
echo "## 📦 Vendor Update - Workflow Summary" >> $env:GITHUB_STEP_SUMMARY
|
||||
echo "" >> $env:GITHUB_STEP_SUMMARY
|
||||
echo "🔍 Checking for vendor dependency updates..." >> $env:GITHUB_STEP_SUMMARY
|
||||
echo "" >> $env:GITHUB_STEP_SUMMARY
|
||||
|
||||
- id: make-changes
|
||||
name: Checking for updates
|
||||
env:
|
||||
@@ -38,28 +46,211 @@ jobs:
|
||||
Set-GHVariable -Name COUNT_UPDATED -Value $count
|
||||
$newVersion = (Get-Content .\vendor\sources.json | ConvertFrom-Json)
|
||||
$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) {
|
||||
$oldVersion = ($currentVersion | Where-Object {$_.name -eq $s.name}).version
|
||||
if ($s.version -ne $oldVersion) {
|
||||
$repoUrl = ($repoUrl = $s.Url.Replace("/archive/", "/releases/")).Substring(0, $repoUrl.IndexOf("/releases/")) + "/releases"
|
||||
|
||||
# Store single dependency info for messages
|
||||
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), "
|
||||
$updateMessage += "| **[$($s.name)]($repoUrl)** | $oldVersion | **$($s.version)** |`n"
|
||||
$updateMessage += "| $emoji **[$($s.name)]($repoUrl)** | \`$oldVersion\` | \`$($s.version)\` |`n"
|
||||
}
|
||||
}
|
||||
if ($count -eq 0) { return }
|
||||
Set-GHVariable -Name LIST_UPDATED -Value $listUpdated.Trim(', ')
|
||||
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
|
||||
echo "UPDATE_MESSAGE<<<EOF`n$updateMessage`n<EOF" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8
|
||||
|
||||
# Generate major updates changelog section
|
||||
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"
|
||||
echo "CHANGELOG_SECTION<<<EOF`n$changelogSection`n<EOF" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8
|
||||
} else {
|
||||
echo "CHANGELOG_SECTION=" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8
|
||||
}
|
||||
|
||||
- name: Summary - Update check results
|
||||
shell: pwsh
|
||||
run: |
|
||||
$count = $env:COUNT_UPDATED
|
||||
if ($count -eq 0) {
|
||||
echo "### ✅ No Updates Available" >> $env:GITHUB_STEP_SUMMARY
|
||||
echo "" >> $env:GITHUB_STEP_SUMMARY
|
||||
echo "All vendor dependencies are up to date! 🎉" >> $env:GITHUB_STEP_SUMMARY
|
||||
} else {
|
||||
$word = if ($count -eq 1) { 'dependency' } else { 'dependencies' }
|
||||
echo "### 🔄 Updates Found" >> $env:GITHUB_STEP_SUMMARY
|
||||
echo "" >> $env:GITHUB_STEP_SUMMARY
|
||||
if ($count -eq 1) {
|
||||
echo "📦 **$env:SINGLE_DEP_NAME** updated from \`$env:SINGLE_DEP_OLD_VERSION\` to \`$env:SINGLE_DEP_NEW_VERSION\`" >> $env:GITHUB_STEP_SUMMARY
|
||||
} else {
|
||||
echo "📦 **$count** vendor $word updated:" >> $env:GITHUB_STEP_SUMMARY
|
||||
}
|
||||
echo "" >> $env:GITHUB_STEP_SUMMARY
|
||||
echo "$env:UPDATE_MESSAGE" >> $env:GITHUB_STEP_SUMMARY
|
||||
echo "" >> $env:GITHUB_STEP_SUMMARY
|
||||
|
||||
# Check if we can auto-merge (only minor/patch changes)
|
||||
$hasBreaking = $env:HAS_BREAKING_CHANGES -eq 'True'
|
||||
if ($hasBreaking) {
|
||||
echo "> ⚠️ **Note:** This update contains major version changes that may include breaking changes." >> $env:GITHUB_STEP_SUMMARY
|
||||
} else {
|
||||
echo "> ℹ️ **Note:** This update only contains minor or patch changes." >> $env:GITHUB_STEP_SUMMARY
|
||||
}
|
||||
}
|
||||
|
||||
- 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 only if a commit was made (check if HEAD moved)
|
||||
$headBeforeReset = git rev-parse HEAD
|
||||
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@v7
|
||||
if: env.COUNT_UPDATED > 0
|
||||
if: env.COUNT_UPDATED > 0 && (env.HAS_BREAKING_CHANGES == 'True' || env.AUTO_MERGED == 'false')
|
||||
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: |
|
||||
### 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.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 }})'
|
||||
branch: update-vendor
|
||||
base: master
|
||||
|
||||
- name: Summary - Pull request created
|
||||
if: env.COUNT_UPDATED > 0 && (env.HAS_BREAKING_CHANGES == 'True' || env.AUTO_MERGED == 'false')
|
||||
shell: pwsh
|
||||
run: |
|
||||
echo "### 🎉 Pull Request Created" >> $env:GITHUB_STEP_SUMMARY
|
||||
echo "" >> $env:GITHUB_STEP_SUMMARY
|
||||
echo "A pull request has been created to update the vendor dependencies." >> $env:GITHUB_STEP_SUMMARY
|
||||
echo "" >> $env:GITHUB_STEP_SUMMARY
|
||||
echo "**Branch:** \`update-vendor\`" >> $env:GITHUB_STEP_SUMMARY
|
||||
echo "" >> $env:GITHUB_STEP_SUMMARY
|
||||
echo "**Updated dependencies:** $env:LIST_UPDATED" >> $env:GITHUB_STEP_SUMMARY
|
||||
echo "" >> $env:GITHUB_STEP_SUMMARY
|
||||
if ($env:HAS_BREAKING_CHANGES -eq 'True') {
|
||||
echo "> ⚠️ **Manual review required:** This update contains major version changes." >> $env:GITHUB_STEP_SUMMARY
|
||||
} else {
|
||||
echo "> ℹ️ **Note:** Auto-merge failed, manual review required." >> $env:GITHUB_STEP_SUMMARY
|
||||
}
|
||||
echo "" >> $env:GITHUB_STEP_SUMMARY
|
||||
echo "Please review and merge the pull request to apply the updates." >> $env:GITHUB_STEP_SUMMARY
|
||||
|
||||
@@ -259,6 +259,8 @@ function Fetch-DownloadUrl {
|
||||
}
|
||||
|
||||
$count = 0
|
||||
$hasBreakingChanges = $false
|
||||
$updateDetails = @()
|
||||
|
||||
# Read the current sources content
|
||||
$sources = Get-Content $sourcesPath | Out-String | ConvertFrom-Json
|
||||
@@ -301,6 +303,52 @@ foreach ($s in $sources) {
|
||||
# }
|
||||
|
||||
$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
|
||||
@@ -314,12 +362,16 @@ if ($count -eq 0) {
|
||||
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') {
|
||||
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."
|
||||
|
||||
116
vendor/cmder.sh
vendored
116
vendor/cmder.sh
vendored
@@ -1,4 +1,3 @@
|
||||
#!/usr/bin/env bash
|
||||
# DO NOT EDIT THIS FILE IT WILL BE OVERWRITTEN ON UPDATE
|
||||
#
|
||||
# Add portable user customizations ${CMDER_ROOT}/config/user_profile.sh,
|
||||
@@ -8,130 +7,93 @@
|
||||
# Add system specific users customizations to $HOME/.bashrc, these
|
||||
# customizations will not follow Cmder to another machine.
|
||||
|
||||
# Source all .sh scripts in a given directory
|
||||
# Args: $1 - directory path containing .sh scripts to source
|
||||
run_profile_d() {
|
||||
local profile_d_scripts
|
||||
pushd "${1}" >/dev/null || return
|
||||
# shellcheck disable=SC2035
|
||||
function runProfiled {
|
||||
unset profile_d_scripts
|
||||
pushd "${1}" >/dev/null
|
||||
profile_d_scripts=$(ls *.sh 2>/dev/null)
|
||||
|
||||
if [ -n "${profile_d_scripts}" ]; then
|
||||
for script in ${profile_d_scripts}; do
|
||||
# echo Sourcing "${1}/${script}"...
|
||||
# shellcheck disable=SC1090
|
||||
. "${1}/${script}"
|
||||
if [ ! "x${profile_d_scripts}" = "x" ] ; then
|
||||
for x in ${profile_d_scripts} ; do
|
||||
# echo Sourcing "${1}/${x}"...
|
||||
. "${1}/${x}"
|
||||
done
|
||||
fi
|
||||
popd >/dev/null || return
|
||||
popd >/dev/null
|
||||
}
|
||||
|
||||
# Detect and set CMDER_ROOT for bash admin sessions
|
||||
# Converts Windows paths to Unix paths if needed
|
||||
# ConEmuDir is set by ConEmu/Cmder environment
|
||||
if [ -z "$CMDER_ROOT" ]; then
|
||||
# Try to get CMDER_ROOT from ConEmuDir
|
||||
case "$ConEmuDir" in
|
||||
*\\*) CMDER_ROOT=$( cd "$(cygpath -u "$ConEmuDir")/../.." && pwd );;
|
||||
esac
|
||||
|
||||
# If still not set, derive from script location (vendor -> root)
|
||||
if [ -z "$CMDER_ROOT" ]; then
|
||||
CMDER_ROOT="$( cd "$( dirname "${BASH_SOURCE[0]}" )/.." && pwd )"
|
||||
fi
|
||||
# We do this for bash as admin sessions since $CMDER_ROOT is not being set
|
||||
if [ "$CMDER_ROOT" == "" ] ; then
|
||||
case "$ConEmuDir" in *\\*) CMDER_ROOT=$( cd "$(cygpath -u "$ConEmuDir")/../.." ; pwd );; esac
|
||||
else
|
||||
case "$CMDER_ROOT" in
|
||||
*\\*) CMDER_ROOT="$(cygpath -u "$CMDER_ROOT")";;
|
||||
esac
|
||||
case "$CMDER_ROOT" in *\\*) CMDER_ROOT="$(cygpath -u "$CMDER_ROOT")";; esac
|
||||
fi
|
||||
|
||||
# Remove any trailing '/' from CMDER_ROOT
|
||||
CMDER_ROOT="${CMDER_ROOT%/}"
|
||||
|
||||
# Exit early if CMDER_ROOT is not set
|
||||
if [ -z "$CMDER_ROOT" ]; then
|
||||
echo "Warning: CMDER_ROOT is not set. Cmder integration skipped."
|
||||
# shellcheck disable=SC2317
|
||||
return 2>/dev/null || exit 0
|
||||
fi
|
||||
# Remove any trailing '/'
|
||||
CMDER_ROOT=$(echo $CMDER_ROOT | sed 's:/*$::')
|
||||
|
||||
export CMDER_ROOT
|
||||
|
||||
# Detect Git installation location
|
||||
if [ -f "/c/Program Files/Git/cmd/git.exe" ]; then
|
||||
if [ -f "/c/Program Files/Git/cmd/git.exe" ] ; then
|
||||
GIT_INSTALL_ROOT="/c/Program Files/Git"
|
||||
elif [ -f "/c/Program Files(x86)/Git/cmd/git.exe" ]; then
|
||||
elif [ -f "/c/Program Files(x86)/Git/cmd/git.exe" ] ; then
|
||||
GIT_INSTALL_ROOT="/c/Program Files(x86)/Git"
|
||||
elif [ -f "${CMDER_ROOT}/vendor/git-for-windows/cmd/git.exe" ]; then
|
||||
GIT_INSTALL_ROOT="${CMDER_ROOT}/vendor/git-for-windows"
|
||||
elif [ -f "${CMDER_ROOT}/vendor/git-for-windows/cmd/git.exe" ] ; then
|
||||
GIT_INSTALL_ROOT=${CMDER_ROOT}/vendor/git-for-windows
|
||||
fi
|
||||
|
||||
# Add Git to PATH if not already present
|
||||
if [[ -n "${GIT_INSTALL_ROOT}" && ! "$PATH" =~ ${GIT_INSTALL_ROOT}/bin: ]]; then
|
||||
if [[ ! "$PATH" =~ "${GIT_INSTALL_ROOT}/bin:" ]] ; then
|
||||
PATH="${GIT_INSTALL_ROOT}/bin:$PATH"
|
||||
fi
|
||||
|
||||
# Add Cmder directories to PATH
|
||||
PATH="${CMDER_ROOT}/bin:${CMDER_ROOT}/vendor/bin:$PATH:${CMDER_ROOT}"
|
||||
|
||||
export PATH
|
||||
|
||||
# Create profile.d directory if it doesn't exist
|
||||
if [ ! -d "${CMDER_ROOT}/config/profile.d" ]; then
|
||||
# Drop *.sh or *.zsh files into "${CMDER_ROOT}\config\profile.d"
|
||||
# to source them at startup.
|
||||
if [ ! -d "${CMDER_ROOT}/config/profile.d" ] ; then
|
||||
mkdir -p "${CMDER_ROOT}/config/profile.d"
|
||||
fi
|
||||
|
||||
# Source all .sh scripts in profile.d directories
|
||||
if [ -d "${CMDER_ROOT}/config/profile.d" ]; then
|
||||
run_profile_d "${CMDER_ROOT}/config/profile.d"
|
||||
if [ -d "${CMDER_ROOT}/config/profile.d" ] ; then
|
||||
runProfiled "${CMDER_ROOT}/config/profile.d"
|
||||
fi
|
||||
|
||||
if [ -d "${CMDER_USER_CONFIG}/profile.d" ]; then
|
||||
run_profile_d "${CMDER_USER_CONFIG}/profile.d"
|
||||
if [ -d "${CMDER_USER_CONFIG}/profile.d" ] ; then
|
||||
runProfiled "${CMDER_USER_CONFIG}/profile.d"
|
||||
fi
|
||||
|
||||
|
||||
# Rename legacy user-profile.sh to user_profile.sh for consistency
|
||||
if [ -f "$CMDER_ROOT/config/user-profile.sh" ]; then
|
||||
# Renaming to "config\user_profile.sh" to "user_profile.sh" for consistency.
|
||||
if [ -f "$CMDER_ROOT/config/user-profile.sh" ] ; then
|
||||
mv "$CMDER_ROOT/config/user-profile.sh" "$CMDER_ROOT/config/user_profile.sh"
|
||||
fi
|
||||
|
||||
# Source user profile from CMDER_ROOT config
|
||||
if [ -f "${CMDER_ROOT}/config/user_profile.sh" ]; then
|
||||
CmderUserProfilePath="${CMDER_ROOT}/config/user_profile.sh"
|
||||
if [ -f "${CMDER_ROOT}/config/user_profile.sh" ] ; then
|
||||
. "${CMDER_ROOT}/config/user_profile.sh"
|
||||
fi
|
||||
|
||||
# Handle CMDER_USER_CONFIG if set
|
||||
if [ -n "${CMDER_USER_CONFIG}" ]; then
|
||||
# Rename legacy user-profile.sh to user_profile.sh for consistency
|
||||
if [ -f "$CMDER_USER_CONFIG/user-profile.sh" ]; then
|
||||
if [ "${CMDER_USER_CONFIG}" != "" ] ; then
|
||||
# Renaming to "config\user_profile.sh" to "user_profile.sh" for consistency.
|
||||
if [ -f "$CMDER_USER_CONFIG/user-profile.sh" ] ; then
|
||||
mv "$CMDER_USER_CONFIG/user-profile.sh" "$CMDER_USER_CONFIG/user_profile.sh"
|
||||
fi
|
||||
|
||||
export PATH="${CMDER_USER_CONFIG}/bin:$PATH"
|
||||
|
||||
# Source user profile from CMDER_USER_CONFIG
|
||||
if [ -f "${CMDER_USER_CONFIG}/user_profile.sh" ]; then
|
||||
# shellcheck disable=SC1091
|
||||
CmderUserProfilePath="${CMDER_USER_CONFIG}/user_profile.sh"
|
||||
if [ -f "${CMDER_USER_CONFIG}/user_profile.sh" ] ; then
|
||||
. "${CMDER_USER_CONFIG}/user_profile.sh"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Determine the user profile path for creation if needed
|
||||
if [ -n "${CMDER_USER_CONFIG}" ]; then
|
||||
cmder_user_profile_path="${CMDER_USER_CONFIG}/user_profile.sh"
|
||||
else
|
||||
cmder_user_profile_path="${CMDER_ROOT}/config/user_profile.sh"
|
||||
fi
|
||||
|
||||
# Create user profile from default template if it doesn't exist
|
||||
if [ ! -f "${cmder_user_profile_path}" ] && [ -f "${CMDER_ROOT}/vendor/user_profile.sh.default" ]; then
|
||||
echo "Creating user startup file: ${cmder_user_profile_path}"
|
||||
cp "${CMDER_ROOT}/vendor/user_profile.sh.default" "${cmder_user_profile_path}"
|
||||
if [ ! -f "${CmderUserProfilePath}" ] ; then
|
||||
echo Creating user startup file: "${CmderUserProfilePath}"
|
||||
cp "${CMDER_ROOT}/vendor/user_profile.sh.default" "${CmderUserProfilePath}"
|
||||
fi
|
||||
|
||||
# Source the users .bashrc file if it exists
|
||||
if [ -f "${HOME}/.bashrc" ]; then
|
||||
# shellcheck disable=SC1091
|
||||
if [ -f "${HOME}/.bashrc" ] ; then
|
||||
. "${HOME}/.bashrc"
|
||||
fi
|
||||
|
||||
123
vendor/cmder_exinit
vendored
123
vendor/cmder_exinit
vendored
@@ -1,4 +1,3 @@
|
||||
#!/usr/bin/env bash
|
||||
# Copy this file to your non integrated *nix-like environment,
|
||||
# Cygwin/MSys2/Git for Windows SDK, installs '/etc/profile.d/'
|
||||
# folder to integrate the externally installed Unix like environment
|
||||
@@ -23,130 +22,92 @@
|
||||
# # from outside Cmder.
|
||||
# CMDER_ROOT=${USERPROFILE}/cmder # This is not required if launched from Cmder.
|
||||
|
||||
# Source all .sh or .zsh scripts in a given directory based on shell type
|
||||
# Args: $1 - directory path containing shell scripts to source
|
||||
run_profile_d() {
|
||||
local profile_d_scripts
|
||||
pushd "${1}" >/dev/null || return
|
||||
function runProfiled {
|
||||
unset profile_d_scripts
|
||||
pushd "${1}" >/dev/null
|
||||
|
||||
if [ -n "${ZSH_VERSION}" ]; then
|
||||
# shellcheck disable=SC2035
|
||||
if [ ! "x${ZSH_VERSION}" = "x" ]; then
|
||||
profile_d_scripts=$(ls *.zsh 2>/dev/null)
|
||||
elif [ -n "${BASH_VERSION}" ]; then
|
||||
# shellcheck disable=SC2035
|
||||
elif [ ! "x${BASH_VERSION}" = "x" ]; then
|
||||
profile_d_scripts=$(ls *.sh 2>/dev/null)
|
||||
fi
|
||||
|
||||
if [ -n "${profile_d_scripts}" ]; then
|
||||
for script in ${profile_d_scripts}; do
|
||||
echo "Sourcing ${1}/${script}..."
|
||||
# shellcheck disable=SC1090
|
||||
. "${1}/${script}"
|
||||
if [ ! "x${profile_d_scripts}" = "x" ] ; then
|
||||
for x in ${profile_d_scripts} ; do
|
||||
echo Sourcing "${1}/${x}"...
|
||||
. "${1}/${x}"
|
||||
done
|
||||
fi
|
||||
popd >/dev/null || return
|
||||
popd >/dev/null
|
||||
}
|
||||
|
||||
# Check that we haven't already been sourced
|
||||
# Check that we haven't already been sourced.
|
||||
[[ -z ${CMDER_EXINIT} ]] && CMDER_EXINIT="1" || return
|
||||
|
||||
# Detect and set CMDER_ROOT for bash admin sessions
|
||||
# Converts Windows paths to Unix paths if needed
|
||||
# ConEmuDir is set by ConEmu/Cmder environment
|
||||
if [ -z "$CMDER_ROOT" ] && [ -n "$ConEmuDir" ]; then
|
||||
if [ -d "${ConEmuDir}../../vendor" ]; then
|
||||
case "$ConEmuDir" in
|
||||
*\\*) CMDER_ROOT=$( cd "$(cygpath -u "$ConEmuDir")/../.." && pwd );;
|
||||
esac
|
||||
# We do this for bash as admin sessions since $CMDER_ROOT is not being set
|
||||
if [ "$CMDER_ROOT" = "" -a "$ConEmuDir" != "" ] ; then
|
||||
if [ -d "${ConEmuDir}../../vendor" ] ; then
|
||||
case "$ConEmuDir" in *\\*) CMDER_ROOT=$( cd "$(cygpath -u "$ConEmuDir")/../.." ; pwd );; esac
|
||||
else
|
||||
echo "Running in ConEmu without Cmder, skipping Cmder integration."
|
||||
fi
|
||||
elif [ -n "$CMDER_ROOT" ]; then
|
||||
case "$CMDER_ROOT" in
|
||||
*\\*) CMDER_ROOT="$(cygpath -u "$CMDER_ROOT")";;
|
||||
esac
|
||||
elif [ "$CMDER_ROOT" != "" ] ; then
|
||||
case "$CMDER_ROOT" in *\\*) CMDER_ROOT="$(cygpath -u "$CMDER_ROOT")";; esac
|
||||
fi
|
||||
|
||||
# If CMDER_ROOT is still not set, try to derive from script location
|
||||
# Note: This only works if cmder_exinit is in its original location (vendor/)
|
||||
if [ -z "$CMDER_ROOT" ] && [ -f "${BASH_SOURCE[0]}" ]; then
|
||||
# Check if we're in the vendor directory
|
||||
script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
if [[ "$script_dir" == */vendor ]] || [[ "$script_dir" == */vendor/* ]]; then
|
||||
# Extract the Cmder root (parent of vendor)
|
||||
CMDER_ROOT="$( cd "$script_dir/.." && pwd )"
|
||||
# Verify this looks like a Cmder installation
|
||||
if [ ! -d "${CMDER_ROOT}/vendor" ]; then
|
||||
unset CMDER_ROOT
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
if [ ! "$CMDER_ROOT" = "" ] ; then
|
||||
# Remove any trailing '/'
|
||||
CMDER_ROOT=$(echo $CMDER_ROOT | sed 's:/*$::')
|
||||
|
||||
if [ -n "$CMDER_ROOT" ]; then
|
||||
# Remove any trailing '/' from CMDER_ROOT
|
||||
CMDER_ROOT="${CMDER_ROOT%/}"
|
||||
|
||||
echo "Using CMDER_ROOT at \"${CMDER_ROOT}\"."
|
||||
echo "Using \"CMDER_ROOT\" at \"${CMDER_ROOT}\"."
|
||||
|
||||
export CMDER_ROOT
|
||||
|
||||
# Add Cmder directories to PATH
|
||||
PATH="${CMDER_ROOT}/bin:${CMDER_ROOT}/vendor/bin:$PATH:${CMDER_ROOT}"
|
||||
PATH=${CMDER_ROOT}/bin:${CMDER_ROOT}/vendor/bin:$PATH:${CMDER_ROOT}
|
||||
|
||||
export PATH
|
||||
|
||||
# Create profile.d directory if it doesn't exist
|
||||
if [ ! -d "${CMDER_ROOT}/config/profile.d" ]; then
|
||||
# Drop *.sh or *.zsh files into "${CMDER_ROOT}\config\profile.d"
|
||||
# to source them at startup.
|
||||
if [ ! -d "${CMDER_ROOT}/config/profile.d" ] ; then
|
||||
mkdir -p "${CMDER_ROOT}/config/profile.d"
|
||||
fi
|
||||
|
||||
# Source all shell scripts in profile.d directories
|
||||
if [ -d "${CMDER_ROOT}/config/profile.d" ]; then
|
||||
run_profile_d "${CMDER_ROOT}/config/profile.d"
|
||||
if [ -d "${CMDER_ROOT}/config/profile.d" ] ; then
|
||||
runProfiled "${CMDER_ROOT}/config/profile.d"
|
||||
fi
|
||||
|
||||
if [ -d "${CMDER_USER_CONFIG}/profile.d" ]; then
|
||||
run_profile_d "${CMDER_USER_CONFIG}/profile.d"
|
||||
if [ -d "${CMDER_USER_CONFIG}/profile.d" ] ; then
|
||||
runProfiled "${CMDER_USER_CONFIG}/profile.d"
|
||||
fi
|
||||
|
||||
|
||||
# Rename legacy user-profile.sh to user_profile.sh for consistency
|
||||
if [ -f "$CMDER_ROOT/config/user-profile.sh" ]; then
|
||||
# Renaming to "config\user_profile.sh" to "user_profile.sh" for consistency.
|
||||
if [ -f "$CMDER_ROOT/config/user-profile.sh" ] ; then
|
||||
mv "$CMDER_ROOT/config/user-profile.sh" "$CMDER_ROOT/config/user_profile.sh"
|
||||
fi
|
||||
|
||||
# Source user profile from CMDER_ROOT config
|
||||
if [ -f "${CMDER_ROOT}/config/user_profile.sh" ]; then
|
||||
# shellcheck disable=SC1091
|
||||
CmderUserProfilePath="${CMDER_ROOT}/config/user_profile.sh"
|
||||
if [ -f "${CMDER_ROOT}/config/user_profile.sh" ] ; then
|
||||
. "${CMDER_ROOT}/config/user_profile.sh"
|
||||
fi
|
||||
|
||||
# Handle CMDER_USER_CONFIG if set
|
||||
if [ -n "${CMDER_USER_CONFIG}" ]; then
|
||||
# Rename legacy user-profile.sh to user_profile.sh for consistency
|
||||
if [ -f "$CMDER_USER_CONFIG/user-profile.sh" ]; then
|
||||
if [ "${CMDER_USER_CONFIG}" != "" ] ; then
|
||||
# Renaming to "config\user_profile.sh" to "user_profile.sh" for consistency.
|
||||
if [ -f "$CMDER_USER_CONFIG/user-profile.sh" ] ; then
|
||||
mv "$CMDER_USER_CONFIG/user-profile.sh" "$CMDER_USER_CONFIG/user_profile.sh"
|
||||
fi
|
||||
|
||||
export PATH="${CMDER_USER_CONFIG}/bin:$PATH"
|
||||
export PATH=${CMDER_USER_CONFIG}/bin:$PATH
|
||||
|
||||
# Source user profile from CMDER_USER_CONFIG
|
||||
if [ -f "${CMDER_USER_CONFIG}/user_profile.sh" ]; then
|
||||
# shellcheck disable=SC1091
|
||||
CmderUserProfilePath="${CMDER_USER_CONFIG}/user_profile.sh"
|
||||
if [ -f "${CMDER_USER_CONFIG}/user_profile.sh" ] ; then
|
||||
. "${CMDER_USER_CONFIG}/user_profile.sh"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Determine the user profile path for creation if needed
|
||||
if [ -n "${CMDER_USER_CONFIG}" ]; then
|
||||
cmder_user_profile_path="${CMDER_USER_CONFIG}/user_profile.sh"
|
||||
else
|
||||
cmder_user_profile_path="${CMDER_ROOT}/config/user_profile.sh"
|
||||
fi
|
||||
|
||||
# Create user profile from default template if it doesn't exist
|
||||
if [ ! -f "${cmder_user_profile_path}" ] && [ -f "${CMDER_ROOT}/vendor/user_profile.sh.default" ]; then
|
||||
echo "Creating user startup file: ${cmder_user_profile_path}"
|
||||
cp "${CMDER_ROOT}/vendor/user_profile.sh.default" "${cmder_user_profile_path}"
|
||||
if [ ! -f "${CmderUserProfilePath}" ] ; then
|
||||
echo Creating user startup file: "${CmderUserProfilePath}"
|
||||
cp "${CMDER_ROOT}/vendor/user_profile.sh.default" "${CmderUserProfilePath}"
|
||||
fi
|
||||
fi
|
||||
|
||||
12
vendor/sources.json
vendored
12
vendor/sources.json
vendored
@@ -1,13 +1,13 @@
|
||||
[
|
||||
{
|
||||
"name": "git-for-windows",
|
||||
"version": "2.51.2.windows.1",
|
||||
"url": "https://github.com/git-for-windows/git/releases/download/v2.51.2.windows.1/PortableGit-2.51.2-64-bit.7z.exe"
|
||||
"version": "2.52.0.windows.1",
|
||||
"url": "https://github.com/git-for-windows/git/releases/download/v2.52.0.windows.1/PortableGit-2.52.0-64-bit.7z.exe"
|
||||
},
|
||||
{
|
||||
"name": "clink",
|
||||
"version": "1.8.8",
|
||||
"url": "https://github.com/chrisant996/clink/releases/download/v1.8.8/clink.1.8.8.a63364.zip"
|
||||
"version": "1.9.5",
|
||||
"url": "https://github.com/chrisant996/clink/releases/download/v1.9.5/clink.1.9.5.ee6b4f.zip"
|
||||
},
|
||||
{
|
||||
"name": "conemu-maximus5",
|
||||
@@ -21,7 +21,7 @@
|
||||
},
|
||||
{
|
||||
"name": "clink-completions",
|
||||
"version": "0.6.6",
|
||||
"url": "https://github.com/vladimir-kotikov/clink-completions/archive/v0.6.6.zip"
|
||||
"version": "0.6.7",
|
||||
"url": "https://github.com/vladimir-kotikov/clink-completions/archive/v0.6.7.zip"
|
||||
}
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user