name: pre-commit checks on: pull_request: push: branches: [main] permissions: contents: read jobs: pre_commit: timeout-minutes: 5 runs-on: ubuntu-latest steps: - uses: actions/checkout@v5 - name: detect changed paths uses: dorny/paths-filter@v3 id: filter with: filters: | backend: - 'backend/**' frontend: - 'frontend/**' rust: - 'moderation/**' - 'transcoder/**' - name: install uv if: steps.filter.outputs.backend == 'true' uses: astral-sh/setup-uv@v7 with: enable-cache: true cache-dependency-glob: "backend/uv.lock" - name: install bun if: steps.filter.outputs.frontend == 'true' uses: oven-sh/setup-bun@v2 - name: cache frontend dependencies if: steps.filter.outputs.frontend == 'true' uses: actions/cache@v4 with: path: frontend/node_modules key: ${{ runner.os }}-bun-${{ hashFiles('frontend/bun.lockb') }} restore-keys: | ${{ runner.os }}-bun- - name: install backend dependencies if: steps.filter.outputs.backend == 'true' run: cd backend && uv sync - name: install frontend dependencies if: steps.filter.outputs.frontend == 'true' run: cd frontend && bun install - name: create frontend env file if: steps.filter.outputs.frontend == 'true' run: echo "PUBLIC_API_URL=http://localhost:8001" > frontend/.env - name: check lockfile is up to date if: steps.filter.outputs.backend == 'true' run: | cd backend if ! uv lock --check; then echo "❌ lockfile is out of date!" echo "to update the lockfile, run 'uv lock'." exit 1 fi echo "✅ lockfile is up to date" - name: build skip list id: skip run: | SKIP_LIST="" if [[ "${{ github.ref }}" == "refs/heads/main" ]]; then SKIP_LIST="no-commit-to-branch" fi if [[ "${{ steps.filter.outputs.backend }}" != "true" ]]; then SKIP_LIST="${SKIP_LIST:+$SKIP_LIST,}type-check" fi if [[ "${{ steps.filter.outputs.frontend }}" != "true" ]]; then SKIP_LIST="${SKIP_LIST:+$SKIP_LIST,}svelte-check,eslint" fi if [[ "${{ steps.filter.outputs.rust }}" != "true" ]]; then SKIP_LIST="${SKIP_LIST:+$SKIP_LIST,}cargo-check-moderation,cargo-check-transcoder" fi echo "list=$SKIP_LIST" >> $GITHUB_OUTPUT - name: run pre-commit uses: j178/prek-action@v1 env: SKIP: ${{ steps.skip.outputs.list }} - name: prune uv cache if: always() && steps.filter.outputs.backend == 'true' run: uv cache prune --ci