name: "Export file baseline information"
description: "Tests that file baseline information is exported when the feature is enabled"
versions: ["nightly-latest"]
steps:
  - uses: ./../action/init
    id: init
    with:
      languages: javascript
      tools: ${{ steps.prepare-test.outputs.tools-url }}
    env:
      CODEQL_FILE_BASELINE_INFORMATION: true
  - uses: ./../action/.github/actions/setup-swift
    with:
      codeql-path: ${{ steps.init.outputs.codeql-path }}
  - name: Build code
    shell: bash
    run: ./build.sh
  - uses: ./../action/analyze
    with:
      output: "${{ runner.temp }}/results"
    env:
      CODEQL_FILE_BASELINE_INFORMATION: true
  - name: Upload SARIF
    uses: actions/upload-artifact@v3
    with:
      name: with-baseline-information-${{ matrix.os }}-${{ matrix.version }}.sarif.json
      path: "${{ runner.temp }}/results/javascript.sarif"
      retention-days: 7
  - name: Check results
    shell: bash
    run: |
      cd "$RUNNER_TEMP/results"
      expected_baseline_languages="cpp cs go java js py rb"
      if [[ $RUNNER_OS != "Windows" ]]; then
        expected_baseline_languages+=" swift"
      fi

      for lang in ${expected_baseline_languages}; do
        rule_name="${lang}/baseline/expected-extracted-files"
        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