# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.

name: Archery & Crossbow

on:
  push:
    paths:
      - '.github/workflows/archery.yml'
      - 'dev/archery/**'
      - 'dev/tasks/**'
      - 'docker-compose.yml'
  pull_request:
    paths:
      - '.github/workflows/archery.yml'
      - 'dev/archery/**'
      - 'dev/tasks/**'
      - 'docker-compose.yml'

jobs:

  test:
    if: ${{ !contains(github.event.pull_request.title, 'WIP') }}
    name: Archery Unittests and Crossbow Check Config
    runs-on: ubuntu-latest
    steps:
      - name: Checkout Arrow
        uses: actions/checkout@v2
        with:
          fetch-depth: 0
      - name: Git Fixup
        if: ${{ github.event_name == 'pull_request' }}
        shell: bash
        run: git branch master origin/master
      - name: Free Up Disk Space
        run: ci/scripts/util_cleanup.sh
      - name: Setup Python
        uses: actions/setup-python@v1
        with:
          python-version: '3.6'
      - name: Install Archery, Crossbow- and Test Dependencies
        working-directory: dev/archery
        run: pip install pytest responses toolz jinja2 -e .[all]
      - name: Archery Unittests
        working-directory: dev/archery
        run: pytest -v archery
      - name: Archery Docker Validation
        run: archery docker
      - name: Crossbow Check Config
        working-directory: dev/tasks
        run: python crossbow.py check-config
