Sync from Monorepo #16
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: Sync from Monorepo | |
on: | |
repository_dispatch: | |
types: [portal-frontend-update] | |
workflow_dispatch: | |
inputs: | |
source_sha: | |
description: 'Source commit SHA (optional)' | |
required: false | |
source_ref: | |
description: 'Source ref (optional)' | |
required: false | |
jobs: | |
sync: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Setup Git | |
run: | | |
git config --global user.name 'github-actions[bot]' | |
git config --global user.email 'github-actions[bot]@users.noreply.github.com' | |
# Detect default branch | |
- name: Get default branch | |
id: default-branch | |
run: | | |
DEFAULT_BRANCH=$(git remote show origin | grep 'HEAD branch' | cut -d' ' -f5) | |
echo "name=$DEFAULT_BRANCH" >> $GITHUB_OUTPUT | |
# Determine source ref | |
- name: Set source ref | |
id: set-ref | |
run: | | |
SOURCE_SHA="${{ github.event.client_payload.source_sha || github.event.inputs.source_sha }}" | |
SOURCE_REF="${{ github.event.client_payload.source_ref || github.event.inputs.source_ref || 'develop' }}" | |
if [ -z "$SOURCE_SHA" ]; then | |
echo "ref=$SOURCE_REF" >> $GITHUB_OUTPUT | |
echo "source_desc=$SOURCE_REF branch" >> $GITHUB_OUTPUT | |
else | |
echo "ref=$SOURCE_SHA" >> $GITHUB_OUTPUT | |
echo "source_desc=commit $SOURCE_SHA" >> $GITHUB_OUTPUT | |
fi | |
- name: Clone and prepare monorepo | |
run: | | |
# Clone the source repository with PAT | |
git clone --quiet https://x-access-token:${{ secrets.PAT_TOKEN }}@github.com/lumeweb/web source | |
cd source | |
git checkout ${{ steps.set-ref.outputs.ref }} | |
# Extract frontend directory with history | |
git subtree split -P apps/portal-frontend -b temp-split | |
# Go back and create local branch | |
cd .. | |
git fetch source temp-split:portal-frontend-split | |
# Cleanup | |
rm -rf source | |
- name: Sync changes | |
id: sync | |
run: | | |
# Create sync branch | |
git checkout -b sync/portal-frontend portal-frontend-split | |
# Check for actual file differences | |
if git diff --stat --quiet develop || [ "$(git diff --stat develop | wc -l)" -eq "0" ]; then | |
echo "changes_detected=false" >> $GITHUB_OUTPUT | |
exit 0 | |
fi | |
echo "changes_detected=true" >> $GITHUB_OUTPUT | |
- name: Push changes | |
if: steps.sync.outputs.changes_detected == 'true' | |
run: | | |
git push -f origin sync/portal-frontend | |
- name: Create or Update Pull Request | |
if: steps.sync.outputs.changes_detected == 'true' | |
uses: peter-evans/create-pull-request@v5 | |
with: | |
title: "chore: sync portal-frontend from upstream" | |
body: | | |
Automated sync from monorepo ${{ steps.set-ref.outputs.source_desc }} | |
This PR includes all related commit history from the portal-frontend directory. | |
This is an automatically updating PR that keeps the portal-frontend in sync with upstream. | |
branch: "sync/portal-frontend" | |
delete-branch: false | |
base: ${{ steps.default-branch.outputs.name }} | |
labels: | | |
sync | |
automated |