name: CI
on: [push, pull_request, workflow_dispatch]

jobs:
  build_linux:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1
      - name: Download LLVM, botan
        run: sudo apt-get install llvm-11 clang-11 libbotan-2-dev botan
      - name: build odin
        run: ./build_odin.sh release
      - name: Odin version
        run: ./odin version
        timeout-minutes: 1
      - name: Odin report
        run: ./odin report
        timeout-minutes: 1
      - name: Odin check
        run: ./odin check examples/demo -vet
        timeout-minutes: 10
      - name: Odin run
        run: ./odin run examples/demo
        timeout-minutes: 10
      - name: Odin run -debug
        run: ./odin run examples/demo -debug
        timeout-minutes: 10
      - name: Odin check examples/all
        run: ./odin check examples/all -strict-style
        timeout-minutes: 10
      - name: Core library tests
        run: |
          cd tests/core
          make
        timeout-minutes: 10
      - name: Vendor library tests
        run: |
          cd tests/vendor
          make
        timeout-minutes: 10
      - name: Odin internals tests
        run: |
          cd tests/internal
          make
        timeout-minutes: 10
      - name: Odin check examples/all for Linux i386
        run: ./odin check examples/all -vet -strict-style -target:linux_i386
        timeout-minutes: 10
      - name: Odin check examples/all for FreeBSD amd64
        run: ./odin check examples/all -vet -strict-style -target:freebsd_amd64
        timeout-minutes: 10
      - name: Odin check examples/all for OpenBSD amd64
        run: ./odin check examples/all -vet -strict-style -target:openbsd_amd64
        timeout-minutes: 10
  build_macOS:
    runs-on: macos-latest
    steps:
      - uses: actions/checkout@v1
      - name: Download LLVM, botan and setup PATH
        run: |
          brew install llvm@11 botan
          echo "/usr/local/opt/llvm@11/bin" >> $GITHUB_PATH
          TMP_PATH=$(xcrun --show-sdk-path)/user/include
          echo "CPATH=$TMP_PATH" >> $GITHUB_ENV
      - name: build odin
        run: ./build_odin.sh release
      - name: Odin version
        run: ./odin version
        timeout-minutes: 1
      - name: Odin report
        run: ./odin report
        timeout-minutes: 1
      - name: Odin check
        run: ./odin check examples/demo -vet
        timeout-minutes: 10
      - name: Odin run
        run: ./odin run examples/demo
        timeout-minutes: 10
      - name: Odin run -debug
        run: ./odin run examples/demo -debug
        timeout-minutes: 10
      - name: Odin check examples/all
        run: ./odin check examples/all -strict-style
        timeout-minutes: 10
      - name: Core library tests
        run: |
          cd tests/core
          make
        timeout-minutes: 10
      - name: Vendor library tests
        run: |
          cd tests/vendor
          make
        timeout-minutes: 10
      - name: Odin internals tests
        run: |
          cd tests/internal
          make
        timeout-minutes: 10
      - name: Odin check examples/all for Darwin arm64
        run: ./odin check examples/all -vet -strict-style -target:darwin_arm64
        timeout-minutes: 10
      - name: Odin check examples/all for Linux arm64
        run: ./odin check examples/all -vet -strict-style -target:linux_arm64
        timeout-minutes: 10
  build_windows:
    runs-on: windows-2022
    steps:
      - uses: actions/checkout@v1
      - name: build Odin
        shell: cmd
        run: |
          call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat
          ./build.bat 1
      - name: Odin version
        run: ./odin version
        timeout-minutes: 1
      - name: Odin report
        run: ./odin report
        timeout-minutes: 1
      - name: Odin check
        shell: cmd
        run: |
          call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat
          odin check examples/demo -vet
        timeout-minutes: 10
      - name: Odin run
        shell: cmd
        run: |
          call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat
          odin run examples/demo
        timeout-minutes: 10
      - name: Odin run -debug
        shell: cmd
        run: |
          call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat
          odin run examples/demo -debug
        timeout-minutes: 10
      - name: Odin check examples/all
        shell: cmd
        run: |
          call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat
          odin check examples/all -strict-style
        timeout-minutes: 10
      - name: Core library tests
        shell: cmd
        run: |
          call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat
          cd tests\core
          call build.bat
        timeout-minutes: 10
      - name: Vendor library tests
        shell: cmd
        run: |
          call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat
          cd tests\vendor
          call build.bat
        timeout-minutes: 10
      - name: Odin internals tests
        shell: cmd
        run: |
          call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat
          cd tests\internal
          call build.bat
        timeout-minutes: 10
      - name: Odin documentation tests
        shell: cmd
        run: |
          call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat
          cd tests\documentation
          call build.bat
        timeout-minutes: 10
      - name: core:math/big tests
        shell: cmd
        run: |
          call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat
          cd tests\core\math\big
          call build.bat
        timeout-minutes: 10
      - name: Odin check examples/all for Windows 32bits
        shell: cmd
        run: |
          call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat
          odin check examples/all -strict-style -target:windows_i386
        timeout-minutes: 10
