DNS management through octodns.
This repository is used to manage DNS records for various domains. octodns is used to manage all DNS records through Infrastructure as Code (IaC) principles. The github/branch-deploy is responsible for deploying changes to production.
This repository uses the "scripts to rule them all" pattern. Use the repo-owned script/* entrypoints instead of invoking uv or octodns commands directly.
Python is pinned in .python-version, and this repo expects a shim-based version manager such as pyenv to provide that exact interpreter:
pyenv install $(cat .python-version)Once the pinned Python is installed, the standard workflows are:
script/bootstrap
script/test
script/plan
script/deployscript/bootstrapinstalls the pinned bootstrap tooling and project dependencies from the committed wheel cache.script/testverifies thatoctodnsis installed correctly.script/planruns a non-destructiveoctodns-syncplan againstproduction.yaml.script/deployrunsoctodns-sync --doitagainstproduction.yaml.
Dependency updates are intentionally explicit. Refresh the lockfiles and vendored wheels with:
script/vendorUpdate all resolvable Python dependencies within uv's configured exclude-newer cutoff with:
script/vendor --upgradeThe vendor/cache directory is committed to the repository so the project can bootstrap and run without contacting package indexes during normal development or CI.
This repository uses IssueOps via the github/branch-deploy action to deploy changes to production. This ensure that all changes safely follow the branch deploy model.
Here is a trimmed down summary of the deployment process:
-
🧪 Run a noop deployment with
.noopas a comment on your PR -
👀 Observe the CI and
noopoutput on your pull request to ensure it is passing and doing what it is supposed to do -
✔️ Obtain an approval/review on your pull request
-
🚀 Branch deploy your pull request to production with
.deployIf anything goes wrong, rollback with
.deploy main -
🎉 Merge!
Note: you can use
.deploy | FORCE=trueto force deploy changes.
The MIT license attached to this repository covers all code and documentation. Please see the LICENSE file for more information. It should be noted that the MIT license does not cover the DNS records themselves (or the associated domains), only the code, CI workflows, and documentation in this repository.
