# encoding: utf-8 module Github # The Releases API class Repos::Releases < API Github::require_all 'github_api/repos/releases', 'assets' VALID_RELEASE_PARAM_NAMES = %w[ tag_name target_commitish name body draft prerelease ].freeze # :nodoc: # Access to Repos::Releases::Assets API def assets(options = {}, &block) @assets ||= ApiFactory.new('Repos::Releases::Assets', current_options.merge(options), &block) end # List releases for a repository # # Users with push access to the repository will receive all releases # (i.e., published releases and draft releases). Users with pull access # will receive published releases only. # # = Examples # github = Github.new # github.repos.releases.list 'owner', 'repo' # github.repos.releases.list 'owner', 'repo' { |release| ... } # def list(*args) params = arguments(args, required: [:owner, :repo]).params response = get_request("/repos/#{owner}/#{repo}/releases", params) return response unless block_given? response.each { |el| yield el } end alias :all :list # Get a single release # # = Examples # github = Github.new # github.repos.releases.get 'owner', 'repo', 'id' # def get(*args) params = arguments(args, required: [:owner, :repo, :id]).params get_request("/repos/#{owner}/#{repo}/releases/#{id}" , params) end alias :find :get # Create a release # # = Inputs # * :tag_name - Required string # * :target_commitish - Optional string - Specifies the commitish # value that determines where the Git tag is created from. Can be # any branch or commit SHA. Defaults to the repository's default # branch (usually 'master'). Unused if the Git tag already exists. # * :name - Optional string # * :body - Optional string # * :draft - Optional boolean - true to create a draft # (unpublished) release, false to create # a published one. Default is false. # * :prerelease - Optional boolean - true to identify # the release as a prerelease. false to identify # the release as a full release. Default is false. # # = Examples # github = Github.new # github.repos.releases.create 'owner', 'repo', 'tag-name', # "tag_name": "v1.0.0", # "target_commitish": "master", # "name": "v1.0.0", # "body": "Description of the release", # "draft": false, # "prerelease": false # def create(*args) arguments(args, required: [:owner, :repo, :tag_name]) do sift VALID_RELEASE_PARAM_NAMES end params = arguments.params params['tag_name'] = tag_name post_request("/repos/#{owner}/#{repo}/releases", params) end # Edit a release # # = Inputs # * :tag_name - Required string # * :target_commitish - Optional string - Specifies the commitish # value that determines where the Git tag is created from. Can be # any branch or commit SHA. Defaults to the repository's default # branch (usually 'master'). Unused if the Git tag already exists. # * :name - Optional string # * :body - Optional string # * :draft - Optional boolean - true to create a draft # (unpublished) release, false to create # a published one. Default is false. # * :prerelease - Optional boolean - true to identify # the release as a prerelease. false to identify # the release as a full release. Default is false. # # = Examples # github = Github.new # github.repos.releases.edit 'owner', 'repo', 'id', # "tag_name": "v1.0.0", # "target_commitish": "master", # "name": "v1.0.0", # "body": "Description of the release", # "draft": false, # "prerelease": false # def edit(*args) arguments(args, required: [:owner, :repo, :id]) do sift VALID_RELEASE_PARAM_NAMES end params = arguments.params patch_request("/repos/#{owner}/#{repo}/releases/#{id}", params) end alias :update :edit # Delete a release # # Users with push access to the repository can delete a release. # # = Examples # github = Github.new # github.repos.releases.delete 'owner', 'repo', 'id' # def delete(*args) params = arguments(args, required: [:owner, :repo, :id]).params delete_request("/repos/#{owner}/#{repo}/releases/#{id}", params) end end # Repos::Statuses end # Github