fix: quote has no effect on older thread messages #5869
Workflow file for this run
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: Build PR | |
| on: | |
| pull_request: | |
| branches: | |
| - '**' | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: true | |
| permissions: {} | |
| jobs: | |
| run-eslint-and-test: | |
| name: ESLint and Test | |
| if: ${{ github.repository == 'RocketChat/Rocket.Chat.ReactNative' }} | |
| permissions: | |
| contents: read | |
| uses: ./.github/workflows/eslint.yml | |
| generate-pr-changelog: | |
| name: Generate PR Changelog | |
| needs: [run-eslint-and-test] | |
| if: ${{ github.repository == 'RocketChat/Rocket.Chat.ReactNative' }} | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: read | |
| pull-requests: read | |
| steps: | |
| - name: Checkout Repository | |
| uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 | |
| - name: Generate changelog | |
| env: | |
| GH_TOKEN: ${{ github.token }} | |
| run: | | |
| gh pr view "${{ github.event.pull_request.number }}" --json title,number,commits > pr.json | |
| node .github/scripts/changelog.js pr | |
| - name: Upload changelog artifact | |
| uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 | |
| with: | |
| name: release-changelog | |
| path: changelog.txt | |
| retention-days: 15 | |
| android-build-store: | |
| name: Build Android | |
| if: ${{ github.repository == 'RocketChat/Rocket.Chat.ReactNative' }} | |
| permissions: | |
| contents: read | |
| pull-requests: write | |
| uses: ./.github/workflows/build-android.yml | |
| needs: [run-eslint-and-test, generate-pr-changelog] | |
| secrets: inherit | |
| with: | |
| trigger: "pr" | |
| ios-build-store: | |
| name: Build iOS | |
| if: ${{ github.repository == 'RocketChat/Rocket.Chat.ReactNative' }} | |
| permissions: | |
| contents: read | |
| pull-requests: write | |
| uses: ./.github/workflows/build-ios.yml | |
| needs: [run-eslint-and-test, generate-pr-changelog] | |
| secrets: inherit | |
| with: | |
| trigger: "pr" | |
| # Runs first (cheap, secret-free): validates flow tags, then narrows the shard | |
| # list to the shards sniffler flags as impacted. `should_run=false` is a | |
| # confident zero (no source touched) that skips the whole e2e stage below. | |
| e2e-shards: | |
| name: E2E Shard Preflight | |
| if: ${{ github.repository == 'RocketChat/Rocket.Chat.ReactNative' }} | |
| permissions: | |
| contents: read | |
| pull-requests: read | |
| runs-on: ubuntu-latest | |
| outputs: | |
| shards: ${{ steps.select.outputs.shards }} | |
| should_run: ${{ steps.select.outputs.should_run }} | |
| steps: | |
| - name: Checkout Repository | |
| uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 | |
| with: | |
| fetch-depth: 0 | |
| - name: Checkout and Setup Node | |
| uses: ./.github/actions/setup-node | |
| - name: Assert Maestro shard coverage | |
| id: full | |
| run: bash .github/scripts/assert-maestro-shards.sh | |
| # Read labels live rather than from the event payload: the payload is frozen | |
| # at push time (a label added afterwards, or a re-run, would never see it), | |
| # and `contains()` over an array is an exact element match — it would miss | |
| # the decorated label name ("💎 release"). | |
| - name: Detect release label | |
| id: label | |
| env: | |
| GH_TOKEN: ${{ github.token }} | |
| PR_NUMBER: ${{ github.event.pull_request.number }} | |
| run: | | |
| if gh pr view "$PR_NUMBER" --json labels --jq '.labels[].name' | grep -qi 'release'; then | |
| echo "release=true" >>"$GITHUB_OUTPUT" | |
| else | |
| echo "release=false" >>"$GITHUB_OUTPUT" | |
| fi | |
| - name: Select impacted shards | |
| id: select | |
| env: | |
| IS_RELEASE_LANE: ${{ github.event.pull_request.base.ref == 'master' || steps.label.outputs.release == 'true' }} | |
| BASE_REF: ${{ github.event.pull_request.base.ref }} | |
| HEAD_SHA: ${{ github.event.pull_request.head.sha }} | |
| FULL_SHARDS: ${{ steps.full.outputs.shards }} | |
| run: bash .github/scripts/select-impacted-shards.sh | |
| e2e-hold: | |
| name: E2E Hold | |
| if: ${{ github.repository == 'RocketChat/Rocket.Chat.ReactNative' && needs.e2e-shards.outputs.should_run == 'true' }} | |
| needs: [e2e-shards] | |
| permissions: {} | |
| environment: approve_e2e_testing | |
| runs-on: ubuntu-latest | |
| steps: | |
| - run: echo "Waiting for manual approval..." | |
| e2e-build-android: | |
| name: E2E Build Android | |
| if: ${{ github.repository == 'RocketChat/Rocket.Chat.ReactNative' && needs.e2e-shards.outputs.should_run == 'true' }} | |
| permissions: | |
| contents: read | |
| uses: ./.github/workflows/e2e-build-android.yml | |
| needs: [e2e-shards, e2e-hold] | |
| secrets: inherit | |
| e2e-run-android: | |
| name: E2E Run Android | |
| if: ${{ github.repository == 'RocketChat/Rocket.Chat.ReactNative' && needs.e2e-shards.outputs.should_run == 'true' }} | |
| permissions: | |
| contents: read | |
| uses: ./.github/workflows/maestro-android.yml | |
| needs: [e2e-build-android, e2e-shards] | |
| secrets: inherit | |
| strategy: | |
| matrix: | |
| shard: ${{ fromJSON(needs.e2e-shards.outputs.shards) }} | |
| fail-fast: false | |
| with: | |
| shard: ${{ matrix.shard }} | |
| e2e-build-ios: | |
| name: E2E Build iOS | |
| if: ${{ github.repository == 'RocketChat/Rocket.Chat.ReactNative' && needs.e2e-shards.outputs.should_run == 'true' }} | |
| permissions: | |
| contents: read | |
| uses: ./.github/workflows/e2e-build-ios.yml | |
| needs: [e2e-shards, e2e-hold] | |
| secrets: inherit | |
| e2e-run-ios: | |
| name: E2E Run iOS | |
| if: ${{ github.repository == 'RocketChat/Rocket.Chat.ReactNative' && needs.e2e-shards.outputs.should_run == 'true' }} | |
| permissions: | |
| contents: read | |
| uses: ./.github/workflows/maestro-ios.yml | |
| needs: [e2e-build-ios, e2e-shards] | |
| secrets: inherit | |
| strategy: | |
| matrix: | |
| shard: ${{ fromJSON(needs.e2e-shards.outputs.shards) }} | |
| fail-fast: false | |
| with: | |
| shard: ${{ matrix.shard }} | |
| # Single required e2e status check. Always publishes one stable context, so an | |
| # intentional confident-zero skip merges clean while a real shard failure blocks. | |
| e2e-result: | |
| name: E2E Result | |
| if: ${{ always() && github.repository == 'RocketChat/Rocket.Chat.ReactNative' }} | |
| needs: [e2e-shards, e2e-run-android, e2e-run-ios] | |
| permissions: {} | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Aggregate e2e outcome | |
| env: | |
| SHARDS_RESULT: ${{ needs.e2e-shards.result }} | |
| SHOULD_RUN: ${{ needs.e2e-shards.outputs.should_run }} | |
| SHARDS: ${{ needs.e2e-shards.outputs.shards }} | |
| ANDROID: ${{ needs.e2e-run-android.result }} | |
| IOS: ${{ needs.e2e-run-ios.result }} | |
| run: | | |
| if [ "$SHARDS_RESULT" != "success" ]; then | |
| echo "::error title=E2E preflight failed::Shard preflight did not succeed (result=$SHARDS_RESULT)." | |
| exit 1 | |
| fi | |
| if [ "$SHOULD_RUN" != "true" ]; then | |
| echo "### E2E skipped — 0 impacted flows (no source touched)" >> "$GITHUB_STEP_SUMMARY" | |
| exit 0 | |
| fi | |
| { | |
| echo "### E2E ran shards \`$SHARDS\`" | |
| echo "- Android: $ANDROID" | |
| echo "- iOS: $IOS" | |
| } >> "$GITHUB_STEP_SUMMARY" | |
| if [ "$ANDROID" = "success" ] && [ "$IOS" = "success" ]; then | |
| exit 0 | |
| fi | |
| echo "::error title=E2E failed::One or more Maestro shards failed (android=$ANDROID ios=$IOS)." | |
| exit 1 |