Update 4_MoreOptionsToolbarMenu.md #12
  
    
      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: PR Comment - Run Enhanced Flow | |
| on: | |
| issue_comment: | |
| types: [created] | |
| permissions: | |
| contents: write | |
| pull-requests: write | |
| concurrency: | |
| group: pr-comment-enhanced-flow-${{ github.event.issue.number || github.run_id }} | |
| cancel-in-progress: false | |
| jobs: | |
| run-enhanced-flow: | |
| if: > | |
| ${{ github.event.issue.pull_request != null && contains(github.event.comment.body, 'node test-enhanced-flow.js') }} | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 120 | |
| steps: | |
| - name: Checkout PR head | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| ref: refs/pull/${{ github.event.issue.number }}/head | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: 20 | |
| cache: yarn | |
| - name: Enable Corepack (Yarn) | |
| run: corepack enable | |
| - name: Remove npm lockfiles to avoid Yarn conflicts | |
| shell: bash | |
| run: | | |
| rm -f package-lock.json || true | |
| rm -f AutoSnap/package-lock.json || true | |
| rm -f AutoSnap/tracewrightt/package-lock.json || true | |
| - name: Install root dependencies (optional) | |
| shell: bash | |
| run: | | |
| if [ -f yarn.lock ]; then | |
| yarn install --frozen-lockfile || yarn install | |
| else | |
| echo 'No root yarn.lock, skipping' | |
| fi | |
| - name: Install AutoSnap dependencies | |
| working-directory: AutoSnap | |
| shell: bash | |
| run: | | |
| yarn install --frozen-lockfile || yarn install | |
| - name: Install tracewrightt and build | |
| working-directory: AutoSnap/tracewrightt | |
| shell: bash | |
| run: | | |
| echo "🔧 Installing tracewrightt dependencies..." | |
| yarn install --frozen-lockfile || yarn install | |
| echo "🏗️ Building tracewrightt..." | |
| yarn build || echo "⚠️ tracewrightt build failed, will fallback to ts-node at runtime" | |
| - name: Install Playwright Chromium and system deps | |
| working-directory: AutoSnap | |
| shell: bash | |
| run: | | |
| npx playwright install --with-deps chromium | |
| - name: Setup Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.11' | |
| - name: Install Python requirements | |
| working-directory: AutoSnap | |
| shell: bash | |
| run: | | |
| python -m pip install --upgrade pip | |
| pip install -r requirements.txt || echo "Python requirements install failed, script has fallbacks" | |
| - name: Create CI clone of test-enhanced-flow.js and patch paths | |
| working-directory: AutoSnap | |
| shell: bash | |
| run: | | |
| cp test-enhanced-flow.js test-enhanced-flow-ci.js | |
| # Patch hardcoded Windows fallback path(s) to repo-relative path for CI | |
| sed -i "s#C:/Users/Rohith\.MR/test/HelpManualAutomationTest/docs/1-Getting-Started/addorg\.md#docs/1-Getting-Started/addorg.md#g" test-enhanced-flow-ci.js | |
| # Ensure CI runs headless Chromium and not Chrome channel | |
| sed -i "s/headless: false/headless: true/g" test-enhanced-flow-ci.js | |
| sed -i "/channel: 'chrome',/d" test-enhanced-flow-ci.js | |
| - name: Ensure Azure env defaults | |
| shell: bash | |
| run: | | |
| : "${AZURE_OPENAI_API_KEY:=placeholder}" | |
| : "${AZURE_OPENAI_ENDPOINT:=https://example.invalid/}" | |
| echo "AZURE_OPENAI_API_KEY=$AZURE_OPENAI_API_KEY" >> $GITHUB_ENV | |
| echo "AZURE_OPENAI_ENDPOINT=$AZURE_OPENAI_ENDPOINT" >> $GITHUB_ENV | |
| - name: Extract command args from comment | |
| id: parse | |
| uses: actions/github-script@v7 | |
| with: | |
| script: | | |
| const body = context.payload.comment.body || ''; | |
| const re = /node\s+test-enhanced-flow\.js(?:\s+([\s\S]*))?/i; // capture everything after the command on the first line | |
| const m = body.match(re); | |
| const args = m && m[1] ? m[1].trim() : ''; | |
| core.setOutput('args', args); | |
| - name: Run enhanced flow | |
| shell: bash | |
| env: | |
| GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }} | |
| AZURE_OPENAI_API_KEY: ${{ secrets.AZURE_OPENAI_API_KEY }} | |
| AZURE_OPENAI_ENDPOINT: ${{ secrets.AZURE_OPENAI_ENDPOINT }} | |
| LLM_PROVIDER: gemini | |
| DISABLE_IMG_AS: "true" | |
| run: | | |
| args="${{ steps.parse.outputs.args }}" | |
| if [ -n "$args" ]; then | |
| echo "Running: node AutoSnap/test-enhanced-flow-ci.js $args" | |
| node AutoSnap/test-enhanced-flow-ci.js $args 2>&1 | tee enhanced-flow-ci-run.log | |
| else | |
| echo "No args provided in comment. Running default: node AutoSnap/test-enhanced-flow-ci.js" | |
| node AutoSnap/test-enhanced-flow-ci.js 2>&1 | tee enhanced-flow-ci-run.log | |
| fi | |
| - name: Upload logs and outputs | |
| uses: actions/upload-artifact@v4 | |
| if: always() | |
| with: | |
| name: enhanced-flow-artifacts | |
| path: | | |
| enhanced-flow-ci-run.log | |
| enhanced-flow-log.txt | |
| changed-files-*.txt | |
| changed-files-screenshots.txt | |
| token_usage_summary.txt | |
| AutoSnap/enhanced-flow-log.txt | |
| AutoSnap/token_usage_summary.txt | |
| AutoSnap/changed-files-*.txt | |
| AutoSnap/api_logs/ | |
| AutoSnap/screenshots/ | |
| docs/**/img_as/** | |
| spanish/**/img_as/** | |
| docs/**/img/** | |
| spanish/**/img/** | |
| if-no-files-found: ignore | |
| - name: Get PR head info | |
| id: pr_info | |
| uses: actions/github-script@v7 | |
| with: | |
| script: | | |
| const pr = await github.rest.pulls.get({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| pull_number: context.issue.number, | |
| }); | |
| core.setOutput('head_ref', pr.data.head.ref); | |
| core.setOutput('head_repo', pr.data.head.repo.full_name); | |
| const canPush = pr.data.head.repo.full_name === `${context.repo.owner}/${context.repo.repo}`; | |
| core.setOutput('can_push', canPush ? 'true' : 'false'); | |
| - name: Commit screenshots to PR branch | |
| if: ${{ steps.pr_info.outputs.can_push == 'true' }} | |
| shell: bash | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| HEAD_REPO: ${{ steps.pr_info.outputs.head_repo }} | |
| HEAD_REF: ${{ steps.pr_info.outputs.head_ref }} | |
| run: | | |
| set -e | |
| git config user.name "github-actions[bot]" | |
| git config user.email "41898282+github-actions[bot]@users.noreply.github.com" | |
| # Prefer explicit list if available | |
| if [ -f changed-files-screenshots.txt ]; then | |
| echo "Using changed-files-screenshots.txt for staging..." | |
| sed -e 's/\r$//' changed-files-screenshots.txt | while IFS= read -r f; do | |
| if [ -n "$f" ] && [ -f "$f" ]; then | |
| git add -f -- "$f" | |
| fi | |
| done | |
| fi | |
| # Stage images from common output locations | |
| if [ -d AutoSnap/screenshots ]; then | |
| find AutoSnap/screenshots -type f \ | |
| \( -iname '*.png' -o -iname '*.jpg' -o -iname '*.jpeg' -o -iname '*.webp' -o -iname '*.gif' \) -print0 \ | |
| | xargs -0 -r git add -- | |
| fi | |
| if [ -d docs ]; then | |
| find docs -type f \( -path '*/img_as/*' -o -path '*/img/*' \) \ | |
| \( -iname '*.png' -o -iname '*.jpg' -o -iname '*.jpeg' -o -iname '*.webp' -o -iname '*.gif' \) -print0 \ | |
| | xargs -0 -r git add -- | |
| fi | |
| if [ -d spanish ]; then | |
| find spanish -type f \( -path '*/img_as/*' -o -path '*/img/*' \) \ | |
| \( -iname '*.png' -o -iname '*.jpg' -o -iname '*.jpeg' -o -iname '*.webp' -o -iname '*.gif' \) -print0 \ | |
| | xargs -0 -r git add -- | |
| fi | |
| if git diff --staged --quiet; then | |
| echo "No screenshots to commit." | |
| exit 0 | |
| fi | |
| git commit -m "chore(ci): add screenshots from enhanced flow run [skip ci]" | |
| git push "https://x-access-token:${GITHUB_TOKEN}@github.com/${HEAD_REPO}.git" HEAD:${HEAD_REF} | |
| - name: Reply on PR with run summary | |
| if: always() | |
| uses: actions/github-script@v7 | |
| with: | |
| script: | | |
| const args = `${{ steps.parse.outputs.args }}` || '(none)'; | |
| const runUrl = `https://github.com/${context.repo.owner}/${context.repo.repo}/actions/runs/${context.runId}`; | |
| const body = [ | |
| `▶️ Ran: node test-enhanced-flow.js ${args}`.trim(), | |
| `• Status: ${process.env.STATE || 'completed (see job result above)'}`, | |
| `• Logs & outputs uploaded as artifact: enhanced-flow-artifacts`, | |
| `• Workflow run: ${runUrl}` | |
| ].join('\n'); | |
| await github.rest.issues.createComment({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| issue_number: context.issue.number, | |
| body | |
| }); | |