Sha256: c0b454e19bb255bf0ab7d15d3bac340c2764e964b8502dc0c06ea271f0e58342

Contents?: true

Size: 1.42 KB

Versions: 4

Compression:

Stored size: 1.42 KB

Contents

require 'json'
require_relative '../helper/http'
require_relative '../version'

module Gem
  module Release
    class Context
      class Github
        include Helper::Http

        URL = 'https://api.github.com/repos/%s/releases'

        MSGS = {
          error: 'GitHub returned %s (body: %p)'
        }.freeze

        attr_reader :repo, :data

        def initialize(repo, data)
          @repo = repo
          @data = data
        end

        def release
          # Create a release
          # https://developer.github.com/v3/repos/releases/#create-a-release
          resp = post(url, body, headers)
          status, body = resp
          # success status code is 201 (created) not 200 (ok)
          raise Abort, MSGS.fetch(:error) % [status, body] unless status == 201
        end

        private

          def url
            URL % repo
          end

          def body
            JSON.dump(
              tag_name: data[:tag_name],
              name: data[:name],
              body: data[:descr],
              prerelease: pre?(data[:version])
            )
          end

          def headers
            {
              'User-Agent'    => "gem-release/v#{::Gem::Release::VERSION}",
              'Content-Type'  => 'text/json',
              'Authorization' => "token #{data[:token]}",
            }
          end

          def pre?(version)
            Version::Number.new(version).pre?
          end
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
gem-release-2.2.4 lib/gem/release/context/github.rb
gem-release-2.2.3 lib/gem/release/context/github.rb
gem-release-2.2.3.alpha4 lib/gem/release/context/github.rb
gem-release-2.2.3.alpha3 lib/gem/release/context/github.rb