Todo Sample CD #6
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Todo Sample CD | |
# Project templates come equipped with CI/CD for both Azure DevOps and GitHub, providing you with a hassle-free way to get started with your new project. It is important to note that you should not depend on the contents of this file. More info at https://bitplatform.dev/templates/dev-ops | |
env: | |
API_SERVER_ADDRESS: 'https://todo.bitplatform.dev/' | |
on: | |
workflow_dispatch: | |
push: | |
branches: [ "main" ] | |
permissions: | |
contents: read | |
jobs: | |
build_api_blazor: | |
name: build api + blazor | |
runs-on: ubuntu-22.04 | |
steps: | |
- name: Checkout source code | |
uses: actions/checkout@v3 | |
- name: Setup .NET | |
uses: actions/setup-dotnet@v3 | |
with: | |
global-json-file: src/Templates/Boilerplate/Bit.Boilerplate/global.json | |
- uses: actions/setup-node@v3 | |
with: | |
node-version: 18 | |
- name: Create project from Boilerplate | |
run: | | |
cd src/Templates/Boilerplate && dotnet build -c Release | |
dotnet pack -c Release -o . -p:ReleaseVersion=0.0.0 -p:PackageVersion=0.0.0 | |
dotnet new install Bit.Boilerplate.0.0.0.nupkg | |
cd ../../../ && dotnet new bit-bp --name TodoSample --database SqlServer --sample Todo | |
- name: Update appsettings.json api server address | |
uses: microsoft/variable-substitution@v1 | |
with: | |
files: 'TodoSample/src/Client/TodoSample.Client.Core/appsettings.json' | |
env: | |
ApiServerAddress: ${{ env.API_SERVER_ADDRESS }} | |
- name: Install wasm | |
run: cd src && dotnet workload install wasm-tools wasm-experimental | |
- name: Enable pre rendering | |
run: sed -i 's/public static readonly bool PrerenderEnabled = false;/public static readonly bool PrerenderEnabled = true;/g' TodoSample/src/Client/TodoSample.Client.Core/Services/AppRenderMode.cs | |
- name: Generate CSS/JS files | |
run: dotnet build TodoSample/src/Client/TodoSample.Client.Core/TodoSample.Client.Core.csproj -t:BeforeBuildTasks --no-restore | |
- name: Publish | |
run: dotnet publish TodoSample/src/TodoSample.Server/TodoSample.Server.csproj -c Release -p:PwaEnabled=true --self-contained -r linux-x64 -o ${{env.DOTNET_ROOT}}/server | |
- name: Upload server artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: server-bundle | |
path: ${{env.DOTNET_ROOT}}/server | |
deploy_api_blazor: | |
name: deploy api + blazor | |
needs: build_api_blazor | |
runs-on: ubuntu-22.04 | |
environment: | |
name: 'production' | |
url: ${{ steps.deploy-to-webapp.outputs.webapp-url }} | |
steps: | |
- name: Retrieve server bundle | |
uses: actions/download-artifact@v2 | |
with: | |
name: server-bundle | |
- name: Delete IdentityCertificate.pfx | |
run: | | |
rm IdentityCertificate.pfx | |
- name: Extract identity certificate from env | |
uses: timheuer/base64-to-file@v1 | |
with: | |
fileDir: './' | |
fileName: 'IdentityCertificate.pfx' | |
encodedString: ${{ secrets.API_IDENTITY_CERTIFICATE_FILE_BASE64 }} | |
- name: Deploy to Azure Web App | |
id: deploy-to-webapp | |
uses: azure/webapps-deploy@v2 | |
with: | |
app-name: 'bit-todo' | |
slot-name: 'production' | |
publish-profile: ${{ secrets.TODO_AZURE_APP_SERVICE_PUBLISH_PROFILE }} | |
package: . | |
- name: Purge cache | |
uses: jakejarvis/cloudflare-purge-action@master | |
env: | |
CLOUDFLARE_ZONE: ${{ secrets.BITPLATFORM_DEV_CLOUDFLARE_ZONE }} | |
CLOUDFLARE_TOKEN: ${{ secrets.CLOUDFLARE_TOKEN }} | |
build_blazor_hybrid_windows: | |
name: build blazor hybrid (windows) | |
runs-on: windows-2022 | |
steps: | |
- name: Checkout source code | |
uses: actions/checkout@v3 | |
- name: Setup .NET | |
uses: actions/setup-dotnet@v3 | |
with: | |
global-json-file: src/Templates/Boilerplate/Bit.Boilerplate/global.json | |
- uses: actions/setup-node@v3 | |
with: | |
node-version: 18 | |
- name: Create project from Boilerplate | |
run: | | |
cd src/Templates/Boilerplate && dotnet build -c Release | |
dotnet pack -c Release -o . -p:ReleaseVersion=0.0.0 -p:PackageVersion=0.0.0 | |
dotnet new install Bit.Boilerplate.0.0.0.nupkg | |
cd ../../../ && dotnet new bit-bp --name TodoSample --database SqlServer --sample Todo | |
- name: Update appsettings.json api server address | |
uses: microsoft/variable-substitution@v1 | |
with: | |
files: 'TodoSample/src/Client/TodoSample.Client.Core/appsettings.json' | |
env: | |
ApiServerAddress: ${{ env.API_SERVER_ADDRESS }} | |
- name: Install maui | |
run: cd src && dotnet workload install maui | |
- name: Generate CSS/JS files | |
run: dotnet build TodoSample/src/Client/TodoSample.Client.Core/TodoSample.Client.Core.csproj -t:BeforeBuildTasks --no-restore | |
- name: Build exe | |
run: dotnet build TodoSample/src/Client/TodoSample.Client.Maui/TodoSample.Client.Maui.csproj -c Release -p:WindowsPackageType=None -p:SelfContained=true -p:WindowsAppSDKSelfContained=true -p:GenerateAppxPackageOnBuild=false -p:RuntimeIdentifier=win10-x86 -p:ApplicationDisplayVersion="${{ vars.APPLICATION_DISPLAY_VERSION }}" -p:ApplicationVersion="${{ vars.APPLICATION_VERSION }}" -p:ApplicationTitle="TodoSample" -p:ApplicationId="com.bitplatform.Todo.Template" -p:UseRidGraph=true -f net8.0-windows10.0.19041.0 | |
- name: Upload artifact | |
uses: actions/upload-artifact@v2 | |
with: | |
name: win-exe-bundle | |
path: TodoSample/src/Client/TodoSample.Client.Maui/bin/release/net8.0-windows10.0.19041.0/win10-x86 | |
build_blazor_hybrid_android: | |
name: build blazor hybrid (android) | |
runs-on: ubuntu-22.04 | |
steps: | |
- name: Checkout source code | |
uses: actions/checkout@v3 | |
- name: Setup .NET | |
uses: actions/setup-dotnet@v3 | |
with: | |
global-json-file: src/Templates/Boilerplate/Bit.Boilerplate/global.json | |
- uses: actions/setup-node@v3 | |
with: | |
node-version: 18 | |
- name: Create project from Boilerplate | |
run: | | |
cd src/Templates/Boilerplate && dotnet build -c Release | |
dotnet pack -c Release -o . -p:ReleaseVersion=0.0.0 -p:PackageVersion=0.0.0 | |
dotnet new install Bit.Boilerplate.0.0.0.nupkg | |
cd ../../../ && dotnet new bit-bp --name TodoSample --database SqlServer --sample Todo | |
- name: Extract Android signing key from env | |
uses: timheuer/base64-to-file@v1 | |
with: | |
fileDir: './TodoSample/src/Client/TodoSample.Client.Maui/' | |
fileName: 'TodoSample.keystore' | |
encodedString: ${{ secrets.ANDROID_RELEASE_KEYSTORE_FILE_BASE64 }} | |
- name: Update appsettings.json api server address | |
uses: microsoft/variable-substitution@v1 | |
with: | |
files: 'TodoSample/src/Client/TodoSample.Client.Core/appsettings.json' | |
env: | |
ApiServerAddress: ${{ env.API_SERVER_ADDRESS }} | |
- name: Install maui | |
run: cd src && dotnet workload install maui-android | |
- name: Generate CSS/JS files | |
run: dotnet build TodoSample/src/Client/TodoSample.Client.Core/TodoSample.Client.Core.csproj -t:BeforeBuildTasks --no-restore | |
- name: Build aab | |
run: dotnet build TodoSample/src/Client/TodoSample.Client.Maui/TodoSample.Client.Maui.csproj -c Release -p:AndroidPackageFormat=aab -p:AndroidKeyStore=true -p:AndroidSigningKeyStore="TodoSample.keystore" -p:AndroidSigningKeyAlias=bitplatform -p:AndroidSigningKeyPass="${{ secrets.ANDROID_RELEASE_KEYSTORE_PASSWORD }}" -p:AndroidSigningStorePass="${{ secrets.ANDROID_RELEASE_SIGNING_PASSWORD }}" -p:ApplicationDisplayVersion="${{ vars.APPLICATION_DISPLAY_VERSION }}" -p:ApplicationVersion="${{ vars.APPLICATION_VERSION }}" -p:ApplicationTitle="TodoSample" -p:ApplicationId="com.bitplatform.Todo.Template" -f net8.0-android | |
- name: Upload artifact | |
uses: actions/upload-artifact@v2 | |
with: | |
name: android-bundle | |
path: TodoSample/src/Client/TodoSample.Client.Maui/bin/Release/net8.0-android/*-Signed.* | |
build_blazor_hybrid_maccatalyst: | |
name: build blazor hybrid (maccatalyst) | |
runs-on: macos-13 | |
steps: | |
- name: Checkout source code | |
uses: actions/checkout@v3 | |
- name: Setup .NET | |
uses: actions/setup-dotnet@v3 | |
with: | |
global-json-file: src/Templates/Boilerplate/Bit.Boilerplate/global.json | |
- uses: actions/setup-node@v3 | |
with: | |
node-version: 18 | |
- name: Create project from Boilerplate | |
run: | | |
cd src/Templates/Boilerplate && dotnet build -c Release | |
dotnet pack -c Release -o . -p:ReleaseVersion=0.0.0 -p:PackageVersion=0.0.0 | |
dotnet new install Bit.Boilerplate.0.0.0.nupkg | |
cd ../../../ && dotnet new bit-bp --name TodoSample --database SqlServer --sample Todo | |
- name: Update appsettings.json api server address | |
uses: microsoft/variable-substitution@v1 | |
with: | |
files: 'TodoSample/src/Client/TodoSample.Client.Core/appsettings.json' | |
env: | |
ApiServerAddress: ${{ env.API_SERVER_ADDRESS }} | |
- name: Install maui | |
run: cd src && dotnet workload install maui | |
- name: Generate CSS/JS files | |
run: dotnet build TodoSample/src/Client/TodoSample.Client.Core/TodoSample.Client.Core.csproj -t:BeforeBuildTasks --no-restore | |
- name: Build pkg | |
run: dotnet build TodoSample/src/Client/TodoSample.Client.Maui/TodoSample.Client.Maui.csproj -c Release -p:CreatePackage=true -p:ApplicationDisplayVersion="${{ vars.APPLICATION_DISPLAY_VERSION }}" -p:ApplicationVersion="${{ vars.APPLICATION_VERSION }}" -p:ApplicationTitle="TodoSample" -p:ApplicationId="com.bitplatform.Todo.Template" -f net8.0-maccatalyst | |
- name: Upload artifact | |
uses: actions/upload-artifact@v2 | |
with: | |
name: mac-pkg-bundle | |
path: TodoSample/src/Client/TodoSample.Client.Maui/bin/release/net8.0-maccatalyst/*.pkg | |
build_blazor_hybrid_ios: | |
name: build blazor hybrid (ios) | |
runs-on: macos-13 | |
steps: | |
- name: Checkout source code | |
uses: actions/checkout@v3 | |
- name: Setup .NET | |
uses: actions/setup-dotnet@v3 | |
with: | |
global-json-file: src/Templates/Boilerplate/Bit.Boilerplate/global.json | |
- uses: actions/setup-node@v3 | |
with: | |
node-version: 18 | |
- uses: maxim-lobanov/setup-xcode@v1 | |
with: | |
xcode-version: '15' | |
- name: Create project from Boilerplate | |
run: | | |
cd src/Templates/Boilerplate && dotnet build -c Release | |
dotnet pack -c Release -o . -p:ReleaseVersion=0.0.0 -p:PackageVersion=0.0.0 | |
dotnet new install Bit.Boilerplate.0.0.0.nupkg | |
cd ../../../ && dotnet new bit-bp --name TodoSample --database SqlServer --sample Todo | |
- name: Update appsettings.json api server address | |
uses: microsoft/variable-substitution@v1 | |
with: | |
files: 'TodoSample/src/Client/TodoSample.Client.Core/appsettings.json' | |
env: | |
ApiServerAddress: ${{ env.API_SERVER_ADDRESS }} | |
- name: Install maui | |
run: cd src && dotnet workload install maui | |
- name: Extract iOS code signing certificate from env | |
uses: timheuer/base64-to-file@v1 | |
with: | |
fileDir: './' | |
fileName: 'DistributionCert.p12' | |
encodedString: ${{ secrets.APPSTORE_CODE_SIGNING_CERTIFICATE_FILE_BASE64 }} | |
- name: Import Code-Signing Certificates | |
uses: Apple-Actions/import-codesign-certs@v1 | |
with: | |
p12-filepath: './DistributionCert.p12' | |
p12-password: ${{ secrets.APPSTORE_CODE_SIGNING_CERTIFICATE_FILE_PASSWORD }} | |
- name: Download Apple Provisioning Profiles | |
uses: Apple-Actions/download-provisioning-profiles@v1 | |
with: | |
bundle-id: 'com.bitplatform.Todo.Template' | |
issuer-id: ${{ secrets.APPSTORE_API_KEY_ISSUER_ID }} | |
api-key-id: ${{ secrets.APPSTORE_API_KEY_ID }} | |
api-private-key: ${{ secrets.APPSTORE_API_KEY_PRIVATE_KEY }} | |
- name: Generate CSS/JS files | |
run: dotnet build TodoSample/src/Client/TodoSample.Client.Core/TodoSample.Client.Core.csproj -t:BeforeBuildTasks --no-restore | |
- name: Build ipa | |
run: dotnet publish TodoSample/src/Client/TodoSample.Client.Maui/TodoSample.Client.Maui.csproj -p:RuntimeIdentifier=ios-arm64 -c Release -p:ArchiveOnBuild=true -p:CodesignKey="iPhone Distribution" -p:CodesignProvision="TodoTemplate" -p:ApplicationDisplayVersion="${{ vars.APPLICATION_DISPLAY_VERSION }}" -p:ApplicationVersion="${{ vars.APPLICATION_VERSION }}" -p:ApplicationTitle="Todo" -p:ApplicationId="com.bitplatform.Todo.Template" -f net8.0-ios | |
- name: Upload artifact | |
uses: actions/upload-artifact@v2 | |
with: | |
name: ios-bundle | |
path: TodoSample/src/Client/TodoSample.Client.Maui/bin/release/net8.0-ios/ios-arm64/publish/*.ipa |