Skip to content

Commit 43b85c9

Browse files
committed
Merge branch 'release/5.216.0' into main
2 parents 666b9ab + e3889ad commit 43b85c9

File tree

399 files changed

+21524
-7956
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

399 files changed

+21524
-7956
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
name: 'Assign Android Release Task in Asana'
2+
description: 'Assigns the latest Asana Release task to the user who runs the workflow'
3+
inputs:
4+
task_name:
5+
description: 'The name of the task to search for'
6+
required: true
7+
asana_token:
8+
description: 'Asana Personal Access Token'
9+
required: true
10+
project_gid:
11+
description: 'Asana Project GID to search within'
12+
required: true
13+
username:
14+
description: 'The Github username to search for'
15+
required: true
16+
runs:
17+
using: 'composite'
18+
steps:
19+
- name: Find task in Asana and assign it to owner
20+
shell: bash
21+
run: |
22+
task_name="${{ inputs.task_name }}"
23+
asana_token="${{ inputs.asana_token }}"
24+
project_gid="${{ inputs.project_gid }}"
25+
username="${{ inputs.username }}"
26+
27+
# Make the API request to get tasks from the specified project
28+
response=$(curl -s -X GET "https://app.asana.com/api/1.0/projects/${project_gid}/tasks" \
29+
-H "Authorization: Bearer ${asana_token}")
30+
31+
# Check if the response contains any tasks that match the specified task name exactly
32+
task_id=$(echo "$response" | jq -r '.data[] | select(.name == "'"$task_name"'") | .gid')
33+
34+
if [ -z "$task_id" ]; then
35+
echo "No tasks with the exact name '$task_name' found in project GID '$project_gid'."
36+
exit 1
37+
else
38+
echo "Task ID for the task named '$task_name': $task_id"
39+
fi
40+
41+
asana_user_id=$(grep -E "^$username: " .github/actions/assign-release-task/github_asana_mapping.yml | awk -F': ' '{print $2}' | tr -d '"')
42+
43+
if [ -z "asana_user_id" ]; then
44+
echo "User $username not found."
45+
exit 1
46+
else
47+
echo "User ID for $username: $asana_user_id"
48+
fi
49+
50+
echo "Assigning task ID $task_id to user ID $asana_user_id"
51+
52+
# Assign the task to the user
53+
response=$(curl -s -X PUT "https://app.asana.com/api/1.0/tasks/${task_id}" \
54+
-H "Authorization: Bearer ${asana_token}" \
55+
-H "Content-Type: application/json" \
56+
-d "{\"data\": {\"assignee\": \"${asana_user_id}\"}}")
57+
58+
# Check if the assignment was successful
59+
status=$(echo $response | jq -r '.errors')
60+
61+
if [ "$status" == "null" ]; then
62+
echo "Task $task_id successfully assigned to user $asana_user_id."
63+
else
64+
echo "Failed to assign task: $status"
65+
exit 1
66+
fi
67+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
malmstein: "1157893581871899"
2+
marcosholgado: "1125189844075764"
3+
aitorvs: "1198194956790048"
4+
CDRussell: "608920331025313"
5+
anikiki: "1200581511061484"
6+
joshliebe: "1200204095365673"
7+
karlenDimla: "1201462763414791"
8+
cmonfortep: "1149059203346875"
9+
lmac012: "1205617573940213"
10+
nalcalag: "1201807753392396"
11+
CrisBarreiro: "1204920898013507"
12+
0nko: "1207418217763343"
13+
mikescamell: "1207908161520961"

.github/workflows/e2e-nightly-autofill.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ jobs:
6060
api-key: ${{ secrets.MOBILE_DEV_API_KEY }}
6161
name: ${{ github.sha }}
6262
app-file: apk/release.apk
63-
android-api-level: 30
63+
android-api-level: 33
6464
workspace: .maestro
6565
include-tags: autofillNoAuthTests
6666

+63
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
name: Create Android App Release Task
2+
3+
on:
4+
workflow_dispatch:
5+
inputs:
6+
app-version:
7+
description: 'App Version for Release'
8+
required: true
9+
default: 'PLACEHOLDER'
10+
11+
env:
12+
ASANA_PAT: ${{ secrets.GH_ASANA_SECRET }}
13+
14+
concurrency:
15+
group: ${{ github.workflow }}-${{ github.ref }}
16+
cancel-in-progress: true
17+
18+
jobs:
19+
create_release_task:
20+
name: Create Android App Release Task in Asana
21+
runs-on: macos-latest
22+
23+
steps:
24+
- name: Checkout repository
25+
uses: actions/checkout@v4
26+
27+
- name: Check app-version value
28+
run: |
29+
if [ "${{ github.event.inputs.app-version }}" == "PLACEHOLDER" ]; then
30+
echo "Input value cannot be 'PLACEHOLDER'."
31+
exit 1
32+
else
33+
echo "Input value is valid: ${{ github.event.inputs.app-version }}"
34+
fi
35+
36+
- name: Install Release Bridge from Homebrew
37+
run: |
38+
brew tap cdrussell/aarb
39+
brew install aarb
40+
41+
- name: Create task in Asana
42+
run: |
43+
AndroidAsanaBridge version=${{ github.event.inputs.app-version }} action=createRelease,tagPendingTasks,addLinksToDescription,removePendingTasks
44+
45+
- name: Assign task to Github Actor
46+
id: assign-release-task
47+
uses: ./.github/actions/assign-release-task
48+
with:
49+
task_name: 'Android Release ${{ github.event.inputs.app-version }}'
50+
asana_token: ${{ secrets.GH_ASANA_SECRET }}
51+
project_gid: ${{ vars.GH_ANDROID_RELEASE_BOARD_PROJECT_ID }}
52+
username: ${{ github.actor }}
53+
54+
- name: Create Asana task when workflow failed
55+
if: ${{ failure() }}
56+
uses: duckduckgo/[email protected]
57+
with:
58+
asana-pat: ${{ secrets.GH_ASANA_SECRET }}
59+
asana-project: ${{ vars.GH_ANDROID_APP_PROJECT_ID }}
60+
asana-section: ${{ vars.GH_ANDROID_APP_INCOMING_SECTION_ID }}
61+
asana-task-name: GH Workflow Failure - Create Android App Release Task
62+
asana-task-description: The Create Android App Release Task workflow has failed. See https://github.com/duckduckgo/Android/actions/runs/${{ github.run_id }}
63+
action: 'create-asana-task'

.maestro/ads_preview_flows/1-_design-system-components.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ tags:
1818
text: "Set of components designed following our Design System"
1919
direction: DOWN
2020
- assertVisible: "Set of components designed following our Design System"
21-
- tapOn: "App Components Design Preview"
21+
- tapOn: "Android Design System Preview"
2222
- assertVisible: "COLOR PALETTE"
2323
- tapOn: "TYPOGRAPHY"
2424
- scrollUntilVisible:

.maestro/autofill/2_autofill_add_search_update_delete_creds.yaml

+24
Original file line numberDiff line numberDiff line change
@@ -28,21 +28,33 @@ tags:
2828
- assertNotVisible:
2929
id: view_menu_save
3030

31+
- scrollUntilVisible:
32+
element:
33+
id: usernameEditText
3134
- tapOn:
3235
id: usernameEditText
3336
- inputText: "user"
3437

3538
- assertVisible:
3639
id: view_menu_save
3740

41+
- scrollUntilVisible:
42+
element:
43+
id: passwordEditText
3844
- tapOn:
3945
id: passwordEditText
4046
- inputText: "123"
4147

48+
- scrollUntilVisible:
49+
element:
50+
id: domainEditText
4251
- tapOn:
4352
id: domainEditText
4453
- inputText: "${output.addLogins.domains[output.addLogins.counter]}"
4554

55+
- scrollUntilVisible:
56+
element:
57+
id: notesEditText
4658
- tapOn:
4759
id: notesEditText
4860
- inputText: "a note"
@@ -51,6 +63,9 @@ tags:
5163
id: view_menu_save
5264
retryTapIfNoChange: false
5365

66+
- scrollUntilVisible:
67+
element:
68+
text: "Last updated.*"
5469
- assertVisible: "Last updated.*"
5570

5671
- tapOn: "Navigate up"
@@ -59,15 +74,24 @@ tags:
5974
text: "Save and autofill passwords"
6075
- evalScript: ${output.addLogins.counter++}
6176

77+
- scrollUntilVisible:
78+
element:
79+
text: "#"
6280
- assertVisible:
6381
text: "#"
6482

83+
- scrollUntilVisible:
84+
element:
85+
text: "a.example.com"
6586
- assertVisible:
6687
text: "a.example.com"
6788

6889
- assertNotVisible:
6990
text: "https://a.example.com"
7091

92+
- scrollUntilVisible:
93+
element:
94+
text: "fill.dev"
7195
- assertVisible:
7296
text: "fill.dev"
7397

.maestro/autofill/3_autofill_prompted_to_save_creds_on_form.yaml

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
appId: com.duckduckgo.mobile.android
22
name: "Autofill: Prompted to save and update credentials on web form"
33
tags:
4-
- autofillNoAuthTests
4+
- autofillNoAuthTestsModernWebView
55
---
6-
# Pre-requisite: on an autofill-eligible device
6+
# Pre-requisite: on an autofill-eligible device, including having a modern WebView
77

88
- launchApp:
99
clearState: true

.maestro/autofill/steps/delete_logins.yaml

+15-6
Original file line numberDiff line numberDiff line change
@@ -3,26 +3,35 @@ name: "Autofill: Delete credentials"
33
---
44
# Pre-requisite: the user is viewing the password manager screen with some saved passwords added by a previous test step, on an autofill-eligible device
55

6+
- scrollUntilVisible:
7+
element:
8+
text: "192.168.0.100"
69
- tapOn:
7-
id: "item_container"
8-
index: 1
10+
text: "192.168.0.100"
911
- tapOn: "More options"
1012
- tapOn: "Delete"
1113
- tapOn: "Delete"
1214

15+
- scrollUntilVisible:
16+
element:
17+
text: "a.example.com"
1318
- tapOn:
14-
id: "item_container"
15-
index: 1
19+
text: "a.example.com"
1620
- tapOn: "More options"
1721
- tapOn: "Delete"
1822
- tapOn: "Delete"
1923

24+
- scrollUntilVisible:
25+
element:
26+
text: "fill.dev"
2027
- tapOn:
21-
id: "item_container"
22-
index: 1
28+
text: "fill.dev"
2329
- tapOn: "More options"
2430
- tapOn: "Delete"
2531
- tapOn: "Delete"
2632

33+
- scrollUntilVisible:
34+
element:
35+
text: "No passwords saved yet"
2736
- assertVisible:
2837
text: "No passwords saved yet"

.maestro/autofill/steps/manual_update.yaml

+10-2
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,18 @@ name: "Autofill: Manually updating an existing credential"
33
---
44
# Pre-requisite: the user is viewing the password manager screen with some saved passwords added by a previous test step, on an autofill-eligible device
55

6+
- scrollUntilVisible:
7+
element:
8+
text: "a.example.com"
69
- tapOn:
7-
id: "item_container"
8-
index: "1"
10+
text: "a.example.com"
911

1012
- tapOn: "More options"
1113
- tapOn: "Edit"
1214

15+
- scrollUntilVisible:
16+
element:
17+
id: notesEditText
1318
- tapOn:
1419
id: notesEditText
1520

@@ -21,5 +26,8 @@ name: "Autofill: Manually updating an existing credential"
2126
id: view_menu_save
2227
retryTapIfNoChange: false
2328

29+
- scrollUntilVisible:
30+
element:
31+
text: "new note"
2432
- assertVisible: "new note"
2533
- tapOn: "Navigate up"

.maestro/autofill/steps/search_logins.yaml

+6
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,12 @@ name: "Autofill: Search credentials"
33
---
44
# Pre-requisite: the user is viewing the password manager screen with some saved passwords added by a previous test step, on an autofill-eligible device
55

6+
- runFlow:
7+
when:
8+
visible: "Sync & Back Up Your Passwords"
9+
commands:
10+
- tapOn: "No thanks"
11+
612
- tapOn:
713
id: searchLogins
814

ad-click/ad-click-impl/src/test/java/com/duckduckgo/adclick/impl/pixels/RealAdClickPixelsTest.kt

+5-5
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import androidx.core.content.edit
2222
import androidx.test.ext.junit.runners.AndroidJUnit4
2323
import com.duckduckgo.adclick.impl.Exemption
2424
import com.duckduckgo.app.statistics.pixels.Pixel
25-
import com.duckduckgo.app.statistics.pixels.Pixel.PixelType.COUNT
25+
import com.duckduckgo.app.statistics.pixels.Pixel.PixelType.Count
2626
import com.duckduckgo.common.test.api.InMemorySharedPreferences
2727
import java.time.Instant
2828
import java.util.concurrent.TimeUnit
@@ -248,7 +248,7 @@ class RealAdClickPixelsTest {
248248
pixel = eq(AdClickPixelName.AD_CLICK_PAGELOADS_WITH_AD_ATTRIBUTION),
249249
parameters = any(),
250250
encodedParameters = any(),
251-
type = eq(COUNT),
251+
type = eq(Count),
252252
)
253253
}
254254

@@ -264,7 +264,7 @@ class RealAdClickPixelsTest {
264264
pixel = eq(AdClickPixelName.AD_CLICK_PAGELOADS_WITH_AD_ATTRIBUTION),
265265
parameters = eq(mapOf(AdClickPixelParameters.AD_CLICK_PAGELOADS_WITH_AD_ATTRIBUTION_COUNT to "1")),
266266
encodedParameters = any(),
267-
type = eq(COUNT),
267+
type = eq(Count),
268268
)
269269
}
270270

@@ -283,7 +283,7 @@ class RealAdClickPixelsTest {
283283
pixel = eq(AdClickPixelName.AD_CLICK_PAGELOADS_WITH_AD_ATTRIBUTION),
284284
parameters = any(),
285285
encodedParameters = any(),
286-
type = eq(COUNT),
286+
type = eq(Count),
287287
)
288288
}
289289

@@ -302,7 +302,7 @@ class RealAdClickPixelsTest {
302302
pixel = eq(AdClickPixelName.AD_CLICK_PAGELOADS_WITH_AD_ATTRIBUTION),
303303
parameters = eq(mapOf(AdClickPixelParameters.AD_CLICK_PAGELOADS_WITH_AD_ATTRIBUTION_COUNT to "1")),
304304
encodedParameters = any(),
305-
type = eq(COUNT),
305+
type = eq(Count),
306306
)
307307
}
308308
}

anrs/anrs-impl/src/main/java/com/duckduckgo/app/anr/AnrOfflinePixelSender.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import com.duckduckgo.anrs.api.AnrRepository
2121
import com.duckduckgo.app.statistics.api.OfflinePixel
2222
import com.duckduckgo.app.statistics.api.PixelSender
2323
import com.duckduckgo.app.statistics.pixels.Pixel
24-
import com.duckduckgo.app.statistics.pixels.Pixel.PixelType.COUNT
24+
import com.duckduckgo.app.statistics.pixels.Pixel.PixelType.Count
2525
import com.duckduckgo.di.scopes.AppScope
2626
import com.squareup.anvil.annotations.ContributesMultibinding
2727
import io.reactivex.Completable
@@ -47,7 +47,7 @@ class AnrOfflinePixelSender @Inject constructor(
4747
ANR_CUSTOM_TAB to it.customTab.toString(),
4848
),
4949
mapOf(),
50-
COUNT,
50+
Count,
5151
).ignoreElement().doOnComplete {
5252
anrRepository.removeMostRecentAnr()
5353
}

0 commit comments

Comments
 (0)