diff --git a/.github/workflows/build_and_test.yml b/.github/workflows/build_and_test.yml
index 86b70da15e1..afc20651818 100644
--- a/.github/workflows/build_and_test.yml
+++ b/.github/workflows/build_and_test.yml
@@ -4,6 +4,16 @@ on:
[push, pull_request]
jobs:
+ event_file: # Used for test reporting
+ name: "Publish event file"
+ runs-on: ubuntu-latest
+ steps:
+ - name: Upload
+ uses: actions/upload-artifact@v4
+ with:
+ name: EventFile
+ path: ${{ github.event_path }}
+
build:
runs-on: ${{ matrix.os }}
@@ -35,3 +45,9 @@ jobs:
with:
name: fake-artifacts-${{ matrix.os }}
path: release/artifacts
+ - name: publish test results
+ if: always()
+ uses: actions/upload-artifact@v4
+ with:
+ name: test-results-${{ matrix.os }}
+ path: testresults
diff --git a/.github/workflows/publish-test-results.yml b/.github/workflows/publish-test-results.yml
new file mode 100644
index 00000000000..4f3b4e91681
--- /dev/null
+++ b/.github/workflows/publish-test-results.yml
@@ -0,0 +1,47 @@
+# This is used to publish test results to PRs so that we can support external forks
+
+name: Publish FAKE Test Results
+
+on:
+ workflow_run:
+ workflows: ["FAKE Build and Test"]
+ types:
+ - completed
+permissions: {}
+
+jobs:
+ test-results:
+ name: Test Results
+ runs-on: ubuntu-latest
+ if: github.event.workflow_run.conclusion != 'skipped'
+
+ permissions:
+ checks: write
+ pull-requests: write
+ actions: read
+
+ steps:
+ # Download the Github event file
+ - name: Download Event file
+ uses: dawidd6/action-download-artifact@v4
+ with:
+ run_id: ${{ github.event.workflow_run.id }}
+ path: artifacts
+ name: EventFile
+
+ # Download all the test results files
+ - name: Download test results
+ uses: dawidd6/action-download-artifact@v4
+ with:
+ run_id: ${{ github.event.workflow_run.id }}
+ path: test-results
+ pattern: test-results-*
+
+ # Publish the test report
+ - name: Publish Test Results
+ uses: EnricoMi/publish-unit-test-result-action@v2
+ with:
+ commit: ${{ github.event.workflow_run.head_sha }}
+ event_file: artifacts/event.json
+ event_name: ${{ github.event.workflow_run.event }}
+ files: "test-results/**/*.xml"
diff --git a/build.fsx b/build.fsx
index f04216f2638..79323733cc7 100644
--- a/build.fsx
+++ b/build.fsx
@@ -390,8 +390,10 @@ let callPaket wd args =
/// Test assembly to run tests from
/// Expecto test results XML file
let runExpecto workDir dllPath resultsXml =
+ let resultsFile = "testresults" > resultsXml
+
let processResult =
- DotNet.exec (dotnetWorkingDir workDir) (sprintf "%s" dllPath) (sprintf "--nunit-summary %s" resultsXml)
+ DotNet.exec (dotnetWorkingDir workDir) (sprintf "%s" dllPath) (sprintf "--nunit-summary %s" resultsFile)
if processResult.ExitCode <> 0 then
failwithf "Tests in %s failed." (Path.GetFileName dllPath)