diff --git a/.github/actions/changelog/publish-release/action.yml b/.github/actions/changelog/publish-release/action.yml index 4e5a0286b..1e3738f45 100644 --- a/.github/actions/changelog/publish-release/action.yml +++ b/.github/actions/changelog/publish-release/action.yml @@ -16,7 +16,8 @@ inputs: runs: using: composite steps: - - name: Publish release + - id: publish + name: Publish release shell: bash env: GH_TOKEN: ${{ github.token }} @@ -24,3 +25,11 @@ runs: INPUT_TARGET: ${{ inputs.target }} INPUT_NOTES_FILE: ${{ inputs.notes-file }} run: ${{ github.action_path }}/run.sh + +outputs: + operation: + description: Whether the release was created or updated. + value: ${{ steps.publish.outputs.operation }} + url: + description: URL of the published GitHub release. + value: ${{ steps.publish.outputs.url }} diff --git a/.github/actions/changelog/publish-release/run.sh b/.github/actions/changelog/publish-release/run.sh index e3b48f07e..0fa2ea3d5 100755 --- a/.github/actions/changelog/publish-release/run.sh +++ b/.github/actions/changelog/publish-release/run.sh @@ -4,14 +4,21 @@ set -euo pipefail release_tag="v${INPUT_VERSION}" if gh release view "${release_tag}" --repo "${GITHUB_REPOSITORY}" >/dev/null 2>&1; then + operation="updated" gh release edit "${release_tag}" \ --repo "${GITHUB_REPOSITORY}" \ --title "${release_tag}" \ --notes-file "${INPUT_NOTES_FILE}" else + operation="created" gh release create "${release_tag}" \ --repo "${GITHUB_REPOSITORY}" \ --target "${INPUT_TARGET}" \ --title "${release_tag}" \ --notes-file "${INPUT_NOTES_FILE}" fi + +release_url="$(gh release view "${release_tag}" --repo "${GITHUB_REPOSITORY}" --json url --jq '.url')" + +echo "operation=${operation}" >> "${GITHUB_OUTPUT}" +echo "url=${release_url}" >> "${GITHUB_OUTPUT}" diff --git a/.github/actions/github-pages/cleanup-orphaned-previews/action.yml b/.github/actions/github-pages/cleanup-orphaned-previews/action.yml index 0459fb08d..11f50683d 100644 --- a/.github/actions/github-pages/cleanup-orphaned-previews/action.yml +++ b/.github/actions/github-pages/cleanup-orphaned-previews/action.yml @@ -9,9 +9,21 @@ inputs: runs: using: composite steps: - - name: Cleanup orphaned previews + - id: cleanup + name: Cleanup orphaned previews shell: bash env: INPUT_PATH: ${{ inputs.path }} GH_TOKEN: ${{ github.token }} run: ${{ github.action_path }}/run.sh + +outputs: + deleted: + description: Number of deleted preview directories. + value: ${{ steps.cleanup.outputs.deleted }} + skipped: + description: Number of retained preview directories. + value: ${{ steps.cleanup.outputs.skipped }} + unresolved: + description: Number of unresolved preview directories. + value: ${{ steps.cleanup.outputs.unresolved }} diff --git a/.github/actions/github-pages/cleanup-orphaned-previews/run.sh b/.github/actions/github-pages/cleanup-orphaned-previews/run.sh index 481cd9b78..370dc109b 100755 --- a/.github/actions/github-pages/cleanup-orphaned-previews/run.sh +++ b/.github/actions/github-pages/cleanup-orphaned-previews/run.sh @@ -46,6 +46,10 @@ done < <(find previews -mindepth 1 -maxdepth 1 -type d -name 'pr-*' | sort) echo "Preview cleanup summary: deleted=${deleted}, skipped=${skipped}, unresolved=${unresolved}." +echo "deleted=${deleted}" >> "${GITHUB_OUTPUT}" +echo "skipped=${skipped}" >> "${GITHUB_OUTPUT}" +echo "unresolved=${unresolved}" >> "${GITHUB_OUTPUT}" + touch .nojekyll git config user.name "github-actions[bot]" git config user.email "41898282+github-actions[bot]@users.noreply.github.com" diff --git a/.github/actions/summary/write/action.yml b/.github/actions/summary/write/action.yml new file mode 100644 index 000000000..46270618c --- /dev/null +++ b/.github/actions/summary/write/action.yml @@ -0,0 +1,16 @@ +name: Write Workflow Step Summary +description: Append deterministic Markdown to GITHUB_STEP_SUMMARY when content is available. + +inputs: + markdown: + description: Markdown content to append to the workflow step summary. + required: true + +runs: + using: composite + steps: + - name: Append summary + shell: bash + env: + INPUT_MARKDOWN: ${{ inputs.markdown }} + run: ${{ github.action_path }}/run.sh diff --git a/.github/actions/summary/write/run.sh b/.github/actions/summary/write/run.sh new file mode 100755 index 000000000..c561ee554 --- /dev/null +++ b/.github/actions/summary/write/run.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash +set -euo pipefail + +if [ -z "${INPUT_MARKDOWN}" ]; then + exit 0 +fi + +printf '%s\n' "${INPUT_MARKDOWN}" >> "${GITHUB_STEP_SUMMARY}" diff --git a/.github/actions/wiki/cleanup-orphaned-previews/action.yml b/.github/actions/wiki/cleanup-orphaned-previews/action.yml index 0a08f7a1a..8d638810f 100644 --- a/.github/actions/wiki/cleanup-orphaned-previews/action.yml +++ b/.github/actions/wiki/cleanup-orphaned-previews/action.yml @@ -4,9 +4,21 @@ description: Delete wiki preview branches for pull requests that are no longer o runs: using: composite steps: - - name: Cleanup orphaned previews + - id: cleanup + name: Cleanup orphaned previews shell: bash env: GH_TOKEN: ${{ github.token }} working-directory: .github/wiki run: ${{ github.action_path }}/run.sh + +outputs: + deleted: + description: Number of deleted preview branches. + value: ${{ steps.cleanup.outputs.deleted }} + skipped: + description: Number of retained preview branches. + value: ${{ steps.cleanup.outputs.skipped }} + unresolved: + description: Number of unresolved preview branches. + value: ${{ steps.cleanup.outputs.unresolved }} diff --git a/.github/actions/wiki/cleanup-orphaned-previews/run.sh b/.github/actions/wiki/cleanup-orphaned-previews/run.sh index e75b8c087..d3ce25e22 100755 --- a/.github/actions/wiki/cleanup-orphaned-previews/run.sh +++ b/.github/actions/wiki/cleanup-orphaned-previews/run.sh @@ -3,12 +3,17 @@ set -euo pipefail git fetch origin '+refs/heads/pr-*:refs/remotes/origin/pr-*' || true -git for-each-ref --format='%(refname:short)' refs/remotes/origin/pr-* | while read -r remote_branch; do +deleted=0 +skipped=0 +unresolved=0 + +while read -r remote_branch; do branch="${remote_branch#origin/}" pull_request_number="${branch#pr-}" if ! [[ "${pull_request_number}" =~ ^[0-9]+$ ]]; then echo "Skipping non-PR wiki preview branch ${branch}." + skipped=$((skipped + 1)) continue fi @@ -18,12 +23,19 @@ git for-each-ref --format='%(refname:short)' refs/remotes/origin/pr-* | while re CLOSED|MERGED) echo "Deleting wiki preview branch ${branch} for ${state} pull request #${pull_request_number}." git push origin --delete "${branch}" || true + deleted=$((deleted + 1)) ;; OPEN) echo "Keeping wiki preview branch ${branch} for open pull request #${pull_request_number}." + skipped=$((skipped + 1)) ;; *) echo "Could not resolve pull request #${pull_request_number} for wiki preview branch ${branch}. Keeping it." + unresolved=$((unresolved + 1)) ;; esac -done +done < <(git for-each-ref --format='%(refname:short)' refs/remotes/origin/pr-*) + +echo "deleted=${deleted}" >> "${GITHUB_OUTPUT}" +echo "skipped=${skipped}" >> "${GITHUB_OUTPUT}" +echo "unresolved=${unresolved}" >> "${GITHUB_OUTPUT}" diff --git a/.github/wiki b/.github/wiki index e4312aab8..2a1fdf635 160000 --- a/.github/wiki +++ b/.github/wiki @@ -1 +1 @@ -Subproject commit e4312aab8d185e3478d1b0adbdc6d90dcfa6e042 +Subproject commit 2a1fdf63550711a077bf945b0c5d98ed7cc8b773 diff --git a/.github/workflows/changelog.yml b/.github/workflows/changelog.yml index e7537914b..0e6eec608 100644 --- a/.github/workflows/changelog.yml +++ b/.github/workflows/changelog.yml @@ -107,6 +107,15 @@ jobs: BASE_REF: ${{ github.event.pull_request.base.ref }} run: composer dev-tools changelog:check -- --file="${CHANGELOG_FILE}" --against="origin/${BASE_REF}" + - uses: ./.github/actions/summary/write + with: + markdown: | + ## Changelog Validation Summary + + - Changelog file: `${{ env.CHANGELOG_FILE }}` + - Compared base ref: `origin/${{ github.event.pull_request.base.ref }}` + - Validation result: success + prepare_release_pull_request: name: Prepare Release Pull Request needs: resolve_php @@ -181,11 +190,16 @@ jobs: from-status: Merged to-status: Release Prepared - - name: Summarize prepared release - run: | - echo "Prepared release version: ${{ steps.version.outputs.value }}" - echo "Pull request operation: ${{ steps.create_pr.outputs.pull-request-operation || 'none' }}" - echo "Pull request URL: ${{ steps.create_pr.outputs.pull-request-url || 'not created' }}" + - uses: ./.github/actions/summary/write + with: + markdown: | + ## Release Preparation Summary + + - Changelog file: `${{ env.CHANGELOG_FILE }}` + - Release version: `${{ steps.version.outputs.value }}` + - Version source: `${{ steps.version.outputs.source }}` + - Pull request operation: `${{ steps.create_pr.outputs.pull-request-operation || 'none' }}` + - Pull request URL: ${{ steps.create_pr.outputs.pull-request-url || 'not created' }} publish_merged_release: name: Publish Merged Release @@ -225,6 +239,7 @@ jobs: version: ${{ steps.version.outputs.value }} - name: Publish GitHub release + id: publish_release uses: ./.github/actions/changelog/publish-release with: version: ${{ steps.version.outputs.value }} @@ -238,3 +253,13 @@ jobs: from-status: Release Prepared to-status: Released include-current-pull-request: 'true' + + - uses: ./.github/actions/summary/write + with: + markdown: | + ## Release Publication Summary + + - Changelog file: `${{ env.CHANGELOG_FILE }}` + - Published tag: `v${{ steps.version.outputs.value }}` + - Release operation: `${{ steps.publish_release.outputs.operation }}` + - Release URL: ${{ steps.publish_release.outputs.url }} diff --git a/.github/workflows/reports.yml b/.github/workflows/reports.yml index 29b7b7a48..e98e23b2f 100644 --- a/.github/workflows/reports.yml +++ b/.github/workflows/reports.yml @@ -219,6 +219,10 @@ jobs: permissions: contents: write pull-requests: read + outputs: + deleted: ${{ steps.cleanup.outputs.deleted }} + skipped: ${{ steps.cleanup.outputs.skipped }} + unresolved: ${{ steps.cleanup.outputs.unresolved }} steps: - uses: actions/checkout@v6 @@ -230,6 +234,7 @@ jobs: path: gh-pages - uses: ./.github/actions/github-pages/cleanup-orphaned-previews + id: cleanup with: path: gh-pages @@ -237,3 +242,64 @@ jobs: run: | cd gh-pages git push + + summarize: + if: ${{ always() }} + name: Summarize Reports Workflow + needs: + - resolve_php + - reports + - verify_main_reports + - verify_preview_reports + - cleanup_preview + - cleanup_orphaned_previews + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + + - id: build_summary + env: + TRIGGER_LABEL: ${{ github.event_name }}${{ github.event.action && format(':{0}', github.event.action) || '' }} + run: | + { + echo 'markdown<> "$GITHUB_OUTPUT" + + - uses: ./.github/actions/summary/write + with: + markdown: ${{ steps.build_summary.outputs.markdown }} diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 2b8c4e0ce..3a0c44c54 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -118,3 +118,27 @@ jobs: env: COMPOSER_ROOT_VERSION: ${{ env.TESTS_ROOT_VERSION }} run: composer dev-tools dependencies -- --max-outdated=${{ inputs.max-outdated || -1 }} + + summarize: + if: ${{ always() }} + name: Summarize Test Workflow + needs: + - resolve_php + - tests + - dependency-health + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + + - uses: ./.github/actions/summary/write + with: + markdown: | + ## Tests Workflow Summary + + - Workflow PHP version: `${{ needs.resolve_php.outputs.php-version }}` + - PHP version source: `${{ needs.resolve_php.outputs.php-version-source }}` + - Test matrix: `${{ needs.resolve_php.outputs.test-matrix }}` + - Minimum coverage threshold: `${{ inputs.min-coverage || 80 }}` + - Dependency health `max-outdated`: `${{ inputs.max-outdated || -1 }}` + - Tests job result: `${{ needs.tests.result }}` + - Dependency health result: `${{ needs.dependency-health.result }}` diff --git a/.github/workflows/wiki-maintenance.yml b/.github/workflows/wiki-maintenance.yml index 6a5d2f77d..7a8f59d7c 100644 --- a/.github/workflows/wiki-maintenance.yml +++ b/.github/workflows/wiki-maintenance.yml @@ -59,6 +59,17 @@ jobs: with: preview-branch: ${{ env.WIKI_PREVIEW_BRANCH }} + - uses: ./.github/actions/summary/write + with: + markdown: | + ## Wiki Publish Summary + + - Publish branch: `${{ env.WIKI_PUBLISH_BRANCH }}` + - Preview branch: `${{ env.WIKI_PREVIEW_BRANCH }}` + - Expected preview SHA: `${{ steps.prepare_publish.outputs.expected-preview-sha }}` + - Publish validation: completed + - Preview cleanup: `${{ env.WIKI_PREVIEW_BRANCH }}` deleted + cleanup_closed_preview: name: Delete Closed PR Wiki Preview if: github.event_name == 'pull_request_target' && github.event.pull_request.merged == false @@ -86,6 +97,14 @@ jobs: with: preview-branch: ${{ env.WIKI_PREVIEW_BRANCH }} + - uses: ./.github/actions/summary/write + with: + markdown: | + ## Wiki Preview Cleanup Summary + + - Deleted preview branch: `${{ env.WIKI_PREVIEW_BRANCH }}` + - Trigger: closed pull request without merge + cleanup_orphaned_previews: name: Delete Orphaned Wiki Previews if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' @@ -107,4 +126,14 @@ jobs: run: git config --global --add safe.directory "$GITHUB_WORKSPACE/.github/wiki" - name: Delete wiki branches for closed pull requests + id: cleanup uses: ./.github/actions/wiki/cleanup-orphaned-previews + + - uses: ./.github/actions/summary/write + with: + markdown: | + ## Wiki Orphan Cleanup Summary + + - Deleted preview branches: `${{ steps.cleanup.outputs.deleted || '0' }}` + - Retained preview branches: `${{ steps.cleanup.outputs.skipped || '0' }}` + - Unresolved preview branches: `${{ steps.cleanup.outputs.unresolved || '0' }}` diff --git a/.github/workflows/wiki-preview.yml b/.github/workflows/wiki-preview.yml index 5f4a4f29e..74c4b635a 100644 --- a/.github/workflows/wiki-preview.yml +++ b/.github/workflows/wiki-preview.yml @@ -92,3 +92,12 @@ jobs: default_author: github_actions pull: "--rebase --autostash" push: true + + - uses: ./.github/actions/summary/write + with: + markdown: | + ## Wiki Preview Summary + + - Preview branch: `${{ env.WIKI_PREVIEW_BRANCH }}` + - Submodule pointer changed: `${{ steps.submodule_status.outputs.changed }}` + - Parent repository pointer commit result: `${{ steps.submodule_status.outputs.changed == 'true' && 'updated' || 'unchanged' }}` diff --git a/AGENTS.md b/AGENTS.md index 5d0fa4bac..2bc3512f4 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -172,7 +172,7 @@ composer dev-tools - `docs/commands/`: command-specific behavior and option details - `docs/usage/` and `docs/internals/`: workflow, reporting, release, and implementation notes - `.github/workflows/`: CI and release automation truth, especially `tests.yml`, `reports.yml`, `review.yml`, `wiki.yml`, `wiki-preview.yml`, `wiki-maintenance.yml`, `changelog.yml`, `auto-assign.yml`, and `label-sync.yml` -- `.github/actions/`: shared workflow building blocks for `php`, `project-board`, `github-pages`, `review`, `wiki`, `changelog`, and `label-sync` +- `.github/actions/`: shared workflow building blocks for `php`, `project-board`, `github-pages`, `review`, `summary`, `wiki`, `changelog`, and `label-sync` - `resources/github-actions/`: consumer-facing workflow wrappers synchronized by `dev-tools:sync` - `.github/pull_request_template.md`: expected PR structure and reviewer checklist - `src/Sync/`: shared packaged-directory synchronization primitives used by `skills` and `agents` diff --git a/CHANGELOG.md b/CHANGELOG.md index 239e8b1cc..10391011b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Teach the review and pull-request agent skills to treat workflow-managed wiki pointer updates as expected state and to prefer fresh follow-up issues plus PRs over reviving closed deleted branches (#147) - Require GitHub issue write readback verification in the github-issues skill (#165) - Standardize cache flags and nested cache-dir propagation across cache-aware commands (#162) +- Add `GITHUB_STEP_SUMMARY` output to tests, reports, wiki, and changelog workflows for clearer final-state workflow results (#148) ## [1.18.0] - 2026-04-23 diff --git a/README.md b/README.md index 82f285dde..580671da1 100644 --- a/README.md +++ b/README.md @@ -198,7 +198,10 @@ underlying tool supports structured output, and otherwise falls back to quieter subprocess modes so the captured payload stays machine-readable. In GitHub Actions, queued subprocess output is grouped into collapsible sections, and logged failures emit native workflow error annotations, including file and -line metadata when commands provide it. +line metadata when commands provide it. The packaged tests, reports, wiki, and +changelog workflows also append concise Markdown outcomes to +`GITHUB_STEP_SUMMARY` so maintainers can scan versions, URLs, preview refs, +verification status, and release results without expanding full logs. When the packaged changelog workflow is synchronized into a consumer repository, pull requests are expected to add a notable changelog entry before diff --git a/docs/advanced/consumer-automation.rst b/docs/advanced/consumer-automation.rst index 666a6db8b..29190534b 100644 --- a/docs/advanced/consumer-automation.rst +++ b/docs/advanced/consumer-automation.rst @@ -45,6 +45,10 @@ implementation in this repository is increasingly composed from local actions in * - ``.github/actions/review/*`` - Reusable helpers that render deterministic rigorous-review briefs for pull requests that just became ready for review. + * - ``.github/actions/summary/*`` + - Shared helpers that append deterministic Markdown outcomes to + ``GITHUB_STEP_SUMMARY`` after workflows already know their final URLs, + refs, versions, or verification results. * - ``.github/actions/wiki/*`` - Wiki-specific helpers for preparing preview branches, promoting preview content to ``master``, validating publication, and cleaning stale @@ -110,6 +114,9 @@ How Changelog and Project Automation Fit In ``.github/actions/review/*`` and posts a deterministic brief that points maintainers to the packaged ``review-guardian`` agent and ``pull-request-review`` skill. +- ``tests.yml``, ``reports.yml``, wiki preview and maintenance flows, and + ``changelog.yml`` now delegate final run summaries to + ``.github/actions/summary/*`` after their final-state information is known. - Project-board automation is no longer just an inline workflow concern; it is a reusable local action group shared by issue, pull-request, review, and release automation. diff --git a/docs/usage/github-actions.rst b/docs/usage/github-actions.rst index 9697d4b59..fd67f4519 100644 --- a/docs/usage/github-actions.rst +++ b/docs/usage/github-actions.rst @@ -67,15 +67,18 @@ The ``reports.yml`` workflow is responsible for generating technical documentati * Runs a post-deploy health check against the published reports index and coverage URLs with retry/backoff to account for Pages propagation. * Resolves the workflow PHP version from ``composer.lock`` or ``composer.json`` before installing dependencies. * Removes ``.dev-tools/cache`` from the publish directory before deployment so repository-local tool caches never leak into GitHub Pages output. + * Appends a run summary with the published docs, coverage, and metrics URLs plus deployment verification status. * **Pull Requests**: * Generates a **Preview** of the documentation, coverage, and metrics. * Deploys the preview to ``gh-pages`` under ``previews/pr-{number}/``. * Verifies the preview index and coverage URLs after deployment before posting preview links. * Posts a **Sticky Comment** on the PR with links to the live preview, coverage report, and metrics site. + * Appends a run summary with preview URLs and verification status. * Groups nested command output into collapsible GitHub Actions log sections so docs, tests, and metrics are easier to inspect independently. * **Cleanup**: When a PR is closed, the workflow automatically removes the preview directory from the ``gh-pages`` branch to keep the repository clean. * **Concurrency**: New pushes to the same PR cancel older in-progress preview runs without affecting other PRs. * **Scheduled Cleanup**: A scheduled/manual cleanup removes stale ``previews/pr-{number}/`` directories for already closed pull requests. +* **Run Summary**: Closed-preview cleanup and orphan cleanup runs append a deterministic summary of the path or counts that were removed. Fast Forward Wiki ----------------- @@ -99,12 +102,16 @@ wrappers: installs dependencies, runs ``composer dev-tools wiki -- --target=.github/wiki``, commits the generated Markdown into the wiki submodule, and then updates the parent repository's submodule pointer when needed. +* **Preview Summary**: The preview workflow appends the preview branch name + and whether the parent repository submodule pointer changed. * **Merged Publication**: ``wiki-maintenance.yml`` promotes the matching ``pr-{number}`` preview branch to ``master`` after a pull request is merged into ``main`` and validates the resulting remote SHA. * **Cleanup**: ``wiki-maintenance.yml`` deletes preview branches for closed pull requests and also performs scheduled cleanup for stale ``pr-{number}`` branches. +* **Maintenance Summaries**: Publish and cleanup runs append the affected + branch names or cleanup counts to the run summary. .. note:: See :doc:`../configuration/repository-setup` for mandatory initial setup required for the Wiki workflow to function. @@ -124,6 +131,8 @@ The ``tests.yml`` workflow provides standard Continuous Integration. alone. * Surfaces logged command failures as native GitHub Actions error annotations, including file and line metadata when the command provides them. +* Writes a compact run summary with the resolved PHP-version source, test + matrix, effective coverage threshold, and dependency-health threshold. * Uses PR-scoped concurrency so newer pushes cancel older in-progress runs for the same pull request. Fast Forward Changelog @@ -149,6 +158,7 @@ wrapper in ``resources/github-actions/changelog.yml``. * Runs ``composer dev-tools changelog:check -- --against=`` against the base ref. * Fails when a normal non-release branch does not add a meaningful ``Unreleased`` change. * Skips the validation job for pull requests whose head branch matches the configured ``release-branch-prefix``, because release-preparation branches intentionally leave ``Unreleased`` empty after promotion. + * Appends a run summary with the compared base ref and changelog file. * **Manual Release Preparation**: * Checks out the repository default branch with full history. * Resolves the next version from ``Unreleased`` unless a version input is provided. @@ -156,11 +166,13 @@ wrapper in ``resources/github-actions/changelog.yml``. * Writes a release-notes preview file to ``.dev-tools/release-notes.md`` with ``composer dev-tools changelog:show -- ``. * Opens or updates a release-preparation pull request instead of committing directly to ``main``. + * Appends a run summary with the resolved version, version source, and pull-request URL. * Requires repository Actions permissions that allow the workflow token to create pull requests. * **Merged Release Pull Requests**: * Detects merged branches that match the configured release branch prefix. * Renders the released changelog section with ``composer dev-tools changelog:show -- ``. * Creates or updates the Git tag and GitHub release with the rendered changelog section as the release body. + * Appends a run summary with the published tag and release URL. * Does **not** run for ordinary feature or fix pull requests merged into ``main``. **Inputs:**