export type ReleaseValidationCampaignArtifact = | { schema: "openclaw.release-validation-campaign/v1"; operation: "upsert"; tag: string; stableTrain: string; releaseUrl: string; releaseCommit: string; guidanceMainSha: string; title: string; body: string; } | { schema: "openclaw.release-validation-campaign/v1"; operation: "close"; tag: string; stableTrain: string; releaseUrl: string; }; type CampaignIssue = { number: number; state: string; title: string; body?: string | null; html_url: string; labels?: Array; pull_request?: object; }; type RepositoryParams = { owner: string; repo: string }; type CampaignIssueResponse = Promise<{ data: CampaignIssue }>; type CampaignIssuesApi = { listForRepo( params: RepositoryParams & { state: "open"; labels: string; per_page: number }, ): Promise; getLabel(params: RepositoryParams & { name: string }): Promise; createLabel( params: RepositoryParams & { name: string; color: string; description: string }, ): Promise; createComment( params: RepositoryParams & { issue_number: number; body: string }, ): Promise; create( params: RepositoryParams & { title: string; body: string; labels: string[] }, ): CampaignIssueResponse; update( params: RepositoryParams & { issue_number: number; title?: string; body?: string; state?: "open" | "closed"; state_reason?: "completed"; labels?: string[]; }, ): CampaignIssueResponse; get(params: RepositoryParams & { issue_number: number }): CampaignIssueResponse; }; export function validateReleaseValidationCampaignArtifact( artifact: unknown, options?: { expectedTag?: string; expectedReleaseCommit?: string; expectedGuidanceMainSha?: string; }, ): ReleaseValidationCampaignArtifact; /** * Structural subset of the Actions-provided Octokit client this publisher uses. * Declared locally so the script keeps a real contract without depending on * Octokit's generated types from a plain-Node script surface. */ export type ReleaseValidationCampaignGitHubClient = { paginate( method: CampaignIssuesApi["listForRepo"], params: Parameters[0], ): Promise; rest: { issues: CampaignIssuesApi }; }; export function runReleaseValidationCampaignPublish(params: { github: ReleaseValidationCampaignGitHubClient; context: { repo: { owner: string; repo: string } }; core: { info(message: string): void; setOutput?(name: string, value: string): void }; artifact: unknown; expectedTag?: string; expectedReleaseCommit?: string; expectedGuidanceMainSha?: string; campaignIssueNumber?: number; }): Promise<{ action: "create" | "update" | "close" | "noop"; issueNumber: number | undefined; issueUrl: string | undefined; }>;