diff --git a/.allurerc.mjs b/.allurerc.mjs new file mode 100644 index 00000000..93859932 --- /dev/null +++ b/.allurerc.mjs @@ -0,0 +1,11 @@ +export default { + name: "Allure Python", + output: "./out/allure-report", + plugins: { + testops: { + options: { + launchName: `Allure Python GitHub actions run (${new Date().toISOString()})`, + }, + }, + }, +}; diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 8e4d4323..bf58fdab 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -31,6 +31,8 @@ jobs: runs-on: ubuntu-latest outputs: packages: ${{ steps.filter.outputs.changes }} + matrix: ${{ steps.matrix.outputs.matrix }} + count: ${{ steps.matrix.outputs.count }} steps: - uses: dorny/paths-filter@v3 id: filter @@ -116,6 +118,19 @@ jobs: with: python-version: ${{ matrix.python-version }} + - uses: actions/setup-node@v6 + with: + node-version: '20.x' + + - name: Normalize ALLURE_MATRIX_ENV + run: | + raw_value="ubuntu-python-${{ matrix.python-version }}-pytest-${{ matrix.pytest-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 packages run: | pip install ./allure-python-commons \ @@ -127,13 +142,22 @@ jobs: - name: Test allure-pytest working-directory: allure-pytest - run: poe tests + run: | + npx -y allure@3 run --config "../.allurerc.mjs" --rerun 2 --environment "${{ env.ALLURE_MATRIX_ENV }}" --dump "${{ env.ALLURE_TEST_DUMP_NAME }}" -- \ + poe tests -p allure_pytest --alluredir allure-results --allure-link-pattern "issue:https://github.com/allure-framework/allure-python/issues/{0}" + + - name: Upload report + uses: actions/upload-artifact@v7 + with: + name: ${{ env.ALLURE_TEST_DUMP_NAME }} + path: ./allure-pytest/${{ env.ALLURE_TEST_DUMP_NAME }}.zip + retention-days: 1 test-others: name: Test other packages runs-on: ubuntu-latest needs: [other-changes] - if: ${{ needs.other-changes.outputs.packages != '[]' }} + if: ${{ needs.other-changes.outputs.count != '0' }} strategy: matrix: package: ${{ fromJSON(needs.other-changes.outputs.packages) }} @@ -151,6 +175,19 @@ jobs: with: python-version: ${{ matrix.python-version }} + - uses: actions/setup-node@v6 + with: + node-version: '20.x' + + - name: Normalize ALLURE_MATRIX_ENV + run: | + raw_value="ubuntu-package-${{ matrix.package }}-python-${{ matrix.python-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 packages run: | pip install ./allure-python-commons \ @@ -161,4 +198,51 @@ jobs: - name: Test ${{ matrix.package }} working-directory: ${{ matrix.package }} - run: poe tests + run: | + npx -y allure@3 run --config "../.allurerc.mjs" --rerun 2 --environment="${{ env.ALLURE_MATRIX_ENV }}" --dump="${{ env.ALLURE_TEST_DUMP_NAME }}" -- \ + poe allure-collect + + - name: Upload report + uses: actions/upload-artifact@v7 + with: + name: ${{ env.ALLURE_TEST_DUMP_NAME }} + path: ./${{ matrix.package }}/${{ env.ALLURE_TEST_DUMP_NAME }}.zip + retention-days: 1 + + report: + needs: [test-pytest, test-others] + 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: github.event_name == 'pull_request' && github.event.pull_request.head.repo.fork == false + uses: allure-framework/allure-action@v0 + with: + report-directory: ./out/allure-report + github-token: ${{ secrets.GITHUB_TOKEN }}