diff --git a/.github/workflows/auto_commit.yml b/.github/workflows/auto_commit.yml index 50818c9..7e62f9c 100644 --- a/.github/workflows/auto_commit.yml +++ b/.github/workflows/auto_commit.yml @@ -11,7 +11,7 @@ jobs: if: github.event.workflow_run.conclusion == 'success' && (github.event.workflow_run.head_commit.author.email != 'github-actions@github.com' || github.event.workflow_run.head_commit.message != '[GitHub Actions] Update green tests.') steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: repository: ${{ github.event.workflow_run.head_repository.full_name }} ref: ${{ github.event.workflow_run.head_branch }} @@ -19,7 +19,7 @@ jobs: fetch-depth: 0 - name: 'Download Green Tests' id: DownloadGreenTests - uses: actions/github-script@v6 + uses: actions/github-script@v7 with: script: | var allArtifacts = await github.rest.actions.listWorkflowRunArtifacts({ diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 67cb729..be95564 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -27,7 +27,7 @@ jobs: run: | echo 'EventName: ${{ github.event_name }}' - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: ${{ env.checkoutFetchDepth }} - name: 'Get Head Commit Info' @@ -75,7 +75,7 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Set additional variables shell: pwsh run: | @@ -109,6 +109,9 @@ jobs: $defaultConnection = '${{ matrix.dataAccessProviderType }}' -eq 'ODBC' ? 'DBQ=Jet.accdb' : 'Data Source=Jet.accdb;Persist Security Info=False;' echo "defaultConnection=$defaultConnection" >> $env:GITHUB_ENV + + $matrixId = '${{ matrix.aceVersion }}-${{ matrix.aceArchitecture }}-' + '${{ matrix.dataAccessProviderType }}'.Replace(' ', '') + '${{ matrix.os }}' + echo "matrixId=$matrixId" >> $env:GITHUB_ENV - name: Output Variables shell: pwsh run: | @@ -120,6 +123,7 @@ jobs: echo "aceSilentInstallArgument: ${{ env.aceSilentInstallArgument }}" echo "dataAccessProviderType: ${{ matrix.dataAccessProviderType }}" echo "defaultConnection: ${{ env.defaultConnection }}" + echo "matrixId: ${{ env.matrixId }}" echo "skipTests: ${{ env.skipTests }}" echo "dotnetInstallDirectory: ${{ env.dotnetInstallDirectory }}" echo "dotnetExecutable: ${{ env.dotnetExecutable }}" @@ -275,9 +279,9 @@ jobs: Get-ChildItem -Filter '*.trx' -Recurse | Sort-Object LastWriteTime | ForEach { Rename-Item $_.FullName "ace_${{ matrix.aceVersion }}_$('${{ matrix.dataAccessProviderType }}'.Replace(' ', '').ToLowerInvariant())_${{ matrix.aceArchitecture }}_$($_.Name)" -Verbose } - name: 'Upload Test Results' if: always() && env.skipTests != 'true' && env.uploadTestResults == 'true' - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: - name: test-results + name: test-results_${{ env.matrixId }} path: | test\EFCore.Jet.Data.Tests\TestResults\*.trx test\EFCore.Jet.FunctionalTests\TestResults\*.trx @@ -330,19 +334,84 @@ jobs: echo 'Check succeeded.' - name: 'Upload Green Tests' if: env.commitGreenTestsFile != '' && env.autoCommitGreenTests == 'true' - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: - name: green-tests + name: green-tests_${{ env.matrixId }} path: ${{ env.commitGreenTestsFile }} - CheckArtifacts: + MergeArtifacts: needs: BuildAndTest if: always() + outputs: + testResultsAvailable: ${{ steps.MergeTestResults.result == 'success' }} + greenTestsAvailable: ${{ steps.MergeGreenTests.result == 'success' }} + runs-on: ubuntu-latest + steps: + - name: 'Check Test Results Artifacts' + id: CheckTestResultsArtifacts + uses: actions/github-script@v7 + with: + script: | + var allArtifacts = await github.rest.actions.listWorkflowRunArtifacts({ + owner: context.repo.owner, + repo: context.repo.repo, + run_id: '${{ github.run_id }}', + }); + + var artifacts = allArtifacts.data.artifacts.filter((artifact) => { + return artifact.name.startsWith("test-results_") + }); + + if (artifacts.length > 0) { + core.setOutput('artifactsAvailable', 'true'); + console.log('Test results artifacts found.') + } + - name: 'Merge Test Results' + id: MergeTestResults + if: steps.CheckTestResultsArtifacts.outputs.artifactsAvailable == 'true' + uses: actions/upload-artifact/merge@v4 + with: + name: test-results + pattern: test-results_* + delete-merged: true + - name: 'Check Green Tests Artifacts' + id: CheckGreenTestsArtifacts + uses: actions/github-script@v7 + with: + script: | + var allArtifacts = await github.rest.actions.listWorkflowRunArtifacts({ + owner: context.repo.owner, + repo: context.repo.repo, + run_id: '${{ github.run_id }}', + }); + + var artifacts = allArtifacts.data.artifacts.filter((artifact) => { + return artifact.name.startsWith("test-results_") + }); + + if (artifacts.length > 0) { + core.setOutput('artifactsAvailable', 'true'); + console.log('Green Tests Artifacts found.') + } + - name: 'Merge Green Tests' + id: MergeGreenTests + if: steps.CheckGreenTestsArtifacts.outputs.artifactsAvailable == 'true' + uses: actions/upload-artifact/merge@v4 + with: + name: green-tests + pattern: green-tests_* + delete-merged: true + CheckArtifacts: + needs: + - BuildAndTest + - MergeArtifacts + if: always() runs-on: ubuntu-latest outputs: hasGreenTestsArtifacts: ${{ steps.CheckGreenTestsArtifacts.outputs.hasGreenTestsArtifacts }} steps: - name: 'Download Green Tests' - uses: actions/download-artifact@v3 + if: needs.MergeArtifacts.outputs.greenTestsAvailable == 'true' + uses: actions/download-artifact@v4 continue-on-error: true with: name: green-tests diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index 118cdf5..8a66ff4 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -29,7 +29,7 @@ jobs: run: | echo 'EventName: ${{ github.event_name }}' - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: ${{ env.checkoutFetchDepth }} - name: 'Get Head Commit Info' @@ -77,7 +77,7 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Set additional variables shell: pwsh run: | @@ -111,6 +111,9 @@ jobs: $defaultConnection = '${{ matrix.dataAccessProviderType }}' -eq 'ODBC' ? 'DBQ=Jet.accdb' : 'Data Source=Jet.accdb;Persist Security Info=False;' echo "defaultConnection=$defaultConnection" >> $env:GITHUB_ENV + + $matrixId = '${{ matrix.aceVersion }}-${{ matrix.aceArchitecture }}-' + '${{ matrix.dataAccessProviderType }}'.Replace(' ', '') + '${{ matrix.os }}' + echo "matrixId=$matrixId" >> $env:GITHUB_ENV - name: Output Variables shell: pwsh run: | @@ -122,6 +125,7 @@ jobs: echo "aceSilentInstallArgument: ${{ env.aceSilentInstallArgument }}" echo "dataAccessProviderType: ${{ matrix.dataAccessProviderType }}" echo "defaultConnection: ${{ env.defaultConnection }}" + echo "matrixId: ${{ env.matrixId }}" echo "skipTests: ${{ env.skipTests }}" echo "dotnetInstallDirectory: ${{ env.dotnetInstallDirectory }}" echo "dotnetExecutable: ${{ env.dotnetExecutable }}" @@ -277,9 +281,9 @@ jobs: Get-ChildItem -Filter '*.trx' -Recurse | Sort-Object LastWriteTime | ForEach { Rename-Item $_.FullName "ace_${{ matrix.aceVersion }}_$('${{ matrix.dataAccessProviderType }}'.Replace(' ', '').ToLowerInvariant())_${{ matrix.aceArchitecture }}_$($_.Name)" -Verbose } - name: 'Upload Test Results' if: always() && env.skipTests != 'true' && env.uploadTestResults == 'true' - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: - name: test-results + name: test-results_${{ env.matrixId }} path: | test\EFCore.Jet.Data.Tests\TestResults\*.trx test\EFCore.Jet.FunctionalTests\TestResults\*.trx @@ -332,19 +336,83 @@ jobs: echo 'Check succeeded.' - name: 'Upload Green Tests' if: ${{ env.commitGreenTestsFile != '' }} - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: - name: green-tests + name: green-tests_${{ env.matrixId }} path: ${{ env.commitGreenTestsFile }} - NuGet: + MergeArtifacts: needs: BuildAndTest - if: always() && (needs.BuildAndTest.result == 'success' || needs.BuildAndTest.result == 'skipped') && (github.event_name == 'push' || github.event_name == 'release') && github.repository == 'CirrusRedOrg/EntityFrameworkCore.Jet' + if: always() + outputs: + testResultsAvailable: ${{ steps.MergeTestResults.result == 'success' }} + greenTestsAvailable: ${{ steps.MergeGreenTests.result == 'success' }} + runs-on: ubuntu-latest + steps: + - name: 'Check Test Results Artifacts' + id: CheckTestResultsArtifacts + uses: actions/github-script@v7 + with: + script: | + var allArtifacts = await github.rest.actions.listWorkflowRunArtifacts({ + owner: context.repo.owner, + repo: context.repo.repo, + run_id: '${{ github.run_id }}', + }); + + var artifacts = allArtifacts.data.artifacts.filter((artifact) => { + return artifact.name.startsWith("test-results_") + }); + + if (artifacts.length > 0) { + core.setOutput('artifactsAvailable', 'true'); + console.log('Test results artifacts found.') + } + - name: 'Merge Test Results' + id: MergeTestResults + if: steps.CheckTestResultsArtifacts.outputs.artifactsAvailable == 'true' + uses: actions/upload-artifact/merge@v4 + with: + name: test-results + pattern: test-results_* + delete-merged: true + - name: 'Check Green Tests Artifacts' + id: CheckGreenTestsArtifacts + uses: actions/github-script@v7 + with: + script: | + var allArtifacts = await github.rest.actions.listWorkflowRunArtifacts({ + owner: context.repo.owner, + repo: context.repo.repo, + run_id: '${{ github.run_id }}', + }); + + var artifacts = allArtifacts.data.artifacts.filter((artifact) => { + return artifact.name.startsWith("test-results_") + }); + + if (artifacts.length > 0) { + core.setOutput('artifactsAvailable', 'true'); + console.log('Green Tests Artifacts found.') + } + - name: 'Merge Green Tests' + id: MergeGreenTests + if: steps.CheckGreenTestsArtifacts.outputs.artifactsAvailable == 'true' + uses: actions/upload-artifact/merge@v4 + with: + name: green-tests + pattern: green-tests_* + delete-merged: true + NuGet: + needs: + - BuildAndTest + - MergeArtifacts + if: always() && (needs.BuildAndTest.result == 'success' || needs.BuildAndTest.result == 'skipped') && (github.event_name == 'push' || github.event_name == 'release') && needs.MergeArtifacts.result == 'success' && github.repository == 'CirrusRedOrg/EntityFrameworkCore.Jet' runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Setup .NET SDK - uses: actions/setup-dotnet@v3 + uses: actions/setup-dotnet@v4 with: global-json-file: global.json - name: .NET Information @@ -422,7 +490,7 @@ jobs: echo "pushToMygetOrg=$pushToMygetOrg" >> $env:GITHUB_ENV echo "pushToNugetOrg=$pushToNugetOrg" >> $env:GITHUB_ENV - name: Upload Artifacts - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: nupkgs path: nupkgs diff --git a/.github/workflows/test_results.yml b/.github/workflows/test_results.yml index c3c8ff4..a84d76f 100644 --- a/.github/workflows/test_results.yml +++ b/.github/workflows/test_results.yml @@ -37,7 +37,7 @@ jobs: node --version - name: 'Check Artifact' id: CheckArtifact - uses: actions/github-script@v6 + uses: actions/github-script@v7 with: script: | var allArtifacts = await github.rest.actions.listWorkflowRunArtifacts({ @@ -54,8 +54,17 @@ jobs: core.setOutput('testResultsArtifactAvailable', 'true'); console.log('Test results artifact found.') } - - name: 'Publish Test Report' + # The dorny/test-reporter@v1 action doesn't support actions/upload-artifact@v4 yet. + # We therefore download the artifact manually and feed it to dorny/test-reporter@v1 as local files. + - name: 'Download Artifact' + id: DownloadArtifact if: steps.CheckArtifact.outputs.testResultsArtifactAvailable == 'true' + uses: actions/download-artifact@v4 + with: + name: test-results + path: test-results + - name: 'Publish Test Report' + if: steps.DownloadArtifact.result == 'success' uses: dorny/test-reporter@v1 env: # @@ -67,8 +76,9 @@ jobs: NODE_OPTIONS: --max-old-space-size=8192 with: name: 'All Tests' - artifact: test-results - path: '**/*.trx' + # artifact: test-results + # use '**/*.trx' for artifact and 'test-results/**/*.trx' for local files + path: 'test-results/**/*.trx' reporter: dotnet-trx only-summary: 'true' fail-on-error: 'false'