Repository navigation
Releases: enderkus/sadame
Releases · enderkus/sadame
Release list
sadame v0.5.1
Push mode checks sudo before it copies anything, and misspelled options
are reported on their own line everywhere.
Added
- A Japanese README,
README.ja.md; a test keeps its code and output the
same as the English one's.
Changed
- The README shows a real plan, many servers, how push mode works, every
command and resource, and where sadame stands. - The Docker, push and VM tests, and the docs' transcript capture, stop
before they start when a binary they need indist/is older than the
source, and name the task that rebuilds it.
Fixed
- With sudo, push mode checks that sudo works without a password before it
copies anything to a server, as the Remote hosts guide says. It used to
copy the binary first, then fail. - A misspelled option in a call that spans several lines is reported on
its own line byvalidate,plan,applyanddrift, as the language
server already did. The binary used to name the call's last line.
sadame v0.5.0
Editor support, and recipes shared between projects.
Added
sadame lsp, a language server: editors show whatvalidatefinds as
you type, on the right file and line, complete resources, options,
state:values and facts, describe them on hover, and list a recipe's
resources in the outline. A file a recipe includes is checked through
that recipe, for the hosts that include it. The Editor support guide
sets it up in Neovim, Helix and Emacs.- The Sharing recipes guide: recipes shared between projects as git
submodules, pinned and updated on purpose, with an example project. - The release binaries' smoke test runs
validate,facts,init,
reportand a language server session too, in every distribution image
and on macOS.
Fixed
- Push mode leaves every
.gitout of the recipe it copies to servers,
not only the top one, so a submodule's history stays behind. - The resource pages list the
tagsoption.
sadame v0.4.0
Checking recipes without servers, running part of a recipe, and reports
for CI.
Added
sadame validateevaluates the recipe for each selected host, with its
name, groups and vars, against a stand-in machine (--platform debian,
ubuntu,rocky,alpineorarch), renders its templates, and
connects to nothing.- Tags: resources take
tags:,include_recipe "roles/web", tags: [:web]
tags everything a file declares, and--tagsand--skip-tagsrun part
of a recipe withplan,applyanddrift. Reports list the tags used. sadame reportturns the--jsonoutput ofplan,applyanddrift
into Markdown for a CI summary page, or JUnit XML (--format junit) for
test reports.sadame initwrites a recipe,vars.rb,hosts.rband a template, and
with--ci githubor--ci gitlaba daily drift check.
Changed
- The CI examples put a drift summary on the GitHub Actions run page and a
JUnit report in GitLab; the pull request pipeline validates the recipe
before planning. - Example 08 tags each role.
sadame hostssays whenhosts.rbexists but declares no hosts.
sadame v0.3.0
Recipes can see the machine they run on.
Added
factsin recipes and templates:hostname,fqdn,arch,kernel,
cpus,memory_mb,swap_mb,root_disk_gb,ipv4,
default_interface,ipv4_addresses,ipv6_addresses,
virtualization,container,service_managerandmachine_id, read
on the machine when first asked for. What cannot be read is nil; an
unknown name is an error that lists the facts.sadame factsprints the facts of this machine, or with-h,-gor
--limitof each selected host over SSH;--jsonas well.
Changed
- Example 05 sizes PostgreSQL's
shared_buffersto a quarter of the
machine's memory unless vars set it.
sadame v0.2.0
Rolling changes across a fleet, four more resource types, and Alpine
services.
Added
--forks Nworks on at most N hosts at once.--serial Nor--serial N%runs the hosts in batches, one after
another, and stops after a batch in which a host failed or could not be
reached. The hosts of later batches are reported asskipped.- The
lineresource manages one line in a file that a package owns:
lines that matchmatch:are replaced, otherwise the line is appended.
verify:checks the edited file first, and plan shows the edit as a
diff of the file. - The
linkresource manages symbolic links;force: truereplaces a
regular file in the way. - The
groupresource manages local groups and their gid, with BusyBox's
addgroupanddelgroupon an Alpine withoutshadow. - The
gitresource keeps a checkout at a tag, a branch or a commit, and
moves it when the branch moves. Withuser:, git runs as that user. serviceworks with OpenRC, so on Alpine too.- Homebrew tap:
brew install enderkus/sadame/sadameinstalls the release
binary on macOS and Linux. - The docs' home page shows the navigation, the terminal recording and what
sets sadame apart, with buttons to get started and to star the project. - Links to the project on X, @sadame_rb, in the
docs' footer and the README.
Changed
- In push mode's JSON,
hosts[].exit_statusisnullfor hosts that
--serialskipped. - Example 05 sets PostgreSQL's
include_dirwithlineinstead of a
guardedexec, and the Ansible migration example translates
lineinfiletoline. - The Docker integration tests boot OpenRC in the Alpine containers, so
theserviceexamples run on Alpine too. - The terminal recording in the README and on the docs' home page has
larger, readable text.
Fixed
- The icons on the docs' home page cards were shown as text.
- Links in the docs' dark color scheme were blue instead of the brand pink.
sadame v0.1.0
The first release.
Added
sadame planandsadame applyfor the local machine, with a colored
unified diff, per-resource results,--jsonoutput and documented exit
statuses.- Resources:
package(apt, dnf, apk, pacman),file(content, template,
source, mode, owner, group),directory,service(systemd),exec
(creates,not_if,only_if,cwd,env) anduser. sadame drift: compares likeplanand exits 1 when the machine differs
from the recipe;--jsonfor CI. Exit statuses are documented per
command (0 success, 1 failure or drift, 2 usage, recipe or state-read
error).- Notifications:
notifies:andsubscribes:, delayed (once, at the end
ofapply) by default or:immediately;execwithaction: :nothing
for commands that only run when notified. - A summary table and the run time at the end of
apply. - Inventories:
hosts.rbwithgroup,host(address,user,
port,sudo,ssh_opts,vars),include:and groupvars;
command_outputfor dynamic inventories. Vars precedence:--var, host,
group (including over included),vars.rb. - Push mode:
-h [user@]host[:port],-g,--limit,--inventory,
--sudo. Sadame copies itself (cached by checksum under~/.sadame/bin/)
and the recipe with the system'sscp, runs overssh, all hosts in
parallel with prefixed output, and ends with a per-host summary or one
JSON document. sadame hosts: the selected hosts with their connection options and
vars, and where each var came from.host_nameandhost_groupsin recipes;--host-name,--host-groups
and--vars-filefor local runs.filechecks new content withverify:(such asvisudo -cf %{path})
before it replaces the target;servicemanages units of a user's
systemd instance withuser:;platform.codename.- Every command runs in the
C.UTF-8locale, so the output sadame reads
and guards that match text do not depend on the language of the target
or of the SSH session. - Examples 01 to 12, from a one-file hello to a hardened VPS, PostgreSQL,
Docker, a multi-role inventory and an Omarchy workstation, plus Ansible
and Itamae migration examples and CI pipelines for plan, apply and drift. - Docker integration tests: every example on Ubuntu, Debian, Rocky, Alpine
and Arch, on amd64 and arm64 (native runners in CI), in containers
booting systemd; certbot against Pebble. A local-only VM layer
(rake vm:test) on Ubuntu, Debian, Rocky, Arch and Omarchy VMs. - JSON report fields
drift,exit_status,duration_seconds, and the
notifications each resource triggers; documented in the JSON output
reference. - Recipe DSL with
include_recipe,varsfromvars.rband--var, and
platformfacts read from/etc/os-release. - An ERB-compatible template engine (
<%= %>,<% %>,<%# %>,-%>,
<%-,<%%). - mruby build (
rake build:native) and a test suite that runs on CRuby and
inside the mruby build. - Release binaries: static Linux builds for amd64 and arm64 (built with
musl in Docker) and macOS builds for Apple silicon and Intel, each about
1 MB. CI runs the Linux binaries unmodified in Ubuntu, Debian, Rocky,
Alpine and Arch images (Arch Linux ARM, a community image, for arm64),
each on a runner of its own architecture, before they can be published. install.sh: installs the right binary for the system after checking its
SHA-256 checksum.- Release workflow: a
v*tag publishes the binaries,SHA256SUMSand the
changelog section as a GitHub release. - A Homebrew formula and an AUR package (
sadame-bin) for the release
binaries, generated from the release's checksums. - Documentation at https://enderkus.github.io/sadame/: getting started,
concepts, recipes and the inventory, every resource, guides, command
line, JSON output and exit code references, and a comparison with
Ansible, Itamae, mitamae, Chef and Puppet.