diff --git a/.github/workflows/admin-sample.cd.yml b/.github/workflows/admin-sample.cd.yml index d9c31006c9..cb4d62d3d5 100644 --- a/.github/workflows/admin-sample.cd.yml +++ b/.github/workflows/admin-sample.cd.yml @@ -16,204 +16,204 @@ permissions: jobs: - # build_api_blazor: - # name: build api + blazor web - # runs-on: ubuntu-24.04 + build_api_blazor: + name: build api + blazor web + runs-on: ubuntu-24.04 - # steps: + steps: - # - name: Checkout source code - # uses: actions/checkout@v4 + - name: Checkout source code + uses: actions/checkout@v4 - # - name: Setup .NET - # uses: actions/setup-dotnet@v4 - # with: - # global-json-file: src/global.json - - # - 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 AdminPanel --database PostgreSQL --sample Admin --appInsights --sentry --serverUrl ${{ env.SERVER_ADDRESS }} --filesStorage AzureBlobStorage --notification --captcha reCaptcha --signalR --framework net9.0 + - name: Setup .NET + uses: actions/setup-dotnet@v4 + with: + global-json-file: src/global.json + + - 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 AdminPanel --database PostgreSQL --sample Admin --appInsights --sentry --serverUrl ${{ env.SERVER_ADDRESS }} --filesStorage AzureBlobStorage --notification --captcha reCaptcha --signalR --framework net9.0 - # - name: Update core appsettings.json - # uses: devops-actions/variable-substitution@v1.2 - # with: - # files: 'AdminPanel/src/Shared/appsettings.json, AdminPanel/src/Client/AdminPanel.Client.Core/appsettings.json, AdminPanel/src/Client/AdminPanel.Client.Web/appsettings.json, AdminPanel/src/Client/AdminPanel.Client.Web/appsettings.Production.json' - # env: - # WebAppRender.BlazorMode: BlazorWebAssembly - # ServerAddress: ${{ env.SERVER_ADDRESS }} - # Logging.Sentry.Dsn: ${{ secrets.ADMINPANEL_SENTRY_DSN }} - # GoogleRecaptchaSiteKey: ${{ secrets.GOOGLE_RECAPTCHA_SITE_KEY }} - # AdsPushVapid.PublicKey: ${{ secrets.ADMINPANEL_PUBLIC_VAPIDKEY }} - # ApplicationInsights.ConnectionString: ${{ secrets.APPLICATION_INSIGHTS_CONNECTION_STRING }} - - # - uses: actions/setup-node@v4 - # with: - # node-version: 22 + - name: Update core appsettings.json + uses: devops-actions/variable-substitution@v1.2 + with: + files: 'AdminPanel/src/Shared/appsettings.json, AdminPanel/src/Client/AdminPanel.Client.Core/appsettings.json, AdminPanel/src/Client/AdminPanel.Client.Web/appsettings.json, AdminPanel/src/Client/AdminPanel.Client.Web/appsettings.Production.json' + env: + WebAppRender.BlazorMode: BlazorWebAssembly + ServerAddress: ${{ env.SERVER_ADDRESS }} + Logging.Sentry.Dsn: ${{ secrets.ADMINPANEL_SENTRY_DSN }} + GoogleRecaptchaSiteKey: ${{ secrets.GOOGLE_RECAPTCHA_SITE_KEY }} + AdsPushVapid.PublicKey: ${{ secrets.ADMINPANEL_PUBLIC_VAPIDKEY }} + ApplicationInsights.ConnectionString: ${{ secrets.APPLICATION_INSIGHTS_CONNECTION_STRING }} + + - uses: actions/setup-node@v4 + with: + node-version: 22 - # - name: Install wasm - # run: cd src && dotnet workload install wasm-tools + - name: Install wasm + run: cd src && dotnet workload install wasm-tools - # - name: Generate CSS/JS files - # run: dotnet build AdminPanel/src/Client/AdminPanel.Client.Core/AdminPanel.Client.Core.csproj -t:BeforeBuildTasks -p:Version="${{ vars.APPLICATION_DISPLAY_VERSION}}" --no-restore -c Release + - name: Generate CSS/JS files + run: dotnet build AdminPanel/src/Client/AdminPanel.Client.Core/AdminPanel.Client.Core.csproj -t:BeforeBuildTasks -p:Version="${{ vars.APPLICATION_DISPLAY_VERSION}}" --no-restore -c Release - # - name: Publish - # run: dotnet publish AdminPanel/src/Server/AdminPanel.Server.Web/AdminPanel.Server.Web.csproj -c Release -p:PwaEnabled=true --self-contained -r linux-x64 -o ${{env.DOTNET_ROOT}}/server -p:Version="${{ vars.APPLICATION_DISPLAY_VERSION}}" + - name: Publish + run: dotnet publish AdminPanel/src/Server/AdminPanel.Server.Web/AdminPanel.Server.Web.csproj -c Release -p:PwaEnabled=true --self-contained -r linux-x64 -o ${{env.DOTNET_ROOT}}/server -p:Version="${{ vars.APPLICATION_DISPLAY_VERSION}}" - # - 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 + - 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_blazor_wasm_standalone: - # name: build blazor wasm standalone - # runs-on: ubuntu-24.04 + deploy_blazor_wasm_standalone: + name: build blazor wasm standalone + runs-on: ubuntu-24.04 - # steps: + steps: - # - name: Checkout source code - # uses: actions/checkout@v4 + - name: Checkout source code + uses: actions/checkout@v4 - # - name: Setup .NET - # uses: actions/setup-dotnet@v4 - # with: - # global-json-file: src/global.json - - # - 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 AdminPanel --database PostgreSQL --sample Admin --appInsights --sentry --serverUrl ${{ env.SERVER_ADDRESS }} --filesStorage AzureBlobStorage --notification --captcha reCaptcha --signalR --framework net9.0 + - name: Setup .NET + uses: actions/setup-dotnet@v4 + with: + global-json-file: src/global.json + + - 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 AdminPanel --database PostgreSQL --sample Admin --appInsights --sentry --serverUrl ${{ env.SERVER_ADDRESS }} --filesStorage AzureBlobStorage --notification --captcha reCaptcha --signalR --framework net9.0 - # - name: Update core appsettings.json - # uses: devops-actions/variable-substitution@v1.2 - # with: - # files: 'AdminPanel/src/Shared/appsettings.json, AdminPanel/src/Client/AdminPanel.Client.Core/appsettings.json, AdminPanel/src/Client/AdminPanel.Client.Web/appsettings.json, AdminPanel/src/Client/AdminPanel.Client.Web/appsettings.Production.json' - # env: - # ServerAddress: ${{ env.SERVER_ADDRESS }} - # Logging.Sentry.Dsn: ${{ secrets.ADMINPANEL_SENTRY_DSN }} - # GoogleRecaptchaSiteKey: ${{ secrets.GOOGLE_RECAPTCHA_SITE_KEY }} - # AdsPushVapid.PublicKey: ${{ secrets.ADMINPANEL_PUBLIC_VAPIDKEY }} - # ApplicationInsights.ConnectionString: ${{ secrets.APPLICATION_INSIGHTS_CONNECTION_STRING }} - - # - uses: actions/setup-node@v4 - # with: - # node-version: 22 + - name: Update core appsettings.json + uses: devops-actions/variable-substitution@v1.2 + with: + files: 'AdminPanel/src/Shared/appsettings.json, AdminPanel/src/Client/AdminPanel.Client.Core/appsettings.json, AdminPanel/src/Client/AdminPanel.Client.Web/appsettings.json, AdminPanel/src/Client/AdminPanel.Client.Web/appsettings.Production.json' + env: + ServerAddress: ${{ env.SERVER_ADDRESS }} + Logging.Sentry.Dsn: ${{ secrets.ADMINPANEL_SENTRY_DSN }} + GoogleRecaptchaSiteKey: ${{ secrets.GOOGLE_RECAPTCHA_SITE_KEY }} + AdsPushVapid.PublicKey: ${{ secrets.ADMINPANEL_PUBLIC_VAPIDKEY }} + ApplicationInsights.ConnectionString: ${{ secrets.APPLICATION_INSIGHTS_CONNECTION_STRING }} + + - uses: actions/setup-node@v4 + with: + node-version: 22 - # - name: Install wasm - # run: cd src && dotnet workload install wasm-tools + - name: Install wasm + run: cd src && dotnet workload install wasm-tools - # - name: Generate CSS/JS files - # run: dotnet build AdminPanel/src/Client/AdminPanel.Client.Core/AdminPanel.Client.Core.csproj -t:BeforeBuildTasks -p:Version="${{ vars.APPLICATION_DISPLAY_VERSION}}" --no-restore -c Release + - name: Generate CSS/JS files + run: dotnet build AdminPanel/src/Client/AdminPanel.Client.Core/AdminPanel.Client.Core.csproj -t:BeforeBuildTasks -p:Version="${{ vars.APPLICATION_DISPLAY_VERSION}}" --no-restore -c Release - # - name: Publish - # run: dotnet publish AdminPanel/src/Client/AdminPanel.Client.Web/AdminPanel.Client.Web.csproj -c Release -p:PwaEnabled=true -o ${{env.DOTNET_ROOT}}/client -p:Version="${{ vars.APPLICATION_DISPLAY_VERSION}}" - - # - name: Upload to asw - # run: | - # npm install -g @azure/static-web-apps-cli - # swa deploy --deployment-token ${{ secrets.ADMINPANEL_ASW_TOKEN }} --env production --app-location ${{env.DOTNET_ROOT}}/client/wwwroot - - # 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: Delete DataProtectionCertificate.pfx - # run: | - # rm DataProtectionCertificate.pfx - - # - name: Extract identity certificate from env - # uses: timheuer/base64-to-file@v1.2 - # with: - # fileDir: './' - # fileName: 'DataProtectionCertificate.pfx' - # encodedString: ${{ secrets.API_DATA_PROTECTION_CERTIFICATE_FILE_BASE64 }} - - # - name: Retrieve AppleAuthKey.p8 - # run: echo "${{ secrets.APPSTORE_API_KEY_PRIVATE_KEY_ADMIN }}" > AppleAuthKey.p8 - - # - 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.ADMINPANEL_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 + - name: Publish + run: dotnet publish AdminPanel/src/Client/AdminPanel.Client.Web/AdminPanel.Client.Web.csproj -c Release -p:PwaEnabled=true -o ${{env.DOTNET_ROOT}}/client -p:Version="${{ vars.APPLICATION_DISPLAY_VERSION}}" + + - name: Upload to asw + run: | + npm install -g @azure/static-web-apps-cli + swa deploy --deployment-token ${{ secrets.ADMINPANEL_ASW_TOKEN }} --env production --app-location ${{env.DOTNET_ROOT}}/client/wwwroot + + 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: Delete DataProtectionCertificate.pfx + run: | + rm DataProtectionCertificate.pfx + + - name: Extract identity certificate from env + uses: timheuer/base64-to-file@v1.2 + with: + fileDir: './' + fileName: 'DataProtectionCertificate.pfx' + encodedString: ${{ secrets.API_DATA_PROTECTION_CERTIFICATE_FILE_BASE64 }} + + - name: Retrieve AppleAuthKey.p8 + run: echo "${{ secrets.APPSTORE_API_KEY_PRIVATE_KEY_ADMIN }}" > AppleAuthKey.p8 + + - 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.ADMINPANEL_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: + 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: 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 AdminPanel --database PostgreSQL --sample Admin --windows --appInsights --sentry --serverUrl ${{ env.SERVER_ADDRESS }} --filesStorage AzureBlobStorage --captcha reCaptcha --signalR --framework net9.0 + - 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: 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 AdminPanel --database PostgreSQL --sample Admin --windows --appInsights --sentry --serverUrl ${{ env.SERVER_ADDRESS }} --filesStorage AzureBlobStorage --captcha reCaptcha --signalR --framework net9.0 - # - name: Update core appsettings.json - # uses: devops-actions/variable-substitution@v1.2 - # with: - # files: 'AdminPanel\src\Shared\appsettings.json, AdminPanel\src\Client\AdminPanel.Client.Core\appsettings.json, AdminPanel\src\Client\AdminPanel.Client.Windows\appsettings.json' - # env: - # ServerAddress: ${{ env.SERVER_ADDRESS }} - # Logging.Sentry.Dsn: ${{ secrets.ADMINPANEL_SENTRY_DSN }} - # GoogleRecaptchaSiteKey: ${{ secrets.GOOGLE_RECAPTCHA_SITE_KEY }} - # WindowsUpdate.FilesUrl: https://windows-adminpanel.bitplatform.dev - # ApplicationInsights.ConnectionString: ${{ secrets.APPLICATION_INSIGHTS_CONNECTION_STRING }} - - # - name: Generate CSS/JS files - # run: dotnet build AdminPanel\src\Client\AdminPanel.Client.Core\AdminPanel.Client.Core.csproj -t:BeforeBuildTasks -p:Version="${{ vars.APPLICATION_DISPLAY_VERSION}}" --no-restore -c Release - - # - name: Publish - # run: | - # cd AdminPanel\src\Client\AdminPanel.Client.Windows\ - # dotnet publish AdminPanel.Client.Windows.csproj -c Release -o .\publish-result -r win-x86 -p:Version="${{ vars.APPLICATION_DISPLAY_VERSION}}" --self-contained - # dotnet tool restore - # dotnet vpk pack -u AdminPanel.Client.Windows -v "${{ vars.APPLICATION_DISPLAY_VERSION }}" -p .\publish-result -e AdminPanel.Client.Windows.exe -r win-x86 --framework webview2 --icon .\wwwroot\favicon.ico --packTitle 'AdminPanel' + - name: Update core appsettings.json + uses: devops-actions/variable-substitution@v1.2 + with: + files: 'AdminPanel\src\Shared\appsettings.json, AdminPanel\src\Client\AdminPanel.Client.Core\appsettings.json, AdminPanel\src\Client\AdminPanel.Client.Windows\appsettings.json' + env: + ServerAddress: ${{ env.SERVER_ADDRESS }} + Logging.Sentry.Dsn: ${{ secrets.ADMINPANEL_SENTRY_DSN }} + GoogleRecaptchaSiteKey: ${{ secrets.GOOGLE_RECAPTCHA_SITE_KEY }} + WindowsUpdate.FilesUrl: https://windows-adminpanel.bitplatform.dev + ApplicationInsights.ConnectionString: ${{ secrets.APPLICATION_INSIGHTS_CONNECTION_STRING }} + + - name: Generate CSS/JS files + run: dotnet build AdminPanel\src\Client\AdminPanel.Client.Core\AdminPanel.Client.Core.csproj -t:BeforeBuildTasks -p:Version="${{ vars.APPLICATION_DISPLAY_VERSION}}" --no-restore -c Release + + - name: Publish + run: | + cd AdminPanel\src\Client\AdminPanel.Client.Windows\ + dotnet publish AdminPanel.Client.Windows.csproj -c Release -o .\publish-result -r win-x86 -p:Version="${{ vars.APPLICATION_DISPLAY_VERSION}}" --self-contained + dotnet tool restore + dotnet vpk pack -u AdminPanel.Client.Windows -v "${{ vars.APPLICATION_DISPLAY_VERSION }}" -p .\publish-result -e AdminPanel.Client.Windows.exe -r win-x86 --framework webview2 --icon .\wwwroot\favicon.ico --packTitle 'AdminPanel' - # - name: Upload artifact - # uses: actions/upload-artifact@v4 - # with: - # name: win-exe-bundle - # path: AdminPanel\src\Client\AdminPanel.Client.Windows\Releases + - name: Upload artifact + uses: actions/upload-artifact@v4 + with: + name: win-exe-bundle + path: AdminPanel\src\Client\AdminPanel.Client.Windows\Releases build_blazor_hybrid_android: name: build blazor hybrid (android)