Compare commits

..

42 Commits

Author SHA1 Message Date
copilot-swe-agent[bot]
7b86263b0a Wrap dependency count in backticks for consistency
Co-authored-by: DRSDavidSoft <4673812+DRSDavidSoft@users.noreply.github.com>
2025-12-15 06:26:34 +00:00
copilot-swe-agent[bot]
10a0675c96 Remove unused $headBeforeReset variable
Co-authored-by: DRSDavidSoft <4673812+DRSDavidSoft@users.noreply.github.com>
2025-12-15 06:22:39 +00:00
David Refoua
400cdfed54 Update .github/workflows/vendor.yml
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-12-15 09:48:22 +03:30
copilot-swe-agent[bot]
a475de2d4c Remove temporary comment from CodeQL workflow
Co-authored-by: DRSDavidSoft <4673812+DRSDavidSoft@users.noreply.github.com>
2025-12-15 04:14:39 +00:00
copilot-swe-agent[bot]
1afbd4ae49 Use PowerShell here-string to fix CodeQL parser error (reverted previous attempts)
Co-authored-by: DRSDavidSoft <4673812+DRSDavidSoft@users.noreply.github.com>
2025-12-15 04:13:57 +00:00
GitHub Copilot
82f7fdd61a Merge and use PowerShell here-string for CodeQL summary 2025-12-15 04:12:54 +00:00
copilot-swe-agent[bot]
e598536485 Use PowerShell here-string for CodeQL summary to fix parser error
Co-authored-by: DRSDavidSoft <4673812+DRSDavidSoft@users.noreply.github.com>
2025-12-15 04:11:27 +00:00
copilot-swe-agent[bot]
9cfff38939 Fix CodeQL PowerShell syntax by using Write-Output instead of echo
Co-authored-by: DRSDavidSoft <4673812+DRSDavidSoft@users.noreply.github.com>
2025-12-15 03:33:57 +00:00
copilot-swe-agent[bot]
2cc1125f62 Fix CodeQL workflow PowerShell string termination error
Co-authored-by: DRSDavidSoft <4673812+DRSDavidSoft@users.noreply.github.com>
2025-12-15 03:22:14 +00:00
copilot-swe-agent[bot]
4911924259 Make new version bold in dependency update table
Co-authored-by: DRSDavidSoft <4673812+DRSDavidSoft@users.noreply.github.com>
2025-12-15 01:43:35 +00:00
copilot-swe-agent[bot]
cd2c4ec877 Update version change emojis: 🔥 major, 🚀 minor, ⬆️ patch
Co-authored-by: DRSDavidSoft <4673812+DRSDavidSoft@users.noreply.github.com>
2025-12-15 01:30:12 +00:00
copilot-swe-agent[bot]
0f6584fa02 Improve variable initialization logic with better error handling
Co-authored-by: DRSDavidSoft <4673812+DRSDavidSoft@users.noreply.github.com>
2025-12-15 01:11:46 +00:00
copilot-swe-agent[bot]
570b1d6043 Fix single dependency variable initialization to prevent CI failures
Co-authored-by: DRSDavidSoft <4673812+DRSDavidSoft@users.noreply.github.com>
2025-12-15 01:09:41 +00:00
David Refoua
fa2a34a4c0 Merge branch 'master' into copilot/improve-vendor-ci-cd-messaging 2025-12-15 04:29:44 +03:30
David Refoua
9e6e1485b0 Merge pull request #3062 from cmderdev/dependabot/github_actions/actions/upload-artifact-6
Bump actions/upload-artifact from 5 to 6
2025-12-15 04:28:52 +03:30
David Refoua
baef798b6c Merge pull request #3063 from cmderdev/dependabot/github_actions/peter-evans/create-pull-request-8
Bump peter-evans/create-pull-request from 7 to 8
2025-12-15 04:07:08 +03:30
dependabot[bot]
865d0c1858 Bump peter-evans/create-pull-request from 7 to 8
Bumps [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) from 7 to 8.
- [Release notes](https://github.com/peter-evans/create-pull-request/releases)
- [Commits](https://github.com/peter-evans/create-pull-request/compare/v7...v8)

---
updated-dependencies:
- dependency-name: peter-evans/create-pull-request
  dependency-version: '8'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-14 23:22:03 +00:00
dependabot[bot]
60848f56c5 Bump actions/upload-artifact from 5 to 6
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 5 to 6.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v5...v6)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-14 23:21:57 +00:00
David Refoua
b86fca35bc Update Dependabot configuration for GitHub Actions
Removed comments and added labels for GitHub Actions updates.
2025-12-15 02:51:21 +03:30
copilot-swe-agent[bot]
e6fea0bbab Use single emoji and show dependency name/version for single updates
Co-authored-by: DRSDavidSoft <4673812+DRSDavidSoft@users.noreply.github.com>
2025-12-08 21:22:53 +00:00
copilot-swe-agent[bot]
bf90303c96 Remove Change Type column and add collapsible changelog for major updates
Co-authored-by: DRSDavidSoft <4673812+DRSDavidSoft@users.noreply.github.com>
2025-12-08 21:12:27 +00:00
copilot-swe-agent[bot]
e64c0b110d Fix git reset logic in auto-merge error handling
Co-authored-by: DRSDavidSoft <4673812+DRSDavidSoft@users.noreply.github.com>
2025-12-08 20:57:57 +00:00
copilot-swe-agent[bot]
f2e8ae5189 Improve version parsing to handle complex version strings
Co-authored-by: DRSDavidSoft <4673812+DRSDavidSoft@users.noreply.github.com>
2025-12-08 20:56:30 +00:00
copilot-swe-agent[bot]
4d21982f26 Fix trailing spaces in vendor workflow YAML
Co-authored-by: DRSDavidSoft <4673812+DRSDavidSoft@users.noreply.github.com>
2025-12-08 20:53:19 +00:00
copilot-swe-agent[bot]
be60888258 Improve vendor CI/CD workflow with better messaging and auto-merge
Co-authored-by: DRSDavidSoft <4673812+DRSDavidSoft@users.noreply.github.com>
2025-12-08 20:52:20 +00:00
copilot-swe-agent[bot]
d61a4f7f36 Initial plan 2025-12-08 20:46:58 +00:00
David Refoua
d05d03117a Add GITHUB_STEP_SUMMARY to CI/CD workflows 2025-12-09 00:08:05 +03:30
David Refoua
1509616205 Merge branch 'master' into copilot/add-github-step-summary 2025-12-09 00:07:49 +03:30
copilot-swe-agent[bot]
6a698046a0 Add success conditionals to build and package summary steps
Co-authored-by: DRSDavidSoft <4673812+DRSDavidSoft@users.noreply.github.com>
2025-12-08 20:19:08 +00:00
copilot-swe-agent[bot]
148f685bb3 Add missing success conditionals to CodeQL and branches workflows
Co-authored-by: DRSDavidSoft <4673812+DRSDavidSoft@users.noreply.github.com>
2025-12-08 20:17:40 +00:00
David Refoua
73685145ea Automatically updated clink 1.9.21.9.5 2025-12-08 23:45:38 +03:30
copilot-swe-agent[bot]
799f63de1f Add success conditionals to upload summary and separate test completion step
Co-authored-by: DRSDavidSoft <4673812+DRSDavidSoft@users.noreply.github.com>
2025-12-08 20:15:37 +00:00
copilot-swe-agent[bot]
6da8e5849e Improve pluralization clarity, fix test table headers, and add hash comment
Co-authored-by: DRSDavidSoft <4673812+DRSDavidSoft@users.noreply.github.com>
2025-12-08 20:13:48 +00:00
copilot-swe-agent[bot]
25ac8f113e Refactor artifact summary to use loop and improve pluralization
Co-authored-by: DRSDavidSoft <4673812+DRSDavidSoft@users.noreply.github.com>
2025-12-08 20:11:46 +00:00
copilot-swe-agent[bot]
40ddf9a451 Add success conditionals to test summary steps
Co-authored-by: DRSDavidSoft <4673812+DRSDavidSoft@users.noreply.github.com>
2025-12-08 20:10:04 +00:00
copilot-swe-agent[bot]
0db2dbf6f8 Add GITHUB_STEP_SUMMARY to all CI/CD workflows
Co-authored-by: DRSDavidSoft <4673812+DRSDavidSoft@users.noreply.github.com>
2025-12-08 20:08:07 +00:00
copilot-swe-agent[bot]
d285f63068 Initial plan 2025-12-08 20:02:31 +00:00
DRSDavidSoft
62cccaf284 ⬆️ Update dependencies (clink v1.9.5) 2025-12-08 13:47:50 +00:00
Dax T Games
e79f54e16e Merge pull request #3049 from cmderdev/update-vendor
Updates to `3` vendored dependencies
2025-11-27 15:13:11 +00:00
Dax T Games
24427c1a41 Merge pull request #3051 from cmderdev/dependabot/github_actions/actions/checkout-6
Bump actions/checkout from 5 to 6
2025-11-27 15:12:33 +00:00
dependabot[bot]
a918a6aae1 Bump actions/checkout from 5 to 6
Bumps [actions/checkout](https://github.com/actions/checkout) from 5 to 6.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v5...v6)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-24 15:41:25 +00:00
DRSDavidSoft
d3ae747a6d ⬆️ Update dependencies (git-for-windows v2.52.0.windows.1, clink v1.9.2, clink-completions v0.6.7) 2025-11-24 13:46:53 +00:00
10 changed files with 566 additions and 190 deletions

View File

@@ -1,11 +1,10 @@
# 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:
- package-ecosystem: "github-actions" # See documentation for possible values # Enable version updates for GitHub Actions
- package-ecosystem: "github-actions"
directory: "/" # Location of package manifests directory: "/" # Location of package manifests
schedule: schedule:
interval: "weekly" interval: "weekly"
labels:
- "👆 Dependencies"
- "🔄️ GitHub Actions"

View File

@@ -19,10 +19,25 @@ jobs:
# Steps represent a sequence of tasks that will be executed as part of the job # Steps represent a sequence of tasks that will be executed as part of the job
steps: steps:
# Checks-out the repository under $GITHUB_WORKSPACE, so the job can access it # Checks-out the repository under $GITHUB_WORKSPACE, so the job can access it
- uses: actions/checkout@v5 - uses: actions/checkout@v6
with: with:
fetch-depth: 0 # fetch all history for all branches and tags 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 # Runs a single command using the runners shell
- name: Merge master into development - name: Merge master into development
run: | run: |
@@ -31,3 +46,15 @@ jobs:
git checkout development git checkout development
git merge --no-ff master git merge --no-ff master
git push origin development 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

View File

@@ -35,10 +35,25 @@ jobs:
discussions: write discussions: write
steps: steps:
- name: Check out repository code (Action from GitHub) - name: Check out repository code (Action from GitHub)
uses: actions/checkout@v5 uses: actions/checkout@v6
with: with:
fetch-depth: 0 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 - name: Add MSBuild to PATH
uses: microsoft/setup-msbuild@v2 uses: microsoft/setup-msbuild@v2
@@ -47,36 +62,78 @@ jobs:
working-directory: scripts working-directory: scripts
run: .\build.ps1 -Compile -verbose 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 - name: Pack the built files
shell: pwsh shell: pwsh
working-directory: scripts working-directory: scripts
run: .\pack.ps1 -verbose 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) - name: Upload artifact (cmder.zip)
uses: actions/upload-artifact@v5 uses: actions/upload-artifact@v6
with: with:
path: build/cmder.zip path: build/cmder.zip
name: cmder.zip name: cmder.zip
if-no-files-found: error if-no-files-found: error
- name: Upload artifact (cmder.7z) - name: Upload artifact (cmder.7z)
uses: actions/upload-artifact@v5 uses: actions/upload-artifact@v6
with: with:
path: build/cmder.7z path: build/cmder.7z
name: cmder.7z name: cmder.7z
- name: Upload artifact (cmder_mini.zip) - name: Upload artifact (cmder_mini.zip)
uses: actions/upload-artifact@v5 uses: actions/upload-artifact@v6
with: with:
path: build/cmder_mini.zip path: build/cmder_mini.zip
name: cmder_mini.zip name: cmder_mini.zip
- name: Upload artifact (hashes.txt) - name: Upload artifact (hashes.txt)
uses: actions/upload-artifact@v5 uses: actions/upload-artifact@v6
with: with:
path: build/hashes.txt path: build/hashes.txt
name: 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 - name: Create Release
uses: softprops/action-gh-release@v2 uses: softprops/action-gh-release@v2
with: with:
@@ -88,3 +145,18 @@ jobs:
draft: true draft: true
generate_release_notes: true generate_release_notes: true
if: startsWith(github.ref, 'refs/tags/') 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

View File

@@ -45,7 +45,22 @@ jobs:
steps: steps:
- name: Checkout repository - 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. # Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL - name: Initialize CodeQL
@@ -67,7 +82,30 @@ jobs:
working-directory: scripts working-directory: scripts
run: .\build.ps1 -Compile -verbose 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 - name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v4 uses: github/codeql-action/analyze@v4
with: with:
category: "/language:${{matrix.language}}" category: "/language:${{matrix.language}}"
- name: Summary - Analysis completed
if: success()
shell: pwsh
run: |
@"
### 🔍 CodeQL Analysis Results
✅ CodeQL security analysis completed successfully.
**Language analyzed:** ``${{ matrix.language }}``
> Check the Security tab for detailed findings and recommendations.
"@ | Add-Content -Path $env:GITHUB_STEP_SUMMARY -Encoding utf8

View File

@@ -38,17 +38,78 @@ jobs:
continue-on-error: false continue-on-error: false
steps: 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 - name: Initialize vendors
shell: pwsh shell: pwsh
working-directory: scripts working-directory: scripts
run: .\build.ps1 -verbose 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 - name: Testing Clink Shell
run: | run: |
cmd /c vendor\init.bat /v /d /t 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 - name: Testing PowerShell
run: | run: |
PowerShell.exe -ExecutionPolicy Bypass -NoLogo -NoProfile -Command "$env:CMDER_DEBUG='1'; . 'vendor\profile.ps1'" 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 - name: Testing Bash
run: | run: |
bash vendor/cmder.sh 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

View File

@@ -24,10 +24,18 @@ jobs:
pull-requests: write pull-requests: write
steps: steps:
- uses: actions/checkout@v5 - uses: actions/checkout@v6
with: with:
fetch-depth: 0 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 - id: make-changes
name: Checking for updates name: Checking for updates
env: env:
@@ -38,28 +46,224 @@ jobs:
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(', ')
# 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
echo "UPDATE_MESSAGE<<<EOF`n$updateMessage`n<EOF" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8 echo "UPDATE_MESSAGE<<<EOF`n$updateMessage`n<EOF" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8
- uses: peter-evans/create-pull-request@v7 # Generate major updates changelog section
if: env.COUNT_UPDATED > 0 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 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
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
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

View File

@@ -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."

116
vendor/cmder.sh vendored
View File

@@ -1,4 +1,3 @@
#!/usr/bin/env bash
# DO NOT EDIT THIS FILE IT WILL BE OVERWRITTEN ON UPDATE # DO NOT EDIT THIS FILE IT WILL BE OVERWRITTEN ON UPDATE
# #
# Add portable user customizations ${CMDER_ROOT}/config/user_profile.sh, # Add portable user customizations ${CMDER_ROOT}/config/user_profile.sh,
@@ -8,130 +7,93 @@
# Add system specific users customizations to $HOME/.bashrc, these # Add system specific users customizations to $HOME/.bashrc, these
# customizations will not follow Cmder to another machine. # customizations will not follow Cmder to another machine.
# Source all .sh scripts in a given directory function runProfiled {
# Args: $1 - directory path containing .sh scripts to source unset profile_d_scripts
run_profile_d() { pushd "${1}" >/dev/null
local profile_d_scripts
pushd "${1}" >/dev/null || return
# shellcheck disable=SC2035
profile_d_scripts=$(ls *.sh 2>/dev/null) profile_d_scripts=$(ls *.sh 2>/dev/null)
if [ -n "${profile_d_scripts}" ]; then if [ ! "x${profile_d_scripts}" = "x" ] ; then
for script in ${profile_d_scripts}; do for x in ${profile_d_scripts} ; do
# echo Sourcing "${1}/${script}"... # echo Sourcing "${1}/${x}"...
# shellcheck disable=SC1090 . "${1}/${x}"
. "${1}/${script}"
done done
fi fi
popd >/dev/null || return popd >/dev/null
} }
# Detect and set CMDER_ROOT for bash admin sessions # We do this for bash as admin sessions since $CMDER_ROOT is not being set
# Converts Windows paths to Unix paths if needed if [ "$CMDER_ROOT" == "" ] ; then
# ConEmuDir is set by ConEmu/Cmder environment case "$ConEmuDir" in *\\*) CMDER_ROOT=$( cd "$(cygpath -u "$ConEmuDir")/../.." ; pwd );; esac
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
else else
case "$CMDER_ROOT" in case "$CMDER_ROOT" in *\\*) CMDER_ROOT="$(cygpath -u "$CMDER_ROOT")";; esac
*\\*) CMDER_ROOT="$(cygpath -u "$CMDER_ROOT")";;
esac
fi fi
# Remove any trailing '/' from CMDER_ROOT # Remove any trailing '/'
CMDER_ROOT="${CMDER_ROOT%/}" CMDER_ROOT=$(echo $CMDER_ROOT | sed 's:/*$::')
# 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
export CMDER_ROOT 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" 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" GIT_INSTALL_ROOT="/c/Program Files(x86)/Git"
elif [ -f "${CMDER_ROOT}/vendor/git-for-windows/cmd/git.exe" ]; then elif [ -f "${CMDER_ROOT}/vendor/git-for-windows/cmd/git.exe" ] ; then
GIT_INSTALL_ROOT="${CMDER_ROOT}/vendor/git-for-windows" GIT_INSTALL_ROOT=${CMDER_ROOT}/vendor/git-for-windows
fi fi
# Add Git to PATH if not already present if [[ ! "$PATH" =~ "${GIT_INSTALL_ROOT}/bin:" ]] ; then
if [[ -n "${GIT_INSTALL_ROOT}" && ! "$PATH" =~ ${GIT_INSTALL_ROOT}/bin: ]]; then
PATH="${GIT_INSTALL_ROOT}/bin:$PATH" PATH="${GIT_INSTALL_ROOT}/bin:$PATH"
fi fi
# 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 export PATH
# Create profile.d directory if it doesn't exist # Drop *.sh or *.zsh files into "${CMDER_ROOT}\config\profile.d"
if [ ! -d "${CMDER_ROOT}/config/profile.d" ]; then # to source them at startup.
if [ ! -d "${CMDER_ROOT}/config/profile.d" ] ; then
mkdir -p "${CMDER_ROOT}/config/profile.d" mkdir -p "${CMDER_ROOT}/config/profile.d"
fi fi
# Source all .sh scripts in profile.d directories if [ -d "${CMDER_ROOT}/config/profile.d" ] ; then
if [ -d "${CMDER_ROOT}/config/profile.d" ]; then runProfiled "${CMDER_ROOT}/config/profile.d"
run_profile_d "${CMDER_ROOT}/config/profile.d"
fi fi
if [ -d "${CMDER_USER_CONFIG}/profile.d" ]; then if [ -d "${CMDER_USER_CONFIG}/profile.d" ] ; then
run_profile_d "${CMDER_USER_CONFIG}/profile.d" runProfiled "${CMDER_USER_CONFIG}/profile.d"
fi fi
# Rename legacy user-profile.sh to user_profile.sh for consistency # Renaming to "config\user_profile.sh" to "user_profile.sh" for consistency.
if [ -f "$CMDER_ROOT/config/user-profile.sh" ]; then if [ -f "$CMDER_ROOT/config/user-profile.sh" ] ; then
mv "$CMDER_ROOT/config/user-profile.sh" "$CMDER_ROOT/config/user_profile.sh" mv "$CMDER_ROOT/config/user-profile.sh" "$CMDER_ROOT/config/user_profile.sh"
fi fi
# Source user profile from CMDER_ROOT config CmderUserProfilePath="${CMDER_ROOT}/config/user_profile.sh"
if [ -f "${CMDER_ROOT}/config/user_profile.sh" ]; then if [ -f "${CMDER_ROOT}/config/user_profile.sh" ] ; then
. "${CMDER_ROOT}/config/user_profile.sh" . "${CMDER_ROOT}/config/user_profile.sh"
fi fi
# Handle CMDER_USER_CONFIG if set if [ "${CMDER_USER_CONFIG}" != "" ] ; then
if [ -n "${CMDER_USER_CONFIG}" ]; then # Renaming to "config\user_profile.sh" to "user_profile.sh" for consistency.
# Rename legacy user-profile.sh to user_profile.sh for consistency if [ -f "$CMDER_USER_CONFIG/user-profile.sh" ] ; then
if [ -f "$CMDER_USER_CONFIG/user-profile.sh" ]; then
mv "$CMDER_USER_CONFIG/user-profile.sh" "$CMDER_USER_CONFIG/user_profile.sh" mv "$CMDER_USER_CONFIG/user-profile.sh" "$CMDER_USER_CONFIG/user_profile.sh"
fi fi
export PATH="${CMDER_USER_CONFIG}/bin:$PATH" export PATH="${CMDER_USER_CONFIG}/bin:$PATH"
# Source user profile from CMDER_USER_CONFIG CmderUserProfilePath="${CMDER_USER_CONFIG}/user_profile.sh"
if [ -f "${CMDER_USER_CONFIG}/user_profile.sh" ]; then if [ -f "${CMDER_USER_CONFIG}/user_profile.sh" ] ; then
# shellcheck disable=SC1091
. "${CMDER_USER_CONFIG}/user_profile.sh" . "${CMDER_USER_CONFIG}/user_profile.sh"
fi fi
fi fi
# Determine the user profile path for creation if needed if [ ! -f "${CmderUserProfilePath}" ] ; then
if [ -n "${CMDER_USER_CONFIG}" ]; then echo Creating user startup file: "${CmderUserProfilePath}"
cmder_user_profile_path="${CMDER_USER_CONFIG}/user_profile.sh" cp "${CMDER_ROOT}/vendor/user_profile.sh.default" "${CmderUserProfilePath}"
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}"
fi fi
# Source the users .bashrc file if it exists # Source the users .bashrc file if it exists
if [ -f "${HOME}/.bashrc" ]; then if [ -f "${HOME}/.bashrc" ] ; then
# shellcheck disable=SC1091
. "${HOME}/.bashrc" . "${HOME}/.bashrc"
fi fi

123
vendor/cmder_exinit vendored
View File

@@ -1,4 +1,3 @@
#!/usr/bin/env bash
# Copy this file to your non integrated *nix-like environment, # Copy this file to your non integrated *nix-like environment,
# Cygwin/MSys2/Git for Windows SDK, installs '/etc/profile.d/' # Cygwin/MSys2/Git for Windows SDK, installs '/etc/profile.d/'
# folder to integrate the externally installed Unix like environment # folder to integrate the externally installed Unix like environment
@@ -23,130 +22,92 @@
# # from outside Cmder. # # from outside Cmder.
# CMDER_ROOT=${USERPROFILE}/cmder # This is not required if launched from 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 function runProfiled {
# Args: $1 - directory path containing shell scripts to source unset profile_d_scripts
run_profile_d() { pushd "${1}" >/dev/null
local profile_d_scripts
pushd "${1}" >/dev/null || return
if [ -n "${ZSH_VERSION}" ]; then if [ ! "x${ZSH_VERSION}" = "x" ]; then
# shellcheck disable=SC2035
profile_d_scripts=$(ls *.zsh 2>/dev/null) profile_d_scripts=$(ls *.zsh 2>/dev/null)
elif [ -n "${BASH_VERSION}" ]; then elif [ ! "x${BASH_VERSION}" = "x" ]; then
# shellcheck disable=SC2035
profile_d_scripts=$(ls *.sh 2>/dev/null) profile_d_scripts=$(ls *.sh 2>/dev/null)
fi fi
if [ -n "${profile_d_scripts}" ]; then if [ ! "x${profile_d_scripts}" = "x" ] ; then
for script in ${profile_d_scripts}; do for x in ${profile_d_scripts} ; do
echo "Sourcing ${1}/${script}..." echo Sourcing "${1}/${x}"...
# shellcheck disable=SC1090 . "${1}/${x}"
. "${1}/${script}"
done done
fi 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 [[ -z ${CMDER_EXINIT} ]] && CMDER_EXINIT="1" || return
# Detect and set CMDER_ROOT for bash admin sessions # We do this for bash as admin sessions since $CMDER_ROOT is not being set
# Converts Windows paths to Unix paths if needed if [ "$CMDER_ROOT" = "" -a "$ConEmuDir" != "" ] ; then
# ConEmuDir is set by ConEmu/Cmder environment if [ -d "${ConEmuDir}../../vendor" ] ; then
if [ -z "$CMDER_ROOT" ] && [ -n "$ConEmuDir" ]; then case "$ConEmuDir" in *\\*) CMDER_ROOT=$( cd "$(cygpath -u "$ConEmuDir")/../.." ; pwd );; esac
if [ -d "${ConEmuDir}../../vendor" ]; then
case "$ConEmuDir" in
*\\*) CMDER_ROOT=$( cd "$(cygpath -u "$ConEmuDir")/../.." && pwd );;
esac
else else
echo "Running in ConEmu without Cmder, skipping Cmder integration." echo "Running in ConEmu without Cmder, skipping Cmder integration."
fi fi
elif [ -n "$CMDER_ROOT" ]; then elif [ "$CMDER_ROOT" != "" ] ; then
case "$CMDER_ROOT" in case "$CMDER_ROOT" in *\\*) CMDER_ROOT="$(cygpath -u "$CMDER_ROOT")";; esac
*\\*) CMDER_ROOT="$(cygpath -u "$CMDER_ROOT")";;
esac
fi fi
# If CMDER_ROOT is still not set, try to derive from script location if [ ! "$CMDER_ROOT" = "" ] ; then
# Note: This only works if cmder_exinit is in its original location (vendor/) # Remove any trailing '/'
if [ -z "$CMDER_ROOT" ] && [ -f "${BASH_SOURCE[0]}" ]; then CMDER_ROOT=$(echo $CMDER_ROOT | sed 's:/*$::')
# 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 [ -n "$CMDER_ROOT" ]; then echo "Using \"CMDER_ROOT\" at \"${CMDER_ROOT}\"."
# Remove any trailing '/' from CMDER_ROOT
CMDER_ROOT="${CMDER_ROOT%/}"
echo "Using CMDER_ROOT at \"${CMDER_ROOT}\"."
export 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 export PATH
# Create profile.d directory if it doesn't exist # Drop *.sh or *.zsh files into "${CMDER_ROOT}\config\profile.d"
if [ ! -d "${CMDER_ROOT}/config/profile.d" ]; then # to source them at startup.
if [ ! -d "${CMDER_ROOT}/config/profile.d" ] ; then
mkdir -p "${CMDER_ROOT}/config/profile.d" mkdir -p "${CMDER_ROOT}/config/profile.d"
fi fi
# Source all shell scripts in profile.d directories if [ -d "${CMDER_ROOT}/config/profile.d" ] ; then
if [ -d "${CMDER_ROOT}/config/profile.d" ]; then runProfiled "${CMDER_ROOT}/config/profile.d"
run_profile_d "${CMDER_ROOT}/config/profile.d"
fi fi
if [ -d "${CMDER_USER_CONFIG}/profile.d" ]; then if [ -d "${CMDER_USER_CONFIG}/profile.d" ] ; then
run_profile_d "${CMDER_USER_CONFIG}/profile.d" runProfiled "${CMDER_USER_CONFIG}/profile.d"
fi fi
# Rename legacy user-profile.sh to user_profile.sh for consistency # Renaming to "config\user_profile.sh" to "user_profile.sh" for consistency.
if [ -f "$CMDER_ROOT/config/user-profile.sh" ]; then if [ -f "$CMDER_ROOT/config/user-profile.sh" ] ; then
mv "$CMDER_ROOT/config/user-profile.sh" "$CMDER_ROOT/config/user_profile.sh" mv "$CMDER_ROOT/config/user-profile.sh" "$CMDER_ROOT/config/user_profile.sh"
fi fi
# Source user profile from CMDER_ROOT config CmderUserProfilePath="${CMDER_ROOT}/config/user_profile.sh"
if [ -f "${CMDER_ROOT}/config/user_profile.sh" ]; then if [ -f "${CMDER_ROOT}/config/user_profile.sh" ] ; then
# shellcheck disable=SC1091
. "${CMDER_ROOT}/config/user_profile.sh" . "${CMDER_ROOT}/config/user_profile.sh"
fi fi
# Handle CMDER_USER_CONFIG if set if [ "${CMDER_USER_CONFIG}" != "" ] ; then
if [ -n "${CMDER_USER_CONFIG}" ]; then # Renaming to "config\user_profile.sh" to "user_profile.sh" for consistency.
# Rename legacy user-profile.sh to user_profile.sh for consistency if [ -f "$CMDER_USER_CONFIG/user-profile.sh" ] ; then
if [ -f "$CMDER_USER_CONFIG/user-profile.sh" ]; then
mv "$CMDER_USER_CONFIG/user-profile.sh" "$CMDER_USER_CONFIG/user_profile.sh" mv "$CMDER_USER_CONFIG/user-profile.sh" "$CMDER_USER_CONFIG/user_profile.sh"
fi fi
export PATH="${CMDER_USER_CONFIG}/bin:$PATH" export PATH=${CMDER_USER_CONFIG}/bin:$PATH
# Source user profile from CMDER_USER_CONFIG CmderUserProfilePath="${CMDER_USER_CONFIG}/user_profile.sh"
if [ -f "${CMDER_USER_CONFIG}/user_profile.sh" ]; then if [ -f "${CMDER_USER_CONFIG}/user_profile.sh" ] ; then
# shellcheck disable=SC1091
. "${CMDER_USER_CONFIG}/user_profile.sh" . "${CMDER_USER_CONFIG}/user_profile.sh"
fi fi
fi fi
# Determine the user profile path for creation if needed if [ ! -f "${CmderUserProfilePath}" ] ; then
if [ -n "${CMDER_USER_CONFIG}" ]; then echo Creating user startup file: "${CmderUserProfilePath}"
cmder_user_profile_path="${CMDER_USER_CONFIG}/user_profile.sh" cp "${CMDER_ROOT}/vendor/user_profile.sh.default" "${CmderUserProfilePath}"
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}"
fi fi
fi fi

12
vendor/sources.json vendored
View File

@@ -1,13 +1,13 @@
[ [
{ {
"name": "git-for-windows", "name": "git-for-windows",
"version": "2.51.2.windows.1", "version": "2.52.0.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" "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", "name": "clink",
"version": "1.8.8", "version": "1.9.5",
"url": "https://github.com/chrisant996/clink/releases/download/v1.8.8/clink.1.8.8.a63364.zip" "url": "https://github.com/chrisant996/clink/releases/download/v1.9.5/clink.1.9.5.ee6b4f.zip"
}, },
{ {
"name": "conemu-maximus5", "name": "conemu-maximus5",
@@ -21,7 +21,7 @@
}, },
{ {
"name": "clink-completions", "name": "clink-completions",
"version": "0.6.6", "version": "0.6.7",
"url": "https://github.com/vladimir-kotikov/clink-completions/archive/v0.6.6.zip" "url": "https://github.com/vladimir-kotikov/clink-completions/archive/v0.6.7.zip"
} }
] ]