# .github/workflows/ci-scripts-build.yml for use with EPICS Base ci-scripts
# (see: https://github.com/epics-base/ci-scripts)

# This is YAML - indentation levels are crucial

# Workflow name, shared by all branches

name: Base

# Trigger on pushes and PRs to any branch
on:
  push:
    paths-ignore:
      - 'documentation/*'
      - 'startup/*'
      - '.appveyor/*'
      - '**/*.html'
      - '**/*.md'
  pull_request:
    paths-ignore:
      - 'documentation/*'
      - 'startup/*'
      - '.appveyor/*'
      - '**/*.html'
      - '**/*.md'

env:
    SETUP_PATH: .ci-local:.ci
    BASE: SELF
    EPICS_TEST_IMPRECISE_TIMING: YES

jobs:
  build-base:
    name: ${{ matrix.name }}
    runs-on: ${{ matrix.os }}
    # Set environment variables from matrix parameters
    env:
      CMP: ${{ matrix.cmp }}
      BCFG: ${{ matrix.configuration }}
      WINE: ${{ matrix.wine }}
      RTEMS: ${{ matrix.rtems }}
      EXTRA: ${{ matrix.extra }}
    strategy:
      fail-fast: false
      matrix:
        # Job names also name artifacts, character limitations apply
        include:
          - os: ubuntu-20.04
            cmp: gcc
            configuration: default
            wine: "64"
            name: "Ub-20 gcc-9 + MinGW"

          - os: ubuntu-20.04
            cmp: gcc
            configuration: static
            wine: "64"
            name: "Ub-20 gcc-9 + MinGW, static"

          - os: ubuntu-20.04
            cmp: gcc
            configuration: static
            extra: "CMD_CXXFLAGS=-std=c++11"
            name: "Ub-20 gcc-9 C++11, static"

          - os: ubuntu-20.04
            cmp: clang
            configuration: default
            extra: "CMD_CXXFLAGS=-std=c++11"
            name: "Ub-20 clang-10 C++11"

          - os: ubuntu-20.04
            cmp: gcc
            configuration: default
            rtems: "4.10"
            name: "Ub-20 gcc-9 + RT-4.10"

          - os: ubuntu-20.04
            cmp: gcc
            configuration: default
            rtems: "4.9"
            name: "Ub-20 gcc-9 + RT-4.9"

          - os: ubuntu-20.04
            cmp: gcc-8
            utoolchain: true
            configuration: default
            name: "Ub-20 gcc-8"

          - os: ubuntu-20.04
            cmp: clang
            configuration: default
            name: "Ub-20 clang-10"

          - os: macos-latest
            cmp: clang
            configuration: default
            name: "MacOS clang-12"

          - os: windows-2019
            cmp: vs2019
            configuration: default
            name: "Win2019 MSC-19"

          - os: windows-2019
            cmp: vs2019
            configuration: static
            name: "Win2019 MSC-19, static"

    steps:
    - uses: actions/checkout@v2
      with:
        submodules: true
    - name: "apt-get install"
      run: |
        sudo apt-get update
        sudo apt-get -y install qemu-system-x86 g++-mingw-w64-x86-64 gdb
      if: runner.os == 'Linux'
    - name: "apt-get install ${{ matrix.cmp }}"
      run: |
        export GCC_NAME="${{ matrix.cmp }}"
        sudo apt-get update
        sudo apt-get -y install software-properties-common
        sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test
        sudo apt-get update
        sudo apt-get -y install g++-${GCC_NAME#gcc-}
      if: matrix.utoolchain
    - name: Prepare and compile dependencies
      run: python .ci/cue.py prepare
    - name: Build main module
      run: python .ci/cue.py build
    - name: Run main module tests
      run: python .ci/cue.py test
    - name: Upload tapfiles Artifact
      if: ${{ always() }}
      uses: actions/upload-artifact@v4
      with:
        name: tapfiles ${{ matrix.name }}
        path: '**/O.*/*.tap'
        if-no-files-found: ignore
    - name: Collect and show test results
      if: ${{ always() }}
      run: python .ci/cue.py test-results
