name: Continuous integration
on: [push, pull_request]

jobs:
  linux:
    name: Build (Linux, GCC)
    runs-on: ubuntu-18.04
    steps:
      - name: Checkout
        uses: actions/checkout@v2
        with:
          submodules: recursive

      - name: Set up Python (for SCons)
        uses: actions/setup-python@v4
        with:
          python-version: '3.x'

      - name: Install dependencies
        run: |
          sudo apt-get update -qq
          sudo apt-get install -qqq build-essential pkg-config
          python -m pip install scons
          curl -LO https://downloads.tuxfamily.org/godotengine/3.4/Godot_v3.4-stable_linux_server.64.zip
          unzip Godot_v3.4-stable_linux_server.64.zip

      - name: Build godot-cpp
        run: |
          scons target=release generate_bindings=yes -j $(nproc)

      - name: Upload artifact
        uses: actions/upload-artifact@v3
        with:
          name: godot-cpp-linux-glibc2.27-x86_64-release
          path: bin/libgodot-cpp.linux.release.64.a
          if-no-files-found: error

      - name: Build test GDNative library
        run: |
          scons target=release platform=linux bits=64 -j $(nproc) -C test

      - name: Run test GDNative library
        run: |
          ./Godot_v3.4-stable_linux_server.64 --path test -s script.gd

  windows-msvc:
    name: Build (Windows, MSVC)
    runs-on: windows-2019
    steps:
      - name: Checkout
        uses: actions/checkout@v2
        with:
          submodules: recursive

      - name: Set up Python (for SCons)
        uses: actions/setup-python@v2
        with:
          python-version: '3.x'

      - name: Install dependencies
        run: |
          python -m pip install scons

      - name: Build godot-cpp
        run: |
          scons target=release generate_bindings=yes -j $env:NUMBER_OF_PROCESSORS

      - name: Upload artifact
        uses: actions/upload-artifact@v2
        with:
          name: godot-cpp-windows-msvc2019-x86_64-release
          path: bin/libgodot-cpp.windows.release.64.lib
          if-no-files-found: error

  windows-mingw:
    name: Build (Windows, MinGW)
    runs-on: windows-2019
    steps:
      - name: Checkout
        uses: actions/checkout@v2
        with:
          submodules: recursive

      - name: Set up Python (for SCons)
        uses: actions/setup-python@v2
        with:
          python-version: '3.x'

      - name: Install dependencies
        run: |
          python -m pip install scons

      - name: Setup MinGW for Windows/MinGW build
        uses: egor-tensin/setup-mingw@v2
        with:
          version: 12.2.0

      - name: Build godot-cpp
        run: |
          scons target=release generate_bindings=yes use_mingw=yes -j $env:NUMBER_OF_PROCESSORS

      - name: Upload artifact
        uses: actions/upload-artifact@v2
        with:
          name: godot-cpp-linux-mingw-x86_64-release
          path: bin/libgodot-cpp.windows.release.64.a
          if-no-files-found: error

  macos:
    name: Build (macOS, Clang)
    runs-on: macos-11
    steps:
      - name: Checkout
        uses: actions/checkout@v2
        with:
          submodules: recursive

      - name: Set up Python (for SCons)
        uses: actions/setup-python@v2
        with:
          python-version: '3.x'

      - name: Install dependencies
        run: |
          python -m pip install scons
          curl -LO https://downloads.tuxfamily.org/godotengine/3.4/Godot_v3.4-stable_osx.universal.zip
          unzip Godot_v3.4-stable_osx.universal.zip

      - name: Build godot-cpp
        run: |
          scons target=release generate_bindings=yes -j $(sysctl -n hw.logicalcpu)

      - name: Upload artifact
        uses: actions/upload-artifact@v2
        with:
          name: godot-cpp-macos-universal-release
          path: bin/libgodot-cpp.osx.release.64.a
          if-no-files-found: error

      - name: Build test GDNative library
        run: |
          scons target=release platform=osx bits=64 macos_arch=universal -j $(sysctl -n hw.logicalcpu) -C test

      - name: Run test GDNative library
        run: |
          ./Godot.app/Contents/MacOS/Godot --path test -s script.gd

  static-checks:
    name: Static Checks (clang-format)
    runs-on: ubuntu-20.04
    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - name: Make apt sources.list use the default Ubuntu repositories
        run: |
          sudo rm -f /etc/apt/sources.list.d/*
          sudo cp -f misc/ci/sources.list /etc/apt/sources.list
          sudo apt-get update

      - name: Install dependencies
        run: |
          sudo apt-get install -qq dos2unix recode clang-format-11
          sudo update-alternatives --remove-all clang-format
          sudo update-alternatives --install /usr/bin/clang-format clang-format /usr/bin/clang-format-11 100

      - name: Style checks via clang-format
        run: |
          bash ./misc/scripts/clang_format.sh