Skip to content
Merged
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
07381e1
feat: scaffold Go backend with config, SQLite, and SPA serving
victor-cuevas Mar 4, 2026
beffabc
feat: initialize Vue 3 SPA with design system and app shell
victor-cuevas Mar 4, 2026
8ae1232
chore: add admin portal CI workflow
victor-cuevas Mar 4, 2026
3c4d696
ci: stabilize admin workflow test and tooling paths
victor-cuevas Mar 4, 2026
8e73a6a
fix admin: use pointer for RetentionDays to distinguish zero from unset
victor-cuevas Mar 4, 2026
ecbdda7
fix(admin): resolve golangci-lint failures in CI
victor-cuevas Mar 4, 2026
e928fdf
fix: address Copilot review comments
victor-cuevas Mar 4, 2026
dea2e6b
security(admin): fix gosec G304 and G104 findings
victor-cuevas Mar 5, 2026
f3c61fb
chore(admin): add dev build tags to lint, vet, and gosec targets
victor-cuevas Mar 6, 2026
19f1862
feat(admin): add instance registry, health poller, and fleet dashboard
victor-cuevas Mar 6, 2026
bfbe258
feat(admin): add welcome screen and confirm dialog
victor-cuevas Mar 9, 2026
115f630
fix(admin): address review findings for instance registry
victor-cuevas Mar 10, 2026
fd52987
refactor(admin): extract UI logic into testable units
victor-cuevas Mar 11, 2026
989a8ef
fix(admin): resolve lint issues and switch to single quotes
victor-cuevas Mar 12, 2026
486df20
chore(admin): update go version to match other modules
victor-cuevas Mar 12, 2026
6205789
feat(admin): add metrics collection, computation, and REST API
victor-cuevas Mar 19, 2026
42154a7
feat(admin): add metrics dashboard UI with fleet KPIs, instance detai…
victor-cuevas Mar 23, 2026
de36f61
feat(admin): add smooth KPI value transitions between polls
victor-cuevas Mar 25, 2026
df87d96
feat(admin): sync zoom between charts, fix review comments
victor-cuevas Mar 30, 2026
1b9a28d
security: bump Go to 1.26.2 to fix stdlib vulnerabilities in admin mo…
victor-cuevas Apr 10, 2026
03340a5
feat(admin): add local auth system
victor-cuevas Apr 1, 2026
4b32ce1
feat(admin): add auth frontend with login, settings, and session mana…
victor-cuevas Apr 8, 2026
63a973e
feat(admin): Fix PR suggestions
victor-cuevas Apr 16, 2026
74cd685
Merge pull request #78 from cloudblue/feat/admin-auth
victor-cuevas Apr 16, 2026
b9b6096
feat(admin): add audit log backend with FTS5 search and retention cle…
victor-cuevas Apr 9, 2026
ab1bcc9
feat(admin): add audit log UI with filters, pagination, and search
victor-cuevas Apr 10, 2026
8de6e45
Merge pull request #80 from cloudblue/feat/admin-audit
victor-cuevas Apr 17, 2026
6de6080
feat(admin): improve UI accessibility, responsiveness, and polish
victor-cuevas Apr 17, 2026
26ad4db
fix(admin): improve focus trap robustness and tab keyboard navigation
victor-cuevas Apr 23, 2026
fb558a4
Merge pull request #82 from cloudblue/feat/admin-polish
victor-cuevas Apr 23, 2026
67f4c7e
fix(admin): move SQLite pragmas to DSN for per-connection enforcement
victor-cuevas Apr 27, 2026
1baf4ef
Merge pull request #85 from cloudblue/fix/move-pragmas-to-dsn
arnaugiralt Apr 27, 2026
a821481
feat(admin): add E2E test infrastructure with Playwright
victor-cuevas Apr 15, 2026
a10dbf7
ci(admin): add E2E job to admin portal workflow
victor-cuevas Apr 15, 2026
e796acc
test(admin): add cross-browser E2E testing with Firefox and WebKit
victor-cuevas Apr 23, 2026
c6633c3
fix(admin): Fix e2e-admin-setup makefile command
victor-cuevas Apr 24, 2026
e3a6967
feat(admin): add automated WCAG 2.1 AA accessibility testing
victor-cuevas Apr 25, 2026
8b532ff
test(admin): Fix auth e2e flakiness
victor-cuevas Apr 28, 2026
0150f79
fix(admin): address PR comments
victor-cuevas Apr 28, 2026
44966fd
Merge pull request #84 from cloudblue/feat/admin-e2e
arnaugiralt Apr 28, 2026
a0543b5
docs(admin): add deployment guide
victor-cuevas Apr 29, 2026
b449dc6
Merge pull request #86 from cloudblue/feat/admin-docs
arnaugiralt Apr 29, 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
193 changes: 193 additions & 0 deletions .github/workflows/ci-admin.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,193 @@
# Copyright 2026 CloudBlue LLC
# SPDX-License-Identifier: Apache-2.0

name: CI (Admin Portal)

on:
push:
branches:
- master
- 'release/**'
paths:
- 'admin/**'
- 'Makefile'
- '.github/workflows/ci-admin.yml'
pull_request:
paths:
- 'admin/**'
- 'test/mock-chaperone/**'
- 'Makefile'
- '.github/workflows/ci-admin.yml'

concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true

permissions:
contents: read

env:
GOLANGCI_LINT_VERSION: 'v2.8.0'
PNPM_VERSION: '10.28.2'

jobs:
lint-go:
name: Lint (Go)
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: Set up Go
uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6.3.0
with:
go-version-file: admin/go.mod
cache-dependency-path: admin/go.sum

- name: Run golangci-lint (admin module)
# The admin module embeds ui/dist in !dev builds; use dev tags for
# backend lint/test so checks do not depend on prebuilt UI artifacts.
uses: golangci/golangci-lint-action@1e7e51e771db61008b38414a730f564565cf7c20 # v9.2.0
with:
version: ${{ env.GOLANGCI_LINT_VERSION }}
install-mode: goinstall
working-directory: admin
args: --build-tags=dev

lint-ui:
name: Lint (UI)
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: Set up Node.js
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: 24

- name: Install pnpm
run: corepack enable && corepack prepare pnpm@${{ env.PNPM_VERSION }} --activate

- name: Install dependencies
working-directory: admin/ui
run: pnpm install --frozen-lockfile

- name: Check formatting
working-directory: admin/ui
run: pnpm prettier --check "src/**/*.{js,vue,css}"

- name: Lint
working-directory: admin/ui
run: pnpm lint

test-go:
name: Test (Go)
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: Set up Go
uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6.3.0
with:
go-version-file: admin/go.mod
cache-dependency-path: admin/go.sum

- name: Run tests
# Keep Go test path independent from ui/dist embed requirements.
run: cd admin && go test -race -tags dev ./...

test-ui:
name: Test (UI)
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: Set up Node.js
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: 24

- name: Install pnpm
run: corepack enable && corepack prepare pnpm@${{ env.PNPM_VERSION }} --activate

- name: Install dependencies
working-directory: admin/ui
run: pnpm install --frozen-lockfile

- name: Run tests
working-directory: admin/ui
run: pnpm test

e2e:
name: E2E
runs-on: ubuntu-latest
needs: [lint-go, lint-ui, test-go, test-ui]
steps:
- name: Checkout code
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: Set up Go
uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6.3.0
with:
go-version-file: admin/go.mod
cache-dependency-path: admin/go.sum

- name: Set up Node.js
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: 24

- name: Install pnpm
run: corepack enable && corepack prepare pnpm@${{ env.PNPM_VERSION }} --activate

- name: Install dependencies
working-directory: admin/ui
run: pnpm install --frozen-lockfile

- name: Install Playwright browsers
working-directory: admin/ui
run: pnpm exec playwright install chromium firefox webkit --with-deps

- name: Run E2E tests
run: make e2e-admin

- name: Upload Playwright report
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
if: ${{ !cancelled() }}
with:
name: playwright-report
path: admin/ui/e2e/playwright-report/
retention-days: 14

build:
name: Build
runs-on: ubuntu-latest
needs: [lint-go, lint-ui, test-go, test-ui]
steps:
- name: Checkout code
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: Set up Go
uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6.3.0
with:
go-version-file: admin/go.mod
cache-dependency-path: admin/go.sum

- name: Set up Node.js
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: 24

- name: Install pnpm
run: corepack enable && corepack prepare pnpm@${{ env.PNPM_VERSION }} --activate

- name: Build admin portal
run: make build-admin

- name: Verify binary exists
run: |
test -f bin/chaperone-admin
./bin/chaperone-admin --version
6 changes: 5 additions & 1 deletion .github/workflows/security.yml
Original file line number Diff line number Diff line change
Expand Up @@ -101,14 +101,18 @@ jobs:
# into message strings. Log injection is not possible.
# Safety net: the "no-raw-logging" step below enforces that all
# production code uses slog, not fmt.Print*/log.Print*.
run: gosec -exclude=G706 -exclude-dir=sdk -exclude-dir=plugins ./...
run: gosec -exclude=G706 -exclude-dir=sdk -exclude-dir=plugins -exclude-dir=admin ./...

- name: Run gosec (SDK module)
run: cd sdk && gosec ./...

- name: Run gosec (Contrib module)
run: cd plugins/contrib && gosec ./...

- name: Run gosec (admin module)
# Use -tags=dev so the embed directive for ui/dist is not required.
run: cd admin && gosec -tags=dev -exclude=G706 ./...

# TODO: Enable when repo is public (requires GitHub Advanced Security)
# dependency-review:
# name: Dependency Review
Expand Down
26 changes: 26 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
/dist/
/chaperone
/chaperone-onboard
/chaperone-admin
admin/chaperone-admin

# Test binary, built with `go test -c`
*.test
Expand Down Expand Up @@ -65,3 +67,27 @@ test/load/results/

# PID files for background processes
.target-server.pid

# SQLite database artifacts
*.db
*.db-shm
*.db-wal

# Admin portal frontend
admin/ui/node_modules/
admin/ui/dist/
admin/ui/.vite/

# Admin build artifacts
admin/seed-user

# Admin E2E tests
admin/ui/e2e/.auth/
admin/ui/e2e/results/
admin/ui/e2e/playwright-report/

# Playwright MCP output
.playwright-mcp/

# Admin QA test logs
.admin-qa-logs/
5 changes: 5 additions & 0 deletions .golangci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,11 @@ linters:
path: internal/context/
text: "var-naming: avoid package names"

- linters:
- revive
path: admin/api/
text: "var-naming: avoid meaningless package names"

# Allow pkg/crypto name even though it conflicts with stdlib.
# This package handles certificate generation, not general crypto.
# TODO: Consider renaming to pkg/certs in future refactor.
Expand Down
Loading
Loading