# Syncs React sample packages from npm into samples/: # - @salesforce/ui-bundle-template-app-react-sample-b2e # - @salesforce/ui-bundle-template-app-react-sample-b2x # # Opens a single PR when either (or both) npm package versions have changed. # Same steps as running locally: npm install && npm run sync-react-b2e-sample # and npm run sync-react-b2x-sample. # # Uses IDEE_GH_TOKEN (bot) for checkout and PR creation; same pattern as # salesforcedx-vscode-einstein-gpt/.github/workflows/build.yml name: Sync React samples from npm on: workflow_dispatch: schedule: # Nightly at 02:00 UTC - cron: "0 2 * * *" jobs: sync: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 with: fetch-depth: 0 token: ${{ secrets.IDEE_GH_TOKEN }} - name: Set up Node.js uses: actions/setup-node@v4 with: node-version-file: ".nvmrc" cache: npm # ── B2E version check ────────────────────────────────────────── - name: Get latest B2E npm version id: npm-version-b2e run: | LATEST=$(npm view @salesforce/ui-bundle-template-app-react-sample-b2e version) if [ -z "$LATEST" ]; then echo "ERROR: npm view returned empty version for B2E package" >&2 exit 1 fi echo "latest=$LATEST" >> $GITHUB_OUTPUT - name: Read current synced B2E version id: current-version-b2e run: | VERSION_FILE="samples/ui-bundle-template-app-react-sample-b2e/.version" if [ -f "$VERSION_FILE" ]; then CURRENT=$(cat "$VERSION_FILE" | tr -d '[:space:]') echo "current=$CURRENT" >> $GITHUB_OUTPUT else echo "current=" >> $GITHUB_OUTPUT fi # ── B2X version check ────────────────────────────────────────── - name: Get latest B2X npm version id: npm-version-b2x run: | LATEST=$(npm view @salesforce/ui-bundle-template-app-react-sample-b2x version) if [ -z "$LATEST" ]; then echo "ERROR: npm view returned empty version for 2x package" >&2 exit 1 fi echo "latest=$LATEST" >> $GITHUB_OUTPUT - name: Read current synced B2X version id: current-version-b2x run: | VERSION_FILE="samples/ui-bundle-template-app-react-sample-b2x/.version" if [ -f "$VERSION_FILE" ]; then CURRENT=$(cat "$VERSION_FILE" | tr -d '[:space:]') echo "current=$CURRENT" >> $GITHUB_OUTPUT else echo "current=" >> $GITHUB_OUTPUT fi # ── Skip logic ───────────────────────────────────────────────── - name: Check for version changes id: skip run: | B2E_CHANGED="false" B2X_CHANGED="false" if [ "${{ steps.current-version-b2e.outputs.current }}" != "${{ steps.npm-version-b2e.outputs.latest }}" ]; then B2E_CHANGED="true" fi if [ "${{ steps.current-version-b2x.outputs.current }}" != "${{ steps.npm-version-b2x.outputs.latest }}" ]; then B2X_CHANGED="true" fi echo "b2e_changed=$B2E_CHANGED" >> $GITHUB_OUTPUT echo "b2x_changed=$B2X_CHANGED" >> $GITHUB_OUTPUT if [ "$B2E_CHANGED" = "false" ] && [ "$B2X_CHANGED" = "false" ]; then echo "skip=true" >> $GITHUB_OUTPUT echo "No version changes detected." else echo "skip=false" >> $GITHUB_OUTPUT echo "Changes detected — B2E=$B2E_CHANGED B2X=$B2X_CHANGED" fi # ── Install + sync ───────────────────────────────────────────── - name: Install dependencies if: steps.skip.outputs.skip != 'true' run: npm install - name: Install latest B2E package if: steps.skip.outputs.skip != 'true' && steps.skip.outputs.b2e_changed == 'true' run: npm install @salesforce/ui-bundle-template-app-react-sample-b2e@latest - name: Install latest B2X package if: steps.skip.outputs.skip != 'true' && steps.skip.outputs.b2x_changed == 'true' run: npm install @salesforce/ui-bundle-template-app-react-sample-b2x@latest - name: Sync B2E sample if: steps.skip.outputs.skip != 'true' run: npm run sync-react-b2e-sample - name: Sync B2X sample if: steps.skip.outputs.skip != 'true' run: npm run sync-react-b2x-sample # ── PR creation ──────────────────────────────────────────────── - name: Build PR metadata if: steps.skip.outputs.skip != 'true' id: pr-meta run: | BODY="" if [ "${{ steps.skip.outputs.b2e_changed }}" = "true" ]; then BODY="${BODY}- **B2E** \`@salesforce/ui-bundle-template-app-react-sample-b2e\`: ${{ steps.current-version-b2e.outputs.current || 'none' }} → ${{ steps.npm-version-b2e.outputs.latest }}"$'\n' fi if [ "${{ steps.skip.outputs.b2x_changed }}" = "true" ]; then BODY="${BODY}- **B2X** \`@salesforce/ui-bundle-template-app-react-sample-b2x\`: ${{ steps.current-version-b2x.outputs.current || 'none' }} → ${{ steps.npm-version-b2x.outputs.latest }}"$'\n' fi echo "branch=chore/sync-react-samples" >> $GITHUB_OUTPUT # Multi-line body via heredoc { echo "body<> $GITHUB_OUTPUT echo "title=chore: sync React samples from npm" >> $GITHUB_OUTPUT - name: Create PR on version change if: steps.skip.outputs.skip != 'true' uses: peter-evans/create-pull-request@v6 with: token: ${{ secrets.IDEE_GH_TOKEN }} branch: ${{ steps.pr-meta.outputs.branch }} base: main title: ${{ steps.pr-meta.outputs.title }} body: ${{ steps.pr-meta.outputs.body }} commit-message: ${{ steps.pr-meta.outputs.title }} committer: svc-idee-bot author: svc-idee-bot