Skip to content

Commit

Permalink
Merge branch 'main' into sam/add-netp-subscription-auth-support
Browse files Browse the repository at this point in the history
# By Sam Symons (13) and others
# Via Bartek Waresiak (2) and others
* main: (69 commits)
  Custom config URL (#2278)
  Fix internal user toggling (#2282)
  Display warning icon in Sync Settings cell when data syncing is disabled (#2281)
  Add Sync feature flags (#2279)
  Add Sync Success Rate pixel  (#2277)
  add test 5 and fix test 4 (#2276)
  Fix: "SwiftLintPlugin" must be enabled before it can be used (#2274)
  Send WG invalid state reason (#2275)
  Typo
  Fix: "SwiftLintPlugin" must be enabled before it can be used
  Release 7.102.0 (#2273)
  Add search retention pixel for NetP (#2267)
  Run sync tests in matrix (#2263)
  SwiftLint build plugin (#2233)
  Update VPN active user check and debug options (#2269)
  Update Autofill Logins copy (#2246)
  Remove the reconnect/disconnect logic from the connection tester (#2272)
  Remove the Fastlane notes file temporarily (#2270)
  remove QR code from save recovery PDF view (#2271)
  Show dev environment indicator in Sync Settings (#2265)
  ...

# Conflicts:
#	DuckDuckGo.xcodeproj/project.pbxproj
#	DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved
  • Loading branch information
samsymons committed Dec 22, 2023
2 parents 2d15390 + 6dd32f6 commit c4577ce
Show file tree
Hide file tree
Showing 331 changed files with 9,355 additions and 8,167 deletions.
6 changes: 3 additions & 3 deletions .github/workflows/adhoc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -58,13 +58,13 @@ jobs:
echo "dsyms_path=${{ github.workspace }}/${{ env.dsyms_filename }}" >> $GITHUB_ENV
- name: Upload IPA artifact
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: ${{ env.ipa_filename }}
path: ${{ env.ipa_path }}

- name: Upload dSYMs artifact
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: ${{ env.dsyms_filename }}
path: ${{ env.dsyms_path }}
Expand All @@ -87,4 +87,4 @@ jobs:
run: |
curl -s "https://app.asana.com/api/1.0/tasks/${{ steps.get-task-id.outputs.task_id }}/attachments" \
-H "Authorization: Bearer ${{ secrets.ASANA_ACCESS_TOKEN }}" \
--form "file=@${{ env.ipa_path }};type=application/zip"
--form "file=@${{ env.ipa_path }};type=application/zip"
10 changes: 5 additions & 5 deletions .github/workflows/alpha.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,11 +39,11 @@ jobs:

steps:

- name: Assert develop branch
- name: Assert main branch
run: |
case "${{ github.ref }}" in
*develop) ;;
*) echo "👎 Not develop branch"; exit 1 ;;
*main) ;;
*) echo "👎 Not main branch"; exit 1 ;;
esac
- name: Register SSH keys for access to certificates
Expand All @@ -58,7 +58,7 @@ jobs:

- name: Set cache key hash
run: |
has_only_tags=$(jq '[ .object.pins[].state | has("version") ] | all' DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved)
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
Expand Down Expand Up @@ -97,7 +97,7 @@ jobs:
echo "build_version=${build_version}" >> $GITHUB_ENV
- name: Upload dSYMs artifact
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: DuckDuckGo-Alpha-dSYM-${{ env.app_version }}
path: ${{ env.dsyms_path }}
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/codeql.yml
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ jobs:
-target "DuckDuckGo" \
-scheme "DuckDuckGo" \
-destination "platform=iOS Simulator,name=iPhone 14,OS=16.4"
-skipPackagePluginValidation \
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v2
Expand Down
5 changes: 3 additions & 2 deletions .github/workflows/end-to-end.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ jobs:

- name: Set cache key hash
run: |
has_only_tags=$(jq '[ .object.pins[].state | has("version") ] | all' DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved)
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
Expand All @@ -42,6 +42,7 @@ jobs:
-scheme "DuckDuckGo" \
-destination "platform=iOS Simulator,name=iPhone 14,OS=16.4" \
-derivedDataPath "DerivedData" \
-skipPackagePluginValidation \
| tee xcodebuild.log
- name: Release tests
Expand Down Expand Up @@ -78,7 +79,7 @@ jobs:
--data ' { "data": { "name": "GH Workflow Failure - End to end tests", "workspace": "${{ vars.GH_ASANA_WORKSPACE_ID }}", "projects": [ "${{ vars.GH_ASANA_IOS_APP_PROJECT_ID }}" ], "notes" : "The end to end workflow has failed. See https://github.com/duckduckgo/iOS/actions/runs/${{ github.run_id }}" } }'
- name: Upload logs when workflow failed
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
if: failure()
with:
name: BuildLogs
Expand Down
6 changes: 4 additions & 2 deletions .github/workflows/nightly.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ jobs:

- name: Set cache key hash
run: |
has_only_tags=$(jq '[ .object.pins[].state | has("version") ] | all' DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved)
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
Expand Down Expand Up @@ -46,11 +46,12 @@ jobs:
-scheme "AtbUITests" \
-destination "platform=iOS Simulator,name=iPhone 14,OS=16.4" \
-derivedDataPath "DerivedData" \
-skipPackagePluginValidation \
| tee xcodebuild.log \
| xcbeautify --report junit --report-path . --junit-report-filename unittests.xml
- name: Upload logs if workflow failed
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
if: failure()
with:
name: BuildLogs
Expand Down Expand Up @@ -87,6 +88,7 @@ jobs:
-scheme "FingerprintingUITests" \
-destination "platform=iOS Simulator,name=iPhone 14,OS=16.4" \
-derivedDataPath "DerivedData" \
-skipPackagePluginValidation \
| xcbeautify --report junit --report-path . --junit-report-filename unittests.xml
- name: Publish unit tests report
Expand Down
18 changes: 10 additions & 8 deletions .github/workflows/pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: PR Checks

on:
push:
branches: [ develop, "release/**" ]
branches: [ main, "release/**" ]
pull_request:

jobs:
Expand All @@ -15,7 +15,7 @@ jobs:
steps:
- uses: actions/checkout@v3
- name: SwiftLint
uses: docker://norionomura/swiftlint:0.53.0
uses: docker://norionomura/swiftlint:0.54.0_swift-5.9.0
with:
args: swiftlint --reporter github-actions-logging --strict

Expand Down Expand Up @@ -53,7 +53,7 @@ jobs:

- name: Set cache key hash
run: |
has_only_tags=$(jq '[ .object.pins[].state | has("version") ] | all' DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved)
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
Expand Down Expand Up @@ -81,12 +81,13 @@ jobs:
-scheme "DuckDuckGo" \
-destination "platform=iOS Simulator,name=iPhone 14,OS=16.4" \
-derivedDataPath "DerivedData" \
-skipPackagePluginValidation \
DDG_SLOW_COMPILE_CHECK_THRESHOLD=250 \
| tee xcodebuild.log \
| xcbeautify --report junit --report-path . --junit-report-filename unittests.xml
- name: Upload logs if workflow failed
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
if: failure()
with:
name: BuildLogs
Expand Down Expand Up @@ -114,7 +115,7 @@ jobs:
| xargs -L 1 ./scripts/report-failed-unit-test.sh -s ${{ vars.APPLE_CI_FAILING_TESTS_FAILED_TESTS_SECTION_ID }}
- name: Fetch latest commit author
if: always() && github.ref_name == 'develop'
if: always() && github.ref_name == 'main'
id: fetch_commit_author
env:
GH_TOKEN: ${{ github.token }}
Expand Down Expand Up @@ -144,7 +145,7 @@ jobs:

- name: Set cache key hash
run: |
has_only_tags=$(jq '[ .object.pins[].state | has("version") ] | all' DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved)
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
Expand Down Expand Up @@ -183,13 +184,14 @@ jobs:
-destination "platform=iOS Simulator,name=iPhone 14" \
-derivedDataPath "DerivedData" \
-configuration "Release" \
-skipPackagePluginValidation \
| xcbeautify
create-asana-task:
name: Create Asana Task
needs: [swiftlint, unit-tests, shellcheck, release-build]

if: failure() && github.ref_name == 'develop' && github.run_attempt == 1
if: failure() && github.ref_name == 'main' && github.run_attempt == 1

runs-on: ubuntu-latest

Expand All @@ -206,7 +208,7 @@ jobs:
name: Close Asana Task
needs: [swiftlint, unit-tests, shellcheck, release-build]

if: success() && github.ref_name == 'develop' && github.run_attempt > 1
if: success() && github.ref_name == 'main' && github.run_attempt > 1

runs-on: ubuntu-latest

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ jobs:
- name: Upload dSYMs artifact
if: always()
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: DuckDuckGo-${{ steps.destination.outputs.destination }}-dSYM-${{ env.app_version }}
path: ${{ env.dsyms_path }}
Expand Down
84 changes: 61 additions & 23 deletions .github/workflows/sync-end-to-end.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,10 @@ on:
- cron: '0 5 * * *' # run at 5 AM UTC

jobs:
sync-end-to-end-tests:
name: Sync End to end Tests
build-for-sync-end-to-end-tests:
name: Build for Sync End To End Tests
runs-on: macos-13
timeout-minutes: 30

steps:
- name: Check out the code
Expand All @@ -17,7 +18,7 @@ jobs:

- name: Set cache key hash
run: |
has_only_tags=$(jq '[ .object.pins[].state | has("version") ] | all' DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved)
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
Expand All @@ -40,43 +41,80 @@ jobs:
run: |
set -o pipefail && xcodebuild \
-scheme "DuckDuckGo" \
-destination "platform=iOS Simulator,name=iPhone 14,OS=16.4" \
-destination "platform=iOS Simulator,name=iPhone 14" \
-derivedDataPath "DerivedData" \
-skipPackagePluginValidation \
| tee xcodebuild.log
- name: Store Binary
uses: actions/upload-artifact@v4
with:
name: duckduckgo-ios-app
path: DerivedData/Build/Products/Debug-iphonesimulator/DuckDuckGo.app

- name: Upload logs when workflow failed
uses: actions/upload-artifact@v4
if: failure()
with:
name: BuildLogs
path: |
xcodebuild.log
DerivedData/Logs/Test/*.xcresult
retention-days: 7

sync-end-to-end-tests:
name: Sync End To End Tests
needs: build-for-sync-end-to-end-tests
runs-on: macos-13
timeout-minutes: 30
strategy:
matrix:
os-version: [15, 16, 17]
#max-parallel: 1 # Uncomment this line to run tests sequentially.
fail-fast: false

steps:
- name: Check out the code
uses: actions/checkout@v3 # Don't need submodules here as this is only for the tests folder

- name: Create test account for Sync and return the recovery code
uses: duckduckgo/sync_crypto/action@main
id: sync-recovery-code
with:
debug: true

- name: Sync e2e tests
uses: mobile-dev-inc/[email protected]
- name: Retrieve Binary
uses: actions/download-artifact@v4
with:
name: duckduckgo-ios-app
path: DerivedData/Build/Products/Debug-iphonesimulator/DuckDuckGo.app

- name: Sync e2e tests
uses: mobile-dev-inc/[email protected]
with:
api-key: ${{ secrets.MAESTRO_CLOUD_API_KEY }}
app-file: DerivedData/Build/Products/Debug-iphonesimulator/DuckDuckGo.app
ios-version: ${{ matrix.os-version }}
workspace: .maestro
include-tags: sync
env: |
CODE=${{ steps.sync-recovery-code.outputs.recovery-code }}
- name: Create Asana task when workflow failed
if: ${{ failure() }}
run: |
curl -s "https://app.asana.com/api/1.0/tasks" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${{ secrets.ASANA_ACCESS_TOKEN }}" \
--header "Content-Type: application/json" \
--data ' { "data": { "name": "GH Workflow Failure - Sync End to end tests", "workspace": "${{ vars.GH_ASANA_WORKSPACE_ID }}", "projects": [ "${{ vars.GH_ASANA_IOS_APP_PROJECT_ID }}" ], "notes" : "The end to end workflow has failed. See https://github.com/duckduckgo/iOS/actions/runs/${{ github.run_id }}" } }'
notify-failure:
name: Notify on failure
if: ${{ always() && contains(join(needs.*.result, ','), 'failure') }}
needs: [build-for-sync-end-to-end-tests, sync-end-to-end-tests]
runs-on: ubuntu-latest

- name: Upload logs when workflow failed
uses: actions/upload-artifact@v3
if: failure()
with:
name: BuildLogs
path: |
xcodebuild.log
DerivedData/Logs/Test/*.xcresult
retention-days: 7
steps:
- name: Create Asana task when workflow failed
run: |
curl -s "https://app.asana.com/api/1.0/tasks" \
--header "Accept: application/json" \
--header "Authorization: Bearer ${{ secrets.ASANA_ACCESS_TOKEN }}" \
--header "Content-Type: application/json" \
--data ' { "data": { "name": "GH Workflow Failure - Sync End to end tests", "workspace": "${{ vars.GH_ASANA_WORKSPACE_ID }}", "projects": [ "${{ vars.GH_ASANA_IOS_APP_PROJECT_ID }}" ], "notes" : "The end to end workflow has failed. See https://github.com/duckduckgo/iOS/actions/runs/${{ github.run_id }}" } }'


1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -73,3 +73,4 @@ fastlane/test_output
# DuckDuckGo

Configuration/ExternalDeveloper.xcconfig
scripts/assets
39 changes: 39 additions & 0 deletions .maestro/security_tests/0_all.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# all.yaml

appId: com.duckduckgo.mobile.ios
---

# Set up
- clearState
- launchApp
- runFlow:
when:
visible:
text: "Let’s Do It!"
index: 0
file: ../shared/onboarding.yaml

# Load Site
- assertVisible:
id: "searchEntry"
- tapOn:
id: "searchEntry"
- inputText: "https://privacy-test-pages.site/security/address-bar-spoofing/"
- pressKey: Enter

# Manage onboarding
- runFlow:
when:
visible:
text: "Got It"
index: 0
file: ../shared/onboarding_browsing.yaml

# Run AddressBarSpoofing tests
- runFlow: ./1_-_AddressBarSpoof,_basicauth.yaml
- runFlow: ./2_-_AddressBarSpoof,_aboutblank.yaml
- runFlow: ./3_-_AddressBarSpoof,_appschemes.yaml
- runFlow: ./4_-_AddressBarSpoof,_b64_html.yaml
- runFlow: ./5_-_AddressBarSpoof,_downloadpath.yaml
- runFlow: ./6_-_AddressBarSpoof,_formaction.yaml
- runFlow: ./7_-_AddressBarSpoof,_pagerewrite.yaml
Loading

0 comments on commit c4577ce

Please sign in to comment.