pkgr 0.3.4 → 1.0.1.pre

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.
Files changed (43) hide show
  1. data/README.md +68 -463
  2. data/bin/pkgr +4 -52
  3. data/lib/pkgr.rb +13 -29
  4. data/lib/pkgr/app.rb +19 -4
  5. data/lib/pkgr/builder.rb +207 -0
  6. data/lib/pkgr/buildpack.rb +80 -0
  7. data/lib/pkgr/cli.rb +34 -158
  8. data/lib/pkgr/config.rb +65 -0
  9. data/lib/pkgr/data/distributions/debian/build_dependencies.yml +14 -0
  10. data/lib/pkgr/data/{debian → distributions/debian}/cron.d +0 -0
  11. data/lib/pkgr/data/distributions/debian/default.erb +12 -0
  12. data/lib/pkgr/data/distributions/debian/dependencies.yml +17 -0
  13. data/lib/pkgr/data/distributions/debian/hooks/postinstall.sh +27 -0
  14. data/lib/pkgr/data/distributions/debian/hooks/preinstall.sh +9 -0
  15. data/lib/pkgr/data/{debian → distributions/debian}/logrotate.erb +0 -0
  16. data/lib/pkgr/data/distributions/debian/runner.erb +122 -0
  17. data/lib/pkgr/data/distributions/debian/upstart/master.conf.erb +7 -0
  18. data/lib/pkgr/data/distributions/debian/upstart/process.conf.erb +7 -0
  19. data/lib/pkgr/data/distributions/debian/upstart/process_master.conf.erb +2 -0
  20. data/lib/pkgr/dispatcher.rb +51 -0
  21. data/lib/pkgr/distributions.rb +18 -0
  22. data/lib/pkgr/distributions/debian.rb +157 -0
  23. data/lib/pkgr/git.rb +24 -0
  24. data/lib/pkgr/process.rb +18 -0
  25. data/lib/pkgr/templates/dir_template.rb +14 -0
  26. data/lib/pkgr/templates/file_template.rb +38 -0
  27. data/lib/pkgr/version.rb +1 -1
  28. metadata +93 -26
  29. data/lib/pkgr/data/debian/changelog +0 -0
  30. data/lib/pkgr/data/debian/compat.erb +0 -1
  31. data/lib/pkgr/data/debian/control.erb +0 -12
  32. data/lib/pkgr/data/debian/copyright.erb +0 -17
  33. data/lib/pkgr/data/debian/default.erb +0 -11
  34. data/lib/pkgr/data/debian/dirs.erb +0 -2
  35. data/lib/pkgr/data/debian/docs.erb +0 -0
  36. data/lib/pkgr/data/debian/init.d.erb +0 -155
  37. data/lib/pkgr/data/debian/install.erb +0 -16
  38. data/lib/pkgr/data/debian/links.erb +0 -5
  39. data/lib/pkgr/data/debian/postinst.erb +0 -59
  40. data/lib/pkgr/data/debian/prerm.erb +0 -57
  41. data/lib/pkgr/data/debian/rules.erb +0 -7
  42. data/lib/pkgr/pkgr.rake +0 -50
  43. data/lib/pkgr/railtie.rb +0 -7
data/lib/pkgr/git.rb ADDED
@@ -0,0 +1,24 @@
1
+ require 'mixlib/shellout'
2
+
3
+ module Pkgr
4
+ class Git
5
+ attr_reader :path
6
+
7
+ def initialize(path)
8
+ @path = path
9
+ end
10
+
11
+ def latest_tag
12
+ return nil unless valid?
13
+ Dir.chdir(path) do
14
+ git_describe = Mixlib::ShellOut.new("git describe --tags --abbrev=0")
15
+ git_describe.run_command
16
+ git_describe.stdout.chomp
17
+ end
18
+ end
19
+
20
+ def valid?
21
+ File.file?(File.join(path, ".git", "index"))
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,18 @@
1
+ module Pkgr
2
+ class Process
3
+ DAEMON_PROCESSES = ["web", "worker"]
4
+
5
+ attr_reader :name, :command
6
+ attr_accessor :scale
7
+
8
+ def initialize(name, command, scale = 1)
9
+ @name = name
10
+ @command = command
11
+ @scale = scale || 1
12
+ end
13
+
14
+ def daemon?
15
+ DAEMON_PROCESSES.include?(name)
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,14 @@
1
+ module Pkgr
2
+ module Templates
3
+ class DirTemplate
4
+ attr_reader :target
5
+ def initialize(target)
6
+ @target = target
7
+ end
8
+
9
+ def install(template_binding)
10
+ FileUtils.mkdir_p(target)
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,38 @@
1
+ require 'erb'
2
+
3
+ module Pkgr
4
+ module Templates
5
+ class FileTemplate
6
+ attr_reader :source, :target
7
+
8
+ def initialize(target, source, opts = {})
9
+ @target = target
10
+ @source = source
11
+ @opts = opts
12
+ end
13
+
14
+ # Assumes that the current working directory is correct
15
+ def install(template_binding)
16
+ make_dir
17
+ File.open(target, "w+") do |f|
18
+ if source.respond_to?(:path) && File.extname(source) == ".erb"
19
+ f << ERB.new(source.read).result(template_binding)
20
+ else
21
+ f << source.read
22
+ end
23
+ end
24
+
25
+ FileUtils.chmod mode, target
26
+ end
27
+
28
+ private
29
+ def make_dir
30
+ FileUtils.mkdir_p File.dirname(target)
31
+ end
32
+
33
+ def mode
34
+ @opts[:mode] || 0644
35
+ end
36
+ end
37
+ end
38
+ end
data/lib/pkgr/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Pkgr
2
- VERSION = "0.3.4"
2
+ VERSION = "1.0.1.pre"
3
3
  end
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pkgr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.4
5
- prerelease:
4
+ version: 1.0.1.pre
5
+ prerelease: 6
6
6
  platform: ruby
7
7
  authors:
8
8
  - Cyril Rohr
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-05-10 00:00:00.000000000 Z
12
+ date: 2013-10-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
@@ -27,6 +27,70 @@ dependencies:
27
27
  - - ! '>='
28
28
  - !ruby/object:Gem::Version
29
29
  version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: thor
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: fpm
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: mixlib-log
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: mixlib-shellout
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :runtime
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
30
94
  - !ruby/object:Gem::Dependency
31
95
  name: rspec
32
96
  requirement: !ruby/object:Gem::Requirement
@@ -43,7 +107,7 @@ dependencies:
43
107
  - - ~>
44
108
  - !ruby/object:Gem::Version
45
109
  version: '2'
46
- description: Package your Rails apps as debian packages
110
+ description: Package your Ruby & Rails apps as debian packages
47
111
  email:
48
112
  - cyril.rohr@gmail.com
49
113
  executables:
@@ -54,33 +118,36 @@ extra_rdoc_files:
54
118
  - README.md
55
119
  files:
56
120
  - lib/pkgr/app.rb
121
+ - lib/pkgr/builder.rb
122
+ - lib/pkgr/buildpack.rb
57
123
  - lib/pkgr/cli.rb
124
+ - lib/pkgr/config.rb
58
125
  - lib/pkgr/data/bin/executable
59
126
  - lib/pkgr/data/config/pre_boot.rb
60
- - lib/pkgr/data/debian/changelog
61
- - lib/pkgr/data/debian/compat.erb
62
- - lib/pkgr/data/debian/control.erb
63
- - lib/pkgr/data/debian/copyright.erb
64
- - lib/pkgr/data/debian/cron.d
65
- - lib/pkgr/data/debian/default.erb
66
- - lib/pkgr/data/debian/dirs.erb
67
- - lib/pkgr/data/debian/docs.erb
68
- - lib/pkgr/data/debian/init.d.erb
69
- - lib/pkgr/data/debian/install.erb
70
- - lib/pkgr/data/debian/links.erb
71
- - lib/pkgr/data/debian/logrotate.erb
72
- - lib/pkgr/data/debian/postinst.erb
73
- - lib/pkgr/data/debian/prerm.erb
74
- - lib/pkgr/data/debian/rules.erb
127
+ - lib/pkgr/data/distributions/debian/build_dependencies.yml
128
+ - lib/pkgr/data/distributions/debian/cron.d
129
+ - lib/pkgr/data/distributions/debian/default.erb
130
+ - lib/pkgr/data/distributions/debian/dependencies.yml
131
+ - lib/pkgr/data/distributions/debian/hooks/postinstall.sh
132
+ - lib/pkgr/data/distributions/debian/hooks/preinstall.sh
133
+ - lib/pkgr/data/distributions/debian/logrotate.erb
134
+ - lib/pkgr/data/distributions/debian/runner.erb
135
+ - lib/pkgr/data/distributions/debian/upstart/master.conf.erb
136
+ - lib/pkgr/data/distributions/debian/upstart/process.conf.erb
137
+ - lib/pkgr/data/distributions/debian/upstart/process_master.conf.erb
75
138
  - lib/pkgr/data/pkgr.yml
76
- - lib/pkgr/pkgr.rake
77
- - lib/pkgr/railtie.rb
139
+ - lib/pkgr/dispatcher.rb
140
+ - lib/pkgr/distributions/debian.rb
141
+ - lib/pkgr/distributions.rb
142
+ - lib/pkgr/git.rb
143
+ - lib/pkgr/process.rb
144
+ - lib/pkgr/templates/dir_template.rb
145
+ - lib/pkgr/templates/file_template.rb
78
146
  - lib/pkgr/version.rb
79
147
  - lib/pkgr.rb
80
148
  - LICENSE
81
149
  - README.md
82
- - !binary |-
83
- YmluL3BrZ3I=
150
+ - bin/pkgr
84
151
  homepage: http://github.com/crohr/pkgr
85
152
  licenses: []
86
153
  post_install_message:
@@ -93,7 +160,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
93
160
  requirements:
94
161
  - - ! '>='
95
162
  - !ruby/object:Gem::Version
96
- version: '1.9'
163
+ version: 1.8.7
97
164
  required_rubygems_version: !ruby/object:Gem::Requirement
98
165
  none: false
99
166
  requirements:
@@ -102,8 +169,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
102
169
  version: '1.3'
103
170
  requirements: []
104
171
  rubyforge_project:
105
- rubygems_version: 1.8.21
172
+ rubygems_version: 1.8.23
106
173
  signing_key:
107
174
  specification_version: 3
108
- summary: Package your Rails apps as debian packages
175
+ summary: Package your Ruby & Rails apps as debian packages
109
176
  test_files: []
File without changes
@@ -1 +0,0 @@
1
- 7
@@ -1,12 +0,0 @@
1
- Source: <%= name %>
2
- Section: unknown
3
- Priority: extra
4
- Maintainer: <%= author_name %> <<%= author_email %>>
5
- Build-Depends: <%= debian_build_dependencies.join(",") %>
6
- Standards-Version: 3.7.3
7
- Homepage: <%= homepage %>
8
-
9
- Package: <%= name %>
10
- Architecture: <%= architecture %>
11
- Depends: <%= debian_runtime_dependencies.join(", ") %>
12
- Description: <%= description %>
@@ -1,17 +0,0 @@
1
- This package was debianized by Pkgr <http://crohr.me/pkgr> on <%= Time.now.to_s %>.
2
-
3
- It was downloaded from <ssh://somewhere>
4
-
5
- Upstream Author(s):
6
-
7
- <%= author_name %> <<%=author_email %>>
8
-
9
- Copyright:
10
-
11
- Some copyright here
12
-
13
- License:
14
-
15
- <Put the license of the package here indented by 4 spaces>
16
-
17
- The Debian packaging is public domain.
@@ -1,11 +0,0 @@
1
- # Defaults for <%= name %> initscript
2
- # sourced by /etc/init.d/<%= name %>
3
- # installed at /etc/default/<%= name %> by the maintainer scripts
4
-
5
- #
6
- # This is a POSIX shell fragment
7
- #
8
-
9
- # Additional options that are passed to the Daemon.
10
- DAEMON_OPTS="server -d --pid $PIDFILE --user $NAME --group $NAME --log /var/log/$NAME/thin.log"
11
-
@@ -1,2 +0,0 @@
1
- var/log/<%= name %>
2
- var/db/<%= name %>
File without changes
@@ -1,155 +0,0 @@
1
- #! /bin/sh
2
- #
3
- ### BEGIN INIT INFO
4
- # Provides: <%= name %>
5
- # Required-Start: $remote_fs $syslog
6
- # Required-Stop: $remote_fs $syslog
7
- # Default-Start: 2 3 4 5
8
- # Default-Stop: 0 1 6
9
- # Short-Description: Start <%= name %> app at boot time.
10
- # Description: Enable service provided by <%= name %>.
11
- ### END INIT INFO
12
- #
13
-
14
- PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
15
- NAME="<%= name %>"
16
- DAEMON=/usr/bin/$NAME
17
- DESC=$NAME
18
-
19
- test -x $DAEMON || exit 0
20
-
21
- LOGDIR=/var/log/$NAME
22
- PIDFILE=/var/run/$NAME.pid
23
- DODTIME=5 # Time to wait for the server to die, in seconds
24
- # If this value is set too low you might not
25
- # let some servers to die gracefully and
26
- # 'restart' will not work
27
-
28
- # Include defaults if available
29
- if [ -f /etc/default/$NAME ] ; then
30
- . /etc/default/$NAME
31
- fi
32
-
33
- set -e
34
-
35
-
36
- running_pid()
37
- {
38
- # Check if a given process status name matches a given name
39
- pid=$1
40
- name=$2
41
- [ -z "$pid" ] && return 1
42
- [ ! -d /proc/$pid ] && return 1
43
- cmd=`cat /proc/$pid/status | grep Name: | cut -f 2`
44
- # Is this the expected child?
45
- [ "$cmd" != "$name" ] && return 1
46
- return 0
47
- }
48
-
49
- running()
50
- {
51
- # Check if the process is running looking at /proc
52
- # (works for all users)
53
- # No pidfile, probably no daemon present
54
- [ ! -f "$PIDFILE" ] && return 1
55
- # Obtain the pid
56
- pid=`cat $PIDFILE`
57
- running_pid $pid $NAME || return 1
58
- return 0
59
- }
60
-
61
- force_stop() {
62
- # Forcefully kill the process
63
- [ ! -f "$PIDFILE" ] && return
64
- if running ; then
65
- kill -15 $pid
66
- # Is it really dead?
67
- [ -n "$DODTIME" ] && sleep "$DODTIME"s
68
- if running ; then
69
- kill -9 $pid
70
- [ -n "$DODTIME" ] && sleep "$DODTIME"s
71
- if running ; then
72
- echo "Cannot kill $NAME (pid=$pid)!"
73
- exit 1
74
- fi
75
- fi
76
- fi
77
- rm -f $PIDFILE
78
- return 0
79
- }
80
-
81
- case "$1" in
82
- start)
83
- echo -n "Starting $DESC: "
84
- if running ; then
85
- echo "already running."
86
- else
87
- $DAEMON $DAEMON_OPTS start
88
- # Needed to let Thin handle stale pid file.
89
- sleep 1
90
- if running ; then
91
- echo "OK."
92
- else
93
- echo "ERROR."
94
- fi
95
- fi
96
- ;;
97
- stop)
98
- echo -n "Stopping $DESC: "
99
- $DAEMON $DAEMON_OPTS stop
100
- echo "OK."
101
- ;;
102
- force-stop)
103
- echo -n "Forcefully stopping $DESC: "
104
- force_stop
105
- if ! running ; then
106
- echo "OK."
107
- else
108
- echo "ERROR."
109
- fi
110
- ;;
111
- #reload)
112
- #
113
- # If the daemon can reload its config files on the fly
114
- # for example by sending it SIGHUP, do it here.
115
- #
116
- # If the daemon responds to changes in its config file
117
- # directly anyway, make this a do-nothing entry.
118
- #
119
- # echo "Reloading $DESC configuration files."
120
- # start-stop-daemon --stop --signal 1 --quiet --pidfile \
121
- # /var/run/$NAME.pid --exec $DAEMON
122
- #;;
123
- force-reload)
124
- #
125
- # If the "reload" option is implemented, move the "force-reload"
126
- # option to the "reload" entry above. If not, "force-reload" is
127
- # just the same as "restart" except that it does nothing if the
128
- # daemon isn't already running.
129
- # check wether $DAEMON is running. If so, restart
130
- if running ; then
131
- $0 restart
132
- fi
133
- ;;
134
- restart)
135
- echo "Restarting $DESC..."
136
- $0 stop && $0 start
137
- ;;
138
- status)
139
- echo -n "$NAME is "
140
- if running ; then
141
- echo "running."
142
- else
143
- echo "not running."
144
- exit 1
145
- fi
146
- ;;
147
- *)
148
- N=/etc/init.d/$NAME
149
- # echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2
150
- echo "Usage: $N {start|stop|restart|force-reload|status|force-stop}" >&2
151
- exit 1
152
- ;;
153
- esac
154
-
155
- exit 0