# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.

name: Build

# Source-affecting paths only. Docs-only edits skip this workflow; the
# Lint and RAT workflows still run on every change.
on:
  push:
    branches: [main, 'branch-*']
    paths:
      - 'core/**'
      - 'examples/**'
      - 'native/**'
      - 'proto/**'
      - 'pom.xml'
      - '**/pom.xml'
      - 'Makefile'
      - 'mvnw'
      - '.mvn/**'
      - '.github/workflows/build.yml'
  pull_request:
    branches: [main, 'branch-*']
    paths:
      - 'core/**'
      - 'examples/**'
      - 'native/**'
      - 'proto/**'
      - 'pom.xml'
      - '**/pom.xml'
      - 'Makefile'
      - 'mvnw'
      - '.mvn/**'
      - '.github/workflows/build.yml'

concurrency:
  group: ${{ github.repository }}-${{ github.head_ref || github.sha }}-${{ github.workflow }}
  cancel-in-progress: true

permissions:
  contents: read

jobs:
  build:
    name: make test (JDK ${{ matrix.java }})
    runs-on: ubuntu-24.04
    strategy:
      fail-fast: false
      matrix:
        java: ['17', '21']
    steps:
      - uses: actions/checkout@v4

      - name: Set up JDK ${{ matrix.java }}
        uses: actions/setup-java@v4
        with:
          distribution: temurin
          java-version: ${{ matrix.java }}
          cache: maven

      - name: Set up Rust toolchain
        run: |
          rustup update stable
          rustup default stable

      - name: Cache cargo
        uses: actions/cache@v4
        with:
          path: |
            ~/.cargo/registry
            ~/.cargo/git
            rust-target
          key: ${{ runner.os }}-cargo-${{ hashFiles('Cargo.lock') }}
          restore-keys: ${{ runner.os }}-cargo-

      - name: Build native and run tests
        run: make test
