Skip to content

Releases: haribo/shellf

v0.3.1

Choose a tag to compare

@github-actions github-actions released this 07 Aug 13:16
893646d

Fixed

  • Absolute src paths in dir-copy and template are honored (used as-is) instead
    of being silently joined onto the plan directory (#281).

v0.3.0

Choose a tag to compare

@github-actions github-actions released this 07 Aug 12:24
23b959c

Added

  • Action-shaped defs can declare a preview phase — read-only, --check only — that
    describes what apply would do, rendered as a distinct preview ▸ block that never
    reads as a convergence claim (ADR-0029). docker.compose-up uses 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 plain would.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-file file-put steps; 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
    to dst (content-hash idempotent) — compose with file-download + file-mode to
    install a binary from a release tarball without a raw shell escape.

Fixed

  • Report labels now show name=value for each argument (file-mode(mode=755, path=…)) instead of bare values in key order, which read as swapped.
  • archive-extract re-extracts when the archive at src changes, instead of
    skipping because the destination is non-empty. Convergence is now decided by the
    archive's sha256, recorded in a .shellf-archive-sha256 sentinel under dst.

v0.2.2

Choose a tag to compare

@github-actions github-actions released this 04 Aug 15:36
ca9921b

Fixed

  • Capturing a template result now works: s = template(src, dst) then
    if s.changed { … } resolves instead of halting with err.undefinedResult.

v0.2.1

Choose a tag to compare

@github-actions github-actions released this 04 Aug 14:26
3b9d822

Fixed

  • Run transport commands under /bin/sh regardless of the target's login shell, so
    a non-POSIX login shell (nushell, fish) no longer breaks the agent bootstrap.

v0.2.0

Choose a tag to compare

@github-actions github-actions released this 04 Aug 12:39
c854142

Added

  • SSH authentication via the ssh-agent (SSH_AUTH_SOCK): the private key never
    leaves the agent, and an encrypted key works. The inventory key: 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 inventory key: path (and --known-hosts), so the documented
    ~/.ssh/… examples connect instead of failing with read key: no such file.

v0.1.0

Choose a tag to compare

@github-actions github-actions released this 04 Aug 07:30
d5190c0

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/status def
    contract, if/else, error handling (?), parse-time for loops, and
    with { } per-call variable overrides.
  • Idempotent execution with a --check preview and a status mode 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-env with 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 with shellf.lock and 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, and version.