Work in Progress: This page is under development. Use the feedback button on the bottom right to help us improve it.

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

BranchTag FormatExample
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

WorkflowRepositoryDefault BranchStorageOutput Image
engine-deps-buildlaminarmaster30Gilaminar/backend-deps
engine-buildlaminarmaster30Gilaminar/backend
console-buildlaminar-frontendmain5Gilaminar/console
product-buildlaminar-frontendmain2Gilaminar/product

Check Workflows

WorkflowRepositoryTasks
engine-checklaminarcargo check
console-checklaminar-frontendnpm install, lint, test
product-checklaminar-frontendnpm install, lint, test

Workflow Parameters

WorkflowParameterDefaultDescription
Allrevisionmain/masterGit branch or tag to build
engine-builddeps-image-taglatestTag 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

  1. Access the UI at https://ci.lmnr.cloud

  2. Click Workflow Templates in the left sidebar

  3. Select the desired template (e.g., console-build)

  4. Click + Submit

  5. Override parameters if needed:

    • revision: Enter branch name (e.g., feature/new-feature)
  6. Click Submit

  7. Monitor progress in the workflow view

Post-Build Deployment

After building an image, update the deployment:

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 push

ArgoCD 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-product

Option 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-product

Directory 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