Why We Said No to YAML and Docker
When we set out to build Zippy, we made two controversial decisions:
- No YAML configuration files
- No mandatory Docker containers
Here’s why.
The YAML Tax
Modern CI/CD has a dirty secret: you spend more time configuring builds than actually building. A typical project might have:
-
.github/workflows/ci.yml
-
.gitlab-ci.yml
-
.circleci/config.yml
-
Jenkinsfile
-
.travis.yml
Each with its own syntax, quirks, and gotchas. Each requiring maintenance when your build process changes.
With Zippy, your build configuration is your build script. If it runs on your machine, it runs on Zippy.
The Docker Overhead
Don’t get us wrong - Docker is great for many things. But for CI/CD, it often adds unnecessary complexity:
jobs:
build:
runs-on: ubuntu-latest
container:
image: node:18-alpine
steps:
- uses: actions/checkout@v3
- run: npm install
- run: npm test
What started as “just run my tests” became a lesson in container orchestration.
The Zippy Way
Here’s the same build in Zippy:
#!/bin/bash
npm install
npm test
That’s your entire configuration. Save it as build.sh
, make it executable, and push.
But What About Reproducibility?
“But containers ensure reproducible builds!” we hear you say.
True, but at what cost? In our experience, 90% of builds just need a standard Ubuntu or Alpine environment with common tools installed. Zippy provides these environments out of the box.
For the 10% that need something special, you can still use Docker - it’s just not mandatory.
Real-World Performance
By avoiding container overhead, Zippy builds start instantly:
- Traditional CI/CD: Pull image (30s) → Start container (5s) → Checkout (10s) → Build
- Zippy: Checkout (2s) → Build
That’s 43 seconds saved on every single build.
Configuration as Code (The Right Way)
Your build script IS your configuration. It’s:
- Version controlled - Lives in your repository
- Testable - Run it locally to debug
- Portable - Works on any Unix system
- Simple - Just shell commands
When Complexity Is Necessary
We’re not zealots. Sometimes you need complex workflows, matrix builds, or specific environments. When that day comes, you can:
- Add logic to your build script
- Use Docker if needed
- Graduate to a more complex CI/CD system
But why pay the complexity tax before you need to?
Start Simple, Stay Simple
Zippy is opinionated software. We believe most projects can get by with a simple build script. We believe fast feedback is more important than infinite configurability.
If you’re tired of maintaining YAML files and waiting for containers to spin up, give Zippy a try. You might be surprised how much you don’t miss them.