mirror of
https://dev.azure.com/TeilRad/sharee.bike%20App/_git/Code
synced 2024-12-22 06:56:25 +01:00
Distribute Apps Separately
[skip ci]
This commit is contained in:
parent
8b460bfebf
commit
d23aff6daf
1 changed files with 721 additions and 0 deletions
721
azure-pipelines.yml
Normal file
721
azure-pipelines.yml
Normal file
|
@ -0,0 +1,721 @@
|
|||
# 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
|
Loading…
Reference in a new issue