name: CI on: push: branches: [main, develop] pull_request: branches: [main, develop] jobs: install-dependencies: runs-on: ubuntu-latest container: image: oven/bun:alpine steps: - name: Checkout code uses: actions/checkout@v4 - name: Cache node_modules id: cache uses: actions/cache@v4 with: path: node_modules key: ${{ runner.os }}-bun-${{ hashFiles('**/bun.lock') }} restore-keys: | ${{ runner.os }}-bun- - name: Install Dependencies run: bun i --frozen-lockfile type-check: runs-on: ubuntu-latest container: image: oven/bun:alpine needs: install-dependencies steps: - name: Checkout code uses: actions/checkout@v4 - name: Cache node_modules id: cache uses: actions/cache@v4 with: path: node_modules key: ${{ runner.os }}-bun-${{ hashFiles('**/bun.lock') }} restore-keys: | ${{ runner.os }}-bun- - name: Install dependencies if: steps.cache.outputs.cache-hit != 'true' run: bun install --frozen-lockfile - name: Run type checking run: bun run check lint: runs-on: ubuntu-latest container: image: oven/bun:alpine needs: install-dependencies steps: - name: Checkout code uses: actions/checkout@v4 - name: Cache node_modules id: cache uses: actions/cache@v4 with: path: node_modules key: ${{ runner.os }}-bun-${{ hashFiles('**/bun.lock') }} restore-keys: | ${{ runner.os }}-bun- - name: Install dependencies if: steps.cache.outputs.cache-hit != 'true' run: bun install --frozen-lockfile - name: Run linting run: bun run lint:check format-check: runs-on: ubuntu-latest container: image: oven/bun:alpine needs: install-dependencies steps: - name: Checkout code uses: actions/checkout@v4 - name: Cache node_modules id: cache uses: actions/cache@v4 with: path: node_modules key: ${{ runner.os }}-bun-${{ hashFiles('**/bun.lock') }} restore-keys: | ${{ runner.os }}-bun- - name: Install dependencies if: steps.cache.outputs.cache-hit != 'true' run: bun install --frozen-lockfile - name: Check formatting run: bun run format:check build: runs-on: ubuntu-latest container: image: oven/bun:alpine needs: install-dependencies steps: - name: Checkout code uses: actions/checkout@v4 - name: Cache node_modules id: cache uses: actions/cache@v4 with: path: node_modules key: ${{ runner.os }}-bun-${{ hashFiles('**/bun.lock') }} restore-keys: | ${{ runner.os }}-bun- - name: Install dependencies if: steps.cache.outputs.cache-hit != 'true' run: bun install --frozen-lockfile - name: Build application run: bun run build - name: Upload build artifacts uses: actions/upload-artifact@v4 with: name: build-output path: build/ retention-days: 7