Files
ansible-role-seriatim/README.md

5.4 KiB

Ansible Role: Seriatim

Installs the Seriatim transcript processor from source. The role supports Ubuntu 26.04 on amd64 and arm64 hosts and is independently usable outside the D&D pipeline role.

The role manages its build dependencies and a root-owned source checkout, builds a native static executable, validates it, and safely installs it.

Role source and issue tracking are hosted in the ansible-role-seriatim repository and its issue tracker.

Requirements

Ansible Core 2.18 or newer is required. Install the pinned collection dependency before using or validating the role:

ansible-galaxy collection install -r collections/requirements.yml

The consuming play must set become: true or provide equivalent root privileges. The role manages system packages, classic snaps, root-owned source and state directories, and the installed executable under /usr/local by default.

Variables

Variable Default Description
seriatim_version v1.5.0 Release identity expected from the installed binary.
seriatim_repository_url https://gitea.maximumdirect.net/eric/seriatim.git Source repository URL.
seriatim_source_ref {{ seriatim_version }} Git tag, branch, or commit to check out.
seriatim_build_version {{ seriatim_version }} Version injected into build metadata.
seriatim_source_dir /usr/local/src/seriatim Fully managed source checkout.
seriatim_binary_path /usr/local/bin/seriatim Installed executable path.
seriatim_build_state_dir /usr/local/src/seriatim.ansible-build-state Sidecar directory for build inputs and output state.
seriatim_manage_build_dependencies true Install Git and Go when enabled.
seriatim_go_snap_channel 1.26/stable Go Snap channel.
seriatim_go_binary /snap/bin/go Go executable used to inspect and build.
seriatim_go_build_flags [-trimpath] Ordered Go build arguments before -ldflags.
seriatim_go_ldflags -s -w -X gitea.maximumdirect.net/eric/seriatim/internal/buildinfo.Version={{ seriatim_build_version }} Linker flags passed as one argument.
seriatim_go_package ./cmd/seriatim Go package built from the checkout.

For development revisions, set both seriatim_source_ref and an honest seriatim_build_version. Released deployments should select immutable tags.

When seriatim_manage_build_dependencies is enabled, the role installs Git and converges the classic Go Snap to seriatim_go_snap_channel. When disabled, both Git and the configured Go executable must already be available, and Go must be version 1.25 or newer.

The checkout is authoritative: tracked changes and all untracked or ignored files beneath seriatim_source_dir are discarded during convergence. The repository URL may point to a private remote, but authentication must be provided independently through the managed host's Git configuration or SSH environment; this role does not manage credentials or accept unknown host keys.

Build and installation behavior

Builds run from the selected checkout with GOWORK=off, GOTOOLCHAIN=local, CGO_ENABLED=0, the configured ordered build flags, and the upstream version-injection linker flags. The resulting executable is staged and must report the exact configured version before it atomically replaces seriatim_binary_path. It is installed as root:root mode 0755.

The role records readable inputs, their SHA-256 fingerprint, and the installed binary checksum beneath seriatim_build_state_dir. A source commit, compiler identity, Go path, version, flags, linker flags, package, or fixed environment change triggers a rebuild. Missing or corrupt state, a modified binary, or an incorrect installed version also triggers rebuilding. Failed compilation or staged validation leaves the previous installed binary and successful state untouched.

For example, development from a branch must identify both source and output:

seriatim_source_ref: feature/example
seriatim_build_version: v1.5.0-dev

Static validation

ANSIBLE_COLLECTIONS_PATH="$PWD/.ansible/collections" \
  ../.venv/bin/ansible-playbook -i tests/inventory tests/converge.yml \
  --syntax-check
ANSIBLE_COLLECTIONS_PATH="$PWD/.ansible/collections" \
  ../.venv/bin/ansible-lint .

Development and integration validation

Create the workspace virtual environment described by the control repository and run the complete local suite from this repository with:

tests/integration

The driver installs the pinned collection into the ignored local .ansible directory, runs static checks, and then mutates the local host using privilege escalation. It manages /usr/local/src/seriatim, /usr/local/src/seriatim.ansible-build-state, and /usr/local/bin/seriatim; do not run it where those paths contain data that must be preserved. It verifies convergence, idempotence, platform guards, authoritative source cleanup, compiler-version invalidation, and preservation of a working installation after a failed build.

The driver uses temporary Go wrappers and removes them on exit. It attempts to restore the default role state after a failure. Recovery consists only of rerunning tests/integration or the default tests/converge.yml; no manual deletion of managed paths is required.

License

BSD-3-Clause