| name: Sync Engine Version | |
| on: | |
| workflow_dispatch: | |
| jobs: | |
| sync-engine: | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write | |
| pull-requests: write | |
| steps: | |
| - name: Checkout Repository | |
| uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 | |
| with: | |
| repository: flutteractionsbot/flutter | |
| token: ${{ secrets.FLUTTERACTIONSBOT_CP_TOKEN }} | |
| ref: master | |
| persist-credentials: false | |
| - name: Configure git | |
| run: | | |
| gh auth setup-git | |
| git config --global user.name "flutteractionsbot" | |
| git config --global user.email "<flutter-actions-bot@google.com>" | |
| env: | |
| GH_TOKEN: ${{ secrets.FLUTTERACTIONSBOT_CP_TOKEN }} | |
| - name: Fetch upstream | |
| run: | | |
| git remote add upstream https://github.com/flutter/flutter.git | |
| git fetch upstream "$REF_NAME" | |
| BRANCH_NAME="update-engine-$(date +%s)" | |
| echo "BRANCH_NAME=$BRANCH_NAME" >> "$GITHUB_ENV" | |
| git checkout -b "$BRANCH_NAME" "upstream/$REF_NAME" | |
| env: | |
| GH_TOKEN: ${{ secrets.FLUTTERACTIONSBOT_CP_TOKEN }} | |
| REF_NAME: ${{ github.ref_name }} | |
| - name: Generate and Capture Hash | |
| id: generate-hash | |
| run: | | |
| # Capture the OLD hash (handle case where file doesn't exist) | |
| if [ -f bin/internal/engine.version ]; then | |
| OLD_HASH=$(< bin/internal/engine.version) | |
| else | |
| OLD_HASH="None (New File)" | |
| fi | |
| echo "OLD_HASH=$OLD_HASH" >> "$GITHUB_ENV" | |
| chmod +x bin/internal/last_engine_commit.sh | |
| NEW_HASH=$(./bin/internal/last_engine_commit.sh) | |
| echo "$NEW_HASH" > bin/internal/engine.version | |
| echo "ENGINE_HASH=$NEW_HASH" >> "$GITHUB_ENV" | |
| - name: Check for Changes | |
| id: git-check | |
| run: | | |
| # -f adds even if it's in the .gitignore (which it usually is) | |
| git add -f bin/internal/engine.version | |
| if git diff --cached --exit-code bin/internal/engine.version; then | |
| echo "changed=false" >> "$GITHUB_OUTPUT" | |
| # Nice big No-Op Summary | |
| echo "## ✅ Engine version already up to date" >> "$GITHUB_STEP_SUMMARY" | |
| echo "The engine is already at hash \`$ENGINE_HASH\`. No PR was created." >> "$GITHUB_STEP_SUMMARY" | |
| else | |
| echo "changed=true" >> "$GITHUB_OUTPUT" | |
| fi | |
| - name: Create PR if Changed | |
| if: steps.git-check.outputs.changed == 'true' | |
| run: | | |
| gh auth setup-git | |
| git commit -m "Update engine.version to $ENGINE_HASH" | |
| git push origin "$BRANCH_NAME" | |
| # Capture the PR URL | |
| PR_URL=$(gh pr create \ | |
| --title "[$REF_NAME] Sync engine.version to $ENGINE_HASH" \ | |
| --body "Updates the engine.version file from \`$OLD_HASH\` to \`$ENGINE_HASH\`." \ | |
| --repo flutter/flutter \ | |
| --base "$REF_NAME" \ | |
| --head "flutteractionsbot:$BRANCH_NAME") | |
| # Nice big PR Success Summary | |
| { | |
| echo "## 🚀 PR Created Successfully" | |
| echo "Updated engine version from \`$OLD_HASH\` to \`$ENGINE_HASH\`." | |
| echo "" | |
| echo "🔗 **View Pull Request:** $PR_URL" | |
| } >> "$GITHUB_STEP_SUMMARY" | |
| env: | |
| GH_TOKEN: ${{ secrets.FLUTTERACTIONSBOT_CP_TOKEN }} | |
| REF_NAME: ${{ github.ref_name }} |