class GemHadar::GitHub::ReleaseCreator

)
name: ‘Version 1.0.0’
body: ‘Release notes here’,
target_commitish: ‘main’,
tag_name: ‘v1.0.0’,
release_data = creator.perform(
)
token: ‘ghp_mytoken’
repo: ‘myrepo’,
owner: ‘myorg’,
creator = GemHadar::GitHub::ReleaseCreator.new(
@example Creating a release
raise an error if the creation fails.
and processes the API response to either return the created release data or
the HTTP request setup, including appropriate headers and authentication,
enabling the creation of new releases for a specified repository. It handles
This class provides functionality to interact with the GitHub Releases API,
A client for creating GitHub releases via the GitHub API.

def initialize(owner:, repo:, token:, api_version: '2022-11-28')

Parameters:
  • api_version (String) -- the GitHub API version to use (defaults to '2022-11-28')
  • token (String) -- the personal access token for authentication
  • repo (String) -- the repository name
  • owner (String) -- the GitHub username or organization name
def initialize(owner:, repo:, token:, api_version: '2022-11-28')
  @owner       = owner
  @repo        = repo
  @token       = token
  @api_version = api_version
end

def perform(tag_name:, target_commitish:, body:, name: tag_name, draft: false, prerelease: false)

Raises:
  • (RuntimeError) - if the GitHub API request fails with a non-success status code

Returns:
  • (JSON::GenericObject) - the parsed response data from the GitHub API containing

Parameters:
  • prerelease (Boolean) -- whether to mark the release as a pre-release (defaults to false)
  • draft (Boolean) -- whether to create a draft release (defaults to false)
  • name (String) -- the name of the release (defaults to tag_name)
  • body (String) -- the release notes or description content
  • target_commitish (String) -- the commit SHA or branch name to use for the release
  • tag_name (String) -- the name of the tag to associate with the release
def perform(tag_name:, target_commitish:, body:, name: tag_name, draft: false, prerelease: false)
  uri = URI("#{self.class.github_api_url}/repos/#@owner/#@repo/releases")
  headers = {
    "Accept"               => "application/vnd.github+json",
    "Authorization"        => "Bearer #@token",
    "Content-Type"         => "application/json",
    "X-GitHub-Api-Version" => @api_version,
    "User-Agent"           => [ GemHadar.name, GemHadar::VERSION ] * ?/,
  }
  data = {
    tag_name:,
    target_commitish:,
    body:,
    name:,
    draft:,
    prerelease:,
  }.compact
  response = Net::HTTP.post(uri, JSON(data), headers)
  case response
  when Net::HTTPSuccess
    JSON.parse(response.body, object_class: JSON::GenericObject)
  else
    error_data =
      begin
        JSON.pretty_generate(JSON.parse(response.body))
      rescue
        response.body
      end
    raise "Failed to create release. Status: #{response.code}\n\n#{error_data}"
  end
end