vx-aptly 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (75) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +23 -0
  3. data/Dockerfile +11 -0
  4. data/Gemfile +4 -0
  5. data/LICENSE.txt +22 -0
  6. data/README.md +29 -0
  7. data/Rakefile +36 -0
  8. data/bin/vx-aptly +4 -0
  9. data/doc/aptly.example +16 -0
  10. data/doc/aptly.upstart +27 -0
  11. data/doc/cloud-files.example +9 -0
  12. data/docker/install.sh +47 -0
  13. data/docker/my_init +57 -0
  14. data/docker/supervisord.conf +17 -0
  15. data/lib/vx/aptly.rb +33 -0
  16. data/lib/vx/aptly/app.rb +194 -0
  17. data/lib/vx/aptly/cli.sh +116 -0
  18. data/lib/vx/aptly/config.ru +3 -0
  19. data/lib/vx/aptly/mixin/capture.rb +37 -0
  20. data/lib/vx/aptly/package.rb +110 -0
  21. data/lib/vx/aptly/public/404.html +153 -0
  22. data/lib/vx/aptly/public/css/animate.css +3158 -0
  23. data/lib/vx/aptly/public/css/bootstrap.min.css +5 -0
  24. data/lib/vx/aptly/public/css/flat-ui.css +6007 -0
  25. data/lib/vx/aptly/public/css/theme.css +131 -0
  26. data/lib/vx/aptly/public/fonts/glyphicons/flat-ui-icons-regular.eot +0 -0
  27. data/lib/vx/aptly/public/fonts/glyphicons/flat-ui-icons-regular.svg +126 -0
  28. data/lib/vx/aptly/public/fonts/glyphicons/flat-ui-icons-regular.ttf +0 -0
  29. data/lib/vx/aptly/public/fonts/glyphicons/flat-ui-icons-regular.woff +0 -0
  30. data/lib/vx/aptly/public/fonts/glyphicons/selection.json +2106 -0
  31. data/lib/vx/aptly/public/fonts/lato/lato-black.eot +0 -0
  32. data/lib/vx/aptly/public/fonts/lato/lato-black.svg +4691 -0
  33. data/lib/vx/aptly/public/fonts/lato/lato-black.ttf +0 -0
  34. data/lib/vx/aptly/public/fonts/lato/lato-black.woff +0 -0
  35. data/lib/vx/aptly/public/fonts/lato/lato-bold.eot +0 -0
  36. data/lib/vx/aptly/public/fonts/lato/lato-bold.svg +5085 -0
  37. data/lib/vx/aptly/public/fonts/lato/lato-bold.ttf +0 -0
  38. data/lib/vx/aptly/public/fonts/lato/lato-bold.woff +0 -0
  39. data/lib/vx/aptly/public/fonts/lato/lato-bolditalic.eot +0 -0
  40. data/lib/vx/aptly/public/fonts/lato/lato-bolditalic.svg +4514 -0
  41. data/lib/vx/aptly/public/fonts/lato/lato-bolditalic.ttf +0 -0
  42. data/lib/vx/aptly/public/fonts/lato/lato-bolditalic.woff +0 -0
  43. data/lib/vx/aptly/public/fonts/lato/lato-italic.eot +0 -0
  44. data/lib/vx/aptly/public/fonts/lato/lato-italic.svg +4514 -0
  45. data/lib/vx/aptly/public/fonts/lato/lato-italic.ttf +0 -0
  46. data/lib/vx/aptly/public/fonts/lato/lato-italic.woff +0 -0
  47. data/lib/vx/aptly/public/fonts/lato/lato-light.eot +0 -0
  48. data/lib/vx/aptly/public/fonts/lato/lato-light.svg +4691 -0
  49. data/lib/vx/aptly/public/fonts/lato/lato-light.ttf +0 -0
  50. data/lib/vx/aptly/public/fonts/lato/lato-light.woff +0 -0
  51. data/lib/vx/aptly/public/fonts/lato/lato-regular.eot +0 -0
  52. data/lib/vx/aptly/public/fonts/lato/lato-regular.svg +4691 -0
  53. data/lib/vx/aptly/public/fonts/lato/lato-regular.ttf +0 -0
  54. data/lib/vx/aptly/public/fonts/lato/lato-regular.woff +0 -0
  55. data/lib/vx/aptly/public/img/favicon.ico +0 -0
  56. data/lib/vx/aptly/public/js/app.js +12 -0
  57. data/lib/vx/aptly/public/js/jquery_ujs.js +446 -0
  58. data/lib/vx/aptly/repo.rb +161 -0
  59. data/lib/vx/aptly/repo_publish.rb +165 -0
  60. data/lib/vx/aptly/version.rb +5 -0
  61. data/lib/vx/aptly/views/index.erb +94 -0
  62. data/lib/vx/aptly/views/layout.erb +54 -0
  63. data/lib/vx/aptly/views/repo_publishes/new.erb +49 -0
  64. data/lib/vx/aptly/views/repos/edit.erb +17 -0
  65. data/lib/vx/aptly/views/repos/errors.erb +5 -0
  66. data/lib/vx/aptly/views/repos/form.erb +26 -0
  67. data/lib/vx/aptly/views/repos/new.erb +17 -0
  68. data/lib/vx/aptly/views/repos/packages.erb +51 -0
  69. data/lib/vx/aptly/views/repos/show.erb +66 -0
  70. data/spec/lib/repo_publish_spec.rb +60 -0
  71. data/spec/spec_helper.rb +13 -0
  72. data/spec/support/aptly.conf +0 -0
  73. data/spec/support/home.rb +39 -0
  74. data/vx-aptly.gemspec +32 -0
  75. metadata +263 -0
@@ -0,0 +1,49 @@
1
+ <% @menu = [['Dashboard', '/'], ['New Repo Publish', "/repo/publishes/new", true]] %>
2
+
3
+ <%= form("/repo/publishes", :pub, class: "form-page", role: "form") %>
4
+
5
+ <% unless @pub.valid? %>
6
+ <div class="alert alert-danger">
7
+ <pre><%= @pub.error %></pre>
8
+ </div>
9
+ <% end %>
10
+
11
+ <% fieldset :pub do |f| %>
12
+ <div class="form-group">
13
+ <%= f.label :distribution, nil, class: "control-label" %>
14
+ <%= f.input :distribution, value: @pub.distribution, class: "form-control" %>
15
+ <p class="help-block">distribution name to publish</p>
16
+ </div>
17
+
18
+ <div class="form-group">
19
+ <%= f.label :prefix, nil, class: "control-label" %>
20
+ <%= f.input :prefix, value: @pub.prefix, class: "form-control" %>
21
+ <p class="help-block">filesystem prefix to publish</p>
22
+ </div>
23
+
24
+ <div class="form-group">
25
+ <%= f.label :architectures, nil, class: "control-label" %>
26
+ <%= f.input :architectures, value: @pub.architectures, class: "form-control" %>
27
+ <p class="help-block">list of architectures to consider during (comma-separated), default to all available</p>
28
+ </div>
29
+
30
+ <div class="form-group">
31
+ <%= f.label :availabled_repositories_to_publish, nil, class: "control-label" %>
32
+ <div class="well" style="padding:0;">
33
+ <% for repo in Vx::Aptly::Repo.all %>
34
+ <label class="checkbox" style="cursor:pointer;-webkit-user-select:none">
35
+ <input type="checkbox", autocomplete="off" name="pub[repos][]" value="<%= repo.name %>">
36
+ <%= repo.name %> (<%= repo.default_component %>)
37
+ </label>
38
+ <% end %>
39
+ </div>
40
+ </div>
41
+
42
+ <div class="form-group form-group-submit">
43
+ <button type="submit" class="btn btn-primary">
44
+ <%= ico 'plus' %> Create Repo Publish
45
+ </button>
46
+ </div>
47
+ <% end %>
48
+
49
+ </form>
@@ -0,0 +1,17 @@
1
+ <% @menu = [['Dashboard', '/'], [@repo.name, "/repos/#{@repo.name}"], ['Edit Repo', "/repos/#{@repo.name}/edit", true]] %>
2
+
3
+ <%= form("/repos/#{@repo.name}", :patch, class: "form-page") %>
4
+
5
+ <%= partial 'repos/errors' %>
6
+
7
+ <% fieldset :repo do |f| %>
8
+ <%= partial 'repos/form', locals: { f: f } %>
9
+
10
+ <div class="form-group form-group-submit">
11
+ <button type="submit" class="btn btn-primary">
12
+ <%= ico 'check' %> Update Repo
13
+ </button>
14
+ </div>
15
+ <% end %>
16
+
17
+ </form>
@@ -0,0 +1,5 @@
1
+ <% unless @repo.valid? %>
2
+ <div class="alert alert-danger">
3
+ <pre><%= @repo.error %></pre>
4
+ </div>
5
+ <% end %>
@@ -0,0 +1,26 @@
1
+ <div class="form-group">
2
+ <%= f.label :name, nil, class: "control-label" %>
3
+ <%= f.input :name, value: @repo.name, class: "form-control", disabled: @repo.new_record? ? nil : "disabled" %>
4
+ <% unless @repo.new_record? %>
5
+ <%= f.hidden :name, value: @repo.name %>
6
+ <% end %>
7
+ <p class="help-block">repository name</p>
8
+ </div>
9
+
10
+ <div class="form-group">
11
+ <%= f.label :comment, nil, class: "control-label" %>
12
+ <%= f.input :comment, value: @repo.comment, class: "form-control" %>
13
+ <p class="help-block">any text that would be used to described local repository</p>
14
+ </div>
15
+
16
+ <div class="form-group">
17
+ <%= f.label :default_distribution, nil, class: "control-label" %>
18
+ <%= f.input :default_distribution, value: @repo.default_distribution, class: "form-control" %>
19
+ <p class="help-block">default distribution when publishing</p>
20
+ </div>
21
+
22
+ <div class="form-group">
23
+ <%= f.label :default_component, nil, class: "control-label" %>
24
+ <%= f.input :default_component, value: @repo.default_component, class: "form-control" %>
25
+ <p class="help-block">default component when publishing</p>
26
+ </div>
@@ -0,0 +1,17 @@
1
+ <% @menu = [['Dashboard', '/'], ['Add Repo', '/repos/new', true]] %>
2
+
3
+ <%= form('/repos', :post, class: "form-page") %>
4
+
5
+ <%= partial 'repos/errors' %>
6
+
7
+ <% fieldset :repo do |f| %>
8
+ <%= partial 'repos/form', locals: { f: f } %>
9
+
10
+ <div class="form-group form-group-submit">
11
+ <button type="submit" class="btn btn-primary">
12
+ <%= ico 'plus' %> Create Repo
13
+ </button>
14
+ </div>
15
+ <% end %>
16
+
17
+ </form>
@@ -0,0 +1,51 @@
1
+ <% if @repo.packages.any? %>
2
+ <div class="panel panel-default">
3
+ <div class="panel-heading">
4
+ <div class="pull-right">
5
+ <form action="/repos/<%= @repo.name %>/packages" method="post" class="dropzone" enctype="multipart/form-data">
6
+ <span class="btn btn-sm btn-default btn-file">
7
+ <%= ico 'upload' %>
8
+ <input name="file" type="file" class="" onchange="javascript:this.form.submit()"/>
9
+ Upload a new package
10
+ </span>
11
+ </form>
12
+ </div>
13
+ <h6>
14
+ <%= @repo.number_of_packages %>
15
+ Packages in
16
+ <%= number_to_human_size @repo.packages.map{|i| i.size.to_i }.inject(0){|a,i| a+i } %>
17
+ </h6>
18
+ </div>
19
+
20
+ <table class="table table-hover table-btn-group">
21
+ <% for package in @repo.packages %>
22
+ <tr>
23
+ <td>
24
+ <small class=""><%= package.package %></small>
25
+ </td>
26
+ <td>
27
+ <small class=""><%= package.version %></small>
28
+ </td>
29
+ <td>
30
+ <small class=""><%= package.architecture %></small>
31
+ </td>
32
+ <td>
33
+ <small class=""><%= number_to_human_size package.size %></small>
34
+ </td>
35
+ <td>
36
+ <div class="btn-group">
37
+ <a class="btn btn-danger btn-xs" data-method="delete" href="/repos/<%= @repo.name %>/packages/<%= package.id %>" data-confirm="Are you sure?">
38
+ <%= ico 'cross' %>
39
+ Remove
40
+ </a>
41
+ </div>
42
+ </td>
43
+ </tr>
44
+ <% end %>
45
+ </table>
46
+ </div>
47
+ <% else %>
48
+ <div class="jumbotron">
49
+ <p class="lead">You have no packages in <%= @repo.name %></p>
50
+ </div>
51
+ <% end %>
@@ -0,0 +1,66 @@
1
+ <% @menu = [['Dashboard', '/'], [@repo.name, "/repos/#{@repo.name}", true]] %>
2
+
3
+ <div class="panel panel-default panel-repo">
4
+ <div class="panel-heading">
5
+ <div class="pull-right">
6
+ <div class="btn-group">
7
+ <a class="btn btn-sm btn-default" href="/repos/<%= @repo.name %>/edit">
8
+ <%= ico 'new' %>
9
+ Edit
10
+ </a>
11
+ <a href="/repos/<%= @repo.name %>" class="btn btn-danger btn-sm" data-method="DELETE" data-confirm="Are you sure?">
12
+ <%= ico 'cross' %>
13
+ Remove
14
+ </a>
15
+ </div>
16
+ </div>
17
+ <h6>Repo <%= @repo.name %></h6>
18
+ </div>
19
+
20
+ <div class="panel-body" style="font-size: 13px">
21
+ <div class="row">
22
+ <div class="col-xs-4">
23
+ Comment
24
+ </div>
25
+ <div class="col-xs-4">
26
+ <%= @repo.comment or "[empty]" %>
27
+ </div>
28
+ </div>
29
+ <div class="row">
30
+ <div class="col-xs-4">
31
+ Default Distribution
32
+ </div>
33
+ <div class="col-xs-4">
34
+ <%= @repo.default_distribution or "[empty]" %>
35
+ </div>
36
+ </div>
37
+ <div class="row">
38
+ <div class="col-xs-4">
39
+ Default Component
40
+ </div>
41
+ <div class="col-xs-4">
42
+ <%= @repo.default_component or "[empty]" %>
43
+ </div>
44
+ </div>
45
+ <% if @repo.publishes.any? %>
46
+ <div class="row">
47
+ <div class="col-xs-4">
48
+ Published to:
49
+ </div>
50
+ <div class="col-xs-4">
51
+ <%= @repo.publishes.map(&:id).join(", ") %>
52
+ </div>
53
+ </div>
54
+ <% end %>
55
+ </div>
56
+
57
+ <div class="panel-footer" style="">
58
+ <p class="repo-push" style="margin-bottom: 0">
59
+ # Using this command to push files in repo
60
+ <br/>
61
+ $ tar -c DIR | curl --fail -k -XPOST -F file=@- <%= ENV['HTTPS'] ? 'https://' : 'http://' %><%= request.host %>/repos/<%= @repo.name %>/push
62
+ </p>
63
+ </div>
64
+ </div>
65
+
66
+ <div data-fetch="/repos/<%= @repo.name %>/packages"></div>
@@ -0,0 +1,60 @@
1
+ require 'spec_helper'
2
+
3
+ describe Vx::Aptly::RepoPublish do
4
+
5
+ it "should create poublish" do
6
+ fresh_test_home
7
+
8
+ repo1 = Vx::Aptly::Repo.new name: "foo", default_component: "main"
9
+ repo1.create
10
+ assert_equal true, repo1.valid?
11
+
12
+ repo2 = Vx::Aptly::Repo.new name: "bar", default_component: "contrib"
13
+ repo2.create
14
+ assert_equal true, repo2.valid?
15
+
16
+ pub1 = Vx::Aptly::RepoPublish.new prefix: "foo"
17
+ pub1.repos = [{name: "foo"}]
18
+ pub1.create
19
+ assert_equal true, pub1.valid?
20
+
21
+ pub2 = Vx::Aptly::RepoPublish.new prefix: "bar"
22
+ pub2.repos = [{name: "bar"}]
23
+ pub2.create
24
+ assert_equal true, pub2.valid?
25
+
26
+ assert_equal ["foo/ubuntu"], repo1.publishes.map(&:id)
27
+ assert_equal ["bar/ubuntu"], repo2.publishes.map(&:id)
28
+ end
29
+
30
+ it "should create multicomponent publish" do
31
+ fresh_test_home
32
+
33
+ repo1 = Vx::Aptly::Repo.new name: "foo", default_component: "main", comment: "test comment"
34
+ repo1.create
35
+ assert_equal true, repo1.valid?
36
+
37
+ repo2 = Vx::Aptly::Repo.new name: "bar", default_component: "contrib"
38
+ repo2.create
39
+ assert_equal true, repo2.valid?
40
+
41
+ repo3 = Vx::Aptly::Repo.new name: "baz", default_component: "free"
42
+ repo3.create
43
+ assert_equal true, repo3.valid?
44
+
45
+ pub = Vx::Aptly::RepoPublish.new
46
+ pub.repos = [ repo1.name, repo2.name, repo3.name ]
47
+ pub.create
48
+ assert_equal true, pub.valid?
49
+
50
+ pub = Vx::Aptly::RepoPublish.find("ubuntu")
51
+ refute_nil pub
52
+
53
+ assert_equal [["bar", "contrib"], ["baz", "free"], ["foo", "main"]], pub.repos.map(&:to_a)
54
+
55
+ assert_equal ["./ubuntu"], repo1.publishes.map(&:id)
56
+ assert_equal ["./ubuntu"], repo2.publishes.map(&:id)
57
+ assert_equal ["./ubuntu"], repo3.publishes.map(&:id)
58
+ end
59
+
60
+ end
@@ -0,0 +1,13 @@
1
+ ENV['RACK_ENV'] = 'test'
2
+
3
+ require 'minitest/spec'
4
+ require 'minitest/autorun'
5
+ require "minitest/reporters"
6
+
7
+ require File.expand_path("../../lib/vx/aptly", __FILE__)
8
+ require 'support/home'
9
+
10
+ include Vx::Aptly::TestHelper
11
+ setup_test_home
12
+
13
+ Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new
File without changes
@@ -0,0 +1,39 @@
1
+ require 'fileutils'
2
+
3
+ module Vx
4
+ module Aptly
5
+ module TestHelper
6
+
7
+ def setup_test_home
8
+ ENV['HOME'] = fresh_test_home
9
+ end
10
+
11
+ def fresh_test_home
12
+ tmp = Dir.tmpdir + "/vx-aptly-test"
13
+ FileUtils.rm_rf tmp
14
+ FileUtils.mkdir_p tmp
15
+ File.open("#{tmp}/.aptly.conf", 'w') do |io|
16
+ io.write <<-eos
17
+ {
18
+ "rootDir": "#{tmp}/.aptly",
19
+ "downloadConcurrency": 4,
20
+ "downloadSpeedLimit": 0,
21
+ "architectures": ["amd64"],
22
+ "dependencyFollowSuggests": false,
23
+ "dependencyFollowRecommends": false,
24
+ "dependencyFollowAllVariants": false,
25
+ "dependencyFollowSource": false,
26
+ "gpgDisableSign": true,
27
+ "gpgDisableVerify": true,
28
+ "downloadSourcePackages": false,
29
+ "ppaDistributorID": "ubuntu",
30
+ "ppaCodename": "",
31
+ "S3PublishEndpoints": {}
32
+ }
33
+ eos
34
+ end
35
+ tmp
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,32 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require ('vx/aptly/version')
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "vx-aptly"
8
+ spec.version = Vx::Aptly::VERSION
9
+ spec.authors = ["Dmitry Galinsky"]
10
+ spec.email = ["dima.exe@gmail.com"]
11
+ spec.summary = %q{Write a short summary. Required.}
12
+ spec.description = %q{Write a longer description. Optional.}
13
+ spec.homepage = "https://github.com/vexor/vx-aptly"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_dependency 'sinatra', '1.4.5'
22
+ spec.add_dependency 'sinatra-formhelpers-ng', '1.9.0'
23
+ spec.add_dependency 'sinatra-partial', '0.4.0'
24
+ spec.add_dependency 'puma', '2.8.2'
25
+ spec.add_dependency 'rack-flash3', '1.0.5'
26
+ spec.add_dependency 'vx-common-spawn', '0.0.8'
27
+
28
+ spec.add_development_dependency "bundler", '~> 1.6'
29
+ spec.add_development_dependency "rake", '~> 0'
30
+ spec.add_development_dependency "minitest", '5.4.2'
31
+ spec.add_development_dependency 'minitest-reporters', '1.0.7'
32
+ end
metadata ADDED
@@ -0,0 +1,263 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: vx-aptly
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.9.0
5
+ platform: ruby
6
+ authors:
7
+ - Dmitry Galinsky
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-11-04 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: sinatra
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '='
18
+ - !ruby/object:Gem::Version
19
+ version: 1.4.5
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '='
25
+ - !ruby/object:Gem::Version
26
+ version: 1.4.5
27
+ - !ruby/object:Gem::Dependency
28
+ name: sinatra-formhelpers-ng
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '='
32
+ - !ruby/object:Gem::Version
33
+ version: 1.9.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '='
39
+ - !ruby/object:Gem::Version
40
+ version: 1.9.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: sinatra-partial
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '='
46
+ - !ruby/object:Gem::Version
47
+ version: 0.4.0
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '='
53
+ - !ruby/object:Gem::Version
54
+ version: 0.4.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: puma
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '='
60
+ - !ruby/object:Gem::Version
61
+ version: 2.8.2
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '='
67
+ - !ruby/object:Gem::Version
68
+ version: 2.8.2
69
+ - !ruby/object:Gem::Dependency
70
+ name: rack-flash3
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '='
74
+ - !ruby/object:Gem::Version
75
+ version: 1.0.5
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '='
81
+ - !ruby/object:Gem::Version
82
+ version: 1.0.5
83
+ - !ruby/object:Gem::Dependency
84
+ name: vx-common-spawn
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '='
88
+ - !ruby/object:Gem::Version
89
+ version: 0.0.8
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '='
95
+ - !ruby/object:Gem::Version
96
+ version: 0.0.8
97
+ - !ruby/object:Gem::Dependency
98
+ name: bundler
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ~>
102
+ - !ruby/object:Gem::Version
103
+ version: '1.6'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ~>
109
+ - !ruby/object:Gem::Version
110
+ version: '1.6'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rake
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ~>
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ~>
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: minitest
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - '='
130
+ - !ruby/object:Gem::Version
131
+ version: 5.4.2
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - '='
137
+ - !ruby/object:Gem::Version
138
+ version: 5.4.2
139
+ - !ruby/object:Gem::Dependency
140
+ name: minitest-reporters
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - '='
144
+ - !ruby/object:Gem::Version
145
+ version: 1.0.7
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - '='
151
+ - !ruby/object:Gem::Version
152
+ version: 1.0.7
153
+ description: Write a longer description. Optional.
154
+ email:
155
+ - dima.exe@gmail.com
156
+ executables:
157
+ - vx-aptly
158
+ extensions: []
159
+ extra_rdoc_files: []
160
+ files:
161
+ - .gitignore
162
+ - Dockerfile
163
+ - Gemfile
164
+ - LICENSE.txt
165
+ - README.md
166
+ - Rakefile
167
+ - bin/vx-aptly
168
+ - doc/aptly.example
169
+ - doc/aptly.upstart
170
+ - doc/cloud-files.example
171
+ - docker/install.sh
172
+ - docker/my_init
173
+ - docker/supervisord.conf
174
+ - lib/vx/aptly.rb
175
+ - lib/vx/aptly/app.rb
176
+ - lib/vx/aptly/cli.sh
177
+ - lib/vx/aptly/config.ru
178
+ - lib/vx/aptly/mixin/capture.rb
179
+ - lib/vx/aptly/package.rb
180
+ - lib/vx/aptly/public/404.html
181
+ - lib/vx/aptly/public/css/animate.css
182
+ - lib/vx/aptly/public/css/bootstrap.min.css
183
+ - lib/vx/aptly/public/css/flat-ui.css
184
+ - lib/vx/aptly/public/css/theme.css
185
+ - lib/vx/aptly/public/fonts/glyphicons/flat-ui-icons-regular.eot
186
+ - lib/vx/aptly/public/fonts/glyphicons/flat-ui-icons-regular.svg
187
+ - lib/vx/aptly/public/fonts/glyphicons/flat-ui-icons-regular.ttf
188
+ - lib/vx/aptly/public/fonts/glyphicons/flat-ui-icons-regular.woff
189
+ - lib/vx/aptly/public/fonts/glyphicons/selection.json
190
+ - lib/vx/aptly/public/fonts/lato/lato-black.eot
191
+ - lib/vx/aptly/public/fonts/lato/lato-black.svg
192
+ - lib/vx/aptly/public/fonts/lato/lato-black.ttf
193
+ - lib/vx/aptly/public/fonts/lato/lato-black.woff
194
+ - lib/vx/aptly/public/fonts/lato/lato-bold.eot
195
+ - lib/vx/aptly/public/fonts/lato/lato-bold.svg
196
+ - lib/vx/aptly/public/fonts/lato/lato-bold.ttf
197
+ - lib/vx/aptly/public/fonts/lato/lato-bold.woff
198
+ - lib/vx/aptly/public/fonts/lato/lato-bolditalic.eot
199
+ - lib/vx/aptly/public/fonts/lato/lato-bolditalic.svg
200
+ - lib/vx/aptly/public/fonts/lato/lato-bolditalic.ttf
201
+ - lib/vx/aptly/public/fonts/lato/lato-bolditalic.woff
202
+ - lib/vx/aptly/public/fonts/lato/lato-italic.eot
203
+ - lib/vx/aptly/public/fonts/lato/lato-italic.svg
204
+ - lib/vx/aptly/public/fonts/lato/lato-italic.ttf
205
+ - lib/vx/aptly/public/fonts/lato/lato-italic.woff
206
+ - lib/vx/aptly/public/fonts/lato/lato-light.eot
207
+ - lib/vx/aptly/public/fonts/lato/lato-light.svg
208
+ - lib/vx/aptly/public/fonts/lato/lato-light.ttf
209
+ - lib/vx/aptly/public/fonts/lato/lato-light.woff
210
+ - lib/vx/aptly/public/fonts/lato/lato-regular.eot
211
+ - lib/vx/aptly/public/fonts/lato/lato-regular.svg
212
+ - lib/vx/aptly/public/fonts/lato/lato-regular.ttf
213
+ - lib/vx/aptly/public/fonts/lato/lato-regular.woff
214
+ - lib/vx/aptly/public/img/favicon.ico
215
+ - lib/vx/aptly/public/js/app.js
216
+ - lib/vx/aptly/public/js/jquery_ujs.js
217
+ - lib/vx/aptly/repo.rb
218
+ - lib/vx/aptly/repo_publish.rb
219
+ - lib/vx/aptly/version.rb
220
+ - lib/vx/aptly/views/index.erb
221
+ - lib/vx/aptly/views/layout.erb
222
+ - lib/vx/aptly/views/repo_publishes/new.erb
223
+ - lib/vx/aptly/views/repos/edit.erb
224
+ - lib/vx/aptly/views/repos/errors.erb
225
+ - lib/vx/aptly/views/repos/form.erb
226
+ - lib/vx/aptly/views/repos/new.erb
227
+ - lib/vx/aptly/views/repos/packages.erb
228
+ - lib/vx/aptly/views/repos/show.erb
229
+ - spec/lib/repo_publish_spec.rb
230
+ - spec/spec_helper.rb
231
+ - spec/support/aptly.conf
232
+ - spec/support/home.rb
233
+ - vx-aptly.gemspec
234
+ homepage: https://github.com/vexor/vx-aptly
235
+ licenses:
236
+ - MIT
237
+ metadata: {}
238
+ post_install_message:
239
+ rdoc_options: []
240
+ require_paths:
241
+ - lib
242
+ required_ruby_version: !ruby/object:Gem::Requirement
243
+ requirements:
244
+ - - '>='
245
+ - !ruby/object:Gem::Version
246
+ version: '0'
247
+ required_rubygems_version: !ruby/object:Gem::Requirement
248
+ requirements:
249
+ - - '>='
250
+ - !ruby/object:Gem::Version
251
+ version: '0'
252
+ requirements: []
253
+ rubyforge_project:
254
+ rubygems_version: 2.2.2
255
+ signing_key:
256
+ specification_version: 4
257
+ summary: Write a short summary. Required.
258
+ test_files:
259
+ - spec/lib/repo_publish_spec.rb
260
+ - spec/spec_helper.rb
261
+ - spec/support/aptly.conf
262
+ - spec/support/home.rb
263
+ has_rdoc: