All Top-level Files

All Top-level Files

Files in the top-level directory in any check-in


Clojars Project

Clojure library for automating and tracking infrastructure improvements


Build a namespace in your project that depends on clj-infra.core

Then build a function that invokes with-infra-tracking!, which opens up a tracking database that you can then pass to apply-infra! to perform and keep track of infrastructure updates and rollbacks.

Check out src/pleroma.clj for a complete working example


Things I've learned along the way.

Do all your waiting at the end : If you build out, for example, a Digital Ocean droplet and a database, you should : initiate creation for each of them and then wait instead of waiting for each one : separately

Build out "permanent" structures first : Databases that you intend to reuse between components, or even to : keep in use later on, should likely be built out early on in : the process. That way, for example, if you make architecture changes you can : rollback just to the database and roll forward a new architecture.


Copyright © 2023 Stephen Castro-Starkey

This program and the accompanying materials are made available under the terms of the Eclipse Public License 2.0 which is available at

This Source Code may also be made available under the following Secondary Licenses when the conditions for such availability set forth in the Eclipse Public License, v. 2.0 are satisfied: GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version, with the GNU Classpath Exception which is available at