CI/CD with Argo Workflows
Laminar uses Argo Workflows for building container images and ArgoCD for GitOps-based deployments.
Architecture
GitHub Repositories
ā
āā laminar (Rust backend)
āā laminar-frontend (Console + Product)
āā laminar-infra (Infrastructure)
ā
ā¼
Argo Workflows (Manual Triggers)
ā
āā *-check: Lint, test
āā *-build: Build ā Push to ECR
ā
ā¼
ECR Registry
ā
āā laminar/backend
āā laminar/backend-deps
āā laminar/console
āā laminar/product
ā
ā¼
ArgoCD (Pull-based Sync)
ā
āā Helm Charts ā EKS Cluster
ECR Registry
All images are pushed to AWS ECR:
792306802931.dkr.ecr.us-east-1.amazonaws.com/laminar/
āāā backend # Rust engine
āāā backend-deps # Engine dependencies layer
āāā console # Console UI
āāā product # Product site
Image Tagging Strategy
| Branch | Tag Format | Example |
|---|---|---|
| main/master | {SHA} | a1b2c3d |
| Feature branch | {BRANCH}-{SHA} | feature-auth-a1b2c3d |
Branch names with / are converted to - (e.g., feature/auth ā feature-auth).
Workflow Templates
All workflows run in the argo namespace using a DAG (Directed Acyclic Graph) structure.
Build Workflows
| Workflow | Repository | Default Branch | Storage | Output Image |
|---|---|---|---|---|
engine-deps-build | laminar | master | 30Gi | laminar/backend-deps |
engine-build | laminar | master | 30Gi | laminar/backend |
console-build | laminar-frontend | main | 5Gi | laminar/console |
product-build | laminar-frontend | main | 2Gi | laminar/product |
Check Workflows
| Workflow | Repository | Tasks |
|---|---|---|
engine-check | laminar | cargo check |
console-check | laminar-frontend | npm install, lint, test |
product-check | laminar-frontend | npm install, lint, test |
Workflow Parameters
| Workflow | Parameter | Default | Description |
|---|---|---|---|
| All | revision | main/master | Git branch or tag to build |
engine-build | deps-image-tag | latest | Tag of backend-deps image to use |
Running Workflows
Via Argo CLI
# Submit with default parameters
argo submit -n argo --from workflowtemplate/console-build
# Submit with custom branch
argo submit -n argo --from workflowtemplate/console-build \
-p revision=feature/new-dashboard
# Submit engine build with specific deps image
argo submit -n argo --from workflowtemplate/engine-build \
-p revision=master \
-p deps-image-tag=a1b2c3d
# Watch workflow progress
argo watch -n argo @latest
# List workflows
argo list -n argo
# Get logs
argo logs -n argo <workflow-name>
# Resubmit failed workflow
argo resubmit -n argo <workflow-name>Via Argo Workflows UI
-
Access the UI at https://ci.lmnr.cloud
-
Click Workflow Templates in the left sidebar
-
Select the desired template (e.g.,
console-build) -
Click + Submit
-
Override parameters if needed:
revision: Enter branch name (e.g.,feature/new-feature)
-
Click Submit
-
Monitor progress in the workflow view
Post-Build Deployment
After building an image, update the deployment:
Option 1: Update Values File (Recommended)
Edit the image tag in the appropriate values file and commit:
# For console
vim k8s/laminar-product/values-eks.yaml
# Update: console.image.tag: "new-tag"
# Commit and push
git add . && git commit -m "Update console image tag" && git pushArgoCD will automatically sync the change.
Option 2: ArgoCD CLI Override
# Sync with image override
argocd app set laminar-product \
--helm-set console.image.tag=a1b2c3d
argocd app sync laminar-productOption 3: kubectl (Quick Testing)
# Direct image update
kubectl set image deployment/console \
console=792306802931.dkr.ecr.us-east-1.amazonaws.com/laminar/console:a1b2c3d \
-n laminar-productDirectory Structure
laminar-infra/
āāā argo-workflows/
ā āāā Taskfile.yml
ā āāā workflows/
ā āāā engine-build.yaml
ā āāā engine-check.yaml
ā āāā engine-deps-build.yaml
ā āāā console-build.yaml
ā āāā console-check.yaml
ā āāā product-build.yaml
ā āāā product-check.yaml
āāā argocd/
ā āāā Taskfile.yml
ā āāā projects/
ā ā āāā laminar.yaml
ā āāā applications/
ā āāā laminar-product.yaml
ā āāā laminar-monitoring.yaml
ā āāā ...
āāā k8s/
āāā laminar-cicd/
āāā Chart.yaml
āāā Taskfile.yml
āāā values.yaml
āāā values-eks.yaml