packit 0.0.1

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 29b4a5e46ecfb1c6d3953f781932a956459f594e
4
+ data.tar.gz: 8bd0abcc0d3ca48f97bc8a15bf47a950408985b3
5
+ SHA512:
6
+ metadata.gz: 28c84363ceb513c7072cbb600d41ddf27e95109ab849b808aac961be6deca8373df415b618da24450c9319794e3e7d16af8cdb40dcf2782048ae9cd31f751386
7
+ data.tar.gz: ebe0b2cf9e5e044336c16c27d132d159330faafb52c29dc84525aa12e2ec6a5de1e9fbdbcac8823c04b94f4ad177025203d6ea6c9c7a77cfd5c451ef1de232e5
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+ $LOAD_PATH.unshift(File.expand_path('../lib', __dir__))
3
+ require 'packit/cli'
4
+ require 'benchmark'
5
+
6
+ begin
7
+ ENV['THOR_DEBUG'] = '1'
8
+ etime = Benchmark.realtime { Packit::CLI.start(ARGV) }
9
+ $stderr.puts "Completed in #{etime}s"
10
+ rescue Thor::UndefinedCommandError, Thor::UnknownArgumentError, Thor::AmbiguousCommandError, Thor::InvocationError => e
11
+ $stderr.puts(e.message)
12
+ exit(64)
13
+ rescue Thor::Error => e
14
+ $stderr.puts(e.message)
15
+ exit(1)
16
+ end
@@ -0,0 +1,9 @@
1
+ $LOAD_PATH.unshift(File.expand_path('../lib', __FILE__))
2
+
3
+ require 'active_support/all'
4
+ require 'packit/version'
5
+ require 'packit/config'
6
+ require 'packit/packager'
7
+ require 'packit/dpkg_deb'
8
+ #require 'packit/pbuilder'
9
+
@@ -0,0 +1,12 @@
1
+ require 'thor'
2
+ require 'packit'
3
+
4
+ class Packit::CLI < Thor
5
+
6
+ desc 'pack', 'Create a new package'
7
+ method_option :config, type: :string, required: false, banner: 'CONFIG', desc: 'Path to config file', aliases: '-c'
8
+ def pack
9
+ opts = options.deep_symbolize_keys
10
+ Packit::Packager.pack(**opts)
11
+ end
12
+ end
@@ -0,0 +1,58 @@
1
+ require 'yaml'
2
+ require 'ostruct'
3
+
4
+ module Packit
5
+ class Config < OpenStruct
6
+ def self.load(path)
7
+ fail "Config file #{path} doesn't exist" unless File.exists?(path)
8
+ config = YAML.load(File.read(path))
9
+ self.new(config)
10
+ end
11
+
12
+ def initialize(*args)
13
+ super(*args)
14
+ validate
15
+ end
16
+
17
+ def validate
18
+ fail "No build strategy provided" unless strategy
19
+ fail "No name was provided" unless name
20
+ fail "No version was provided" unless version
21
+
22
+ case strategy
23
+ when 'simple'
24
+ fail 'No globs for where to find artifacts was provided. Tell me what to package.' unless globs
25
+ fail "Globs should be an Array of glob strings, but you gave me a #{globs.class}" unless globs.is_a?(Array)
26
+ when 'pbuilder'
27
+ else
28
+ "Build strategy #{strategy} is not supported"
29
+ end
30
+
31
+ end
32
+
33
+ def get_binding
34
+ binding()
35
+ end
36
+
37
+ # common DEBIAN files
38
+ # reference to post / pre hook templates
39
+ # control
40
+ # copyright
41
+ # type
42
+ # dpkg-deb
43
+ # build
44
+ # binary
45
+ # simple script / makefile
46
+ # globs
47
+ # links
48
+ # prefix
49
+ # configs
50
+ # pbuilder
51
+ # generate DEBIAN files
52
+ # provide makefiles / rules, standard DH stuff
53
+ # User writes:
54
+ # yaml file
55
+ # compat
56
+ # rules file
57
+ end
58
+ end
@@ -0,0 +1,54 @@
1
+ require 'erb'
2
+
3
+ module Packit
4
+ module Control
5
+ extend self
6
+
7
+ def render(config)
8
+ template = <<-eos
9
+ Package: <%= name %>
10
+ Architecture: <%= arch || 'all' %>
11
+ Maintainer: <%= author %>
12
+ Depends: <%= (depends && depends.is_a?(Array) && !depends.empty?) || 'debconf' %>
13
+ <%- if conflicts && conflicts.is_a?(Array) && !conflicts.empty? -%>
14
+ Conflicts: <%= conflicts.join(', ') %>
15
+ <%- end -%>
16
+ <%- if section -%>
17
+ Section: <%= section %>
18
+ <%- end -%>
19
+ Priority: <%= priority || 'optional' %>
20
+ Version: <%= version %>
21
+ Description: <%= description || "Awesome package" %>
22
+ eos
23
+ renderer = ERB.new(template, nil, '-')
24
+ renderer.result(config.get_binding)
25
+ end
26
+ end
27
+ end
28
+
29
+
30
+ #https://github.com/Shopify/ruby/blob/debian_pbuilder/debian/control.erb
31
+
32
+ #Source: shopify-ruby-<%= version %>
33
+ #Section: ruby
34
+ #Priority: optional
35
+ #Maintainer: Shopify Ops <ops@shopify.com>
36
+ #Build-Depends: debhelper (>= 7.3), autoconf, bison, build-essential, devscripts, equivs, libreadline-gplv2-dev | libreadline-dev, ruby1.9.3|ruby, libssl-dev (>= 0.9.6b), libyaml-dev, zlib1g-dev, systemtap-sdt-dev, libffi-dev
37
+ #Standards-Version: 3.9.4
38
+ #Homepage: https://github.com/Shopify/ruby
39
+ #Vcs-Git: git://github.com/Shopify/ruby.git
40
+ #Vcs-Browser: https://github.com/Shopify/ruby
41
+ #
42
+ #Package: shopify-ruby-<%= version %>
43
+ #Architecture: any
44
+ #Depends: ${shlibs:Depends}, ${misc:Depends}
45
+ #Recommends: shopify-ruby
46
+ #Provides: shopify-ruby-any, shopify-ruby-<%= major_minor %>
47
+ #Suggests: shopify-ruby-<%= version %>-doc
48
+ #Description: Ruby <%= version %> for Shopify servers
49
+ # Built using shopify-ruby-build.
50
+ #
51
+ #Package: shopify-ruby-<%= version %>-doc
52
+ #Architecture: any
53
+ #Description: Ruby <%= version %> for Shopify servers (documentation)
54
+ # Built using shopify-ruby-build.
@@ -0,0 +1,46 @@
1
+ require 'tmpdir'
2
+ require 'fileutils'
3
+
4
+ module Packit
5
+ class DpkgDeb < Packager
6
+
7
+ def package
8
+ build if @debconf.script
9
+ prepare
10
+ archive
11
+ end
12
+
13
+ private
14
+
15
+ def build
16
+ system(@debconf.script)
17
+ end
18
+
19
+ def prepare
20
+ tmpdir = Dir.mktmpdir("dpkg-#{@debconf.name}")
21
+ @pkgdir = File.join(tmpdir, "#{@debconf.name}_#{@debconf.version}")
22
+ @prefix = @debconf.prefix || "/usr/local/#{@debconf.name}"
23
+ @debconf.globs.each do |glob|
24
+ Dir[glob].each do |entry|
25
+ target = File.join(@pkgdir, @prefix, entry)
26
+ if File.directory?(entry)
27
+ FileUtils.mkdir_p(target)
28
+ elsif File.file?(entry)
29
+ FileUtils.mkdir_p(File.dirname(target))
30
+ FileUtils.cp(entry, target)
31
+ else
32
+ fail "I can't handle #{entry} it is neither a file nore a directory"
33
+ end
34
+ end
35
+ end
36
+ @debdir = File.join(@pkgdir, 'DEBIAN')
37
+ FileUtils.mkdir_p(@debdir)
38
+ File.write(File.join(@debdir, 'control'), @control)
39
+ end
40
+
41
+ def archive
42
+ system("dpkg-deb --build #{@pkgdir}")
43
+ #FileUtils.mv(
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,25 @@
1
+ require 'packit/config'
2
+ require 'packit/control'
3
+
4
+ module Packit
5
+ class Packager
6
+ def self.pack(config: nil)
7
+ config ||= File.join(Dir.pwd, 'packit.yml')
8
+ debconf = Config.load(config)
9
+
10
+ case debconf.strategy
11
+ when 'simple'
12
+ DpkgDeb.new(debconf).package
13
+ when 'pbuilder'
14
+ Pbuilder.new(debconf).package
15
+ else
16
+ "Build strategy #{config.strategy} is not supported"
17
+ end
18
+ end
19
+
20
+ def initialize(debconf)
21
+ @debconf = debconf
22
+ @control = Control.render(@debconf)
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,3 @@
1
+ module Packit
2
+ VERSION = '0.0.1'
3
+ end
File without changes
metadata ADDED
@@ -0,0 +1,137 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: packit
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Dale Hamel
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-01-27 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: thor
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '='
18
+ - !ruby/object:Gem::Version
19
+ version: 0.19.1
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '='
25
+ - !ruby/object:Gem::Version
26
+ version: 0.19.1
27
+ - !ruby/object:Gem::Dependency
28
+ name: activesupport
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '='
32
+ - !ruby/object:Gem::Version
33
+ version: 4.2.5.1
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '='
39
+ - !ruby/object:Gem::Version
40
+ version: 4.2.5.1
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '='
46
+ - !ruby/object:Gem::Version
47
+ version: 10.4.2
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '='
53
+ - !ruby/object:Gem::Version
54
+ version: 10.4.2
55
+ - !ruby/object:Gem::Dependency
56
+ name: simplecov
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '='
60
+ - !ruby/object:Gem::Version
61
+ version: 0.10.0
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '='
67
+ - !ruby/object:Gem::Version
68
+ version: 0.10.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '='
74
+ - !ruby/object:Gem::Version
75
+ version: 3.2.0
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '='
81
+ - !ruby/object:Gem::Version
82
+ version: 3.2.0
83
+ - !ruby/object:Gem::Dependency
84
+ name: md2man
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '='
88
+ - !ruby/object:Gem::Version
89
+ version: 4.0.0
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '='
95
+ - !ruby/object:Gem::Version
96
+ version: 4.0.0
97
+ description: Provides a simple means of packaging arbitrary files into a debian package.
98
+ email: dale.hamel@srvthe.net
99
+ executables:
100
+ - packit
101
+ extensions: []
102
+ extra_rdoc_files: []
103
+ files:
104
+ - bin/packit
105
+ - lib/packit.rb
106
+ - lib/packit/cli.rb
107
+ - lib/packit/config.rb
108
+ - lib/packit/control.rb
109
+ - lib/packit/dpkg_deb.rb
110
+ - lib/packit/packager.rb
111
+ - lib/packit/version.rb
112
+ - man/PACKIT.1
113
+ homepage: http://rubygems.org/gems/packit
114
+ licenses:
115
+ - MIT
116
+ metadata: {}
117
+ post_install_message:
118
+ rdoc_options: []
119
+ require_paths:
120
+ - lib
121
+ required_ruby_version: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - ">="
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ required_rubygems_version: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ version: '0'
131
+ requirements: []
132
+ rubyforge_project:
133
+ rubygems_version: 2.4.6
134
+ signing_key:
135
+ specification_version: 4
136
+ summary: Glob it up, and "pack it" into a deb
137
+ test_files: []