name: CI on: pull_request: branches: [main] permissions: contents: read jobs: python-quality: name: Python Quality runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Install uv and Python uses: astral-sh/setup-uv@bec219d24cd3e171d82865faccec33120bb574f4 # v10.1.0 with: version: "0.11.3" python-version: "3.14" enable-cache: true - name: Sync dependencies run: make install-python-dev - name: Lint run: make python-lint - name: Check formatting run: make python-format - name: Check dead code run: make python-dead-code python-typechecks: name: Python Typechecks runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Install uv and Python uses: astral-sh/setup-uv@bec219d24cd3e171d82865faccec33120bb574f4 # v10.1.0 with: version: "0.11.3" python-version: "3.14" enable-cache: true - name: Sync dependencies run: make install-python-dev - name: Typecheck run: make python-typecheck python-tests: name: Python Tests runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Install uv and Python uses: astral-sh/setup-uv@bec219d24cd3e171d82865faccec33120bb574f4 # v10.1.0 with: version: "0.11.3" python-version: "3.14" enable-cache: true - name: Sync dependencies run: make install-python-dev - name: Run tests run: make python-test docker-build-check: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Set up Docker Buildx uses: docker/setup-buildx-action@594f3bf4285d9ea8dc53c9a0c9c4092420091003 # v4.4.0 - name: Build shelfmark-lite image uses: docker/build-push-action@c3c9e263c25d99ce0380d002d59b67737d91b0dc # v7.4.0 with: context: . target: shelfmark-lite platforms: linux/amd64 push: false build-args: | BUILD_VERSION=pr-${{ github.sha }} RELEASE_VERSION=pr-${{ github.event.pull_request.number }} frontend-quality: name: Frontend Quality runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Set up Node uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: node-version: 24 cache: "npm" cache-dependency-path: src/frontend/package-lock.json - name: Install dependencies run: make install-ci - name: Lint run: make frontend-lint - name: Check formatting run: make frontend-format frontend-typechecks: name: Frontend Typechecks runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Set up Node uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: node-version: 24 cache: "npm" cache-dependency-path: src/frontend/package-lock.json - name: Install dependencies run: make install-ci - name: Typecheck run: make frontend-typecheck frontend-tests: name: Frontend Tests runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Set up Node uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: node-version: 24 cache: "npm" cache-dependency-path: src/frontend/package-lock.json - name: Install dependencies run: make install-ci - name: Unit tests run: make frontend-test