✨ Highlights
This release contains changes that may be considered breaking. Manifest authors should review:
checkverGitHub mode requires explicitgithub:key (#6641): manifests usingurl:with a GitHub URL forcheckvermust switch togithub:to opt into the GitHub token path. Token usage is now scoped to explicitgithubmode only.checkverGitHub mode defaults changed (#6653): new defaultjsonpath/regexfor GitHub-based version checks.checkver.scriptbehavior is affected — verify scripts still resolve the expected version.install.json/manifest.jsonrenamed toscoop-install.json/scoop-manifest.json(#6732): Scoop no longer overwrites app-shippedmanifest.json/install.jsonfiles. New installs write the prefixed names; readers fall back to the old names for existing installs.
This release also introduces a notable improvement to version-specific installs:
- Get the versioned manifest from git history (#6370): Version-specific installs now use a layered manifest lookup: when installing
app@version, Scoop first searches the SQLite cache ifuse_sqlite_cacheis enabled (disabled by default), then searches the bucket's Git history ifuse_git_historyis enabled (enabled by default), and finally falls back to auto-generating the requested manifest whenautoupdateis available.
Changelog
Features
- scoop-uninstall: Allow access to
$bucketin uninstall scripts (#6380) - checkver: Set GitHub mode default jsonpath and regex (#6653)
- download: Enhance Get-GitHubToken to include more token sources (#6712)
- download|scoop-download: Add GitHub issue prompt when the default downloader fails (#6539)
- download|scoop-config: Allow disabling automatic fallback to the default downloader when Aria2c download fails (#6538, #6744)
- install: Add support for historical manifests by git history (#6370)
- install: Add output for the setting and removal of environment variables (#6460)
- install: Add separator at the end of notes, highlight suggestions (#6418)
Bug Fixes
- scoop-download: Fix function
nightly_versionnot defined error (#6386) - scoop-download: Fix incorrect download success state (#6473)
- scoop-download: Exit with non-zero status when downloads fail (#6739)
- scoop-export: Make exported JSON key order deterministic (#6697)
- scoop-import: Import
database.ps1anddownload.ps1at startup (#6743, #6747) - scoop-search: Improve error handling for manifest file parsing (#6348)
- scoop-search: Select latest search result semantically (#6643)
- scoop-uninstall: Correct
-GlobalSwitch (#6454) - scoop-update: Import
versions.ps1in the parallel bucket sync to fixcurrentdirfailing withNO_JUNCTIONenabled (#6735) - scoop-update: Fix updating apps installed from a local manifest path (#6736)
- scoop-update:
scoop update -fon an@versionpin now upgrades to the bucket HEAD (#6730) - scoop-update: Detect version pins by generated manifest only (#6739)
- scoop-update: Force sync tags w/ remote branch while scoop update (#6439)
- scoop-version: Fix logic error caused by missing brackets (#6463)
- auto-pr: Rebase before pushing to prevent push conflicts (#6624)
- autoupdate: Use origin URL to handle URLs with fragment in GitHub mode (#6455)
- autoupdate: Ensure GitHub API requests use token (#6535)
- autoupdate|download: Require HTTPS before sending GitHub token (#6739)
- buckets: Skip Git invocation if unavailable in
new_issue_msg(#6591) - buckets: Fix the filtering condition when retrieving the number of manifests (#6509)
- buckets|scoop-info: Switch git log date format to ISO 8601 to avoid locale issues (#6446)
- checkver: Allow script to run when URL fetch fails but script exists (#6490, #6556)
- checkver: Fix incorrect version returned when script fails without output (#6547)
- checkver: Remove redundant always-true condition in GitHub checkver logic (#6571)
- checkver: Harden github checkver (#6641)
- checkver: Skip default GitHub JSONPath when using custom script (#6692)
- core: Fix the grep parameter in the
Invoke-GitLogfunction (#6407) - core: Add null checks before closing BinaryReader/FileStream in update process (#6507, #6711)
- core: Skip NO_JUNCTION logic when $app is 'scoop' in
currentdirfunction (#6541) - core: Fix substitute handling of substring keys (#6561)
- core: Check
$deprecated_direxists before accessing it (#6574) - core: Give
darkhigher priority when useExtract-DarkArchive(#6637) - core: Resolve paths in
is_in_dirto prevent containment escape (#6739) - core: Fix currentdir crash when NO_JUNCTION is enabled (#6741)
- core|manifest: Avoid error messages when searching non-existent 'deprecated' directory (#6471)
- database: Preserve
DataTablewhen returned from SQLite cache queries (#6739) - download: Redact proxy password and cookie header from aria2 diagnostics (#6739)
- getopt: Teach getopt to respect the
--%token (#6477) - install: Don't add to
$Errorwhen checking for servicecexecsvc(#6520) - path: Trim ending slash when initializing paths (#6501)
- schema: Add missing
hash.modevaluegithub(#6534) - shim: Rewrite system paths to avoid WoW64 redirection (#6620)
- uninstall: Import
url_filenamefromdownload.ps1(#6530)
Code Refactoring
- scoop-list: Use simpler method to check the deprecated status of the manifest to improve performance (#6599)
- install: Get reference for Users group via Principal.WellKnownSidType (#6278)
- install: Use
scoop-prefix forinstall.jsonandmanifest.json(#6732) - output: Replace raw prints with functions for standardized output (#6449)
- output: Combine the separated outputs into a single output (#6545)
Performance Improvements
- scoop-search: Skip JSON parse when query absent from file (#6284)
Builds
- supporting: Update System.Data.SQLite to 2.0.2 (#6555, #6560)
- supporting: Update Newtonsoft.Json to 13.0.4 (#6731)
Continuous Integration
- dependabot: Target
developand refine update settings (#6751) - workflow: Drop Appveyor support and refactor GitHub Actions workflow (#6626)
- workflow: Disable persisted checkout credentials (#6739)
- workflow: Update
actions/checkoutto 7.0.1 andpotatoqualitee/psmodulecacheto 6.3 (#6753) - workflow: Publish releases from
CHANGELOG.mdon tag push (#6759, #6760)
Documentation
- README: Remove Gitter badge (#6640)
- bucket: Transfer
gamesbucket to ScoopInstaller (#6746) - bucket: Transfer
sysinternalsbucket to ScoopInstaller (#6738) - typo: Correct misspellings in comments and docs (#6191)
Tests
- bucket: Compatible with Pester v6 (#6724)
- bucket: Limit validation to bucket manifests (#6756)
- file: Exempt YAML files from CRLF lint check (#6758)
Close Issues
- Closes #3894
- Closes #5466
- Closes #5704
- Closes #5862
- Closes #6194
- Closes #6274
- Closes #6277
- Closes #6345
- Closes #6379
- Closes #6385
- Closes #6406
- Closes #6413
- Closes #6417
- Closes #6419
- Closes #6425
- Closes #6429
- Closes #6438
- Closes #6450
- Closes #6452
- Closes #6457
- Closes #6459
- Closes #6467
- Closes #6476
- Closes #6480
- Closes #6485
- Closes #6506
- Closes #6508
- Closes #6514
- Closes #6519
- Closes #6533
- Closes #6544
- Closes #6573
- Closes #6598
- Closes #6607
- Closes #6619
- Closes #6623
- Closes #6681
- Closes #6713
- Closes #6714
- Closes #6723
- Closes #6733
- Closes #6734
- Closes #6740
- Closes #6742
Credits
Thanks to the following contributors (ordered by PR merging time):
@niheaven @AkariiinMKII @HUMORCE @z-Fng @abgox @xrgzs @refack @o-l-a-v @chawyehsu @mertemr @deevus @B67687 @lisonge @Lutra-Fs @somls @silver886 @NathanBaulch @FrostyZombi3 @shauneccles @massimomazzariol