diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index fe0d75f..d7b5dde 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -71,6 +71,19 @@ jobs: coverage: xdebug ini-values: error_reporting=E_ALL + - uses: actions/setup-node@v6 + with: + node-version: '20.x' + + - name: Normalize ALLURE_MATRIX_ENV + run: | + raw_value="${{ matrix.os }}-php-${{ matrix.php-version }}" + value="$raw_value" + value="${value//./_}" + value="${value//\*/x}" + echo "ALLURE_MATRIX_ENV=${value}" >> "$GITHUB_ENV" + echo "ALLURE_TEST_DUMP_NAME=allure-results-${value}" >> "$GITHUB_ENV" + - name: Install dependencies run: composer update --prefer-dist --no-progress @@ -81,11 +94,76 @@ jobs: )**" >> "$GITHUB_STEP_SUMMARY" shell: bash - - name: Run unit tests tests - run: composer test-unit + - name: Run unit tests + run: | + npx -y allure@3 run --config ./allurerc.mjs --rerun 2 --environment="${{ env.ALLURE_MATRIX_ENV }}" --dump="${{ env.ALLURE_TEST_DUMP_NAME }}-unit" -- \ + composer test-unit - name: Run samples - run: composer test-report-generate + run: | + npx -y allure@3 run --config ./allurerc.mjs --rerun 2 --environment="${{ env.ALLURE_MATRIX_ENV }}" --dump="${{ env.ALLURE_TEST_DUMP_NAME }}-run-samples" -- \ + composer test-report-generate - name: Assert samples - run: composer test-report-check + run: | + npx -y allure@3 run --config ./allurerc.mjs --rerun 2 --environment="${{ env.ALLURE_MATRIX_ENV }}" --dump="${{ env.ALLURE_TEST_DUMP_NAME }}-assert-samples" -- \ + composer test-report-check + + - name: Upload unit test dump + uses: actions/upload-artifact@v7 + with: + name: ${{ env.ALLURE_TEST_DUMP_NAME }}-unit + path: ./${{ env.ALLURE_TEST_DUMP_NAME }}-unit.zip + retention-days: 1 + + - name: Upload run samples dump + uses: actions/upload-artifact@v7 + with: + name: ${{ env.ALLURE_TEST_DUMP_NAME }}-run-samples + path: ./${{ env.ALLURE_TEST_DUMP_NAME }}-run-samples.zip + retention-days: 1 + + - name: Upload assert samples dump + uses: actions/upload-artifact@v7 + with: + name: ${{ env.ALLURE_TEST_DUMP_NAME }}-assert-samples + path: ./${{ env.ALLURE_TEST_DUMP_NAME }}-assert-samples.zip + retention-days: 1 + + report: + needs: [tests] + name: Build Allure report + runs-on: ubuntu-latest + if: always() + permissions: + contents: read + pull-requests: write + checks: write + env: + ALLURE_TOKEN: ${{ secrets.ALLURE_TOKEN }} + ALLURE_ENDPOINT: ${{ secrets.ALLURE_ENDPOINT }} + ALLURE_PROJECT_ID: ${{ secrets.ALLURE_PROJECT_ID }} + steps: + - uses: actions/checkout@v6 + + - uses: actions/setup-node@v6 + with: + node-version: '20.x' + + - name: Download Allure dumps + uses: actions/download-artifact@v8 + continue-on-error: true + with: + pattern: allure-results-* + path: ./ + merge-multiple: true + + - name: Generate Allure report + run: npx -y allure@3 generate --config ./allurerc.mjs --dump="allure-results-*.zip" --output=./out/allure-report + + - name: Post Allure summary + if: ${{ always() && !cancelled() && contains(fromJSON('["success","failure"]'), needs.tests.result) }} + uses: allure-framework/allure-action@v0 + with: + report-directory: ./out/allure-report + github-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/allurerc.mjs b/allurerc.mjs new file mode 100644 index 0000000..928cffa --- /dev/null +++ b/allurerc.mjs @@ -0,0 +1,11 @@ +export default { + name: "Allure Codeception", + output: "./out/allure-report", + plugins: { + testops: { + options: { + launchName: `Allure Codeception GitHub actions run (${new Date().toISOString()})`, + }, + }, + }, +};