name: "Export file baseline information"
description: "Tests that file baseline information is exported when the feature is enabled"
operatingSystems:
  - ubuntu
  - macos
  - windows
versions:
  - nightly-latest
installGo: true
installDotNet: true
env:
  CODEQL_ACTION_SKIP_FILE_COVERAGE_ON_PRS: false
  CODEQL_ACTION_SUBLANGUAGE_FILE_COVERAGE: true
steps:
  - uses: ./../action/init
    id: init
    with:
      languages: javascript
      tools: ${{ steps.prepare-test.outputs.tools-url }}
  - name: Build code
    run: ./build.sh
  - uses: ./../action/analyze
    with:
      output: "${{ runner.temp }}/results"
  - name: Upload SARIF
    uses: actions/upload-artifact@v7
    with:
      name: with-baseline-information-${{ matrix.os }}-${{ matrix.version }}.sarif.json
      path: "${{ runner.temp }}/results/javascript.sarif"
      retention-days: 7
  - name: Check results
    run: |
      cd "$RUNNER_TEMP/results"
      expected_baseline_languages="c csharp go java kotlin javascript python ruby"
      if [[ $RUNNER_OS == "macOS" ]]; then
        expected_baseline_languages+=" swift"
      fi

      for lang in ${expected_baseline_languages}; do
        rule_name="cli/expected-extracted-files/${lang}"
        found_notification=$(jq --arg rule_name "${rule_name}" '[.runs[0].tool.driver.notifications |
          select(. != null) | flatten | .[].id] | any(. == $rule_name)' javascript.sarif)
        if [[ "${found_notification}" != "true" ]]; then
          echo "Expected SARIF output to contain notification '${rule_name}', but found no such notification."
          exit 1
        else
          echo "Found notification '${rule_name}'."
        fi
      done
