GHReleaseBuilder.java
package org.kohsuke.github;
import java.io.IOException;
/**
* Builder pattern for creating a {@link GHRelease}
*
* @see GHRepository#createRelease(String) GHRepository#createRelease(String)
*/
public class GHReleaseBuilder {
private final GHRepository repo;
private final Requester builder;
/**
* Instantiates a new Gh release builder.
*
* @param ghRepository
* the gh repository
* @param tag
* the tag
*/
public GHReleaseBuilder(GHRepository ghRepository, String tag) {
this.repo = ghRepository;
this.builder = repo.root.createRequest().method("POST");
builder.with("tag_name", tag);
}
/**
* Body gh release builder.
*
* @param body
* The release notes body.
* @return the gh release builder
*/
public GHReleaseBuilder body(String body) {
builder.with("body", body);
return this;
}
/**
* Specifies the commitish value that determines where the Git tag is created from. Can be any branch or commit SHA.
*
* @param commitish
* Defaults to the repository’s default branch (usually "main"). Unused if the Git tag already exists.
* @return the gh release builder
*/
public GHReleaseBuilder commitish(String commitish) {
builder.with("target_commitish", commitish);
return this;
}
/**
* Optional.
*
* @param draft
* {@code true} to create a draft (unpublished) release, {@code false} to create a published one. Default
* is {@code false}.
* @return the gh release builder
*/
public GHReleaseBuilder draft(boolean draft) {
builder.with("draft", draft);
return this;
}
/**
* Name gh release builder.
*
* @param name
* the name of the release
* @return the gh release builder
*/
public GHReleaseBuilder name(String name) {
builder.with("name", name);
return this;
}
/**
* Optional
*
* @param prerelease
* {@code true} to identify the release as a prerelease. {@code false} to identify the release as a full
* release. Default is {@code false}.
* @return the gh release builder
*/
public GHReleaseBuilder prerelease(boolean prerelease) {
builder.with("prerelease", prerelease);
return this;
}
/**
* Optional
*
* @param categoryName
* the category of the discussion to be created for the release. Category should already exist
* @return the gh release builder
*/
public GHReleaseBuilder categoryName(String categoryName) {
builder.with("discussion_category_name", categoryName);
return this;
}
/**
* Create gh release.
*
* @return the gh release
* @throws IOException
* the io exception
*/
public GHRelease create() throws IOException {
return builder.withUrlPath(repo.getApiTailUrl("releases")).fetch(GHRelease.class).wrap(repo);
}
}