Situation summary:
We have an increasingly lean, but still entirely custom shell script way of building our Docker Images. These script clearly overlap the functionality of existing and robust tooling for , configuring and initiating Docker Image builds through to releasing them to Dockerhub.
Evaluating our requirements and considering some of these tools will allow us to remove some unnecessary complexity in our setup, and inherit some needed/wanted functionality.
The main thing driving this consideration is in answer to the question of how we can streamline our release process such that versioning, CHANGELOG generation, and publishing/releasing is consistent and largely automatic. Using one of these existing build tools in lieu of our own custom code, has the dual benefit of giving us access to a much larger feature-set towards this end, as well as reducing our maintenance burden.
Two key options to consider:
- Docker Compose file with build specs + env vars (docker compose build)
- Pro: We are already getting familiar with Docker Compose
- Pro: Conceivably could become our standard Deploy Compose configuration
- Con: Potentially too limited for some of our build/tagging requirements
- Skaffold:
- Pro: Additonal (possibly needed) build features around dynamic tagging, etc
- Pro: Skaffold originates as a K8 deployment tool, so has built-in the option of a step to deploy to a Kubernetes cluster. This could become a key feature in our product, even potentially the place we integrate better with Wikibase Cloud needs.
- Con: A new tool to learn
- Con: Somewhat more complex than Docker Compose
Additionally, we need to switch to using buildx when we move towards multi-platform builds (if we're not already using it).
Acceptance criteria:
- We have evaluated available tooling for configuring, building, and publishing (to DockerHub), WBS Images. With consideration to at least the above two suggested tools.
- We have decided whether to move forward with any of the options, and, if so, have created at least one follow-up ticket related to implementation.