name: Build Tests

on: [push, pull_request]

jobs:
  build-test:
    name: Build Test
    runs-on: ubuntu-latest
    continue-on-error: true
    strategy:
      matrix:
        os:
          - 'fedora:latest'
          - 'debian:testing'
          - 'ubuntu:rolling'
          # Disable CentOS due to missing dependencies
          # - 'centos:7'
          # - 'centos:8'
    container: ${{ matrix.os }}
    steps:
    - name: Clone repository
      uses: actions/checkout@v3

    - name: Set up Java
      uses: actions/setup-java@v3
      with:
        java-version: '17'
        distribution: 'adopt'

    - name: Install Fedora/CentOS dependencies
      if: ${{ startsWith(matrix.os, 'fedora:') || startsWith(matrix.os, 'centos:') }}
      run: |
        dnf install -y dnf-plugins-core rpm-build maven
        dnf builddep -y --spec jss.spec

    - name: Install Debian/Ubuntu dependencies
      if: ${{ startsWith(matrix.os, 'debian:') || startsWith(matrix.os, 'ubuntu:') }}
      run: |
        apt-get update
        apt-get install -y \
            cmake zip unzip \
            g++ libnss3-dev libnss3-tools \
            openjdk-17-jdk libcommons-lang3-java libslf4j-java junit4 \
            maven

    - name: Build JSS with CMake
      run: ./build.sh --with-tests

    - name: Build JSS with Maven
      run: mvn package

    - name: Compare jss.jar
      run: |
        jar tvf ~/build/jss/jss.jar | awk '{print $8;}' | sort | tee cmake.out
        jar tvf base/target/jss-5.3.0-SNAPSHOT.jar | awk '{print $8;}' | grep -v '^META-INF/maven/' | sort > maven.out
        diff cmake.out maven.out

    # TODO: Run examples

  # Compare JNI symbols in the code and in the version script.
  # If there are JNI symbols in the code but not in the version script -> fail.
  symbol-test:
    name: Symbol Test
    runs-on: ubuntu-latest
    env:
      JAVA_HOME: /usr/lib/jvm/java-17-openjdk-amd64
    steps:
      - name: Clone repository
        uses: actions/checkout@v3

      - name: Get JNI symbols in the code
        run: |
          grep -iroh '^Java_org_mozilla[^(;]*' native/src/main/native/ | sort -u > /tmp/functions.txt
          cat /tmp/functions.txt

      - name: Get JNI symbols in the version script
        run: |
          grep -iroh '^Java_org_mozilla[^(;]*' lib/ | sort -u > /tmp/version.txt
          cat /tmp/version.txt

      - name: Compare JNI symbols
        run: |
          diff /tmp/functions.txt /tmp/version.txt || true
          comm -23 --check-order /tmp/functions.txt /tmp/version.txt > /tmp/diff.txt
          test ! -s /tmp/diff.txt

  rpminspect:
    name: RPMInspect
    runs-on: ubuntu-latest
    container: 'fedora:latest'
    steps:
    - name: Clone repository
      uses: actions/checkout@v3

    - name: Set up Java
      uses: actions/setup-java@v3
      with:
        java-version: '17'
        distribution: 'adopt'

    - name: Install Fedora dependencies
      run: |
        dnf install -y dnf-plugins-core rpm-build maven
        dnf builddep -y --spec jss.spec

    - name: Build JSS RPMs with CMake
      run: ./build.sh --work-dir=build rpm

    - name: Install RPMInspect
      run: |
        dnf install -y dnf-plugins-core
        dnf copr enable -y copr.fedorainfracloud.org/dcantrell/rpminspect
        dnf install -y rpminspect rpminspect-data-fedora

    - name: Run RPMInspect on SRPM and RPMs
      run: ./tests/bin/rpminspect.sh
