Rune

Scripts for builds and deployments that check before they run.

Rune is a script language for builds, tests and deployments. It replaces the bash and ksh scripts that such work tends to collect, with one way to do each thing and no shell in between. The whole script is checked before its first line runs, so a deployment does not stop halfway through because of an unknown name near its end.

Where to get it

This short script builds a Go tool only when its sources have changed, runs its tests and copies the result into dist/.

# Build the tool when its sources changed, test it, then copy it to dist/.
let version = "1.2.0"
let tool = join_path("build", "tool")
let shipped = join_path("dist", "tool-" + version)
if is_dir("build") == false { mkdir("build") }
make([tool], glob("src/**/*.go"), "release " + version, () => {
	$ go build -o {tool} ./src
})
$ go test ./src/... with timeout: 10m
if is_dir("dist") == false { mkdir("dist") }
copy_file(tool, shipped)
print("ready:", shipped)

Where to get it

On Windows, get Rune from the Microsoft Store, which adds the rune command to every terminal. On macOS, download the signed and notarised installer for Apple silicon from antisoftworks.com/rune. On Linux, install the .deb or Arch package, or unpack the tarball on a server, from antisoftworks.com/rune.

SHA256SUMS · Changelog

Rune is free to use, including commercially, and its source code is not published.

rune --llm prints the whole language as one short read, written for a language model to learn from, and rune --llm --json gives it as data. Every example in it runs as a test, so it stays right.

Rune also reports its own crashes, and rune report bug "what happened" sends a bug report in one command.