Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
120 commits
Select commit Hold shift + click to select a range
6757a3b
style(edit): simplify navbar as to match the new figma design
Gill87 May 23, 2026
1fe50cb
fix(edit): update button label in VehicleDetailsOverlay from 'Done' t…
Gill87 May 23, 2026
6081d5c
style(edit): change the location of the optimize button
Gill87 May 23, 2026
1036edd
style(edit): modify the design of the available/in-use toggle buttons
Gill87 May 23, 2026
3d5aded
feat(edit): created UI component that shows overlay when user is drag…
Gill87 May 23, 2026
6852f0d
style(edit): add manage header, change optimize button location, and …
Gill87 May 23, 2026
044ac44
refactor(edit): move manageSectionHeader to more appropriate folder
Gill87 May 24, 2026
caf6cea
feat(edit): wire up new useCSVImport to address import and remove old…
Gill87 May 24, 2026
652cc6a
refactor(edit): move CSVImportModal to the address folder
Gill87 May 24, 2026
60f8024
fix(edit): remove unused imports and wire up save button
Gill87 May 24, 2026
d0635ad
fix(edit): address start location not showing in results page by wiri…
Gill87 May 24, 2026
28c4bba
refactor(edit): move sidebar and navbar outside of edit page so resul…
Gill87 May 24, 2026
886f8c1
feat(edit): add inline errors for the addressCard
Gill87 May 24, 2026
a095c07
refactor(edit): rename ErrorPopup to OptimizeErrorPopup for clarity
Gill87 May 24, 2026
3c1df02
style(edit): upgrade optimizeErrorPopup from mid-fi to hi-fi design
Gill87 May 24, 2026
697bc76
feat(edit): create new ui component for csv upload overlay
Gill87 May 24, 2026
37be1e1
style(edit): increase width of csv upload overlay for desktop
Gill87 May 24, 2026
a785436
feat(edit): add loading state to the csvUploadOverlay
Gill87 May 24, 2026
5cf1819
style(edit): change location of vehicle buttons
Gill87 May 24, 2026
c3d35ce
feat(edit): add file size validation for CSV import
Gill87 May 24, 2026
d36ef2f
fix(edit): fix location of vehicle action buttons on mobile
Gill87 May 24, 2026
5d9ac73
style(edit): upgraded optimizing modal from mid-fi to hi-fi design
Gill87 May 24, 2026
4bfdf83
fix(edit): address notes field resizing bug by measuing height of not…
Gill87 May 24, 2026
b839398
refactor(edit): fully migrated from formStyles to formStylesv2
Gill87 May 24, 2026
eeef587
feat(edit): added support for dragging files in the csvUploadOverlay
Gill87 May 24, 2026
b3c580b
feat(edit): prevent users from uploading non-csv files with error han…
Gill87 May 24, 2026
92dc5b1
feat(edit); wire up dragging files onto edit page directly with DragD…
Gill87 May 24, 2026
4eb15ac
fix(edit): ensure DragDropOverlay covers whole body
Gill87 May 24, 2026
7f9a411
style(edit): improve code formatting and readability across multiple …
Gill87 May 24, 2026
0b4c680
style(edit); change quantity invalid error message to a minimalistic …
Gill87 May 24, 2026
661a7ac
refactor(edit); do a try/catch when setting storage to catch imports …
Gill87 May 24, 2026
6a4cd40
refactor(edit): check for invalid files on handleFileChange
Gill87 May 24, 2026
9021574
fix(edit): be explicit with aria-hidden
Gill87 May 24, 2026
076209d
style(edit): ran prettier for cleaner formatting
Gill87 May 24, 2026
a1a131f
fix(edit): address incorrect aria-disabled string issue
Gill87 May 24, 2026
50a8248
fix(edit): remove alert and use proper error handling in CSVImportModal
Gill87 May 24, 2026
21057fd
refactor(edit): rename OptimizeErrorPopup to ErrorOverlay and update …
Gill87 May 24, 2026
094f9fb
style(edit): prettier formatting
Gill87 May 24, 2026
f88c29d
feat(tests): update vroomToRoutes tests
Gill87 May 24, 2026
83a8797
style(tests): apply prettier formatting to vroomToRoutes test cases
Gill87 May 24, 2026
c0d8db4
fix(edit): ensure isUploading state is set to false when CSVUploadOve…
Gill87 May 25, 2026
ca5180d
chore(edit): remove redundant hint text from VehicleDetailsOverlay
Gill87 May 25, 2026
91a10fc
refactor(edit): break one css component into two components for clarity
Gill87 May 25, 2026
1a90ed4
chore(edit): remove unused css components
Gill87 May 25, 2026
811da65
chore(edit): remove another unused component
Gill87 May 25, 2026
1ad42c3
style(edit): updated departureTime field design to new hi-fi design
Gill87 May 25, 2026
15e6d07
style(edit): simplify navbar as to match the new figma design
Gill87 May 23, 2026
76cad4b
fix(edit): update button label in VehicleDetailsOverlay from 'Done' t…
Gill87 May 23, 2026
26aa772
style(edit): change the location of the optimize button
Gill87 May 23, 2026
501b822
style(edit): modify the design of the available/in-use toggle buttons
Gill87 May 23, 2026
bd5299c
feat(edit): created UI component that shows overlay when user is drag…
Gill87 May 23, 2026
63de665
style(edit): add manage header, change optimize button location, and …
Gill87 May 23, 2026
59cf3ed
refactor(edit): move manageSectionHeader to more appropriate folder
Gill87 May 24, 2026
9989e37
feat(edit): wire up new useCSVImport to address import and remove old…
Gill87 May 24, 2026
13751f3
refactor(edit): move CSVImportModal to the address folder
Gill87 May 24, 2026
f1d9e58
fix(edit): remove unused imports and wire up save button
Gill87 May 24, 2026
40b55da
fix(edit): address start location not showing in results page by wiri…
Gill87 May 24, 2026
87a993f
refactor(edit): move sidebar and navbar outside of edit page so resul…
Gill87 May 24, 2026
d656397
feat(edit): add inline errors for the addressCard
Gill87 May 24, 2026
a807aad
refactor(edit): rename ErrorPopup to OptimizeErrorPopup for clarity
Gill87 May 24, 2026
1df762a
style(edit): upgrade optimizeErrorPopup from mid-fi to hi-fi design
Gill87 May 24, 2026
ed7b533
feat(edit): create new ui component for csv upload overlay
Gill87 May 24, 2026
9c845c4
style(edit): increase width of csv upload overlay for desktop
Gill87 May 24, 2026
9a5840d
feat(edit): add loading state to the csvUploadOverlay
Gill87 May 24, 2026
2a41157
style(edit): change location of vehicle buttons
Gill87 May 24, 2026
bd99c94
feat(edit): add file size validation for CSV import
Gill87 May 24, 2026
c0068f2
fix(edit): fix location of vehicle action buttons on mobile
Gill87 May 24, 2026
06fc95e
style(edit): upgraded optimizing modal from mid-fi to hi-fi design
Gill87 May 24, 2026
777e03d
fix(edit): address notes field resizing bug by measuing height of not…
Gill87 May 24, 2026
5bfee81
refactor(edit): fully migrated from formStyles to formStylesv2
Gill87 May 24, 2026
8cb8d54
feat(edit): added support for dragging files in the csvUploadOverlay
Gill87 May 24, 2026
07628a2
feat(edit): prevent users from uploading non-csv files with error han…
Gill87 May 24, 2026
c061dd1
feat(edit); wire up dragging files onto edit page directly with DragD…
Gill87 May 24, 2026
1721ffa
fix(edit): ensure DragDropOverlay covers whole body
Gill87 May 24, 2026
756b387
style(edit): improve code formatting and readability across multiple …
Gill87 May 24, 2026
2ceeaa0
style(edit); change quantity invalid error message to a minimalistic …
Gill87 May 24, 2026
9f30318
refactor(edit); do a try/catch when setting storage to catch imports …
Gill87 May 24, 2026
f42f01e
refactor(edit): check for invalid files on handleFileChange
Gill87 May 24, 2026
8eb05d7
fix(edit): be explicit with aria-hidden
Gill87 May 24, 2026
b573db6
style(edit): ran prettier for cleaner formatting
Gill87 May 24, 2026
ded3059
fix(edit): address incorrect aria-disabled string issue
Gill87 May 24, 2026
64767ff
fix(edit): remove alert and use proper error handling in CSVImportModal
Gill87 May 24, 2026
cbeaa40
refactor(edit): rename OptimizeErrorPopup to ErrorOverlay and update …
Gill87 May 24, 2026
8f3ee41
style(edit): prettier formatting
Gill87 May 24, 2026
439973b
feat(tests): update vroomToRoutes tests
Gill87 May 24, 2026
13bb43e
style(tests): apply prettier formatting to vroomToRoutes test cases
Gill87 May 24, 2026
74e81e0
fix(edit): ensure isUploading state is set to false when CSVUploadOve…
Gill87 May 25, 2026
c0f1f10
chore(edit): remove redundant hint text from VehicleDetailsOverlay
Gill87 May 25, 2026
33a4949
refactor(edit): break one css component into two components for clarity
Gill87 May 25, 2026
d83cc00
chore(edit): remove unused css components
Gill87 May 25, 2026
0116ebc
chore(edit): remove another unused component
Gill87 May 25, 2026
7e7a5d8
style(edit): updated departureTime field design to new hi-fi design
Gill87 May 25, 2026
ad4bef9
Merge branch 'feat/edit-hifi' of https://github.com/Gill87/b2delivery…
Gill87 May 28, 2026
d7e03fe
fix(edit): Add "" fallback to prevent undefined trimmedDepotAddress f…
Gill87 May 28, 2026
1d93043
chore(edit): prevent drift risk in ADDRESS_ROW_STEPPER_CONTAINER tail…
Gill87 May 28, 2026
a826fb2
fix(edit): address bad import and incorrect ending tag in SidebarResu…
Gill87 May 28, 2026
acc1da8
style(results): ensure visual consistency between AdvancedMarker and …
Gill87 May 28, 2026
b167263
style(results): better aligned starting point styling to match the re…
Gill87 May 28, 2026
5314af3
fix(edit): do file size check earlier to prevent user's from attachin…
Gill87 May 28, 2026
78f459c
fix(edit): add missing error message style for CSV upload size valida…
Gill87 May 28, 2026
8d906fa
style: improve formatting in edit and results folders
Gill87 May 28, 2026
ed1af28
fix(results): correct bad import paths
Gill87 May 30, 2026
8c9b911
fix(edit): re-add optimize button in the MobileBottomBar.
Gill87 May 30, 2026
77e4fd0
style(edit): prettier formatting
Gill87 May 30, 2026
fc8e730
ci: improved E2E Docker workflow for full backend testing
Gill87 May 25, 2026
5d24a0f
ci: created new playwright e2e frontend check
Gill87 May 25, 2026
4603acd
ci: address mismatch between monaco build in e2e-docker and san franc…
Gill87 May 25, 2026
8ec6f60
style(edit): prettier formatting
Gill87 May 25, 2026
3e8da23
chore(edit): add .cursor/ to .gitignore
Gill87 May 25, 2026
db24cea
chore(edit): exclusde e2e test from vitest and minor comment change
Gill87 May 25, 2026
adf8578
test: address UI inconsistencies in playwright test
Gill87 May 30, 2026
58a1fea
ci: allow cmake to build multiple files in parallel in e2e-docker check
Gill87 May 30, 2026
2be8308
refactor(edit): consolidated duplicate code for available/in-use by c…
Gill87 May 30, 2026
02cbf3f
ci: add stdout and stderr logs for npm start
Gill87 May 30, 2026
28e5e6a
fix(edit): ensure file exceeding limit error message is consistent
Gill87 May 30, 2026
6ea6019
fix(edit): apply aria-dialog to the element representing the modal co…
Gill87 May 30, 2026
7501962
style(edit): prettier formatting
Gill87 May 30, 2026
fd7ff18
fix(results): add guard to prevent loading Google component for start…
Gill87 May 31, 2026
b2bd27d
style: fix SidebarResultsButton visual color appearence
Gill87 May 31, 2026
cd4826f
style: prettier formatting
Gill87 May 31, 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
117 changes: 117 additions & 0 deletions .github/workflows/e2e-docker.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
# Full backend Docker E2E suite.
# Runs every test registered with `LABELS e2e` in tests/CMakeLists.txt
# (see `deliveryoptimizer_add_docker_*e2e_test` helpers). Each E2E test brings
# up the full Compose stack (postgres + osrm + http-server) under a unique
# project name, exercises a real routing/job/proxy/health flow, and tears the
# stack down on exit.
#
# Triggers:
# - schedule: weekly, Mondays 06:00 UTC (cron: '0 6 * * 1')
# - workflow_dispatch: manual run (Actions tab -> Run workflow, or
# `gh workflow run e2e-docker.yml`)
#
# Not wired to pull_request on purpose. PR CI (pr-light.yml) keeps excluding
# e2e/docker via `ctest -LE 'e2e|docker'` because each E2E run can take a long
# time on cold caches (Docker build of OSRM + http-server image, OSRM PBF
# preprocess for Monaco, then 8 serial bring-up/tear-down cycles).
#
# Runner: native ARM64 to match deploy/compose/docker-compose.arm64.yml and
# tests/integration/e2e/e2e_stack.env (DELIVERYOPTIMIZER_PLATFORM=linux/arm64).
# If `ubuntu-24.04-arm` is unavailable on this org/repo, switch `runs-on` to
# `ubuntu-latest` and add a Buildx + QEMU setup step before the ctest call;
# emulated arm64 builds will be noticeably slower.
#
# Disabled by CMake (DISABLED TRUE): DeliveryOptimizerRoutingSmokeTest.OsrmAndVroom.
# CTest skips disabled tests automatically, so `ctest -L e2e` is safe to use.

name: E2E Docker (weekly + manual)

on:
schedule:
- cron: '0 6 * * 1'
workflow_dispatch:

concurrency:
group: e2e-docker-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
e2e:
name: ctest -L e2e (full suite)
runs-on: ubuntu-24.04-arm
timeout-minutes: 240
steps:
- uses: actions/checkout@v4

- name: Install build + test prerequisites
uses: awalsh128/cache-apt-pkgs-action@v1
with:
packages: ninja-build libjsoncpp-dev libdrogon-dev uuid-dev libmariadb-dev libbrotli-dev libhiredis-dev libyaml-cpp-dev libgtest-dev python3
version: 1.0

- name: Verify toolchain
run: |
cmake --version
docker --version
docker compose version
python3 --version
bash --version | head -n 1

- name: Validate compose config with E2E env
run: |
docker compose \
-f deploy/compose/docker-compose.arm64.yml \
--env-file tests/integration/e2e/e2e_stack.env \
config > /dev/null

- name: Configure (CMake dev preset)
run: cmake --preset dev

- name: Build (CMake dev preset)
run: cmake --build --preset dev --parallel

- name: List discovered E2E tests
run: ctest --preset dev -N -L e2e

- name: Run full E2E suite
run: ctest --preset dev --output-on-failure -L e2e

- name: Capture Docker diagnostics on failure
if: failure()
run: |
mkdir -p e2e-diagnostics
{
echo "=== docker version ==="
docker version || true
echo
echo "=== docker ps -a ==="
docker ps -a || true
echo
echo "=== docker network ls ==="
docker network ls || true
echo
echo "=== docker volume ls ==="
docker volume ls || true
echo
echo "=== docker images (deliveryoptimizer*) ==="
docker images "deliveryoptimizer*" || true
} > e2e-diagnostics/docker-state.txt 2>&1

# Each E2E test uses its own unique compose project name and cleans
# up on EXIT, so logs are usually unavailable post-mortem. Attempt a
# best-effort dump for any leftover containers.
for cid in $(docker ps -aq); do
(
echo "=== docker logs ${cid} ==="
docker logs "${cid}" 2>&1 || true
) >> e2e-diagnostics/leftover-container-logs.txt
done

- name: Upload diagnostics artifact
if: failure()
uses: actions/upload-artifact@v4
with:
name: e2e-docker-diagnostics
path: e2e-diagnostics/
retention-days: 7
if-no-files-found: ignore
114 changes: 114 additions & 0 deletions .github/workflows/playwright-e2e.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
# Playwright browser E2E suite.
# Spins up the full Docker Compose backend stack (OSRM + VROOM + Postgres + C++ API),
# builds the Next.js production server, and runs a Playwright test that exercises
# the landing → edit → optimize → results flow end-to-end.
#
# OSRM routing data for San Francisco is cached between runs via actions/cache so
# PBF downloading and processing (~5-8 min) only happens on first run or when
# e2e_sf_playwright.env changes.
#
# No GitHub secrets required. Google Maps is omitted; the map panel logs a console
# error but the route sidebar (what the test asserts) renders independently.
#
# Triggers:
# - schedule: weekly, Mondays 06:00 UTC
# - workflow_dispatch: manual run (Actions tab or `gh workflow run playwright-e2e.yml`)

name: Playwright E2E (weekly + manual)

on:
schedule:
- cron: "0 6 * * 1"
workflow_dispatch:

concurrency:
group: playwright-e2e-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
frontend-e2e:
runs-on: ubuntu-latest
timeout-minutes: 90
steps:
- uses: actions/checkout@v4

- name: Restore OSRM cache
uses: actions/cache@v4
with:
path: /tmp/osrm-sf-data
key: osrm-sf-${{ hashFiles('tests/integration/e2e/e2e_sf_playwright.env') }}

- name: Prepare OSRM cache directory
run: mkdir -p /tmp/osrm-sf-data

- name: Start backend stack
run: |
OSRM_CACHE_DIR=/tmp/osrm-sf-data \
docker compose \
-f deploy/compose/docker-compose.arm64.yml \
-f deploy/compose/docker-compose.e2e-override.yml \
--env-file tests/integration/e2e/e2e_sf_playwright.env \
up -d --build

# 120 × 10 s = 20 min ceiling.
# Cold run: OSRM downloads + processes the SF PBF (~5-8 min).
# Cache hit: files already exist, entrypoint skips processing, starts in <1 min.
- name: Wait for backend health
run: |
for i in $(seq 1 120); do
RESP=$(curl -fsS http://127.0.0.1:39080/health 2>/dev/null || true)
if echo "$RESP" | grep -q '"status":"ok"'; then
echo "Healthy after $((i * 10))s"; exit 0
fi
echo "Attempt $i/120 — waiting 10s..."; sleep 10
done
docker compose \
-f deploy/compose/docker-compose.arm64.yml \
-f deploy/compose/docker-compose.e2e-override.yml \
--env-file tests/integration/e2e/e2e_sf_playwright.env \
logs >&2 || true
exit 1

- uses: actions/setup-node@v4
with:
node-version: 20
cache: npm
cache-dependency-path: app/ui/package-lock.json

- run: npm ci
working-directory: app/ui

- run: npx playwright install --with-deps chromium
working-directory: app/ui

- name: Build Next.js
run: npm run build
working-directory: app/ui
env:
DELIVERYOPTIMIZER_API_URL: http://127.0.0.1:39080

- name: Start Next.js server
run: npm start > /tmp/nextjs-server.log 2>&1 &
working-directory: app/ui
env:
DELIVERYOPTIMIZER_API_URL: http://127.0.0.1:39080

- run: npx wait-on http://localhost:3000 --timeout 30000
working-directory: app/ui

- name: Run Playwright E2E tests
run: npm run test:e2e
working-directory: app/ui
env:
PLAYWRIGHT_BASE_URL: http://localhost:3000
CI: "true"

- name: Upload Playwright report
if: failure()
uses: actions/upload-artifact@v4
with:
name: playwright-report
path: |
app/ui/playwright-report/
/tmp/nextjs-server.log
retention-days: 7
13 changes: 0 additions & 13 deletions .github/workflows/pr-light.yml
Original file line number Diff line number Diff line change
Expand Up @@ -63,16 +63,3 @@ jobs:
- run: cmake --build --preset dev --parallel
- run: ctest --preset dev --output-on-failure --no-tests=error -LE 'e2e|docker'
- run: docker compose -f deploy/compose/docker-compose.arm64.yml --env-file deploy/env/http-server.arm64.env config
backend-e2e:
if: github.event_name != 'pull_request'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: docker/setup-qemu-action@v3
- uses: awalsh128/cache-apt-pkgs-action@v1
with:
packages: ninja-build libjsoncpp-dev libdrogon-dev uuid-dev libmariadb-dev libbrotli-dev libhiredis-dev libyaml-cpp-dev libgtest-dev postgresql postgresql-client
version: 1.0
- run: cmake --preset dev
- run: cmake --build --preset dev --parallel
- run: ctest --preset dev --output-on-failure --no-tests=error -L 'e2e|docker'
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -92,5 +92,7 @@ services/vroom/data/
# macOS / editor noise
.DS_Store

# Claude
# Claude and Cursor
Claude.md
.claude/
.cursor/
80 changes: 64 additions & 16 deletions app/ui/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 3 additions & 1 deletion app/ui/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
"typecheck": "tsc --noEmit",
"test": "vitest run",
"test:watch": "vitest",
"test:e2e": "playwright test",
"format": "prettier --write .",
"format:check": "prettier --check ."
},
Expand Down Expand Up @@ -40,6 +41,7 @@
"prettier": "^3.8.3",
"tailwindcss": "^4",
"typescript": "^5",
"vitest": "^4.1.4"
"vitest": "^4.1.4",
"@playwright/test": "^1.49.1"
}
}
Loading
Loading