go4rake 1.0 → 1.0.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +9 -8
- data/examples/go4rake.yml +16 -0
- data/go4rake.gemspec +3 -2
- data/lib/go4rake/new.rb +96 -0
- data/lib/go4rake.rb +1 -85
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 53f419be04c75a9148662310ac86bee3e84bfc52
|
4
|
+
data.tar.gz: 9d6dc125f8f4086ddefa52a670e56bd18652163f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b682ae30deb1f68db4723507858090767eb0eb80545104465bf9c970fbc5d7b350e1c420c6ed703e6deb2f8a88bd62528ae1ce5a6fe79e5f39044db08a7f3075
|
7
|
+
data.tar.gz: 7f8971e939979192fecca957a8a6bd02cefcaac830479c4a3bbc72b9160be7ae01c137e8420a3ad5b4f0844f6d01f36a6b2cfbd4bb33b67ded8e6b4fdb6fb70a
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
## go4rake
|
1
|
+
## go4rake: Rake tasks for cross-compiling Go programs [![Gem Version](https://badge.fury.io/rb/go4rake.svg)](http://badge.fury.io/rb/go4rake)
|
2
2
|
|
3
|
-
|
3
|
+
This gem provides the following tasks:
|
4
4
|
|
5
5
|
* `rake build` for cross-compiling for the specified architectures
|
6
6
|
* `rake zip` command for making ZIP files that contain binary builds
|
@@ -37,13 +37,14 @@ on Windows (7-zip? Don't know).
|
|
37
37
|
`zip` and `build` tasks expect a YAML config, `go4rake.yml`. Say, we
|
38
38
|
have [this config](https://github.com/chillum/httpstress-go/blob/master/go4rake.yml).
|
39
39
|
|
40
|
-
This way, you run `rake zip` and you get
|
40
|
+
This way, you run `rake zip` and you get the following ZIP files
|
41
|
+
containing the static binary builds in your `~/Downloads` directory:
|
41
42
|
|
42
|
-
* win32.zip
|
43
|
-
* win64.zip
|
44
|
-
* linux_amd64.zip
|
45
|
-
*
|
46
|
-
* mac.zip
|
43
|
+
* `win32.zip`
|
44
|
+
* `win64.zip`
|
45
|
+
* `linux_amd64.zip`
|
46
|
+
* `linux_386.zip`
|
47
|
+
* `mac.zip`
|
47
48
|
|
48
49
|
For each platform:
|
49
50
|
|
data/go4rake.gemspec
CHANGED
@@ -1,11 +1,12 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'go4rake'
|
3
|
-
s.version = '1.0'
|
3
|
+
s.version = '1.0.7'
|
4
4
|
s.license = 'Apache-2.0'
|
5
5
|
s.summary = 'go4rake is a Rake helper for cross-compiling Go programs'
|
6
6
|
s.description = '`build`, `test` and `zip` tasks for cross-compilation of Go programs'
|
7
7
|
s.author = 'Vasily Korytov'
|
8
8
|
s.email = 'vasily.korytov@yahoo.com'
|
9
|
-
s.files = ['
|
9
|
+
s.files = ['LICENSE.txt', 'README.md', 'examples/go4rake.yml',
|
10
|
+
'go4rake.gemspec', 'lib/go4rake.rb', 'lib/go4rake/new.rb']
|
10
11
|
s.homepage = 'https://github.com/chillum/go4rake'
|
11
12
|
end
|
data/lib/go4rake/new.rb
ADDED
@@ -0,0 +1,96 @@
|
|
1
|
+
# Copyright 2014 Vasily Korytov
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
require 'rake/tasklib'
|
16
|
+
require 'yaml'
|
17
|
+
|
18
|
+
# Rake tasks to cross-compile Go project and ZIP the binaries:
|
19
|
+
# `rake build`, `rake test` and `rake zip`.
|
20
|
+
#
|
21
|
+
# Usage: `require 'go4rake'` in `Rakefile`. Settings are specified in a YAML file: `go4rake.yml`.
|
22
|
+
#
|
23
|
+
# Example config: https://github.com/chillum/httpstress-go/blob/master/go4rake.yml
|
24
|
+
#
|
25
|
+
# Docs: https://github.com/chillum/go4rake/blob/master/README.md
|
26
|
+
#
|
27
|
+
# Offline copies of README and example config are also included in this gem.
|
28
|
+
class Go4Rake < ::Rake::TaskLib
|
29
|
+
attr_reader :yml
|
30
|
+
# Initialize Rake tasks for cross-compiling Go programs.
|
31
|
+
def initialize(yml = 'go4rake.yml')
|
32
|
+
# `build` and `zip` depend on config, `test` doesn't.
|
33
|
+
begin
|
34
|
+
@config = YAML.load_file yml
|
35
|
+
|
36
|
+
desc "Build this project for the platforms in #{yml}"
|
37
|
+
task :build do
|
38
|
+
@config['platforms'].each { |os|
|
39
|
+
if os['arch'].respond_to?('each')
|
40
|
+
os['arch'].each { |arch| build os['name'], arch }
|
41
|
+
else
|
42
|
+
build os['name'], os['arch']
|
43
|
+
end
|
44
|
+
}
|
45
|
+
end
|
46
|
+
|
47
|
+
desc 'ZIP this project binaries'
|
48
|
+
task :zip => [:build, :test] do
|
49
|
+
@config['out'] ||= '.' # Default to the current directory, if 'out' is not specified.
|
50
|
+
|
51
|
+
@config['platforms'].each { |os|
|
52
|
+
if os['arch'].respond_to?('each')
|
53
|
+
os['arch'].each { |arch| zip os['name'], arch, @config['out'], os['zip'] ? \
|
54
|
+
"#{os['zip']}_#{arch}" : "#{os['name']}_#{arch}" }
|
55
|
+
else
|
56
|
+
zip os['name'], os['arch'], @config['out'], os['zip'] || "#{os['name']}_#{os['arch']}"
|
57
|
+
end
|
58
|
+
}
|
59
|
+
end
|
60
|
+
rescue => e
|
61
|
+
$stderr.puts "WARNING: Skipping `build` and `zip` tasks: #{e}"
|
62
|
+
end
|
63
|
+
|
64
|
+
desc 'Run `go test` for the native platform'
|
65
|
+
task :test do
|
66
|
+
setenv nil, nil
|
67
|
+
system 'go test' or die 'Tests'
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
# Sets GOARCH and GOOS.
|
72
|
+
def setenv os, arch
|
73
|
+
ENV['GOARCH'] = arch ? arch.to_s : nil
|
74
|
+
ENV['GOOS'] = os
|
75
|
+
end
|
76
|
+
|
77
|
+
# Exits with an error.
|
78
|
+
def die task
|
79
|
+
abort "#{task} failed. Exiting" # Rake returns 1 in something fails.
|
80
|
+
end
|
81
|
+
|
82
|
+
# Executes `go install` for the specified os/arch.
|
83
|
+
def build os, arch
|
84
|
+
setenv os, arch
|
85
|
+
puts "Building #{os}_#{arch}"
|
86
|
+
system 'go install' or die 'Build'
|
87
|
+
end
|
88
|
+
|
89
|
+
# Zips the compiled files.
|
90
|
+
def zip os, arch, dir, file
|
91
|
+
setenv os, arch
|
92
|
+
if system "zip -qj #{dir}/#{file}.zip #{`go list -f '{{.Target}}'`}"
|
93
|
+
puts "Wrote #{dir}/#{file}.zip"
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
data/lib/go4rake.rb
CHANGED
@@ -12,90 +12,6 @@
|
|
12
12
|
# See the License for the specific language governing permissions and
|
13
13
|
# limitations under the License.
|
14
14
|
|
15
|
-
|
16
|
-
require 'yaml'
|
17
|
-
|
18
|
-
# Rake tasks to cross-compile Go project and ZIP the binaries:
|
19
|
-
# `rake build`, `rake test` and `rake zip`.
|
20
|
-
#
|
21
|
-
# Usage: `require 'go4rake'` in `Rakefile`. Settings are specified in a YAML file: `go4rake.yml`.
|
22
|
-
#
|
23
|
-
# Example config: https://github.com/chillum/httpstress-go/blob/master/go4rake.yml
|
24
|
-
#
|
25
|
-
# `name` is OS name, `arch` is arch and `zip` is ZIP file name (optional).
|
26
|
-
# `arch` is appended to file name if `arch` is a list.
|
27
|
-
#
|
28
|
-
# If `out` is specified, ZIP files will appear in the specified directory;
|
29
|
-
# if not, they will be in current directory.
|
30
|
-
class Go4Rake < ::Rake::TaskLib
|
31
|
-
# Initialize Rake tasks for cross-compiling Go programs.
|
32
|
-
def initialize(*args)
|
33
|
-
|
34
|
-
begin
|
35
|
-
yml = 'go4rake.yml'
|
36
|
-
config = YAML.load_file yml
|
37
|
-
|
38
|
-
desc "Build this project for the platforms in #{yml}"
|
39
|
-
task :build do
|
40
|
-
config['platforms'].each { |os|
|
41
|
-
if os['arch'].respond_to?('each')
|
42
|
-
os['arch'].each { |arch| build os['name'], arch }
|
43
|
-
else
|
44
|
-
build os['name'], os['arch']
|
45
|
-
end
|
46
|
-
}
|
47
|
-
end
|
48
|
-
|
49
|
-
desc 'ZIP this project binaries'
|
50
|
-
task :zip => [:build, :test] do
|
51
|
-
unless config['out']
|
52
|
-
config['out'] = '.' # Default to the current directory, if 'out' is not specified.
|
53
|
-
end
|
54
|
-
|
55
|
-
config['platforms'].each { |os|
|
56
|
-
if os['arch'].respond_to?('each')
|
57
|
-
os['arch'].each { |arch| zip os['name'], arch, config['out'], os['zip'] ? \
|
58
|
-
"#{os['zip']}_#{arch}" : "#{os['name']}_#{arch}" }
|
59
|
-
else
|
60
|
-
zip os['name'], os['arch'], config['out'], os['zip'] || "#{os['name']}_#{os['arch']}"
|
61
|
-
end
|
62
|
-
}
|
63
|
-
end
|
64
|
-
rescue
|
65
|
-
puts "Warning: unable to load #{yml}. Disabling `build` and `zip` tasks."
|
66
|
-
end
|
67
|
-
|
68
|
-
desc 'Run `go test` for the native platform'
|
69
|
-
task :test do
|
70
|
-
setenv nil, nil
|
71
|
-
unless system('go test'); die 'Tests' end
|
72
|
-
end
|
73
|
-
|
74
|
-
def setenv os, arch
|
75
|
-
ENV['GOARCH'] = arch ? arch.to_s : nil
|
76
|
-
ENV['GOOS'] = os
|
77
|
-
end
|
78
|
-
|
79
|
-
def die task
|
80
|
-
puts "#{task} failed. Exiting"
|
81
|
-
exit 1 # Rake returns 1 if something fails.
|
82
|
-
end
|
83
|
-
|
84
|
-
def build os, arch
|
85
|
-
setenv os, arch
|
86
|
-
puts "Building #{os}_#{arch}"
|
87
|
-
unless system('go install'); die 'Build' end
|
88
|
-
end
|
89
|
-
|
90
|
-
def zip os, arch, dir, file
|
91
|
-
setenv os, arch
|
92
|
-
|
93
|
-
if system("zip -qj #{dir}/#{file}.zip #{`go list -f '{{.Target}}'`}")
|
94
|
-
puts "Wrote #{dir}/#{file}.zip"
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
end
|
99
|
-
end
|
15
|
+
require_relative 'go4rake/new'
|
100
16
|
|
101
17
|
Go4Rake.new
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: go4rake
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vasily Korytov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-09-09 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: "`build`, `test` and `zip` tasks for cross-compilation of Go programs"
|
14
14
|
email: vasily.korytov@yahoo.com
|
@@ -18,8 +18,10 @@ extra_rdoc_files: []
|
|
18
18
|
files:
|
19
19
|
- LICENSE.txt
|
20
20
|
- README.md
|
21
|
+
- examples/go4rake.yml
|
21
22
|
- go4rake.gemspec
|
22
23
|
- lib/go4rake.rb
|
24
|
+
- lib/go4rake/new.rb
|
23
25
|
homepage: https://github.com/chillum/go4rake
|
24
26
|
licenses:
|
25
27
|
- Apache-2.0
|