Skip to content

End-to-End tests

End-to-End tests #426

Workflow file for this run

name: End-to-End tests
on:
schedule:
- cron: '0 4 * * *' # run at 4 AM UTC
workflow_dispatch:
jobs:
end-to-end-tests:
name: End to end Tests
runs-on: macos-13-xlarge
steps:
- name: Check out the code
uses: actions/checkout@v3
with:
submodules: recursive
- name: Set cache key hash
run: |
has_only_tags=$(jq '[ .pins[].state | has("version") ] | all' DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved)
if [[ "$has_only_tags" == "true" ]]; then
echo "cache_key_hash=${{ hashFiles('DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved') }}" >> $GITHUB_ENV
else
echo "Package.resolved contains dependencies specified by branch or commit, skipping cache."
fi
- name: Cache SPM
if: env.cache_key_hash
uses: actions/cache@v3
with:
path: DerivedData/SourcePackages
key: ${{ runner.os }}-spm-${{ env.cache_key_hash }}
restore-keys: |
${{ runner.os }}-spm-
- name: Select Xcode
run: sudo xcode-select -s /Applications/Xcode_$(<.xcode-version).app/Contents/Developer
- name: Build for tests
run: |
set -o pipefail && xcodebuild \
-scheme "DuckDuckGo" \
-destination "platform=iOS Simulator,name=iPhone 15,OS=17.2" \
-derivedDataPath "DerivedData" \
-skipPackagePluginValidation \
-skipMacroValidation \
ONLY_ACTIVE_ARCH=NO \
| tee xcodebuild.log
- name: Release tests
id: release-tests
uses: mobile-dev-inc/[email protected]
with:
api-key: ${{ secrets.MAESTRO_CLOUD_API_KEY }}
app-file: DerivedData/Build/Products/Debug-iphonesimulator/DuckDuckGo.app
workspace: .maestro
include-tags: release
ios-version: 17
- name: Privacy tests
id: privacy-tests
uses: mobile-dev-inc/[email protected]
with:
api-key: ${{ secrets.MAESTRO_CLOUD_API_KEY }}
app-file: DerivedData/Build/Products/Debug-iphonesimulator/DuckDuckGo.app
workspace: .maestro
include-tags: privacy
ios-version: 17
- name: Ad Click Detection Flow tests
id: ad-click-tests
uses: mobile-dev-inc/[email protected]
with:
api-key: ${{ secrets.MAESTRO_CLOUD_API_KEY }}
app-file: DerivedData/Build/Products/Debug-iphonesimulator/DuckDuckGo.app
workspace: .maestro
include-tags: adClick
ios-version: 17
- name: Check For Errors
env:
MAESTRO_RELEASE_TESTS_FLOW_RESULTS: ${{ steps.release-tests.outputs.MAESTRO_CLOUD_FLOW_RESULTS }}
MAESTRO_PRIVACY_TESTS_FLOW_RESULTS: ${{ steps.privacy-tests.outputs.MAESTRO_CLOUD_FLOW_RESULTS }}
MAESTRO_AD_CLICK_TESTS_FLOW_RESULTS: ${{ steps.ad-click-tests.outputs.MAESTRO_CLOUD_FLOW_RESULTS }}
MAESTRO_RELEASE_TESTS_UPLOAD_RESULTS: ${{ steps.release-tests.outputs.MAESTRO_CLOUD_UPLOAD_STATUS }}
MAESTRO_PRIVACY_TESTS_UPLOAD_RESULTS: ${{ steps.privacy-tests.outputs.MAESTRO_CLOUD_UPLOAD_STATUS }}
MAESTRO_AD_CLICK_TESTS_UPLOAD_RESULTS: ${{ steps.ad-click-tests.outputs.MAESTRO_CLOUD_UPLOAD_STATUS }}
run: |
echo "Release tests results: upload: ${{ steps.release-tests.outputs.MAESTRO_CLOUD_FLOW_RESULTS }} - flow: $MAESTRO_RELEASE_TESTS_FLOW_RESULTS"
echo "Privacy tests results: upload: $MAESTRO_PRIVACY_TESTS_UPLOAD_RESULTS - flow: $MAESTRO_PRIVACY_TESTS_FLOW_RESULTS"
echo "Ad Click tests results: upload: $MAESTRO_AD_CLICK_TESTS_FLOW_RESULTS - flow: $MAESTRO_AD_CLICK_TESTS_UPLOAD_RESULTS"
if [[ "$MAESTRO_RELEASE_TESTS_FLOW_RESULTS" == *"ERROR"* || "$MAESTRO_RELEASE_TESTS_FLOW_RESULTS" == *"CANCELED"* ]] \
|| [[ "$MAESTRO_PRIVACY_TESTS_FLOW_RESULTS" == *"ERROR"* || "$MAESTRO_PRIVACY_TESTS_FLOW_RESULTS" == *"CANCELED"* ]] \
|| [[ "$MAESTRO_AD_CLICK_TESTS_FLOW_RESULTS" == *"ERROR"* || "$MAESTRO_AD_CLICK_TESTS_FLOW_RESULTS" == *"CANCELED"* ]] \
|| [[ "$MAESTRO_RELEASE_TESTS_UPLOAD_RESULTS" != "SUCCESS" ]] \
|| [[ "$MAESTRO_PRIVACY_TESTS_FLOW_RESULTS" != "SUCCESS" ]] \
|| [[ "$MAESTRO_AD_CLICK_TESTS_FLOW_RESULTS" != "SUCCESS" ]]; then
echo "One or more tests failed or were canceled."
exit 1
fi