Seamless Secret Management in GitOps With SOPS and age

GitOps has a famously awkward edge case: you want everything in Git, but you can’t commit a plaintext database password to a repository. The usual workarounds — a separate secrets manager, a wall of kubectl create secret commands, a shared password vault that nobody keeps in sync — all break the “Git is the source of truth” promise. SOPS (Secrets OPerationS) and age solve this neatly. Together they let you commit encrypted secrets straight into Git, review them in pull requests, and decrypt them only where they’re needed. ...

June 28, 2026 · 12 min · 2431 words · Canh Dinh

Getting Started With mise: Dev Tools, Environments, and Tasks

If you have ever juggled nvm, pyenv, rbenv, a pile of .env files, and a Makefile in the same project, mise (pronounced “meez”, short for mise-en-place) is worth a look. It replaces all of them with a single tool and a single mise.toml config file. In this post I’ll introduce the three major concepts that make mise useful day to day: Dev tools — install and switch between runtimes like Node, Python, and Go. Environments — load the right environment variables per directory. Tasks — a built-in task runner for builds, tests, linting, and scripts. Then I’ll walk through a small but fully runnable example that ties all three together. ...

June 26, 2026 · 11 min · 2197 words · Canh Dinh