mirror of
https://dev.azure.com/TeilRad/sharee.bike%20App/_git/Code
synced 2024-11-16 07:06:33 +01:00
722 lines
30 KiB
YAML
722 lines
30 KiB
YAML
|
# Processes all apps Lastenrad Bayern, sharee.bike and Mein konrad
|
||
|
# i,e,
|
||
|
# - builds apps
|
||
|
# - publishes apps to MS App Center
|
||
|
|
||
|
parameters:
|
||
|
- name: codeBase
|
||
|
displayName: Codebase
|
||
|
type: string
|
||
|
default: git://sharee.bike Buchungsplattform/Code@main
|
||
|
values:
|
||
|
- git://sharee.bike Buchungsplattform/Code@main
|
||
|
- git://sharee.bike Buchungsplattform/Code@develop
|
||
|
|
||
|
trigger:
|
||
|
- main
|
||
|
- develop
|
||
|
|
||
|
variables:
|
||
|
# General purpose variables.
|
||
|
buildConfiguration: 'Release'
|
||
|
outputDirectory: '$(build.binariesDirectory)/$(buildConfiguration)'
|
||
|
solutionName : 'TINK.sln'
|
||
|
|
||
|
# TeilRad GbmH related variables.
|
||
|
ownerNameTeilRad : 'TeilRad'
|
||
|
keyStoreFile : 'TeilRad.keystore'
|
||
|
ownerTeilRadFullName : '$(ownerNameTeilRad)-GmbH'
|
||
|
|
||
|
# HauffWare related variables.
|
||
|
ownerNameHauffWare : 'HauffWare'
|
||
|
keyStoreFileHauffWare : 'hauffware.keystore'
|
||
|
ownerHauffWareFullName : '$(ownerNameHauffWare)'
|
||
|
|
||
|
# Lastenrad Bayern related variales.
|
||
|
appNameLastenradBayern : 'LastenradBayern'
|
||
|
|
||
|
appProjectDroidLastenradBayern : '$(appNameLastenradBayern).Android.csproj'
|
||
|
appArtefactNameDroidLastenradBayern : 'com.$(ownerNameTeilRad).$(appNameLastenradBayern)-Signed.aab'
|
||
|
msAppCenterAppSlugLastenradBayernDroid : '$(appNameLastenradBayern)-1'
|
||
|
msAppCenterDistributionGroupIdLastenradBayernDroid : '088eb829-9030-424f-917f-3117dfff8a4b'
|
||
|
|
||
|
solutionNameIosLastenradBayern : 'LastenradBayern.sln'
|
||
|
appArtefactNameIosLastenradBayern : '$(appNameLastenradBayern).iOS.ipa'
|
||
|
msAppCenterAppSlugLastenradBayernIos : '$(appNameLastenradBayern)'
|
||
|
msAppCenterDistributionGroupIdLastenradBayernIos : 'b4d4cd32-1a79-40fa-a170-797e9a62a813'
|
||
|
|
||
|
# Sharee.bike related variables.
|
||
|
appNameShareeBike : 'sharee.bike'
|
||
|
appNameShareeBikeLegacy : 'TINK'
|
||
|
|
||
|
appProjectDroidShareeBike : '$(appNameShareeBikeLegacy).Android.csproj'
|
||
|
appArtefactNameDroidShareeBike : 'com.$(ownerNameHauffWare).sharee-Signed.aab'
|
||
|
msAppCenterAppSlugShareeBikeDroid : '$(appNameShareeBike)-1'
|
||
|
msAppCenterDistributionGroupIdShareeBikeDroid : '1f9f7deb-cd88-460a-bd64-29488121bb5f'
|
||
|
|
||
|
solutionNameIosShareeBike : 'ShareeBike.sln'
|
||
|
appArtefactNameIosShareeBike : '$(appNameShareeBikeLegacy).iOS.ipa'
|
||
|
msAppCenterAppSlugShareeBikeIos : '$(appNameShareeBike)'
|
||
|
msAppCenterDistributionGroupIdShareeBikeIos : 'd47dbf12-d7ec-4ef4-85f2-2bd6c249a2d9'
|
||
|
|
||
|
# Mein konrad related variables.
|
||
|
appNameMeinKonrad : 'Meinkonrad'
|
||
|
|
||
|
appProjectDroidMeinKonrad : '$(appNameMeinKonrad).Android.csproj'
|
||
|
appArtefactNameDroidMeinKonrad : 'com.$(ownerNameTeilRad).$(appNameMeinKonrad)-Signed.aab'
|
||
|
msAppCenterAppSlugMeinKonrad : 'Mein-konrad-1'
|
||
|
msAppCenterDistributionGroupIdMeinKonradDroid : 'e048d2f8-5b54-4a65-8c57-dd2df05269eb'
|
||
|
|
||
|
solutionNameIosMeinKonrad : 'MeinKonrad.sln'
|
||
|
appArtefactNameIosMeinKonrad : '$(appNameMeinKonrad).iOS.ipa'
|
||
|
msAppCenterAppSlugMeinKonradIos : 'Mein-konrad'
|
||
|
msAppCenterDistributionGroupIdMeinKonradIos : ' 40cf103b-2d13-477a-a75a-424045dfd00d'
|
||
|
|
||
|
stages:
|
||
|
- stage: RunUnitTestsStage
|
||
|
displayName: "Run unittests"
|
||
|
|
||
|
# Test require widows
|
||
|
pool:
|
||
|
vmImage: 'windows-latest'
|
||
|
|
||
|
jobs:
|
||
|
- job: RunUnittests
|
||
|
displayName: "Run Unit Tests"
|
||
|
|
||
|
steps:
|
||
|
# Get code from internal repo.
|
||
|
# https://docs.microsoft.com/en-us/azure/devops/pipelines/repos/multi-repo-checkout?view=azure-devops#specify-multiple-repositories
|
||
|
- checkout: ${{ parameters.codeBase}}
|
||
|
|
||
|
- task: DotNetCoreCLI@2
|
||
|
displayName: "Build TestLockItShared Unit Tests"
|
||
|
inputs:
|
||
|
command: 'build'
|
||
|
projects: '**/TestLockItShared.csproj'
|
||
|
configuration: '$(buildConfiguration)'
|
||
|
|
||
|
- task: DotNetCoreCLI@2
|
||
|
displayName: "Build TestLockItBLE Unit Tests"
|
||
|
inputs:
|
||
|
command: 'build'
|
||
|
projects: '**/TestLockItBLE.csproj'
|
||
|
configuration: '$(buildConfiguration)'
|
||
|
|
||
|
- task: DotNetCoreCLI@2
|
||
|
displayName: "Build TestShareeLib Unit Tests"
|
||
|
inputs:
|
||
|
command: 'build'
|
||
|
projects: '**/TestShareeLib.csproj'
|
||
|
configuration: '$(buildConfiguration)'
|
||
|
|
||
|
- task: DotNetCoreCLI@2
|
||
|
displayName: "Build TestShareeSharedGuiLib Unit Tests"
|
||
|
inputs:
|
||
|
command: 'build'
|
||
|
projects: '**/TestShareeSharedGuiLib.csproj'
|
||
|
configuration: '$(buildConfiguration)'
|
||
|
|
||
|
- task: DotNetCoreCLI@2
|
||
|
displayName: "Build TestSharee Unit Tests"
|
||
|
inputs:
|
||
|
command: 'build'
|
||
|
projects: '**/TestSharee.csproj'
|
||
|
configuration: '$(buildConfiguration)'
|
||
|
|
||
|
# Infos about test filters see
|
||
|
# https://docs.microsoft.com/en-us/previous-versions/jj155796(v=vs.140)?redirectedfrom=MSDN
|
||
|
- task: VSTest@2
|
||
|
displayName: "Run tests TestLockItShared"
|
||
|
inputs:
|
||
|
failOnMinTestsNotRun: true
|
||
|
minimumExpectedTests: 6
|
||
|
testSelector: 'testAssemblies'
|
||
|
testAssemblyVer2: |
|
||
|
**\TestLockItShared.dll
|
||
|
!**\obj\**
|
||
|
searchFolder: '$(System.DefaultWorkingDirectory)'
|
||
|
testFiltercriteria: 'TestCategory!=Explicit&TestCategory!=RequiresCOPRI&TestCategory!=RequiresCOPRI.Live&TestCategory!=RequiresCOPRI.Devel'
|
||
|
|
||
|
- task: VSTest@2
|
||
|
displayName: "Run tests TestLockItBLE"
|
||
|
inputs:
|
||
|
failOnMinTestsNotRun: true
|
||
|
minimumExpectedTests: 19
|
||
|
testSelector: 'testAssemblies'
|
||
|
testAssemblyVer2: |
|
||
|
**\TestLockItBLE.dll
|
||
|
!**\obj\**
|
||
|
searchFolder: '$(System.DefaultWorkingDirectory)'
|
||
|
testFiltercriteria: 'TestCategory!=Explicit&TestCategory!=RequiresCOPRI&TestCategory!=RequiresCOPRI.Live&TestCategory!=RequiresCOPRI.Devel'
|
||
|
|
||
|
# Infos about test filters see
|
||
|
# https://docs.microsoft.com/en-us/previous-versions/jj155796(v=vs.140)?redirectedfrom=MSDN
|
||
|
- task: VSTest@2
|
||
|
inputs:
|
||
|
testSelector: 'testAssemblies'
|
||
|
testAssemblyVer2: |
|
||
|
**\TestShareeLib.dll
|
||
|
!**\obj\**
|
||
|
searchFolder: '$(System.DefaultWorkingDirectory)'
|
||
|
testFiltercriteria: 'TestCategory!=Explicit&TestCategory!=RequiresCOPRI&TestCategory!=RequiresCOPRI.Live&TestCategory!=RequiresCOPRI.Devel'
|
||
|
|
||
|
- task: VSTest@2
|
||
|
displayName: "Run tests TestShareeSharedGuiLib"
|
||
|
inputs:
|
||
|
failOnMinTestsNotRun: true
|
||
|
minimumExpectedTests: 11
|
||
|
testSelector: 'testAssemblies'
|
||
|
testAssemblyVer2: |
|
||
|
**\TestShareeSharedGuiLib.dll
|
||
|
!**\obj\**
|
||
|
searchFolder: '$(System.DefaultWorkingDirectory)'
|
||
|
testFiltercriteria: 'TestCategory!=Explicit&TestCategory!=RequiresCOPRI&TestCategory!=RequiresCOPRI.Live&TestCategory!=RequiresCOPRI.Devel'
|
||
|
|
||
|
- task: VSTest@2
|
||
|
displayName: "Run tests Sharee"
|
||
|
inputs:
|
||
|
failOnMinTestsNotRun: false # there are not yet tests in project.
|
||
|
minimumExpectedTests: 1
|
||
|
testSelector: 'testAssemblies'
|
||
|
testAssemblyVer2: |
|
||
|
**\TestSharee.dll
|
||
|
!**\obj\**
|
||
|
searchFolder: '$(System.DefaultWorkingDirectory)'
|
||
|
testFiltercriteria: 'TestCategory!=Explicit&TestCategory!=RequiresCOPRI&TestCategory!=RequiresCOPRI.Live&TestCategory!=RequiresCOPRI.Devel'
|
||
|
|
||
|
- stage: BuildAppsDroidStage
|
||
|
displayName: "Build the Droid apps."
|
||
|
dependsOn: RunUnitTestsStage
|
||
|
|
||
|
# Droid versions can be build either on MacOS or Windows
|
||
|
pool:
|
||
|
vmImage: 'windows-latest'
|
||
|
|
||
|
jobs:
|
||
|
- job: BuildAppDroid
|
||
|
displayName: "Build droid version of apps."
|
||
|
|
||
|
steps:
|
||
|
# Get code from internal repo.
|
||
|
# https://docs.microsoft.com/en-us/azure/devops/pipelines/repos/multi-repo-checkout?view=azure-devops#specify-multiple-repositories
|
||
|
- checkout: ${{ parameters.codeBase}}
|
||
|
|
||
|
- task: NuGetToolInstaller@1
|
||
|
|
||
|
- task: NuGetCommand@2
|
||
|
inputs:
|
||
|
restoreSolution: '$(solutionName)'
|
||
|
|
||
|
# Set merchant-id.
|
||
|
- task: PowerShell@2
|
||
|
displayName: "Set secret merchant-id for Lastenrad Bayern."
|
||
|
inputs:
|
||
|
targetType: filePath
|
||
|
filePath: 'Set-MerchantId.ps1'
|
||
|
# Merchant id is defined by COPRI
|
||
|
arguments: "-appName '$(appNameLastenradBayern)' -merchantId $(merchantIdLastenradBayern)"
|
||
|
pwsh: true
|
||
|
workingDirectory: '$(build.SourcesDirectory)'
|
||
|
|
||
|
- task: PowerShell@2
|
||
|
displayName: "Set secret merchant-id for sharee.bike."
|
||
|
inputs:
|
||
|
targetType: filePath
|
||
|
filePath: 'Set-MerchantId.ps1'
|
||
|
# Merchant id is defined by COPRI
|
||
|
arguments: "-appName '$(appNameShareeBikeLegacy)' -merchantId $(merchantIdShareeBike)"
|
||
|
pwsh: true
|
||
|
workingDirectory: '$(build.SourcesDirectory)'
|
||
|
|
||
|
- task: PowerShell@2
|
||
|
displayName: "Set secret merchant-id for Mein konrad."
|
||
|
inputs:
|
||
|
targetType: filePath
|
||
|
filePath: 'Set-MerchantId.ps1'
|
||
|
# Merchant id is defined by COPRI
|
||
|
arguments: "-appName '$(appNameMeinKonrad)' -merchantId $(merchantIdMeinkonrad)"
|
||
|
pwsh: true
|
||
|
workingDirectory: '$(build.SourcesDirectory)'
|
||
|
|
||
|
# Set google maps api key
|
||
|
- task: PowerShell@2
|
||
|
displayName: "Set secret Google Maps api-keys for Lastenrad Bayern."
|
||
|
inputs:
|
||
|
targetType: filePath
|
||
|
filePath: 'Set-GMapsApiKey.ps1'
|
||
|
# Parameter droidApiKey value should be GMapsDroidApiKey2TeilRad not GMapsDroidApiKeyTeilRad but the restricted version of key leads to a grayed google maps
|
||
|
arguments: "-appName '$(appNameLastenradBayern)' -droidApiKey $(GMapsDroidApiKeyTeilRad) -iOsApiKey $(GMapsIosApiKey2TeilRad)"
|
||
|
pwsh: true
|
||
|
workingDirectory: '$(build.SourcesDirectory)'
|
||
|
|
||
|
- task: PowerShell@2
|
||
|
displayName: "Set secret Google Maps api-keys for sharee.bike."
|
||
|
inputs:
|
||
|
targetType: filePath
|
||
|
filePath: 'Set-GMapsApiKey.ps1'
|
||
|
# Parameter droidApiKey value should be GMapsDroidApiKey2TeilRad not GMapsDroidApiKeyTeilRad but the restricted version of key leads to a grayed google maps
|
||
|
arguments: "-appName '$(appNameShareeBikeLegacy)' -droidApiKey $(GMapsDroidApiKeyTeilRad) -iOsApiKey $(GMapsIosApiKey2TeilRad)"
|
||
|
pwsh: true
|
||
|
workingDirectory: '$(build.SourcesDirectory)'
|
||
|
|
||
|
- task: PowerShell@2
|
||
|
displayName: "Set secret Google Maps api-keys for Mein konrad."
|
||
|
inputs:
|
||
|
targetType: filePath
|
||
|
filePath: 'Set-GMapsApiKey.ps1'
|
||
|
# Parameter droidApiKey value should be GMapsDroidApiKey2TeilRad not GMapsDroidApiKeyTeilRad but the restricted version of key leads to a grayed google maps
|
||
|
arguments: "-appName '$(appNameMeinKonrad)' -droidApiKey $(GMapsDroidApiKeyTeilRad) -iOsApiKey $(GMapsIosApiKey2TeilRad)"
|
||
|
pwsh: true
|
||
|
workingDirectory: '$(build.SourcesDirectory)'
|
||
|
|
||
|
# Download keystore file for singning.
|
||
|
- task: DownloadSecureFile@1
|
||
|
displayName: "Download TeilRad GmbH secret keystore file."
|
||
|
name: TeilRadKeystoreFile
|
||
|
inputs:
|
||
|
secureFile: '$(keyStoreFile)'
|
||
|
|
||
|
- task: DownloadSecureFile@1
|
||
|
displayName: "Download HauffWare secret keystore file."
|
||
|
name: HauffWareKeystoreFile
|
||
|
inputs:
|
||
|
secureFile: '$(keyStoreFileHauffWare)'
|
||
|
|
||
|
# Build the apps
|
||
|
- task: XamarinAndroid@1
|
||
|
displayName: "Build Lastenrad Bayern."
|
||
|
inputs:
|
||
|
projectFile: '**/$(appProjectDroidLastenradBayern)'
|
||
|
outputDirectory: '$(outputDirectory)'
|
||
|
configuration: '$(buildConfiguration)'
|
||
|
# Password keystorePasswordTeilRad and alias keystoreNameTeilRad can be found in KeePassXC database PasswörterApp.kdbx, entry with title "Android Keystore TeilRad GmbH (App-Signing)"
|
||
|
msbuildArguments: '-restore -t:SignAndroidPackage -p:AndroidPackageFormat=aab -p:AndroidKeyStore=True -p:AndroidSigningKeyStore=$(TeilRadKeystoreFile.secureFilePath) -p:AndroidSigningStorePass=$(keystorePasswordTeilRad) -p:AndroidSigningKeyAlias=$(keystoreNameTeilRad) -p:AndroidSigningKeyPass=$(keystorePasswordTeilRad)'
|
||
|
|
||
|
- task: XamarinAndroid@1
|
||
|
displayName: "Build sharee.bike."
|
||
|
inputs:
|
||
|
projectFile: '**/$(appProjectDroidShareeBike)'
|
||
|
outputDirectory: '$(outputDirectory)'
|
||
|
configuration: '$(buildConfiguration)'
|
||
|
# Password keystorePasswordHauffWare and alias keystoreNameHauffWare can be found in KeePassXC database PasswörterApp.kdbx, entry with title "Android Keystore HauffWare (App-Signing)"
|
||
|
msbuildArguments: '-restore -t:SignAndroidPackage -p:AndroidPackageFormat=aab -p:AndroidKeyStore=True -p:AndroidSigningKeyStore=$(HauffWareKeystoreFile.secureFilePath) -p:AndroidSigningStorePass=$(keystorePasswordHauffWare) -p:AndroidSigningKeyAlias=$(keystoreNameHauffWare) -p:AndroidSigningKeyPass=$(keystorePasswordHauffWare)'
|
||
|
|
||
|
- task: XamarinAndroid@1
|
||
|
displayName: "Build Mein konrad."
|
||
|
inputs:
|
||
|
projectFile: '**/$(appProjectDroidMeinKonrad)'
|
||
|
outputDirectory: '$(outputDirectory)'
|
||
|
configuration: '$(buildConfiguration)'
|
||
|
# Password keystorePasswordTeilRad and alias keystoreNameTeilRad can be found in KeePassXC database PasswörterApp.kdbx, entry with title "Android Keystore TeilRad GmbH (App-Signing)"
|
||
|
msbuildArguments: '-restore -t:SignAndroidPackage -p:AndroidPackageFormat=aab -p:AndroidKeyStore=True -p:AndroidSigningKeyStore=$(TeilRadKeystoreFile.secureFilePath) -p:AndroidSigningStorePass=$(keystorePasswordTeilRad) -p:AndroidSigningKeyAlias=$(keystoreNameTeilRad) -p:AndroidSigningKeyPass=$(keystorePasswordTeilRad)'
|
||
|
|
||
|
# Publish siged apk as pipeline artifact
|
||
|
- task: PublishPipelineArtifact@1
|
||
|
displayName: "Publish Lastenrad Bayern aab as artifact to azure library."
|
||
|
inputs:
|
||
|
targetPath: '$(outputDirectory)/$(appArtefactNameDroidLastenradBayern)'
|
||
|
artifactName: LastenradBayernAndroidAab
|
||
|
|
||
|
# Publish siged apk as pipeline artifact
|
||
|
- task: PublishPipelineArtifact@1
|
||
|
displayName: "Publish sharee.bike aab as artifact to azure library."
|
||
|
inputs:
|
||
|
targetPath: '$(outputDirectory)/$(appArtefactNameDroidShareeBike)'
|
||
|
artifactName: ShareeBikeAndroidAab
|
||
|
|
||
|
# Publish siged apk as pipeline artifact
|
||
|
- task: PublishPipelineArtifact@1
|
||
|
displayName: "Publish Mein konrad aab as artifact to azure library."
|
||
|
inputs:
|
||
|
targetPath: '$(outputDirectory)/$(appArtefactNameDroidMeinKonrad)'
|
||
|
artifactName: MeinKonradAndroidAab
|
||
|
|
||
|
- stage: BuildLastenradBayernIosStage
|
||
|
displayName: "Build Lastenrad Bayern iOS."
|
||
|
dependsOn: RunUnitTestsStage
|
||
|
|
||
|
# Build iOS version requires MacOS
|
||
|
pool:
|
||
|
vmImage: 'macos-12'
|
||
|
|
||
|
jobs:
|
||
|
|
||
|
- job: BuildLastenradBayernIos
|
||
|
displayName: "Build Lastenrad Bayern iOs"
|
||
|
|
||
|
steps:
|
||
|
# To manually select a Xamarin SDK version on the Microsoft-hosted macOS agent,
|
||
|
# configure this task with the *Mono* version that is associated with the
|
||
|
# Xamarin SDK version that you need, and set the "enabled" property to true.
|
||
|
# See https://go.microsoft.com/fwlink/?linkid=871629
|
||
|
- script: sudo $AGENT_HOMEDIRECTORY/scripts/select-xamarin-sdk.sh 5_12_0
|
||
|
displayName: 'Select the Xamarin SDK version'
|
||
|
enabled: false
|
||
|
|
||
|
# Get code from Open Source repo.
|
||
|
# https://docs.microsoft.com/en-us/azure/devops/pipelines/repos/multi-repo-checkout?view=azure-devops#specify-multiple-repositories
|
||
|
- checkout: ${{ parameters.codeBase}}
|
||
|
|
||
|
- task: NuGetToolInstaller@1
|
||
|
|
||
|
- task: NuGetCommand@2
|
||
|
inputs:
|
||
|
restoreSolution: '**/$(solutionNameIosLastenradBayern)'
|
||
|
|
||
|
# Install signing certificate to keychain
|
||
|
# Certificate resides in "Code Signing Certificate for Distribution TeilRad GmbH (LXJD6URCHR)"
|
||
|
- task: InstallAppleCertificate@2
|
||
|
inputs:
|
||
|
certSecureFile: 'AppleDistributionCertificate_TeilRadGmbH_LXJD6URCHR_20221008.p12'
|
||
|
certPwd: '$(AppleDistributionCertificate_TeilRadGmbh_Password)'
|
||
|
keychain: 'temp'
|
||
|
|
||
|
# Install provisioning profile
|
||
|
- task: InstallAppleProvisioningProfile@1
|
||
|
inputs:
|
||
|
provisioningProfileLocation: 'secureFiles'
|
||
|
provProfileSecureFile: 'ProvisioningProfileLastenradBayernAppStore3.mobileprovision'
|
||
|
|
||
|
# Set merchant-id.
|
||
|
- task: PowerShell@2
|
||
|
displayName: "Set secret merchant-id."
|
||
|
inputs:
|
||
|
targetType: filePath
|
||
|
filePath: 'Set-MerchantId.ps1'
|
||
|
# Merchant id is defined by COPRI
|
||
|
arguments: "-appName '$(appNameLastenradBayern)' -merchantId $(merchantIdLastenradBayern)"
|
||
|
pwsh: true
|
||
|
workingDirectory: '$(build.SourcesDirectory)'
|
||
|
|
||
|
# Set google maps api key
|
||
|
- task: PowerShell@2
|
||
|
displayName: "Set secret Google Maps api-keys."
|
||
|
inputs:
|
||
|
targetType: filePath
|
||
|
filePath: 'Set-GMapsApiKey.ps1'
|
||
|
arguments: "-appName '$(appNameLastenradBayern)' -droidApiKey $(GMapsDroidApiKeyTeilRad) -iOsApiKey $(GMapsIosApiKey2TeilRad)"
|
||
|
pwsh: true
|
||
|
workingDirectory: '$(build.SourcesDirectory)'
|
||
|
|
||
|
# Build the app
|
||
|
- task: XamariniOS@2
|
||
|
inputs:
|
||
|
solutionFile: '**/$(solutionNameIosLastenradBayern)'
|
||
|
configuration: '$(buildConfiguration)'
|
||
|
packageApp: true
|
||
|
buildForSimulator: false
|
||
|
runNugetRestore: false
|
||
|
signingIdentity: '$(APPLE_CERTIFICATE_SIGNING_IDENTITY)'
|
||
|
signingProvisioningProfileID: '$(APPLE_PROV_PROFILE_UUID)'
|
||
|
|
||
|
# Publish siged apk as pipeline artifact
|
||
|
- task: PublishPipelineArtifact@1
|
||
|
displayName: "Publish ipa as artifact."
|
||
|
inputs:
|
||
|
targetPath: '$(appNameLastenradBayern)/TINK.iOS/bin/iPhone/$(buildConfiguration)/$(appArtefactNameIosLastenradBayern)'
|
||
|
artifactName: LastenradBayernIpa
|
||
|
|
||
|
- stage: BuildShareeBikeIosStage
|
||
|
displayName: "Build sharee.bike iOS app"
|
||
|
dependsOn: RunUnitTestsStage
|
||
|
|
||
|
# Build iOS version requires MacOS
|
||
|
pool:
|
||
|
vmImage: 'macos-12'
|
||
|
|
||
|
jobs:
|
||
|
|
||
|
- job: BuildShareeBikeIos
|
||
|
displayName: "Build sharee.bike iOs"
|
||
|
|
||
|
steps:
|
||
|
# To manually select a Xamarin SDK version on the Microsoft-hosted macOS agent,
|
||
|
# configure this task with the *Mono* version that is associated with the
|
||
|
# Xamarin SDK version that you need, and set the "enabled" property to true.
|
||
|
# See https://go.microsoft.com/fwlink/?linkid=871629
|
||
|
- script: sudo $AGENT_HOMEDIRECTORY/scripts/select-xamarin-sdk.sh 5_12_0
|
||
|
displayName: 'Select the Xamarin SDK version'
|
||
|
enabled: false
|
||
|
|
||
|
# Get code from Open Source repo.
|
||
|
# https://docs.microsoft.com/en-us/azure/devops/pipelines/repos/multi-repo-checkout?view=azure-devops#specify-multiple-repositories
|
||
|
- checkout: ${{ parameters.codeBase}}
|
||
|
|
||
|
- task: NuGetToolInstaller@1
|
||
|
|
||
|
- task: NuGetCommand@2
|
||
|
inputs:
|
||
|
restoreSolution: '**/$(solutionNameIosShareeBike)'
|
||
|
|
||
|
# Install signing certificate to keychain
|
||
|
# Certificate resides in "App-Mittagessen", entry "Code Signing Certificate for Distribution TeilRad GmbH (LXJD6URCHR)"
|
||
|
- task: InstallAppleCertificate@2
|
||
|
inputs:
|
||
|
certSecureFile: 'AppleDistributionCertificate_TeilRadGmbH_LXJD6URCHR_20221008.p12'
|
||
|
certPwd: '$(AppleDistributionCertificate_TeilRadGmbh_Password)'
|
||
|
keychain: 'temp'
|
||
|
|
||
|
# Install provisioning profile
|
||
|
- task: InstallAppleProvisioningProfile@1
|
||
|
inputs:
|
||
|
provisioningProfileLocation: 'secureFiles'
|
||
|
provProfileSecureFile: 'ProvisioningProfileTeilRadShareeBikeAppStore3.mobileprovision'
|
||
|
|
||
|
# Set merchant-id.
|
||
|
- task: PowerShell@2
|
||
|
displayName: "Set secret merchant-id."
|
||
|
inputs:
|
||
|
targetType: filePath
|
||
|
filePath: 'Set-MerchantId.ps1'
|
||
|
# Merchant id is defined by COPRI
|
||
|
arguments: "-appName '$(appNameShareeBikeLegacy)' -merchantId $(merchantIdShareeBike)"
|
||
|
pwsh: true
|
||
|
workingDirectory: '$(build.SourcesDirectory)'
|
||
|
|
||
|
# Set google maps api key
|
||
|
- task: PowerShell@2
|
||
|
displayName: "Set secret Google Maps api-keys."
|
||
|
inputs:
|
||
|
targetType: filePath
|
||
|
filePath: 'Set-GMapsApiKey.ps1'
|
||
|
arguments: "-appName '$(appNameShareeBikeLegacy)' -droidApiKey $(GMapsDroidApiKeyTeilRad) -iOsApiKey $(GMapsIosApiKey2TeilRad)"
|
||
|
pwsh: true
|
||
|
workingDirectory: '$(build.SourcesDirectory)'
|
||
|
|
||
|
# Build the app
|
||
|
- task: XamariniOS@2
|
||
|
inputs:
|
||
|
solutionFile: '**/$(solutionNameIosShareeBike)'
|
||
|
configuration: '$(buildConfiguration)'
|
||
|
packageApp: true
|
||
|
buildForSimulator: false
|
||
|
runNugetRestore: false
|
||
|
signingIdentity: '$(APPLE_CERTIFICATE_SIGNING_IDENTITY)'
|
||
|
signingProvisioningProfileID: '$(APPLE_PROV_PROFILE_UUID)'
|
||
|
|
||
|
# Publish siged apk as pipeline artifact
|
||
|
- task: PublishPipelineArtifact@1
|
||
|
displayName: "Publish sharee.bike ipa as artifact."
|
||
|
inputs:
|
||
|
targetPath: '$(appNameShareeBikeLegacy)/TINK.iOS/bin/iPhone/$(buildConfiguration)/$(appArtefactNameIosShareeBike)'
|
||
|
artifactName: ShareeBikeIpa
|
||
|
|
||
|
- stage: BuildMeinKonradIosStage
|
||
|
displayName: "Build Mein konrad iOS app"
|
||
|
dependsOn: RunUnitTestsStage
|
||
|
|
||
|
# Build iOS version requires MacOS
|
||
|
pool:
|
||
|
vmImage: 'macos-12'
|
||
|
|
||
|
jobs:
|
||
|
|
||
|
- job: appNameMeinKonradBuildMeinKonradIos
|
||
|
displayName: "Build Mein konrad iOs"
|
||
|
|
||
|
steps:
|
||
|
# To manually select a Xamarin SDK version on the Microsoft-hosted macOS agent,
|
||
|
# configure this task with the *Mono* version that is associated with the
|
||
|
# Xamarin SDK version that you need, and set the "enabled" property to true.
|
||
|
# See https://go.microsoft.com/fwlink/?linkid=871629
|
||
|
- script: sudo $AGENT_HOMEDIRECTORY/scripts/select-xamarin-sdk.sh 5_12_0
|
||
|
displayName: 'Select the Xamarin SDK version'
|
||
|
enabled: false
|
||
|
|
||
|
# Get code from Open Source repo.
|
||
|
# https://docs.microsoft.com/en-us/azure/devops/pipelines/repos/multi-repo-checkout?view=azure-devops#specify-multiple-repositories
|
||
|
- checkout: ${{ parameters.codeBase}}
|
||
|
|
||
|
- task: NuGetToolInstaller@1
|
||
|
|
||
|
- task: NuGetCommand@2
|
||
|
inputs:
|
||
|
restoreSolution: '**/$(solutionNameIosMeinKonrad)'
|
||
|
|
||
|
# Install signing certificate to keychain
|
||
|
# Certificate resides in "App-Mittagessen", entry "Code Signing Certificate for iPhone Distribution Stadtwerke Konstanz GmbH (2SZR625MSV)"
|
||
|
- task: InstallAppleCertificate@2
|
||
|
inputs:
|
||
|
certSecureFile: 'Code Signing Certificate for iPhone Distribution Stadtwerke Konstanz GmbH 2SZR625MSV.p12'
|
||
|
certPwd: '$(AppleDevelopmentCertificatePassword)'
|
||
|
keychain: 'temp'
|
||
|
|
||
|
# Install provisioning profile
|
||
|
- task: InstallAppleProvisioningProfile@1
|
||
|
inputs:
|
||
|
provisioningProfileLocation: 'secureFiles'
|
||
|
provProfileSecureFile: 'Meinkonrad_to_App_Store_3.mobileprovision'
|
||
|
|
||
|
# Set merchant-id.
|
||
|
- task: PowerShell@2
|
||
|
displayName: "Set secret merchant-id."
|
||
|
inputs:
|
||
|
targetType: filePath
|
||
|
filePath: 'Set-MerchantId.ps1'
|
||
|
# Merchant id is defined by COPRI
|
||
|
arguments: "-appName '$(appNameMeinKonrad)' -merchantId $(merchantIdMeinKonrad)"
|
||
|
pwsh: true
|
||
|
workingDirectory: '$(build.SourcesDirectory)'
|
||
|
|
||
|
# Set google maps api key
|
||
|
- task: PowerShell@2
|
||
|
displayName: "Set secret Google Maps api-keys."
|
||
|
inputs:
|
||
|
targetType: filePath
|
||
|
filePath: 'Set-GMapsApiKey.ps1'
|
||
|
arguments: "-appName '$(appNameMeinKonrad)' -droidApiKey $(GMapsDroidApiKeyTeilRad) -iOsApiKey $(GMapsIosApiKey2TeilRad)"
|
||
|
pwsh: true
|
||
|
workingDirectory: '$(build.SourcesDirectory)'
|
||
|
|
||
|
# Build the app
|
||
|
- task: XamariniOS@2
|
||
|
inputs:
|
||
|
solutionFile: '**/$(solutionNameIosMeinKonrad)'
|
||
|
configuration: '$(buildConfiguration)'
|
||
|
packageApp: true
|
||
|
buildForSimulator: false
|
||
|
runNugetRestore: false
|
||
|
signingIdentity: '$(APPLE_CERTIFICATE_SIGNING_IDENTITY)'
|
||
|
signingProvisioningProfileID: '$(APPLE_PROV_PROFILE_UUID)'
|
||
|
|
||
|
# Publish siged apk as pipeline artifact
|
||
|
- task: PublishPipelineArtifact@1
|
||
|
displayName: "Publish Mein Konrad ipa as artifact to azure library."
|
||
|
inputs:
|
||
|
# Path '$(outputDirectory)/$(appArtefactNameIosMeinKonrad)' is not valid
|
||
|
targetPath: '$(appNameMeinKonrad)/TINK.iOS/bin/iPhone/$(buildConfiguration)/$(appArtefactNameIosMeinKonrad)'
|
||
|
artifactName: MeinKonradIpa
|
||
|
|
||
|
- stage: BetaVersion
|
||
|
# Distribute only of all app could be build successfully.
|
||
|
dependsOn:
|
||
|
- BuildAppsDroidStage
|
||
|
- BuildLastenradBayernIosStage
|
||
|
- BuildShareeBikeIosStage
|
||
|
- BuildMeinKonradIosStage
|
||
|
displayName: "Publish all apps to MS App Center"
|
||
|
|
||
|
# Distribution to MS App center can be on MacOS or Windows.
|
||
|
pool:
|
||
|
vmImage: 'windows-latest'
|
||
|
|
||
|
jobs:
|
||
|
- job: AndroidBeta
|
||
|
displayName: "Publish all apps to MS App Center"
|
||
|
steps:
|
||
|
|
||
|
# Download apk from pipeline artifacs
|
||
|
- task: DownloadPipelineArtifact@2
|
||
|
displayName: "Download Lastenrad Bayern Droid artifact form azure library."
|
||
|
inputs:
|
||
|
artifact: LastenradBayernAndroidAab
|
||
|
|
||
|
- task: DownloadPipelineArtifact@2
|
||
|
displayName: "Download Lastenrad Bayern iOS artifact form azure library."
|
||
|
inputs:
|
||
|
artifact: LastenradBayernIpa
|
||
|
|
||
|
- task: DownloadPipelineArtifact@2
|
||
|
displayName: "Download sharee.bike Droid artifact form azure library."
|
||
|
inputs:
|
||
|
artifact: ShareeBikeAndroidAab
|
||
|
|
||
|
- task: DownloadPipelineArtifact@2
|
||
|
displayName: "Download sharee.bike iOS artifact form azure library."
|
||
|
inputs:
|
||
|
artifact: ShareeBikeIpa
|
||
|
|
||
|
- task: DownloadPipelineArtifact@2
|
||
|
displayName: "Download Mein konrad Droid artifact form azure library."
|
||
|
inputs:
|
||
|
artifact: MeinKonradAndroidAab
|
||
|
|
||
|
- task: DownloadPipelineArtifact@2
|
||
|
displayName: "Download Mein konrad iOS artifact form azure library."
|
||
|
inputs:
|
||
|
artifact: MeinKonradIpa
|
||
|
|
||
|
# Checkout release notes: They are required for publishing to app center.
|
||
|
- checkout: ${{ parameters.codeBase}}
|
||
|
|
||
|
# Publish singed apk to app center.
|
||
|
- task: AppCenterDistribute@3
|
||
|
displayName: "Publish Lastenrad Bayern Droid to MS App Center."
|
||
|
inputs:
|
||
|
serverEndpoint: 'App Center'
|
||
|
appSlug: '$(ownerTeilRadFullName)/$(msAppCenterAppSlugLastenradBayernDroid)'
|
||
|
appFile: '$(Pipeline.Workspace)/$(appArtefactNameDroidLastenradBayern)'
|
||
|
releaseNotesOption: 'file'
|
||
|
releaseNotesFile: 'ReleaseNotes.txt'
|
||
|
destinationType: 'groups'
|
||
|
distributionGroupId: '$(msAppCenterDistributionGroupIdLastenradBayernDroid)'
|
||
|
|
||
|
- task: AppCenterDistribute@3
|
||
|
displayName: "Publish Lastenrad Bayern iOS to MS App Center."
|
||
|
inputs:
|
||
|
serverEndpoint: 'App Center'
|
||
|
appSlug: '$(ownerTeilRadFullName)/$(msAppCenterAppSlugLastenradBayernIos)'
|
||
|
appFile: '$(Pipeline.Workspace)/$(appArtefactNameIosLastenradBayern)'
|
||
|
releaseNotesOption: 'file'
|
||
|
releaseNotesFile: 'ReleaseNotes.txt'
|
||
|
destinationType: 'groups'
|
||
|
distributionGroupId: '$(msAppCenterDistributionGroupIdLastenradBayernIos)'
|
||
|
|
||
|
- task: PublishPipelineArtifact@1
|
||
|
inputs:
|
||
|
targetPath: '$(appNameLastenradBayern)/TINK.iOS/Entitlements.plist'
|
||
|
artifactName: EntitlementsLastenradBayern
|
||
|
|
||
|
- task: AppCenterDistribute@3
|
||
|
displayName: "Publish sharee.bike Droid to MS App Center."
|
||
|
inputs:
|
||
|
serverEndpoint: 'App Center'
|
||
|
appSlug: '$(ownerHauffWareFullName)/$(msAppCenterAppSlugShareeBikeDroid)'
|
||
|
appFile: '$(Pipeline.Workspace)/$(appArtefactNameDroidShareeBike)'
|
||
|
releaseNotesOption: 'file'
|
||
|
releaseNotesFile: 'ReleaseNotes.txt'
|
||
|
destinationType: 'groups'
|
||
|
distributionGroupId: '$(msAppCenterDistributionGroupIdShareeBikeDroid)'
|
||
|
|
||
|
- task: AppCenterDistribute@3
|
||
|
displayName: "Publish sharee.bike iOS to MS App Center."
|
||
|
inputs:
|
||
|
serverEndpoint: 'App Center'
|
||
|
appSlug: '$(ownerTeilRadFullName)/$(msAppCenterAppSlugShareeBikeIos)'
|
||
|
appFile: '$(Pipeline.Workspace)/$(appArtefactNameIosShareeBike)'
|
||
|
releaseNotesOption: 'file'
|
||
|
releaseNotesFile: 'ReleaseNotes.txt'
|
||
|
destinationType: 'groups'
|
||
|
distributionGroupId: '$(msAppCenterDistributionGroupIdShareeBikeIos)'
|
||
|
- task: PublishPipelineArtifact@1
|
||
|
inputs:
|
||
|
targetPath: '$(appNameShareeBikeLegacy)/TINK.iOS/Entitlements.plist'
|
||
|
artifactName: EntitlementsShareeBike
|
||
|
|
||
|
- task: AppCenterDistribute@3
|
||
|
displayName: "Publish Mein konrad Droid to MS App Center."
|
||
|
inputs:
|
||
|
serverEndpoint: 'App Center'
|
||
|
appSlug: '$(ownerTeilRadFullName)/$(msAppCenterAppSlugMeinKonrad)'
|
||
|
appFile: '$(Pipeline.Workspace)/$(appArtefactNameDroidMeinKonrad)'
|
||
|
releaseNotesOption: 'file'
|
||
|
releaseNotesFile: 'ReleaseNotes.txt'
|
||
|
destinationType: 'groups'
|
||
|
distributionGroupId: '$(msAppCenterDistributionGroupIdMeinKonradDroid)'
|
||
|
|
||
|
- task: AppCenterDistribute@3
|
||
|
displayName: "Publish Mein konrad iOS to MS App Center."
|
||
|
inputs:
|
||
|
serverEndpoint: 'App Center'
|
||
|
appSlug: '$(ownerTeilRadFullName)/$(msAppCenterAppSlugMeinKonradIos)'
|
||
|
appFile: '$(Pipeline.Workspace)/$(appArtefactNameIosMeinKonrad)'
|
||
|
releaseNotesOption: 'file'
|
||
|
releaseNotesFile: 'ReleaseNotes.txt'
|
||
|
destinationType: 'groups'
|
||
|
distributionGroupId: '$(msAppCenterDistributionGroupIdMeinKonradIos)'
|
||
|
- task: PublishPipelineArtifact@1
|
||
|
inputs:
|
||
|
targetPath: '$(appNameMeinKonrad)/TINK.iOS/Entitlements.plist'
|
||
|
artifactName: EntitlementsMeinKonrad
|