From 7cef3cffbffeab4a19b511411c9085173575c043 Mon Sep 17 00:00:00 2001 From: Henry Mercer Date: Fri, 25 Nov 2022 16:17:39 +0000 Subject: [PATCH] Add an integration test for uploading SARIF when the run fails --- .github/workflows/submit-sarif-failure.yml | 34 ++++++++++++++++++++ .github/workflows/test-report-failed-run.yml | 22 ------------- lib/init-action-post-helper.js | 9 ++++++ lib/init-action-post-helper.js.map | 2 +- src/init-action-post-helper.ts | 14 ++++++++ 5 files changed, 58 insertions(+), 23 deletions(-) create mode 100644 .github/workflows/submit-sarif-failure.yml delete mode 100644 .github/workflows/test-report-failed-run.yml diff --git a/.github/workflows/submit-sarif-failure.yml b/.github/workflows/submit-sarif-failure.yml new file mode 100644 index 0000000000..a66bceef08 --- /dev/null +++ b/.github/workflows/submit-sarif-failure.yml @@ -0,0 +1,34 @@ +name: Submit SARIF after failure +on: push + +env: + # Internal-only environment variable used to indicate that the post-init Action + # should expect to upload a SARIF file for the failed run. + CODEQL_ACTION_EXPECT_UPLOAD_FAILED_SARIF: true + # Make sure the uploading SARIF files feature is enabled. + CODEQL_ACTION_UPLOAD_FAILED_SARIF: true + +jobs: + test: + runs-on: ubuntu-latest + strategy: + matrix: + language: [javascript] + steps: + - uses: actions/checkout@v3 + - uses: ./init + with: + languages: ${{ matrix.language }} + - name: Fail + # We want this job to pass if the Action correctly uploads the SARIF file for + # the failed run. + # Setting this step to continue on error means that it is marked as completing + # successfully, so will not fail the job. + continue-on-error: true + run: exit 1 + - uses: ./analyze + # In a real workflow, this step wouldn't run. Since we used `continue-on-error` + # above, we manually disable it with an `if` condition. + if: false + with: + category: "/language:${{ matrix.language }}" diff --git a/.github/workflows/test-report-failed-run.yml b/.github/workflows/test-report-failed-run.yml deleted file mode 100644 index 094c035833..0000000000 --- a/.github/workflows/test-report-failed-run.yml +++ /dev/null @@ -1,22 +0,0 @@ -name: Test reporting a failed run -on: push - -env: - CODEQL_ACTION_UPLOAD_FAILED_SARIF: true - -jobs: - test: - runs-on: ubuntu-latest - strategy: - matrix: - language: [javascript] - steps: - - uses: actions/checkout@v3 - - uses: ./init - with: - languages: ${{ matrix.language }} - - name: Fail - run: exit 1 - - uses: ./analyze - with: - category: "/language:${{ matrix.language }}" diff --git a/lib/init-action-post-helper.js b/lib/init-action-post-helper.js index 46d5a7b3e0..ee5d9bc1e3 100644 --- a/lib/init-action-post-helper.js +++ b/lib/init-action-post-helper.js @@ -62,14 +62,23 @@ async function run(uploadDatabaseBundleDebugArtifact, uploadLogsDebugArtifact, p logger.warning("Debugging artifacts are unavailable since the 'init' Action failed before it could produce any."); return; } + // Environment variable used to integration test uploading a SARIF file for failed runs + const expectFailedSarifUpload = process.env["CODEQL_ACTION_EXPECT_UPLOAD_FAILED_SARIF"] === "true"; if (process.env[shared_environment_1.CODEQL_ACTION_ANALYZE_DID_UPLOAD_SARIF] !== "true") { try { await uploadFailedSarif(config, repositoryNwo, featureEnablement, logger); } catch (e) { + if (expectFailedSarifUpload) { + throw new Error("Expected to upload a SARIF file for the failed run, but encountered " + + `the following error: ${e}`); + } logger.warning(`Failed to upload a SARIF file for the failed run. Error: ${e}`); } } + else if (expectFailedSarifUpload) { + throw new Error("Expected to upload a SARIF file for the failed run, but didn't."); + } // Upload appropriate Actions artifacts for debugging if (config.debugMode) { core.info("Debug mode is on. Uploading available database bundles and logs as Actions debugging artifacts..."); diff --git a/lib/init-action-post-helper.js.map b/lib/init-action-post-helper.js.map index c91597b14c..b63a5da6d4 100644 --- a/lib/init-action-post-helper.js.map +++ b/lib/init-action-post-helper.js.map @@ -1 +1 @@ -{"version":3,"file":"init-action-post-helper.js","sourceRoot":"","sources":["../src/init-action-post-helper.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"init-action-post-helper.js","sourceRoot":"","sources":["../src/init-action-post-helper.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/init-action-post-helper.ts b/src/init-action-post-helper.ts index 342ea9c277..8eeb5d8da6 100644 --- a/src/init-action-post-helper.ts +++ b/src/init-action-post-helper.ts @@ -87,14 +87,28 @@ export async function run( return; } + // Environment variable used to integration test uploading a SARIF file for failed runs + const expectFailedSarifUpload = + process.env["CODEQL_ACTION_EXPECT_UPLOAD_FAILED_SARIF"] === "true"; + if (process.env[CODEQL_ACTION_ANALYZE_DID_UPLOAD_SARIF] !== "true") { try { await uploadFailedSarif(config, repositoryNwo, featureEnablement, logger); } catch (e) { + if (expectFailedSarifUpload) { + throw new Error( + "Expected to upload a SARIF file for the failed run, but encountered " + + `the following error: ${e}` + ); + } logger.warning( `Failed to upload a SARIF file for the failed run. Error: ${e}` ); } + } else if (expectFailedSarifUpload) { + throw new Error( + "Expected to upload a SARIF file for the failed run, but didn't." + ); } // Upload appropriate Actions artifacts for debugging