CICD now is aligned with pre-commit.
Some checks failed
Tests / Build and Push CICD Image (push) Successful in 49m20s
Tests / TOML Syntax Check (push) Successful in 30s
Tests / Mixed Line Ending Check (push) Successful in 26s
Tests / TOML Formatting Check (push) Successful in 41s
Tests / Ruff Linting (push) Successful in 25s
Tests / Ruff Format Check (push) Successful in 29s
Tests / Pyright Type Check (push) Failing after 37s
Tests / Darglint Docstring Check (push) Successful in 38s
Tests / No Docstring Types Check (push) Successful in 25s
Tests / ESLint Check (push) Successful in 59s
Tests / YAML Syntax Check (push) Successful in 7m5s
Tests / Prettier Format Check (push) Successful in 52s
Tests / Backend Tests (push) Failing after 31s
Tests / TypeScript Type Check (push) Successful in 2m12s
Tests / Backend Doctests (push) Successful in 1m29s
Tests / Integration Tests (push) Has been skipped
Tests / End-to-End Tests (push) Has been skipped
Tests / Frontend Tests (push) Failing after 1m36s
Tests / End of File Check (push) Successful in 9m45s
Tests / TSDoc Lint Check (push) Failing after 13m8s
Tests / Trailing Whitespace Check (push) Failing after 13m13s

Signed-off-by: Cliff Hill <xlorep@darkhelm.org>
This commit is contained in:
2025-10-30 10:02:17 -04:00
parent 4a14a3ba65
commit fdbce98be6
4 changed files with 63 additions and 156 deletions

View File

@@ -96,23 +96,12 @@ jobs:
steps: steps:
- name: Login to Gitea Container Registry - name: Login to Gitea Container Registry
run: echo "${{ secrets.PACKAGE_ACCESS_TOKEN }}" | docker login dogar.darkhelm.org -u ${{ github.actor }} --password-stdin run: echo "${{ secrets.PACKAGE_ACCESS_TOKEN }}" | docker login dogar.darkhelm.org -u ${{ github.actor }} --password-stdin
- name: Check trailing whitespace - name: Check trailing whitespace with pre-commit
run: | run: |
docker pull dogar.darkhelm.org/darkhelm.org/plex-playlist/cicd:${GITHUB_SHA:-latest} docker pull dogar.darkhelm.org/darkhelm.org/plex-playlist/cicd:${GITHUB_SHA:-latest}
docker run --rm dogar.darkhelm.org/darkhelm.org/plex-playlist/cicd:${GITHUB_SHA:-latest} bash -c " docker run --rm dogar.darkhelm.org/darkhelm.org/plex-playlist/cicd:${GITHUB_SHA:-latest} bash -c "
cd /workspace && cd /workspace &&
if find . -type f \( -name '*.js' -o -name '*.ts' -o -name '*.vue' -o -name '*.json' -o -name '*.yml' -o -name '*.yaml' -o -name '*.py' -o -name '*.md' -o -name '*.txt' -o -name '*.sh' \) \ pre-commit run trailing-whitespace --all-files --show-diff-on-failure
-not -path '*/node_modules/*' \
-not -path '*/.venv/*' \
-not -path '*/__pycache__/*' \
-not -path '*/.git/*' \
-not -path '*/.yarn/*' \
-exec grep -l '[[:space:]]$' {} \; 2>/dev/null | head -10; then
echo 'ERROR: Trailing whitespace found'
exit 1
else
echo '✓ No trailing whitespace found'
fi
" "
end-of-file-fixer: end-of-file-fixer:
@@ -122,23 +111,12 @@ jobs:
steps: steps:
- name: Login to Gitea Container Registry - name: Login to Gitea Container Registry
run: echo "${{ secrets.PACKAGE_ACCESS_TOKEN }}" | docker login dogar.darkhelm.org -u ${{ github.actor }} --password-stdin run: echo "${{ secrets.PACKAGE_ACCESS_TOKEN }}" | docker login dogar.darkhelm.org -u ${{ github.actor }} --password-stdin
- name: Check end of file - name: Check end of file with pre-commit
run: | run: |
docker pull dogar.darkhelm.org/darkhelm.org/plex-playlist/cicd:${GITHUB_SHA:-latest} docker pull dogar.darkhelm.org/darkhelm.org/plex-playlist/cicd:${GITHUB_SHA:-latest}
docker run --rm dogar.darkhelm.org/darkhelm.org/plex-playlist/cicd:${GITHUB_SHA:-latest} bash -c " docker run --rm dogar.darkhelm.org/darkhelm.org/plex-playlist/cicd:${GITHUB_SHA:-latest} bash -c "
cd /workspace && cd /workspace &&
find . -type f \( -name '*.py' -o -name '*.ts' -o -name '*.js' -o -name '*.vue' -o -name '*.yml' -o -name '*.yaml' -o -name '*.toml' -o -name '*.json' -o -name '*.md' \) \ pre-commit run end-of-file-fixer --all-files --show-diff-on-failure
-not -path '*/node_modules/*' \
-not -path '*/.venv/*' \
-not -path '*/__pycache__/*' \
-not -path '*/.git/*' \
-not -path '*/.yarn/*' | while read file; do
if [ -s \"\$file\" ] && [ \"\$(tail -c1 \"\$file\" | wc -l)\" -eq 0 ]; then
echo \"ERROR: \$file does not end with newline\"
exit 1
fi
done &&
echo '✓ All files end with newline'
" "
check-yaml: check-yaml:
@@ -148,26 +126,12 @@ jobs:
steps: steps:
- name: Login to Gitea Container Registry - name: Login to Gitea Container Registry
run: echo "${{ secrets.PACKAGE_ACCESS_TOKEN }}" | docker login dogar.darkhelm.org -u ${{ github.actor }} --password-stdin run: echo "${{ secrets.PACKAGE_ACCESS_TOKEN }}" | docker login dogar.darkhelm.org -u ${{ github.actor }} --password-stdin
- name: Check YAML files - name: Check YAML files with pre-commit
run: | run: |
docker pull dogar.darkhelm.org/darkhelm.org/plex-playlist/cicd:${GITHUB_SHA:-latest} docker pull dogar.darkhelm.org/darkhelm.org/plex-playlist/cicd:${GITHUB_SHA:-latest}
docker run --rm dogar.darkhelm.org/darkhelm.org/plex-playlist/cicd:${GITHUB_SHA:-latest} bash -c " docker run --rm dogar.darkhelm.org/darkhelm.org/plex-playlist/cicd:${GITHUB_SHA:-latest} bash -c "
cd /workspace/backend &&
source .venv/bin/activate &&
cd /workspace && cd /workspace &&
find . -type f \( -name '*.yml' -o -name '*.yaml' \) \ pre-commit run check-yaml --all-files --show-diff-on-failure
-not -path '*/node_modules/*' \
-not -path '*/.venv/*' \
-not -path '*/__pycache__/*' \
-not -path '*/.git/*' \
-not -path '*/.yarn/*' | while read file; do
echo \"Linting \$file...\"
if ! uv run yamllint \"\$file\"; then
echo \"ERROR: YAML lint failed for \$file\"
exit 1
fi
done &&
echo '✓ All YAML files passed yamllint'
" "
check-toml: check-toml:
@@ -177,26 +141,12 @@ jobs:
steps: steps:
- name: Login to Gitea Container Registry - name: Login to Gitea Container Registry
run: echo "${{ secrets.PACKAGE_ACCESS_TOKEN }}" | docker login dogar.darkhelm.org -u ${{ github.actor }} --password-stdin run: echo "${{ secrets.PACKAGE_ACCESS_TOKEN }}" | docker login dogar.darkhelm.org -u ${{ github.actor }} --password-stdin
- name: Check TOML files - name: Check TOML files with pre-commit
run: | run: |
docker pull dogar.darkhelm.org/darkhelm.org/plex-playlist/cicd:${GITHUB_SHA:-latest} docker pull dogar.darkhelm.org/darkhelm.org/plex-playlist/cicd:${GITHUB_SHA:-latest}
docker run --rm dogar.darkhelm.org/darkhelm.org/plex-playlist/cicd:${GITHUB_SHA:-latest} bash -c " docker run --rm dogar.darkhelm.org/darkhelm.org/plex-playlist/cicd:${GITHUB_SHA:-latest} bash -c "
cd /workspace/backend &&
source .venv/bin/activate &&
cd /workspace && cd /workspace &&
find . -type f -name '*.toml' \ pre-commit run check-toml --all-files --show-diff-on-failure
-not -path '*/node_modules/*' \
-not -path '*/.venv/*' \
-not -path '*/__pycache__/*' \
-not -path '*/.git/*' \
-not -path '*/.yarn/*' | while read file; do
echo \"Checking \$file syntax...\"
if ! python3 -c 'import tomllib, sys; tomllib.load(open(sys.argv[1], \"rb\"))' \"\$file\" 2>/dev/null; then
echo \"ERROR: Invalid TOML syntax in \$file\"
exit 1
fi
done &&
echo '✓ All TOML files have valid syntax'
" "
mixed-line-ending: mixed-line-ending:
@@ -206,22 +156,12 @@ jobs:
steps: steps:
- name: Login to Gitea Container Registry - name: Login to Gitea Container Registry
run: echo "${{ secrets.PACKAGE_ACCESS_TOKEN }}" | docker login dogar.darkhelm.org -u ${{ github.actor }} --password-stdin run: echo "${{ secrets.PACKAGE_ACCESS_TOKEN }}" | docker login dogar.darkhelm.org -u ${{ github.actor }} --password-stdin
- name: Check line endings - name: Check line endings with pre-commit
run: | run: |
docker pull dogar.darkhelm.org/darkhelm.org/plex-playlist/cicd:${GITHUB_SHA:-latest} docker pull dogar.darkhelm.org/darkhelm.org/plex-playlist/cicd:${GITHUB_SHA:-latest}
docker run --rm dogar.darkhelm.org/darkhelm.org/plex-playlist/cicd:${GITHUB_SHA:-latest} bash -c " docker run --rm dogar.darkhelm.org/darkhelm.org/plex-playlist/cicd:${GITHUB_SHA:-latest} bash -c "
cd /workspace && cd /workspace &&
if find . -type f \( -name '*.py' -o -name '*.ts' -o -name '*.js' -o -name '*.vue' -o -name '*.yml' -o -name '*.yaml' -o -name '*.toml' -o -name '*.json' -o -name '*.md' \) \ pre-commit run mixed-line-ending --all-files --show-diff-on-failure
-not -path '*/node_modules/*' \
-not -path '*/.venv/*' \
-not -path '*/__pycache__/*' \
-not -path '*/.git/*' \
-not -path '*/.yarn/*' | xargs file | grep -i 'crlf'; then
echo 'ERROR: Mixed line endings found (CRLF detected)'
exit 1
else
echo '✓ Consistent line endings (LF)'
fi
" "
toml-lint: toml-lint:
@@ -231,42 +171,12 @@ jobs:
steps: steps:
- name: Login to Gitea Container Registry - name: Login to Gitea Container Registry
run: echo "${{ secrets.PACKAGE_ACCESS_TOKEN }}" | docker login dogar.darkhelm.org -u ${{ github.actor }} --password-stdin run: echo "${{ secrets.PACKAGE_ACCESS_TOKEN }}" | docker login dogar.darkhelm.org -u ${{ github.actor }} --password-stdin
- name: Check TOML formatting - name: Check TOML formatting with pre-commit
run: | run: |
docker pull dogar.darkhelm.org/darkhelm.org/plex-playlist/cicd:${GITHUB_SHA:-latest} docker pull dogar.darkhelm.org/darkhelm.org/plex-playlist/cicd:${GITHUB_SHA:-latest}
docker run --rm dogar.darkhelm.org/darkhelm.org/plex-playlist/cicd:${GITHUB_SHA:-latest} bash -c " docker run --rm dogar.darkhelm.org/darkhelm.org/plex-playlist/cicd:${GITHUB_SHA:-latest} bash -c "
cd /workspace/backend &&
source .venv/bin/activate &&
cd /workspace && cd /workspace &&
echo 'Checking TOML formatting (fails if changes needed)...' && pre-commit run pretty-format-toml --all-files --show-diff-on-failure
format_needed=false &&
for file in \$(find . -type f -name '*.toml' \
-not -path '*/node_modules/*' \
-not -path '*/.venv/*' \
-not -path '*/__pycache__/*' \
-not -path '*/.git/*' \
-not -path '*/.yarn/*'); do
echo \"Checking TOML format: \$file\"
# Create a temporary formatted version
temp_file=\"\$file.tmp\"
uv run pretty-format-toml \"\$file\" > \"\$temp_file\" 2>/dev/null || {
echo \"ERROR: Failed to format \$file\"
rm -f \"\$temp_file\"
exit 1
}
# Compare original with formatted version
if ! diff -q \"\$file\" \"\$temp_file\" >/dev/null 2>&1; then
echo \"ERROR: \$file needs formatting\"
echo \"Diff:\"
diff \"\$file\" \"\$temp_file\" || true
format_needed=true
fi
rm -f \"\$temp_file\"
done &&
if [ \"\$format_needed\" = \"true\" ]; then
exit 1
fi &&
echo '✓ All TOML files are properly formatted'
" "
# Backend Python checks # Backend Python checks
@@ -277,14 +187,12 @@ jobs:
steps: steps:
- name: Login to Gitea Container Registry - name: Login to Gitea Container Registry
run: echo "${{ secrets.PACKAGE_ACCESS_TOKEN }}" | docker login dogar.darkhelm.org -u ${{ github.actor }} --password-stdin run: echo "${{ secrets.PACKAGE_ACCESS_TOKEN }}" | docker login dogar.darkhelm.org -u ${{ github.actor }} --password-stdin
- name: Run ruff linting - name: Run ruff linting with pre-commit
run: | run: |
docker pull dogar.darkhelm.org/darkhelm.org/plex-playlist/cicd:${GITHUB_SHA:-latest} docker pull dogar.darkhelm.org/darkhelm.org/plex-playlist/cicd:${GITHUB_SHA:-latest}
docker run --rm dogar.darkhelm.org/darkhelm.org/plex-playlist/cicd:${GITHUB_SHA:-latest} bash -c " docker run --rm dogar.darkhelm.org/darkhelm.org/plex-playlist/cicd:${GITHUB_SHA:-latest} bash -c "
cd /workspace/backend && cd /workspace &&
source .venv/bin/activate && pre-commit run ruff --all-files --show-diff-on-failure
echo 'Running ruff check (no auto-fix)...' &&
uv run ruff check . --config=pyproject.toml
" "
ruff-format: ruff-format:
@@ -294,14 +202,12 @@ jobs:
steps: steps:
- name: Login to Gitea Container Registry - name: Login to Gitea Container Registry
run: echo "${{ secrets.PACKAGE_ACCESS_TOKEN }}" | docker login dogar.darkhelm.org -u ${{ github.actor }} --password-stdin run: echo "${{ secrets.PACKAGE_ACCESS_TOKEN }}" | docker login dogar.darkhelm.org -u ${{ github.actor }} --password-stdin
- name: Check ruff formatting - name: Check ruff formatting with pre-commit
run: | run: |
docker pull dogar.darkhelm.org/darkhelm.org/plex-playlist/cicd:${GITHUB_SHA:-latest} docker pull dogar.darkhelm.org/darkhelm.org/plex-playlist/cicd:${GITHUB_SHA:-latest}
docker run --rm dogar.darkhelm.org/darkhelm.org/plex-playlist/cicd:${GITHUB_SHA:-latest} bash -c " docker run --rm dogar.darkhelm.org/darkhelm.org/plex-playlist/cicd:${GITHUB_SHA:-latest} bash -c "
cd /workspace/backend && cd /workspace &&
source .venv/bin/activate && pre-commit run ruff-format --all-files --show-diff-on-failure
echo 'Checking ruff formatting (fails if changes needed)...' &&
uv run ruff format --check . --config=pyproject.toml
" "
pyright: pyright:
@@ -311,13 +217,12 @@ jobs:
steps: steps:
- name: Login to Gitea Container Registry - name: Login to Gitea Container Registry
run: echo "${{ secrets.PACKAGE_ACCESS_TOKEN }}" | docker login dogar.darkhelm.org -u ${{ github.actor }} --password-stdin run: echo "${{ secrets.PACKAGE_ACCESS_TOKEN }}" | docker login dogar.darkhelm.org -u ${{ github.actor }} --password-stdin
- name: Run pyright type checking - name: Run pyright type checking with pre-commit
run: | run: |
docker pull dogar.darkhelm.org/darkhelm.org/plex-playlist/cicd:${GITHUB_SHA:-latest} docker pull dogar.darkhelm.org/darkhelm.org/plex-playlist/cicd:${GITHUB_SHA:-latest}
docker run --rm dogar.darkhelm.org/darkhelm.org/plex-playlist/cicd:${GITHUB_SHA:-latest} bash -c " docker run --rm dogar.darkhelm.org/darkhelm.org/plex-playlist/cicd:${GITHUB_SHA:-latest} bash -c "
cd /workspace/backend && cd /workspace &&
source .venv/bin/activate && pre-commit run pyright --all-files --show-diff-on-failure
uv run pyright
" "
darglint: darglint:
@@ -327,13 +232,12 @@ jobs:
steps: steps:
- name: Login to Gitea Container Registry - name: Login to Gitea Container Registry
run: echo "${{ secrets.PACKAGE_ACCESS_TOKEN }}" | docker login dogar.darkhelm.org -u ${{ github.actor }} --password-stdin run: echo "${{ secrets.PACKAGE_ACCESS_TOKEN }}" | docker login dogar.darkhelm.org -u ${{ github.actor }} --password-stdin
- name: Run darglint docstring linting - name: Run darglint docstring linting with pre-commit
run: | run: |
docker pull dogar.darkhelm.org/darkhelm.org/plex-playlist/cicd:${GITHUB_SHA:-latest} docker pull dogar.darkhelm.org/darkhelm.org/plex-playlist/cicd:${GITHUB_SHA:-latest}
docker run --rm dogar.darkhelm.org/darkhelm.org/plex-playlist/cicd:${GITHUB_SHA:-latest} bash -c " docker run --rm dogar.darkhelm.org/darkhelm.org/plex-playlist/cicd:${GITHUB_SHA:-latest} bash -c "
cd /workspace/backend && cd /workspace &&
source .venv/bin/activate && pre-commit run darglint --all-files --show-diff-on-failure
uv run darglint src/
" "
no-docstring-types: no-docstring-types:
@@ -343,14 +247,12 @@ jobs:
steps: steps:
- name: Login to Gitea Container Registry - name: Login to Gitea Container Registry
run: echo "${{ secrets.PACKAGE_ACCESS_TOKEN }}" | docker login dogar.darkhelm.org -u ${{ github.actor }} --password-stdin run: echo "${{ secrets.PACKAGE_ACCESS_TOKEN }}" | docker login dogar.darkhelm.org -u ${{ github.actor }} --password-stdin
- name: Check for types in docstrings - name: Run no docstring types check with pre-commit
run: | run: |
docker pull dogar.darkhelm.org/darkhelm.org/plex-playlist/cicd:${GITHUB_SHA:-latest} docker pull dogar.darkhelm.org/darkhelm.org/plex-playlist/cicd:${GITHUB_SHA:-latest}
docker run --rm dogar.darkhelm.org/darkhelm.org/plex-playlist/cicd:${GITHUB_SHA:-latest} bash -c " docker run --rm dogar.darkhelm.org/darkhelm.org/plex-playlist/cicd:${GITHUB_SHA:-latest} bash -c "
cd /workspace && cd /workspace &&
echo 'Checking backend Python files for types in docstrings...' && pre-commit run no-docstring-types --all-files --show-diff-on-failure
find backend/src -name '*.py' -type f | xargs python3 scripts/check_no_docstring_types.py &&
echo '✓ No prohibited types found in docstrings'
" "
# Frontend checks # Frontend checks
@@ -361,13 +263,12 @@ jobs:
steps: steps:
- name: Login to Gitea Container Registry - name: Login to Gitea Container Registry
run: echo "${{ secrets.PACKAGE_ACCESS_TOKEN }}" | docker login dogar.darkhelm.org -u ${{ github.actor }} --password-stdin run: echo "${{ secrets.PACKAGE_ACCESS_TOKEN }}" | docker login dogar.darkhelm.org -u ${{ github.actor }} --password-stdin
- name: Run ESLint - name: Run ESLint with pre-commit
run: | run: |
docker pull dogar.darkhelm.org/darkhelm.org/plex-playlist/cicd:${GITHUB_SHA:-latest} docker pull dogar.darkhelm.org/darkhelm.org/plex-playlist/cicd:${GITHUB_SHA:-latest}
docker run --rm dogar.darkhelm.org/darkhelm.org/plex-playlist/cicd:${GITHUB_SHA:-latest} bash -c " docker run --rm dogar.darkhelm.org/darkhelm.org/plex-playlist/cicd:${GITHUB_SHA:-latest} bash -c "
cd /workspace/frontend && cd /workspace &&
echo 'Running ESLint check (no auto-fix)...' && pre-commit run eslint --all-files --show-diff-on-failure
yarn eslint . --max-warnings=0
" "
prettier: prettier:
@@ -377,13 +278,12 @@ jobs:
steps: steps:
- name: Login to Gitea Container Registry - name: Login to Gitea Container Registry
run: echo "${{ secrets.PACKAGE_ACCESS_TOKEN }}" | docker login dogar.darkhelm.org -u ${{ github.actor }} --password-stdin run: echo "${{ secrets.PACKAGE_ACCESS_TOKEN }}" | docker login dogar.darkhelm.org -u ${{ github.actor }} --password-stdin
- name: Check Prettier formatting - name: Check Prettier formatting with pre-commit
run: | run: |
docker pull dogar.darkhelm.org/darkhelm.org/plex-playlist/cicd:${GITHUB_SHA:-latest} docker pull dogar.darkhelm.org/darkhelm.org/plex-playlist/cicd:${GITHUB_SHA:-latest}
docker run --rm dogar.darkhelm.org/darkhelm.org/plex-playlist/cicd:${GITHUB_SHA:-latest} bash -c " docker run --rm dogar.darkhelm.org/darkhelm.org/plex-playlist/cicd:${GITHUB_SHA:-latest} bash -c "
cd /workspace/frontend && cd /workspace &&
echo 'Checking Prettier formatting (fails if changes needed)...' && pre-commit run prettier --all-files --show-diff-on-failure
yarn format:check
" "
typescript-check: typescript-check:
@@ -393,12 +293,12 @@ jobs:
steps: steps:
- name: Login to Gitea Container Registry - name: Login to Gitea Container Registry
run: echo "${{ secrets.PACKAGE_ACCESS_TOKEN }}" | docker login dogar.darkhelm.org -u ${{ github.actor }} --password-stdin run: echo "${{ secrets.PACKAGE_ACCESS_TOKEN }}" | docker login dogar.darkhelm.org -u ${{ github.actor }} --password-stdin
- name: Run TypeScript type checking - name: Run TypeScript type checking with pre-commit
run: | run: |
docker pull dogar.darkhelm.org/darkhelm.org/plex-playlist/cicd:${GITHUB_SHA:-latest} docker pull dogar.darkhelm.org/darkhelm.org/plex-playlist/cicd:${GITHUB_SHA:-latest}
docker run --rm dogar.darkhelm.org/darkhelm.org/plex-playlist/cicd:${GITHUB_SHA:-latest} bash -c " docker run --rm dogar.darkhelm.org/darkhelm.org/plex-playlist/cicd:${GITHUB_SHA:-latest} bash -c "
cd /workspace/frontend && cd /workspace &&
yarn type-check pre-commit run typescript-check --all-files --show-diff-on-failure
" "
tsdoc-lint: tsdoc-lint:
@@ -408,14 +308,12 @@ jobs:
steps: steps:
- name: Login to Gitea Container Registry - name: Login to Gitea Container Registry
run: echo "${{ secrets.PACKAGE_ACCESS_TOKEN }}" | docker login dogar.darkhelm.org -u ${{ github.actor }} --password-stdin run: echo "${{ secrets.PACKAGE_ACCESS_TOKEN }}" | docker login dogar.darkhelm.org -u ${{ github.actor }} --password-stdin
- name: Run TSDoc linting - name: Run TSDoc linting with pre-commit
run: | run: |
docker pull dogar.darkhelm.org/darkhelm.org/plex-playlist/cicd:${GITHUB_SHA:-latest} docker pull dogar.darkhelm.org/darkhelm.org/plex-playlist/cicd:${GITHUB_SHA:-latest}
docker run --rm dogar.darkhelm.org/darkhelm.org/plex-playlist/cicd:${GITHUB_SHA:-latest} bash -c " docker run --rm dogar.darkhelm.org/darkhelm.org/plex-playlist/cicd:${GITHUB_SHA:-latest} bash -c "
cd /workspace/frontend && cd /workspace &&
echo 'Running TSDoc linting check...' && pre-commit run tsdoc-lint --all-files --show-diff-on-failure
# Use eslint directly without --fix to check TSDoc
yarn eslint . --ext .ts,.vue --max-warnings=0 --no-fix
" "
# Unit tests with coverage # Unit tests with coverage

View File

@@ -26,30 +26,29 @@ repos:
# Linter # Linter
- id: ruff - id: ruff
name: ruff-lint name: ruff-lint
entry: backend/.venv/bin/ruff check --fix entry: bash -c 'cd backend && uv run ruff check --fix . --config=pyproject.toml'
language: system language: system
files: ^backend/ files: ^backend/
types: [python] types: [python]
args: [--config=backend/pyproject.toml] pass_filenames: false
# Formatter # Formatter
- id: ruff-format - id: ruff-format
name: ruff-format name: ruff-format
entry: backend/.venv/bin/ruff format entry: bash -c 'cd backend && uv run ruff format . --config=pyproject.toml'
language: system language: system
files: ^backend/ files: ^backend/
types: [python] types: [python]
args: [--config=backend/pyproject.toml] pass_filenames: false
# Python type checking with pyright # Python type checking with pyright
- repo: local - repo: local
hooks: hooks:
- id: pyright - id: pyright
name: pyright name: pyright
entry: backend/.venv/bin/pyright entry: bash -c 'cd backend && uv run pyright . --project=.'
language: system language: system
files: ^backend/ files: ^backend/
types: [python] types: [python]
args: [--pythonpath=backend/.venv/bin/python, backend]
pass_filenames: false pass_filenames: false
# Python docstring linting with darglint # Python docstring linting with darglint
@@ -57,10 +56,11 @@ repos:
hooks: hooks:
- id: darglint - id: darglint
name: darglint name: darglint
entry: backend/.venv/bin/darglint entry: bash -c 'cd backend && find . -name "*.py" -not -path "./.venv/*" -exec uv run darglint {} \;'
language: system language: system
files: ^backend/.*\.py$ files: ^backend/.*\.py$
types: [python] types: [python]
pass_filenames: false
# Custom hook to enforce no types in docstrings # Custom hook to enforce no types in docstrings
- repo: local - repo: local
@@ -75,34 +75,34 @@ repos:
# Frontend linting and formatting # Frontend linting and formatting
- repo: local - repo: local
hooks: hooks:
# ESLint (basic linting only for now) # ESLint with auto-fix for pre-commit (CI uses --no-fix)
- id: eslint - id: eslint
name: eslint name: eslint
entry: bash -c 'cd frontend && npm run lint:fix' entry: bash -c 'cd frontend && yarn eslint . --fix'
language: system language: system
files: ^frontend/.*\.(js|ts|vue)$ files: ^frontend/.*\.(js|ts|vue)$
pass_filenames: false pass_filenames: false
# Prettier # Prettier with auto-format for pre-commit (CI uses --check)
- id: prettier - id: prettier
name: prettier name: prettier
entry: bash -c 'cd frontend && npm run format' entry: bash -c 'cd frontend && yarn prettier --write src/'
language: system language: system
files: ^frontend/.*\.(js|ts|vue|json|css|scss|md)$ files: ^frontend/.*\.(js|ts|vue|json|css|scss|md)$
pass_filenames: false pass_filenames: false
# TypeScript type checking # TypeScript type checking (same as CI)
- id: typescript-check - id: typescript-check
name: typescript-check name: typescript-check
entry: bash -c 'cd frontend && npm run type-check' entry: bash -c 'cd frontend && yarn vue-tsc --noEmit'
language: system language: system
files: ^frontend/.*\.(ts|vue)$ files: ^frontend/.*\.(ts|vue)$
pass_filenames: false pass_filenames: false
# TSDoc linting # TSDoc linting with auto-fix for pre-commit (CI uses --no-fix)
- id: tsdoc-lint - id: tsdoc-lint
name: tsdoc-lint name: tsdoc-lint
entry: bash -c 'cd frontend && npm run lint:tsdoc' entry: bash -c 'cd frontend && yarn eslint . --ext .ts,.vue --fix'
language: system language: system
files: ^frontend/.*\.(ts|vue)$ files: ^frontend/.*\.(ts|vue)$
pass_filenames: false pass_filenames: false

View File

@@ -141,6 +141,13 @@ RUN uv sync --dev
# Install backend package in development mode # Install backend package in development mode
RUN uv pip install -e . RUN uv pip install -e .
# Install pre-commit environments for CI validation
WORKDIR /workspace
RUN cd /workspace && \
echo "=== Installing Pre-commit Hook Environments ===" && \
uv run pre-commit install-hooks && \
echo "✓ Pre-commit hook environments installed successfully"
# Set up frontend dependencies # Set up frontend dependencies
WORKDIR /workspace/frontend WORKDIR /workspace/frontend
@@ -188,7 +195,8 @@ RUN cd /workspace/backend && \
uv run pytest --version && \ uv run pytest --version && \
uv run yamllint --version && \ uv run yamllint --version && \
uv run toml-sort --version && \ uv run toml-sort --version && \
uv run xdoctest --version uv run xdoctest --version && \
uv run pre-commit --version
RUN cd /workspace/frontend && \ RUN cd /workspace/frontend && \
echo "=== Frontend Tools Verification ===" && \ echo "=== Frontend Tools Verification ===" && \

View File

@@ -14,6 +14,7 @@ dev = [
"httpx>=0.25.0", # For testing async HTTP calls "httpx>=0.25.0", # For testing async HTTP calls
"pytest-mock>=3.12.0", "pytest-mock>=3.12.0",
# File format and linting tools # File format and linting tools
"pre-commit>=3.0.0", # For running pre-commit hooks in CI
"pyyaml>=6.0", "pyyaml>=6.0",
"yamllint>=1.35.0", "yamllint>=1.35.0",
"toml-sort>=0.23.0", "toml-sort>=0.23.0",