name: PR Checks

# Run the CI if branches are pushed locally, allowing us to
# run CI without the need of creating a pull request.
#
# Run the CI on pull requests only if they are from forked
# repositories.
#
on:
  push:
    branches-ignore:
    - gh-pages
    - master
  pull_request:
    types: [assigned, opened, synchronize, reopened]
    branches:
      # Branches from forks have the form 'user:branch-name' so we only run
      # this job on pull_request events for branches that look like fork
      # branches. Without this we would end up running this job twice for non
      # forked PRs, once for the push and then once for opening the PR.
    - '**:**'


# Left to-do:
# - coverage
# - publishing docs to gh-pages
# - persistent artifact cache
# - overnight jobs
# - wsl tasks (TODO: Check if GitHub's Windows runners allow WSL)
#
# New opportunities:
# - run tests on mac (GitHub provides MacOS runners)
# - standardize WSL tasks by using GitHub-provided runners

jobs:
  tests:
    runs-on: ubuntu-20.04
    continue-on-error: ${{ matrix.allow-failure || false }}

    strategy:
      fail-fast: false
      matrix:

        # The names here should map to a valid service defined in
        # "../compose/ci.docker-compose.yml"
        test-name:
          - debian-10
          - fedora-32
          - fedora-33
          - ubuntu-18.04
          - centos-7.7.1908
          - fedora-missing-deps
          - no-usedevelop
          - lint
          - mypy

        include:
          - test-name: plugins-master
            allow-failure: true

    steps:
      - name: Check out repository
        uses: actions/checkout@v2
        # BuildStream requires tags to be able to find its version.
        with:
          fetch-depth: 0

      - name: Give `testuser` ownership of the source directory
        run: sudo chown -R 1000:1000 ${GITHUB_WORKSPACE}

      - name: Run tests with Docker Compose
        run: |
          docker-compose \
            --env-file ${GITHUB_WORKSPACE}/.github/common.env \
            --file ${GITHUB_WORKSPACE}/.github/compose/ci.docker-compose.yml \
            run \
            ${{ matrix.test-name }}

  # Matrix of tests which run against remote services which we bring up adjacently
  service-tests:
    runs-on: ubuntu-20.04

    strategy:
      matrix:

        # The names here map to valid services defined in "../compose/ci.docker-compose.yml",
        # and they also map to corresponding filenames of services which are expected
        # to be run in the background
        test-name:
          - bst-artifact-server
          - buildbarn
          - buildgrid

    steps:
      - name: Check out repository
        uses: actions/checkout@v2
        # BuildStream requires tags to be able to find its version.
        with:
          fetch-depth: 0

      - name: Give `testuser` ownership of the source directory
        run: sudo chown -R 1000:1000 ${GITHUB_WORKSPACE}

      - name: Bring up the RE cluster
        run: |
          docker-compose \
            --env-file ${GITHUB_WORKSPACE}/.github/common.env \
            --file ${GITHUB_WORKSPACE}/.github/compose/ci.${{ matrix.test-name }}.yml \
            up --detach --renew-anon-volumes --remove-orphans

      - name: Run the remote execution tests
        run: |
          docker-compose \
            --env-file ${GITHUB_WORKSPACE}/.github/common.env \
            --file ${GITHUB_WORKSPACE}/.github/compose/ci.docker-compose.yml run ${{ matrix.test-name }}

      - name: Bring down the RE cluster
        run: |
          docker-compose \
            --env-file ${GITHUB_WORKSPACE}/.github/common.env \
            --file ${GITHUB_WORKSPACE}/.github/compose/ci.${{ matrix.test-name }}.yml stop
          docker-compose \
            --env-file ${GITHUB_WORKSPACE}/.github/common.env \
            --file ${GITHUB_WORKSPACE}/.github/compose/ci.${{ matrix.test-name }}.yml logs
          docker-compose \
            --env-file ${GITHUB_WORKSPACE}/.github/common.env \
            --file ${GITHUB_WORKSPACE}/.github/compose/ci.${{ matrix.test-name }}.yml down

  docs:
    runs-on: ubuntu-20.04
    steps:
      - name: Check out repository
        uses: actions/checkout@v2
        # BuildStream requires tags to be able to find its version.
        with:
          fetch-depth: 0

      - name: Give `testuser` ownership of the source directory
        run: sudo chown -R 1000:1000 ${GITHUB_WORKSPACE}

      - name: Build documentation using Docker Compose
        run: |
          docker-compose \
            --env-file ${GITHUB_WORKSPACE}/.github/common.env \
            --file ${GITHUB_WORKSPACE}/.github/compose/ci.docker-compose.yml \
            run \
            docs

      - name: Upload artifacts
        uses: actions/upload-artifact@v2
        with:
          name: docs
          path: doc/build/html
