Repeatr: Reproducible, hermetic Computation. Provision containers from Content-Addressable snapshots; run using familiar containers (e.g. runc); store outputs in Content-Addressable form too! JSON API; connect your own pipelines! (Or, use github.com/polydawn/stellar for pipelines!)
Releases for the Timeless Stack as a whole are now bundled together and released on the polydawn/timeless releases page: https://github.com/polydawn/timeless/releases/tag/release%2Fv0.200rc1
Portability and internal systems updates galore: v0.15 should quietly make things better. No major shakeups to formulas or APIs.
Have you seen the new projects in the ecosystem? Reppl brings pipelining tools to the table, so you can now compose complex build processes with multiple formulas easily. r2k8s demonstrates integrating Repeatr and Kubernetes, making it possible to run services in k8s, as well as use k8s clusters as resources for running builds. Repeatr might not be changing much in this release, but there's a lot of other stuff to play with!
Full list of changes:
runc
executor updated! Repeatr now references a runc release from the 1.0rc3+ region (build specified in a formula, and reproducible).overlay
is now supported as a COW filesystem! If your host has overlayfs, it will be used in preference to AUFS; then AUFS, then so on down the fallback tree as before.
repeatr unpack
now overwrites destination locations if they already exist, rather than erroring -- as documented.v0.14's most notable change is a whole new suite of integration opportunities: a JSON API to repeatr run
now allows you to handle logs, results, and job output clearly using external tools.
The git transmat has been massively upgraded, and now handles deduplication and submodules much, much better. The improvements should be huge for anyone using git, especially with slow remotes, large repos, or many submodules.
Full list of changes:
repeatr scan
is now known as repeatr pack
, because that's a much more accurate description of what it does.def
package and are easily serializable, with strongly-typed fields.repeatr//api/act/remote
, yes -- you will get ErrHashMismatch
and friends to use programmatically, complete with all of their detail fields.api/*
packages are now validated in CI. This helps us make sure we don't bloat the dependencies of the API packages accidentally.--serialize
flag to repeatr run
to enable this feature.repeatr//api/act/remote
package for a client implementation that can be easily imported into any other golang programs! Like the rest of the api
package, this has no direct dependencies on the rest of repeatr (e.g. you won't get container engines in your dependency tree; just API, as it should be).repeatr run
now has a --serialize
(or -s
) flag that serializes all output and writes it to stdout.repeatr unpack
now accepts a --skip-exists
flag, which will skip unpacking if the target path already exists. This does not check that the path matches the hash given to the unpack command; be careful when using this.repeatr unpack
now works atomically, using tempdirs (or tempfiles) in the target directory.repeatr unpack
on OSX! (As long as you don't ask for any data that can't be losslessly expressed on a mac -- namely, filesystems containing symlinks still error, because mtimes cannot be set with full precision.)repeatr unpack
command to get data that is a single file with no filesystem metadata.v0.13 is calm sailing: we have a variety of performance improvements, a few new config options, several logging improvements, and essentially no major shockers.
If parsing the output struct of repeatr run
, note the changes to format there. (We made things a great deal terser; also, "outputs" was renamed to "results".)
Full list of changes:
api/*
packages, so that these can be easily linked to help integrate other systems with repeatr.WarehouseUnavailableError
(instead of the more red-flaggy WarehouseIOError
), allowing other sources to be tried.action.hostname
parameter, going along with other environmental specifiers there. This will set the hostname (in execution engines that support this feature).api
interfaces.repeatr run
is a new structure, and less verbose again (it only speaks of results, and doesn't repeat the entire formula).repeatr twerk
can now accept several kinds of formula patches -- policy settings, env vars, etc.repeatr cfg
subcommand now exists to make your life easier: if you want yaml formulas transformed into easier-to-handle json, you got it.def/api
package no longer has an external dependency on an unusual error handling library. This should make it much easier to import in other go projects.The major highlights of v0.12 are some improved flexibility in commands (you can now apply "patches" to formulas for quick-n-easy configuration), and performance improvements (compression is finally enabled for most storage).
The default executor for repeatr run
is now the 'runc' system -- meaning fine-grained capabilities and security features from the Policy system introduced in v0.11 will now be impactful in the default modes.
Also, this is the first version of Repeatr built with the recently-released go 1.6! This should result in all-around performance improvements due to continuing upstream improvements to garbage collection (and some optimizations to sorting which will probably make a significant dent in our filesystem hashing as well).
Full list of notable changes:
repeatr run
now outputs the exit code in the structure it sends to stdout, so it can be mechanically extracted and clearly disambiguated from repeatr's own exit code.repeatr run
now accepts additional snippets of partial formulas with the -p
flag, and will patch them onto its main argument. This allows simple scripts to provide custom values to a run without needed to sprout a whole json/yaml parser. The fully patched values will appear in the formula emitted at the end of the run along with the output hashes, as you might expect. Use judiciously; this functionality makes sense in repeatr run
since one-off runs are its MO, but not all upcoming features will support this particular escape valve (in particular, pipelines certainly won't). Currently only env vars are merged.repeatr run
now accepts env vars with the -e
flag, and will patch them onto the formula. This is shorthand for doing the same with -p
.DataDNE
errors. Previously, this would be incorrectly reported as existing but corrupt data.repeatr run
now accepts the formula file as a positional argument (you can get rid of the -i
in all your scripts).repeatr run
is now 'runc' instead of 'chroot'. (You can continue to use the chroot executor by flagging --executor chroot
.)repeatr twerk
default image updated. As always, remember: you're not actually supposed to use this feature outside of experimentation and feel embarrassed if you do; changes are no-warning.This release of Repeatr includes the "Policy" system -- this is majorly exciting: for the first time, we have containers which drastically reduce the privilege of processes inside them by default. This is a major improvement to security for users, and hopefully the start of major improvements to the whole ecosystem, since safe operations are now the default operations. Of course, it's also a massively breaking change for any formulas that previously required powerful and unsafe system permissions -- they now have to admit it up-front! ;)
routine
, uidzero
, governor
, and sysad
. Routine is the default.cwd
that doesn't already exist, it will be automatically created and be writable./tmp
to exist and to be writable (specifically, it will be forced to chmod=01777; world-writable plus sticky bit, as a tempdir should be).$HOME
environment variable will now be assigned by default. The referenced directory will exist (and be writable, if cradle created it).action.cradle = false
in your formulas.A perfectly unremarkable v0.x release.
List of changes:
repeatr twerk
subcommand will now mount your current host directory into the container. Writably. Remember: this feature is for exploration and play; it is not the paragon of safe defaults.repeatr twerk
subcommand now exits non-zero/failure if the contained process itself exits non-zero/failure. This is consistent with the behavior of repeatr run
.