Architecture
Technology
Tangle consists of two components:
- A server written in
Golang
that implements the API and serves web assets.- It uses the chi router since it offers useful, clearly beneficial features (route groups/middleware support) while being lightweight and using standard http handlers.
- It uses the ArgoCD SDK to talk to ArgoCD servers.
- Each ArgoCD API has a
alitto/pond
worker pool that allows us to balance concurrency against putting excess demand on therepo
microservice.. - Endpoints are documented with OpenAPI and server includes an embedded Swagger UI in the
/swagger
endpoint. - It uses standard observability tools like:
- hellofresh/health-go
/health
endpoints. - Prometheus
/metrics
endpoint. - httplog for logging.
- hellofresh/health-go
- A static website written with
Svelte
andTypescript
.- It uses flowbite-svelte as its design system.
Additionally it uses the following tools to improve our development experience:
- Github Actions for CI/CD.
- Development Containers to create a reproducable development environment.
- pre-commit to automate formatting & checks.
- k3d to run Kubernetes cluster for testing locally & in CI/CD.
- Task as a command runner/orchestrator.
- Air for live reloading.
- Goreleaser to build/distribute CLI.
- mkdocs && mkdocs-material for documentation.
Principles
- Features should have feature parity for CI/CD systems (via API and CLI tools) and humans (via website).
- Interactions with ArgoCD should not interfere with its core job (deploying stuff!). Users should be able to set sane limits.