Biweekly Update Notes #5
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Biweekly Update Notes | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| since: | |
| description: "Optional window start date, YYYY-MM-DD" | |
| required: false | |
| type: string | |
| until: | |
| description: "Optional window end date, YYYY-MM-DD" | |
| required: false | |
| type: string | |
| force: | |
| description: "Generate even if the inferred window is not due yet" | |
| required: false | |
| default: false | |
| type: boolean | |
| schedule: | |
| # Runs weekly; the generator is the biweekly gate and no-ops until a window closes. | |
| - cron: "17 3 * * 0" | |
| permissions: | |
| contents: read | |
| concurrency: | |
| group: biweekly-update-notes | |
| cancel-in-progress: false | |
| jobs: | |
| draft-update-note-pr: | |
| if: github.repository == 'huangruiteng/loopx' | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Check out repository | |
| uses: actions/checkout@v7 | |
| with: | |
| fetch-depth: 0 | |
| - name: Generate update note draft | |
| id: generate | |
| env: | |
| UPDATE_NOTES_SINCE: ${{ inputs.since }} | |
| UPDATE_NOTES_UNTIL: ${{ inputs.until }} | |
| UPDATE_NOTES_FORCE: ${{ inputs.force }} | |
| run: | | |
| set -euo pipefail | |
| cmd=(python3 scripts/update_notes_release_job.py) | |
| if [[ -n "${UPDATE_NOTES_SINCE}" || -n "${UPDATE_NOTES_UNTIL}" ]]; then | |
| cmd+=(--since "${UPDATE_NOTES_SINCE}" --until "${UPDATE_NOTES_UNTIL}") | |
| fi | |
| if [[ "${UPDATE_NOTES_FORCE}" == "true" ]]; then | |
| cmd+=(--force) | |
| fi | |
| "${cmd[@]}" | |
| - name: Validate update-note archive | |
| if: steps.generate.outputs.changed == 'true' | |
| run: | | |
| python3 -m py_compile scripts/update_notes_release_job.py examples/update-notes-archive-smoke.py examples/update-notes-generator-quality-smoke.py | |
| python3 examples/update-notes-archive-smoke.py | |
| python3 examples/update-notes-generator-quality-smoke.py | |
| git diff --check | |
| python3 -m loopx.cli check \ | |
| --scan-path .github/workflows/update-notes.yml \ | |
| --scan-path scripts/update_notes_release_job.py \ | |
| --scan-path docs/update-notes \ | |
| --scan-path examples/update-notes-archive-smoke.py \ | |
| --scan-path examples/update-notes-generator-quality-smoke.py | |
| - name: Package reviewable draft | |
| if: steps.generate.outputs.changed == 'true' | |
| run: git diff --binary > update-note.patch | |
| - name: Upload update-note draft | |
| if: steps.generate.outputs.changed == 'true' | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: biweekly-update-note-${{ steps.generate.outputs.window_slug }} | |
| path: | | |
| ${{ steps.generate.outputs.note_file }} | |
| docs/update-notes/README.md | |
| update-note.patch | |
| retention-days: 30 |