Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
73 commits
Select commit Hold shift + click to select a range
b25a1f0
fix: Update CI configuration to prevent failure on Codecov errors and…
Wikid82 Nov 17, 2025
d464ae8
Merge pull request #55 from Wikid82/development
Wikid82 Nov 18, 2025
d686fbb
fix: update ruff version requirement and use GITHUB_TOKEN for GHCR auth
Wikid82 Nov 18, 2025
f26a3a0
docs: simplify GitHub setup guide - no manual token needed
Wikid82 Nov 18, 2025
7abaf54
fix: add missing frontend dependencies and remove trailing whitespace
Wikid82 Nov 18, 2025
b605f2b
fix: exclude generated frontend files from pre-commit hooks
Wikid82 Nov 18, 2025
53e0d1b
fix: replace Python tests with Go and React tests in CI
Wikid82 Nov 18, 2025
87c1de3
fix: remove duplicate type declarations and update package-lock
Wikid82 Nov 18, 2025
12f60ae
feat: update docker-compose to use GHCR images and fix test failures
Wikid82 Nov 18, 2025
5330528
fix: use golang:alpine base image for backend builder
Wikid82 Nov 18, 2025
3c8a186
feat: add Dockerfile validation to pre-commit hooks
Wikid82 Nov 18, 2025
242aca6
chore: comprehensive update to ignore files
Wikid82 Nov 18, 2025
e0957e8
fix: Eliminate act() warnings in frontend tests and resolve Docker ar…
Wikid82 Nov 18, 2025
3ab4919
fix: Remove legacy Python lint job from CI workflow
Wikid82 Nov 18, 2025
931748a
chore: trigger workflows with updated action permissions
Wikid82 Nov 18, 2025
1a7683e
chore: test workflows after enabling all actions
Wikid82 Nov 18, 2025
ec38278
feat: Add Trivy security scanning to Docker workflows
Wikid82 Nov 18, 2025
09de535
fix: Correct Docker tag format in metadata action
Wikid82 Nov 18, 2025
0a8c4f3
fix: Remove SHA-based Docker tags causing invalid format errors
Wikid82 Nov 18, 2025
8ed51f8
fix(docker): set ROLLUP_SKIP_NODEJS_NATIVE=1 to avoid arm64 native Ro…
Wikid82 Nov 18, 2025
dc276b8
Docker: build frontend on BUILDPLATFORM to avoid arm64 Rollup native …
Wikid82 Nov 18, 2025
37a9720
CI: Add CodeQL analysis workflow with security-events permissions and…
Wikid82 Nov 18, 2025
3fc33e8
CI: Fix Trivy scan refs and guard SARIF upload; use metadata tags for…
Wikid82 Nov 18, 2025
d9fc550
CI: Generate PR tag via ref_name; skip push & security scan on PR
Wikid82 Nov 18, 2025
be0aa08
Reduce Trivy findings: drop bash, switch to /bin/sh entrypoint, pin t…
Wikid82 Nov 18, 2025
09ec3b7
CI: Pin Caddy base by digest in builds; enforce Trivy fail on CRITICA…
Wikid82 Nov 18, 2025
41f2255
CI: Add Renovate automation and Caddy v3 monitor; fix CADDY_IMAGE ARG…
Wikid82 Nov 18, 2025
caf2f0f
Merge pull request #57 from Wikid82/feature/renovate-caddy-monitor
Wikid82 Nov 18, 2025
9c21222
CI: Show Trivy table output before SARIF upload; always upload SARIF;…
Wikid82 Nov 18, 2025
8cf4259
chore(deps): bump golang.org/x/crypto to v0.31.0 (fix CVE-2024-45337)
Wikid82 Nov 18, 2025
af25f32
Merge pull request #58 from Wikid82/fix/crypto-cve-2024-45337
Wikid82 Nov 19, 2025
963ee79
ci: add checkout step to Renovate workflow so config file is available
Wikid82 Nov 19, 2025
1d59093
chore(ci): fix Renovate config and workflow; ensure checkout and vali…
Wikid82 Nov 19, 2025
3a5a690
chore(deps): pin dependencies
renovate[bot] Nov 19, 2025
6aba0ec
chore(deps): update dependency passlib to >=1.7.4
renovate[bot] Nov 19, 2025
8de5dd9
chore(deps): update dependency pytest to >=7.4.4
renovate[bot] Nov 19, 2025
57f18d6
chore(deps): update dependency python-multipart to >=0.0.20
renovate[bot] Nov 19, 2025
43a973e
chore(deps): update dependency sqlalchemy to >=2.0.44
renovate[bot] Nov 19, 2025
3777173
Merge branch 'main' into renovate/pin-dependencies
Wikid82 Nov 19, 2025
9dc188d
Merge pull request #60 from Wikid82/renovate/pin-dependencies
Wikid82 Nov 19, 2025
2ce6295
Merge pull request #61 from Wikid82/renovate/passlib-1.x
Wikid82 Nov 19, 2025
1b34983
Merge pull request #62 from Wikid82/renovate/pytest-7.x
Wikid82 Nov 19, 2025
e713535
Merge pull request #63 from Wikid82/renovate/python-multipart-0.x
Wikid82 Nov 19, 2025
8b5f7be
Merge pull request #64 from Wikid82/renovate/sqlalchemy-2.x
Wikid82 Nov 19, 2025
c19ad8f
fix(ci): lowercase IMAGE_NAME in workflows; fix Renovate packageRule …
Wikid82 Nov 19, 2025
af29864
chore(deps): pin dependencies
renovate[bot] Nov 19, 2025
62845ff
fix(ci): revert auto-add-to-project conditional; PROJECT_URL secret n…
Wikid82 Nov 19, 2025
f305f16
Merge branch 'main' into renovate/pin-dependencies
Wikid82 Nov 19, 2025
a642906
Merge pull request #66 from Wikid82/renovate/pin-dependencies
Wikid82 Nov 19, 2025
00d911b
fix(ci): normalize IMAGE_NAME to lowercase for registry compliance
Wikid82 Nov 19, 2025
b4a162b
chore(deps): pin dependencies
renovate[bot] Nov 19, 2025
953432b
chore(deps): update actions/add-to-project action to v0.6.1
renovate[bot] Nov 19, 2025
13db014
chore(deps): update dependency alembic to >=1.17.2
renovate[bot] Nov 19, 2025
042b2c6
chore(deps): update dependency bandit to >=1.9.1
renovate[bot] Nov 19, 2025
6a9aa42
chore(deps): update dependency black to >=24.10.0
renovate[bot] Nov 19, 2025
11b9972
chore(ci): skip add-to-project when PROJECT_URL secret absent
Wikid82 Nov 19, 2025
254b86e
ci: robust health check with retries; normalize IMAGE_NAME in publish…
Wikid82 Nov 19, 2025
df6fbc2
fix(runtime): remove invalid Caddy --adapter json; use native JSON co…
Wikid82 Nov 19, 2025
091a392
ci: skip heavy docker build/publish for renovate bot and chore(deps)/…
Wikid82 Nov 19, 2025
7934a86
fix(ci): correct indentation for skip summary step in docker-build
Wikid82 Nov 19, 2025
57d2601
fix(deps): downgrade ruff requirement to match available versions
Wikid82 Nov 19, 2025
490cbb6
fix(hooks): use python3 fallback in compile check script
Wikid82 Nov 19, 2025
5f0fc98
fix(ci): add continue-on-error to auto-add-to-project workflow
Wikid82 Nov 19, 2025
a82b369
fix(ci): use ADD_TO_PROJECT_PAT for project access (user projects req…
Wikid82 Nov 19, 2025
f2ad16c
ci(secrets): migrate GITHUB_TOKEN references to PROJECT_TOKEN secret
Wikid82 Nov 19, 2025
f0fed21
Merge branch 'main' into renovate/pin-dependencies
Wikid82 Nov 19, 2025
f0da6db
Merge pull request #71 from Wikid82/renovate/pin-dependencies
Wikid82 Nov 19, 2025
b38c312
Merge branch 'main' into renovate/actions-add-to-project-0.x
Wikid82 Nov 19, 2025
d498551
Merge pull request #72 from Wikid82/renovate/actions-add-to-project-0.x
Wikid82 Nov 19, 2025
23d3f7a
Merge branch 'main' into renovate/alembic-1.x
Wikid82 Nov 19, 2025
432b6eb
Merge pull request #73 from Wikid82/renovate/alembic-1.x
Wikid82 Nov 19, 2025
891a0a1
Merge pull request #74 from Wikid82/renovate/bandit-1.x
Wikid82 Nov 19, 2025
865d4f9
Merge branch 'main' into renovate/black-24.x
Wikid82 Nov 19, 2025
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
22 changes: 18 additions & 4 deletions .codecov.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,22 @@ coverage:
# Fail CI if Codecov upload/report indicates a problem
require_ci_to_pass: yes

# Exclude folders from Codecov (adjust as needed)
# Exclude folders from Codecov
ignore:
- tests/*
- docs/*
- .github/*
- "**/tests/*"
- "**/test/*"
- "**/__tests__/*"
- "**/test_*.go"
- "**/*_test.go"
- "**/*.test.ts"
- "**/*.test.tsx"
- "docs/*"
- ".github/*"
- "scripts/*"
- "tools/*"
- "frontend/node_modules/*"
- "frontend/dist/*"
- "frontend/coverage/*"
- "backend/cmd/seed/*"
- "backend/data/*"
- "*.md"
84 changes: 66 additions & 18 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -1,27 +1,75 @@
# Version control
.git
.gitignore
node_modules
venv
__pycache__
*.pyc
*.pyo
*.pyd
.github/

# Python
__pycache__/
*.py[cod]
*$py.class
*.so
.Python
.venv/
venv/
env/
build/
dist/
*.egg-info
.DS_Store
.idea/
.vscode/
.env
.env.*
coverage/
.coverage
ENV/
.pytest_cache/
*.log
.coverage
*.cover
.hypothesis/
htmlcov/
*.egg-info/

# Node/Frontend build artifacts
frontend/node_modules/
frontend/coverage/
frontend/.vite/
frontend/*.tsbuildinfo
# Keep frontend/dist - needed in final image

# Go/Backend
backend/*.out
backend/coverage.*.out
# Keep backend/api binary - needed in final image

# Databases (runtime)
backend/data/*.db
backend/cmd/api/data/*.db
*.sqlite
*.sqlite3

# IDE
.vscode/
.idea/
*.swp
*.swo
*~

# Logs
*.log
logs/

# Environment
.env.local
.env.*.local

# OS
.DS_Store
Thumbs.db

# Documentation
docs/
*.md
!README.md

# Docker
docker-compose.override.yml
docker-compose*.yml
**/Dockerfile.*

# CI/CD
.github/
.pre-commit-config.yaml

# Scripts
scripts/
tools/
70 changes: 70 additions & 0 deletions .github/renovate.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": [
"config:recommended",
":semanticCommits",
":separateMultipleMajorReleases",
"helpers:pinGitHubActionDigests"
],
"baseBranches": ["development"],
"timezone": "UTC",
"dependencyDashboard": true,
"prConcurrentLimit": 10,
"prHourlyLimit": 5,
"labels": ["dependencies"],
"rebaseWhen": "conflicted",
"vulnerabilityAlerts": { "enabled": true },
"schedule": ["every weekday"],
"rangeStrategy": "bump",
"packageRules": [
{
"description": "Automerge safe patch updates",
"matchUpdateTypes": ["patch"],
"automerge": true
},
{
"description": "Frontend npm: automerge minor for devDependencies",
"matchManagers": ["npm"],
"matchDepTypes": ["devDependencies"],
"matchUpdateTypes": ["minor", "patch"],
"automerge": true,
"labels": ["dependencies", "npm"]
},
{
"description": "Backend Go modules",
"matchManagers": ["gomod"],
"labels": ["dependencies", "go"],
"matchUpdateTypes": ["minor", "patch"],
"automerge": false
},
{
"description": "GitHub Actions updates",
"matchManagers": ["github-actions"],
"labels": ["dependencies", "github-actions"],
"matchUpdateTypes": ["minor", "patch"],
"automerge": true
},
{
"description": "Docker: keep Caddy within v2 (no automatic jump to v3)",
"matchManagers": ["dockerfile"],
"matchPackageNames": ["caddy"],
"allowedVersions": "<3.0.0",
"labels": ["dependencies", "docker"],
"automerge": true
},
{
"description": "Group non-breaking npm minor/patch",
"matchManagers": ["npm"],
"matchUpdateTypes": ["minor", "patch"],
"groupName": "npm minor/patch",
"prPriority": -1
},
{
"description": "Group docker base minor/patch",
"matchManagers": ["dockerfile"],
"matchUpdateTypes": ["minor", "patch"],
"groupName": "docker base updates",
"prPriority": -1
}
]
}
20 changes: 14 additions & 6 deletions .github/workflows/auto-add-to-project.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,23 @@ jobs:
add-to-project:
runs-on: ubuntu-latest
steps:
- name: Skip if PROJECT_URL not provided
- name: Determine project URL presence
id: project_check
run: |
if [ -z "${{ secrets.PROJECT_URL }}" ]; then
echo "PROJECT_URL secret not set; skipping add-to-project job."
exit 0
if [ -n "${{ secrets.PROJECT_URL }}" ]; then
echo "has_project=true" >> $GITHUB_OUTPUT
else
echo "has_project=false" >> $GITHUB_OUTPUT
fi

- name: Add issue or PR to project
uses: actions/add-to-project@v0.5.0
if: steps.project_check.outputs.has_project == 'true'
continue-on-error: true
uses: actions/add-to-project@31b3f3ccdc584546fc445612dec3f38ff5edb41c # v0.5.0
with:
project-url: ${{ secrets.PROJECT_URL }}
github-token: ${{ secrets.GITHUB_TOKEN }}
github-token: ${{ secrets.ADD_TO_PROJECT_PAT }}

- name: Skip summary
if: steps.project_check.outputs.has_project == 'false'
run: echo "PROJECT_URL secret missing; skipping project assignment." >> $GITHUB_STEP_SUMMARY
2 changes: 1 addition & 1 deletion .github/workflows/auto-label-issues.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ jobs:
issues: write
steps:
- name: Auto-label based on title and body
uses: actions/github-script@v7
uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7
with:
script: |
const issue = context.payload.issue;
Expand Down
62 changes: 62 additions & 0 deletions .github/workflows/caddy-major-monitor.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
name: Monitor Caddy Major Release

on:
schedule:
- cron: '17 7 * * 1' # Mondays at 07:17 UTC
workflow_dispatch: {}

permissions:
contents: read
issues: write

jobs:
check-caddy-major:
runs-on: ubuntu-latest
steps:
- name: Check for Caddy v3 and open issue
uses: actions/github-script@v7
with:
script: |
const upstream = { owner: 'caddyserver', repo: 'caddy' };
const { data: releases } = await github.rest.repos.listReleases({
...upstream,
per_page: 50,
});
const latestV3 = releases.find(r => /^v3\./.test(r.tag_name));
if (!latestV3) {
core.info('No Caddy v3 release detected.');
return;
}

const issueTitle = `Track upgrade to Caddy v3 (${latestV3.tag_name})`;

const { data: existing } = await github.rest.issues.listForRepo({
owner: context.repo.owner,
repo: context.repo.repo,
state: 'open',
per_page: 100,
});

if (existing.some(i => i.title === issueTitle)) {
core.info('Issue already exists — nothing to do.');
return;
}

const body = [
'Caddy v3 has been released upstream and detected by the scheduled monitor.',
'',
`Detected release: ${latestV3.tag_name} (${latestV3.html_url})`,
'',
'- Create a feature branch to evaluate the v3 migration.',
'- Review breaking changes and update Docker base images/workflows.',
'- Validate Trivy scans and update any policies as needed.',
'',
'Current policy: remain on latest 2.x until v3 is validated.'
].join('\n');

await github.rest.issues.create({
owner: context.repo.owner,
repo: context.repo.repo,
title: issueTitle,
body,
});
74 changes: 21 additions & 53 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,67 +7,35 @@ on:
branches: [ main, development ]

jobs:
lint:
name: Lint (ruff & flake8)
test-backend:
name: Backend Tests (Go)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v4
- name: Set up Go
uses: actions/setup-go@v5
with:
python-version: '3.12'
- name: Cache pip
uses: actions/cache@v4
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements*.txt') }}
restore-keys: |
${{ runner.os }}-pip-
- name: Install dev dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.dev.txt
- name: Run pre-commit
run: |
pre-commit run --all-files
- name: Run ruff
run: |
ruff check .
- name: Run flake8
go-version: '1.22'
cache-dependency-path: backend/go.sum
- name: Run Go tests
working-directory: backend
run: |
flake8 . || true
go test -v ./...

test-and-coverage:
name: Tests & Coverage
test-frontend:
name: Frontend Tests (React)
runs-on: ubuntu-latest
needs: [lint]
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v4
- name: Set up Node.js
uses: actions/setup-node@v4
with:
python-version: '3.12'
- name: Cache pip
uses: actions/cache@v4
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements*.txt') }}
restore-keys: |
${{ runner.os }}-pip-
node-version: '20'
cache: 'npm'
cache-dependency-path: frontend/package-lock.json
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt || true
pip install -r requirements.dev.txt
- name: Run tests with coverage
run: |
# run pytest under coverage and fail if tests fail
coverage run -m pytest -q
coverage report -m --fail-under=75
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v4
with:
fail_ci_if_error: true
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# Optional: set CODECOV_TOKEN in repo secrets if needed for private repos
working-directory: frontend
run: npm ci
- name: Run frontend tests
working-directory: frontend
run: npm test
Loading
Loading