Releases: haribo/shellf
Releases · haribo/shellf
Release list
v0.3.1
v0.3.0
Added
- Action-shaped defs can declare a
previewphase — read-only,--checkonly — that
describes what apply would do, rendered as a distinctpreview ▸block that never
reads as a convergence claim (ADR-0029).docker.compose-upuses it to show the
per-service recreate/start plan (docker compose up --dry-run); best-effort, so an
old Compose or an unreachable daemon degrades to a plainwould.up. dir-copy(src, dst): deliver a control-host file tree to the target verbatim
and binary-safe — HTML and images alike, byte-for-byte, idempotent per file
(ADR-0028). Resolved control-side into per-filefile-putsteps; refuses a tree
over 32 MB with a clear error.- Local transport: a host with
local: "true"in the inventory is provisioned on
the control host itself (agent run as a subprocess), no SSH — same agent, plan,
and reports as a remote target (ADR-0027). archive-extract-member(src, dst, member): extract a single file from a tarball
todst(content-hash idempotent) — compose withfile-download+file-modeto
install a binary from a release tarball without a rawshellescape.
Fixed
- Report labels now show
name=valuefor each argument (file-mode(mode=755, path=…)) instead of bare values in key order, which read as swapped. archive-extractre-extracts when the archive atsrcchanges, instead of
skipping because the destination is non-empty. Convergence is now decided by the
archive's sha256, recorded in a.shellf-archive-sha256sentinel underdst.
v0.2.2
Fixed
- Capturing a
templateresult now works:s = template(src, dst)then
if s.changed { … }resolves instead of halting witherr.undefinedResult.
v0.2.1
Fixed
- Run transport commands under
/bin/shregardless of the target's login shell, so
a non-POSIX login shell (nushell, fish) no longer breaks the agent bootstrap.
v0.2.0
Added
- SSH authentication via the ssh-agent (
SSH_AUTH_SOCK): the private key never
leaves the agent, and an encrypted key works. The inventorykey:is now an
optional override, tried before the agent (ADR-0026).
Changed
key:is no longer required in the inventory; authentication falls back to the
ssh-agent when it is absent.
Fixed
- Expand
~in the inventorykey:path (and--known-hosts), so the documented
~/.ssh/…examples connect instead of failing withread key: no such file.
v0.1.0
First tagged release. shellf provisions targets over SSH via a detached resident
agent that evaluates on the host — "raw shell, but idempotent, previewable, fast."
Added
- Language: lexer, parser, and evaluator with the
observe/apply/statusdef
contract,if/else, error handling (?), parse-timeforloops, and
with { }per-call variable overrides. - Idempotent execution with a
--checkpreview and astatusmode that reports
current-vs-desired state per host. - Templating:
template(src, dst)with the@{var}delimiter, rendered per host
over inventory variables. - Secrets:
--secret-file/--secret-envwith value-based redaction in all
output, and a tmpfs workdir that keeps plaintext off the target's persistent disk. - Modules: directory-package user defs, local imports, and hash-verified remote git
modules withshellf.lockand a content-addressed cache. - Embedded, self-hosted standard library: apt, docker/compose, systemd, ufw, files,
users, git-sync, http-check, and more. - SSH transport with a resident agent (inactivity TTL), host-key verification, and
per-user agent/workdir scoping. - Commands:
run,status,clean, andversion.