diff --git a/.github/actions/upload-actual/action.yml b/.github/actions/upload-actual/action.yml new file mode 100644 index 00000000000..e7e5c4c6218 --- /dev/null +++ b/.github/actions/upload-actual/action.yml @@ -0,0 +1,49 @@ +name: Upload Actual Results +description: Upload test artifacts and diffs when an integration test fails + +inputs: + name: + description: Name used for the uploaded artifacts. We upload actual_name and diff_name. + required: true + it-dir: + description: Path to integration tests. + required: true + expected-dir: + description: Relative path to expected test results. + required: true + actual-dir: + description: Relative path to actual test results. + required: true + +env: + RETENTION_DAYS: 7 + +runs: + using: composite + steps: + - name: Upload Actual Results + uses: actions/upload-artifact@v4 + with: + name: actual_${{ inputs.name }} + path: ${{ inputs.it-dir }}/${{ inputs.actual-dir }} + retention-days: ${{ env.RETENTION_DAYS }} + + - name: Generate Diff Report + shell: bash + env: + IT_DIR: ${{ inputs.it-dir }} + EXPECTED_DIR: ${{ inputs.expected-dir }} + ACTUAL_DIR: ${{ inputs.actual-dir }} + NAME: ${{ inputs.name }} + run: | + cd "${IT_DIR}" + mkdir -p target + diff --unified --recursive --strip-trailing-cr "${EXPECTED_DIR}" "${ACTUAL_DIR}" > "target/test.diff" || true + npx diff2html-cli --input file --style side --file "target/diff_${NAME}.html" -- "target/test.diff" + + - name: Upload Diff Report + uses: actions/upload-artifact@v4 + with: + name: diff_${{ inputs.name }} + path: ${{ inputs.it-dir }}/target/diff_${{ inputs.name }}.html + retention-days: ${{ env.RETENTION_DAYS }} diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0fe065958d0..45a95634552 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -98,6 +98,14 @@ jobs: run: | cd its/ruling mvn package --batch-mode "-Pit-ruling,${{ matrix.item.profile }}" -Dsonar.runtimeVersion=LATEST_RELEASE -Dmaven.test.redirectTestOutputToFile=false -B -e -V -Dparallel=methods -DuseUnlimitedThreads=true + - name: Upload Actual Results On Failure + if: failure() + uses: ./.github/actions/upload-actual + with: + name: ${{ matrix.item.runner }}_${{ matrix.item.profile }} + it-dir: its/ruling + expected-dir: src/test/resources + actual-dir: target/actual plugin-qa: strategy: @@ -323,6 +331,14 @@ jobs: -Dmaven.test.redirectTestOutputToFile=false -Dparallel=methods -DuseUnlimitedThreads=true + - name: Upload Actual Results On Failure + if: failure() + uses: ./.github/actions/upload-actual + with: + name: autoscan + it-dir: its/autoscan + expected-dir: src/test/resources/autoscan/diffs + actual-dir: target/actual/autoscan-diffs qa-os-win: name: Build and Unit Test on Windows