aptly_cli 0.2.6 → 0.2.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- MjgxZjZkOWNiN2IzYTBmNjcwYjg0YzM1NTc5YmZjZDc1ZWM5ZDQ2NQ==
4
+ ZWM3OGM4ZGE3MTY0NGZkMzRkMzliNDk5MjE3ZjFhOTUyZjcxMmY2Mw==
5
5
  data.tar.gz: !binary |-
6
- YTBmMDI4NTI5MDNjNDJjM2U1YzMzZjRhNTQ2YTVlYWNlYjFlMmI2Yg==
6
+ N2QyYWZlNjdiMmMxMGUzODZjMjZkOTNmYTVjMTAxNTEzMTMwMDBlYQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- NWQxMzI2Yzg0YjFiZjI0OGE2MDI5M2ZjNDA2MWQzMjQxNjA3OWQ5OTM3ZTFl
10
- NWRkM2I5MjMzOTMwYWE4NzEwZWE1MTAxMTFlOGJmZDc5NzNiOGVlNGRkODlj
11
- ZWM4ZjgyNGM4MGQ0YmE3MDBkNjA5ZjhjODdlNTM5YTQ3MmMyMGU=
9
+ NGEwZmI1MTMxNDg4ZDJhNWYwMjI3MDY1MjM3MjJkOTZkYjJhM2Y3YmQ4ZGY5
10
+ MDNmZDlhNTI4OTY0NDQzMGVkYjA0Y2YyMDI5ZTUxYzBmMDFlZTVmMGY3ZGUz
11
+ OTgyYmJkNGEyNTdkYTAyNGQ5ZDBjNWNjODJlYjc2ZmZiNzZmMWI=
12
12
  data.tar.gz: !binary |-
13
- YTA2NTJhMjZjYjhkMTBkMzM0ZGNiNzllNjkyMDFlMDIzNDg3NDY2MWYwNjYx
14
- NmQ4OTJjNmVmZDE4NzEyM2I2ZTI3MjIzODE2NGQ4YThjOGZjYTA2MjEzMzFi
15
- YWE0MzJmMjQzNjVlM2Y0MGM2ZWNkYThiNWQ4ZWZkOGNlZTg5MTc=
13
+ NzgxN2JlMGY4N2EzYTBiNDExMTAxYTcyMDkwZWMxNjQ5OWRmMzY1ODJmY2Uy
14
+ YzYxMWU1ZDQ2MTc1ZDhlNWVkMThkZDMzNWUwY2FhNzAzNTVjNjEwNWJjNzk4
15
+ NDM2MDlkYWFkZmQwYjAxOWZiOWM4MjcxNjFlODQwMDc3NDFiNTE=
data/.travis.yml CHANGED
@@ -1,9 +1,27 @@
1
+ sudo: required
2
+
1
3
  language: ruby
4
+
5
+ services:
6
+ - docker
7
+
8
+ before_install:
9
+ - rake docker_build
10
+ - rake docker_run
11
+ - docker ps -a
12
+
13
+ script:
14
+ - bundle exec rake test
15
+
16
+ after_script:
17
+ - rake docker_show_logs
18
+
2
19
  rvm:
3
20
  - 1.9.3
4
21
  - 2.2.0
5
22
  - 2.2.4
6
23
  - 2.3.0
24
+
7
25
  deploy:
8
26
  provider: rubygems
9
27
  api_key:
data/Dockerfile ADDED
@@ -0,0 +1,19 @@
1
+ FROM debian:jessie
2
+
3
+ EXPOSE 8080
4
+
5
+ RUN echo "deb http://repo.aptly.info/ squeeze main" > /etc/apt/sources.list.d/aptly.list; \
6
+ apt-key adv --keyserver keys.gnupg.net --recv-keys 2A194991; \
7
+ apt-get update; \
8
+ apt-get install aptly curl xz-utils bzip2 gnupg wget graphviz -y --force-yes; \
9
+ wget --quiet http://mirror.as24220.net/pub/ubuntu-archive/pool/main/z/zeitgeist/zeitgeist_0.9.0-1_all.deb -O /tmp/zeitgeist_0.9.0-1_all.deb; \
10
+ wget --quiet http://mirror.as24220.net/pub/ubuntu-archive/pool/main/z/zsh/zsh_5.1.1-1ubuntu1_i386.deb -O /tmp/zsh_5.1.1-1ubuntu1_i386.deb
11
+
12
+ ADD ./test/fixtures/aptly.conf /etc/aptly.conf
13
+
14
+ RUN aptly repo create testrepo
15
+ RUN aptly repo create testrepo20
16
+ RUN aptly repo add testrepo /tmp/zeitgeist_0.9.0-1_all.deb
17
+ RUN aptly repo add testrepo20 /tmp/zsh_5.1.1-1ubuntu1_i386.deb
18
+
19
+ CMD /usr/bin/aptly api serve
data/README.md CHANGED
@@ -79,6 +79,22 @@ After checking out the repo, run `bin/setup` to install dependencies. Then, run
79
79
 
80
80
  To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release` to create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
81
81
 
82
+ Ruby Minitest are impleneted using Docker container for functional tests
83
+
84
+ Rake tasks available:
85
+
86
+ ```bash
87
+ rake build # Build aptly_cli-<version>.gem into the pkg directory
88
+ rake docker_build # Docker build image
89
+ rake docker_list_aptly # List Docker Aptly running containers
90
+ rake docker_run # Start Aptly Docker container on port 8082
91
+ rake docker_stop # Stop running Aptly Docker containers
92
+ rake install # Build and install aptly_cli-<version>.gem into system gems
93
+ rake install:local # Build and install aptly_cli-<version>.gem into system gems without network access
94
+ rake test # Run tests
95
+ ```
96
+
97
+
82
98
  ## Contributing
83
99
 
84
100
  1. Fork it ( https://github.com/[my-github-username]/aptly_cli/fork )
data/Rakefile CHANGED
@@ -10,3 +10,33 @@ Rake::TestTask.new do |t|
10
10
  end
11
11
 
12
12
  task default: :test
13
+
14
+ desc "Docker build image"
15
+ task :docker_build do
16
+ sh %{docker build -t sepulworld/aptly_api .}
17
+ end
18
+
19
+ desc "List Docker Aptly running containers"
20
+ task :docker_list_aptly do
21
+ sh %{docker ps --filter ancestor='sepulworld/aptly_api' --format="{{.ID}}"}
22
+ end
23
+
24
+ desc "Stop running Aptly Docker containers"
25
+ task :docker_stop do
26
+ sh %{docker stop $(docker ps --filter ancestor='sepulworld/aptly_api' --format="{{.ID}}")}
27
+ end
28
+
29
+ desc "Start Aptly Docker container on port 8082"
30
+ task :docker_run do
31
+ sh %{docker run -d -p 8082:8080 sepulworld/aptly_api /bin/sh -c "aptly api serve"}
32
+ end
33
+
34
+ desc "Show running Aptly process Docker stdout logs"
35
+ task :docker_show_logs do
36
+ sh %{docker logs $(docker ps --filter ancestor='sepulworld/aptly_api' --format="{{.ID}}")}
37
+ end
38
+
39
+ desc "Restart Aptly docker container"
40
+ task :docker_restart => [:docker_stop, :docker_run] do
41
+ puts "Restarting docker Aptly container"
42
+ end
data/bin/aptly-cli CHANGED
@@ -89,7 +89,7 @@ command :repo_edit do |c|
89
89
  c.syntax = 'aptly-cli repo_edit [options]'
90
90
  c.summary = 'Edit a local repository metadata, requires --name'
91
91
  c.description = 'Edit a local repository metadata, requires --name'
92
- c.example 'description', 'aptly-cli repo_edit --name megatronsoftware --default_distribution trusty'
92
+ c.example 'Change default distribution', 'aptly-cli repo_edit --name megatronsoftware --default_distribution trusty'
93
93
  c.option '--name NAME', String, 'Local repository name, required'
94
94
  c.option '--comment COMMENT', String, 'Edit repository comment'
95
95
  c.option '--default_distribution DISTRIBUTION', String, 'Edit DefaultDistribution for repo'
@@ -182,7 +182,7 @@ command :publish_drop do |c|
182
182
  c.syntax = 'aptly-cli publish_drop [options]'
183
183
  c.summary = 'Delete published repository, clean up files in published directory.'
184
184
  c.description = 'Delete published repository'
185
- c.example 'Delete publish repository called ', 'aptly-cli repo_list'
185
+ c.example 'Delete publish repository prefix precisetest', 'aptly-cli publish_drop --distribution precisetest'
186
186
  c.option '--prefix PREFIX', String, 'prefix, optional'
187
187
  c.option '--distribution DISTRIBUTION', String, 'distribution'
188
188
  c.option '--force', 'force published repository removal even if component cleanup fails'
@@ -207,19 +207,19 @@ command :publish_repo do |c|
207
207
  c.syntax = 'aptly-cli publish_repo [options]'
208
208
  c.summary = 'Publish local repository or snapshot under specified prefix. Storage might be passed in prefix as well, e.g. s3:packages/. To supply empty prefix, just remove last part (POST /api/publish/:prefix/<:repos>or<:snapshots>'
209
209
  c.description = 'Publish local repository or snapshot under specified prefix'
210
- c.example 'description', 'aptly-cli publish_repo --sourcekind local --name precise/megatronsoftware trusty/rocksoftware22 --architectures i386 amd64'
211
- c.example 'description', 'aptly-cli publish_repo --sourcekind local --name megatronsoftware --architectures i386 amd64 --forceoverwrite true'
212
- c.example 'description', 'aptly-cli publish_repo --sourcekind snapshot --name precise/rocksoftware300 --label test_snap'
210
+ c.example 'publish multiple repos as source', 'aptly-cli publish_repo --sourcekind local --name precise/megatronsoftware,trusty/rocksoftware22 --architectures i386 amd64'
211
+ c.example 'publish one repo, two archs, forceoverwrite', 'aptly-cli publish_repo --sourcekind local --name megatronsoftware --architectures i386 amd64 --forceoverwrite true'
212
+ c.example 'publish 2 snapshots into one publish point', 'aptly-cli publish_repo --sourcekind snapshot --name precise/rocksoftware300,main/rocksoftware200 --label test_snap'
213
213
  c.example 'description', 'aptly-cli publish_repo --sourcekind snapshot --name precise/rocksoftware300 --origin testorigin'
214
214
  c.example 'publish repo with signing keyring', 'aptly-cli publish_repo --sourcekind snapshot --name precise/rocksoftware300 --origin testorigin --gpg_keyring /etc/apt/trustdb.gpg'
215
- c.option '--name NAME', String, 'Local repository name with optional component, required'
215
+ c.option '--name NAME', Array, 'Local repository name with optional component, required'
216
216
  c.option '--sourcekind SOURCEKIND', String, 'Local for local repositories and snapshot for snapshots, required'
217
217
  c.option '--prefix PREFIX', String, 'prefix'
218
218
  c.option '--distribution DISTRIBUTION', String, 'Distribution name, if missing aptly would try to guess from sources'
219
219
  c.option '--label LABEL', String, 'value of Label: field in published repository stanza'
220
220
  c.option '--origin ORIGIN', String, 'value of Origin: field in published repository stanza'
221
221
  c.option '--forceoverwrite', 'when publishing, overwrite files in pool/ directory without notice'
222
- c.option '--architectures ARCHITECTURES', String, 'override list of published architectures'
222
+ c.option '--architectures ARCHITECTURES', Array, 'override list of published architectures'
223
223
  c.option '--gpg_skip', 'Don’t sign published repository'
224
224
  c.option '--gpg_batch', 'should be set if passing passphrase'
225
225
  c.option '--gpg_key GPGKEY', String, 'gpg key name (local to aptly server/user)'
@@ -256,10 +256,11 @@ command :publish_update do |c|
256
256
  c.option '--gpg_passphrase_file GPGPASSFILE', String, 'gpg passphrase file (local to aptly server/user)'
257
257
  c.action do |args, options|
258
258
  aptly_command = AptlyCli::AptlyPublish.new
259
- puts aptly_command.publish_update(options.snapshots, { :prefix => options.prefix, :distribution => options.distribution, :forceoverwrite => options.forceoverwrite,
259
+ puts aptly_command.publish_update({ :prefix => options.prefix, :distribution => options.distribution, :forceoverwrite => options.forceoverwrite,
260
260
  :skip => options.gpg_skip, :batch => options.gpg_batch, :gpgKey => options.gpg_key,
261
261
  :keyring => options.gpg_keyring, :secretKeyring => options.gpg_secret_keyring,
262
- :passphrase => options.gpg_passphrase, :passphraseFile => options.gpg_passphrase_file })
262
+ :passphrase => options.gpg_passphrase, :passphraseFile => options.gpg_passphrase_file,
263
+ :snapshots => options.snapshots})
263
264
  end
264
265
  end
265
266
 
@@ -1,3 +1,3 @@
1
1
  module AptlyCli
2
- VERSION = '0.2.6'.freeze
2
+ VERSION = '0.2.7'.freeze
3
3
  end
data/lib/aptly_publish.rb CHANGED
@@ -45,7 +45,15 @@ module AptlyCli
45
45
  self.class.get(uri)
46
46
  end
47
47
 
48
- def parse_names(names, label_type)
48
+ def _parse_snapshots(names)
49
+ snapshots_to_publish = []
50
+ names.each_pair do |k, v|
51
+ snapshots_to_publish << { Component: v.to_s, Name: k.to_s }
52
+ end
53
+ return snapshots_to_publish
54
+ end
55
+
56
+ def _parse_names(names, label_type)
49
57
  repos_to_publish = []
50
58
  names = [names] if names.is_a? String
51
59
  names.each do |k|
@@ -82,7 +90,7 @@ module AptlyCli
82
90
  def publish_repo(names, publish_options={})
83
91
  uri = '/publish'
84
92
  label_type = 'Name'
85
- repos = parse_names(names, label_type)
93
+ repos = _parse_names(names, label_type)
86
94
  gpg_options = parse_gpg_options(@@available_gpg_options,
87
95
  publish_options)
88
96
  @body = {}
@@ -99,16 +107,13 @@ module AptlyCli
99
107
  body: @body_json)
100
108
  end
101
109
 
102
- def publish_update(snapshots=[], publish_options={})
110
+ def publish_update(publish_options={})
103
111
  uri = '/publish'
104
- label_type = 'Snapshots'
105
112
  gpg_options = parse_gpg_options(@@available_gpg_options, publish_options)
106
113
  @body = {}
107
- unless snapshots.nil?
108
- snapshots = parse_names(snapshots, label_type)
109
- @body[:Snapshots] = snapshots
114
+ unless publish_options[:snapshots].nil?
115
+ @body[:Snapshots] = _parse_snapshots(publish_options[:snapshots])
110
116
  end
111
-
112
117
  unless gpg_options.empty?
113
118
  @body[:Signing] = gpg_options
114
119
  end
data/lib/aptly_repo.rb CHANGED
@@ -90,7 +90,6 @@ module AptlyCli
90
90
 
91
91
  def repo_upload(repo_options = { name: nil, dir: nil, file: nil,
92
92
  noremove: false, forcereplace: false })
93
-
94
93
  name = repo_options[:name]
95
94
  dir = repo_options[:dir]
96
95
  file = repo_options[:file]
@@ -97,7 +97,7 @@ module AptlyCli
97
97
  def snapshot_update(name, new_name, description=nil)
98
98
  uri = "/snapshots/#{name}"
99
99
 
100
- unless new_name.nil?
100
+ if new_name.nil?
101
101
  snap_name = name
102
102
  else
103
103
  snap_name = new_name
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aptly_cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.6
4
+ version: 0.2.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Zane
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-04-01 00:00:00.000000000 Z
11
+ date: 2016-04-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -125,6 +125,7 @@ files:
125
125
  - .ruby-style.yml
126
126
  - .travis.yml
127
127
  - CODE_OF_CONDUCT.md
128
+ - Dockerfile
128
129
  - Gemfile
129
130
  - LICENSE.txt
130
131
  - README.md
@@ -163,7 +164,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
163
164
  version: '0'
164
165
  requirements: []
165
166
  rubyforge_project:
166
- rubygems_version: 2.4.5
167
+ rubygems_version: 2.4.3
167
168
  signing_key:
168
169
  specification_version: 4
169
170
  summary: Command line client to interact with Aptly package management system