fpm 0.1.1 → 0.1.3

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 (2) hide show
  1. data/bin/fpm-npm +95 -0
  2. metadata +5 -3
data/bin/fpm-npm ADDED
@@ -0,0 +1,95 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+
4
+ require "optparse"
5
+ require "ostruct"
6
+ require "json"
7
+
8
+ settings = OpenStruct.new
9
+ opts = OptionParser.new do |opts|
10
+ opts.on("-n PACKAGENAME", "--name PACKAGENAME",
11
+ "What name to give to the package") do |name|
12
+ settings.name = name
13
+ end
14
+
15
+ opts.on("-v VERSION", "--version VERSION",
16
+ "version to give the package") do |version|
17
+ settings.version = version
18
+ end
19
+
20
+ opts.on("-t OUTPUTTYPE", "--type OUTPUTTYPE",
21
+ "what kind of package you want as output (deb, etc)") do |packagetype|
22
+ settings.packagetype = packagetype
23
+ end
24
+ end
25
+
26
+ args = opts.parse(ARGV)
27
+
28
+ if !["deb"].include?(settings.packagetype)
29
+ $stderr.puts "Unsupported output package type '#{settings.packagetype}'." \
30
+ "Only supports 'deb' right now."
31
+ exit 1
32
+ end
33
+
34
+ if !settings.name
35
+ $stderr.puts "No npm package name given (missing -n?)"
36
+ exit 1
37
+ end
38
+
39
+ builddir="#{Dir.pwd}/npm2pkg"
40
+ # Prefix package names with 'nodejs-'
41
+ PACKAGEPREFIX = "nodejs-"
42
+
43
+ INSTALLPATH="/usr/lib/node"
44
+ Dir.mkdir(builddir) if !File.exists?(builddir)
45
+ File.open("#{builddir}/.npmrc", "w") do |file|
46
+ file.puts "root = #{builddir}#{INSTALLPATH}"
47
+ end
48
+
49
+ ## Trick npm into using a custom .npmrc
50
+ system("env - PATH=$PATH HOME=#{builddir} npm install #{settings.name} #{settings.version}")
51
+
52
+ # Find all installed npms in builddir, make packages.
53
+ Dir.glob("#{builddir}#{INSTALLPATH}/.npm/*/*") do |path|
54
+ next if File.symlink?(path)
55
+ puts path
56
+
57
+ # Load the package.json and glean any information from it, then invoke pkg.rb
58
+ package = JSON.parse(File.new("#{path}/package/package.json").read())
59
+
60
+ # TODO(sissel): Ideally we want to say any version with the same 'release' number, like
61
+ # So we'll specify deps of {v}-1 <= x <= {v}-999999....
62
+ depends = Dir.glob("#{path}/dependson/*@*") \
63
+ .collect { |p| PACKAGEPREFIX + File.basename(p) } \
64
+ .collect { |p| n,v = p.split("@");
65
+ ["#{n} (>= #{v}-1)", "#{n} (<= #{v}-99999999999999)"]
66
+ }.flatten
67
+
68
+ if package["author"]
69
+ maintainer = package["author"]
70
+ else
71
+ m = package["maintainers"][0] \
72
+ rescue { "name" => "missing upstream author", "email" => ENV["USER"] }
73
+ maintainer = "#{m["name"]} <#{m["email"]}>"
74
+ end
75
+
76
+ pkgcmd = [ "fpm",
77
+ "-n", "#{PACKAGEPREFIX}#{package["name"]}",
78
+ "-v", package["version"],
79
+ "-m", maintainer,
80
+ "-a", "all",
81
+ ]
82
+
83
+ depends.each do |dep|
84
+ pkgcmd += ["-d", dep]
85
+ end
86
+
87
+ pkgcmd += ["-p", "#{PACKAGEPREFIX}#{package["name"]}-VERSION_ARCH.deb"]
88
+ pkgcmd += ["-C", builddir]
89
+ pkgcmd << "#{INSTALLPATH[1..-1]}/.npm/#{package["name"]}/active"
90
+ pkgcmd << "#{INSTALLPATH[1..-1]}/#{package["name"]}"
91
+ pkgcmd << "#{INSTALLPATH[1..-1]}/#{package["name"]}@#{package["version"]}"
92
+
93
+ puts pkgcmd.map { |x| "\"#{x}\"" }.join(" ")
94
+ system *pkgcmd
95
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fpm
3
3
  version: !ruby/object:Gem::Version
4
- hash: 25
4
+ hash: 29
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 1
10
- version: 0.1.1
9
+ - 3
10
+ version: 0.1.3
11
11
  platform: ruby
12
12
  authors:
13
13
  - Jordan Sissel
@@ -36,6 +36,7 @@ description: Turn directories into packages. Fix broken packages. Win the packag
36
36
  email: jls@semicomplete.com
37
37
  executables:
38
38
  - fpm
39
+ - fpm-npm
39
40
  extensions: []
40
41
 
41
42
  extra_rdoc_files: []
@@ -46,6 +47,7 @@ files:
46
47
  - lib/fpm/package.rb
47
48
  - lib/fpm.rb
48
49
  - bin/fpm
50
+ - bin/fpm-npm
49
51
  - templates/deb.erb
50
52
  has_rdoc: true
51
53
  homepage: https://github.com/jordansissel/fpm