From 6ac7fece2aabad5f17f5703fc9c1abef05ca2323 Mon Sep 17 00:00:00 2001 From: dragon-ai-agent Date: Sat, 21 Feb 2026 15:44:26 -0600 Subject: [PATCH] Add workflow to regenerate derived files on schema changes Triggers on push to main when yaml schema files change, and on manual dispatch. Regenerates Python datamodel, enums, and docs, then opens a PR with the changes. Closes any previous unclosed regen PRs before creating a new one. Co-Authored-By: Claude Opus 4.6 --- .github/workflows/regen-derived.yaml | 104 +++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 .github/workflows/regen-derived.yaml diff --git a/.github/workflows/regen-derived.yaml b/.github/workflows/regen-derived.yaml new file mode 100644 index 00000000..7d4e7147 --- /dev/null +++ b/.github/workflows/regen-derived.yaml @@ -0,0 +1,104 @@ +--- +name: Regenerate derived files +on: # yamllint disable-line rule:truthy + push: + branches: [main] + paths: + - "src/valuesets/schema/**/*.yaml" + - "src/valuesets/schema/*.yaml" + workflow_dispatch: + +permissions: {} + +jobs: + regen: + runs-on: ubuntu-latest + + permissions: + contents: write + pull-requests: write + + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Install uv + uses: astral-sh/setup-uv@v6 + with: + enable-cache: true + cache-dependency-glob: "uv.lock" + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.13" + + - name: Install just + run: uv tool install rust-just + + - name: Install dependencies + run: uv sync --group dev --no-progress + + - name: Regenerate derived files + run: | + just gen-project + just gen-doc + + - name: Check for changes + id: changes + run: | + git add -A + if git diff --cached --quiet; then + echo "changed=false" >> "$GITHUB_OUTPUT" + else + echo "changed=true" >> "$GITHUB_OUTPUT" + fi + + - name: Close previous regen PRs + if: steps.changes.outputs.changed == 'true' + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + gh pr list \ + --label "automated-regen" \ + --state open \ + --json number \ + --jq '.[].number' \ + | while read -r pr; do + gh pr close "$pr" --comment "Superseded by a newer regeneration run." + done + + - name: Create pull request + if: steps.changes.outputs.changed == 'true' + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + BRANCH="auto/regen-derived-$(date +%Y%m%d-%H%M%S)" + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + git checkout -b "$BRANCH" + git commit -m "Regenerate derived files from schema changes" + git push -u origin "$BRANCH" + + gh label create "automated-regen" \ + --description "PRs created by the regen-derived workflow" \ + --color "c5def5" \ + --force + + gh pr create \ + --title "Regenerate derived files" \ + --label "automated-regen" \ + --body "$(cat <<'EOF' + Automated regeneration of derived files after schema changes. + + Updated by running: + ``` + just gen-project + just gen-doc + ``` + + Please review the diffs before merging. + EOF + )"