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
a0bb9a4
chore(dashboard-next): scaffold vite + react + tanstack
pratyush618 Apr 24, 2026
8b973ee
feat(dashboard-next): add lib utilities and providers
pratyush618 Apr 24, 2026
22101ec
feat(dashboard-next): add app shell, primitives, route stubs
pratyush618 Apr 24, 2026
e249809
ci: add dashboard-next lint job
pratyush618 Apr 24, 2026
e56617b
feat(dashboard): serve multi-file SPA with legacy fallback
pratyush618 Apr 24, 2026
0c52ec8
test(dashboard): unit tests for static asset resolver
pratyush618 Apr 24, 2026
0083e1f
chore(dashboard-next): add radix, cmdk, react-table, error boundary deps
pratyush618 Apr 24, 2026
2251617
feat(dashboard-next): add shadcn ui primitives + DataTable
pratyush618 Apr 24, 2026
c07f89a
feat(dashboard-next): shell polish (mobile nav, breadcrumbs, refresh …
pratyush618 Apr 24, 2026
579a865
feat(dashboard-next): add shared api types
pratyush618 Apr 24, 2026
c8930c9
feat(dashboard-next): overview page with stats, queues, recent jobs, …
pratyush618 Apr 24, 2026
2e272af
feat(dashboard-next): port workers, circuit breakers, resources, system
pratyush618 Apr 24, 2026
24667cb
chore(dashboard-next): add debounced-value hook and widen page header
pratyush618 Apr 24, 2026
fac4dca
feat(dashboard-next): jobs api layer with optimistic mutations
pratyush618 Apr 24, 2026
67241cf
feat(dashboard-next): jobs list with url-synced filters and actions
pratyush618 Apr 24, 2026
9c1da53
feat(dashboard-next): job detail with tabs and DAG viewer
pratyush618 Apr 24, 2026
a0bfc04
chore(dashboard-next): add recharts, react-virtual, vitest
pratyush618 Apr 24, 2026
99cab14
feat(dashboard-next): queues with pause/resume mutations
pratyush618 Apr 24, 2026
0fb07d6
feat(dashboard-next): dead letters with grouping and typed purge
pratyush618 Apr 24, 2026
a0dce62
feat(dashboard-next): metrics with lazy-loaded charts
pratyush618 Apr 24, 2026
a76fc9c
feat(dashboard-next): virtualized live-tail logs
pratyush618 Apr 24, 2026
d476813
test(dashboard-next): vitest coverage for jobs utils
pratyush618 Apr 24, 2026
af5e530
chore: gitignore built dashboard assets
pratyush618 Apr 24, 2026
a5ffd5d
chore(dashboard-next): rename TanStackRouterVite → tanstackRouter
pratyush618 Apr 24, 2026
4d3a07e
fix(dashboard-next): timestamps are ms, not seconds
pratyush618 Apr 24, 2026
d27dce3
feat(dashboard): resource health fallback via worker heartbeats
pratyush618 Apr 24, 2026
777c61f
refactor(dashboard-next): DLQ group by task + exception class
pratyush618 Apr 24, 2026
f05723b
fix(dashboard-next): queue failed/dead column + per-row pause state
pratyush618 Apr 24, 2026
a124b0f
fix(dashboard-next): CB age formatter, Ms zero, DataTable keyboard
pratyush618 Apr 24, 2026
1a501c9
refactor(dashboard-next): use barrel imports across the app
pratyush618 Apr 24, 2026
8e1cb4b
feat(dashboard): cutover — rename dashboard-next → dashboard
pratyush618 Apr 24, 2026
61339ef
chore(pre-commit): cover tests + add dashboard vitest hook
pratyush618 Apr 24, 2026
4358d45
chore(dashboard): rename package to taskito-dashboard
pratyush618 Apr 24, 2026
1cd0f7e
ci: split dashboard into dedicated workflow with path filters and art…
pratyush618 Apr 24, 2026
1c0c764
ci: proper dependabot for cargo, pip, pnpm, github-actions
pratyush618 Apr 24, 2026
ffd329b
ci: auto-label PRs by path (area/rust, area/python, area/dashboard, …)
pratyush618 Apr 24, 2026
756eb23
ci: add actionlint to lint workflow YAML on change
pratyush618 Apr 24, 2026
1febc7a
ci: enforce conventional-commit prefix on PR titles
pratyush618 Apr 24, 2026
f109f5e
ci: add CodeQL security scanning for python + typescript
pratyush618 Apr 24, 2026
1b6407c
fix(ci): generate route tree before typecheck
pratyush618 Apr 24, 2026
d7a8667
fix(tests): make SPA tests independent of frontend build
pratyush618 Apr 24, 2026
785b8e1
refactor(dashboard): inject StaticAssets instead of monkeypatching gl…
pratyush618 Apr 24, 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
113 changes: 97 additions & 16 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -1,17 +1,98 @@
version: 2
updates:
- package-ecosystem: cargo
directory: /
schedule:
interval: weekly
groups:
rust-deps:
patterns: ["*"]
- package-ecosystem: pip
directory: /
schedule:
interval: weekly
- package-ecosystem: github-actions
directory: /
schedule:
interval: monthly

# Weekly dependency updates across every ecosystem taskito uses.
# Patch + minor updates are grouped into one PR per ecosystem to keep
# review traffic low; major updates get their own PRs so they can be
# evaluated individually. Security advisories always open dedicated PRs.
updates:
# Rust (workspace Cargo.toml + per-crate)
- package-ecosystem: cargo
directory: /
schedule:
interval: weekly
day: monday
time: "06:00"
timezone: UTC
open-pull-requests-limit: 5
labels:
- dependencies
- area/rust
commit-message:
prefix: "chore(deps)"
include: scope
groups:
rust-deps:
update-types:
- patch
- minor

# Python (pyproject.toml — uv manages resolution)
- package-ecosystem: pip
directory: /
schedule:
interval: weekly
day: monday
time: "06:00"
timezone: UTC
open-pull-requests-limit: 5
labels:
- dependencies
- area/python
commit-message:
prefix: "chore(deps)"
include: scope
groups:
python-deps:
update-types:
- patch
- minor

# Dashboard (pnpm)
- package-ecosystem: npm
directory: /dashboard
schedule:
interval: weekly
day: monday
time: "06:00"
timezone: UTC
open-pull-requests-limit: 5
labels:
- dependencies
- area/dashboard
commit-message:
prefix: "chore(deps)"
include: scope
groups:
dashboard-deps:
update-types:
- patch
- minor
# Surface Radix + TanStack ecosystem upgrades together when they
# co-release — lets us pin compatible sets in a single PR.
radix:
patterns:
- "@radix-ui/*"
tanstack:
patterns:
- "@tanstack/*"

# GitHub Actions used in .github/workflows/*.yml
- package-ecosystem: github-actions
directory: /
schedule:
interval: weekly
day: monday
time: "06:00"
timezone: UTC
open-pull-requests-limit: 3
labels:
- dependencies
- area/ci
commit-message:
prefix: "chore(ci)"
groups:
actions:
update-types:
- patch
- minor
- major
61 changes: 61 additions & 0 deletions .github/labeler.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
# Path-based PR auto-labels. Drives triage, filtering, and release-notes
# grouping. Each area label is additive — a PR touching Rust + docs gets
# both `area/rust` and `area/docs`.

area/rust:
- changed-files:
- any-glob-to-any-file:
- "crates/**"
- "Cargo.toml"
- "Cargo.lock"

area/python:
- changed-files:
- any-glob-to-any-file:
- "py_src/**"
- "pyproject.toml"
- "uv.lock"

area/dashboard:
- changed-files:
- any-glob-to-any-file:
- "dashboard/**"

area/docs:
- changed-files:
- any-glob-to-any-file:
- "docs/**"
- "README.md"
- "CHANGELOG.md"
- "**/*.md"

area/tests:
- changed-files:
- any-glob-to-any-file:
- "tests/**"
- "**/*_test.py"
- "**/test_*.py"
- "**/*.test.ts"
- "**/*.test.tsx"

area/ci:
- changed-files:
- any-glob-to-any-file:
- ".github/**"
- ".pre-commit-config.yaml"

area/storage:
- changed-files:
- any-glob-to-any-file:
- "crates/taskito-core/src/storage/**"

area/scheduler:
- changed-files:
- any-glob-to-any-file:
- "crates/taskito-core/src/scheduler/**"

area/workflows:
- changed-files:
- any-glob-to-any-file:
- "crates/taskito-core/src/workflow*/**"
- "py_src/taskito/workflows/**"
28 changes: 28 additions & 0 deletions .github/workflows/actionlint.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
name: Actionlint

on:
push:
branches: [master]
paths:
- ".github/workflows/**"
- ".github/actionlint.yaml"
pull_request:
branches: [master]
paths:
- ".github/workflows/**"
- ".github/actionlint.yaml"

permissions:
contents: read

jobs:
actionlint:
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- uses: actions/checkout@v6

- name: Run actionlint
uses: raven-actions/actionlint@v2
with:
matcher: true
29 changes: 0 additions & 29 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -53,35 +53,6 @@ jobs:
- name: Mypy
run: uv run mypy py_src/taskito/ tests/python/ --no-incremental

dashboard-lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6

- name: Set up pnpm
uses: pnpm/action-setup@v4
with:
version: "10.30.3"

- name: Set up Node.js
uses: actions/setup-node@v6
with:
node-version: "22"
cache: "pnpm"
cache-dependency-path: dashboard/pnpm-lock.yaml

- name: Install dependencies
run: cd dashboard && pnpm install --frozen-lockfile

- name: Biome lint + format check
run: cd dashboard && pnpm exec biome ci src/

- name: TypeScript check
run: cd dashboard && pnpm exec tsc --noEmit

- name: Build check
run: cd dashboard && pnpm exec vite build

rust-test:
runs-on: ubuntu-latest
steps:
Expand Down
45 changes: 45 additions & 0 deletions .github/workflows/codeql.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
name: CodeQL

on:
push:
branches: [master]
pull_request:
branches: [master]
schedule:
# Weekly scan so advisories added after merge still catch regressions.
- cron: "0 6 * * 1"

permissions:
contents: read

jobs:
analyze:
name: Analyze (${{ matrix.language }})
runs-on: ubuntu-latest
timeout-minutes: 30
permissions:
security-events: write
actions: read
contents: read
strategy:
fail-fast: false
matrix:
include:
- language: python
build-mode: none
- language: javascript-typescript
build-mode: none
steps:
- uses: actions/checkout@v6

- name: Initialize CodeQL
uses: github/codeql-action/init@v3
with:
languages: ${{ matrix.language }}
build-mode: ${{ matrix.build-mode }}
queries: security-extended

- name: Perform analysis
uses: github/codeql-action/analyze@v3
with:
category: "/language:${{ matrix.language }}"
85 changes: 85 additions & 0 deletions .github/workflows/dashboard.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
name: Dashboard

on:
push:
branches: [master]
paths:
- "dashboard/**"
- ".github/workflows/dashboard.yml"
pull_request:
branches: [master]
paths:
- "dashboard/**"
- ".github/workflows/dashboard.yml"

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

defaults:
run:
working-directory: dashboard

jobs:
ci:
name: lint · typecheck · test · build
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@v6

- name: Set up pnpm
uses: pnpm/action-setup@v4
with:
version: "10.30.3"

- name: Set up Node.js
uses: actions/setup-node@v6
with:
node-version: "22"
cache: "pnpm"
cache-dependency-path: dashboard/pnpm-lock.yaml

- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Generate route tree
# TanStack Router's file-based tree is a build artifact; tsc needs
# it to resolve route imports.
run: pnpm exec tsr generate

- name: Biome (lint + format)
run: pnpm exec biome ci src/

- name: TypeScript check
run: pnpm exec tsc --noEmit

- name: Unit tests (vitest)
run: pnpm exec vitest run

- name: Build
run: pnpm exec vite build

- name: Bundle size summary
if: always()
run: |
set -e
{
echo "### Dashboard bundle"
echo
echo "| File | Size | Gzipped |"
echo "|------|-----:|--------:|"
find ../py_src/taskito/static/dashboard -type f \( -name "*.js" -o -name "*.css" -o -name "*.html" \) | sort | while read -r f; do
raw=$(stat -c%s "$f")
gz=$(gzip -c "$f" | wc -c)
printf "| \`%s\` | %s | %s |\n" "${f#../py_src/taskito/static/dashboard/}" "$(numfmt --to=iec --suffix=B "$raw")" "$(numfmt --to=iec --suffix=B "$gz")"
done
} >> "$GITHUB_STEP_SUMMARY"

- name: Upload built assets
uses: actions/upload-artifact@v5
with:
name: dashboard-dist
path: py_src/taskito/static/dashboard/
retention-days: 7
if-no-files-found: error
18 changes: 18 additions & 0 deletions .github/workflows/labeler.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
name: Labeler

on:
pull_request_target:
types: [opened, synchronize, reopened]

permissions:
contents: read
pull-requests: write

jobs:
label:
runs-on: ubuntu-latest
steps:
- uses: actions/labeler@v5
with:
configuration-path: .github/labeler.yml
sync-labels: true
Loading
Loading