Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
8b7129a
fix: add prometheus and auth launch configs
d2burkhalter May 20, 2026
01835b8
fix: correct path
d2burkhalter May 20, 2026
f5a8908
Merge remote-tracking branch 'origin/master' into fix/add-prometheus-…
d2burkhalter May 20, 2026
65b5278
fix: remove unnessesary comment
d2burkhalter May 20, 2026
0d0a435
fix: add teardown and wait for postgres
d2burkhalter May 21, 2026
ee99197
fix: remove double quotes
d2burkhalter May 21, 2026
59afea5
fix: remove another double quote
d2burkhalter May 21, 2026
d483711
fix: remove undefined group
d2burkhalter May 21, 2026
f8a3172
fix: pin images to version tags
d2burkhalter May 21, 2026
fd871c1
fix: align ports
d2burkhalter May 21, 2026
aa7d49e
fix: correct keycloak healthcheck and wait for startup
d2burkhalter May 21, 2026
fe513e8
fix: add timeout for wait tasks
d2burkhalter May 21, 2026
97fc1f1
fix: healthcheck in _local docker-compose
d2burkhalter May 21, 2026
00a8f82
fix: inital goreman with VS Code
d2burkhalter May 27, 2026
d5e8f9b
fix: add prometheus configs
d2burkhalter May 27, 2026
3e1e2d7
fix: standardize local development
d2burkhalter May 27, 2026
dc74542
fix: remove unused prometheus config file
d2burkhalter May 27, 2026
52685eb
fix: reorder tasks and remove unused ones
d2burkhalter May 27, 2026
41c9d08
fix: add TearDownDependencies mage command
d2burkhalter May 27, 2026
ee24b00
docs: update developer_guide
d2burkhalter Jun 2, 2026
52263bf
fix: add warn for ports in use
d2burkhalter Jun 2, 2026
42a5dfe
fix: replace sleep with wait for dlv
d2burkhalter Jun 2, 2026
802449c
fix: add DAP ports to tasks
d2burkhalter Jun 2, 2026
eafc3ed
fix: update ports to prevent conflicts
d2burkhalter Jun 3, 2026
f97ba70
Merge remote-tracking branch 'origin/master' into fix/add-prometheus-…
d2burkhalter Jun 3, 2026
3bc4281
fix: add timeout to dlv wait tasks
d2burkhalter Jun 3, 2026
9ff12af
Merge remote-tracking branch 'origin/master' into fix/add-prometheus-…
d2burkhalter Jun 16, 2026
e7571ad
fix: update for mage dev
d2burkhalter Jun 16, 2026
82a40b2
fix: remove unneeded env var
d2burkhalter Jun 16, 2026
8cc8b0e
docs: fix task name
d2burkhalter Jun 16, 2026
8064da2
docs: remove old Delve docs
d2burkhalter Jun 16, 2026
883099b
Merge remote-tracking branch 'origin/master' into fix/add-prometheus-…
d2burkhalter Jun 17, 2026
139cdbb
fix: remove orphaned task and add profile to dev:down
d2burkhalter Jun 17, 2026
4c8fb38
Merge branch 'master' into fix/add-prometheus-and-auth-launch-configs
d2burkhalter Jun 17, 2026
cf5e549
fix: change debug to flag
d2burkhalter Jun 17, 2026
d96604b
Merge branch 'fix/add-prometheus-and-auth-launch-configs' of github-p…
d2burkhalter Jun 17, 2026
25cd5be
fix: change flag name
d2burkhalter Jun 18, 2026
1b05149
docs: remove unused issues
d2burkhalter Jun 18, 2026
6295294
Merge branch 'master' into fix/add-prometheus-and-auth-launch-configs
d2burkhalter Jun 22, 2026
207e3f9
Merge branch 'fix/add-prometheus-and-auth-launch-configs' of github-p…
d2burkhalter Jun 22, 2026
c724a79
fix: remove fulldown task
d2burkhalter Jun 22, 2026
565fb5b
fix: pre build go services and have IDE launch LookoutUI
d2burkhalter Jun 23, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
416 changes: 295 additions & 121 deletions .vscode/launch.json

Large diffs are not rendered by default.

194 changes: 177 additions & 17 deletions .vscode/tasks.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,38 +9,198 @@
},
"tasks": [
{
"label": "Start dependencies",
"type": "shell",
"command": "go",
"args": ["mod", "download"],
"label": "Download Go modules"
"command": "mage kind && mage dev:up no-auth -dap",
"isBackground": true,
"problemMatcher": {
"owner": "armada-deps",
"pattern": { "regexp": "^$" },
"background": {
"activeOnStart": true,
"beginsPattern": "\\| Starting .* on port",
"endsPattern": "initialized successfully"
}
}
},
{
"label": "Start dependencies with Fake Executor",
"type": "shell",
"command": "mage kind && mage dev:deps",
"label": "Start dependencies"
"command": "mage dev:up fake-executor -dap",
"isBackground": true,
"problemMatcher": {
"owner": "armada-deps",
"pattern": { "regexp": "^$" },
"background": {
"activeOnStart": true,
"beginsPattern": "\\| Starting .* on port",
"endsPattern": "initialized successfully"
}
}
},
{
"label": "Start dependencies with Prometheus",
"type": "shell",
"command": "mage dev:migrate",
"label": "Run migrations"
"command": "mage kind && mage dev:up prometheus -dap",
"isBackground": true,
"problemMatcher": {
"owner": "armada-deps",
"pattern": { "regexp": "^$" },
"background": {
"activeOnStart": true,
"beginsPattern": "\\| Starting .* on port",
"endsPattern": "initialized successfully"
}
}
},
{
"label": "Set up dependencies",
"label": "Start dependencies with Auth",
"type": "shell",
"command": "mage kind && mage dev:up auth -dap",
"isBackground": true,
"problemMatcher": {
"owner": "armada-deps",
"pattern": { "regexp": "^$" },
"background": {
"activeOnStart": true,
"beginsPattern": "\\| Starting .* on port",
"endsPattern": "Keycloak ready"
}
}
},
{
"label": "Start dependencies with Fake Executor and Prometheus",
"type": "shell",
"command": "mage dev:up fake-executor,prometheus -dap",
"isBackground": true,
"problemMatcher": {
"owner": "armada-deps",
"pattern": { "regexp": "^$" },
"background": {
"activeOnStart": true,
"beginsPattern": "\\| Starting .* on port",
"endsPattern": "initialized successfully"
}
}
},
{
"label": "Start dependencies with Auth and Prometheus",
"type": "shell",
"command": "mage kind && mage dev:up auth,prometheus -dap",
"isBackground": true,
"problemMatcher": {
"owner": "armada-deps",
"pattern": { "regexp": "^$" },
"background": {
"activeOnStart": true,
"beginsPattern": "\\| Starting .* on port",
"endsPattern": "Keycloak ready"
}
}
},
{
"label": "Prepare LookoutUI",
"type": "shell",
"command": [
"scripts/yarn-registry-mirror.sh --cwd ${workspaceFolder}/internal/lookoutui install &&",
"scripts/yarn-registry-mirror.sh --cwd ${workspaceFolder}/internal/lookoutui openapi"
]
},
{
"label": "Check for port conflicts",
"type": "shell",
"command": "_local/scripts/check-port-conflicts.sh",
"problemMatcher": []
},
{
"label": "Kill port conflicts",
"type": "shell",
"command": "_local/scripts/kill-port-conflicts.sh",
"problemMatcher": []
},
{
"label": "Wait for dlv (standard)",
"type": "shell",
"command": "_local/scripts/wait-for-dlv.sh standard",
"problemMatcher": []
},
{
"label": "Wait for dlv (fake-executor)",
"type": "shell",
"command": "_local/scripts/wait-for-dlv.sh fake-executor",
"problemMatcher": []
},
{
"label": "Pre-build Go services",
"type": "shell",
"command": "_local/scripts/prebuild-services.sh",
"problemMatcher": []
},
{
"label": "Stop dependencies",
"type": "shell",
"command": "mage dev:down",
"problemMatcher": []
},
{
"label": "Set up and start (no-auth)",
"dependsOrder": "sequence",
"dependsOn": [
"Download Go modules",
"Pre-build Go services",
"Check for port conflicts",
"Start dependencies",
"Run migrations"
"Wait for dlv (standard)"
]
},
{
"type": "shell",
"command": [
"scripts/yarn-registry-mirror.sh --cwd ${workspaceFolder}/internal/lookoutui &&",
"scripts/yarn-registry-mirror.sh --cwd ${workspaceFolder}/internal/lookoutui openapi &&",
"scripts/yarn-registry-mirror.sh --cwd ${workspaceFolder}/internal/lookoutui build"
],
"label": "Build Lookout UI"
"label": "Set up and start (auth)",
"dependsOrder": "sequence",
"dependsOn": [
"Pre-build Go services",
"Check for port conflicts",
"Start dependencies with Auth",
"Wait for dlv (standard)"
]
},
{
"label": "Set up and start (fake-executor)",
"dependsOrder": "sequence",
"dependsOn": [
"Pre-build Go services",
"Check for port conflicts",
"Start dependencies with Fake Executor",
"Wait for dlv (fake-executor)"
]
},
{
"label": "Set up and start (no-auth with prometheus)",
"dependsOrder": "sequence",
"dependsOn": [
"Pre-build Go services",
"Check for port conflicts",
"Start dependencies with Prometheus",
"Wait for dlv (standard)"
]
},
{
"label": "Set up and start (fake-executor with prometheus)",
"dependsOrder": "sequence",
"dependsOn": [
"Pre-build Go services",
"Check for port conflicts",
"Start dependencies with Fake Executor and Prometheus",
"Wait for dlv (fake-executor)"
]
},
{
"label": "Set up and start (auth with prometheus)",
"dependsOrder": "sequence",
"dependsOn": [
"Pre-build Go services",
"Check for port conflicts",
"Start dependencies with Auth and Prometheus",
"Wait for dlv (standard)"
]
}
]
}
2 changes: 1 addition & 1 deletion _local/.armadactl.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ contexts:
auth-exec:
armadaUrl: localhost:50051
execAuth:
cmd: "/path/to/token-helper" # Note: field is 'cmd' not 'command'
cmd: "/path/to/token-helper" # Note: field is 'cmd' not 'command'
args: ["--get-token"]
# Optional: environment variables to pass to the command
env:
Expand Down
2 changes: 1 addition & 1 deletion _local/binoculars/config-auth.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -24,4 +24,4 @@ auth:
cancel_any_jobs: ["admins"]
reprioritize_any_jobs: ["admins"]
watch_all_events: ["admins"]
execute_jobs: ["admins", "executors"]
execute_jobs: ["admins", "executors"]
29 changes: 28 additions & 1 deletion _local/compose/stack.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,8 @@ services:
- "8090:8080"
restart: unless-stopped
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080/admin/v2/brokers/health"]
test:
["CMD", "curl", "-f", "http://localhost:8080/admin/v2/brokers/health"]
interval: 30s
timeout: 10s
retries: 5
Expand All @@ -94,3 +95,29 @@ services:
# No healthcheck on purpose: keycloak's realm import + warmup is slower than
# `docker compose up --wait` is willing to block for. `mage dev:up auth` polls the
# realm endpoint via waitForKeycloak before starting goreman.

prometheus:
container_name: prometheus
image: ${PROMETHEUS_IMAGE:-prom/prometheus:v3.11.3}
extra_hosts:
- "host.docker.internal:host-gateway"
ports:
- "9090:9090"
volumes:
- "../prometheus.yml:/etc/prometheus/prometheus.yml"
command:
- "--config.file=/etc/prometheus/prometheus.yml"
healthcheck:
test:
[
"CMD",
"wget",
"--quiet",
"--tries=1",
"--spider",
"http://localhost:9090/-/healthy",
]
interval: 10s
timeout: 5s
retries: 5
profiles: [prometheus]
2 changes: 1 addition & 1 deletion _local/fakeexecutor/config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,4 @@ nodes:
ephemeral-storage: "100Gi"
labels:
node.kubernetes.io/instance-type: "Standard_D8s_v3"
taints: []
taints: []
12 changes: 9 additions & 3 deletions _local/keycloak/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,36 +11,42 @@ When Keycloak starts with the `auth` Docker Compose profile, it automatically im
The imported configuration includes:

### Realm: `armada`

- Display Name: Armada
- Login with email allowed
- SSL required for external requests

### Clients

#### `armada-server`

- Type: Public client (no secret required)
- PKCE enabled (S256 challenge method)
- Redirect URIs configured for:
- armadactl: `http://localhost:8085/*`
- Lookout UI: `http://localhost:3000/*`, `http://localhost:3001/*`
- armadactl: `http://localhost:8085/*`
- Lookout UI: `http://localhost:3000/*`, `http://localhost:3001/*`

#### `armada-executor`

- Type: Confidential client (service account)
- Client secret: `executor-secret`
- Used for service-to-service authentication (executor, scheduler)

### User: `admin`

- Username: `admin`
- Password: `admin`
- Email: `admin@example.com`
- Group membership: `admins`

### Groups

- `admins` - Administrative users
- `executors` - Service accounts for executors
- `users` - Regular users

### Token Configuration

- Access token lifespan: 5 minutes
- SSO session idle: 30 minutes
- SSO session max: 10 hours
Expand Down Expand Up @@ -68,4 +74,4 @@ All components use OIDC authentication with Keycloak:
- **Executor**: Uses OIDC client credentials flow (service account)
- **Lookout API**: Accepts OIDC tokens and basic auth
- **Lookout UI**: Browser-based OIDC authentication
- **armadactl**: OIDC authorization code flow with PKCE (user authentication)
- **armadactl**: OIDC authorization code flow with PKCE (user authentication)
Loading
Loading