Skip to content
Merged
Show file tree
Hide file tree
Changes from 6 commits
Commits
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
1 change: 1 addition & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
* text=auto eol=lf
tools/courses.json merge=theirs
2 changes: 1 addition & 1 deletion tools/.gitconfig → .gitconfig
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
[merge "theirs"]
name = Keep theirs during merge
driver = sh -c 'cat "$3" > "$1"'


48 changes: 48 additions & 0 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
name: Deploy to GitHub Pages

on:
workflow_run:
workflows: ["tests"]
branches: [main]
types: [completed]
workflow_dispatch:

permissions:
contents: read
pages: write
id-token: write

concurrency:
group: "pages"
cancel-in-progress: true

jobs:
build:
if: ${{ github.event_name == 'workflow_dispatch' || github.event.workflow_run.conclusion == 'success' }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.event_name == 'workflow_run' && github.event.workflow_run.head_sha || github.sha }}
- uses: pnpm/action-setup@v4
with:
version: 9
- uses: actions/setup-node@v4
with:
node-version: 20
cache: "pnpm"
- run: pnpm install --frozen-lockfile
- run: pnpm build
Comment on lines +27 to +35

Copilot AI Feb 14, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Deploy workflow pins pnpm v9 while the test/build workflow uses pnpm v10. Align the pnpm version across workflows to avoid subtle install/lockfile behavior differences between CI and deploy.

Copilot uses AI. Check for mistakes.
- uses: actions/upload-pages-artifact@v3
with:
path: dist

deploy:
needs: build
runs-on: ubuntu-latest
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
steps:
- uses: actions/deploy-pages@v4
id: deployment
82 changes: 81 additions & 1 deletion .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,38 @@ permissions:
contents: read

jobs:
changes:
runs-on: ubuntu-latest
outputs:
tools: ${{ steps.filter.outputs.tools }}
app: ${{ steps.filter.outputs.app }}
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Detect changed paths
id: filter
uses: dorny/paths-filter@v3
with:
filters: |
tools:
- "tools/**"
app:
- "src/**"
- "public/**"
- "package.json"
- "pnpm-lock.yaml"
- "next.config.ts"
- "tsconfig.json"
- "vite.config.ts"
- "vitest.config.ts"
- "biome.json"
- ".github/workflows/test.yml"

test:
runs-on: ubuntu-latest
needs: changes
if: ${{ needs.changes.outputs.app == 'true' }}
steps:
- name: Checkout
uses: actions/checkout@v4
Expand All @@ -29,7 +59,57 @@ jobs:
cache: pnpm

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

- name: Run lint
run: pnpm lint

- name: Run tests with coverage
run: pnpm test:coverage

build:
runs-on: ubuntu-latest
needs: changes
if: ${{ needs.changes.outputs.app == 'true' }}
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
version: 10
run_install: false

- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 20
cache: pnpm

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

- name: Run build
run: pnpm build

tools-test:
runs-on: ubuntu-latest
needs: changes
if: ${{ needs.changes.outputs.tools == 'true' }}
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Install uv
uses: astral-sh/setup-uv@v1
with:
python-version: "3.12"

- name: Sync env with uv
working-directory: tools
run: uv sync --frozen

- name: Run tools unit tests
working-directory: tools
run: uv run python -m unittest discover -s tests
103 changes: 99 additions & 4 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,15 @@

# testing
/coverage
test-results/
playwright-report/
blob-report/
.playwright/

# next.js
/.next/
/out/
# tanstack start
/.tanstack/
/.output/
/dist/

# production
/build
Expand All @@ -38,4 +43,94 @@ yarn-error.log*

# typescript
*.tsbuildinfo
next-env.d.ts

# tools (python)
tools/__pycache__/
tools/**/__pycache__/
tools/*.py[codz]
tools/*$py.class
tools/*.so
tools/.Python
tools/build/
tools/develop-eggs/
tools/dist/
tools/downloads/
tools/eggs/
tools/.eggs/
tools/lib/
tools/lib64/
tools/parts/
tools/sdist/
tools/var/
tools/wheels/
tools/share/python-wheels/
tools/*.egg-info/
tools/.installed.cfg
tools/*.egg
tools/MANIFEST
tools/*.manifest
tools/*.spec
tools/pip-log.txt
tools/pip-delete-this-directory.txt
tools/htmlcov/
tools/.tox/
tools/.nox/
tools/.coverage
tools/.coverage.*
tools/.cache
tools/nosetests.xml
tools/coverage.xml
tools/*.cover
tools/*.py.cover
tools/.hypothesis/
tools/.pytest_cache/
tools/**/.pytest_cache/
tools/cover/
tools/*.mo
tools/*.pot
tools/*.log
tools/local_settings.py
tools/db.sqlite3
tools/db.sqlite3-journal
tools/instance/
tools/.webassets-cache
tools/.scrapy
tools/docs/_build/
tools/.pybuilder/
tools/target/
tools/.ipynb_checkpoints
tools/profile_default/
tools/ipython_config.py
tools/__pypackages__/
tools/celerybeat-schedule
tools/celerybeat.pid
tools/*.sage.py
tools/.env
tools/.envrc
tools/.venv
tools/env/
tools/venv/
tools/ENV/
tools/env.bak/
tools/venv.bak/
tools/.spyderproject
tools/.spyproject
tools/.ropeproject
tools/site
tools/.mypy_cache/
tools/.dmypy.json
tools/dmypy.json
tools/.pyre/
tools/.pytype/
tools/cython_debug/
tools/.abstra/
tools/.cursorignore
tools/.cursorindexingignore
tools/.ruff_cache/
tools/.pypirc
tools/marimo/_static/
tools/marimo/_lsp/
tools/__marimo__/
tools/.DS_store
tools/data/
tools/file.rar
Loading
Loading