Update WAProto #78 #78
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: Update WAProto | |
| on: | |
| schedule: | |
| - cron: '0 3 * * *' | |
| workflow_dispatch: | |
| # Dynamic run name with run number | |
| run-name: "Update WAProto #${{ github.run_number }}" | |
| permissions: | |
| contents: write | |
| pull-requests: write | |
| actions: write | |
| jobs: | |
| update-proto: | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 10 | |
| steps: | |
| - uses: actions/checkout@v3 | |
| - name: Install Node | |
| uses: actions/setup-node@v3 | |
| with: | |
| node-version: 20.x | |
| - name: Enable Corepack and Set Yarn Version | |
| run: | | |
| corepack enable | |
| corepack prepare yarn@4.x --activate | |
| - name: Configure Git for HTTPS | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| run: | | |
| # Force git to use HTTPS instead of SSH for GitHub repositories | |
| git config --global url."https://github.com/".insteadOf "ssh://git@github.com/" | |
| git config --global url."https://github.com/".insteadOf "git@github.com:" | |
| # Configure git to use GITHUB_TOKEN for authentication | |
| git config --global url."https://x-access-token:${GITHUB_TOKEN}@github.com/".insteadOf "https://github.com/" | |
| - name: Install packages | |
| run: | | |
| yarn install --immutable | |
| yarn --cwd proto-extract install --immutable | |
| - name: Update WAProto.proto | |
| id: wa_proto_info | |
| run: | | |
| yarn --cwd proto-extract start > wa-logs.txt | |
| WA_VERSION=$(cat wa-logs.txt | perl -n -e'/Current version\: (.+)/ && print $1') | |
| WA_JS_URL=$(cat wa-logs.txt | perl -n -e'/Found source JS URL\: (.+)/ && print $1') | |
| echo "wa_version=$WA_VERSION" >> $GITHUB_OUTPUT | |
| echo "wa_js_url=$WA_JS_URL" >> $GITHUB_OUTPUT | |
| # Display version prominently | |
| echo "π± WhatsApp Proto Version: v$WA_VERSION" | |
| echo "π Source JS URL: $WA_JS_URL" | |
| - name: GenerateStatics | |
| run: yarn gen:protobuf | |
| - name: Update baileys-version.json | |
| run: | | |
| WA_VERSION="${{steps.wa_proto_info.outputs.wa_version}}" | |
| WA_NUMBERS=$(echo $WA_VERSION | sed "s/\./, /g") | |
| echo "{\"version\": [$WA_NUMBERS]}" > src/Defaults/baileys-version.json | |
| # Confirm update | |
| echo "β Updated baileys-version.json to v$WA_VERSION" | |
| cat src/Defaults/baileys-version.json | |
| - name: Create Pull Request | |
| id: create_pr | |
| uses: peter-evans/create-pull-request@v5 | |
| with: | |
| commit-message: 'chore: update proto/version to v${{steps.wa_proto_info.outputs.wa_version}}' | |
| title: 'chore: update WhatsApp proto to v${{steps.wa_proto_info.outputs.wa_version}}' | |
| branch: 'update-proto/stable' | |
| delete-branch: true | |
| labels: 'update-proto' | |
| body: | | |
| ## π¦ Automated WhatsApp Proto Update | |
| **Version:** `v${{steps.wa_proto_info.outputs.wa_version}}` | |
| **Source JS URL:** ${{steps.wa_proto_info.outputs.wa_js_url}} | |
| ### Changes | |
| - β Updated `WAProto/*` (protobuf definitions) | |
| - β Updated `src/Defaults/baileys-version.json` | |
| ### Update Frequency | |
| Daily at 03:00 UTC (00:00 BRT) | |
| add-paths: | | |
| WAProto/* | |
| src/Defaults/baileys-version.json | |
| - name: Enable Auto-merge | |
| if: steps.create_pr.outputs.pull-request-number != '' | |
| env: | |
| GH_TOKEN: ${{ secrets.GH_PAT || secrets.GITHUB_TOKEN }} | |
| run: | | |
| PR_NUMBER="${{ steps.create_pr.outputs.pull-request-number }}" | |
| WA_VERSION="${{ steps.wa_proto_info.outputs.wa_version }}" | |
| echo "π Enabling auto-merge for PR #$PR_NUMBER (v$WA_VERSION)..." | |
| # Enable auto-merge with squash method | |
| set +e | |
| AUTO_MERGE_OUTPUT=$(gh pr merge "$PR_NUMBER" \ | |
| --repo "${{ github.repository }}" \ | |
| --squash \ | |
| --auto \ | |
| --delete-branch 2>&1) | |
| AUTO_MERGE_EXIT=$? | |
| set -e | |
| if [ $AUTO_MERGE_EXIT -eq 0 ]; then | |
| echo "β Auto-merge enabled for PR #$PR_NUMBER (v$WA_VERSION)" | |
| echo "$AUTO_MERGE_OUTPUT" | |
| echo "β³ PR will be merged automatically once all checks pass" | |
| else | |
| echo "::warning::Failed to enable auto-merge for PR #$PR_NUMBER (v$WA_VERSION)" | |
| echo "::group::Auto-merge Error Output" | |
| echo "$AUTO_MERGE_OUTPUT" | |
| echo "::endgroup::" | |
| # Fall back to waiting for checks and then merging | |
| echo "π Falling back to wait-and-merge strategy..." | |
| # Wait for checks to start | |
| echo "β³ Waiting 30 seconds for checks to start..." | |
| sleep 30 | |
| # Wait for checks to complete (max 5 minutes) | |
| echo "β³ Waiting for checks to complete..." | |
| WAIT_COUNT=0 | |
| MAX_WAIT=60 # 60 * 5 seconds = 5 minutes | |
| while [ $WAIT_COUNT -lt $MAX_WAIT ]; do | |
| set +e | |
| CHECK_STATUS=$(gh pr checks "$PR_NUMBER" --repo "${{ github.repository }}" 2>&1) | |
| CHECK_EXIT=$? | |
| set -e | |
| if [ $CHECK_EXIT -eq 0 ]; then | |
| echo "π Current check status:" | |
| echo "$CHECK_STATUS" | |
| # Check if all checks passed | |
| if echo "$CHECK_STATUS" | grep -q "All checks have passed"; then | |
| echo "β All checks passed!" | |
| break | |
| fi | |
| # Check if any check failed | |
| if echo "$CHECK_STATUS" | grep -qE "(fail|failure|error)"; then | |
| echo "β Some checks failed, aborting merge" | |
| exit 1 | |
| fi | |
| fi | |
| WAIT_COUNT=$((WAIT_COUNT + 1)) | |
| echo "β³ Waiting... ($WAIT_COUNT/$MAX_WAIT)" | |
| sleep 5 | |
| done | |
| if [ $WAIT_COUNT -ge $MAX_WAIT ]; then | |
| echo "::warning::Timeout waiting for checks to complete" | |
| echo "::warning::PR #$PR_NUMBER requires manual merge: https://github.com/${{ github.repository }}/pull/$PR_NUMBER" | |
| exit 0 | |
| fi | |
| # Try to merge now that checks passed | |
| echo "π Attempting to merge PR #$PR_NUMBER..." | |
| set +e | |
| MERGE_OUTPUT=$(gh pr merge "$PR_NUMBER" \ | |
| --repo "${{ github.repository }}" \ | |
| --squash \ | |
| --delete-branch \ | |
| --yes 2>&1) | |
| MERGE_EXIT=$? | |
| set -e | |
| if [ $MERGE_EXIT -eq 0 ]; then | |
| echo "β PR #$PR_NUMBER (v$WA_VERSION) merged successfully" | |
| echo "$MERGE_OUTPUT" | |
| else | |
| echo "::error::Failed to merge PR #$PR_NUMBER (v$WA_VERSION)" | |
| echo "::group::Merge Error Output" | |
| echo "$MERGE_OUTPUT" | |
| echo "::endgroup::" | |
| # Try with admin flag | |
| echo "π§ Attempting merge with admin override..." | |
| set +e | |
| ADMIN_OUTPUT=$(gh pr merge "$PR_NUMBER" \ | |
| --repo "${{ github.repository }}" \ | |
| --squash \ | |
| --delete-branch \ | |
| --admin 2>&1) | |
| ADMIN_EXIT=$? | |
| set -e | |
| if [ $ADMIN_EXIT -eq 0 ]; then | |
| echo "β PR #$PR_NUMBER (v$WA_VERSION) merged with admin override" | |
| echo "$ADMIN_OUTPUT" | |
| else | |
| echo "::error::Failed to merge even with admin override" | |
| echo "::group::Admin Merge Error Output" | |
| echo "$ADMIN_OUTPUT" | |
| echo "::endgroup::" | |
| echo "::warning::Consider configuring a Personal Access Token (PAT) with full repo permissions as GH_PAT secret" | |
| echo "::warning::PR #$PR_NUMBER requires manual merge: https://github.com/${{ github.repository }}/pull/$PR_NUMBER" | |
| exit 0 | |
| fi | |
| fi | |
| fi | |
| - name: Summary | |
| if: always() | |
| run: | | |
| echo "### π¦ WAProto Update" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| WA_VERSION="${{ steps.wa_proto_info.outputs.wa_version }}" | |
| WA_JS_URL="${{ steps.wa_proto_info.outputs.wa_js_url }}" | |
| PR_NUMBER="${{ steps.create_pr.outputs.pull-request-number }}" | |
| echo "**Version:** \`v$WA_VERSION\`" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| if [ -n "$PR_NUMBER" ]; then | |
| echo "β **PR #$PR_NUMBER created with auto-merge enabled**" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "**Changes:**" >> $GITHUB_STEP_SUMMARY | |
| echo "- π¦ Updated WAProto/* (protobuf definitions)" >> $GITHUB_STEP_SUMMARY | |
| echo "- π Updated baileys-version.json" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "**Source:** [$WA_JS_URL]($WA_JS_URL)" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "π PR will merge automatically once checks pass" >> $GITHUB_STEP_SUMMARY | |
| else | |
| echo "βΉοΈ No changes detected - already up to date" >> $GITHUB_STEP_SUMMARY | |
| fi |