Skip to content
Snippets Groups Projects
Commit 5f9ef160 authored by Gabriel Mazetto's avatar Gabriel Mazetto
Browse files

Add package promotion support

parent 5f97f0be
No related branches found
No related tags found
1 merge request!3Package Promotion
Loading
Loading
@@ -4,6 +4,7 @@ require 'excon'
require 'packagecloud/result'
require 'packagecloud/connection'
require 'packagecloud/version'
require 'uri'
 
module Packagecloud
SUPPORTED_EXTENSIONS = ["deb", "dsc", "gem", "rpm", "whl", "zip", "egg", "egg-info", "tar", "bz2", "Z", "gz"]
Loading
Loading
@@ -128,6 +129,17 @@ module Packagecloud
parsed_json_result(response)
end
 
def promote_package(repo, distro, distro_release, package_filename, destination)
assert_valid_repo_name(repo)
assert_valid_repo_name(destination)
url = "/api/v1/repos/#{username}/#{repo}/#{distro}/#{distro_release}/#{package_filename}/promote.json"
body = URI.encode_www_form("destination" => "#{username}/#{destination}")
response = post(url, body, "application/x-www-form-urlencoded")
parsed_json_result(response)
end
def put_package(repo, package, distro_version_id=nil)
assert_valid_repo_name(repo)
 
Loading
Loading
@@ -251,9 +263,10 @@ module Packagecloud
if content_type != nil
headers.merge!({ "Content-Type" => content_type })
end
request_params = { :method => method, :path => url, :headers => headers }
if body != nil
request_params.merge!({ :body => body })
request_params[:body] = body
end
 
@excon.request(request_params.merge({:read_timeout => connection.read_timeout, :write_timeout => connection.write_timeout }))
Loading
Loading
@@ -275,6 +288,5 @@ module Packagecloud
end
result
end
end
end
Loading
Loading
@@ -8,6 +8,7 @@ class PackagecloudServer < WEBrick::HTTPServlet::AbstractServlet
REPO = '{"name": "test_repo","created_at": "2014-08-30T03:51:37.000Z","url": "https://packagecloud.io/joedamato/test_repo","last_push_human": "about 2 months ago","package_count_human": "4 packages","private": true,"fqname": "joedamato/test_repo"}'
REPOS = "[#{REPO}]"
PACKAGES = '[{"name":"gitlab-ce","distro_version":"ubuntu/xenial","created_at":"2017-01-21T23:50:27.000Z","version":"8.15.5","release":"ce.0","epoch": 0,"private":true,"type":"deb","filename":"gitlab-ce_8.15.5-ce.0_amd64.deb","uploader_name":"joedamato","indexed":true,"repository_html_url":"/joedamato/test_repo","package_url":"/api/v1/repos/joedamato/test_repo/package/deb/ubuntu/xenial/gitlab-ce/amd64/8.15.5-ce.0.json","downloads_detail_url":"/api/v1/repos/joedamato/test_repo/package/deb/ubuntu/xenial/gitlab-ce/amd64/8.15.5-ce.0/stats/downloads/detail.json","downloads_series_url": "/api/v1/repos/joedamato/test_repo/package/deb/ubuntu/xenial/gitlab-ce/amd64/8.15.5-ce.0/stats/downloads/series/daily.json","downloads_count_url": "/api/v1/repos/joedamato/test_repo/package/deb/ubuntu/xenial/gitlab-ce/amd64/8.15.5-ce.0/stats/downloads/count.json","package_html_url": "/joedamato/test_repo/packages/ubuntu/xenial/gitlab-ce_8.15.5-ce.0_amd64.deb","promote_url":"/api/v1/repos/joedamato/test_repo/ubuntu/xenial/gitlab-ce_8.15.5-ce.0_amd64.deb/promote.json"}]'
PROMOTED = '{"name":"gitlab-ce","distro_version":"ubuntu/xenial","architecture":"amd64","repository":"public","size":"311509298","summary":null,"filename":"gitlab-ce_8.15.5-ce.0_amd64.deb","description":"GitLab Community Edition and GitLab CI (including NGINX, Postgres, Redis)","dependencies":[{"context":"depends","dependencies":["openssh-server"]}],"md5sum":"bd1427fbe923607536912d00e52c6a15","sha1sum":"b6acc61629026e33046122049213b29ecfc8c25a","sha256sum":"9cdcd68a5e7bb391a88d7279c9bf178aacba62c6827b9a0db0e4dd67604a33b5","sha512sum":"3b81d3e09fec4d0c4c97bfeccb4bb040b8c7b7913cc3aa7b6380ccd581f1eea08d605fbecf526f6e549e609242f4ba725d5ec8cdab01fe6ecbf3754e8cd93b84","private":false,"uploader_name":"joedamato","created_at":"2017-01-21T23:50:27.000Z","licenses":[],"version":"8.15.5","release":"ce.0","epoch":0,"indexed":false,"repository_url":"/api/v1/repos/joedamato/public","repository_html_url":"/joedamato/public","package_url":"/api/v1/repos/gabriel/public/package/deb/ubuntu/xenial/gitlab-ce/amd64/8.15.5-ce.0.json","versions_url":"/api/v1/repos/gabriel/public/package/deb/ubuntu/xenial/gitlab-ce/amd64/versions.json","promote_url":"/api/v1/repos/joedamato/test_repo/ubuntu/xenial/gitlab-ce_8.15.5-ce.0_amd64.deb/promote.json","total_downloads_count":0,"download_url":"https://packages.gitlab.com/joedamato/public/packages/ubuntu/xenial/gitlab-ce_8.15.5-ce.0_amd64.deb/download","package_html_url":"/joedamato/public/packages/ubuntu/xenial/gitlab-ce_8.15.5-ce.0_amd64.deb","downloads_detail_url":"/api/v1/repos/joedamato/public/package/deb/ubuntu/xenial/gitlab-ce/amd64/8.15.5-ce.0/stats/downloads/detail.json","downloads_series_url":"/api/v1/repos/joedamato/public/package/deb/ubuntu/xenial/gitlab-ce/amd64/8.15.5-ce.0/stats/downloads/series/daily.json","downloads_count_url":"/api/v1/repos/joedamato/public/package/deb/ubuntu/xenial/gitlab-ce/amd64/8.15.5-ce.0/stats/downloads/count.json","self_url":"/api/v1/repos/joedamato/public/package/deb/ubuntu/xenial/gitlab-ce/amd64/8.15.5-ce.0.json"}'
 
def json_response(request, response, body)
response.status = 200
Loading
Loading
@@ -73,6 +74,12 @@ class PackagecloudServer < WEBrick::HTTPServlet::AbstractServlet
elsif request.request_method == "GET"
json_response(request, response, PACKAGES)
end
when "/api/v1/repos/joedamato/test_repo/ubuntu/xenial/gitlab-ce_8.15.5-ce.0_amd64.deb/promote.json"
if request.request_method == "POST"
if request.query.key? "destination"
json_response(request, response, PROMOTED)
end
end
when "/api/v1/repos/joedamato/test_repo/packages/contents.json"
plain_response(request, response, PACKAGE_CONTENTS)
when "/api/v1/gem_version.json"
Loading
Loading
Loading
Loading
@@ -207,6 +207,20 @@ describe Packagecloud do
end
end
 
describe "package promotion" do
it "promotes an existing package to an existing repository" do
result = @client.promote_package("test_repo", "ubuntu", "xenial", "gitlab-ce_8.15.5-ce.0_amd64.deb", "public")
expect(result.succeeded).to be_truthy
expect(result.response).to be_a(Hash)
expect(result.response["name"]).to eq("gitlab-ce")
expect(result.response["distro_version"]).to eq("ubuntu/xenial")
expect(result.response["repository"]).to eq("public")
expect(result.response["filename"]).to eq("gitlab-ce_8.15.5-ce.0_amd64.deb")
expect(result.response["repository_html_url"]).to eq("/joedamato/public")
end
end
it "POST /api/v1/repos/joedamato/test_repo/packages/contents.json" do
dsc = 'spec/fixtures/natty_dsc/jake_1.0-7.dsc'
size = File.size(dsc)
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment