diff --git a/.github/workflows/build-services.yml b/.github/workflows/build-services.yml new file mode 100644 index 0000000..f9487f3 --- /dev/null +++ b/.github/workflows/build-services.yml @@ -0,0 +1,96 @@ +name: Build Services CI + +on: + push: + branches: [main] + pull_request: + branches: [main] + +permissions: + contents: read + +jobs: + changes: + name: Detect changed paths + runs-on: ubuntu-latest + outputs: + frontend: ${{ steps.filter.outputs.frontend }} + backend: ${{ steps.filter.outputs.backend }} + steps: + - uses: actions/checkout@v4 + - uses: dorny/paths-filter@v3 + id: filter + with: + filters: | + frontend: + - 'apps/frontend/**' + backend: + - 'apps/backend/**' + + frontend: + name: Frontend — Build + needs: changes + if: needs.changes.outputs.frontend == 'true' + runs-on: ubuntu-latest + defaults: + run: + working-directory: apps/frontend + steps: + - uses: actions/checkout@v4 + + - uses: pnpm/action-setup@v4 + with: + version: '9.15.0' + + - uses: actions/setup-node@v4 + with: + node-version: '20' + cache: pnpm + cache-dependency-path: apps/frontend/pnpm-lock.yaml + + - name: Install dependencies + run: pnpm install --frozen-lockfile + + - name: Build + run: pnpm build + + backend: + name: Backend — Build + needs: changes + if: needs.changes.outputs.backend == 'true' + runs-on: ubuntu-latest + defaults: + run: + working-directory: apps/backend + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-java@v4 + with: + java-version: '17' + distribution: temurin + cache: maven + + - name: Make mvnw executable + run: chmod +x ./mvnw + + - name: Build + run: ./mvnw package -DskipTests -B + + docker: + name: Docker — Build images + runs-on: ubuntu-latest + needs: [frontend, backend] + if: | + always() && + !contains(needs.*.result, 'failure') && + !contains(needs.*.result, 'cancelled') && + (needs.frontend.result == 'success' || needs.backend.result == 'success') + steps: + - uses: actions/checkout@v4 + + - name: Create env file + run: cp .env.example .env + + - name: Build images + run: docker compose build