Method: PDK::Module::Release#run_publish

Defined in:
lib/pdk/module/release.rb

#run_publish(_opts, tarball_path) ⇒ Object



148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
# File 'lib/pdk/module/release.rb', line 148

def run_publish(_opts, tarball_path)
  validate_publish_options!
  raise PDK::CLI::ExitWithError, _('Module tarball %{tarball_path} does not exist') % { tarball_path: tarball_path } unless PDK::Util::Filesystem.file?(tarball_path)

  # TODO: Replace this code when the upload functionality is added to the forge ruby gem
  require 'base64'
  file_data = Base64.encode64(PDK::Util::Filesystem.read_file(tarball_path, open_args: 'rb'))

  PDK.logger.info _('Uploading tarball to puppet forge...')
  uri = URI(forge_upload_url)
  require 'net/http'
  request = Net::HTTP::Post.new(uri.path)
  request['Authorization'] = 'Bearer ' + forge_token
  request['Content-Type'] = 'application/json'
  data = { file: file_data }

  request.body = data.to_json

  require 'openssl'
  use_ssl = uri.class == URI::HTTPS
  response = Net::HTTP.start(uri.host, uri.port, use_ssl: use_ssl) do |http|
    http.request(request)
  end

  raise PDK::CLI::ExitWithError, _('Error uploading to Puppet Forge: %{result}') % { result: response.body } unless response.is_a?(Net::HTTPSuccess)
  PDK.logger.info _('Publish to Forge was successful')
end