Structure your Guile scripts Automate all the things https://docs.cbaines.net/guile-automate/
  • Scheme 77.2%
  • Tree-sitter Query 20.2%
  • CSS 1.1%
  • JavaScript 0.7%
  • Makefile 0.5%
  • Other 0.2%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Christopher Baines fb87fb8b42
All checks were successful
automate/trunk The package builds, its tests pass and the code is formatted
Provide a more direct mechanism of using the pipeline shepherd
2026-11-08 08:50:30 +00:00
.automate Stop making the pipelines.scm files directly lowerable 2026-11-07 20:43:03 +00:00
automate Provide a more direct mechanism of using the pipeline shepherd 2026-11-08 08:50:30 +00:00
bin Initial commit 2026-09-27 10:40:24 +01:00
build-aux Replace parts of the automate pipelines with the Guix package 2026-10-15 16:34:39 +01:00
channel/guile-automate Add a lower-definition helper 2026-10-09 20:07:19 +01:00
doc Provide a more direct mechanism of using the pipeline shepherd 2026-11-08 08:50:30 +00:00
examples Provide a more direct mechanism of using the pipeline shepherd 2026-11-08 08:50:30 +00:00
tests Provide a more direct mechanism of using the pipeline shepherd 2026-11-08 08:50:30 +00:00
.dir-locals.el Add missing .dir-locals.el line 2026-10-15 16:10:38 +01:00
.envrc Initial commit 2026-09-27 10:40:24 +01:00
.gitignore Replace parts of the automate pipelines with the Guix package 2026-10-15 16:34:39 +01:00
.guix-channel Add a lower-definition helper 2026-10-09 20:07:19 +01:00
automate.scm Stop making the pipelines.scm files directly lowerable 2026-11-07 20:43:03 +00:00
bootstrap.sh Initial commit 2026-09-27 10:40:24 +01:00
CLAUDE.md Provide a more direct mechanism of using the pipeline shepherd 2026-11-08 08:50:30 +00:00
configure.ac Initial commit 2026-09-27 10:40:24 +01:00
COPYING Initial commit 2026-09-27 10:40:24 +01:00
DESIGN.md Provide a more direct mechanism of using the pipeline shepherd 2026-11-08 08:50:30 +00:00
guile.am Initial commit 2026-09-27 10:40:24 +01:00
guix.scm Provide a more direct mechanism of using the pipeline shepherd 2026-11-08 08:50:30 +00:00
Makefile.am Provide a more direct mechanism of using the pipeline shepherd 2026-11-08 08:50:30 +00:00
manifest.scm Replace parts of the automate pipelines with the Guix package 2026-10-15 16:34:39 +01:00
NEWS Remove the verbose NEWS entries 2026-10-16 14:52:38 +01:00
pre-inst-env.in Initial commit 2026-09-27 10:40:24 +01:00
README.md Link to the announcement blog post from the README 2026-10-31 15:19:10 +00:00
STYLE.md Improve docstrings 2026-11-02 14:08:25 +00:00

Guile Automate

Build and run pipelines written in GNU Guile using GNU Guix and Spritely Goblins.

At the moment, Guile Automate is a prototype. Everything is currently unstable and open to breaking changes. It was written with the help of Claude Opus and Claude Fable via Claude Code. See the announcement blog post here https://www.cbaines.net/posts/announcing_guile_automate/.

The manual, for whoever writes or runs pipelines, is at https://docs.cbaines.net/guile-automate/; it is built from doc/ by make -C doc index.html. The design, for whoever changes Automate, is DESIGN.md, and code follows STYLE.md. Automate's own pipelines are under .automate/.

Trying it

Automate runs on Linux, and needs GNU Guix on every machine that builds or runs a pipeline, since each step is a program in the store. Steps are confined in Linux namespaces, so the kernel has to let an unprivileged process create them; where it does not, --unconfined runs steps as ordinary processes. A step that builds with Guix while it runs also needs a guix-daemon.

Start with examples/hello.scm: a two-step pipeline with a workspace, a secret, a limiter and a parameter, whose header says how to build and run it. The manual's Getting Started section walks through the same kind of file.

Reporting bugs

Report bugs and suggest changes in the issue tracker at https://forge.cbaines.net/cbaines/guile-automate/issues. Since Automate is a prototype, open an issue to discuss a larger change before writing it.

Developing

guix shell -D -f guix.scm -- guile -L . tests/run.scm
guix shell -D -f guix.scm -- guile tests/integration/lowering.scm

Or with Autotools, which compiles the modules and can install them:

guix shell -D -f guix.scm
./bootstrap.sh && ./configure && make
make check              # the suites, one per file
make check-integration  # tests/integration/, needs a guix-daemon
make install            # puts the automate command on the path

The dependencies are declared in guix.scm, so that is the file to hand guix shell: it caches the profile against the mtime of the file it is given and reads nothing that file loads, so a profile cached against manifest.scm, which loads guix.scm, goes on being used after a dependency changes. manifest.scm adds Emacs and bash to the same inputs, for make format and for Automate's own pipelines, which build it afresh on every run:

guix shell -m manifest.scm -- make format

guix build -f guix.scm runs the same Autotools build, tests included, and the package it makes carries the modules, the automate command and the manual. The repository is also a Guix channel providing it as guile-automate, for a Guix that has pulled it to build Automate by name: a pipeline that lowers other pipelines' definitions with lower-definition builds the package of the Guix its guix-channels resource captured, until the package is in Guix itself. Automate's own pipelines build it to check a commit and publish its manual.

Copying

Guile Automate is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. See COPYING.