name: Facebook Infer static analysis

on:
  workflow_call:
    inputs:
      os:
        required: true
        type: string
      jdk_distro:
        required: true
        type: string
      jdk_version:
        required: true
        type: string
      wolfssl_configure:
        required: true
        type: string

jobs:
  build_wolfssljni:
    runs-on: ${{ inputs.os }}
    steps:
      - uses: actions/checkout@v4

      # Download Facebook Infer
      - name: Download Infer
        run: wget https://github.com/facebook/infer/releases/download/v1.1.0/infer-linux64-v1.1.0.tar.xz
      - name: Extract Infer
        run: tar -xvf infer-linux64-v1.1.0.tar.xz
      - name: Symlink Infer
        run: ln -s "$GITHUB_WORKSPACE/infer-linux64-v1.1.0/bin/infer" /usr/local/bin/infer
      - name: Test Infer get version
        run: infer --version

      # Cache and Download Junit JARs
      - name: Cache JUnit dependencies
        uses: actions/cache@v4
        id: cache-junit
        with:
          path: junit
          key: junit-jars-v1

      - name: Download junit-4.13.2.jar
        if: steps.cache-junit.outputs.cache-hit != 'true'
        run: wget --directory-prefix=$GITHUB_WORKSPACE/junit https://repo1.maven.org/maven2/junit/junit/4.13.2/junit-4.13.2.jar
      - name: Download hamcrest-all-1.3.jar
        if: steps.cache-junit.outputs.cache-hit != 'true'
        run: wget --directory-prefix=$GITHUB_WORKSPACE/junit https://repo1.maven.org/maven2/org/hamcrest/hamcrest-all/1.3/hamcrest-all-1.3.jar

      # Build native wolfSSL
      - name: Build native wolfSSL
        uses: wolfSSL/actions-build-autotools-project@v1
        with:
          repository: wolfSSL/wolfssl
          ref: master
          path: wolfssl
          configure: ${{ inputs.wolfssl_configure }}
          check: false
          install: true

      # Setup Java
      - name: Setup java
        uses: actions/setup-java@v4
        with:
          distribution: ${{ inputs.jdk_distro }}
          java-version: ${{ inputs.jdk_version }}

      - name: Set JUNIT_HOME
        run: |
          echo "JUNIT_HOME=$GITHUB_WORKSPACE/junit" >> "$GITHUB_ENV"
      - name: Set LD_LIBRARY_PATH
        run: |
          echo "LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$GITHUB_WORKSPACE/build-dir/lib" >> "$GITHUB_ENV"

      # Build wolfssljni JNI library (libwolfssljni.so)
      - name: Build JNI library
        run: ./java.sh $GITHUB_WORKSPACE/build-dir

      # Build wolfssljni JAR (wolfssljni.jar)
      - name: Build JAR (ant)
        run: ant

      # Run ant tests
      - name: Run Java tests (ant test)
        run: ant test

      - name: Show logs on failure
        if: failure() || cancelled()
        run: |
          cat build/reports/*.txt

      # Run Facebook Infer
      - name: Run Facebook Infer
        run: ./scripts/infer.sh

      - name: Shows Infer report on failure
        if: failure()
        run: cat infer-out/report.txt

