Refactor release pipeline to streamline reporting
Removed redundant 'Report run context' steps and updated job snapshots in the release pipeline. Signed-off-by: Jonathan Miller <jmiller2979@gmail.com>
This commit is contained in:
221
.github/workflows/release_pipeline.yml
vendored
221
.github/workflows/release_pipeline.yml
vendored
@@ -226,29 +226,19 @@ jobs:
|
|||||||
echo "```"
|
echo "```"
|
||||||
} >> "${GITHUB_STEP_SUMMARY}"
|
} >> "${GITHUB_STEP_SUMMARY}"
|
||||||
|
|
||||||
- name: Report run context (always)
|
- name:
|
||||||
|
|
||||||
|
- name: Report job snapshot (always)
|
||||||
if: ${{ always() }}
|
if: ${{ always() }}
|
||||||
run: |
|
run: |
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
{
|
{
|
||||||
echo "### Run context"
|
echo "### Job snapshot"
|
||||||
echo "```json"
|
echo "```"
|
||||||
printf '{'
|
echo "event=${GITHUB_EVENT_NAME} ref=${GITHUB_REF_NAME} sha=${GITHUB_SHA} actor=${GITHUB_ACTOR}"
|
||||||
printf '"repository":"%s",' "${GITHUB_REPOSITORY}"
|
git --version || true
|
||||||
printf '"workflow":"%s",' "${GITHUB_WORKFLOW}"
|
git status --porcelain=v1 || true
|
||||||
printf '"job":"%s",' "${GITHUB_JOB}"
|
git log -1 --pretty=fuller || true
|
||||||
printf '"run_id":%s,' "${GITHUB_RUN_ID}"
|
|
||||||
printf '"run_number":%s,' "${GITHUB_RUN_NUMBER}"
|
|
||||||
printf '"run_attempt":%s,' "${GITHUB_RUN_ATTEMPT}"
|
|
||||||
printf '"run_url":"%s",' "${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID}"
|
|
||||||
printf '"actor":"%s",' "${GITHUB_ACTOR}"
|
|
||||||
printf '"event":"%s",' "${GITHUB_EVENT_NAME}"
|
|
||||||
printf '"ref_name":"%s",' "${GITHUB_REF_NAME}"
|
|
||||||
printf '"sha":"%s",' "${GITHUB_SHA}"
|
|
||||||
printf '"runner_os":"%s",' "${RUNNER_OS}"
|
|
||||||
printf '"runner_name":"%s"' "${RUNNER_NAME}"
|
|
||||||
printf '}\n'
|
|
||||||
echo "```"
|
echo "```"
|
||||||
} >> "${GITHUB_STEP_SUMMARY}"
|
} >> "${GITHUB_STEP_SUMMARY}"
|
||||||
|
|
||||||
@@ -327,26 +317,19 @@ jobs:
|
|||||||
echo "```"
|
echo "```"
|
||||||
} >> "${GITHUB_STEP_SUMMARY}"
|
} >> "${GITHUB_STEP_SUMMARY}"
|
||||||
|
|
||||||
- name: Report run context (always)
|
- name:
|
||||||
|
|
||||||
|
- name: Report job snapshot (always)
|
||||||
if: ${{ always() }}
|
if: ${{ always() }}
|
||||||
run: |
|
run: |
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
{
|
{
|
||||||
echo "### Run context"
|
echo "### Job snapshot"
|
||||||
echo "```json"
|
echo "```"
|
||||||
printf '{'
|
echo "event=${GITHUB_EVENT_NAME} ref=${GITHUB_REF_NAME} sha=${GITHUB_SHA} actor=${GITHUB_ACTOR}"
|
||||||
printf '"repository":"%s",' "${GITHUB_REPOSITORY}"
|
git --version || true
|
||||||
printf '"workflow":"%s",' "${GITHUB_WORKFLOW}"
|
git status --porcelain=v1 || true
|
||||||
printf '"job":"%s",' "${GITHUB_JOB}"
|
git log -1 --pretty=fuller || true
|
||||||
printf '"run_id":%s,' "${GITHUB_RUN_ID}"
|
|
||||||
printf '"run_number":%s,' "${GITHUB_RUN_NUMBER}"
|
|
||||||
printf '"run_attempt":%s,' "${GITHUB_RUN_ATTEMPT}"
|
|
||||||
printf '"run_url":"%s",' "${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID}"
|
|
||||||
printf '"actor":"%s",' "${GITHUB_ACTOR}"
|
|
||||||
printf '"event":"%s",' "${GITHUB_EVENT_NAME}"
|
|
||||||
printf '"ref_name":"%s",' "${GITHUB_REF_NAME}"
|
|
||||||
printf '"sha":"%s"' "${GITHUB_SHA}"
|
|
||||||
printf '}\n'
|
|
||||||
echo "```"
|
echo "```"
|
||||||
} >> "${GITHUB_STEP_SUMMARY}"
|
} >> "${GITHUB_STEP_SUMMARY}"
|
||||||
|
|
||||||
@@ -453,13 +436,17 @@ jobs:
|
|||||||
git commit -m "chore(release): normalize dates" || true
|
git commit -m "chore(release): normalize dates" || true
|
||||||
git push origin "HEAD:${{ needs.guard.outputs.promoted_branch }}"
|
git push origin "HEAD:${{ needs.guard.outputs.promoted_branch }}"
|
||||||
|
|
||||||
- name: Report run context (always)
|
- name:
|
||||||
|
|
||||||
|
- name: Report job snapshot (always)
|
||||||
if: ${{ always() }}
|
if: ${{ always() }}
|
||||||
run: |
|
run: |
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
{
|
{
|
||||||
echo "### Git snapshot"
|
echo "### Job snapshot"
|
||||||
echo "```"
|
echo "```"
|
||||||
|
echo "event=${GITHUB_EVENT_NAME} ref=${GITHUB_REF_NAME} sha=${GITHUB_SHA} actor=${GITHUB_ACTOR}"
|
||||||
|
git --version || true
|
||||||
git status --porcelain=v1 || true
|
git status --porcelain=v1 || true
|
||||||
git log -1 --pretty=fuller || true
|
git log -1 --pretty=fuller || true
|
||||||
echo "```"
|
echo "```"
|
||||||
@@ -578,20 +565,20 @@ jobs:
|
|||||||
"scripts/validate/validate_version_alignment.sh"
|
"scripts/validate/validate_version_alignment.sh"
|
||||||
)
|
)
|
||||||
|
|
||||||
missing=()
|
missing_required=()
|
||||||
for s in "${required_scripts[@]}"; do
|
for s in "${required_scripts[@]}"; do
|
||||||
if [ ! -f "${s}" ]; then
|
if [ ! -f "${s}" ]; then
|
||||||
missing+=("${s}")
|
missing_required+=("${s}")
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
if [ "${#missing[@]}" -gt 0 ]; then
|
if [ "${#missing_required[@]}" -gt 0 ]; then
|
||||||
{
|
{
|
||||||
echo "### Script guardrails"
|
echo "### Script guardrails"
|
||||||
echo "```json"
|
echo "```json"
|
||||||
printf '{"status":"fail","missing_required_scripts":['
|
printf '{"status":"fail","missing_required_scripts":['
|
||||||
sep=""
|
sep=""
|
||||||
for m in "${missing[@]}"; do
|
for m in "${missing_required[@]}"; do
|
||||||
printf '%s"%s"' "${sep}" "${m}"
|
printf '%s"%s"' "${sep}" "${m}"
|
||||||
sep=",";
|
sep=",";
|
||||||
done
|
done
|
||||||
@@ -601,16 +588,42 @@ jobs:
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
ran=()
|
ran_required=()
|
||||||
skipped=()
|
ran_optional=()
|
||||||
|
failed_optional=()
|
||||||
|
skipped_optional=()
|
||||||
|
|
||||||
for s in "${required_scripts[@]}" "${optional_scripts[@]}"; do
|
# Required scripts are release-blocking.
|
||||||
|
for s in "${required_scripts[@]}"; do
|
||||||
|
chmod +x "${s}"
|
||||||
|
echo "" >> "${GITHUB_STEP_SUMMARY}"
|
||||||
|
echo "### Run required: ${s}" >> "${GITHUB_STEP_SUMMARY}"
|
||||||
|
echo "```" >> "${GITHUB_STEP_SUMMARY}"
|
||||||
|
"${s}" >> "${GITHUB_STEP_SUMMARY}"
|
||||||
|
echo "```" >> "${GITHUB_STEP_SUMMARY}"
|
||||||
|
ran_required+=("${s}")
|
||||||
|
done
|
||||||
|
|
||||||
|
# Optional scripts provide signal only. Failures become warnings, not blockers.
|
||||||
|
for s in "${optional_scripts[@]}"; do
|
||||||
if [ -f "${s}" ]; then
|
if [ -f "${s}" ]; then
|
||||||
chmod +x "${s}"
|
chmod +x "${s}"
|
||||||
|
set +e
|
||||||
|
echo "" >> "${GITHUB_STEP_SUMMARY}"
|
||||||
|
echo "### Run optional: ${s}" >> "${GITHUB_STEP_SUMMARY}"
|
||||||
|
echo "```" >> "${GITHUB_STEP_SUMMARY}"
|
||||||
"${s}" >> "${GITHUB_STEP_SUMMARY}"
|
"${s}" >> "${GITHUB_STEP_SUMMARY}"
|
||||||
ran+=("${s}")
|
rc=$?
|
||||||
|
echo "```" >> "${GITHUB_STEP_SUMMARY}"
|
||||||
|
set -e
|
||||||
|
|
||||||
|
ran_optional+=("${s}")
|
||||||
|
if [ "${rc}" -ne 0 ]; then
|
||||||
|
failed_optional+=("${s}")
|
||||||
|
echo "::warning::Optional validation failed (${s}) exit_code=${rc}"
|
||||||
|
fi
|
||||||
else
|
else
|
||||||
skipped+=("${s}")
|
skipped_optional+=("${s}")
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
@@ -618,42 +631,54 @@ jobs:
|
|||||||
echo "### Validation inventory"
|
echo "### Validation inventory"
|
||||||
echo "```json"
|
echo "```json"
|
||||||
printf '{'
|
printf '{'
|
||||||
|
|
||||||
printf '"required_count":%s,' "${#required_scripts[@]}"
|
printf '"required_count":%s,' "${#required_scripts[@]}"
|
||||||
printf '"optional_count":%s,' "${#optional_scripts[@]}"
|
printf '"optional_count":%s,' "${#optional_scripts[@]}"
|
||||||
printf '"ran_count":%s,' "${#ran[@]}"
|
printf '"ran_required_count":%s,' "${#ran_required[@]}"
|
||||||
printf '"skipped_optional_count":%s,' "${#skipped[@]}"
|
printf '"ran_optional_count":%s,' "${#ran_optional[@]}"
|
||||||
|
printf '"failed_optional_count":%s,' "${#failed_optional[@]}"
|
||||||
|
printf '"skipped_optional_count":%s,' "${#skipped_optional[@]}"
|
||||||
|
|
||||||
printf '"required":['
|
printf '"ran_required":['
|
||||||
sep=""
|
sep=""
|
||||||
for s in "${required_scripts[@]}"; do
|
for x in "${ran_required[@]}"; do
|
||||||
printf '%s"%s"' "${sep}" "${s}"
|
printf '%s"%s"' "${sep}" "${x}"
|
||||||
sep=",";
|
sep=",";
|
||||||
done
|
done
|
||||||
|
|
||||||
printf '],"optional":['
|
printf '],"ran_optional":['
|
||||||
sep=""
|
sep=""
|
||||||
for s in "${optional_scripts[@]}"; do
|
for x in "${ran_optional[@]}"; do
|
||||||
printf '%s"%s"' "${sep}" "${s}"
|
printf '%s"%s"' "${sep}" "${x}"
|
||||||
sep=",";
|
sep=",";
|
||||||
done
|
done
|
||||||
|
|
||||||
printf '],"ran":['
|
printf '],"failed_optional":['
|
||||||
sep=""
|
sep=""
|
||||||
for s in "${ran[@]}"; do
|
for x in "${failed_optional[@]}"; do
|
||||||
printf '%s"%s"' "${sep}" "${s}"
|
printf '%s"%s"' "${sep}" "${x}"
|
||||||
sep=",";
|
sep=",";
|
||||||
done
|
done
|
||||||
|
|
||||||
printf '],"skipped_optional":['
|
printf '],"skipped_optional":['
|
||||||
sep=""
|
sep=""
|
||||||
for s in "${skipped[@]}"; do
|
for x in "${skipped_optional[@]}"; do
|
||||||
printf '%s"%s"' "${sep}" "${s}"
|
printf '%s"%s"' "${sep}" "${x}"
|
||||||
sep=",";
|
sep=",";
|
||||||
done
|
done
|
||||||
|
|
||||||
printf ']}\n'
|
printf ']}\n'
|
||||||
echo "```"
|
echo "```"
|
||||||
} >> "${GITHUB_STEP_SUMMARY}"
|
} >> "${GITHUB_STEP_SUMMARY}"
|
||||||
|
if [ "${#failed_optional[@]}" -gt 0 ]; then
|
||||||
|
{
|
||||||
|
echo "### Optional validation failures"
|
||||||
|
echo "These are non-blocking by policy. Treat as backlog until resolved."
|
||||||
|
echo ""
|
||||||
|
printf '%s
|
||||||
|
' "${failed_optional[@]}"
|
||||||
|
} >> "${GITHUB_STEP_SUMMARY}"
|
||||||
|
fi
|
||||||
|
|
||||||
- name: Build Joomla ZIP (extension type aware, src-only archive)
|
- name: Build Joomla ZIP (extension type aware, src-only archive)
|
||||||
id: build
|
id: build
|
||||||
@@ -977,6 +1002,11 @@ jobs:
|
|||||||
echo "tag=${TAG}" >> "${GITHUB_OUTPUT}"
|
echo "tag=${TAG}" >> "${GITHUB_OUTPUT}"
|
||||||
|
|
||||||
- name: Generate release notes from CHANGELOG.md
|
- name: Generate release notes from CHANGELOG.md
|
||||||
|
env:
|
||||||
|
SFTP_AUTH_MODE: ${{ steps.sftp.outputs.auth_mode }}
|
||||||
|
SFTP_REMOTE_PATH: ${{ steps.sftp.outputs.remote_path }}
|
||||||
|
SFTP_HOST: ${{ steps.sftp.outputs.host }}
|
||||||
|
SFTP_PORT: ${{ steps.sftp.outputs.port }}
|
||||||
run: |
|
run: |
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
@@ -996,10 +1026,10 @@ jobs:
|
|||||||
echo "- ${ZIP_ASSET}"
|
echo "- ${ZIP_ASSET}"
|
||||||
echo ""
|
echo ""
|
||||||
echo "Deployment metadata:"
|
echo "Deployment metadata:"
|
||||||
echo "- auth_mode: ${{ steps.sftp.outputs.auth_mode || 'unknown' }}"
|
echo "- auth_mode: ${SFTP_AUTH_MODE:-unknown}"
|
||||||
echo "- remote_path: ${{ steps.sftp.outputs.remote_path || 'unknown' }}"
|
echo "- remote_path: ${SFTP_REMOTE_PATH:-unknown}"
|
||||||
echo "- host: ${{ steps.sftp.outputs.host || 'unknown' }}"
|
echo "- host: ${SFTP_HOST:-unknown}"
|
||||||
echo "- port: ${{ steps.sftp.outputs.port || 'unknown' }}"
|
echo "- port: ${SFTP_PORT:-unknown}"
|
||||||
} >> RELEASE_NOTES.md
|
} >> RELEASE_NOTES.md
|
||||||
|
|
||||||
- name: Create GitHub release and attach ZIP
|
- name: Create GitHub release and attach ZIP
|
||||||
@@ -1018,18 +1048,21 @@ jobs:
|
|||||||
subject-path: |
|
subject-path: |
|
||||||
dist/*.zip
|
dist/*.zip
|
||||||
|
|
||||||
- name: Report run context (always)
|
- name:
|
||||||
|
|
||||||
|
- name: Report job snapshot (always)
|
||||||
if: ${{ always() }}
|
if: ${{ always() }}
|
||||||
run: |
|
run: |
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
{
|
{
|
||||||
echo "### Git snapshot"
|
echo "### Job snapshot"
|
||||||
echo "```"
|
echo "```"
|
||||||
|
echo "event=${GITHUB_EVENT_NAME} ref=${GITHUB_REF_NAME} sha=${GITHUB_SHA} actor=${GITHUB_ACTOR}"
|
||||||
|
git --version || true
|
||||||
git status --porcelain=v1 || true
|
git status --porcelain=v1 || true
|
||||||
git log -1 --pretty=fuller || true
|
git log -1 --pretty=fuller || true
|
||||||
echo "```"
|
echo "```"
|
||||||
} >> "${GITHUB_STEP_SUMMARY}"
|
} >> "${GITHUB_STEP_SUMMARY}"
|
||||||
|
|
||||||
push_version_to_main:
|
push_version_to_main:
|
||||||
name: 04 Promote version branch to main (stable only, keep version branch)
|
name: 04 Promote version branch to main (stable only, keep version branch)
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
@@ -1090,60 +1123,14 @@ jobs:
|
|||||||
gh pr merge "${PR_NUMBER}" --merge --delete-branch=false \
|
gh pr merge "${PR_NUMBER}" --merge --delete-branch=false \
|
||||||
|| echo "PR merge blocked by branch protection or policy" >> "${GITHUB_STEP_SUMMARY}"
|
|| echo "PR merge blocked by branch protection or policy" >> "${GITHUB_STEP_SUMMARY}"
|
||||||
|
|
||||||
- name: Report run context (always)
|
- name:
|
||||||
|
|
||||||
|
- name: Report job snapshot (always)
|
||||||
if: ${{ always() }}
|
if: ${{ always() }}
|
||||||
run: |
|
run: |
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
{
|
{
|
||||||
echo "### Main promotion report"
|
echo "### Job snapshot"
|
||||||
echo "```json"
|
|
||||||
echo "{\"head\":\"${{ needs.guard.outputs.promoted_branch }}\",\"base\":\"main\",\"release_mode\":\"${{ needs.guard.outputs.release_mode }}\"}"
|
|
||||||
echo "```"
|
echo "```"
|
||||||
} >> "${GITHUB_STEP_SUMMARY}"
|
echo "event=${GITHUB_EVENT_NAME} ref=${GITHUB_REF_NAME} sha=${GITHUB_SHA} actor=${GITHUB_ACTOR}"
|
||||||
|
|
||||||
release_event_report:
|
|
||||||
name: 99 Release event report (GitHub UI created release)
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
needs: guard
|
|
||||||
|
|
||||||
if: ${{ github.event_name == 'release' }}
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout tag
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
ref: ${{ github.ref_name }}
|
|
||||||
fetch-depth: 1
|
|
||||||
|
|
||||||
- name: Release event telemetry
|
|
||||||
run: |
|
|
||||||
set -euo pipefail
|
|
||||||
|
|
||||||
{
|
|
||||||
echo "### Release event telemetry"
|
|
||||||
echo "```json"
|
|
||||||
echo "{"
|
|
||||||
echo " \"repository\": \"${GITHUB_REPOSITORY}\","
|
|
||||||
echo " \"event\": \"${GITHUB_EVENT_NAME}\","
|
|
||||||
echo " \"ref_name\": \"${GITHUB_REF_NAME}\","
|
|
||||||
echo " \"sha\": \"${GITHUB_SHA}\","
|
|
||||||
echo " \"channel\": \"${{ needs.guard.outputs.channel }}\","
|
|
||||||
echo " \"release_mode\": \"${{ needs.guard.outputs.release_mode }}\","
|
|
||||||
echo " \"version\": \"${{ needs.guard.outputs.version }}\""
|
|
||||||
echo "}"
|
|
||||||
echo "```"
|
|
||||||
} >> "${GITHUB_STEP_SUMMARY}"
|
|
||||||
- name: Report run context (always)
|
|
||||||
if: ${{ always() }}
|
|
||||||
run: |
|
|
||||||
set -euo pipefail
|
|
||||||
{
|
|
||||||
echo "### Git snapshot"
|
|
||||||
echo "```"
|
|
||||||
git status --porcelain=v1 || true
|
|
||||||
git log -1 --pretty=fuller || true
|
|
||||||
echo "```"
|
|
||||||
} >> "${GITHUB_STEP_SUMMARY}"
|
|
||||||
|
|||||||
Reference in New Issue
Block a user