- Based on [[Plan9]]'s
mk(1)
(simpler, more focused version of GNU/BSD Make) - Basic OS image with well-known, writeable locations for system-wide configuration
- Executed every time CI runs, must be fast
- Has the following packages installed
podman
mk
- Whatever is included in the base, probably [[Alpine Linux]] image
- Utilize well-known files and a handful of virtual targets to perform common functions
test:V:
prepare-runtime:V: base-image
- Called before every CI job within the host OS
base-image:V:
/opt/crontab
- Add dependencies to these targets to orchestrate CI
- Some targets, such as
base-image:V:
are executed in the base OS and used to set up the hermetic execution environment
- Stubs for common CI platforms like [[GitLab]], [[GitHub]], etc.
- Custom targets can be executed from stubs if desired
- Simple command that wraps
qemu-system
that creates a daemon process- Injects credential/tokens for authentication to the orchestrator
- Maintains outputs for recent CI runs that can be fetched for playback
- Utilizes git hash/ref, environment variables to determine if CI can skip real execution
- Run tests locally in hermetically sealed environment, have it count towards your CI
- Do not need dedicated CI executors if you do not want Eliminating redundancy via centralized entry points and minimizing compute and wall clock time are core elements of making a pleasant development experience. Engineers are smart, but every line of code, every script, every package, is a decision and source of complexity.
Pleasant software makes good decisions while allowing the flexibility to make your own when appropriate. This is the fundamental concept of abstraction via software.
The shell is the lowest-common-denominator between your application and the environment (OS). Its pervasiveness makes it a good candidate as a default language for configuration.