Milestone
Source:
src/GitHub/Milestone.ts
A GitHub milestone.
Milestone manages repository milestones for tracking issues and pull
requests. Milestones are created on first deploy and updated in place on
subsequent deploys when properties change.
Authentication is resolved via the GitHubCredentials service supplied by
GitHub.providers() (env, stored PAT, gh CLI, or OAuth). The token needs
repo scope for private repositories or public_repo for public ones.
Creating Milestones
Section titled “Creating Milestones”Basic Milestone
const v1 = yield* GitHub.Milestone("v1", { owner: "my-org", repository: "my-repo", title: "v1.0.0", description: "First stable release",});Milestone with Due Date
yield* GitHub.Milestone("sprint-1", { owner: "my-org", repository: "my-repo", title: "Sprint 1", description: "Complete user authentication", dueOn: "2026-12-31",});Updating Milestones
Section titled “Updating Milestones”Deploy with the same logical ID and different properties to update the existing milestone in place.
yield* GitHub.Milestone("v2", { owner: "my-org", repository: "my-repo", title: "v2.0.0", description: "Updated: API redesign and performance improvements", dueOn: "2027-06-30",});Closing and Reopening
Section titled “Closing and Reopening”Close a Milestone
yield* GitHub.Milestone("v1", { owner: "my-org", repository: "my-repo", title: "v1.0.0", state: "closed",});Reopen a Milestone
yield* GitHub.Milestone("v1", { owner: "my-org", repository: "my-repo", title: "v1.0.0", state: "open",});Replacing on Title Change
Section titled “Replacing on Title Change”Changing the title creates a new milestone and deletes the old one.
// First deploy creates "Q1 2026"const milestone = yield* GitHub.Milestone("q1", { owner: "my-org", repository: "my-repo", title: "Q1 2026",});
// Later deploy with same logical ID but different title replaces itconst milestone = yield* GitHub.Milestone("q1", { owner: "my-org", repository: "my-repo", title: "Q1 2027",});Wiring with Other Resources
Section titled “Wiring with Other Resources”import * as Output from "alchemy/Output";
const repo = yield* GitHub.Repository("api", { owner: "my-org", name: "api", autoInit: true,});
yield* GitHub.Milestone("launch", { owner: repo.owner!, repository: Output.map(repo.fullName, (fullName) => fullName.split("/")[1]!), title: "Initial Launch", dueOn: "2026-12-31",});