# .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

# Set the 'name:' properties to values that work for you (MYMODULE)

name: "GHA full build"

# Only run manually
on:
  workflow_dispatch

env:
  SETUP_PATH: .ci-local:.ci
  # For the sequencer on Linux/Windows/MacOS
  APT: re2c
  CHOCO: re2c
  BREW: re2c

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

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

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

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

          ### fails building autosave
          #!- os: ubuntu-20.04
          #!  cmp: gcc
          #!  configuration: default
          #!  rtems: "4.10"
          #!  base: "7.0"
          #!  set: modules
          #!  name: "Ub-20 gcc-9 + RT-4.10"

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

          ### fails building asyn
          #!- os: ubuntu-20.04
          #!  cmp: gcc
          #!  configuration: default
          #!  rtems: "5"
          #!  rtems_target: RTEMS-pc686-qemu
          #!  base: "7.0"
          #!  set: modules
          #!  name: "Ub-20 gcc-9 + RT-5.1 pc686"

          ### fails building autosave
          #!- os: ubuntu-20.04
          #!  cmp: gcc
          #!  configuration: default
          #!  rtems: "5"
          #!  rtems_target: RTEMS-beatnik
          #!  test: NO
          #!  base: "7.0"
          #!  set: modules
          #!  name: "Ub-20 gcc-9 + RT-5.1 beatnik"

          #!- os: ubuntu-20.04
          #!  cmp: gcc-8
          #!  utoolchain: true
          #!  configuration: default
          #!  base: "7.0"
          #!  set: modules
          #!  name: "Ub-20 gcc-8"

          - os: ubuntu-20.04
            cmp: clang
            configuration: default
            base: "7.0"
            set: modules
            name: "Ub-20 clang-10"

          - os: macos-latest
            cmp: clang
            configuration: default
            base: "7.0"
            set: modules
            name: "MacOS clang-12"

          - os: windows-2019
            cmp: gcc
            configuration: default
            base: "7.0"
            set: modules
            name: "Win2019 MinGW"

          - os: windows-2019
            cmp: gcc
            configuration: static
            base: "7.0"
            set: modules
            name: "Win2019 MinGW, static"

          - os: windows-2019
            cmp: vs2019
            configuration: default
            base: "7.0"
            set: modules
            name: "Win2019 MSC-19"

          - os: windows-2019
            cmp: vs2019
            configuration: static
            base: "7.0"
            set: modules
            name: "Win2019 MSC-19, static"

    steps:
    - uses: actions/checkout@v2
      with:
        submodules: true
    - name: Automatic core dumper analysis
      uses: mdavidsaver/ci-core-dumper@master
    - 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: |
        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 ${{ matrix.cmp }}
      if: matrix.utoolchain
    - name: Sanity Check
      run: python .ci-local/github-actions/sanity-check.py
    - name: Prepare and compile dependencies
      run: python .ci/cue.py prepare
    - name: Patch main module
      run: python .ci-local/github-actions/post-prepare.py
    - 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
      uses: actions/upload-artifact@v2
      with:
        name: tapfiles ${{ matrix.name }}
        path: '**/O.*/*.tap'
    - name: Collect and show test results
      run: python .ci/cue.py test-results
