Skip to content

fix(release): read app version from package.json #170

fix(release): read app version from package.json

fix(release): read app version from package.json #170

Workflow file for this run

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