Skip to content

feat: add release gate workflow (milestone closure check)#47

Closed
mpaulosky wants to merge 2 commits into
devfrom
squad/release-gate-workflow
Closed

feat: add release gate workflow (milestone closure check)#47
mpaulosky wants to merge 2 commits into
devfrom
squad/release-gate-workflow

Conversation

@mpaulosky

Copy link
Copy Markdown
Owner

Summary

Adds a release-gate.yml GitHub Actions workflow that enforces sprint milestone completion before any devmain PR can merge.

Working as Boromir (DevOps/CI)


What this does

On every PR targeting main, the gate checks all milestones for partially complete sprints — milestones with both open and closed issues. If found, it:

  1. Blocks the merge with a failed check
  2. Posts a descriptive comment listing the open issues by milestone

Gate logic

Milestone state Result
Only open issues (future sprint, not started) ✅ Allowed
Only closed issues (sprint complete) ✅ Allowed
Open and closed issues (sprint in progress) ❌ Blocked

To unblock: close or reassign the open issues to a future milestone.


Files changed

  • .github/workflows/release-gate.yml — new workflow
  • .squad/playbooks/release-myblog.md — updated to document the gate and add Project board check to Step 1

Why this matters

This enforces the principle: only fully-Done sprints ship to main. The Project #4 board's Done column is now the release readiness signal — no more manual "is everything done?" checks before releasing.

Closes no issue (infrastructure improvement).

- Add .github/workflows/release-gate.yml: blocks dev→main PRs when any
  active milestone has open issues (partially complete sprint detection)
- Update release-myblog.md: document the automated gate, its logic, and
  add Project board check to Step 1 of the release checklist

Gate logic: milestones with both open+closed issues are blocked; future
milestones (only open) and completed milestones (only closed) are allowed.
The workflow also posts a descriptive comment on blocked PRs.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings April 19, 2026 19:28
@github-actions

github-actions Bot commented Apr 19, 2026

Copy link
Copy Markdown
Contributor

Summary

Summary
Generated on: 04/19/2026 - 20:34:25
Coverage date: 04/19/2026 - 20:33:44 - 04/19/2026 - 20:34:09
Parser: MultiReport (4x Cobertura)
Assemblies: 4
Classes: 35
Files: 34
Line coverage: 64.3% (474 of 737)
Covered lines: 474
Uncovered lines: 263
Coverable lines: 737
Total lines: 2069
Branch coverage: 64% (169 of 264)
Covered branches: 169
Total branches: 264
Method coverage: Feature is only available for sponsors
Tag: 57_24638504340

Coverage

AppHost - 0%
Name Line Branch
AppHost 0% ****
Program 0%
Domain - 93.4%
Name Line Branch
Domain 93.4% 50%
Domain.Abstractions.Result 95% 50%
Domain.Abstractions.Result`1 75% 50%
MyBlog.Domain.Entities.BlogPost 100%
ServiceDefaults - 0%
Name Line Branch
ServiceDefaults 0% 0%
Microsoft.Extensions.Hosting.Extensions 0% 0%
Web - 68.1%
Name Line Branch
Web 68.1% 69%
MyBlog.Web.Components.Layout.MainLayout 100%
MyBlog.Web.Components.Layout.NavMenu 82.8% 71.4%
MyBlog.Web.Components.Pages.Error 100% 75%
MyBlog.Web.Components.Routes 0% 0%
MyBlog.Web.Components.Shared.RedirectToLogin 100%
MyBlog.Web.Data.BlogDbContext 100%
MyBlog.Web.Data.BlogPostDto 100%
MyBlog.Web.Data.BlogPostMappings 100%
MyBlog.Web.Data.MongoDbBlogPostRepository 100% 100%
MyBlog.Web.Features.BlogPosts.Create.Create 75% 50%
MyBlog.Web.Features.BlogPosts.Create.CreateBlogPostCommand 100%
MyBlog.Web.Features.BlogPosts.Create.CreateBlogPostHandler 100%
MyBlog.Web.Features.BlogPosts.Delete.ConfirmDeleteDialog 100% 100%
MyBlog.Web.Features.BlogPosts.Delete.DeleteBlogPostCommand 100%
MyBlog.Web.Features.BlogPosts.Delete.DeleteBlogPostHandler 100%
MyBlog.Web.Features.BlogPosts.Edit.Edit 88% 75%
MyBlog.Web.Features.BlogPosts.Edit.EditBlogPostCommand 100%
MyBlog.Web.Features.BlogPosts.Edit.EditBlogPostHandler 84% 90%
MyBlog.Web.Features.BlogPosts.Edit.GetBlogPostByIdQuery 100%
MyBlog.Web.Features.BlogPosts.List.GetBlogPostsHandler 100% 100%
MyBlog.Web.Features.BlogPosts.List.Index 86.8% 84.6%
MyBlog.Web.Features.UserManagement.AssignRoleCommand 100%
MyBlog.Web.Features.UserManagement.ManageRoles 90.4% 75%
MyBlog.Web.Features.UserManagement.Profile 97.2% 82%
MyBlog.Web.Features.UserManagement.RemoveRoleCommand 100%
MyBlog.Web.Features.UserManagement.RoleDto 100%
MyBlog.Web.Features.UserManagement.UserManagementHandler 0% 0%
MyBlog.Web.Features.UserManagement.UserWithRolesDto 100%
MyBlog.Web.Security.RoleClaimsHelper 91.8% 91.1%
Program 0% 0%

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

@github-actions

Copy link
Copy Markdown
Contributor

Code Coverage

Package Line Rate Branch Rate Complexity Health
Domain 0% 0% 38
Web 0% 0% 334
ServiceDefaults 0% 0% 18
Domain 0% 0% 38
Web 0% 0% 334
ServiceDefaults 0% 0% 18
AppHost 0% 100% 1
Domain 43% 0% 38
Web 5% 1% 334
ServiceDefaults 0% 0% 18
AppHost 0% 100% 1
Domain 43% 0% 38
Web 5% 1% 334
ServiceDefaults 0% 0% 18
Domain 93% 50% 38
Web 63% 65% 334
ServiceDefaults 0% 0% 18
Domain 93% 50% 38
Web 63% 65% 334
ServiceDefaults 0% 0% 18
Summary 23% (1000 / 4382) 21% (338 / 1644) 2342

@mpaulosky mpaulosky closed this Apr 19, 2026
@mpaulosky
mpaulosky deleted the squad/release-gate-workflow branch April 19, 2026 20:42
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.

2 participants