Skip to content

chore: Update localization - WPB-15278 #33005

chore: Update localization - WPB-15278

chore: Update localization - WPB-15278 #33005

name: Test Pull Request Changes
on:
pull_request:
types: [opened, reopened, synchronize, ready_for_review, labeled, unlabeled]
merge_group:
types: [checks_requested]
# This is what will cancel the workflow
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
# This job will tell us which frameworks have source code changes.
# We'll use the results to run tests only for changed frameworks.
detect-changes:
name: Detect PR Changes
if: ${{ github.event.pull_request.draft != true }}
runs-on: ubuntu-24.04
# Set job outputs to values from filter step
outputs:
folders: ${{ steps.filter.outputs.changes }}
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
if: ${{ github.event_name == 'merge_group' }} # on PR, paths-filter can access list of changed files from event payload
with:
lfs: 'false' # as long as we use lfs only for snapshotTesting it should not be useful here
- uses: dorny/paths-filter@fbd0ab8f3e69293af611ebaee6363fc25e6d187d # v4.0.1
id: filter
with:
filters: |
WireAnalytics:
- 'WireAnalytics/**'
- 'wire-ios-mono.xcworkspace/xcshareddata/xcschemes/WireAnalyticsAll.xcscheme'
WireAuthentication:
- 'WireAuthentication/**'
- 'wire-ios-mono.xcworkspace/xcshareddata/xcschemes/WireAuthenticationAll.xcscheme'
WireBackup:
- 'WireBackup/**'
- 'wire-ios-mono.xcworkspace/xcshareddata/xcschemes/WireBackupAll.xcscheme'
WireCalling:
- 'WireCalling/**'
- 'wire-ios-mono.xcworkspace/xcshareddata/xcschemes/WireCallingAll.xcscheme'
WireData:
- 'WireData/**'
- 'wire-ios-mono.xcworkspace/xcshareddata/xcschemes/WireDataAll.xcscheme'
WireDomain:
- 'WireDomain/**'
WireFoundation:
- 'WireFoundation/**'
- 'wire-ios-mono.xcworkspace/xcshareddata/xcschemes/WireFoundationAll.xcscheme'
WireLogging:
- 'WireLogging/**'
- 'wire-ios-mono.xcworkspace/xcshareddata/xcschemes/WireLoggingAll.xcscheme'
WireMessaging:
- 'WireMessaging/**'
- 'wire-ios-mono.xcworkspace/xcshareddata/xcschemes/WireMessagingAll.xcscheme'
WireNetwork:
- 'WireNetwork/**'
- 'wire-ios-mono.xcworkspace/xcshareddata/xcschemes/WireNetworkAll.xcscheme'
WireUI:
- 'WireUI/**'
- 'wire-ios-mono.xcworkspace/xcshareddata/xcschemes/WireUIAll.xcscheme'
carthage:
- 'Cartfile.resolved'
fastlane:
- 'fastlane/**'
scripts:
- 'scripts/**'
wire-ios:
- 'wire-ios/**'
wire-ios-data-model:
- 'wire-ios-data-model/**'
wire-ios-images:
- 'wire-ios-images/**'
wire-ios-link-preview:
- 'wire-ios-link-preview/**'
wire-ios-mocktransport:
- 'wire-ios-mocktransport/**'
wire-ios-request-strategy:
- 'wire-ios-request-strategy/**'
wire-ios-share-engine:
- 'wire-ios-share-engine/**'
wire-ios-sync-engine:
- 'wire-ios-sync-engine/**'
wire-ios-system:
- 'wire-ios-system/**'
wire-ios-testing:
- 'wire-ios-testing/**'
wire-ios-transport:
- 'wire-ios-transport/**'
wire-ios-utilities:
- 'wire-ios-utilities/**'
# ── Strategy decision ──────────────────────────────────────────────────────
# Decides whether to run tests sequentially or in parallel.
# Parallel is used when:
# - the `parallel-testing` label is on the PR, OR
# - SMART_TESTING_ENABLED=1 (repo variable) AND the number of frameworks
# to test is >= 4 (number of available macOS runners).
# Set SMART_TESTING_ENABLED in Settings β†’ Variables β†’ Actions.
decide-strategy:
name: Decide test strategy
needs: detect-changes
if: ${{ github.event.pull_request.draft != true }}
runs-on: ubuntu-24.04
outputs:
use_parallel: ${{ steps.decide.outputs.use_parallel }}
steps:
- name: Decide parallel vs sequential
id: decide
env:
FOLDERS: ${{ needs.detect-changes.outputs.folders }}
SMART_TESTING_ENABLED: ${{ vars.SMART_TESTING_ENABLED }}
HAS_PARALLEL_LABEL: ${{ contains(github.event.pull_request.labels.*.name, 'parallel-testing') }}
run: |
if [ "$HAS_PARALLEL_LABEL" = "true" ]; then
echo "use_parallel=true" >> "$GITHUB_OUTPUT"
echo "Parallel: parallel-testing label is set"
elif [ "$SMART_TESTING_ENABLED" = "1" ]; then
COUNT=$(echo "$FOLDERS" | jq '[.[] | select(. != "fastlane" and . != "scripts" and . != "carthage")] | length')
echo "Framework count: $COUNT (threshold: 4 runners)"
if [ "$COUNT" -ge 4 ]; then
echo "use_parallel=true" >> "$GITHUB_OUTPUT"
echo "Parallel: $COUNT frameworks >= 4 runners"
else
echo "use_parallel=false" >> "$GITHUB_OUTPUT"
echo "Sequential: $COUNT frameworks < 4 runners, setup overhead not worth it"
fi
else
echo "use_parallel=false" >> "$GITHUB_OUTPUT"
echo "Sequential: smart testing not enabled"
fi
# ── Sequential ──────────────────────────────────────────────────────────────
trigger_tests_pr:
needs: [detect-changes, decide-strategy]
name: PR Tests
if: ${{ needs.decide-strategy.outputs.use_parallel != 'true' }}
uses: ./.github/workflows/_reusable_run_tests.yml
with:
folders: ${{ join(fromJson(needs.detect-changes.outputs.folders), ',') }}
test_dependencies: ${{ github.event_name != 'pull_request' || startsWith(github.base_ref, 'release/cycle') }}
run_critical_flows: false # separate workflow
notify: failure
secrets:
ZENKINS_USERNAME: ${{ secrets.ZENKINS_USERNAME }}
DD_API_KEY: ${{ secrets.DD_API_KEY }}
OP_SERVICE_ACCOUNT_TOKEN: ${{ secrets.OP_SERVICE_ACCOUNT_TOKEN }}
SLACK_WEBHOOK_URL: ${{ secrets.WIRE_IOS_CI_WEBHOOK }}
# ── Parallel ────────────────────────────────────────────────────────────────
trigger_tests_pr_parallel:
needs: [detect-changes, decide-strategy]
name: PR Tests
if: ${{ needs.decide-strategy.outputs.use_parallel == 'true' }}
uses: ./.github/workflows/_reusable_run_tests_parallel.yml
with:
folders: ${{ join(fromJson(needs.detect-changes.outputs.folders), ',') }}
test_dependencies: ${{ github.event_name != 'pull_request' || startsWith(github.base_ref, 'release/cycle') }}
notify: failure
secrets:
ZENKINS_USERNAME: ${{ secrets.ZENKINS_USERNAME }}
DD_API_KEY: ${{ secrets.DD_API_KEY }}
SLACK_WEBHOOK_URL: ${{ secrets.WIRE_IOS_CI_WEBHOOK }}