name: Tests

on: [pull_request, push]

jobs:
  test_suite:
    name: "Test Suite"
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        test:
        - "test.mod"
        - "test.run.test_assemblers"
        - "test.run.test_boot"
        - "test.run.test_noop"
        - "test.run.test_sources"
        - "test.run.test_stages"
        - "test.src"
    steps:
    - name: "Clone Repository"
      uses: actions/checkout@v2
    - name: "Run Tests"
      uses: osbuild/containers/src/actions/ghci-osbuild@v1
      with:
        run: |
          python3 -m pytest \
            --pyargs "${{ matrix.test }}" \
            --rootdir=. \
            --cov-report=xml --cov=osbuild \
            -v
    - name: Send coverage to codecov.io
      run: bash <(curl -s https://codecov.io/bash)

  documentation:
    name: "📚 Documentation"
    runs-on: ubuntu-latest
    container:
      image: docker.io/library/python:3.7
    steps:
      - name: Install Dependencies
        run: |
          pip install docutils

      - name: Clone repository
        uses: actions/checkout@v2
        with:
          path: osbuild

      - name: Generate Documentation
        run: |
          make \
            -f osbuild/Makefile \
            SRCDIR=osbuild \
            BUILDDIR=build \
            RST2MAN=rst2man.py \
            man

      - name: Verify Documentation
        working-directory: build
        run: |
          test -d docs
          test -f docs/osbuild.1

  sample_validation:
    name: "sample validation"
    runs-on: ubuntu-latest
    container:
      image: docker.io/library/python:3.7
    steps:
      - name: Clone repository
        uses: actions/checkout@v2
        with:
          path: osbuild

      - name: Install Dependencies
        run: |
          pip install jsonschema

      - name: Validate the samples
        run: |
          cd osbuild
          for f in samples/*; do
            python3 -m osbuild --libdir . --inspect "$f" > /dev/null
          done

  test_data:
    name: "Regenerate Test Data"
    runs-on: ubuntu-latest
    steps:
    - name: "Clone Repository"
      uses: actions/checkout@v2
    - name: "Regenerate Test Data"
      uses: osbuild/containers/ghci/actions/ghci-osbuild@ghci/v1
      with:
        run: |
          make test-data
          git diff --exit-code -- ./test/data

  codespell:
    name: "Spell check"
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: codespell-project/actions-codespell@master
        with:
          ignore_words_list: msdos
          skip: ./.git,coverity,rpmbuild,samples
