stabilize floating toolbar anchor assertion #7
This file contains hidden or 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: Release Pipeline | |
| on: | |
| push: | |
| branches: | |
| - main | |
| workflow_dispatch: | |
| permissions: | |
| contents: write | |
| pages: write | |
| id-token: write | |
| concurrency: | |
| group: release-pipeline | |
| cancel-in-progress: true | |
| env: | |
| APP_PROJECT: src/PrompterLive.App/PrompterLive.App.csproj | |
| APP_TEST_PROJECT: tests/PrompterLive.App.Tests/PrompterLive.App.Tests.csproj | |
| CORE_TEST_PROJECT: tests/PrompterLive.Core.Tests/PrompterLive.Core.Tests.csproj | |
| PAGES_ARTIFACT_ROOT: .artifacts/prompterlive-pages | |
| PAGES_BASE_PATH: / | |
| PAGES_CNAME: prompter.managed-code.com | |
| PLAYWRIGHT_CLI: tests/PrompterLive.App.UITests/bin/Debug/net10.0/.playwright/package/cli.js | |
| PUBLISH_ROOT: .artifacts/prompterlive-publish | |
| RELEASE_ARCHIVE_NAME: prompterlive-pages.zip | |
| RELEASE_ARTIFACT_NAME: prompterlive-release-package | |
| RELEASE_ARTIFACT_ROOT: .artifacts/release-artifact | |
| SOLUTION_FILE: PrompterLive.slnx | |
| UI_TEST_PROJECT: tests/PrompterLive.App.UITests/PrompterLive.App.UITests.csproj | |
| jobs: | |
| validate_release: | |
| name: Build And Test | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: read | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v6 | |
| - name: Setup .NET | |
| uses: actions/setup-dotnet@v5 | |
| with: | |
| global-json-file: global.json | |
| - name: Build solution | |
| run: dotnet build "$SOLUTION_FILE" -warnaserror | |
| - name: Install Playwright browser | |
| run: node "$PLAYWRIGHT_CLI" install chromium | |
| - name: Test supporting suites | |
| run: | | |
| dotnet test "$CORE_TEST_PROJECT" --no-build | |
| dotnet test "$APP_TEST_PROJECT" --no-build | |
| - name: Test browser suite | |
| run: dotnet test "$UI_TEST_PROJECT" --no-build | |
| prepare_release: | |
| name: Resolve Release Version | |
| needs: validate_release | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: read | |
| outputs: | |
| release_tag: ${{ steps.release_version.outputs.release_tag }} | |
| release_version: ${{ steps.release_version.outputs.release_version }} | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v6 | |
| - name: Setup .NET | |
| uses: actions/setup-dotnet@v5 | |
| with: | |
| global-json-file: global.json | |
| - name: Resolve release version | |
| id: release_version | |
| run: | | |
| release_version="$(dotnet msbuild "$APP_PROJECT" -getProperty:VersionPrefix -p:PrompterLiveBuildNumber=${{ github.run_number }} | tr -d '\r')" | |
| release_tag="v${release_version}" | |
| echo "release_version=$release_version" >> "$GITHUB_OUTPUT" | |
| echo "release_tag=$release_tag" >> "$GITHUB_OUTPUT" | |
| publish_release_build: | |
| name: Publish Release Build | |
| needs: prepare_release | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: read | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v6 | |
| - name: Setup .NET | |
| uses: actions/setup-dotnet@v5 | |
| with: | |
| global-json-file: global.json | |
| - name: Publish standalone WASM app | |
| run: > | |
| dotnet publish | |
| "$APP_PROJECT" | |
| -c Release | |
| -o "$PUBLISH_ROOT" | |
| -p:PrompterLiveBuildNumber=${{ github.run_number }} | |
| - name: Prepare GitHub Pages artifact | |
| run: | | |
| mkdir -p "$PAGES_ARTIFACT_ROOT" | |
| cp -R "$PUBLISH_ROOT/wwwroot/." "$PAGES_ARTIFACT_ROOT/" | |
| sed -i "s#<base href=\"/\" />#<base href=\"${PAGES_BASE_PATH}\" />#g" "$PAGES_ARTIFACT_ROOT/index.html" | |
| cp "$PAGES_ARTIFACT_ROOT/index.html" "$PAGES_ARTIFACT_ROOT/404.html" | |
| printf '%s\n' "$PAGES_CNAME" > "$PAGES_ARTIFACT_ROOT/CNAME" | |
| touch "$PAGES_ARTIFACT_ROOT/.nojekyll" | |
| - name: Archive release bundle | |
| run: | | |
| mkdir -p "$RELEASE_ARTIFACT_ROOT" | |
| cd "$PAGES_ARTIFACT_ROOT" | |
| zip -r "$GITHUB_WORKSPACE/$RELEASE_ARTIFACT_ROOT/$RELEASE_ARCHIVE_NAME" . | |
| - name: Upload GitHub release artifact | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: ${{ env.RELEASE_ARTIFACT_NAME }} | |
| path: ${{ env.RELEASE_ARTIFACT_ROOT }}/${{ env.RELEASE_ARCHIVE_NAME }} | |
| - name: Upload Pages artifact | |
| uses: actions/upload-pages-artifact@v4 | |
| with: | |
| path: ${{ env.PAGES_ARTIFACT_ROOT }} | |
| publish_github_release: | |
| name: Publish GitHub Release | |
| needs: | |
| - prepare_release | |
| - publish_release_build | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write | |
| steps: | |
| - name: Download release artifact | |
| uses: actions/download-artifact@v8 | |
| with: | |
| name: ${{ env.RELEASE_ARTIFACT_NAME }} | |
| path: ${{ env.RELEASE_ARTIFACT_ROOT }} | |
| - name: Create or update release tag and GitHub Release | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| RELEASE_TAG: ${{ needs.prepare_release.outputs.release_tag }} | |
| RELEASE_TITLE: PrompterLive ${{ needs.prepare_release.outputs.release_version }} | |
| run: | | |
| release_asset="$RELEASE_ARTIFACT_ROOT/$RELEASE_ARCHIVE_NAME" | |
| if gh release view "$RELEASE_TAG" >/dev/null 2>&1; then | |
| gh release upload "$RELEASE_TAG" "$release_asset" --clobber | |
| gh release edit "$RELEASE_TAG" --title "$RELEASE_TITLE" | |
| else | |
| gh release create "$RELEASE_TAG" "$release_asset" \ | |
| --title "$RELEASE_TITLE" \ | |
| --generate-notes \ | |
| --target "$GITHUB_SHA" | |
| fi | |
| deploy_github_pages: | |
| name: Deploy GitHub Pages | |
| needs: | |
| - publish_release_build | |
| - publish_github_release | |
| runs-on: ubuntu-latest | |
| environment: | |
| name: github-pages | |
| url: ${{ steps.deployment.outputs.page_url }} | |
| permissions: | |
| pages: write | |
| id-token: write | |
| steps: | |
| - name: Configure GitHub Pages | |
| uses: actions/configure-pages@v6 | |
| - name: Deploy to GitHub Pages | |
| id: deployment | |
| uses: actions/deploy-pages@v5 |