Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
177 changes: 1 addition & 176 deletions .github/workflows/e2e-nightly-full-suite.yml
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ jobs:
maestro_test_name: customTabs${{ env.DI_UNDERSCORE_SUFFIX }}_${{ github.sha }}
maestro_timeout: ${{ vars.ROBIN_TIMEOUT_MINUTES }}
maestro_app_binary_id: ${{ steps.maestro-upload-internal-binary.outputs.maestro_app_binary_id }}
maestro_api_level: 34
maestro_api_level: 35
maestro_include_tags: customTabsTest
asana_pat: ${{ secrets.ASANA_ACCESS_TOKEN }}
asana_project_id: ${{ vars.GH_ANDROID_APP_PROJECT_ID }}
Expand All @@ -132,181 +132,6 @@ jobs:
asana_releases_project_id: ${{ vars.GH_ANDROID_APP_RELEASES_PROJECT_ID }}
asana_releases_blocker_section_id: ${{ vars.GH_ANDROID_APP_RELEASES_PROJECT_BLOCKER_SECTION_ID }}

- name: Internal Privacy Tests
id: maestro-internal-privacy
uses: ./.github/actions/maestro-cloud-asana-reporter
timeout-minutes: 120
with:
maestro_api_key: ${{ secrets.ROBIN_API_KEY }}
maestro_project_id: ${{ vars.ROBIN_ANDROID_PROJECT_ID }}
maestro_test_name: internalPrivacyTest${{ env.DI_UNDERSCORE_SUFFIX }}_${{ github.sha }}
maestro_timeout: ${{ vars.ROBIN_TIMEOUT_MINUTES }}
maestro_app_binary_id: ${{ steps.maestro-upload-internal-binary.outputs.maestro_app_binary_id }}
maestro_api_level: 34
maestro_include_tags: privacyTestInternal
asana_pat: ${{ secrets.ASANA_ACCESS_TOKEN }}
asana_project_id: ${{ vars.GH_ANDROID_APP_PROJECT_ID }}
asana_section_id: ${{ vars.GH_ANDROID_APP_INCOMING_SECTION_ID }}
test_suite_name: Internal Privacy (${{ env.DDG_DI == 'AnvilDagger' && 'Nightly' || format('{0} Nightly', env.DDG_DI) }})
create_asana_error_task: ${{ inputs.create_asana_tasks }}
# Only block releases for the default Anvil path. Metro is informational.
is_release_blocker: ${{ env.DDG_DI == 'AnvilDagger' }}
asana_releases_project_id: ${{ vars.GH_ANDROID_APP_RELEASES_PROJECT_ID }}
asana_releases_blocker_section_id: ${{ vars.GH_ANDROID_APP_RELEASES_PROJECT_BLOCKER_SECTION_ID }}

- name: Onboarding flows
id: maestro-onboarding
uses: ./.github/actions/maestro-cloud-asana-reporter
timeout-minutes: 120
with:
maestro_api_key: ${{ secrets.ROBIN_API_KEY }}
maestro_project_id: ${{ vars.ROBIN_ANDROID_PROJECT_ID }}
maestro_test_name: onboardingTest${{ env.DI_UNDERSCORE_SUFFIX }}_${{ github.sha }}
maestro_timeout: ${{ vars.ROBIN_TIMEOUT_MINUTES }}
maestro_app_binary_id: ${{ steps.maestro-upload-release-binary.outputs.maestro_app_binary_id }}
maestro_api_level: 35
maestro_include_tags: onboardingTest
asana_pat: ${{ secrets.ASANA_ACCESS_TOKEN }}
asana_project_id: ${{ vars.GH_ANDROID_APP_PROJECT_ID }}
asana_section_id: ${{ vars.GH_ANDROID_APP_INCOMING_SECTION_ID }}
test_suite_name: Onboarding (${{ env.DDG_DI == 'AnvilDagger' && 'Nightly' || format('{0} Nightly', env.DDG_DI) }})
create_asana_error_task: ${{ inputs.create_asana_tasks }}
# Only block releases for the default Anvil path. Metro is informational.
is_release_blocker: ${{ env.DDG_DI == 'AnvilDagger' }}
asana_releases_project_id: ${{ vars.GH_ANDROID_APP_RELEASES_PROJECT_ID }}
asana_releases_blocker_section_id: ${{ vars.GH_ANDROID_APP_RELEASES_PROJECT_BLOCKER_SECTION_ID }}

- name: Deeplink tests
id: maestro-deeplink
uses: ./.github/actions/maestro-cloud-asana-reporter
timeout-minutes: 120
with:
maestro_api_key: ${{ secrets.ROBIN_API_KEY }}
maestro_project_id: ${{ vars.ROBIN_ANDROID_PROJECT_ID }}
maestro_test_name: navigationTest${{ env.DI_UNDERSCORE_SUFFIX }}_${{ github.sha }}
maestro_timeout: ${{ vars.ROBIN_TIMEOUT_MINUTES }}
maestro_app_binary_id: ${{ steps.maestro-upload-release-binary.outputs.maestro_app_binary_id }}
maestro_api_level: 35
maestro_include_tags: navigationTest
asana_pat: ${{ secrets.ASANA_ACCESS_TOKEN }}
asana_project_id: ${{ vars.GH_ANDROID_APP_PROJECT_ID }}
asana_section_id: ${{ vars.GH_ANDROID_APP_INCOMING_SECTION_ID }}
test_suite_name: Deeplink (${{ env.DDG_DI == 'AnvilDagger' && 'Nightly' || format('{0} Nightly', env.DDG_DI) }})
create_asana_error_task: ${{ inputs.create_asana_tasks }}
# Only block releases for the default Anvil path. Metro is informational.
is_release_blocker: ${{ env.DDG_DI == 'AnvilDagger' }}
asana_releases_project_id: ${{ vars.GH_ANDROID_APP_RELEASES_PROJECT_ID }}
asana_releases_blocker_section_id: ${{ vars.GH_ANDROID_APP_RELEASES_PROJECT_BLOCKER_SECTION_ID }}

- name: Ad click detection flows
id: maestro-ad-click
uses: ./.github/actions/maestro-cloud-asana-reporter
timeout-minutes: 120
with:
maestro_api_key: ${{ secrets.ROBIN_API_KEY }}
maestro_project_id: ${{ vars.ROBIN_ANDROID_PROJECT_ID }}
maestro_test_name: adClickTest${{ env.DI_UNDERSCORE_SUFFIX }}_${{ github.sha }}
maestro_timeout: ${{ vars.ROBIN_TIMEOUT_MINUTES }}
maestro_app_binary_id: ${{ steps.maestro-upload-release-binary.outputs.maestro_app_binary_id }}
maestro_api_level: 30
maestro_include_tags: adClickTest
asana_pat: ${{ secrets.ASANA_ACCESS_TOKEN }}
asana_project_id: ${{ vars.GH_ANDROID_APP_PROJECT_ID }}
asana_section_id: ${{ vars.GH_ANDROID_APP_INCOMING_SECTION_ID }}
test_suite_name: Ad Click (${{ env.DDG_DI == 'AnvilDagger' && 'Nightly' || format('{0} Nightly', env.DDG_DI) }})
create_asana_error_task: ${{ inputs.create_asana_tasks }}
# Only block releases for the default Anvil path. Metro is informational.
is_release_blocker: ${{ env.DDG_DI == 'AnvilDagger' }}
asana_releases_project_id: ${{ vars.GH_ANDROID_APP_RELEASES_PROJECT_ID }}
asana_releases_blocker_section_id: ${{ vars.GH_ANDROID_APP_RELEASES_PROJECT_BLOCKER_SECTION_ID }}

- name: Privacy Tests
id: maestro-privacy
uses: ./.github/actions/maestro-cloud-asana-reporter
timeout-minutes: 120
with:
maestro_api_key: ${{ secrets.ROBIN_API_KEY }}
maestro_project_id: ${{ vars.ROBIN_ANDROID_PROJECT_ID }}
maestro_test_name: privacyTest${{ env.DI_UNDERSCORE_SUFFIX }}_${{ github.sha }}
maestro_timeout: ${{ vars.ROBIN_TIMEOUT_MINUTES }}
maestro_app_binary_id: ${{ steps.maestro-upload-release-binary.outputs.maestro_app_binary_id }}
maestro_api_level: 35
maestro_include_tags: privacyTest
asana_pat: ${{ secrets.ASANA_ACCESS_TOKEN }}
asana_project_id: ${{ vars.GH_ANDROID_APP_PROJECT_ID }}
asana_section_id: ${{ vars.GH_ANDROID_APP_INCOMING_SECTION_ID }}
test_suite_name: Privacy (${{ env.DDG_DI == 'AnvilDagger' && 'Nightly' || format('{0} Nightly', env.DDG_DI) }})
create_asana_error_task: ${{ inputs.create_asana_tasks }}
# Only block releases for the default Anvil path. Metro is informational.
is_release_blocker: ${{ env.DDG_DI == 'AnvilDagger' }}
asana_releases_project_id: ${{ vars.GH_ANDROID_APP_RELEASES_PROJECT_ID }}
asana_releases_blocker_section_id: ${{ vars.GH_ANDROID_APP_RELEASES_PROJECT_BLOCKER_SECTION_ID }}

- name: Security Tests
id: maestro-security
uses: ./.github/actions/maestro-cloud-asana-reporter
timeout-minutes: 120
with:
maestro_api_key: ${{ secrets.ROBIN_API_KEY }}
maestro_project_id: ${{ vars.ROBIN_ANDROID_PROJECT_ID }}
maestro_test_name: securityTest${{ env.DI_UNDERSCORE_SUFFIX }}_${{ github.sha }}
maestro_timeout: ${{ vars.ROBIN_TIMEOUT_MINUTES }}
maestro_app_binary_id: ${{ steps.maestro-upload-release-binary.outputs.maestro_app_binary_id }}
maestro_api_level: 35
maestro_include_tags: securityTest
asana_pat: ${{ secrets.ASANA_ACCESS_TOKEN }}
asana_project_id: ${{ vars.GH_ANDROID_APP_PROJECT_ID }}
asana_section_id: ${{ vars.GH_ANDROID_APP_INCOMING_SECTION_ID }}
test_suite_name: Security (${{ env.DDG_DI == 'AnvilDagger' && 'Nightly' || format('{0} Nightly', env.DDG_DI) }})
create_asana_error_task: ${{ inputs.create_asana_tasks }}
# Only block releases for the default Anvil path. Metro is informational.
is_release_blocker: ${{ env.DDG_DI == 'AnvilDagger' }}
asana_releases_project_id: ${{ vars.GH_ANDROID_APP_RELEASES_PROJECT_ID }}
asana_releases_blocker_section_id: ${{ vars.GH_ANDROID_APP_RELEASES_PROJECT_BLOCKER_SECTION_ID }}

- name: Release Tests
id: maestro-release
uses: ./.github/actions/maestro-cloud-asana-reporter
timeout-minutes: 120
with:
maestro_api_key: ${{ secrets.ROBIN_API_KEY }}
maestro_project_id: ${{ vars.ROBIN_ANDROID_PROJECT_ID }}
maestro_test_name: releaseTest${{ env.DI_UNDERSCORE_SUFFIX }}_${{ github.sha }}
maestro_timeout: ${{ vars.ROBIN_TIMEOUT_MINUTES }}
maestro_app_binary_id: ${{ steps.maestro-upload-release-binary.outputs.maestro_app_binary_id }}
maestro_api_level: 35
maestro_include_tags: releaseTest
asana_pat: ${{ secrets.ASANA_ACCESS_TOKEN }}
asana_project_id: ${{ vars.GH_ANDROID_APP_PROJECT_ID }}
asana_section_id: ${{ vars.GH_ANDROID_APP_INCOMING_SECTION_ID }}
test_suite_name: Release Tests (${{ env.DDG_DI == 'AnvilDagger' && 'Nightly' || format('{0} Nightly', env.DDG_DI) }})
create_asana_error_task: ${{ inputs.create_asana_tasks }}
# Only block releases for the default Anvil path. Metro is informational.
is_release_blocker: ${{ env.DDG_DI == 'AnvilDagger' }}
asana_releases_project_id: ${{ vars.GH_ANDROID_APP_RELEASES_PROJECT_ID }}
asana_releases_blocker_section_id: ${{ vars.GH_ANDROID_APP_RELEASES_PROJECT_BLOCKER_SECTION_ID }}

- name: Notifications permissions Android 13+
id: maestro-notification-permissions
uses: ./.github/actions/maestro-cloud-asana-reporter
timeout-minutes: 120
with:
maestro_api_key: ${{ secrets.ROBIN_API_KEY }}
maestro_project_id: ${{ vars.ROBIN_ANDROID_PROJECT_ID }}
maestro_test_name: notificationPermissionTest${{ env.DI_UNDERSCORE_SUFFIX }}_${{ github.sha }}
maestro_timeout: ${{ vars.ROBIN_TIMEOUT_MINUTES }}
maestro_app_binary_id: ${{ steps.maestro-upload-release-binary.outputs.maestro_app_binary_id }}
maestro_api_level: 35
maestro_include_tags: permissionsTest
asana_pat: ${{ secrets.ASANA_ACCESS_TOKEN }}
asana_project_id: ${{ vars.GH_ANDROID_APP_PROJECT_ID }}
asana_section_id: ${{ vars.GH_ANDROID_APP_INCOMING_SECTION_ID }}
test_suite_name: Notification Permissions (${{ env.DDG_DI == 'AnvilDagger' && 'Nightly' || format('{0} Nightly', env.DDG_DI) }})
create_asana_error_task: ${{ inputs.create_asana_tasks }}
# Only block releases for the default Anvil path. Metro is informational.
is_release_blocker: ${{ env.DDG_DI == 'AnvilDagger' }}
asana_releases_project_id: ${{ vars.GH_ANDROID_APP_RELEASES_PROJECT_ID }}
asana_releases_blocker_section_id: ${{ vars.GH_ANDROID_APP_RELEASES_PROJECT_BLOCKER_SECTION_ID }}

- name: Create Asana task when workflow failed
if: ${{ failure() && inputs.create_asana_tasks == true }}
Expand Down
40 changes: 21 additions & 19 deletions .github/workflows/test_workflow.yml
Original file line number Diff line number Diff line change
@@ -1,26 +1,28 @@
name: Test - Workflow for Testing
name: Test workflow

on:
workflow_dispatch:

inputs:
ref:
description: 'This is an example of an input'
required: true

env:
ASANA_PAT: ${{ secrets.ASANA_ACCESS_TOKEN }}
GH_TOKEN: ${{ secrets.GT_DAXMOBILE }}
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
test-workflow:
runs-on: ubuntu-latest
name: Add here whatever steps you want to test

resolve-commit:
name: Resolve commit SHA
runs-on: android-large-runner
outputs:
commit_sha: ${{ steps.resolve.outputs.commit_sha }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
submodules: recursive
token: ${{ secrets.GT_DAXMOBILE }}
ref: ${{ github.event.inputs.ref }}
- name: Resolve commit SHA
id: resolve
run: |
Comment thread
CrisBarreiro marked this conversation as resolved.
echo "Using commit: ${{ github.sha }}"
echo "commit_sha=${{ github.sha }}" >> $GITHUB_OUTPUT

call-end-to-end:
needs: [resolve-commit]
uses: ./.github/workflows/e2e-nightly-full-suite.yml
with:
commit: ${{ needs.resolve-commit.outputs.commit_sha }}
secrets: inherit
3 changes: 3 additions & 0 deletions .maestro/custom_tabs/custom_tabs_navigation.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@ name: "Custom Tabs navigation"
- launchApp:
clearState: true
stopApp: true
arguments:
isMaestro: "true"
webContentDebugging: "true"

- runFlow:
file: ../shared/pre_onboarding.yaml
Expand Down
32 changes: 24 additions & 8 deletions .maestro/custom_tabs/custom_tabs_navigation_new_tab.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@ tags:
- launchApp:
clearState: true
stopApp: true
arguments:
isMaestro: "true"
webContentDebugging: "true"

- runFlow:
file: ../shared/pre_onboarding.yaml
Expand All @@ -33,6 +36,7 @@ tags:
- tapOn:
text: "add your url here"
- inputText: "https://www.search-company.site"
- hideKeyboard
- tapOn:
text: "load custom tab"
- tapOn:
Expand All @@ -42,24 +46,36 @@ tags:
- action: back
- tapOn:
text: "[Ad 2] Shopping Tab Ad (heuristic)"
- assertVisible:
text: "Publisher site"
- extendedWaitUntil:
visible:
text: "Publisher site"
timeout: 5000
- action: back
- tapOn:
text: "[Ad 2] Shopping Tab Ad (heuristic)"
- extendedWaitUntil:
visible:
text: "Red shoes"
timeout: 5000
- tapOn:
text: "Red shoes"
- assertVisible:
text: "Checkout"
- extendedWaitUntil:
visible:
text: "Checkout"
timeout: 5000
- tapOn:
id: "com.duckduckgo.mobile.android:id/browserMenuImageView"
- tapOn:
id: "com.duckduckgo.mobile.android:id/backMenuItem"
- assertVisible:
text: "Red shoes"
- extendedWaitUntil:
visible:
text: "Red shoes"
timeout: 5000
- tapOn:
id: "com.duckduckgo.mobile.android:id/browserMenuImageView"
- tapOn:
id: "com.duckduckgo.mobile.android:id/forwardMenuItem"
- assertVisible:
text: "Checkout"
- extendedWaitUntil:
visible:
text: "Checkout"
timeout: 5000
3 changes: 3 additions & 0 deletions .maestro/privacy_tests_internal/1_-_Api_manipulation.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@ tags:
commands:
- launchApp:
clearState: true
arguments:
isMaestro: "true"
webContentDebugging: "true"
- runFlow: ../shared/skip_all_onboarding.yaml
- runFlow: ../shared/browser_screen/click_on_menu_button.yaml
- tapOn:
Expand Down
Loading
Loading