# 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: MATLAB

on:
  push:
    branches:
      - '**'
      - '!dependabot/**'
    tags:
      - '**'
    paths:
      - '.github/workflows/matlab.yml'
      - 'ci/scripts/matlab*.sh'
      - 'matlab/**'
      - 'cpp/src/arrow/**'
  pull_request:
    paths:
      - '.github/workflows/matlab.yml'
      - 'ci/scripts/matlab*.sh'
      - 'matlab/**'
      - 'cpp/src/arrow/**'

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

permissions:
  contents: read

jobs:

  ubuntu:
    name: AMD64 Ubuntu 22.04 MATLAB
    runs-on: ubuntu-22.04
    if: ${{ !contains(github.event.pull_request.title, 'WIP') }}
    steps:
      - name: Check out repository
        uses: actions/checkout@v6
        with:
          fetch-depth: 0
      - name: Install ninja-build
        run: sudo apt-get install ninja-build
      - name: Install MATLAB
        uses: matlab-actions/setup-matlab@v2
        with:
          release: R2025b
      - name: Install ccache
        run: sudo apt-get install ccache
      - name: Setup ccache
        shell: bash
        run: ci/scripts/ccache_setup.sh
      - name: ccache info
        id: ccache-info
        shell: bash
        run: echo "cache-dir=$(ccache --get-config cache_dir)" >> $GITHUB_OUTPUT
      - name: Cache ccache
        uses: actions/cache@v5
        with:
          path: ${{ steps.ccache-info.outputs.cache-dir }}
          key: matlab-ccache-ubuntu-${{ hashFiles('cpp/**', 'matlab/**') }}
          restore-keys: matlab-ccache-ubuntu-
      - name: Build MATLAB Interface
        run: ci/scripts/matlab_build.sh $(pwd)
      - name: Run MATLAB Tests
        env:
          # Add the installation directory to the MATLAB Search Path by
          # setting the MATLABPATH environment variable.
          MATLABPATH: matlab/install/arrow_matlab
        uses: matlab-actions/run-tests@v2
        with:
          select-by-folder: matlab/test
          strict: true
  macos:
    name: ${{ matrix.architecture }} macOS ${{ matrix.macos-version }} MATLAB
    runs-on: macos-${{ matrix.macos-version }}
    if: ${{ !contains(github.event.pull_request.title, 'WIP') }}
    strategy:
      matrix:
        include:
          - architecture: AMD64
            macos-version: "15-intel"
          - architecture: ARM64
            macos-version: "14"
    steps:
      - name: Check out repository
        uses: actions/checkout@v6
        with:
          fetch-depth: 0
      - name: Install ninja-build
        run: brew install ninja
      - name: Install MATLAB
        uses: matlab-actions/setup-matlab@v2
        with:
          release: R2025b
      - name: Install ccache
        run: brew install ccache
      - name: Setup ccache
        shell: bash
        run: ci/scripts/ccache_setup.sh
      - name: ccache info
        id: ccache-info
        shell: bash
        run: echo "cache-dir=$(ccache --get-config cache_dir)" >> $GITHUB_OUTPUT
      - name: Cache ccache
        uses: actions/cache@v5
        with:
          path: ${{ steps.ccache-info.outputs.cache-dir }}
          key: matlab-ccache-macos-${{ hashFiles('cpp/**', 'matlab/**') }}
          restore-keys: matlab-ccache-macos-
      - name: Build MATLAB Interface
        run: ci/scripts/matlab_build.sh $(pwd)
      - name: Run MATLAB Tests
        env:
          # Add the installation directory to the MATLAB Search Path by
          # setting the MATLABPATH environment variable.
          MATLABPATH: matlab/install/arrow_matlab
        uses: matlab-actions/run-tests@v2
        with:
          select-by-folder: matlab/test
          strict: true
  windows:
    name: AMD64 Windows 2022 MATLAB
    runs-on: windows-2022
    if: ${{ !contains(github.event.pull_request.title, 'WIP') }}
    steps:
      - name: Check out repository
        uses: actions/checkout@v6
        with:
          fetch-depth: 0
      - name: Install MATLAB
        uses: matlab-actions/setup-matlab@v2
        with:
          release: R2025b
      - name: Download Timezone Database
        shell: bash
        run: ci/scripts/download_tz_database.sh
      - name: Install ccache
        shell: bash
        run: ci/scripts/install_ccache.sh 4.6.3 /usr
      - name: Setup ccache
        shell: bash
        run: ci/scripts/ccache_setup.sh
      - name: ccache info
        id: ccache-info
        shell: bash
        run: echo "cache-dir=$(ccache --get-config cache_dir)" >> $GITHUB_OUTPUT
      - name: Cache ccache
        uses: actions/cache@v5
        with:
          path: |
            ${{ steps.ccache-info.outputs.cache-dir }}
          key: matlab-ccache-windows-${{ hashFiles('cpp/**', 'matlab/**') }}
          restore-keys: matlab-ccache-windows-
      - name: Build MATLAB Interface
        shell: cmd
        run: |
          call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x64
          bash -c "ci/scripts/matlab_build.sh $(pwd)"
      - name: Run MATLAB Tests
        env:
          # Add the installation directory to the MATLAB Search Path by
          # setting the MATLABPATH environment variable.
          MATLABPATH: matlab/install/arrow_matlab
        uses: matlab-actions/run-tests@v2
        with:
          select-by-folder: matlab/test
          strict: true
