name: sysrepo devel push
on:
  push:
    branches:
      - devel

env:
  COVERITY_PROJECT: sysrepo%2Fsysrepo

jobs:
  git-branch:
    name: Get git branch
    runs-on: ubuntu-latest
    outputs:
      branch-name: ${{ steps.get-git-branch.outputs.branch-name }}
    steps:
      - id: get-git-branch
        run: |
          if ${{ github.event_name == 'push' }}
            then export GIT_BRANCH=`echo ${{ github.ref }} | cut -d'/' -f 3`
          else
            export GIT_BRANCH=${{ github.base_ref }}
          fi
          echo "branch-name=$GIT_BRANCH" >> $GITHUB_OUTPUT

  build:
    name: ${{ matrix.config.name }}
    runs-on: ${{ matrix.config.os }} # mac-OS does not implement robust mutexes so it is not supported
    needs: git-branch
    if: ${{ github.repository == 'sysrepo/sysrepo' }}
    strategy:
      fail-fast: false
      matrix:
        config:
          - {
            name: "Coverity",
            os: "ubuntu-latest",
            build-type: "Debug",
            dep-build-type: "Debug",
            cc: "clang",
            options: "",
            packages: "",
            snaps: "",
            make-prepend: "cov-build --dir cov-int",
            make-target: ""
          }
          - {
            name: "Codecov",
            os: "ubuntu-latest",
            build-type: "Debug",
            cc: "gcc",
            options: "-DENABLE_COVERAGE=ON",
            packages: "libcmocka-dev lcov",
            snaps: "",
            make-prepend: "",
            make-target: ""
          }

    steps:
      - uses: actions/checkout@main

      - name: Deps-packages
        shell: bash
        run: |
          sudo apt-get update
          if ${{ matrix.config.packages != '' }}
            then sudo apt-get install ${{ matrix.config.packages }}
          fi
          if ${{ matrix.config.snaps != '' }}
            then sudo snap install ${{ matrix.config.snaps }}
          fi

      - name: Deps-coverity
        shell: bash
        working-directory: ${{ github.workspace }}
        run: |
          wget -q https://scan.coverity.com/download/linux64 --post-data "token=$TOKEN&project=$COVERITY_PROJECT" -O coverity-tools.tar.gz
          mkdir coverity-tools
          tar xzf coverity-tools.tar.gz --strip 1 -C coverity-tools
        env:
          TOKEN: ${{ secrets.COVERITY_SCAN_TOKEN }}
        if: ${{ matrix.config.name == 'Coverity' }}

      - name: Deps-libyang
        shell: bash
        run: |
          git clone -b ${{ needs.git-branch.outputs.branch-name }} https://github.com/CESNET/libyang.git
          cd libyang
          mkdir build
          cd build
          CC=${{ matrix.config.cc }} cmake -DCMAKE_BUILD_TYPE=${{ matrix.config.dep-build-type }} -DENABLE_TESTS=OFF ..
          make -j2
          sudo make install

      - name: Configure
        shell: bash
        working-directory: ${{ github.workspace }}
        run: |
          mkdir build
          cd build
          CC=${{ matrix.config.cc }} cmake -DCMAKE_BUILD_TYPE=${{ matrix.config.build-type }} ${{ matrix.config.options }} ..

      - name: Build
        shell: bash
        working-directory: ${{ github.workspace }}/build
        run: |
          export LC_ALL=C.UTF-8
          export PATH=/snap/bin:${{ github.workspace }}/coverity-tools/bin:$PATH
          ${{ matrix.config.make-prepend }} make ${{ matrix.config.make-target }}

      - name: Test
        shell: bash
        working-directory: ${{ github.workspace }}/build
        run: ctest --output-on-failure

      - name: Upload to Coverity.com
        shell: bash
        working-directory: ${{ github.workspace }}/build
        run: |
          tar czvf sysrepo.tgz cov-int
          curl \
            --form token=$TOKEN \
            --form email=mvasko@cesnet.cz \
            --form file=@sysrepo.tgz \
            --form version="`./sysrepoctl -V | head -n1 | cut -d' ' -f 11 | cut -b 2-`" \
            --form description="sysrepo datastore" \
            https://scan.coverity.com/builds?project=$COVERITY_PROJECT
        env:
          TOKEN: ${{ secrets.COVERITY_SCAN_TOKEN }}
        if: ${{ matrix.config.name == 'Coverity' }}

      - name: Upload to Codecov.io
        shell: bash
        working-directory: ${{ github.workspace }}/build
        run: bash <(curl -s https://codecov.io/bash)
        if: ${{ matrix.config.name == 'Codecov' }}
