name: "Bundle: Zstandard checks"
description: "A Zstandard CodeQL bundle should be extracted on supported operating systems"
versions:
  - linked
operatingSystems:
  - ubuntu
  - macos
  - windows
steps:
  - name: Remove CodeQL from toolcache
    uses: actions/github-script@v8
    with:
      script: |
        const fs = require('fs');
        const path = require('path');
        const codeqlPath = path.join(process.env['RUNNER_TOOL_CACHE'], 'CodeQL');
        if (codeqlPath !== undefined) {
          fs.rmdirSync(codeqlPath, { recursive: true });
        }
  - id: init
    uses: ./../action/init
    with:
      languages: javascript
      tools: ${{ steps.prepare-test.outputs.tools-url }}
  - uses: ./../action/analyze
    with:
      output: ${{ runner.temp }}/results
      upload-database: false
  - name: Upload SARIF
    uses: actions/upload-artifact@v7
    with:
      name: ${{ matrix.os }}-zstd-bundle.sarif
      path: ${{ runner.temp }}/results/javascript.sarif
      retention-days: 7
  - name: Check diagnostic with expected tools URL appears in SARIF
    uses: actions/github-script@v8
    env:
      SARIF_PATH: ${{ runner.temp }}/results/javascript.sarif
    with:
      script: |
        const fs = require('fs');

        const sarif = JSON.parse(fs.readFileSync(process.env['SARIF_PATH'], 'utf8'));
        const run = sarif.runs[0];

        const toolExecutionNotifications = run.invocations[0].toolExecutionNotifications;
        const downloadTelemetryNotifications = toolExecutionNotifications.filter(n =>
          n.descriptor.id === 'codeql-action/bundle-download-telemetry'
        );
        if (downloadTelemetryNotifications.length !== 1) {
          core.setFailed(
            'Expected exactly one reporting descriptor in the ' +
              `'runs[].invocations[].toolExecutionNotifications[]' SARIF property, but found ` +
              `${downloadTelemetryNotifications.length}. All notification reporting descriptors: ` +
              `${JSON.stringify(toolExecutionNotifications)}.`
          );
        }

        const toolsUrl = downloadTelemetryNotifications[0].properties.attributes.toolsUrl;
        console.log(`Found tools URL: ${toolsUrl}`);

        const expectedExtension = process.env['RUNNER_OS'] === 'Windows' ? '.tar.gz' : '.tar.zst';

        if (!toolsUrl.endsWith(expectedExtension)) {
          core.setFailed(
            `Expected the tools URL to be a ${expectedExtension} file, but found ${toolsUrl}.`
          );
        }
