Compare commits

..

118 Commits

Author SHA1 Message Date
copilot-swe-agent[bot]
58ab7976d2 Extract version parsing to shared function and improve error handling
- Created Get-VersionChangeType function in scripts/utils.ps1 (DRY principle)
- Updated vendor.yml and update.ps1 to use shared function
- Fixed numeric comparison for COUNT_UPDATED (fromJSON for proper numeric eval)
- Improved git operation error handling with proper exit code checking
- Only reset commit if it succeeded but push failed

Agent-Logs-Url: https://github.com/cmderdev/cmder/sessions/4511d497-599a-4a80-bc3c-12bd6f2d8191

Co-authored-by: DRSDavidSoft <4673812+DRSDavidSoft@users.noreply.github.com>
2026-04-12 02:38:52 +00:00
David Refoua
09b00758b1 Merge branch 'master' into copilot/improve-vendor-ci-cd-messaging 2026-04-12 05:20:13 +03:30
David Refoua
00a140dac9 Bump peter-evans/create-pull-request from 7 to 8 2026-04-12 05:18:44 +03:30
David Refoua
d3df508d8e Make sure downgrades don't show up as updates
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-04-12 05:10:03 +03:30
David Refoua
426d9e6efe Ensure downgrades don't show up as updates
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-04-12 05:06:50 +03:30
copilot-swe-agent[bot]
59ef29cbab Use numeric comparison instead of string for COUNT_UPDATED in PR title
Agent-Logs-Url: https://github.com/cmderdev/cmder/sessions/acafec24-3b0c-4817-9a18-10214c61dbc4

Co-authored-by: DRSDavidSoft <4673812+DRSDavidSoft@users.noreply.github.com>
2026-04-12 01:32:53 +00:00
copilot-swe-agent[bot]
7fdae8ef48 Add concurrency group to prevent race conditions in vendor workflow
Agent-Logs-Url: https://github.com/cmderdev/cmder/sessions/ddb85bb7-8df8-4cf9-a878-ed669e19a4be

Co-authored-by: DRSDavidSoft <4673812+DRSDavidSoft@users.noreply.github.com>
2026-04-12 01:29:57 +00:00
David Refoua
e4ab8fb2fd Check commitResult
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-04-12 04:59:42 +03:30
David Refoua
6924bcb8b5 Log vendor semantic version parsing failure
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-04-12 04:57:37 +03:30
David Refoua
d11c5641bd resolve conflicts 2026-04-12 04:51:54 +03:30
dependabot[bot]
75cd20b7ff 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>
2026-04-12 00:43:41 +00:00
David Refoua
dc7e1c144f Fix GitHub Actions step summary generation issues 2026-04-12 04:13:02 +03:30
copilot-swe-agent[bot]
55251f7cc3 Show actual branch name and separate PR row in repository information
Agent-Logs-Url: https://github.com/cmderdev/cmder/sessions/7ac9b75c-de48-4c0b-98db-108cc3423c0e

Co-authored-by: DRSDavidSoft <4673812+DRSDavidSoft@users.noreply.github.com>
2026-04-12 00:29:30 +00:00
copilot-swe-agent[bot]
0983e9b763 Add duration tracking to test results and change hashes.txt separator to tab
Agent-Logs-Url: https://github.com/cmderdev/cmder/sessions/48204621-5da0-4649-9715-ac9df45f1153

Co-authored-by: DRSDavidSoft <4673812+DRSDavidSoft@users.noreply.github.com>
2026-04-12 00:24:53 +00:00
copilot-swe-agent[bot]
cb59bb54b0 Fix variable name casing inconsistency in vendor.yml (Summary -> summary)
Agent-Logs-Url: https://github.com/cmderdev/cmder/sessions/7c117654-3cc9-428c-846a-01931a2f9b5b

Co-authored-by: DRSDavidSoft <4673812+DRSDavidSoft@users.noreply.github.com>
2026-04-12 00:20:53 +00:00
David Refoua
c882ade42d fix multi-line EOF syntax according to GitHub
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-04-12 03:47:52 +03:30
David Refoua
dcbb0e9203 fix: Handle multi-line JSON
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-04-12 03:46:47 +03:30
David Refoua
f3fa589ac3 use double-quote for "`n"
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-04-12 03:45:54 +03:30
David Refoua
32cf8767f5 fix: Derive directories from the array entries
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-04-12 03:44:49 +03:30
David Refoua
03deb9d859 fix: handle links to vendor repo archive URL
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-04-12 03:43:54 +03:30
David Refoua
01d01c6a57 parse entire JSON string at once
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-04-12 03:42:33 +03:30
copilot-swe-agent[bot]
25ea725338 Fix Format-FileSize undefined error by sourcing utils.ps1 in artifacts upload step
Agent-Logs-Url: https://github.com/cmderdev/cmder/sessions/bf167f7e-397b-4635-a7d2-2c2680207e67

Co-authored-by: DRSDavidSoft <4673812+DRSDavidSoft@users.noreply.github.com>
2026-04-11 22:33:42 +00:00
copilot-swe-agent[bot]
cbc7f53cd3 Add workflow_dispatch to enable manual build workflow runs
Agent-Logs-Url: https://github.com/cmderdev/cmder/sessions/49b3cbe7-8c16-4e18-a4c4-e0587448245e

Co-authored-by: DRSDavidSoft <4673812+DRSDavidSoft@users.noreply.github.com>
2026-04-11 22:27:24 +00:00
copilot-swe-agent[bot]
31e73cce59 Fix vendor package release links and artifact download URLs
Agent-Logs-Url: https://github.com/cmderdev/cmder/sessions/ff648493-d8fd-4117-9a78-2933758d2280

Co-authored-by: DRSDavidSoft <4673812+DRSDavidSoft@users.noreply.github.com>
2026-04-11 22:16:56 +00:00
copilot-swe-agent[bot]
2de93d1d55 Move Format-FileSize and Get-ArtifactDownloadUrl functions to utils.ps1
Agent-Logs-Url: https://github.com/cmderdev/cmder/sessions/9334534b-9a07-4053-a214-f394e6e92aaa

Co-authored-by: DRSDavidSoft <4673812+DRSDavidSoft@users.noreply.github.com>
2026-04-11 21:41:27 +00:00
copilot-swe-agent[bot]
aa801c2c17 Make artifact names clickable, use human-readable file sizes, and add rar to compression formats
Agent-Logs-Url: https://github.com/cmderdev/cmder/sessions/ce43a069-b966-4141-b4e1-3d201bc3ddbf

Co-authored-by: DRSDavidSoft <4673812+DRSDavidSoft@users.noreply.github.com>
2026-04-11 21:35:15 +00:00
copilot-swe-agent[bot]
1418da1c18 Dynamically discover all build artifacts instead of hardcoding filenames
Agent-Logs-Url: https://github.com/cmderdev/cmder/sessions/8667c9a1-2ae6-4286-bcf4-f58735eb094e

Co-authored-by: DRSDavidSoft <4673812+DRSDavidSoft@users.noreply.github.com>
2026-04-11 21:30:51 +00:00
copilot-swe-agent[bot]
05b24c2173 Wrap buildTime in code formatting backticks while keeping small tag
Agent-Logs-Url: https://github.com/cmderdev/cmder/sessions/915ff38b-d73d-4ed8-bc2d-1fd1efa26f9b

Co-authored-by: DRSDavidSoft <4673812+DRSDavidSoft@users.noreply.github.com>
2026-04-11 21:03:52 +00:00
copilot-swe-agent[bot]
f69c1db205 Remove separator before artifacts, add sources.json link, and link vendor versions to releases
Agent-Logs-Url: https://github.com/cmderdev/cmder/sessions/6ed72053-91c6-4e75-8317-ac54af872629

Co-authored-by: DRSDavidSoft <4673812+DRSDavidSoft@users.noreply.github.com>
2026-04-11 20:52:47 +00:00
David Refoua
2ebb4f2d5b Merge pull request #3077 from cmderdev/master
Update with upstream
2026-04-12 00:15:26 +03:30
David Refoua
165ca3b05b Merge pull request #3076 from cmderdev/master
Update with upstream
2026-04-12 00:12:11 +03:30
David Refoua
be3d66d8a3 Merge pull request #3075 from cmderdev/copilot/fix-double-zip-problem
fix: resolve double-zip problem with github artifact upload
2026-04-12 00:10:28 +03:30
David Refoua
35c1cd6f42 Revert GitHub Actions checkout action version to v6 (latest) 2026-04-12 00:04:19 +03:30
copilot-swe-agent[bot]
07a2c6e5cd fix: correct checkout to v4 and add archive: false to fix double-zip
- actions/checkout@v6 does not exist; correct to @v4
- Add archive: false to all actions/upload-artifact@v7 steps so .zip
  and .7z files are uploaded directly without being wrapped in an
  extra zip container (fixes the double-zip problem described in
  #2725 and #2805)

Agent-Logs-Url: https://github.com/cmderdev/cmder/sessions/1d806690-a6f7-49d1-bef5-cefe50fc371e

Co-authored-by: DRSDavidSoft <4673812+DRSDavidSoft@users.noreply.github.com>
2026-04-11 20:17:05 +00:00
David Refoua
7cfa69fe74 Merge pull request #3069 from cmderdev/dependabot/github_actions/actions/upload-artifact-7
Bump actions/upload-artifact from 6 to 7
2026-04-11 23:37:07 +03:30
David Refoua
74b089662c Merge pull request #3070 from cmderdev/dependabot/github_actions/microsoft/setup-msbuild-3
Bump microsoft/setup-msbuild from 2 to 3
2026-04-11 23:35:34 +03:30
dependabot[bot]
ed5ebfe5ba Bump microsoft/setup-msbuild from 2 to 3
Bumps [microsoft/setup-msbuild](https://github.com/microsoft/setup-msbuild) from 2 to 3.
- [Release notes](https://github.com/microsoft/setup-msbuild/releases)
- [Commits](https://github.com/microsoft/setup-msbuild/compare/v2...v3)

---
updated-dependencies:
- dependency-name: microsoft/setup-msbuild
  dependency-version: '3'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-23 16:19:05 +00:00
dependabot[bot]
86d1cbcfa0 Bump actions/upload-artifact from 6 to 7
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 6 to 7.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v6...v7)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-02 17:43:22 +00:00
Dax T. Games
ae3ed7718c Merge remote-tracking branch 'upstream/master' into copilot/improve-vendor-ci-cd-messaging
* upstream/master:
  trigger
  trigger
2026-02-28 09:56:13 -05:00
Dax T. Games
1e2d8eb47d fixes 2026-02-28 08:54:40 -05:00
Dax T Games
adbd6322f6 Merge branch 'master' into copilot/fix-github-step-summary 2026-02-28 08:06:34 -05:00
Dax T. Games
d495b06726 fixes 2026-02-22 15:14:05 -05:00
Dax T. Games
7f22d2eb73 trigger 2026-02-22 14:54:42 -05:00
Dax T. Games
573bf6ebfb trigger 2026-02-22 14:49:51 -05:00
Dax T. Games
05de4f606a fix codeql 2026-02-22 15:42:39 -05:00
Dax T. Games
c8495a0f58 fix vendor 2026-02-22 15:38:45 -05:00
Dax T. Games
6593acf8c8 Add historical changelog entries. 2026-02-22 14:25:56 -05:00
Dax T. Games
a6f0015b16 cleanup 2026-02-22 13:47:37 -05:00
Dax T. Games
8c0e2c542c Fix workflow YAML 2026-02-22 18:25:56 -05:00
Dax T. Games
f2bde614d4 Fix workflows 2026-02-22 18:21:46 -05:00
Dax T. Games
0c6b2d9900 Add back comments 2026-02-22 13:45:47 -05:00
Dax T. Games
66ab9ad6f7 remove nodejs files 2026-02-22 18:11:34 -05:00
Dax T. Games
6137073ba3 fix path to sources.json 2026-02-22 17:58:59 -05:00
Dax T. Games
6858619614 x 2026-02-22 17:56:27 -05:00
Dax T Games
002282636a Merge branch 'master' into copilot/fix-github-step-summary 2026-02-22 12:36:55 -05:00
Dax T. Games
48cc28a634 Fix yaml errors 2026-02-22 17:27:45 -05:00
Dax T. Games
e71c7679f6 Fixes and Cleanup 2026-02-22 16:22:17 -05:00
Dax T. Games
c06d852248 fix quotes 2026-02-21 11:20:21 -05:00
David Refoua
ee967279d0 Merge pull request #3056 from chrisant996/support_git_reftables
Update the Lua git prompt to support repos with git reftables.
2026-02-16 16:11:15 +03:30
copilot-swe-agent[bot]
dc93fa5d1b Add real artifact download URLs with retry logic and fallback to run page
Co-authored-by: DRSDavidSoft <4673812+DRSDavidSoft@users.noreply.github.com>
2025-12-25 05:40:39 +00:00
copilot-swe-agent[bot]
684185ca8a Fix vendor workflow Unicode escape error by converting echo to PowerShell here-strings
Co-authored-by: DRSDavidSoft <4673812+DRSDavidSoft@users.noreply.github.com>
2025-12-25 05:37:09 +00:00
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
David Refoua
2780a43323 Update .github/workflows/tests.yml
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-12-15 06:33:39 +03:30
David Refoua
641ce7b1e8 Update .github/workflows/build.yml
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-12-15 06:23:04 +03:30
David Refoua
a52b0b9e10 Update .github/workflows/tests.yml
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-12-15 06:20:35 +03:30
copilot-swe-agent[bot]
825df3aace Fix branch link for PR merge refs to point to PR instead of invalid tree URL
Co-authored-by: DRSDavidSoft <4673812+DRSDavidSoft@users.noreply.github.com>
2025-12-15 02:48:18 +00:00
David Refoua
a937901e82 Change emoji for Vendor Packages section 2025-12-15 06:06:08 +03:30
copilot-swe-agent[bot]
27c7a0cdc6 Improve build summary: simplify message, reorder columns, add file type emojis
Co-authored-by: DRSDavidSoft <4673812+DRSDavidSoft@users.noreply.github.com>
2025-12-15 01:59:35 +00:00
copilot-swe-agent[bot]
838c1cfaa3 Add backticks to clickable links for code formatting in Repository Information
Co-authored-by: DRSDavidSoft <4673812+DRSDavidSoft@users.noreply.github.com>
2025-12-15 01:56: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]
bff3862ad4 Use 🗃️ emoji for Vendor Packages and Artifacts sections
Co-authored-by: DRSDavidSoft <4673812+DRSDavidSoft@users.noreply.github.com>
2025-12-15 01:41:42 +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]
2057ee58b0 Fix incomplete summary by initializing $summary variable before appending
Co-authored-by: DRSDavidSoft <4673812+DRSDavidSoft@users.noreply.github.com>
2025-12-15 01:13:19 +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]
0bc7fd3aaa Improve build workflow summary: add links, vendor packages, full hashes, and merge artifact sections
Co-authored-by: DRSDavidSoft <4673812+DRSDavidSoft@users.noreply.github.com>
2025-12-14 22:30:03 +00:00
copilot-swe-agent[bot]
1e04711a21 Change test emoji from 🧪 to in workflow summary
Co-authored-by: DRSDavidSoft <4673812+DRSDavidSoft@users.noreply.github.com>
2025-12-14 22:08:39 +00:00
copilot-swe-agent[bot]
3810b8d258 Initial plan 2025-12-14 21:42:23 +00:00
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
Chris Antos
6ba699a3c4 Clean luacheck warning. 2025-12-07 19:58:48 -08:00
Chris Antos
13dd021d6a Fix branch name in a newly inited repo.
"git branch" does not work in a newly inited repo.  So in a newly inited
using reftables, the branch name was not able to be retrieved, and the
"Loading..." placeholder remained indefinitely.

This change updates it to try again with "git branch --show-current"
when "git branch" prints empty output.
2025-12-07 19:52:40 -08:00
Chris Antos
c3f239267d Update the git prompt to support repos with git reftables.
Also move the " -> remote" logic from clink-completions/git_prompt.lua
directly into the Cmder prompt implementation (otherwise it can't work
properly with reftables).
2025-12-06 16:19:20 -08: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
14 changed files with 1167 additions and 202 deletions

View File

@@ -5,7 +5,11 @@
version: 2
updates:
# Enable version updates for GitHub Actions
- package-ecosystem: "github-actions" # See documentation for possible values
directory: "/" # Location of package manifests
schedule:
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:
# 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

View File

@@ -12,6 +12,7 @@ on:
- "v*"
pull_request:
branches: [ "master", "development" ]
workflow_dispatch:
#---------------------------------#
# environment configuration #
@@ -35,47 +36,210 @@ 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: |
# Get Cmder version
. scripts/utils.ps1
$cmderVersion = Get-VersionStr
$buildTime = (Get-Date).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ")
# Determine branch and PR information
$refName = "${{ github.ref_name }}"
$headRef = "${{ github.head_ref }}"
$eventName = "${{ github.event_name }}"
$prNumber = $null
$actualBranchName = $refName
$branchLink = ""
$prLink = ""
# Check if this is a PR merge ref (e.g., "3061/merge")
if ($refName -match '^(\d+)/(merge|head)$') {
$prNumber = $Matches[1]
# Use head_ref for the actual branch name if available
if ($headRef) {
$actualBranchName = $headRef
}
$branchLink = "https://github.com/${{ github.repository }}/tree/$actualBranchName"
$prLink = "https://github.com/${{ github.repository }}/pull/$prNumber"
} elseif ($eventName -eq "pull_request") {
# This is a pull request event
$prNumber = "${{ github.event.pull_request.number }}"
if ($headRef) {
$actualBranchName = $headRef
}
$branchLink = "https://github.com/${{ github.repository }}/tree/$actualBranchName"
$prLink = "https://github.com/${{ github.repository }}/pull/$prNumber"
} else {
# Regular branch, link to the branch tree
$branchLink = "https://github.com/${{ github.repository }}/tree/$refName"
}
$summary = @"
## 📦 Build Cmder - Workflow Summary
<small>Build started: ``$buildTime``</small>
### Repository Information
| Property | Value |
| --- | --- |
| Repository | [``${{ github.repository }}``](https://github.com/${{ github.repository }}) |
| Branch | [``$actualBranchName``]($branchLink) |
$(if ($prNumber) { "| Pull Request | [#$prNumber]($prLink) |" })
| Commit | [``${{ github.sha }}``](https://github.com/${{ github.repository }}/commit/${{ github.sha }}) |
| Actor | [@${{ github.actor }}](https://github.com/${{ github.actor }}) |
| Workflow | ``${{ github.workflow }}`` |
| Cmder Version | **$cmderVersion** |
---
### 🗃️ Vendor Packages ([sources.json](vendor/sources.json))
| Package | Version |
| --- | --- |
"@
# Read vendor sources.json and add to summary
$vendorSources = Get-Content -Raw "vendor/sources.json" | ConvertFrom-Json
if ($vendorSources.Count -eq 0) {
$summary += "`n| _No vendor packages found_ | |"
} else {
foreach ($vendor in $vendorSources) {
# Create release link based on vendor package
$versionLink = "$($vendor.version)"
if ($vendor.url) {
# Extract owner/repo/tag from the URL and create release link
# Handle both /releases/download/ and /archive/ URLs
if ($vendor.url -match 'github\.com/([^/]+)/([^/]+)/(releases/download|archive)/([^/]+)') {
$owner = $Matches[1]
$repo = $Matches[2]
$pathType = $Matches[3]
$tag = $Matches[4]
if ($pathType -eq 'archive') {
$tag = $tag -replace '\.(?:tar\.gz|tgz|zip)$', ''
}
$versionLink = "[$($vendor.version)](https://github.com/$owner/$repo/releases/tag/$tag)"
}
}
$summary += "`n| ``$($vendor.name)`` | $versionLink |"
}
}
$summary += "`n"
$summary | Add-Content -Path $env:GITHUB_STEP_SUMMARY -Encoding utf8
- name: Add MSBuild to PATH
uses: microsoft/setup-msbuild@v2
uses: microsoft/setup-msbuild@v3
- name: Build Cmder Launcher
shell: pwsh
working-directory: scripts
run: .\build.ps1 -Compile -verbose
- name: Summary - Build completed
if: success()
shell: pwsh
run: |
$summary = @"
---
✅ Cmder built successfully.
"@
$summary | Add-Content -Path $env:GITHUB_STEP_SUMMARY -Encoding utf8
- name: Pack the built files
shell: pwsh
working-directory: scripts
run: .\pack.ps1 -verbose
- name: Upload artifact (cmder.zip)
uses: actions/upload-artifact@v5
uses: actions/upload-artifact@v7
with:
path: build/cmder.zip
name: cmder.zip
archive: false
if-no-files-found: error
- name: Upload artifact (cmder.7z)
uses: actions/upload-artifact@v5
uses: actions/upload-artifact@v7
with:
path: build/cmder.7z
name: cmder.7z
archive: false
- name: Upload artifact (cmder_mini.zip)
uses: actions/upload-artifact@v5
uses: actions/upload-artifact@v7
with:
path: build/cmder_mini.zip
name: cmder_mini.zip
archive: false
- name: Upload artifact (hashes.txt)
uses: actions/upload-artifact@v5
uses: actions/upload-artifact@v7
with:
path: build/hashes.txt
name: hashes.txt
archive: false
- name: Summary - Artifacts uploaded
if: success()
shell: pwsh
env:
GH_TOKEN: ${{ github.token }}
run: |
# Source utility functions
. scripts/utils.ps1
$summary = @"
### 🗃️ Artifacts
| Artifact | Size | Hash (SHA256) |
| --- | --- | --- |
"@
# Get all files from the build directory (excluding directories and hidden files)
if (Test-Path "build") {
$buildFiles = Get-ChildItem -Path "build" -File | Where-Object { -not $_.Name.StartsWith('.') } | Sort-Object Name
foreach ($file in $buildFiles) {
$artifact = $file.Name
$path = $file.FullName
$sizeFormatted = Format-FileSize -Bytes $file.Length
$hash = (Get-FileHash $path -Algorithm SHA256).Hash
# Try to get the actual artifact download URL
$downloadUrl = Get-ArtifactDownloadUrl -ArtifactName $artifact -Repository "${{ github.repository }}" -RunId "${{ github.run_id }}"
$warning = ""
if (-not $downloadUrl) {
# Fallback to workflow run page if artifact URL fetch fails
$downloadUrl = "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
$warning = " ⚠️"
}
# Determine emoji based on file type
if ($artifact -match '\.txt$') {
$emoji = "📄"
} elseif ($artifact -match '\.(zip|rar|7z)$') {
$emoji = "🗄️"
} else {
$emoji = "📦"
}
$summary += "`n| $emoji [``$artifact``$warning]($downloadUrl) | $sizeFormatted | ``$hash`` |"
}
}
$summary += "`n"
$summary | Add-Content -Path $env:GITHUB_STEP_SUMMARY -Encoding utf8
- name: Create Release
uses: softprops/action-gh-release@v2
@@ -88,3 +252,25 @@ 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: |
$summary = @"
---
### Release Information
🚀 Draft release created for tag: **``${{ github.ref_name }}``**
Release includes:
- Full version (``cmder.zip``, ``cmder.7z``)
- Mini version (``cmder_mini.zip``)
- File hashes (``hashes.txt``)
> ⚠️ Release is in **draft** mode. Please review and publish manually.
"@
$summary | Add-Content -Path $env:GITHUB_STEP_SUMMARY -Encoding utf8

View File

@@ -45,7 +45,26 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@v5
uses: actions/checkout@v6
- name: Summary - CodeQL analysis started
shell: pwsh
run: |
$summary = @"
## 🔒 CodeQL Security Analysis - Workflow Summary
### Analysis Configuration
| Property | Value |
| --- | --- |
| Repository | ``${{ github.repository }}`` |
| Branch | ``${{ github.ref_name }}`` |
| Language | ``${{ matrix.language }}`` |
| Commit | ``${{ github.sha }}`` |
"@
$summary | Add-Content -Path $env:GITHUB_STEP_SUMMARY -Encoding utf8
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
@@ -60,14 +79,43 @@ jobs:
# queries: security-extended,security-and-quality
- name: Add MSBuild to PATH
uses: microsoft/setup-msbuild@v2
uses: microsoft/setup-msbuild@v3
- name: Build Cmder Launcher
shell: pwsh
working-directory: scripts
run: .\build.ps1 -Compile -verbose
- name: Summary - Build status
if: success()
shell: pwsh
run: |
$summary = @"
### ✅ Build Completed
Cmder launcher built successfully for CodeQL analysis.
"@
$summary | Add-Content -Path $env:GITHUB_STEP_SUMMARY -Encoding utf8
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v4
with:
category: "/language:${{matrix.language}}"
- name: Summary - Analysis completed
if: success()
shell: pwsh
run: |
$summary = @"
### 🔍 CodeQL Analysis Results
✅ CodeQL security analysis completed successfully.
**Language analyzed:** ``${{ matrix.language }}``
> Check the Security tab for detailed findings and recommendations.
"@
$summary | Add-Content -Path $env:GITHUB_STEP_SUMMARY -Encoding utf8

View File

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

View File

@@ -6,6 +6,10 @@ on:
# At 13:37 UTC every day.
- cron: '37 13 * * *'
concurrency:
group: vendor-update
cancel-in-progress: false
defaults:
run:
shell: pwsh
@@ -24,42 +28,266 @@ jobs:
pull-requests: write
steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Summary - Workflow started
shell: pwsh
run: |
$summary = @"
## 📦 Update Vendor - Workflow Summary
Checking for vendor dependency updates...
"@
$summary | Add-Content -Path $env:GITHUB_STEP_SUMMARY -Encoding utf8
- id: make-changes
name: Checking for updates
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
$currentVersion = (Get-Content .\vendor\sources.json | ConvertFrom-Json)
$currentVersion = (Get-Content -Raw .\vendor\sources.json | ConvertFrom-Json)
. .\scripts\update.ps1 -verbose
# Export count of updated packages (update.ps1 is expected to set $count)
if (-not ($count)) { $count = 0 }
Set-GHVariable -Name COUNT_UPDATED -Value $count
$newVersion = (Get-Content .\vendor\sources.json | ConvertFrom-Json)
$newVersion = (Get-Content -Raw .\vendor\sources.json | ConvertFrom-Json)
# Source utility functions
. scripts/utils.ps1
$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 (only if this is the only update)
if ($count -eq 1) {
$singleDepName = $s.name
$singleDepOldVersion = $oldVersion
$singleDepNewVersion = $s.version
}
# Determine change type and emoji using shared function
$result = Get-VersionChangeType -OldVersion $oldVersion -NewVersion $s.version
$changeType = $result.ChangeType
$emoji = $result.Emoji
$isMajor = $result.IsMajor
# 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(', ')
echo "UPDATE_MESSAGE<<<EOF`n$updateMessage`n<EOF" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8
- uses: peter-evans/create-pull-request@v7
if: env.COUNT_UPDATED > 0
if ($count -eq 0) { return }
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
# Write multiline UPDATE_MESSAGE to GITHUB_ENV
## echo "UPDATE_MESSAGE<<EOF`n$updateMessage`nEOF" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8
Add-Content -Path $env:GITHUB_ENV -Value "UPDATE_MESSAGE<<EOF"
Add-Content -Path $env:GITHUB_ENV -Value $updateMessage
Add-Content -Path $env:GITHUB_ENV -Value "EOF"
# Generate major updates changelog section and export
if ($majorUpdates.Count -gt 0) {
$changelogSection = "`n<details>`n<summary>🔥 Major version updates - View changelog</summary>`n`n"
foreach ($update in $majorUpdates) {
$changelogSection += "### [$($update.name)]($($update.repoUrl))`n"
$changelogSection += "**$($update.oldVersion)** → **$($update.newVersion)**`n`n"
$changelogSection += "- [View full changelog]($($update.compareUrl))`n"
$changelogSection += "- [Release notes]($($update.repoUrl)/tag/v$($update.newVersion))`n`n"
}
$changelogSection += "</details>`n"
Add-Content -Path $env:GITHUB_ENV -Value "CHANGELOG_SECTION<<EOF"
Add-Content -Path $env:GITHUB_ENV -Value $changelogSection
Add-Content -Path $env:GITHUB_ENV -Value "EOF"
Add-Content -Path $env:GITHUB_ENV -Value "HAS_BREAKING_CHANGES=True"
} else {
Add-Content -Path $env:GITHUB_ENV -Value "CHANGELOG_SECTION="
Add-Content -Path $env:GITHUB_ENV -Value "HAS_BREAKING_CHANGES=False"
}
- name: Summary - Update check results
shell: pwsh
run: |
$count = [int]$env:COUNT_UPDATED
if ($count -eq 0) {
$summary = @"
### ✅ No Updates Available
All vendor dependencies are up to date! 🎉
"@
} else {
$word = if ($count -eq 1) { 'dependency' } else { 'dependencies' }
$summary = @"
### 🔄 Updates Found
"@
$summary += '📦 **' + $env:SINGLE_DEP_NAME + '** updated from `' + $env:SINGLE_DEP_OLD_VERSION + '` to `' + $env:SINGLE_DEP_NEW_VERSION + '`' + "`n" + "`n"
$summary += '📦 **' + $count + '** vendor ' + $word + ' updated:' + "`n" + "`n"
}
$summary += $env:UPDATE_MESSAGE + "`n"
# Check if we can auto-merge (only minor/patch changes)
$hasBreaking = $env:HAS_BREAKING_CHANGES -eq 'True'
if ($hasBreaking) {
$summary += '> ⚠️ **Note:** This update contains major version changes that may include breaking changes.'
} else {
$summary += '> **Note:** This update only contains minor or patch changes.'
}
$summary | Add-Content -Path $env:GITHUB_STEP_SUMMARY -Encoding utf8
- name: Auto-merge minor updates
if: env.COUNT_UPDATED > 0 && env.HAS_BREAKING_CHANGES != 'True'
shell: pwsh
run: |
try {
echo "### 🚀 Auto-merging Updates" >> $env:GITHUB_STEP_SUMMARY
echo "" >> $env:GITHUB_STEP_SUMMARY
echo "Attempting to automatically merge non-breaking changes to master..." >> $env:GITHUB_STEP_SUMMARY
git config --global user.name "github-actions[bot]"
git config --global user.email "github-actions[bot]@users.noreply.github.com"
# Commit the changes
git add vendor/sources.json
$commitResult = git commit -m "⬆️ Update dependencies ($env:LIST_UPDATED)"
$commitSuccess = $LASTEXITCODE -eq 0
if ($commitSuccess) {
# Push directly to master
git push origin HEAD:master
$pushSuccess = $LASTEXITCODE -eq 0
if ($pushSuccess) {
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
} else {
throw "Failed to push to master (exit code: $LASTEXITCODE)"
}
} else {
throw "Failed to commit changes (exit code: $LASTEXITCODE)"
}
} 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)"
# Only reset if commit was successful but push failed
if ($commitSuccess -and -not $pushSuccess) {
try {
git reset --hard HEAD~1
if ($LASTEXITCODE -ne 0) {
Write-Warning "Failed to reset commit (exit code: $LASTEXITCODE), continuing with PR creation"
}
} catch {
Write-Warning "Failed to reset commit: $($_.Exception.Message), continuing with PR creation"
}
}
# 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: fromJSON(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: |
$summary = @"
### 🎉 Pull Request Created
A pull request has been created to update the vendor dependencies.
**Branch:** ``update-vendor``
$(if (-not [string]::IsNullOrEmpty($env:LIST_UPDATED)) { "**Updated dependencies:** $env:LIST_UPDATED" } else { "**Updated dependencies:** " })
"@
if ($env:HAS_BREAKING_CHANGES -eq 'True') {
$summary += "> ⚠️ **Manual review required:** This update contains major version changes."
} else {
$summary += "> **Note:** Auto-merge failed, manual review required."
}
$summary += @"
> Please review and merge the pull request to apply the updates.
"@
$summary | Add-Content -Path $env:GITHUB_STEP_SUMMARY -Encoding utf8

View File

@@ -1,5 +1,84 @@
# Change Log
## [1.3.25](https://github.com/cmderdev/cmder/tree/v1.3.25) (2024-05-31)
### Changes
- Component Updates
- Update Git for Windows to 2.45.1.windows.1.
- Update ConEmu to 24.05.31.
- Clink 1.6.14.
- clink-completions 0.5.2.
- Add `SECURITY.md` and refresh CI workflows and actions.
- Enable `match.expand_envvars` and improve git diagnostics for improper versions.
### Fixes
- Fix #2944.
- Fix script error when the working directory contains `%`.
- Remove environment refresh race condition.
## [1.3.24](https://github.com/cmderdev/cmder/tree/v1.3.24) (2023-07-24)
### Changes
- Update `build.yml` workflow.
## [1.3.23](https://github.com/cmderdev/cmder/tree/v1.3.23) (2023-07-24)
### Changes
- Update ConEmu (conemu-maximus5) to 23.07.24.
## [1.3.22](https://github.com/cmderdev/cmder/tree/v1.3.22) (2023-07-24)
### Changes
- Handle Clink injction differently in `init.bat`.
- Changes to `clink_settings.lua.default`.
- Do not add commands to Clink Command Line History that begin with whitespace as a default.
- This can be changed to the old behavior by setting `history_ignore_space` to `0` in `config\clink_settings.lua`.
- `history.max_lines` is now defaults to `25000` instead of `10000`.
- This can be changed back to the old behavior by setting `history_max_lines` to `10000` in `config\clink_settings.lua`.
- `history.shared` now defaults to `False` instead of `True`.
- The previous default of `True` was causing issues with some users when using Cmder in multiple sessions.
- This can be changed back to the old behavior by setting `history_shared` to `1` in `config\clink_settings.lua`.
- Component Updates
- Git for Windows to 2.41.0.windows.3
- Clink to 1.5.1
- ConEmu to 23.07.23
- clink-completions to 0.4.10
- Remove AppVeyor configuration and add CodeQL scanning and Dependabot updates.
### Fixes
- Fix `/task "<taskName>"` handling.
- Skip clink injection when initialization fails fatally.
- Fix errors when git/svn/hg are not installed and in profile.d PowerShell scripts.
## [1.3.21](https://github.com/cmderdev/cmder/tree/v1.3.21) (2022-12-19)
### Fixes
- Fix #2789.
- Fix Git Bash `GIT_INSTALL_ROOT` handling.
### Changes
- Refactor `clink.lua` to speed up the prompt.
- Refactor and Cleanup `init.bat` and related scripts.
- Refactor and Cleanup `profile.ps1` and related scripts.
- Remove handling of `clink` and `tcc` incompatibility.
- Update ConEmu to mitigate CVE-2022-46387.
- Update Git for Windows to 2.39.0.windows.1 and Clink to 1.4.4.
### Adds
- Add `show_warning` function to `vendor\lib\lib_console.cmd` for showing warning messages in yellow.
## [1.3.20](https://github.com/cmderdev/cmder/tree/v1.3.20) (2022-03-18)
### Changes

View File

@@ -70,7 +70,7 @@ if ($PSCmdlet.MyInvocation.BoundParameters["Verbose"].IsPresent) {
foreach ($t in $targets.GetEnumerator()) {
Create-Archive "$cmderRoot" "$saveTo\$($t.Name)" $t.Value
$hash = (Digest-Hash "$saveTo\$($t.Name)")
Add-Content -path "$saveTo\hashes.txt" -value ($t.Name + ' ' + $hash)
Add-Content -path "$saveTo\hashes.txt" -value ($t.Name + "`t" + $hash)
}
Pop-Location

View File

@@ -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,26 @@ foreach ($s in $sources) {
# }
$count++
# Analyze version change type using shared function
$result = Get-VersionChangeType -OldVersion $s.version -NewVersion $version
$changeType = $result.ChangeType
# Determine if this is a breaking change
if ($changeType -eq "downgrade" -or $changeType -eq "major") {
$hasBreakingChanges = $true
} elseif ($changeType -eq "unknown") {
# If version parsing failed, treat as potentially breaking
$hasBreakingChanges = $true
Write-Verbose "Could not parse version as semantic version for dependency '$($s.name)' (old: '$($s.version)', new: '$version'), treating as potentially breaking"
}
$updateDetails += @{
name = $s.name
oldVersion = $s.version
newVersion = $version
changeType = $changeType
}
}
$s.url = $downloadUrl
@@ -314,12 +336,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."

View File

@@ -249,3 +249,201 @@ function Download-File {
$wc.Proxy.Credentials = [System.Net.CredentialCache]::DefaultNetworkCredentials;
$wc.DownloadFile($Url, $File)
}
function Format-FileSize {
<#
.SYNOPSIS
Formats a file size in bytes to a human-readable string using binary units.
.DESCRIPTION
Converts file sizes to appropriate binary units (B, KiB, MiB, GiB) for better readability.
.PARAMETER Bytes
The file size in bytes to format.
.EXAMPLE
Format-FileSize -Bytes 1024
Returns "1.00 KiB"
.EXAMPLE
Format-FileSize -Bytes 15728640
Returns "15.00 MiB"
#>
param(
[Parameter(Mandatory = $true)]
[double]$Bytes
)
if ($Bytes -ge 1GB) {
return "{0:N2} GiB" -f ($Bytes / 1GB)
} elseif ($Bytes -ge 1MB) {
return "{0:N2} MiB" -f ($Bytes / 1MB)
} elseif ($Bytes -ge 1KB) {
return "{0:N2} KiB" -f ($Bytes / 1KB)
} else {
return "{0:N0} B" -f $Bytes
}
}
function Get-VersionChangeType {
<#
.SYNOPSIS
Analyzes version changes using semantic versioning to determine the type of update and appropriate emoji.
.DESCRIPTION
Parses old and new version strings, compares them using semantic versioning rules,
and returns information about the change type, emoji indicator, and whether it's a major update.
.PARAMETER OldVersion
The previous version string (e.g., "1.2.3" or "2.52.0.windows.1").
.PARAMETER NewVersion
The new version string (e.g., "1.3.0" or "3.0.0.windows.1").
.OUTPUTS
Returns a hashtable with the following keys:
- ChangeType: "major", "minor", "patch", "downgrade", or "unknown"
- Emoji: The corresponding emoji indicator (🔥, 🚀, ⬆️, or 🔄)
- IsMajor: Boolean indicating if this is a major version update
.EXAMPLE
$result = Get-VersionChangeType -OldVersion "1.2.3" -NewVersion "2.0.0"
# Returns: @{ ChangeType = "major"; Emoji = "🔥"; IsMajor = $true }
.EXAMPLE
$result = Get-VersionChangeType -OldVersion "1.2.3" -NewVersion "1.3.0"
# Returns: @{ ChangeType = "minor"; Emoji = "🚀"; IsMajor = $false }
#>
param(
[Parameter(Mandatory = $true)]
[string]$OldVersion,
[Parameter(Mandatory = $true)]
[string]$NewVersion
)
$changeType = "unknown"
$emoji = "🔄"
$isMajor = $false
try {
# Handle versions with more than 4 parts and strip pre-release identifiers
$oldVerStr = $OldVersion.Split('-')[0]
$newVerStr = $NewVersion.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) for semantic versioning
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 -lt $oldVer) {
$changeType = "downgrade"
# Don't set emoji for downgrades in this function - caller handles it
} elseif ($newVer.Major -gt $oldVer.Major) {
$changeType = "major"
$emoji = "🔥"
$isMajor = $true
} elseif ($newVer.Minor -gt $oldVer.Minor) {
$changeType = "minor"
$emoji = "🚀"
} elseif ($newVer -gt $oldVer) {
$changeType = "patch"
$emoji = "⬆️"
} else {
# No version increase detected (versions are equal)
$changeType = "unknown"
$emoji = "🔄"
}
} else {
# Not enough numeric parts for semantic versioning
throw "Not enough numeric version parts"
}
} catch {
# If semantic versioning fails, return unknown
$changeType = "unknown"
$emoji = "🔄"
$isMajor = $false
}
return @{
ChangeType = $changeType
Emoji = $emoji
IsMajor = $isMajor
}
}
function Get-ArtifactDownloadUrl {
<#
.SYNOPSIS
Retrieves the download URL for a GitHub Actions artifact with retry logic.
.DESCRIPTION
Uses the GitHub CLI to fetch artifact information from the GitHub API with automatic retries.
Falls back to returning $null if all attempts fail.
.PARAMETER ArtifactName
The name of the artifact to retrieve the download URL for.
.PARAMETER Repository
The GitHub repository in the format "owner/repo".
.PARAMETER RunId
The GitHub Actions workflow run ID.
.PARAMETER MaxRetries
Maximum number of retry attempts. Default is 3.
.PARAMETER DelaySeconds
Delay in seconds between retry attempts. Default is 2.
.EXAMPLE
Get-ArtifactDownloadUrl -ArtifactName "cmder.zip" -Repository "cmderdev/cmder" -RunId "123456789"
.EXAMPLE
Get-ArtifactDownloadUrl -ArtifactName "build-output" -Repository "owner/repo" -RunId "987654321" -MaxRetries 5 -DelaySeconds 3
#>
param(
[Parameter(Mandatory = $true)]
[string]$ArtifactName,
[Parameter(Mandatory = $true)]
[string]$Repository,
[Parameter(Mandatory = $true)]
[string]$RunId,
[int]$MaxRetries = 3,
[int]$DelaySeconds = 2
)
for ($i = 0; $i -lt $MaxRetries; $i++) {
try {
# Use GitHub CLI to get artifact information
$artifactsJson = gh api "repos/$Repository/actions/runs/$RunId/artifacts" --jq ".artifacts[] | select(.name == `"$ArtifactName`")"
if ($artifactsJson) {
$artifact = $artifactsJson | ConvertFrom-Json
if ($artifact.id) {
# Construct browser-accessible GitHub Actions artifact download URL
# Format: https://github.com/owner/repo/actions/runs/{run_id}/artifacts/{artifact_id}
return "https://github.com/$Repository/actions/runs/$RunId/artifacts/$($artifact.id)"
}
}
} catch {
Write-Host "Attempt $($i + 1) failed to get artifact URL for $ArtifactName : $_"
}
if ($i -lt ($MaxRetries - 1)) {
Start-Sleep -Seconds $DelaySeconds
}
}
return $null
}

116
vendor/clink.lua vendored
View File

@@ -324,7 +324,7 @@ end
-- Find out current branch
-- @return {nil|git branch name}
---
local function get_git_branch(git_dir)
local function get_git_branch(git_dir, fast)
git_dir = git_dir or get_git_dir()
-- If git directory not found then we're probably outside of repo
@@ -341,8 +341,90 @@ local function get_git_branch(git_dir)
-- if HEAD matches branch expression, then we're on named branch
-- otherwise it is a detached commit
local branch_name = HEAD:match('ref: refs/heads/(.+)')
if os.getenv("CLINK_DEBUG_GIT_REFTABLE") then
branch_name = '.invalid'
end
return branch_name or 'HEAD detached at '..HEAD:sub(1, 7)
-- If the branch name is ".invalid" and the fast method wasn't requested,
-- then invoke git.exe to get accurate current branch info (slow method).
if branch_name == ".invalid" and not fast then
local file
branch_name = nil
-- Handle the most common case first.
if not branch_name then
file = io_popenyield("git --no-optional-locks branch 2>nul")
if file then
for line in file:lines() do
local b = line:match("^%*%s+(.*)")
if b then
b = b:match("^%((HEAD detached at .*)%)") or b
branch_name = b
break
end
end
file:close()
end
end
-- Handle the cases where "git branch" output is empty, but "git
-- branch --show-current" shows the branch name (e.g. a new repo).
if not branch_name then
file = io_popenyield("git --no-optional-locks branch --show-current 2>nul")
if file then
for line in file:lines() do -- luacheck: ignore 512
branch_name = line
break
end
file:close()
end
end
else
branch_name = branch_name or 'HEAD detached at '..HEAD:sub(1, 7)
end
return branch_name
end
local function get_git_remote(git_dir, branch)
if not git_dir then return nil end
if not branch then return nil end
local file = io.open(git_dir.."/config", 'r')
if not file then return nil end
local git_config = {}
local function get_git_config_value(section, param)
return git_config[section] and git_config[section][param] or nil
end
local section
for line in file:lines() do
if (line:sub(1,1) == "[" and line:sub(-1) == "]") then
if (line:sub(2,5) == "lfs ") then
section = nil -- skip LFS entries as there can be many and we never use them
else
section = line:sub(2,-2)
git_config[section] = git_config[section] or {}
end
elseif section then
local param, value = line:match('^%s-([%w|_]+)%s-=%s+(.+)$')
if (param and value ~= nil) then
git_config[section][param] = value
end
end
end
file:close()
local remote_to_push = get_git_config_value('branch "'..branch..'"', 'remote') or ''
local remote_ref = get_git_config_value('remote "'..remote_to_push..'"', 'push') or
get_git_config_value('push', 'default')
local text = remote_to_push
if remote_ref then text = text..'/'..remote_ref end
return text ~= '' and text or nil
end
---
@@ -394,7 +476,7 @@ end
-- Get the status and conflict status of working dir
-- @return {bool <status>, bool <is_conflict>}
---
local function get_git_status()
local function get_git_status(git_dir)
local file = io_popenyield("git --no-optional-locks status --porcelain 2>nul")
if not file then
return {}
@@ -416,7 +498,10 @@ local function get_git_status()
end
file:close()
return { status = is_status, conflict = conflict_found }
local branch = get_git_branch(git_dir, false--[[fast]])
local remote = get_git_remote(git_dir, branch)
return { status = is_status, branch = branch, remote = remote, conflict = conflict_found }
end
---
@@ -515,11 +600,11 @@ end
-- Use a prompt coroutine to get git status in the background.
-- Cache the info so we can reuse it next time to reduce flicker.
---
local function get_git_info_table()
local function get_git_info_table(git_dir)
local info = clink_promptcoroutine(function ()
-- Use git status if allowed.
local cmderGitStatusOptIn = get_git_status_setting()
return cmderGitStatusOptIn and get_git_status() or {}
return cmderGitStatusOptIn and get_git_status(git_dir) or {}
end)
if not info then
info = cached_info.git_info or {}
@@ -539,10 +624,11 @@ local function git_prompt_filter()
local git_dir = get_git_dir()
local color
if git_dir then
local branch = get_git_branch(git_dir)
local branch = get_git_branch(git_dir, true--[[fast]])
if branch then
-- If in a different repo or branch than last time, discard cached info.
if cached_info.git_dir ~= git_dir or cached_info.git_branch ~= branch then
if cached_info.git_dir ~= git_dir or
(branch ~= ".invalid" and cached_info.git_branch ~= branch) then
cached_info.git_info = nil
cached_info.git_dir = git_dir
cached_info.git_branch = branch
@@ -550,10 +636,22 @@ local function git_prompt_filter()
-- If we're inside of git repo then try to detect current branch
-- Has branch => therefore it is a git folder, now figure out status
local gitInfo = get_git_info_table()
local gitInfo = get_git_info_table(git_dir)
local gitStatus = gitInfo.status
local gitConflict = gitInfo.conflict
-- Compensate for git reftables.
branch = gitInfo.branch or branch
if branch == ".invalid" then
branch = "Loading..."
elseif gitInfo.remote then
branch = branch.." -> "..gitInfo.remote
end
-- Prevent an older clink-completions git_prompt.lua scripts from
-- modifying the prompt.
branch = "\x1b[10m"..branch
if gitStatus == nil then
color = get_unknown_color()
elseif gitStatus then

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
#
# 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
View File

@@ -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
View File

@@ -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"
}
]