name: main

on:
  push:
  pull_request:
    branches:
      - master

jobs:
  build:
    strategy:
      matrix:
        CC:
          - clang
          - gcc
        distro:
          - alpine
          - archlinux
          - debian-stretch
          - debian-buster
          - fedora
          - ubuntu-xenial
          - ubuntu-bionic
          - ubuntu-focal

    env:
      CC: ${{ matrix.CC }}
      EXTRA_CFLAGS: "-Werror"
    steps:
    - uses: actions/checkout@v2
      with:
        # Clone the whole branch, we have to fetch tags later
        fetch-depth: 0

    # Fetch tags to determine proper version number inside git
    - name: fetch tags
      run: git fetch --tags
      # We cannot pull tags with old distros, since there is no `.git`. See below.
      if: "! (matrix.distro == 'ubuntu-bionic' || matrix.distro == 'ubuntu-xenial' || matrix.distro == 'debian-stretch')"

    # The Github checkout Action doesn't support distros with git older than 2.18
    # With git<2.18 it downloads the code via API and does not clone it via git :facepalm:
    # To succeed the tests, we have to manually replace the VERSION macro
    - name: fix version number for old distros
      run: 'sed -i "s/-non-git/-ci-oldgit-$GITHUB_SHA/" Makefile'
      if: "  (matrix.distro == 'ubuntu-bionic' || matrix.distro == 'ubuntu-xenial' || matrix.distro == 'debian-stretch')"

    - name: build
      run: make -j all dunstify test/test

    - name: test
      run: make -j test

    - name: installation
      run: ./test/test-install.sh

    - name: valgrind memleaks
      run: |
        make clean
        make -j test-valgrind

    - name: coverage
      run: |
        make clean
        make -j test-coverage

    - name: Generate coverage report
      run: lcov -c -d . -o lcov.info
      if: "matrix.CC == 'gcc'"

    - name: Upload coverage to Codecov
      uses: codecov/codecov-action@v1
      with:
        token: ${{ secrets.CODECOV_TOKEN }}
        flags: unittests
        name: ${{ matrix.distro }}-${{ matrix.CC }}
        fail_ci_if_error: true
      if: "matrix.CC == 'gcc'"

    runs-on: ubuntu-latest
    container:
      image: dunst/ci:${{ matrix.distro }}
