Skip to content

Blazor UI Demo CD

Blazor UI Demo CD #267

name: Blazor UI Demo CD
env:
SERVER_ADDRESS: 'https://blazorui.bitplatform.dev/api/'
APP_SERVICE_NAME: 'bit-components'
on:
workflow_dispatch:
push:
branches: [ "main" ]
permissions:
contents: read
jobs:
build_api_blazor:
name: build api + blazor web
runs-on: ubuntu-24.04
steps:
- name: Checkout source code
uses: actions/checkout@v4
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
global-json-file: src/global.json
- name: Update appsettings.json api server address
uses: devops-actions/variable-substitution@v1.2
with:
files: 'src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/appsettings.json'
env:
ApiServerAddress: ${{ env.SERVER_ADDRESS }}
- uses: actions/setup-node@v4
with:
node-version: 22
- name: Install wasm
run: cd src && dotnet workload install wasm-tools
- name: Enable pre rendering
run: sed -i 's/public static readonly bool PrerenderEnabled = false;/public static readonly bool PrerenderEnabled = true;/g' src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Services/AppRenderMode.cs
- name: Generate CSS/JS files
run: dotnet build src/BlazorUI/Demo/Bit.BlazorUI.Demo.Server/Bit.BlazorUI.Demo.Server.csproj -p:Version="${{ vars.APPLICATION_DISPLAY_VERSION}}" -c Release
- name: Publish
run: dotnet publish src/BlazorUI/Demo/Bit.BlazorUI.Demo.Server/Bit.BlazorUI.Demo.Server.csproj -c Release -p:PwaEnabled=true -p:Version="${{ vars.APPLICATION_DISPLAY_VERSION}}" --self-contained -r linux-x64 -o ${{env.DOTNET_ROOT}}/server
- name: Upload server artifact
uses: actions/upload-artifact@v4
with:
name: server-bundle
path: ${{env.DOTNET_ROOT}}/server
include-hidden-files: true # Required for wwwroot/.well-known folder
deploy_api_blazor:
name: deploy api + blazor
needs: build_api_blazor
runs-on: ubuntu-24.04
environment:
name: 'production'
url: ${{ steps.deploy-to-webapp.outputs.webapp-url }}
steps:
- name: Retrieve server bundle
uses: actions/download-artifact@v4
with:
name: server-bundle
- name: Deploy to Azure Web App
id: deploy-to-webapp
uses: azure/webapps-deploy@v3
with:
app-name: ${{ env.APP_SERVICE_NAME }}
slot-name: 'production'
publish-profile: ${{ secrets.COMPONENTS_AZURE_APP_SERVICE_PUBLISH_PROFILE }}
package: .
- name: Purge cache
uses: jakejarvis/cloudflare-purge-action@v0.3.0
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@v4
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
global-json-file: src\global.json
- uses: actions/setup-node@v4
with:
node-version: 22
- name: Update appsettings.json api server address
uses: devops-actions/variable-substitution@v1.2
with:
files: 'src\BlazorUI\Demo\Client\Bit.BlazorUI.Demo.Client.Core\appsettings.json'
env:
ApiServerAddress: ${{ env.SERVER_ADDRESS }}
WindowsUpdateSettings.FilesUrl: https://windows-components.bitplatform.dev
- name: Generate CSS/JS files
run: dotnet build src\BlazorUI\Demo\Client\Bit.BlazorUI.Demo.Client.Core\Bit.BlazorUI.Demo.Client.Core.csproj -p:Version="${{ vars.APPLICATION_DISPLAY_VERSION}}" -c Release
- name: Publish
run: |
cd src\BlazorUI\Demo\Client\Bit.BlazorUI.Demo.Client.Windows\
dotnet publish Bit.BlazorUI.Demo.Client.Windows.csproj -c Release -o .\bin\publish-arm64 -r win-arm64 -p:Version="${{ vars.APPLICATION_DISPLAY_VERSION}}"
ren .\bin\publish-arm64\Bit.BlazorUI.Demo.Client.Windows.exe Bit.BlazorUI.Demo.Client.Windows-arm64.exe
dotnet publish Bit.BlazorUI.Demo.Client.Windows.csproj -c Release -o .\bin\publish-x86 -r win-x86 -p:Version="${{ vars.APPLICATION_DISPLAY_VERSION}}"
ren .\bin\publish-x86\Bit.BlazorUI.Demo.Client.Windows.exe Bit.BlazorUI.Demo.Client.Windows-x86.exe
dotnet publish Bit.BlazorUI.Demo.Client.Windows.csproj -c Release -o .\bin\publish-x64 -r win-x64 -p:Version="${{ vars.APPLICATION_DISPLAY_VERSION}}"
ren .\bin\publish-x64\Bit.BlazorUI.Demo.Client.Windows.exe Bit.BlazorUI.Demo.Client.Windows-x64.exe
dotnet publish Bit.BlazorUI.Demo.Client.Windows.csproj -c Release -o .\bin\publish -p:Version="${{ vars.APPLICATION_DISPLAY_VERSION}}"
del .\bin\publish\Bit.BlazorUI.Demo.Client.Windows.exe
echo D | xcopy .\bin\publish-arm64 .\publish-result /s /e /h
echo A | xcopy .\bin\publish-x86 .\publish-result /s /e /h
echo A | xcopy .\bin\publish-x64 .\publish-result /s /e /h
echo A | xcopy .\bin\publish .\publish-result /s /e /h
dotnet tool restore
dotnet vpk pack -u Bit.BlazorUI.Demo.Client.Windows -v "${{ vars.APPLICATION_DISPLAY_VERSION }}" -p .\publish-result -e Bit.BlazorUI.Demo.Client.Windows-x86.exe -r win-x86 --framework net9.0-x86-desktop,webview2 --icon .\wwwroot\favicon.ico --packTitle 'Bit Blazor UI'
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: win-exe-bundle
path: src\BlazorUI\Demo\Client\Bit.BlazorUI.Demo.Client.Windows\Releases
build_blazor_hybrid_android:
name: build blazor hybrid (android)
runs-on: ubuntu-24.04
steps:
- name: Checkout source code
uses: actions/checkout@v4
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
global-json-file: src/global.json
- uses: actions/setup-node@v4
with:
node-version: 22
- name: Extract Android signing key from env
uses: timheuer/base64-to-file@v1.2
with:
fileDir: './src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Maui/'
fileName: 'BitBlazorUIDemo.keystore'
encodedString: ${{ secrets.ANDROID_RELEASE_KEYSTORE_FILE_BASE64 }}
- name: Update appsettings.json api server address
uses: devops-actions/variable-substitution@v1.2
with:
files: 'src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/appsettings.json'
env:
ApiServerAddress: ${{ env.SERVER_ADDRESS }}
- name: Install maui
run: cd src && dotnet workload install maui-android
- name: Install Android Sdk platform tools
run: ${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin/sdkmanager --sdk_root=$ANDROID_SDK_ROOT "platform-tools"
- name: Generate CSS/JS files
run: dotnet build src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Bit.BlazorUI.Demo.Client.Core.csproj -p:Version="${{ vars.APPLICATION_DISPLAY_VERSION}}" -c Release
- name: Build aab
run: dotnet build src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Maui/Bit.BlazorUI.Demo.Client.Maui.csproj -c Release -p:AndroidPackageFormat=aab -p:AndroidKeyStore=true -p:AndroidSigningKeyStore="BitBlazorUIDemo.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:Version="${{ vars.APPLICATION_DISPLAY_VERSION}}" -f net9.0-android
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: android-bundle
path: src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Maui/bin/Release/net9.0-android/*-Signed.*
build_blazor_hybrid_ios:
name: build blazor hybrid (iOS-macOS)
runs-on: macOS-15
steps:
- name: Checkout source code
uses: actions/checkout@v4
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
global-json-file: src/global.json
- uses: maxim-lobanov/setup-xcode@v1.6.0
with:
xcode-version: '16.0'
- uses: actions/setup-node@v4
with:
node-version: 22
- name: Update appsettings.json api server address
uses: devops-actions/variable-substitution@v1.2
with:
files: 'src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/appsettings.json'
env:
ApiServerAddress: ${{ env.SERVER_ADDRESS }}
- name: Install maui
run: cd src && dotnet workload install maui
- name: Import Code-Signing Certificates
uses: apple-actions/import-codesign-certs@v3
with:
p12-file-base64: ${{ secrets.APPSTORE_CODE_SIGNING_CERTIFICATE_FILE_BASE64 }}
p12-password: ${{ secrets.APPSTORE_CODE_SIGNING_CERTIFICATE_FILE_PASSWORD }}
- name: Download Apple Provisioning Profiles
uses: Apple-Actions/download-provisioning-profiles@v3
with:
bundle-id: 'com.bitplatform.BlazorUI.Demo'
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 src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Core/Bit.BlazorUI.Demo.Client.Core.csproj -p:Version="${{ vars.APPLICATION_DISPLAY_VERSION}}" -c Release
- name: Build ipa
run: dotnet publish src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Maui/Bit.BlazorUI.Demo.Client.Maui.csproj -p:RuntimeIdentifier=ios-arm64 -c Release -p:ArchiveOnBuild=true -p:CodesignKey="iPhone Distribution" -p:CodesignProvision="Bit Blazor UI Demo" -p:ApplicationDisplayVersion="${{ vars.APPLICATION_DISPLAY_VERSION }}" -p:ApplicationVersion="${{ vars.APPLICATION_VERSION }}" -p:Version="${{ vars.APPLICATION_DISPLAY_VERSION}}" -f net9.0-ios
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: ios-bundle
path: src/BlazorUI/Demo/Client/Bit.BlazorUI.Demo.Client.Maui/bin/release/net9.0-ios/ios-arm64/publish/*.ipa