build.yaml 1.69 KB
# vibe_erp — main CI build.
#
# Runs the Gradle build and tests on every PR and on pushes to main.
# A separate job builds (but does not push) the Docker image on main.

name: build

on:
  push:
    branches: [main]
  pull_request:

jobs:
  gradle:
    name: gradle build
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Set up JDK 21
        uses: actions/setup-java@v4
        with:
          distribution: temurin
          java-version: "21"

      - name: Cache Gradle
        uses: actions/cache@v4
        with:
          path: |
            ~/.gradle/caches
            ~/.gradle/wrapper
          key: gradle-${{ runner.os }}-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties', 'gradle/libs.versions.toml') }}
          restore-keys: |
            gradle-${{ runner.os }}-

      - name: Build
        run: ./gradlew build --no-daemon

      - name: api-v1 tests
        run: ./gradlew :api:api-v1:test --no-daemon

      - name: Upload test reports on failure
        if: failure()
        uses: actions/upload-artifact@v4
        with:
          name: test-reports
          path: |
            **/build/reports/tests/
            **/build/test-results/

  docker:
    name: docker image
    runs-on: ubuntu-latest
    needs: gradle
    if: github.event_name == 'push' && github.ref == 'refs/heads/main'
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3

      - name: Build image (no push)
        uses: docker/build-push-action@v6
        with:
          context: .
          file: Dockerfile
          push: false
          tags: vibeerp/vibe-erp:ci