Repository navigation
Releases: nidara-duo/rake
Releases · nidara-duo/rake
Release list
v0.1.4-alpha.2
A development build. As with 0.1.4-alpha.1, install <app> and update <app>
are still open; this release does not claim otherwise. It sorts above 0.1.4-alpha.1
and below 0.1.4.
Changed
rake statuscolumn headings are nowName,Installed,Latest,
Missing DepsandInfo. This reverses an earlier change that matched Scoop's
headings word for word — the extra words were noise in a table this narrow.
Reported values remain Scoop-compatible.- Command names in
rake statusoutput are shown in bold instead of wrapped in
backticks, which a terminal prints verbatim. - Packages, buckets and the cache now always live in Scoop's directory layout
(~/scoop, or$SCOOPwhen set). Rake previously fell back to a~/rake
directory when Scoop was not installed, which split the two tools into separate
package trees. Sharing one layout means installing Scoop later finds the packages
already there rather than starting empty. - Rake reads the same settings file Scoop writes:
%USERPROFILE%\.config\scoop\ config.json, or%XDG_CONFIG_HOME%when that is set. It previously looked only
at<root>/config.json, which is the portable-install case, so on a normal
machine the file was never found and settings such as the chosen shim were
silently ignored.$SCOOP_CACHEis now honoured too, matching Scoop's
precedence for the cache directory.
Added
rake self update --pre-release(also onrake self install) takes the newest
pre-release when one is newer than the newest finished release, and nothing else.
A tag carrying a-counts as a pre-release, and so does one GitHub marks as
such — either signal is enough, because the two can disagree and the version is
what the ordering is actually computed from.1.0.0+linuxis not a pre-release:
build metadata does not make one.rake self updatenames the version it installs, and says which pre-release is
being held back rather than reporting a flat "already up to date".scripts/bootstrap.ps1takes-Prereleaseand-Version, so the very first
install can choose which release it takes. It had no way to: the endpoint it
used never returns pre-releases. A dash in the tag is treated as the signal,
rather than GitHub'sprereleaseflag, because that flag is written once when
the release is created andv0.1.4-alpha.1predates the workflow setting it.- Dot-sourcing
bootstrap.ps1now only defines its functions. Installing happened
as a side effect, so anything that loaded the script for its helpers installed
Rake as well. rake settings— get, set and reset user preferences, stored in
~/.config/rake/settings.json. Deliberately a separate file from Scoop's
config.json, whoseset_configrewrites the whole document and would drop
anything stored there.rake settingslists every setting with its value and
default, marking the ones you changed;settings editopens the file in
$EDITORand validates what you wrote.status.offline_by_default(defaulttrue) — runstatuswithout touching
the network unless askedstatus.hide_offline_note(defaultfalse) — suppress the note explaining
that the bucket verdict came from the last fetch, without typing-q
rake statusflags now resolve as flag → setting → built-in default, so an
explicit flag always overrides the file.-l -Ctogether is now reported as
contradictory rather than silently resolved.- An unreadable entry in the settings file no longer costs you the whole file. The
document is read key by key: the broken entry falls back to the built-in default,
the readable ones still apply, and each substitution is reported — on stderr for
every command, since a quietly replaced default looks exactly like a preference
that did nothing. A file that is not valid JSON costs every setting and is
reported with its line and column.rake settings editvalidates what you saved
and exits non-zero if part of it is unusable. rake status --quiet(-q) suppresses informational notes. Warnings and
errors are unaffected, so an out-of-date or uncheckable bucket is still
reported.
Fixed
- The bootstrap no longer closes the caller's terminal. The documented one-liner ran
the script throughpowershell -Command, and inside that scope fiveexit 1calls
ended the user's shell instead of printing why — a refused install, or a checksum
mismatch, took the window down with it and printed nothing. Those exits are now
exceptions that reach the caller;powershell -Commandstill returns 1, so
$LASTEXITCODEchecks keep working. The one-liner also no longer leaks eight
helper functions and a$Sourcevariable into the session. rake self updateno longer downgrades. It asked GitHub for the newest finished
release, so anyone who had installed a pre-release was silently moved back to the
previous version on their next update — a pre-release is newer than anything that
endpoint will ever return. It now takes the maximum by version across the
published releases and refuses to install anything older than what is running.
A finished release supersedes the pre-release it followed, as usual.- A download that returned an HTTP error no longer wrote the error page into the cache
under the archive's name and reported success. A dead mirror is routine, and the
corruption used to surface much later as a broken archive. - The final download progress event is no longer dropped when the event bus is full. It
is the event carryingdownloaded == total, which is what ends the progress display,
so a busy channel left the bar spinning on a download that had actually finished. rake bucket addandrake bucket removereject a bucket name containing..or an
absolute path. The name was joined onto<root>/bucketsunconstrained, so
rake bucket remove ..\appswould have removed an arbitrary directory.rake updateno longer prints "Everything is up to date!" when it just failed. It
did so unconditionally, after the progress display had already shown the failures.rake updatereports what happened to each bucket as plain lines. The results were
delivered only through the progress display, which hides itself entirely when the
output is not a terminal — so redirecting the command or piping it to a file produced
no bucket names and no failures at all.- Buckets that
rake updatedeclines to fetch are now named. A held bucket or a
directory that is not a git repository used to be skipped with no message, so the
command reported success over a tree it had deliberately left stale. A held bucket
also says how to release it. rake updateexits non-zero when a bucket fails, so a script running it notices.rake cache rmno longer reports files it failed to delete. The count was taken
before anything was removed, so a cache file held open by another process was still
announced as removed.- Cache sidecar
.txtfiles are no longer listed or counted as cache entries of their
own. Their names contain#, so they parsed as entries and every archive with a
sidecar was reported twice. rake self updateno longer silently loses the previous binary when a failed
update cannot be rolled back. The old executable is reported at the temporary path
it is still sitting at, instead of the error being discarded.rake checkupno longer reports the Windows Defender exclusion check as passing
when it could not be performed. Two separate problems combined: the exclusion
query answered "excluded" whenever PowerShell could not be started or its own
catchfired, and the service query answered "Defender is not running" in the
same situation, which short-circuited the check to OK before it even ran. Both
now distinguish "no" from "could not tell", and an unanswered check is reported
as such.- JSON files carrying a UTF-8 byte order mark are now read correctly. This
affected bucket manifests, installed manifests and the settings file: the file
was discarded and the app simply did not appear, while Scoop — which strips the
mark — carried on working. Windows tooling writes one readily. - Installing over an existing install no longer fails with
AlreadyExistswhen
the new version ships its own copy of a persisted directory. Scoop keeps that
copy as<name>.originalnext to the app; Rake now does the same, so the
shipped defaults stay recoverable instead of colliding with the junction. rake cleanupandrake uninstallno longer report success for files they
could not delete. An app still running from the old version made both discard
the error and print a success line while the directory was still on disk. Both
now stop at the failure and say what could not be removed and why, as Scoop does.rake cleanup -kno longer deletes the cached download for the version you are
running. It emptied the whole cache; Scoop keeps the current version's entry and
removes only stale mirrors and interrupted.downloadfiles.-kis also now
scoped to the apps actually being cleaned rather than hitting every app.- A shortcut's
targetis validated, not only itsname. A..in the target
let a manifest point a Start Menu shortcut at any file on the disk. persistentries can no longer name a path outsideapps/andpersist/. A
..in either half of a manifest'spersistfield created a junction, or moved
your data, elsewhere on the disk.- Manifest values interpolated into generated PowerShell are escaped. An app name
containing"closed the string in the.ps1shim and turned the rest of the
name into code, which ran every time the shim was invoked. env_add_pathentries containing..are refused. They passed a check that
compared path strings, so an entry like..\..\..\..\Startupwas accepted and
resolved toC:\Startup— a PATH entry that persists after uninstall.
Internal
- 230 new tests...
v0.1.4-alpha.1
A development build: the features below are in, but install <app> and
update <app> are still open and this release does not claim otherwise. It
sorts above 0.1.3 and below a future 0.1.4.
Added
rake statusreportsInstall failed,Manifest removedandDeprecated,
matching the flagsscoop statusalready prints. An app whose manifest moved
to<bucket>/deprecated/is now distinguished from one whose manifest is
gone entirely.rake status --check-bucketsfetches every bucket before judging it, so the
verdict is against upstream. The fetch is reused by a laterrake update
instead of being repeated.- Manifest
installer.scripthooks now run. They are not standalone
PowerShell — they call Scoop's own functions, which only resolve when
Scoop's library is loaded — so Rake vendors it and dot-sources it for that
one hook. Other hooks keep running standalone.
Changed
rake statusis offline by default. It compares each bucket against the state
left by the last fetch and says so in its output, so a stale bucket is never
mistaken for a current one.rake listandrake statusnow agree withscoop list: apps installed by a
recent Scoop are no longer missing. Scoop renamed its per-version metadata
files toscoop-install.json/scoop-manifest.json; Rake reads both
spellings and writes both, so old and new Scoop can each read what Rake
installs.rake inforenders manifestnotesas a single field and substitutes
$dir/$original_dir/$persist_dir, as Scoop does.rake statusmatches Scoop's wording and column layout:Installed Version,
Latest Version,Missing Dependencies,Info, with empty cells rather
than placeholders.
Fixed
rake updateno longer breaksscoop update. It left every bucket in
detached HEAD, and Scoop'sgit pullthen failed with "You are not currently
on a branch" — silently, since Scoop carries on past the error and still
reports success. Buckets are shared between the two tools, so they now stay
on a branch, and a bucket an older build already detached is repaired.- An installed app whose manifest is missing or corrupt no longer disappears
fromlistandstatus; its version falls back to thecurrentjunction
target. rake statusno longer reports a bucket as current when it could not check
it. Failed checks are surfaced instead of being folded into "all fine".
Performance
rake statusruns offline in ~40 ms on this machine, against ~5.9 s for
scoop status(~1.2 s forscoop status -l). Bucket freshness is read from
local git refs rather than asking each remote.
v0.1.3
v0.1.2
v0.1.1
revert(ci): restore original workflow files (Windows-only)