{"id":13903250,"url":"https://github.com/polydawn/repeatr","last_synced_at":"2026-02-22T19:34:00.707Z","repository":{"id":27939952,"uuid":"31432509","full_name":"polydawn/repeatr","owner":"polydawn","description":"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!)","archived":false,"fork":false,"pushed_at":"2020-03-27T09:55:58.000Z","size":8314,"stargazers_count":68,"open_issues_count":5,"forks_count":5,"subscribers_count":10,"default_branch":"master","last_synced_at":"2024-08-07T22:37:08.515Z","etag":null,"topics":["containers","distributed","formula","reproducibility","reproducible-builds","snapshots","timeless","timeless-stack"],"latest_commit_sha":null,"homepage":"https://repeatr.io","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/polydawn.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-02-27T18:12:08.000Z","updated_at":"2024-01-13T23:53:26.000Z","dependencies_parsed_at":"2022-08-20T07:00:14.527Z","dependency_job_id":null,"html_url":"https://github.com/polydawn/repeatr","commit_stats":null,"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/polydawn%2Frepeatr","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/polydawn%2Frepeatr/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/polydawn%2Frepeatr/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/polydawn%2Frepeatr/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/polydawn","download_url":"https://codeload.github.com/polydawn/repeatr/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":226320974,"owners_count":17606386,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["containers","distributed","formula","reproducibility","reproducible-builds","snapshots","timeless","timeless-stack"],"created_at":"2024-08-06T22:01:55.168Z","updated_at":"2026-02-22T19:33:55.675Z","avatar_url":"https://github.com/polydawn.png","language":"Go","funding_links":[],"categories":["containers"],"sub_categories":[],"readme":"Repeatr\n=======\n\n```\nrepeatr run same_thing_in \u003e same_thing_out\n```\n\nRepeatr is a tool for running processes repeatedly.  Repeatr is designed to make task definition precise, environment setup portable, and results reproducible.\n\nSome of Repeatr's key features and goals include:\n\n- *Zero-ambiguity environment*: Repeatr is developed on the principle of \"precise-by-default\".  All files in your environment are managed by content-addressible storage (think: pinned as if by a git commit hash).\n- *Deep-time reproducibility*: Repeatr represents a commitment to reproducible results today, tomorrow, next week, next year, and... you get the picture.  Repeatr configuration explicitly enforces a split between \u003c\u003c data identity \u003e\u003e and \u003c\u003c data location \u003e\u003e.  The former never changes; the latter is explicitly variable.\n- *Communicable results*: Repeatr describes processes in a [Formula](https://polydawn.github.io/glossary#formula).  Communicating a Formula -- via email, gist, pastebin, whatever -- should be enough for anyone to repeat your work.\n- *Control over data flow*: Pull input files from multiple systems; explicitly declare sections of filesystem that are useful results to pass along.  Granular control lets you build pipelines that are clean, explicit, and fast.\n- *Variation builds on precision*: Repeatr designs for systems like automatic updates and matrix tests on environmental variations by building them *on top* of Formulas.  This allows clear identification of each version/test/etc, making it possible to clearly report what's been covered and what needs to be finished.  Other tools can generate and consume Formulas as an API, plotting complex pipelines and checking reproducibility of results however they see fit.\n\nRepeatr is *not* a build tool; think of it more as a workspace manager.\nIt's important to have a clean workspace, fill it with good tools, and keep the materials going both in and out of your workspace well-inventoried.\nYou can use `make`, `cake`, `rake`, `bake`, or whatever's popular this month inside Repeatr; Repeatr gives you a framework to make sure everyone plays nice.\n\n\nMore documentation\n------------------\n\nRepeatr is just one part of an ecosystem of software called the Timeless Stack.\n\nThe Timeless Stack documentation has its own repo: https://github.com/polydawn/timeless\n\nMuch of the documentation is published in html book form: https://repeatr.io/\n\nOther closely related projects include\n[Rio](https://github.com/polydawn/rio) -- this provides the filesystem snapshot and transport for Repeatr --\nand [Stellar](https://github.com/polydawn/stellar) -- which provides bigger-picture pipelining tools to drive around Repeatr in interesting (and more user-friendly) ways.\n\n\n:warning: Alpha Warning :warning:\n---------------------------------\n\nRepeatr is in \"version 0.x\" ranges.  That means (technically) we are not promising backwards compatablity yet; releases may make API changes.\n\nDespite this warning, we consider the repeatr API fairly stable, and are happy to recommend building with it.\nWe made one set of breaking changes out of the last 2.5 years; and we expect this API to last at least twice as long as the previous one.\n\nBinary releases are available as a bundle in the [github releases page for the Timeless Stack](https://github.com/polydawn/timeless/releases).\nIt's also easy to build from source if you want the absolute latest bleeding-edge features.\n\n\n\nBuilding from Source\n--------------------\n\nGit-clone, then in the repo dir:\n\n```\nfling init          # fetch libraries\nfling install-deps  # build rio component (used to fetch other plugins)\nfling fetch-plugins # fetch plugins\nfling               # build \u0026 test\n```\n\nFuture incremental builds are just `fling` -- the rest of that was all first-time setup.\n\nBinaries go into the `bin/` dir; add it to your $PATH.\n\nLibraries are handled via git submodules.  You can run `fling init` again at any time to re-sync them.\nPlugins are handled via `rio`, another part of the Timeless Stack that Repeatr builds upon.\n\nYou can use `fling -h` to see other individual build and test command options.\nFor example `fling test` will only run tests; `fling install` will not test, just build binares in `bin/`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpolydawn%2Frepeatr","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpolydawn%2Frepeatr","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpolydawn%2Frepeatr/lists"}