name: CI

on:
  push:
  pull_request:
  release:
    types: [published]
  schedule:
    # Daily at 3:21
    - cron: '21 3 * * *'

jobs:
  test:
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os:
          - macos-latest
          - windows-latest
          - ubuntu-latest
        python-version:
          - 2.7

    steps:

      # Get vcpython27 on Windows + Python 2.7, to build zfec
      # extension.  See https://chocolatey.org/packages/vcpython27 and
      # https://github.com/crazy-max/ghaction-chocolatey
      - name: Install MSVC 9.0 for Python 2.7 on Windows
        if: matrix.os == 'windows-latest' && matrix.python-version == '2.7'
        uses: crazy-max/ghaction-chocolatey@v1
        with:
          args: install vcpython27

      - name: Check out Tahoe-LAFS sources
        uses: actions/checkout@v2

      - name: Fetch all history for all tags and branches
        run: git fetch --prune --unshallow

      - name: Set up Python ${{ matrix.python-version }}
        uses: actions/setup-python@v1
        with:
          python-version: ${{ matrix.python-version }}

      - name: Install Python packages
        run: |
          pip install --upgrade codecov tox setuptools
          pip list

      - name: Display tool versions
        run: python misc/build_helpers/show-tool-versions.py

      # # codechecks throws type error; disable for now.
      # - name: Run "tox -e codechecks"
      #   run: tox -e codechecks

      - name: Run "tox -e py27"
        if: matrix.python-version == '2.7'
        run: tox -e py27

      - name: Run "tox -e coverage"
        run: tox -e coverage

      - name: Run "tox -e pyinstaller"
        run: tox -e pyinstaller

      - name: Upload eliot.log in case of failure
        uses: actions/upload-artifact@v1
        if: failure()
        with:
          name: eliot.log
          path: eliot.log

      # Set Codecov token inside Project Settings > Secrets as
      # CODECOV_TOKEN.
      - name: Upload coverage report
        uses: codecov/codecov-action@v1
        with:
          token: ${{ secrets.CODECOV_TOKEN }}
          file: coverage.xml
