name: Windows

on: [push, pull_request]

env:
  PlatformToolset: v142

  # build platform, i.e. x86, x64, Any CPU. This setting is optional.
  Platform: Win32

  # build Configuration, i.e. Debug, Release, etc.
  Configuration: Release
  
jobs:
  build:
    # For a list of available runner types, refer to
    # https://help.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idruns-on
    runs-on: windows-latest

    steps:
    - name: Checkout repository
      uses: actions/checkout@v3

    - name: Configure GIT
      working-directory: ${{env.GITHUB_WORKSPACE}}
      shell: cmd
      run: |
        git config --local core.autocrlf true
        git config --local advice.detachedHead false
        git submodule update --init --recursive

    - name: Setup python
      uses: actions/setup-python@v3
      with:
        python-version: '3.x' # Version range or exact version of a Python version to use, using SemVer's version range syntax
        architecture: 'x64' # optional x64 or x86. Defaults to x64 if not specified

    - name: Create new environment variables
      working-directory: ${{env.GITHUB_WORKSPACE}}
      shell: cmd
      run: |
        python -c "import os; print('GIT_REPOSITORY=' + os.path.split(os.getenv('GITHUB_REPOSITORY'))[1]);" >> %GITHUB_ENV%
        python -c "import os; print('GIT_BRANCH=' + os.path.split(os.getenv('GITHUB_REF'))[1]);" >> %GITHUB_ENV%
        echo GITHUB_WORKFLOW=%GITHUB_WORKFLOW%>> %GITHUB_ENV%

    - name: List environment variables for debugging
      working-directory: ${{env.GITHUB_WORKSPACE}}
      shell: cmd
      run: |
        set

    - name: Deploy 'tests not available' badge before building
      uses: exuanbo/actions-deploy-gist@v1
      with:
        token: ${{ secrets.BADGES }}
        gist_id: 58cf6c72c08e706335337d5ef9ca48e8
        gist_file_name: ${{env.GIT_REPOSITORY}}.${{env.GIT_BRANCH}}.${{env.GITHUB_WORKFLOW}}.json
        file_path: ./ci/github/tests_not_available.badge.json
    
    - name: Install Arduino CLI
      working-directory: ${{env.GITHUB_WORKSPACE}}
      shell: cmd
      run: call ci\github\install_arduinocli.bat

    - name: Install Arduino library dependnecies
      working-directory: ${{env.GITHUB_WORKSPACE}}
      shell: cmd
      run: call ci\github\arduino_install_libraries.bat

    - name: Install this arduino library
      working-directory: ${{env.GITHUB_WORKSPACE}}
      shell: cmd
      run: call ci\github\install_this.bat

    - name: Install Google Test
      working-directory: ${{env.GITHUB_WORKSPACE}}
      shell: cmd
      run: call ci\github\install_googletest.bat

    - name: Install RapidAssist
      working-directory: ${{env.GITHUB_WORKSPACE}}
      shell: cmd
      run: call ci\github\install_rapidassist.bat

    - name: Install win32arduino
      working-directory: ${{env.GITHUB_WORKSPACE}}
      shell: cmd
      run: call ci\github\install_win32arduino.bat

    - name: Build library
      working-directory: ${{env.GITHUB_WORKSPACE}}
      shell: cmd
      run: call ci\github\build_library.bat

    - name: Build Arduino sketch - Basic
      working-directory: ${{env.GITHUB_WORKSPACE}}
      shell: cmd
      run: call ci\github\arduino_build_sketch.bat Basic

    - name: Build Arduino sketch - BlockingProgramMemoryRtttl
      working-directory: ${{env.GITHUB_WORKSPACE}}
      shell: cmd
      run: call ci\github\arduino_build_sketch.bat BlockingProgramMemoryRtttl

    - name: Build Arduino sketch - BlockingRtttl
      working-directory: ${{env.GITHUB_WORKSPACE}}
      shell: cmd
      run: call ci\github\arduino_build_sketch.bat BlockingRtttl

    - name: Build Arduino sketch - BlockingWithNonBlocking
      working-directory: ${{env.GITHUB_WORKSPACE}}
      shell: cmd
      run: call ci\github\arduino_build_sketch.bat BlockingWithNonBlocking

    - name: Build Arduino sketch - NonBlockingProgramMemoryRtttl
      working-directory: ${{env.GITHUB_WORKSPACE}}
      shell: cmd
      run: call ci\github\arduino_build_sketch.bat NonBlockingProgramMemoryRtttl

    - name: Build Arduino sketch - NonBlockingRtttl
      working-directory: ${{env.GITHUB_WORKSPACE}}
      shell: cmd
      run: call ci\github\arduino_build_sketch.bat NonBlockingRtttl

    - name: Build Arduino sketch - NonBlockingStopBeforeEnd
      working-directory: ${{env.GITHUB_WORKSPACE}}
      shell: cmd
      run: call ci\github\arduino_build_sketch.bat NonBlockingStopBeforeEnd

    - name: Build Arduino sketch - Play10Bits
      working-directory: ${{env.GITHUB_WORKSPACE}}
      shell: cmd
      run: call ci\github\arduino_build_sketch.bat Play10Bits

    - name: Build Arduino sketch - Play16Bits
      working-directory: ${{env.GITHUB_WORKSPACE}}
      shell: cmd
      run: call ci\github\arduino_build_sketch.bat Play16Bits

    - name: Build Arduino sketch - Rtttl2Code
      working-directory: ${{env.GITHUB_WORKSPACE}}
      shell: cmd
      run: call ci\github\arduino_build_sketch.bat Rtttl2Code

    - name: Run unit tests
      working-directory: ${{env.GITHUB_WORKSPACE}}
      shell: cmd
      run: call ci\github\test_script.bat

    - name: Search unit test report file
      working-directory: ${{env.GITHUB_WORKSPACE}}
      shell: cmd
      run: |
        for /f "tokens=* usebackq" %%f in (`dir/b/s build\bin\${{env.configuration}}\anyrtttl_unittest*.xml`) do (set UNITTEST_REPORT_PATH=%%f)
        echo UNITTEST_REPORT_PATH=%UNITTEST_REPORT_PATH%
        echo UNITTEST_REPORT_PATH=%UNITTEST_REPORT_PATH% >> %GITHUB_ENV%
      
    - name: Create test badge
      working-directory: ${{env.GITHUB_WORKSPACE}}
      run: python ci\github\maketestbadge.py ${{env.UNITTEST_REPORT_PATH}}
      
    - name: Deploy test badge to gist
      uses: exuanbo/actions-deploy-gist@v1
      with:
        token: ${{ secrets.BADGES }}
        gist_id: 58cf6c72c08e706335337d5ef9ca48e8
        gist_file_name: ${{env.GIT_REPOSITORY}}.${{env.GIT_BRANCH}}.${{env.GITHUB_WORKFLOW}}.json
        file_path: ./badge.json
    
    - name: Archive test results
      uses: actions/upload-artifact@v3
      with:
        name: unit-test-results
        path: build\bin\${{env.Configuration}}\anyrtttl_unittest*.xml
