chore: promote dev → main (v1.1.0-alpha.73) - #105
Closed
github-actions[bot] wants to merge 73 commits into
Closed
Conversation
## Summary Adds `sprint/**` to the CI trigger in `squad-test.yml`. **Changes:** - New `push` trigger for `sprint/**` — so direct pushes to sprint consolidation branches run the parallel test suite - Added `sprint/**` to `pull_request.branches` — so PRs *targeting* sprint branches (e.g. squad/* → sprint/*) also trigger CI **Branch flow:** `squad/*` → `sprint/*` → `dev` → `main` Sprint branches are consolidation checkpoints. Without this fix, sprint-level PRs ran with zero remote validation. Closes #69 Working as Boromir (DevOps/Infra) --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Gate: Aragorn ✅ APPROVE (pre-push hook fix ready to merge)## Summary
<!-- Describe what this PR does and why. Link the issue it closes. -->
Closes #<!-- issue number -->
## Type of Change
<!-- Check all that apply -->
- [ ] 🐛 Bug fix (non-breaking change that fixes an issue)
- [ ] ✨ Feature (non-breaking change that adds functionality)
- [ ] ♻️ Refactor (no behavior change, code cleanup/restructure)
- [ ] 🧪 Tests (new or updated tests only)
- [ ] 📝 Docs (README, XML docs, comments)
- [ ] ⚙️ Infra/CI (GitHub Actions, Aspire, NuGet, deployment)
- [ ] 🔒 Security (auth, permissions, secrets, headers)
- [ ] 💥 Breaking change (existing behavior changes)
## Domain Affected
<!-- Check all that apply — this determines which reviewers are required
-->
- [ ] 🏗️ Architecture / domain logic / CQRS → **Aragorn required**
- [ ] 🔧 Backend (handlers, repositories, API endpoints, MediatR) → **Sam
required**
- [ ] ⚛️ Frontend (Blazor components, Razor pages, CSS, JS) → **Legolas
required**
- [ ] 🧪 Unit / bUnit / integration tests → **Gimli required**
- [ ] 🧪 E2E / Playwright / Aspire integration tests → **Pippin
required**
- [ ] ⚙️ CI/CD / GitHub Actions / NuGet / Aspire AppHost → **Boromir
required**
- [ ] 🔒 Auth0 / authorization / security-relevant changes → **Gandalf
required**
- [ ] 📝 Docs / README / XML docs → **Frodo required**
## Self-Review Checklist
<!-- Complete before requesting review — incomplete PRs will be returned
-->
### Code Quality
- [ ] I ran `dotnet build MyBlog.slnx --configuration Release` — 0
errors, 0 warnings
- [ ] I ran `dotnet test MyBlog.slnx --configuration Release --no-build`
— all pass
- [ ] No TODO/FIXME left unless tracked in a follow-up issue (link it)
- [ ] No secrets, API keys, or credentials committed
### Architecture
- [ ] New handlers follow the `Command`/`Query`/`Handler`/`Validator`
naming conventions
- [ ] New handlers are `sealed`
- [ ] Domain layer has no references to `Web` or `Persistence.*`
projects
- [ ] `Result<T>` / `ResultErrorCode` used for expected failures (no
exception-driven control flow)
- [ ] DTOs are records in `Domain.DTOs`; Models are in `Domain.Models`
- [ ] No DTO types embedded in Model classes
### Tests
- [ ] New code has corresponding unit tests
- [ ] Integration tests use domain-specific collections
(`[Collection("XxxIntegration")]`)
- [ ] No test compares two `IssueDto.Empty` / `CommentDto.Empty`
instances directly
### Security (check if security-relevant)
- [ ] New endpoints have appropriate `RequireAuthorization` / policy
applied
- [ ] No `MarkupString` used with user-supplied content
- [ ] No user input reflected in MongoDB queries without sanitization
### Merge Readiness
- [ ] Branch is up to date with `main` (no merge conflicts)
- [ ] CI checks are green (do not request review while checks are
pending/failing)
- [ ] PR description is complete — reviewers should not have to ask what
this does
## Screenshots / Evidence
<!-- For UI changes: before/after screenshots. For fixes: evidence the
bug is resolved. -->
## Notes for Reviewers
<!-- Anything you want reviewers to pay special attention to, or context
they need. -->
---------
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
## Summary Closes #76 Working as Boromir (DevOps / Infra) The existing `project-board-automation.yml` only moves items between columns — it never added new issues or PRs to the board in the first place. This PR fills that gap with two dedicated workflows. ## Changes ### `add-issues-to-project.yml` - Triggers on `issues: [opened, reopened]` - Filters to issues labelled `squad` (avoids noise from unrelated issues) - Adds the issue to the MyBlog project board via GraphQL `addProjectV2ItemById` - Sets the **Status** field → **Backlog** (`f75ad846`) - Handles 403 errors gracefully with a hint to use a PAT with `project` scope ### `add-prs-to-project.yml` - Triggers on `pull_request: [opened, reopened]` - Adds every new PR to the MyBlog project board - Sets the **Status** field → **In Review** (`df73e18b`) - Handles 403 errors gracefully ## Project IDs used | Key | Value | |-----|-------| | PROJECT_ID | `PVT_kwHOA5k0b84BVFTy` | | STATUS_FIELD_ID | `PVTSSF_lAHOA5k0b84BVFTyzhQjgPk` | | BACKLOG_OPTION_ID | `f75ad846` | | IN_REVIEW_OPTION_ID | `df73e18b` | ## Notes Both workflows use `secrets.GITHUB_TOKEN`. If GitHub's fine-grained token restrictions block project writes (403), a PAT with the `project` scope stored as `secrets.GH_PROJECT_TOKEN` can be substituted. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Architecture test results → architecture-test-results artifact - Unit test results → unit-test-results artifact - Integration test results → integration-test-results artifact - All uploads use if: always() for fault tolerance - 30-day retention for cost-balancing Closes #73
…msHelper fixes (#79) feat(#59): Add Profile page, RoleClaimsHelper, and UI component tests Profile page: - Displays user info (name, email, roles) - Admin badge (red) in header - Role badges: Admin=red, others=green - Responsive Tailwind + DaisyUI layout RoleClaimsHelper: - Extract role claims from ClaimsPrincipal - Handle Auth0 and standard claim types - Performance optimization (return string[] vs IReadOnlyList) Tests (6 RoleClaimsHelper + 3 Profile): - Role extraction coverage (empty, Auth0, standard, mixed claims) - Badge rendering and styling validation - All tests passing, coverage gate met Closes #59
E2E tests with Aspire integration, CI hardening, fixture fixes.
…learnings Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
GitVersion auto-increments on main; v1.0.0-sprint3 is final sprint tag. Subsequent releases follow pure semantic versioning from v1.0.1 onwards. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
When CI runs on main after merge, create and push the git tag based on GitVersion-determined semver. This enables v1.0.1, v1.0.2, etc. to be automatically tagged without manual intervention. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
GitVersion v4 action no longer accepts 'useConfigFile'. Use 'configFilePath' to explicitly specify the GitVersion.yml location. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The 'Create and Push Git Tag' step requires 'contents: write' permission to push tags to the repository. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
semVer includes pre-release height on non-main branches, resulting in tags like v1.0.0-101. On main, we want clean semver tags like v1.0.1, which comes from the majorMinorPatch output. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Document the new automatic versioning workflow with GitVersion. This is the first commit after v1.0.0, which will trigger v1.0.1 tag creation. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Aligns with squad naming conventions and PRD specification. All squad-managed workflows use the 'squad-' prefix. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…idates and blog-only paths
- Rename Unit.Tests → split into Domain.Tests, Web.Tests, Web.Tests.Bunit - Rename Integration.Tests → Web.Tests.Integration - Rename E2E.Tests → AppHost.Tests - Update MyBlog.slnx with new test project references - Update .csproj RootNamespace values: Domain, Web, AppHost - Fix namespace references in test files (Web.Testing, etc.) - Verify all 174 tests pass with zero errors Test breakdown: - Domain.Tests: 13 tests (domain handlers/queries) - Web.Tests: 84 tests (web handlers, validators, behaviors) - Web.Tests.Bunit: 59 tests (Blazor components) - Web.Tests.Integration: 9 tests (MongoDB, Aspire) - Architecture.Tests: 8 tests (layer validation) - AppHost.Tests: 1 test (E2E) Closes #80 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Changed test-unit → test-domain for Domain.Tests - Split unit test job into separate Domain.Tests and Web.Tests jobs - Updated test-integration → Web.Tests.Integration - Updated E2E.Tests → AppHost.Tests with Playwright setup - Added separate test-bunit job for Web.Tests.Bunit - Updated coverage job to depend on all 6 test jobs - Updated report job summary to reflect new test project structure This aligns the workflow with the #80 test reorganization completed in PR #98. The test projects were already renamed; now the workflow references them correctly. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Replace pwsh wrapper with direct 'playwright install' command - Use working-directory to run from tests/AppHost.Tests context - This avoids the missing playwright.ps1 file issue in CI The playwright command should be available directly if it's installed as a tool dependency in AppHost.Tests.csproj. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The Playwright CLI requires the Microsoft.Playwright package to be installed in the project. Without it, the playwright CLI tool fails with 'Playwright is not installed' error.
The AppHost.Tests requires MongoDB and Redis Docker containers to be started during test execution. On CI, these images need to be pulled from the registry, which was timing out during the test. Pre-pulling images ensures they are available before the test starts, preventing 'Connection reset by peer' errors.
The squad-ci.yml was running tests in addition to squad-test.yml, causing duplicate test execution. This workflow should only perform build operations (mirrors the pre-push gate build phase). Test execution is handled by squad-test.yml which runs on squad/** and sprint/** branches. Fixes: build-and-test check failure on PR #98
The Web application was throwing InvalidOperationException during AppHost.Tests startup because Auth0 configuration was required but not provided in CI. Solution: - Move Auth0 validation check to production environment only - In Development mode (used by Aspire E2E tests), use mock/test Auth0 values - Update appsettings.Development.json with test credentials This allows the web app to start successfully in the Aspire test environment without requiring real Auth0 credentials, while maintaining security in production where Auth0 is properly configured via user secrets. Fixes: AppHost.Tests 'Connection reset by peer' failure (PR #98) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Move Playwright E2E tests from legacy E2E structure to new AppHost.Tests layout - Extract infrastructure utilities (AspireManager, PlaywrightManager) into separate classes - Organize E2E tests by feature area (Admin, Layout, Pages, Theme) - Rename E2E test files for clarity (WebPlaywrightTests, EnvVarTests, etc.) - Add *.lscache to gitignore to ignore IDE cache files - Update AppHost.Tests project file to reference new test structure Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Centralize all NuGet package versions in Directory.Packages.props: - Created Directory.Packages.props with 30 unique package versions - Enabled ManagePackageVersionsCentrally in Directory.Build.props - Removed Version attributes from all PackageReference entries - All 10 .csproj files updated to use centralized versions Benefits: - Single source of truth for all NuGet package versions - Easier to audit and update dependencies - Reduces duplication across project files - Follows .NET best practices (SDK 10+) Build verified: Release build completes successfully
- Add Version attributes to all PackageReference items - Uses versions consistent with other test projects: - Aspire.Hosting.Testing 13.2.3 - FluentAssertions 8.9.0 - Microsoft.Playwright 1.48.0 - coverlet.collector 10.0.0 - Microsoft.NET.Test.Sdk 18.5.0 - xunit 2.9.3 - xunit.runner.visualstudio 3.1.5 Fixes: NuGet error NU1015 during CI build Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Remove Version attributes from all PackageReference items - Packages are managed centrally via Directory.Packages.props - Fixes NU1008 error: Central Package Management must define versions centrally Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
CI cold-start takes longer than expected; increase timeout to 180 seconds to allow sufficient time for Aspire to provision containers and start the web app, even with Docker images pre-pulled. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The Web app was checking only IsDevelopment() to use mock Auth0 values, but E2E tests run in Testing environment. This caused app startup to fail with 'Auth0 configuration is missing or incomplete' error. Update check to include both Development and Testing environments, allowing mock Auth0 values to be used in both contexts. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…gs__mongodb The AppHost creates a MongoDB database resource named 'myblog', so the generated connection string environment variable is ConnectionStrings__myblog, not ConnectionStrings__mongodb. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…config handling **Problem:** E2E tests were timing out during AspireManager.StartAppAsync() because: 1. The /alive endpoint was only mapped in Development environment, not Testing 2. Auth0 configuration was receiving empty strings instead of null, causing ArgumentException **Solution:** 1. Updated ServiceDefaults/Extensions.cs to map /alive and /health endpoints for Testing environment 2. Changed Web/Program.cs Auth0 config to use IsNullOrWhiteSpace() instead of IsNullOrEmpty() 3. Use direct assignment instead of null coalescing (??=) to ensure fallback values are applied 4. Added detailed logging to AspireManager for troubleshooting startup issues **Result:** - Web app now starts successfully in Testing environment - Health checks are properly accessible at /alive - AspireManager can verify app readiness before tests run - All infrastructure E2E tests can now proceed - Logging helps diagnose future startup issues Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…h runs in CI - Updated Web.csproj: Added GenerateBlazorAssets MSBuild target to run after build (Release only) - Target runs dotnet publish and copies _framework files to bin output - This ensures blazor.web.js and component JS files are available for AppHost.Tests - Added explicit publish step in squad-test.yml before AppHost.Tests runs - Fixes: FileNotFoundException for _framework/blazor.web.js in E2E tests Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Updated GenerateBlazorAssets target to copy files to both bin and src/Web/wwwroot - When Aspire runs 'dotnet run' from project directory, it looks for wwwroot in source location - Ensures blazor.web.js and component JS files are available for dotnet run execution Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Removed IssueTracker-specific test files (Dashboard, Admin, Issues pages) - Removed Theme and Admin layout tests (not applicable to MyBlog) - Updated HomePageTests assertions to match MyBlog's actual content - Updated Layout tests to remove IssueTracker brand/footer text expectations - Simplified NavMenu tests for MyBlog's actual page structure Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Remove orphaned build artifacts from src/Web/wwwroot (stale JS/CSS files, _framework directory, compressed .br/.gz variants) - Remove GenerateBlazorAssets target from Web.csproj that was causing duplicate asset conflicts in .NET 10 SDK - Add .gitignore rules to prevent future accumulation of build artifacts: _framework/, *.br, *.gz - Clean wwwroot directory and allow Blazor build system to regenerate assets on demand This fixes the BLAZOR106 error and 'Sequence contains more than one element' SDK error that was blocking Release builds on squad/80 branch. Fixes #99 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Closes #96 - Fix 7 flaky E2E tests: remove hard-coded 5000ms timeouts, use IsNullOrWhiteSpace in test login endpoint - Add ThemeSelector and fix Home href="/" in mobile hamburger menu (functional regression from Aragorn review) - Rename Layout_NavMenu_IsHiddenWhenNotAuthenticated to accurately reflect the assertion - Fix Playwright strict mode violations: use specific selectors to distinguish desktop vs mobile duplicate elements Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Resolves the VSA violation where CQRS handlers/commands/validators lived in Domain. - Deleted src/Domain/Features/ (13 files) - Deleted tests/Domain.Tests/ (superseded by Web.Tests) - Web/Program.cs: MediatR/FluentValidation now scan Web assembly only - Architecture.Tests: added Domain_Should_Not_Have_Features guard - Web.Tests: updated namespaces to MyBlog.Web.Features.* after move - AppHost.Tests: resolved all 70 build warnings Closes #103
mpaulosky
added a commit
that referenced
this pull request
Apr 24, 2026
## Sprint 4 Release — v1.1.0 Replaces PR #105 which had a merge conflict in workflow files (`squad-ci.yml`, `squad-test.yml`). ### Changes included All Sprint 4 work from `dev`: - feat: Blazor theme system (Sprint 4 issues #81–#86) - feat: VSA migration — move Domain.Features to Web (PR #104) - fix: Resolve all 7 flaky E2E tests in AppHost.Tests (PR #102) - refactor: Reorganize test projects (PR #100) - ci: Central Package Management (CPM) - ci: Fix squad-preview validate to skip AppHost.Tests/Bunit (unrunnable on plain runners) ### Conflict resolution `squad-ci.yml` and `squad-test.yml` had add/add and content conflicts from main having an older version. Resolved by accepting the `dev` versions (correct current state). --- Closes #105 _After merging, run **squad-milestone-release** to tag and publish v1.1.0._
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Release Promotion
Merging
devintomainfor release v1.1.0-alpha.73.Commits included
b4586cd fix(vsa): move Domain.Features to Web, delete Domain.Tests (#104)
1eefb6a fix: Resolve all 7 flaky E2E tests in AppHost.Tests (#102)
575b690 Reorganize Test Projects (#100)
fb33f10 Merge branch 'dev' into squad/80-reorganize-test-projects
114bca6 Reorganize Test Projects
b157f75 Implement #80: Reorganize test projects to match workflow structure (#98)
bd34c39 fix: Remove stale Blazor static assets from squad/80 branch
aa85edd Fix: Update E2E tests for MyBlog (remove IssueTracker references)
68f93bd Fix: Copy Blazor static assets to source wwwroot for dotnet run
a6395d8 Fix: Generate Blazor static assets in Release build and ensure publish runs in CI
89fd3dc fix: Enable /alive health check in Testing environment and fix Auth0 config handling
f803838 Fix EnvVarTests: expect ConnectionStrings__myblog not ConnectionStrings__mongodb
d0b279a fix: Include Testing environment in Auth0 mock configuration
bcf6609 fix: Increase AppHost.Tests startup timeout from 120s to 180s
207057b fix: Remove explicit package versions from AppHost.Tests.csproj
b3e6752 fix: Add missing package versions to AppHost.Tests.csproj
a6084e0 feat: Implement Central Package Management (CPM)
d2fd89c test: Reorganize test projects (continued from previous commit)
dd6e3e2 fix: Make Auth0 optional in Development environment for E2E testing
6c9aff3 fix: Update squad-ci.yml to only build (remove duplicate tests)
781697c fix: Pre-pull Docker images for Aspire before running AppHost.Tests
d34ce33 diagnose: Add diagnostic output to AppHost.Tests step for debugging CI failures
06aa409 feat: Add Microsoft.Playwright NuGet package to AppHost.Tests
4e7746f fix: Add dotnet tool install for Playwright CLI before usage
3c05070 fix: Simplify Playwright installation in AppHost.Tests job
0346d97 fix: Update squad-test.yml to reference correct test projects
92653b7 Implement #80: reorganize test projects to match workflow structure
cf44636 test: increase HttpClient timeout for E2E tests
b978cdd fix: move rendermode from ThemeProvider to Routes in App.razor
e858a6f fix(ci): remove duplicate test-bunit job
f68757c fix(ci): consolidate duplicate test-domain and test-web jobs into single test-unit job
d33965c fix(ci): remove dead Playwright install step from AppHost.Tests job
aa4dabe fix(tests): resolve stale NSubstitute arg matcher in HandleEdit_NotFound_ReturnsFailResult
d9a93ff fix(ci): update workflow test paths to match actual project structure
e7d1842 feat: implement Sprint 4 Blazor theme system (#81-#86)
bffb309 test: scaffold bUnit tests for ThemeProvider and ThemeSelector [#85]
0a0263d ci: rename CI references to Squad CI (#94)
8d2faea ci: rename references from IssueTracker to MyBlog in documentation and configuration
89f9790 ci: refactor test workflow for improved structure and consistency
e900156 ci: add initial .ralph-state.json configuration file
8794c16 ci: add workflow to sync Dev Blog section from index.md to README.md
6215f44 ci: add .NET code metrics workflow for automated analysis
3ebbe3f ci: add initial HTML structure for MyBlog application
1e3e1ae ci: add milestone review workflow for release or blog decision
d262012 ci: add milestone release decision workflow for handling release candidates and blog-only paths
41ea726 ci: add workflow for creating blog brief issue on GitHub Release publication
c42c269 ci: add secrets management documentation for IssueTrackerApp
a479e55 ci: add workflow for building and deploying Squad documentation
7bf2d13 ci: add workflow for Squad Insider Release on push to insider branch
543aba6 ci: add workflow for Squad Milestone Release with version bumping
After merging, run squad-milestone-release to tag and publish the GitHub Release.