# frozen_string_literal: truemoduleOctokitclassClient# Methods for the Releases API## @see https://developer.github.com/v3/repos/releases/moduleReleases# List releases for a repository## @param repo [Integer, String, Repository, Hash] A GitHub repository# @return [Array<Sawyer::Resource>] A list of releases# @see https://developer.github.com/v3/repos/releases/#list-releases-for-a-repositorydefreleases(repo,options={})paginate"#{Repository.pathrepo}/releases",optionsendaliaslist_releasesreleases# Create a release## @param repo [Integer, String, Repository, Hash] A GitHub repository# @param tag_name [String] Git tag from which to create release# @option options [String] :target_commitish Specifies the commitish value that determines where the Git tag is created from.# @option options [String] :name Name for the release# @option options [String] :body Content for release notes# @option options [Boolean] :draft Mark this release as a draft# @option options [Boolean] :prerelease Mark this release as a pre-release# @return [Sawyer::Resource] The release# @see https://developer.github.com/v3/repos/releases/#create-a-releasedefcreate_release(repo,tag_name,options={})opts=options.merge(tag_name: tag_name)post"#{Repository.pathrepo}/releases",optsend# Get a release## @param url [String] URL for the release as returned from .releases# @return [Sawyer::Resource] The release# @see https://developer.github.com/v3/repos/releases/#get-a-single-releasedefrelease(url,options={})geturl,optionsend# Update a release## @param url [String] URL for the release as returned from .releases# @option options [String] :tag_name Git tag from which to create release# @option options [String] :target_commitish Specifies the commitish value that determines where the Git tag is created from.# @option options [String] :name Name for the release# @option options [String] :body Content for release notes# @option options [Boolean] :draft Mark this release as a draft# @option options [Boolean] :prerelease Mark this release as a pre-release# @return [Sawyer::Resource] The release# @see https://developer.github.com/v3/repos/releases/#edit-a-releasedefupdate_release(url,options={})patchurl,optionsendaliasedit_releaseupdate_release# Delete a release## @param url [String] URL for the release as returned from .releases# @return [Boolean] Success or failure# @see https://developer.github.com/v3/repos/releases/#delete-a-releasedefdelete_release(url,options={})boolean_from_response(:delete,url,options)end# List release assets## @param release_url [String] URL for the release as returned from .releases# @return [Array<Sawyer::Resource>] A list of release assets# @see https://developer.github.com/v3/repos/releases/#list-assets-for-a-releasedefrelease_assets(release_url,options={})paginaterelease(release_url).rels[:assets].href,optionsend# Upload a release asset## @param release_url [String] URL for the release as returned from .releases# @param path_or_file [String] Path to file to upload# @option options [String] :content_type The MIME type for the file to upload# @option options [String] :name The name for the file# @return [Sawyer::Resource] The release asset# @see https://developer.github.com/v3/repos/releases/#upload-a-release-assetdefupload_asset(release_url,path_or_file,options={})file=path_or_file.respond_to?(:read)?path_or_file:File.new(path_or_file,'rb')options[:content_type]||=content_type_from_file(file)raiseOctokit::MissingContentTypeifoptions[:content_type].nil?unlessname=options[:name]name=File.basename(file.path)endupload_url=release(release_url).rels[:upload].href_template.expand(name: name)request:post,upload_url,file.read,parse_query_and_convenience_headers(options)ensurefile&.closeend# Get a single release asset### @param asset_url [String] URL for the asset as returned from .release_assets# @return [Sawyer::Resource] The release asset# @see https://developer.github.com/v3/repos/releases/#get-a-single-release-assetdefrelease_asset(asset_url,options={})get(asset_url,options)end# Update a release asset## @param asset_url [String] URL for the asset as returned from .release_assets# @option options [String] :name The name for the file# @option options [String] :label The download text for the file# @return [Sawyer::Resource] The release asset# @see https://developer.github.com/v3/repos/releases/#edit-a-release-assetdefupdate_release_asset(asset_url,options={})patch(asset_url,options)endaliasedit_release_assetupdate_release_asset# Delete a release asset## @param asset_url [String] URL for the asset as returned from .release_assets# @return [Boolean] Success or failure# @see https://developer.github.com/v3/repos/releases/#delete-a-release-assetdefdelete_release_asset(asset_url,options={})boolean_from_response(:delete,asset_url,options)end# Get the release for a given tag## @param repo [Integer, String, Repository, Hash] A GitHub repository# @param tag_name [String] the name for a tag# @return [Sawyer::Resource] The release# @see https://developer.github.com/v3/repos/releases/#get-a-release-by-tag-namedefrelease_for_tag(repo,tag_name,options={})get"#{Repository.pathrepo}/releases/tags/#{tag_name}",optionsend# Get the latest release## @param repo [Integer, String, Repository, Hash] A GitHub repository# @return [Sawyer::Resource] The release# @see https://developer.github.com/v3/repos/releases/#get-the-latest-releasedeflatest_release(repo,options={})get"#{Repository.pathrepo}/releases/latest",optionsendprivatedefcontent_type_from_file(file)require'mime/types'ifmime_type=MIME::Types.type_for(file.path).firstmime_type.content_typeendrescueLoadErrormsg='Please pass content_type or install mime-types gem to guess content type from file'raiseOctokit::MissingContentType,msgendendendend