diff --git a/azure-pipelines/templates/buildTestApps/build-test-apps.yml b/azure-pipelines/templates/buildTestApps/build-test-apps.yml index 4c17681d..dbe3759d 100644 --- a/azure-pipelines/templates/buildTestApps/build-test-apps.yml +++ b/azure-pipelines/templates/buildTestApps/build-test-apps.yml @@ -99,4 +99,4 @@ jobs: feedName: ${{ parameters.testAppsFeedName }} oldMsalTestAppVersion: ${{ parameters.oldMsalTestAppVersion }} oldOneAuthTestAppVersion: ${{ parameters.oldOneAuthTestAppVersion }} - - template: ../../ui-automation/templates/download-first-party-apps.yml \ No newline at end of file + - template: ../../ui-automation/templates/download-first-party-apps.yml diff --git a/azure-pipelines/ui-automation/nativeauth-test.yml b/azure-pipelines/ui-automation/nativeauth-test.yml new file mode 100644 index 00000000..6c7fca69 --- /dev/null +++ b/azure-pipelines/ui-automation/nativeauth-test.yml @@ -0,0 +1,91 @@ +# Run NativeAuth UI automation tests (standalone stabilization pipeline) +# This pipeline is used during test development/stabilization. +# Once tests are stable, they can be added to the weekly-validation pipeline. +# https://dev.azure.com/IdentityDivision/Engineering/_build?definitionId=XXXX +name: $(Build.BuildId)_NativeAuth_$(SourceBranchName)_$(Date:yyyyMMdd)$(Rev:.r) + +trigger: none +pr: none + +resources: + repositories: + - repository: msal + type: github + name: AzureAD/microsoft-authentication-library-for-android + ref: $(msal_branch) + endpoint: ANDROID_GITHUB + +variables: + - group: devex-ciam-test + - name: engineeringProjectId + value: 'fac9d424-53d2-45c0-91b5-ef6ba7a6bf26' + - name: msalApp + value: msalautomationapp-local-AutoBroker-debug.apk + - name: msalTestApp + value: msalautomationapp-local-AutoBroker-debug-androidTest.apk + - name: nativeAuthSampleApk + value: app-debug.apk + - name: firebaseTimeout + value: 45m + - name: resultsHistoryName + value: NativeAuth Tests + +parameters: +- name: msal_branch + displayName: MSAL Branch + type: string + default: 'spetrescu/custom_headers' +- name: firebaseDeviceId + displayName: Firebase Device Id + type: string + default: oriole +- name: firebaseDeviceAndroidVersion + displayName: Firebase Device Android Version + type: number + default: 33 + +stages: +# Build MSAL Automation App (Local flavor, no broker needed for NativeAuth tests) +- stage: 'msalautomationapp' + dependsOn: [] + displayName: Build MSAL Automation APKs + jobs: + - template: ./templates/build-msal-automation-app.yml + parameters: + brokerApp: AutoBroker + msalFlavor: Local + brokerSource: LocalApk + brokerUpdateSource: LocalApk + packageVariant: RC + nativeAuthConfigString: $(NATIVE_AUTH_CONFIG_STRING) + +# Build NativeAuth Sample App +- stage: 'nativeauthsampleapp' + dependsOn: [] + displayName: Build NativeAuth Sample App + jobs: + - template: ./templates/build-nativeauth-sample-app.yml + parameters: + packageVariant: RC + +# Run NativeAuth tests on Firebase +- stage: 'nativeauth_tests' + dependsOn: + - msalautomationapp + - nativeauthsampleapp + displayName: Running NativeAuth Tests (API ${{ parameters.firebaseDeviceAndroidVersion }}) + jobs: + - template: ./templates/flank/run-on-firebase-with-flank.yml + parameters: + automationAppApkPath: "$(Pipeline.Workspace)/msalautomationapks-AutoBroker-RC-LocalApk/$(msalApp)" + automationAppTestApkPath: "$(Pipeline.Workspace)/msalautomationapks-AutoBroker-RC-LocalApk/$(msalTestApp)" + testTargetPackages: "package com.microsoft.identity.client.msal.automationapp.testpass.msalonly.nativeauth" + resultsHistoryName: "$(resultsHistoryName)" + resultsDir: "nativeauth-tests-$(Build.BuildId)" + otherFiles: "/sdcard/NativeAuthSampleApp.apk=$(Pipeline.Workspace)/nativeauthsampleapk-RC/$(nativeAuthSampleApk),\ + /data/local/tmp/LabAuth.pfx=$(Build.SourcesDirectory)/LabAuth.pfx" + firebaseDeviceId: ${{ parameters.firebaseDeviceId }} + firebaseDeviceAndroidVersion: ${{ parameters.firebaseDeviceAndroidVersion }} + testRunTitle: "NativeAuth UI Automation (API ${{ parameters.firebaseDeviceAndroidVersion }}) # $(Build.BuildNumber)" + extraTarget: "" + flankShards: 1 diff --git a/azure-pipelines/ui-automation/templates/build-msal-automation-app.yml b/azure-pipelines/ui-automation/templates/build-msal-automation-app.yml index d857b8ae..b9ccac2e 100644 --- a/azure-pipelines/ui-automation/templates/build-msal-automation-app.yml +++ b/azure-pipelines/ui-automation/templates/build-msal-automation-app.yml @@ -42,6 +42,9 @@ parameters: - name: preInstallLtw type: boolean default: false + - name: nativeAuthConfigString + type: string + default: "" jobs: - job: msalautomationapp${{ parameters.packageVariant }}${{ parameters.msalFlavor }} @@ -66,6 +69,9 @@ jobs: targetType: inline script: | $assembleTask = "msalautomationapp:assemble${{ parameters.msalFlavor }}${{ parameters.brokerApp }}Debug -PlabSecret=$(LabAppCert) -PbrokerSource=${{ parameters.brokerSource }} -PbrokerUpdateSource=${{ parameters.brokerUpdateSource }}" + if ("${{ parameters.nativeAuthConfigString }}" -ne "") { + $assembleTask = $assembleTask + " -PnativeAuthConfigString=${{ parameters.nativeAuthConfigString }}" + } if (("${{ parameters.msalVersion }}" -ne "")) { $assembleTask = $assembleTask + " -PdistMsalVersion=" + "${{ parameters.msalVersion }}" } @@ -84,6 +90,9 @@ jobs: targetType: inline script: | $assembleTestTask = "msalautomationapp:assemble${{ parameters.msalFlavor }}${{ parameters.brokerApp }}DebugAndroidTest -PlabSecret=$(LabAppCert)" + if ("${{ parameters.nativeAuthConfigString }}" -ne "") { + $assembleTestTask = $assembleTestTask + " -PnativeAuthConfigString=${{ parameters.nativeAuthConfigString }}" + } if (("${{ parameters.msalVersion }}" -ne "")) { $assembleTestTask = $assembleTestTask + " -PdistMsalVersion=" + "${{ parameters.msalVersion }}" } diff --git a/azure-pipelines/ui-automation/templates/build-nativeauth-sample-app.yml b/azure-pipelines/ui-automation/templates/build-nativeauth-sample-app.yml new file mode 100644 index 00000000..a373410f --- /dev/null +++ b/azure-pipelines/ui-automation/templates/build-nativeauth-sample-app.yml @@ -0,0 +1,36 @@ +parameters: +- name: packageVariant + displayName: Package Variant + type: string + default: PROD + values: + - PROD + - RC + +jobs: +- job: nativeauthsampleapp${{ parameters.packageVariant }} + displayName: Build NativeAuth Sample App ${{ parameters.packageVariant }} + pool: + vmImage: ubuntu-latest + steps: + - checkout: self + clean: true + submodules: recursive + persistCredentials: True + - bash: | + echo "##vso[task.setvariable variable=ENV_VSTS_MVN_ANDROIDADACCOUNTS_ACCESSTOKEN]$(System.AccessToken)" + displayName: Set MVN Access Token in Environment + - task: Gradle@2 + displayName: 'Assemble NativeAuth Sample App' + inputs: + tasks: NativeAuthSample:clean NativeAuthSample:assembleDebug + publishJUnitResults: false + - task: CopyFiles@2 + displayName: 'Copy apks for later use in the pipeline' + inputs: + flattenFolders: true + contents: '$(Build.SourcesDirectory)/nativeauthsample/app/build/outputs/apk/**/*.apk' + targetFolder: '$(Build.ArtifactStagingDirectory)/nativeauthsample' + - publish: '$(Build.ArtifactStagingDirectory)/nativeauthsample' + displayName: 'Publish NativeAuth Sample APK' + artifact: nativeauthsampleapk-${{ upper(parameters.packageVariant) }}