name: test

on:
  push:
  pull_request:

jobs:
  skip:
    runs-on: ubuntu-latest
    steps:
      - run: echo "Skip job"

  before:
    runs-on: ubuntu-latest
    if: "! contains(github.event.head_commit.message, '[skip ci]')"
    steps:
      - run: echo "not contains '[skip ci]'"

  build:
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os:
          - ubuntu-latest
          #- windows-latest
          #- macOS-latest
        nim_version:
          - '1.2.0'
          - 'stable'
    needs: before
    env:
      TIMEOUT_EXIT_STATUS: 124
    steps:
      - uses: actions/checkout@v1
      - name: Cache nimble
        id: cache-nimble
        uses: actions/cache@v1
        with:
          path: ~/.nimble
          key: ${{ runner.os }}-nimble-${{ hashFiles('*.nimble') }}
      - uses: jiro4989/setup-nim-action@v1
        with:
          nim-version: ${{ matrix.nim_version }}

      - name: Fix apt packages
        run: |
          # see. https://github.com/actions/virtual-environments/issues/675
          sudo sed -i 's/azure\.//' /etc/apt/sources.list
          sudo apt update -yqq

      - name: Install xvfb
        run: sudo apt install -y xvfb

      - name: Install freeglut
        run: sudo apt install -y freeglut3 freeglut3-dev

      - name: Install sdl2
        run: sudo apt install --fix-missing -y libsdl2-dev libsdl2-image-dev libsdl2-mixer-dev libsdl2-ttf-dev

      - name: Build examples
        run: |
          cd examples
          for dir in hello_world calculator novel snake screensaver; do
            (
              cd "$dir"
              nim c main.nim
              timeout 2 xvfb-run --auto-servernum --server-num=1 ./main || [ $? -eq ${{ env.TIMEOUT_EXIT_STATUS }} ]
            )
          done
        shell: bash
      - name: Build tests
        run: |
          cd tests
          for file in $(ls -v test*.nim); do
            echo "test: $file"
            nim c $file
            timeout 2 xvfb-run --auto-servernum --server-num=1 ./${file%%.nim} || [ $? -eq ${{ env.TIMEOUT_EXIT_STATUS }} ]
          done
        shell: bash
