name: Hello World (Multiplatform)

on:
  push:
    branches:
      - main
      - v*-branch
      - collab-*
  pull_request:
    branches:
      - main
      - v*-branch
      - collab-*
    paths:
      - 'scripts/**'
      - '.github/workflows/hello_world_multiplatform.yaml'
      - 'SDK_VERSION'

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

jobs:
  build:
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-22.04, ubuntu-24.04, macos-13, macos-14, windows-2022]
    runs-on: ${{ matrix.os }}
    steps:
      - name: Checkout
        uses: actions/checkout@v4
        with:
          path: zephyr
          fetch-depth: 0

      - name: Rebase
        if: github.event_name == 'pull_request'
        env:
          BASE_REF: ${{ github.base_ref }}
          PR_HEAD: ${{ github.event.pull_request.head.sha }}
        working-directory: zephyr
        shell: bash
        run: |
          git config --global user.email "actions@zephyrproject.org"
          git config --global user.name "Github Actions"
          rm -fr ".git/rebase-apply"
          rm -fr ".git/rebase-merge"
          git rebase origin/${BASE_REF}
          git clean -f -d
          git log --graph --oneline HEAD...${PR_HEAD}

      - name: Set up Python
        uses: actions/setup-python@v5
        with:
          python-version: 3.11

      - name: Setup Zephyr project
        uses: zephyrproject-rtos/action-zephyr-setup@v1
        with:
          app-path: zephyr
          toolchains: all

      - name: Build firmware
        working-directory: zephyr
        shell: bash
        run: |
          if [ "${{ runner.os }}" = "macOS" ]; then
            EXTRA_TWISTER_FLAGS="-P native_sim --build-only"
          elif [ "${{ runner.os }}" = "Windows" ]; then
            EXTRA_TWISTER_FLAGS="-P native_sim --short-build-path -O/tmp/twister-out"
          fi
          ./scripts/twister --force-color --inline-logs -T samples/hello_world -T samples/cpp/hello_world -v $EXTRA_TWISTER_FLAGS

      - name: Upload artifacts
        if: failure()
        uses: actions/upload-artifact@v4
        with:
          if-no-files-found: ignore
          path:
            zephyr/twister-out/*/samples/hello_world/sample.basic.helloworld/build.log
            zephyr/twister-out/*/samples/cpp/hello_world/sample.cpp.helloworld/build.log
