Skip to content

beads init

beads init #269

name: Preserve Branch-Specific Serena Files
on:
push:
branches: ['**']
jobs:
preserve-serena:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 2
token: ${{ secrets.GITHUB_TOKEN }}
- name: Check if this was a merge commit
id: check_merge
run: |
if git log -1 --pretty=format:"%P" | grep -q " "; then
echo "is_merge=true" >> $GITHUB_OUTPUT
echo "✅ Detected merge commit"
else
echo "is_merge=false" >> $GITHUB_OUTPUT
exit 0
fi
- name: Check for .serena changes in merge
if: steps.check_merge.outputs.is_merge == 'true'
id: check_serena
run: |
if git log -1 --name-only | grep -q "^\.serena/"; then
echo "serena_changed=true" >> $GITHUB_OUTPUT
echo "🚨 .serena files were modified in merge - will revert!"
else
echo "serena_changed=false" >> $GITHUB_OUTPUT
exit 0
fi
- name: Revert .serena to pre-merge state
if: steps.check_merge.outputs.is_merge == 'true' && steps.check_serena.outputs.serena_changed == 'true'
run: |
CURRENT_BRANCH=$(git branch --show-current)
echo "🔄 Reverting .serena/ to pre-merge state on $CURRENT_BRANCH"
# Get the first parent (target branch before merge)
MERGE_BASE=$(git log -1 --pretty=format:"%P" | cut -d' ' -f1)
# Restore .serena from the target branch's state before merge
git checkout $MERGE_BASE -- .serena/ 2>/dev/null || echo "No .serena in base commit"
# Configure git
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
# Commit the reversion
if git diff --staged --quiet; then
git add .serena/
fi
if ! git diff --cached --quiet; then
git commit -m "🔒 Preserve branch-specific .serena files
Reverted .serena/ changes from merge to keep $CURRENT_BRANCH version intact.
[skip ci]"
git push origin $CURRENT_BRANCH
echo "✅ Successfully preserved $CURRENT_BRANCH .serena files"
else
echo "ℹ️ No changes to revert"
fi