Skip to content

chore: promote dev → main (v1.1.0-alpha.73) - #105

Closed
github-actions[bot] wants to merge 73 commits into
mainfrom
dev
Closed

chore: promote dev → main (v1.1.0-alpha.73)#105
github-actions[bot] wants to merge 73 commits into
mainfrom
dev

Conversation

@github-actions

Copy link
Copy Markdown
Contributor

Release Promotion

Merging dev into main for 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.

mpaulosky and others added 30 commits April 20, 2026 09:07
## 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
…* branches (#78)

Update pre-push Gate 0 documentation to reflect sprint/* branch support (already implemented in PR #62)

Closes #61
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>
Boromir and others added 27 commits April 22, 2026 08:33
- 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 mpaulosky closed this Apr 24, 2026
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._
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant