Install and configure Scriptorium

This commit is contained in:
2026-09-09 14:36:55 +00:00
parent 2cd69a4b2e
commit 90d7f45eaa
11 changed files with 381 additions and 2 deletions

View File

@@ -1,3 +1,78 @@
# ansible-role-scriptorium
# Ansible Role: Scriptorium
Ansible role to install the Scriptorium application.
Installs and configures [Scriptorium](https://gitea.maximumdirect.net/eric/scriptorium)
from source on Ubuntu 26.04 (`x86_64` or `aarch64`). The role requires gathered
facts and uses privilege escalation only for dependency installation and
root-owned application state.
## Variables
```yaml
scriptorium_version: v0.13.0
scriptorium_repository_url: https://gitea.maximumdirect.net/eric/scriptorium.git
scriptorium_source_dir: /usr/local/src/scriptorium
scriptorium_binary_path: /usr/local/bin/scriptorium
scriptorium_manage_build_dependencies: true
scriptorium_go_snap_channel: 1.26/stable
scriptorium_go_binary: /snap/bin/go
scriptorium_config_path: /usr/local/etc/scriptorium/config.yml
scriptorium_prompt_dir: null
scriptorium_profile_dir: null
scriptorium_schema_dir: null
scriptorium_server_addr: null
scriptorium_server_artifact_root: null
scriptorium_server_max_request_bytes: null
scriptorium_server_max_artifact_bytes: null
scriptorium_server_max_response_bytes: null
scriptorium_defaults_render_format: null
scriptorium_backends: null
```
When `scriptorium_manage_build_dependencies` is `false`, Git and the executable
selected by `scriptorium_go_binary` must already be available. Otherwise, the
role installs Git with APT and the classic Go Snap from
`scriptorium_go_snap_channel`. It checks out `scriptorium_version`
authoritatively, builds `./cmd/scriptorium` directly to
`scriptorium_binary_path`, and rebuilds only when that checkout changes or the
binary is absent. The source tree is recursively owned by `root:root`; the
binary is `root:root` mode `0755`.
Every application configuration variable defaults to `null`, so it and any
empty parent section are omitted and Scriptorium retains ownership of its
built-in defaults. When no values are selected, the role writes `{}` to
`scriptorium_config_path` as `root:root` mode `0644`. Non-null falsey values
are retained. `scriptorium_backends` is the native mapping supplied by the
caller; the role does not merge or rewrite it. For example, inventory can
compose fragments in the ordinary way:
```yaml
scriptorium_backends: "{{ scriptorium_local_backends | combine(scriptorium_remote_backends) }}"
```
Backend entries may name a credential environment variable through
`api_key_env`; credential values themselves belong outside this role. The role
does not install prompt, profile, or schema content and does not manage a
service.
## Example
```yaml
- hosts: scriptorium_hosts
roles:
- role: ansible-role-scriptorium
```
## Validation
The repository-local integration suite installs its pinned collection, runs
syntax checking and production-profile lint, and applies the default role. It
uses an offline native profile inspection with the managed configuration, then
requires clean repeated convergence. It mutates only the managed source,
binary, configuration, and a private temporary directory, then restores the
default deployment during cleanup.
```sh
tests/integration
```
Ansible role to install the Scriptorium application.