name: F3.1 Inventory CI on: push: branches: - 'feature/f3-1*' workflow_dispatch: permissions: contents: read jobs: api: runs-on: ubuntu-latest timeout-minutes: 25 defaults: run: working-directory: api-v3 steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: '24' cache: npm cache-dependency-path: api-v3/package-lock.json - run: npm ci - name: Typecheck run: npm run typecheck 2>&1 | tee typecheck.log - name: Tests run: npm test 2>&1 | tee test.log - name: Build run: npm run build 2>&1 | tee build.log - name: Diagnostics if: always() uses: actions/upload-artifact@v4 with: name: f3-1-api-diagnostics path: | api-v3/typecheck.log api-v3/test.log api-v3/build.log if-no-files-found: warn retention-days: 3 web: runs-on: ubuntu-latest timeout-minutes: 20 defaults: run: working-directory: web-v2 steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: '24' cache: npm cache-dependency-path: web-v2/package-lock.json - run: npm ci - name: Typecheck run: npm run typecheck 2>&1 | tee typecheck.log - name: Build run: npm run build 2>&1 | tee build.log - name: Diagnostics if: always() uses: actions/upload-artifact@v4 with: name: f3-1-web-diagnostics path: | web-v2/typecheck.log web-v2/build.log if-no-files-found: warn retention-days: 3 docker: needs: [api, web] runs-on: ubuntu-latest timeout-minutes: 25 steps: - uses: actions/checkout@v4 - name: Validate Compose run: docker compose --env-file .env.example config >/dev/null - name: Build production images run: docker compose --env-file .env.example build api migrate web