From 56902ff0b4d71554b30e402818318edeb70b39f2 Mon Sep 17 00:00:00 2001 From: SH20RAJ Date: Thu, 30 Oct 2025 16:50:22 +0530 Subject: [PATCH] ci: add comprehensive build workflow for packages, demos, and integrations - Add .github/workflows/build.yml with matrix strategy - Build packages, demos (next-app, vite-project, react-router-app, adonisjs), and integrations (directus) in parallel - Use fail-fast: false to see all build failures - Add build summary job to aggregate results - Enable manual workflow dispatch for testing Fixes #1355 --- .github/workflows/build.yml | 163 ++++++++++++++++++++++++++++++++++++ 1 file changed, 163 insertions(+) create mode 100644 .github/workflows/build.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 000000000..2d9d2434f --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,163 @@ +name: Build + +on: + push: + branches: + - main + pull_request: + branches: + - main + workflow_dispatch: + +jobs: + build-packages: + name: Build Packages + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '20.12.2' + + - name: Install pnpm + uses: pnpm/action-setup@v4 + with: + version: 9.12.3 + run_install: false + + - name: Get pnpm store directory + id: pnpm-cache + run: echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT + + - name: Setup pnpm cache + uses: actions/cache@v4 + with: + path: ${{ steps.pnpm-cache.outputs.STORE_PATH }} + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} + restore-keys: | + ${{ runner.os }}-pnpm-store- + + - name: Install dependencies + run: pnpm install --frozen-lockfile + + - name: Configure Turbo cache + uses: dtinth/setup-github-actions-caching-for-turbo@v1 + + - name: Build all packages + run: pnpm turbo build --force + + build-demos: + name: Build Demo Apps + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + demo: + - next-app + - vite-project + - react-router-app + - adonisjs + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '20.12.2' + + - name: Install pnpm + uses: pnpm/action-setup@v4 + with: + version: 9.12.3 + run_install: false + + - name: Get pnpm store directory + id: pnpm-cache + run: echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT + + - name: Setup pnpm cache + uses: actions/cache@v4 + with: + path: ${{ steps.pnpm-cache.outputs.STORE_PATH }} + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} + restore-keys: | + ${{ runner.os }}-pnpm-store- + + - name: Install dependencies + run: pnpm install --frozen-lockfile + + - name: Configure Turbo cache + uses: dtinth/setup-github-actions-caching-for-turbo@v1 + + - name: Build ${{ matrix.demo }} + run: pnpm turbo build --filter=@lingo.dev/demo-${{ matrix.demo }} --force + + build-integrations: + name: Build Integrations + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + integration: + - directus + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '20.12.2' + + - name: Install pnpm + uses: pnpm/action-setup@v4 + with: + version: 9.12.3 + run_install: false + + - name: Get pnpm store directory + id: pnpm-cache + run: echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT + + - name: Setup pnpm cache + uses: actions/cache@v4 + with: + path: ${{ steps.pnpm-cache.outputs.STORE_PATH }} + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} + restore-keys: | + ${{ runner.os }}-pnpm-store- + + - name: Install dependencies + run: pnpm install --frozen-lockfile + + - name: Configure Turbo cache + uses: dtinth/setup-github-actions-caching-for-turbo@v1 + + - name: Build ${{ matrix.integration }} + run: pnpm turbo build --filter=@lingo.dev/integration-${{ matrix.integration }} --force + + build-summary: + name: Build Summary + runs-on: ubuntu-latest + needs: [build-packages, build-demos, build-integrations] + if: always() + steps: + - name: Check build results + run: | + if [ "${{ needs.build-packages.result }}" != "success" ]; then + echo "❌ Package builds failed" + exit 1 + fi + if [ "${{ needs.build-demos.result }}" != "success" ]; then + echo "❌ Demo app builds failed" + exit 1 + fi + if [ "${{ needs.build-integrations.result }}" != "success" ]; then + echo "❌ Integration builds failed" + exit 1 + fi + echo "✅ All builds passed successfully"