Class: GemHadar::GitHub::ReleaseCreator
- Inherits:
-
Object
- Object
- GemHadar::GitHub::ReleaseCreator
- Defined in:
- lib/gem_hadar/github.rb
Overview
A client for creating GitHub releases via the GitHub API.
This class provides functionality to interact with the GitHub Releases API, enabling the creation of new releases for a specified repository. It handles the HTTP request setup, including appropriate headers and authentication, and processes the API response to either return the created release data or raise an error if the creation fails.
Class Attribute Summary collapse
-
.github_api_url ⇒ Object
Returns the value of attribute github_api_url.
Instance Method Summary collapse
-
#initialize(owner:, repo:, token:, api_version: '2022-11-28') ⇒ ReleaseCreator
constructor
A new instance of ReleaseCreator.
- #perform(tag_name:, target_commitish:, body:, name: tag_name, draft: false, prerelease: false) ⇒ Object
Constructor Details
#initialize(owner:, repo:, token:, api_version: '2022-11-28') ⇒ ReleaseCreator
Returns a new instance of ReleaseCreator.
33 34 35 36 37 38 |
# File 'lib/gem_hadar/github.rb', line 33 def initialize(owner:, repo:, token:, api_version: '2022-11-28') @owner = owner @repo = repo @token = token @api_version = api_version end |
Class Attribute Details
.github_api_url ⇒ Object
Returns the value of attribute github_api_url.
29 30 31 |
# File 'lib/gem_hadar/github.rb', line 29 def github_api_url @github_api_url end |
Instance Method Details
#perform(tag_name:, target_commitish:, body:, name: tag_name, draft: false, prerelease: false) ⇒ Object
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/gem_hadar/github.rb', line 40 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 |