My terminal-only DevOps-friendly "IDE" (part I)


As from January 2020 I started a new job at Knowledge Lab, I again faced the challenge of how we could somehow standardize tooling across team members with a DevOps-first approach, focusing on proper CI/CD infrastructure, code quality and automation wherever we can.

This post would be way too long if I covered everything here, thus the "part I" in the title.

What's DevOps-first anyway?

Probably the reader is already familiar with the Joel test, the DevOps Manifesto, The Twelve-Factor App and a million random Medium article that tells them how to "do software" and how not to. These are good resources, however, to me all this DevOps hype boils down to one core principle:

Automate. Everything.

As always, everything means a good 80-90% of... those things. Like... Code coverage.

What does it have to do with my IDE?

I saw way too many people spending half their lifetimes clicking around in PyCharm and VS Code. I would do the same: it's impossible to remember all the obscure, random keyboard shortcuts. The only reason Ctrl-V stands for "paste" is that V happens to be next to C on the keyboard 1.

The other problem is that sitting in front of a slow-but-fancy IDE makes the programmer feel like a pro, whereas dozens of (pre-configured) plugins are taking care of the heavy work of formatting, linting, compiling, running and testing2 the code.

Guess what, these actions are exactly what we want to have in our CI/CD pipeline, eventually. Thankfully CI/CD pipelines don't build upon memory hog IntelliJs and VSCodes but the almost 50-year-old unix shells.

Learn you a shell for greater good!

There are a million resources to learn bash from. This article is not one of those. If you are comfortable with cd and export, know what $PATH is, you are good to go for now.

I'm going to show my setup in a couple of steps and then elaborate on each part with a bit of focus on the newcomer. When I develop python et al, these are my requirements. Pick some of these you are comfortable with and read on!

My IDE

  1. Automated environment setup;
    I go to the project folder and the environment automatically set up.
  2. IDE in the terminal;
    I have multiple helper screens with tooling that helps me develop.
  3. Code & schema completion;
    While editing source code / deployment descriptors.
  4. Automated compiler, linter runs;
    Upon editing / saving source code.
  5. Automated test case runs;
    Upon editing test cases.
  6. Automated pre-commit checks for code QA; I want to run the same checks locally as what's going to run on the gating ci / cd infrastructure.
  7. Documentation generator; What's displayed on git(Hub|Lab), I should be able to check rendered locally.
  8. Automated packaging;
    Again, I want to run the same packaging procedure as what's on the ci/cd pipelint
  9. Extra: Entirely mouse free;
    Mouse slows you down: has only 3 buttons, requires 2D free cursor positioning, causes RSI.

As you can see, these involve a lot of (one-time) manual configuration; setting up the linters, code coverage, commit hooks, environment variables.


This is it for now - stay tuned for the second part!


  1. On a QWERTY keyboard, anyways... 

  2. ... and analyzing code coverage, and dockerizing, and packaging, and signing, and integration testing, and... and...