Skip to content

Sync from Intelligence Flow #27

Sync from Intelligence Flow

Sync from Intelligence Flow #27

Workflow file for this run

# Generated from operatorstack/intelligence-flow.
name: Sync from Intelligence Flow
on:
schedule:
- cron: "17 */6 * * *"
workflow_dispatch:
permissions:
contents: write
pull-requests: write
concurrency:
group: sync-intelligence-flow
cancel-in-progress: false
jobs:
sync:
runs-on: ubuntu-latest
steps:
- name: Check out Boatstack
uses: actions/checkout@v4
with:
path: boatstack-repo
- name: Check out Intelligence Flow
uses: actions/checkout@v4
with:
repository: operatorstack/intelligence-flow
ref: main
path: intelligence-flow
- name: Generate projection
id: generate
shell: bash
run: |
source_commit="$(git -C intelligence-flow log -1 --format=%H -- examples/12-product-engineering-loop)"
python3 intelligence-flow/examples/12-product-engineering-loop/scripts/build_boatstack.py \
--repo boatstack-repo \
--source-commit "$source_commit" \
--write
echo "source_commit=$source_commit" >> "$GITHUB_OUTPUT"
- name: Open generated pull request
env:
GH_TOKEN: ${{ github.token }}
SOURCE_COMMIT: ${{ steps.generate.outputs.source_commit }}
shell: bash
run: |
cd boatstack-repo
if [[ -z "$(git status --porcelain)" ]]; then
echo "Boatstack already matches Intelligence Flow."
exit 0
fi
git add -A
rewritten_notes=()
while IFS= read -r note; do
rewritten_notes+=("$note")
done < <(git diff --cached --name-only --diff-filter=MD --no-renames -- \
'release-notes/*.md')
if (( ${#rewritten_notes[@]} > 0 )); then
echo "BLOCKED: Boatstack release notes are append-only:" >&2
printf ' %s\n' "${rewritten_notes[@]}" >&2
exit 1
fi
added_notes=()
while IFS= read -r note; do
added_notes+=("$note")
done < <(git diff --cached --name-only --diff-filter=A --no-renames -- \
'release-notes/*.md' | LC_ALL=C sort)
if (( ${#added_notes[@]} == 0 )); then
echo "BLOCKED: projected Boatstack changes require a release message." >&2
exit 1
fi
body_file="$(mktemp)"
{
echo "## What this sync releases"
echo
for note in "${added_notes[@]}"; do
cat "$note"
echo
done
echo "<details>"
echo "<summary>Projection provenance</summary>"
echo
echo "Generated from \`operatorstack/intelligence-flow@$SOURCE_COMMIT\`."
echo "Review provenance, tests, examples, and context-cost changes before merging."
echo
echo "</details>"
} > "$body_file"
short="${SOURCE_COMMIT:0:12}"
branch="sync/intelligence-flow-$short"
existing="$(gh pr list --head "$branch" --state open --json url --jq '.[0].url')"
if [[ -n "$existing" ]]; then
echo "Upstream PR already open: $existing"
exit 0
fi
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
git switch -c "$branch"
git commit -m "Sync Boatstack from Intelligence Flow $short"
git push --set-upstream origin "$branch"
gh pr create \
--base main \
--head "$branch" \
--title "Sync Boatstack from Intelligence Flow $short" \
--body-file "$body_file"