jackal-packagecloud 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CHANGELOG.md +2 -0
- data/CONTRIBUTING.md +25 -0
- data/LICENSE +13 -0
- data/README.md +45 -0
- data/jackal-packagecloud.gemspec +20 -0
- data/lib/jackal-packagecloud.rb +26 -0
- data/lib/jackal-packagecloud/pusher.rb +91 -0
- data/lib/jackal-packagecloud/version.rb +6 -0
- metadata +114 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 49bf239e0b146efd4a4678910ca810bfba664f4e
|
4
|
+
data.tar.gz: 7a041d7ead54355343cbcf7dcf704a2d8175fbe5
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: cbd09f803c3483f5a8a3531a14df61dbd41ccc62b28621f4bc01617a0d401b73e7f76a68b05b02302133bf90b8401f86da7fbe18319ce5f3dac36162e2caf44a
|
7
|
+
data.tar.gz: 646575f0cc4f0b96b0ea7ae648c6954c38ad4056b7b732645e3b50c1d5a752daa84e38305c595115ab98a3b6b4613ccbaec6885a450aa07fba38451c5251f083
|
data/CHANGELOG.md
ADDED
data/CONTRIBUTING.md
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
# Contributing
|
2
|
+
|
3
|
+
## Branches
|
4
|
+
|
5
|
+
### `master` branch
|
6
|
+
|
7
|
+
The master branch is the current stable released version.
|
8
|
+
|
9
|
+
### `develop` branch
|
10
|
+
|
11
|
+
The develop branch is the current edge of development.
|
12
|
+
|
13
|
+
## Pull requests
|
14
|
+
|
15
|
+
* https://github.com/carnivore-rb/jackal-packagecloud/pulls
|
16
|
+
|
17
|
+
Please base all pull requests of the `develop` branch. Merges to
|
18
|
+
`master` only occur through the `develop` branch. Pull requests
|
19
|
+
based on `master` will likely be cherry picked.
|
20
|
+
|
21
|
+
## Issues
|
22
|
+
|
23
|
+
Need to report an issue? Use the github issues:
|
24
|
+
|
25
|
+
* https://github.com/carnivore-rb/jackal-packagecloud/issues
|
data/LICENSE
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
Copyright 2015 Heavy Water
|
2
|
+
|
3
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
you may not use this file except in compliance with the License.
|
5
|
+
You may obtain a copy of the License at
|
6
|
+
|
7
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
|
9
|
+
Unless required by applicable law or agreed to in writing, software
|
10
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
See the License for the specific language governing permissions and
|
13
|
+
limitations under the License.
|
data/README.md
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
# Jackal Packagecloud
|
2
|
+
|
3
|
+
Jackal service to push packages to packagecloud.
|
4
|
+
|
5
|
+
## Configuration
|
6
|
+
|
7
|
+
Requires configured api_key / account_name for packagecloud in jackal config
|
8
|
+
|
9
|
+
```ruby
|
10
|
+
# ...
|
11
|
+
jackal do
|
12
|
+
packagecloud do
|
13
|
+
config do
|
14
|
+
api_key ENV['PACKAGECLOUD_API_KEY']
|
15
|
+
account_name ENV['PACKAGECLOUD_ACCOUNT_NAME']
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
```
|
20
|
+
|
21
|
+
Package assets are fetched from the configured asset store requiring
|
22
|
+
the asset store to be configured and available in running service.
|
23
|
+
|
24
|
+
## Payload structure
|
25
|
+
|
26
|
+
```json
|
27
|
+
{
|
28
|
+
"data": {
|
29
|
+
"packagecloud": {
|
30
|
+
"packages": [
|
31
|
+
{
|
32
|
+
"distro_description": "ubuntu/precise",
|
33
|
+
"path": "asset_store/key/path/foo.deb",
|
34
|
+
"repo": "my_repo"
|
35
|
+
}
|
36
|
+
]
|
37
|
+
}
|
38
|
+
}
|
39
|
+
}
|
40
|
+
```
|
41
|
+
|
42
|
+
# Info
|
43
|
+
|
44
|
+
* Repository: https://github.com/carnivore-rb/jackal-packagecloud
|
45
|
+
* IRC: Freenode @ #carnivore
|
@@ -0,0 +1,20 @@
|
|
1
|
+
$LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__)) + '/lib/'
|
2
|
+
require 'jackal-packagecloud/version'
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = 'jackal-packagecloud'
|
5
|
+
s.version = Jackal::Packagecloud::VERSION.version
|
6
|
+
s.summary = 'Jackal packagecloud'
|
7
|
+
s.author = 'Heavywater'
|
8
|
+
s.email = 'support@heavywater.io'
|
9
|
+
s.homepage = 'http://github.com/carnivore-rb/jackal-packagecloud'
|
10
|
+
s.description = 'Jackal packagecloud Integration'
|
11
|
+
s.license = 'Apache 2.0'
|
12
|
+
s.require_path = 'lib'
|
13
|
+
s.add_dependency 'jackal', '>= 0.3.18', '< 1.0'
|
14
|
+
s.add_dependency 'jackal-assets'
|
15
|
+
s.add_dependency 'packagecloud-ruby', '~> 0.2.19'
|
16
|
+
|
17
|
+
s.add_development_dependency 'carnivore-actor'
|
18
|
+
|
19
|
+
s.files = Dir['lib/**/*'] + %w(jackal-packagecloud.gemspec README.md CHANGELOG.md CONTRIBUTING.md LICENSE)
|
20
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'jackal'
|
2
|
+
|
3
|
+
module Jackal
|
4
|
+
# Jackal Cloud integration
|
5
|
+
module Packagecloud
|
6
|
+
autoload :Pusher, 'jackal-packagecloud/pusher'
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
require 'jackal-packagecloud/version'
|
11
|
+
|
12
|
+
Jackal.service(
|
13
|
+
:packagecloud,
|
14
|
+
:description => 'Upload packages to packagecloud',
|
15
|
+
:configuration => {
|
16
|
+
:account_name => {
|
17
|
+
:description => 'packagecloud account name',
|
18
|
+
},
|
19
|
+
:api_key => {
|
20
|
+
:description => 'packagecloud API key'
|
21
|
+
},
|
22
|
+
:default_repo => {
|
23
|
+
:description => 'Default repository to push packages'
|
24
|
+
}
|
25
|
+
}
|
26
|
+
)
|
@@ -0,0 +1,91 @@
|
|
1
|
+
require 'jackal-packagecloud'
|
2
|
+
|
3
|
+
module Jackal
|
4
|
+
module Packagecloud
|
5
|
+
# Push packages to package cloud
|
6
|
+
class Pusher < Jackal::Callback
|
7
|
+
|
8
|
+
# Load up the package cloud library
|
9
|
+
def setup(*_)
|
10
|
+
require 'packagecloud'
|
11
|
+
# This is a stupid fix for JSON dumping due to pure json lib
|
12
|
+
# that's being included via the require above
|
13
|
+
Fixnum.class_eval do
|
14
|
+
def to_json(*args)
|
15
|
+
to_s
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
# Config / payload requirements for Message to be considered valid
|
21
|
+
# and for execute method to run
|
22
|
+
#
|
23
|
+
# @param message [Carnivore::Message]
|
24
|
+
# @return [TrueClass, FalseClass]
|
25
|
+
def valid?(message)
|
26
|
+
super do |payload|
|
27
|
+
!payload.fetch(:data, :packagecloud, :packages, []).empty?
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
# Process payload and push packages to package cloud
|
32
|
+
#
|
33
|
+
# @param message [Carnivore::Message]
|
34
|
+
def execute(message)
|
35
|
+
failure_wrap(message) do |payload|
|
36
|
+
packages = payload.get(:data, :packagecloud, :packages)
|
37
|
+
upload_packages(packages)
|
38
|
+
|
39
|
+
payload.set(:data, :packagecloud, :uploaded,
|
40
|
+
payload[:data][:packagecloud].delete(:packages)
|
41
|
+
)
|
42
|
+
job_completed(:packagecloud_pusher, payload, message)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
# Create a new package cloud client instance
|
47
|
+
#
|
48
|
+
# @return [::Packagecloud::Client]
|
49
|
+
def packagecloud_client
|
50
|
+
[:account_name, :api_key].each do |k|
|
51
|
+
unless(config[k])
|
52
|
+
raise "Missing expected configuration item: `#{k}`"
|
53
|
+
end
|
54
|
+
end
|
55
|
+
::Packagecloud::Client.new(
|
56
|
+
::Packagecloud::Credentials.new(
|
57
|
+
config[:account_name],
|
58
|
+
config[:api_key]
|
59
|
+
)
|
60
|
+
)
|
61
|
+
end
|
62
|
+
|
63
|
+
# Upload packages to packagecloud
|
64
|
+
#
|
65
|
+
# @param packages [Array<Hash>] package list
|
66
|
+
# @note `:path` is required and references the asset store.
|
67
|
+
# `:distro_description` and `:repo` are optional. Default
|
68
|
+
# `:repo` value is pulled for the configuration or set to `"test"`.
|
69
|
+
# @return [TrueClass]
|
70
|
+
def upload_packages(packages)
|
71
|
+
client = packagecloud_client
|
72
|
+
packages.each do |pkg|
|
73
|
+
# distro_description can be nil for gems and source tarballs
|
74
|
+
# valid version strings (eg: ubuntu/precise):
|
75
|
+
# https://packagecloud.io/docs#os_distro_version
|
76
|
+
description, path = pkg[:distro_description], pkg[:path]
|
77
|
+
|
78
|
+
event!(:info, :info => "Pushing package to packagecloud: #{File.basename(path)}")
|
79
|
+
|
80
|
+
distro_id = description && client.find_distribution_id(description)
|
81
|
+
package = ::Packagecloud::Package.new(*[asset_store.get(path), distro_id].compact)
|
82
|
+
client.put_package(pkg.fetch(:repo, config.fetch(:default_repo, 'test')), package)
|
83
|
+
|
84
|
+
event!(:info, :info => "Completed pushing package to packagecloud: #{File.basename(path)}")
|
85
|
+
end
|
86
|
+
true
|
87
|
+
end
|
88
|
+
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
metadata
ADDED
@@ -0,0 +1,114 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: jackal-packagecloud
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Heavywater
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-07-18 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: jackal
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.3.18
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '1.0'
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 0.3.18
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '1.0'
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: jackal-assets
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '0'
|
40
|
+
type: :runtime
|
41
|
+
prerelease: false
|
42
|
+
version_requirements: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '0'
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: packagecloud-ruby
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - "~>"
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 0.2.19
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - "~>"
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: 0.2.19
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: carnivore-actor
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '0'
|
68
|
+
type: :development
|
69
|
+
prerelease: false
|
70
|
+
version_requirements: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '0'
|
75
|
+
description: Jackal packagecloud Integration
|
76
|
+
email: support@heavywater.io
|
77
|
+
executables: []
|
78
|
+
extensions: []
|
79
|
+
extra_rdoc_files: []
|
80
|
+
files:
|
81
|
+
- CHANGELOG.md
|
82
|
+
- CONTRIBUTING.md
|
83
|
+
- LICENSE
|
84
|
+
- README.md
|
85
|
+
- jackal-packagecloud.gemspec
|
86
|
+
- lib/jackal-packagecloud.rb
|
87
|
+
- lib/jackal-packagecloud/pusher.rb
|
88
|
+
- lib/jackal-packagecloud/version.rb
|
89
|
+
homepage: http://github.com/carnivore-rb/jackal-packagecloud
|
90
|
+
licenses:
|
91
|
+
- Apache 2.0
|
92
|
+
metadata: {}
|
93
|
+
post_install_message:
|
94
|
+
rdoc_options: []
|
95
|
+
require_paths:
|
96
|
+
- lib
|
97
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
98
|
+
requirements:
|
99
|
+
- - ">="
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
103
|
+
requirements:
|
104
|
+
- - ">="
|
105
|
+
- !ruby/object:Gem::Version
|
106
|
+
version: '0'
|
107
|
+
requirements: []
|
108
|
+
rubyforge_project:
|
109
|
+
rubygems_version: 2.2.2
|
110
|
+
signing_key:
|
111
|
+
specification_version: 4
|
112
|
+
summary: Jackal packagecloud
|
113
|
+
test_files: []
|
114
|
+
has_rdoc:
|