fix(release): read app version from package.json #170
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: CI | |
| on: | |
| push: | |
| branches: [main] | |
| pull_request: | |
| branches: [main] | |
| # Cancel in-progress runs for the same branch | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: true | |
| env: | |
| NODE_OPTIONS: --max-old-space-size=4096 | |
| jobs: | |
| # ============================================ | |
| # LINT - Non-blocking, provides feedback | |
| # ============================================ | |
| lint: | |
| name: Lint | |
| runs-on: ubuntu-latest | |
| # Continue even if lint fails - it's informative, not blocking | |
| continue-on-error: true | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Setup Bun | |
| uses: oven-sh/setup-bun@v2 | |
| with: | |
| bun-version: latest | |
| - name: Install dependencies | |
| working-directory: ./app | |
| run: bun install --frozen-lockfile | |
| - name: Run linter | |
| working-directory: ./app | |
| run: bun run lint | |
| # ============================================ | |
| # TYPECHECK - Non-blocking advisory check | |
| # Note: The Nuxt build validates TypeScript during compilation. | |
| # This strict check catches additional issues but has pre-existing | |
| # errors that would require significant refactoring to fix. | |
| # ============================================ | |
| typecheck: | |
| name: Type Check | |
| runs-on: ubuntu-latest | |
| continue-on-error: true | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Setup Bun | |
| uses: oven-sh/setup-bun@v2 | |
| with: | |
| bun-version: latest | |
| - name: Install dependencies | |
| working-directory: ./app | |
| run: bun install --frozen-lockfile | |
| - name: Prepare Nuxt (generate types) | |
| working-directory: ./app | |
| run: bunx nuxt prepare | |
| - name: Type check | |
| working-directory: ./app | |
| run: bun run typecheck | |
| # ============================================ | |
| # TEST - Runs all tests, reports coverage | |
| # ============================================ | |
| test: | |
| name: Test | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Setup Bun | |
| uses: oven-sh/setup-bun@v2 | |
| with: | |
| bun-version: latest | |
| - name: Install dependencies | |
| working-directory: ./app | |
| run: bun install --frozen-lockfile | |
| - name: Create test directories | |
| working-directory: ./app | |
| run: mkdir -p data ../data | |
| - name: Run tests | |
| working-directory: ./app | |
| run: bun run test:run | |
| env: | |
| DATABASE_URL: file:../data/db.sqlite | |
| - name: Upload coverage | |
| uses: codecov/codecov-action@v4 | |
| if: always() | |
| with: | |
| files: ./app/coverage/coverage-final.json | |
| token: ${{ secrets.CODECOV_TOKEN }} | |
| continue-on-error: true | |
| # ============================================ | |
| # BUILD - Must succeed for deployment | |
| # ============================================ | |
| build: | |
| name: Build | |
| runs-on: ubuntu-latest | |
| # No dependencies - build can run in parallel with other jobs | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Setup Bun | |
| uses: oven-sh/setup-bun@v2 | |
| with: | |
| bun-version: latest | |
| - name: Install dependencies | |
| working-directory: ./app | |
| run: bun install --frozen-lockfile | |
| - name: Build application | |
| working-directory: ./app | |
| run: bun run build | |
| - name: Upload build artifacts | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: nuxt-build | |
| path: app/.output | |
| retention-days: 7 | |
| # ============================================ | |
| # DOCKER - Only on main branch pushes | |
| # ============================================ | |
| docker: | |
| name: Docker Build | |
| runs-on: ubuntu-latest | |
| needs: [test, build] # Only wait for blocking jobs | |
| if: github.ref == 'refs/heads/main' && github.event_name == 'push' | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Build Docker image | |
| uses: docker/build-push-action@v5 | |
| with: | |
| context: . | |
| push: false | |
| tags: tada:${{ github.sha }} | |
| cache-from: type=gha | |
| cache-to: type=gha,mode=max | |
| - name: Test Docker container starts | |
| run: | | |
| docker build -t tada:test . | |
| docker run -d -p 3000:3000 --name tada-test tada:test | |
| echo "Waiting for container to start..." | |
| sleep 10 | |
| echo "Testing health endpoint..." | |
| curl -f http://localhost:3000/api/health || exit 1 | |
| docker stop tada-test |