image_optim_pack 0.2.3 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (132) hide show
  1. checksums.yaml +8 -8
  2. data/.gitignore +1 -1
  3. data/.rubocop.yml +3 -0
  4. data/.travis.yml +12 -9
  5. data/Makefile +39 -12
  6. data/README.markdown +14 -9
  7. data/Vagrantfile +45 -7
  8. data/boxes/.gitignore +3 -0
  9. data/boxes/.rubocop.yml +10 -0
  10. data/boxes/Gemfile +6 -0
  11. data/boxes/Rakefile +143 -0
  12. data/boxes/definitions/centos-amd64/definition.rb +30 -0
  13. data/boxes/definitions/centos-amd64/ks.cfg +37 -0
  14. data/boxes/definitions/centos-i386/definition.rb +30 -0
  15. data/boxes/definitions/centos-i386/ks.cfg +37 -0
  16. data/boxes/definitions/centos-postinstall.sh +33 -0
  17. data/boxes/definitions/freebsd-amd64/definition.rb +38 -0
  18. data/boxes/definitions/freebsd-amd64/install.sh +66 -0
  19. data/boxes/definitions/freebsd-i386/definition.rb +38 -0
  20. data/boxes/definitions/freebsd-i386/install.sh +66 -0
  21. data/boxes/definitions/freebsd-postinstall.sh +38 -0
  22. data/boxes/definitions/openbsd-amd64/definition.rb +71 -0
  23. data/boxes/definitions/openbsd-i386/definition.rb +71 -0
  24. data/boxes/definitions/openbsd-postinstall.sh +29 -0
  25. data/image_optim_pack.gemspec +2 -4
  26. data/lib/image_optim/pack.rb +2 -3
  27. data/script/livecheck +29 -2
  28. data/script/run +32 -6
  29. data/script/update_versions +2 -0
  30. data/spec/image_optim/pack_spec.rb +2 -2
  31. data/vendor/{darwin/i386 → darwin-i386}/advpng +0 -0
  32. data/vendor/{darwin/i386 → darwin-i386}/gifsicle +0 -0
  33. data/vendor/{darwin/i386 → darwin-i386}/jhead +0 -0
  34. data/vendor/{darwin/i386 → darwin-i386}/jpeg-recompress +0 -0
  35. data/vendor/{darwin/i386 → darwin-i386}/jpegoptim +0 -0
  36. data/vendor/{darwin/i386 → darwin-i386}/jpegtran +0 -0
  37. data/vendor/{darwin/i386 → darwin-i386}/libjpeg.dylib +0 -0
  38. data/vendor/{darwin/i386 → darwin-i386}/libpng.dylib +0 -0
  39. data/vendor/{darwin/i386 → darwin-i386}/libz.dylib +0 -0
  40. data/vendor/{darwin/i386 → darwin-i386}/optipng +0 -0
  41. data/vendor/darwin-i386/pngcrush +0 -0
  42. data/vendor/{darwin/i386 → darwin-i386}/pngquant +0 -0
  43. data/vendor/{darwin/x86_64 → darwin-x86_64}/advpng +0 -0
  44. data/vendor/{darwin/x86_64 → darwin-x86_64}/gifsicle +0 -0
  45. data/vendor/{darwin/x86_64 → darwin-x86_64}/jhead +0 -0
  46. data/vendor/{darwin/x86_64 → darwin-x86_64}/jpeg-recompress +0 -0
  47. data/vendor/{darwin/x86_64 → darwin-x86_64}/jpegoptim +0 -0
  48. data/vendor/{darwin/x86_64 → darwin-x86_64}/jpegtran +0 -0
  49. data/vendor/{darwin/x86_64 → darwin-x86_64}/libjpeg.dylib +0 -0
  50. data/vendor/{darwin/x86_64 → darwin-x86_64}/libpng.dylib +0 -0
  51. data/vendor/{darwin/x86_64 → darwin-x86_64}/libz.dylib +0 -0
  52. data/vendor/{darwin/x86_64 → darwin-x86_64}/optipng +0 -0
  53. data/vendor/darwin-x86_64/pngcrush +0 -0
  54. data/vendor/{darwin/x86_64 → darwin-x86_64}/pngquant +0 -0
  55. data/vendor/freebsd-amd64/advpng +0 -0
  56. data/vendor/freebsd-amd64/gifsicle +0 -0
  57. data/vendor/freebsd-amd64/jhead +0 -0
  58. data/vendor/freebsd-amd64/jpeg-recompress +0 -0
  59. data/vendor/freebsd-amd64/jpegoptim +0 -0
  60. data/vendor/freebsd-amd64/jpegtran +0 -0
  61. data/vendor/freebsd-amd64/libjpeg.so +0 -0
  62. data/vendor/freebsd-amd64/libpng.so +0 -0
  63. data/vendor/freebsd-amd64/libz.so +0 -0
  64. data/vendor/freebsd-amd64/optipng +0 -0
  65. data/vendor/freebsd-amd64/pngcrush +0 -0
  66. data/vendor/freebsd-amd64/pngquant +0 -0
  67. data/vendor/freebsd-i386/advpng +0 -0
  68. data/vendor/freebsd-i386/gifsicle +0 -0
  69. data/vendor/freebsd-i386/jhead +0 -0
  70. data/vendor/freebsd-i386/jpeg-recompress +0 -0
  71. data/vendor/freebsd-i386/jpegoptim +0 -0
  72. data/vendor/freebsd-i386/jpegtran +0 -0
  73. data/vendor/freebsd-i386/libjpeg.so +0 -0
  74. data/vendor/freebsd-i386/libpng.so +0 -0
  75. data/vendor/freebsd-i386/libz.so +0 -0
  76. data/vendor/freebsd-i386/optipng +0 -0
  77. data/vendor/freebsd-i386/pngcrush +0 -0
  78. data/vendor/freebsd-i386/pngquant +0 -0
  79. data/vendor/{linux/i686 → linux-i686}/advpng +0 -0
  80. data/vendor/{linux/i686 → linux-i686}/gifsicle +0 -0
  81. data/vendor/{linux/i686 → linux-i686}/jhead +0 -0
  82. data/vendor/{linux/i686 → linux-i686}/jpeg-recompress +0 -0
  83. data/vendor/{linux/i686 → linux-i686}/jpegoptim +0 -0
  84. data/vendor/{linux/i686 → linux-i686}/jpegtran +0 -0
  85. data/vendor/{linux/i686 → linux-i686}/libjpeg.so +0 -0
  86. data/vendor/{linux/i686 → linux-i686}/libpng.so +0 -0
  87. data/vendor/{linux/i686 → linux-i686}/libz.so +0 -0
  88. data/vendor/{linux/i686 → linux-i686}/optipng +0 -0
  89. data/vendor/linux-i686/pngcrush +0 -0
  90. data/vendor/{linux/i686 → linux-i686}/pngquant +0 -0
  91. data/vendor/{linux/x86_64 → linux-x86_64}/advpng +0 -0
  92. data/vendor/{linux/x86_64 → linux-x86_64}/gifsicle +0 -0
  93. data/vendor/{linux/x86_64 → linux-x86_64}/jhead +0 -0
  94. data/vendor/{linux/x86_64 → linux-x86_64}/jpeg-recompress +0 -0
  95. data/vendor/{linux/x86_64 → linux-x86_64}/jpegoptim +0 -0
  96. data/vendor/{linux/x86_64 → linux-x86_64}/jpegtran +0 -0
  97. data/vendor/{linux/x86_64 → linux-x86_64}/libjpeg.so +0 -0
  98. data/vendor/{linux/x86_64 → linux-x86_64}/libpng.so +0 -0
  99. data/vendor/{linux/x86_64 → linux-x86_64}/libz.so +0 -0
  100. data/vendor/{linux/x86_64 → linux-x86_64}/optipng +0 -0
  101. data/vendor/linux-x86_64/pngcrush +0 -0
  102. data/vendor/{linux/x86_64 → linux-x86_64}/pngquant +0 -0
  103. data/vendor/openbsd-amd64/advpng +0 -0
  104. data/vendor/openbsd-amd64/gifsicle +0 -0
  105. data/vendor/openbsd-amd64/jhead +0 -0
  106. data/vendor/openbsd-amd64/jpeg-recompress +0 -0
  107. data/vendor/openbsd-amd64/jpegoptim +0 -0
  108. data/vendor/openbsd-amd64/jpegtran +0 -0
  109. data/vendor/openbsd-amd64/libjpeg.so +0 -0
  110. data/vendor/openbsd-amd64/libpng.so +0 -0
  111. data/vendor/openbsd-amd64/libz.so +0 -0
  112. data/vendor/openbsd-amd64/optipng +0 -0
  113. data/vendor/openbsd-amd64/pngcrush +0 -0
  114. data/vendor/openbsd-amd64/pngquant +0 -0
  115. data/vendor/openbsd-i386/advpng +0 -0
  116. data/vendor/openbsd-i386/gifsicle +0 -0
  117. data/vendor/openbsd-i386/jhead +0 -0
  118. data/vendor/openbsd-i386/jpeg-recompress +0 -0
  119. data/vendor/openbsd-i386/jpegoptim +0 -0
  120. data/vendor/openbsd-i386/jpegtran +0 -0
  121. data/vendor/openbsd-i386/libjpeg.so +0 -0
  122. data/vendor/openbsd-i386/libpng.so +0 -0
  123. data/vendor/openbsd-i386/libz.so +0 -0
  124. data/vendor/openbsd-i386/optipng +0 -0
  125. data/vendor/openbsd-i386/pngcrush +0 -0
  126. data/vendor/openbsd-i386/pngquant +0 -0
  127. metadata +115 -93
  128. data/script/vm_init +0 -30
  129. data/vendor/darwin/i386/pngcrush +0 -0
  130. data/vendor/darwin/x86_64/pngcrush +0 -0
  131. data/vendor/linux/i686/pngcrush +0 -0
  132. data/vendor/linux/x86_64/pngcrush +0 -0
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- YWUyNWZhNTE2NWJhZGFmN2M4YjdlZTY2ZjMwMDlhNmJmYjk4NmJlOA==
4
+ NDJlODk4ZjgyOGU3ODVmMTMxYzFhN2VmNDBiYzU5ZGFkMmJjMDg4Nw==
5
5
  data.tar.gz: !binary |-
6
- MmU0Y2YzYTBhMzgyZGZmMmVkMDI2YTdmMzUwOTI0Zjc2NDJhMmNhMg==
6
+ Yjk1NzE3MzdkZDJhM2RhYTBkNTFlNjgzYzhhNjI5YzEzMDk0ODFlMQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- YTc1YzMyZTU4MWMyMDJlZjMxNTU0ZDg0NTlkZTRhOGY1M2I2NTViODJiYmEy
10
- NGU5MGRmYmViY2ViZmJjYmQ3MmY2NWM0ZDQ5ZTJhODk0OTMxZDNkMjM0ZTBi
11
- ZDQ1YmZlNTMyMTE0YjIyZGZhNWU1ODZiYmU1YzM1ZTEyNTBhNzI=
9
+ MjAxMTI2ZTY3MDEyMzFmZmQ4ODI4MGMyZTczN2Y5YWZiOTkyYzAxZmFmN2Y4
10
+ NzgyMjZjYzBhYTJjYTY5OTQ5Y2Y5MmQzNTIxZWYxNTNhMWQwNzIzYjA3MzEy
11
+ ZWM5OTk5NTczYTNmMjVhYzMzZDZiMWEyNTM3YWEwZGU1NGQxNWY=
12
12
  data.tar.gz: !binary |-
13
- ZTE0NmUzMzRlNTE5Nzg1YWEyN2VkMDczMmJhNzQ5MDY4M2I2ZjM1M2E5Mjhk
14
- ZmE2MjBkNDUyNmFjODk0OGM3MTc4ZTgyYWUwNTIzOTgwNDU0ZWI2OTUwMTEz
15
- ODc0YzdmMWViOWZhMWFiODFiMTQwMmIyMTAxMjEyYTdiMzcxNzI=
13
+ NDQzODVkODljZTQ0YWRhNDMzYzE1ZDgyNTVmYTg2YzAxNmM5Yzc5MmJjZjA1
14
+ ZTI5YWM1ZjFjNTk1MjQ0NTNkMjg3M2I5MjE0MjNlYWU0YTUyYjZiNDdhMjJi
15
+ YTEzNzg3OTY3OGY2ODUyYjE5MWNhMWVlYzA5N2Q3MmY0MmZjNTk=
data/.gitignore CHANGED
@@ -2,7 +2,7 @@
2
2
  /download/
3
3
  /.vagrant/
4
4
 
5
- /Gemfile.lock
5
+ Gemfile.lock
6
6
  /*.gem
7
7
  /.bundle
8
8
  /tmp/
data/.rubocop.yml CHANGED
@@ -12,6 +12,9 @@ Metrics/MethodLength:
12
12
  Style/AccessModifierIndentation:
13
13
  EnforcedStyle: outdent
14
14
 
15
+ Style/Alias:
16
+ EnforcedStyle: prefer_alias_method
17
+
15
18
  Style/CaseIndentation:
16
19
  IndentWhenRelativeTo: end
17
20
 
data/.travis.yml CHANGED
@@ -9,14 +9,17 @@ rvm:
9
9
  - jruby-18mode
10
10
  - jruby-19mode
11
11
  - ree
12
- script:
13
- if [ -z "$RUBOCOP" ]; then
14
- make test
15
- && bundle exec image_optim --info
16
- && bundle exec rspec
17
- ; else
18
- bundle exec rubocop
19
- ; fi
12
+ script: |
13
+ (
14
+ set -ex
15
+ if [ -n "$RUBOCOP" ]; then
16
+ bundle exec rubocop
17
+ else
18
+ make test
19
+ bundle exec image_optim --info
20
+ bundle exec rspec
21
+ fi
22
+ )
20
23
  before_install:
21
24
  if [ $TRAVIS_OS_NAME == osx ]; then brew update && brew install imagemagick; fi
22
25
  matrix:
@@ -25,4 +28,4 @@ matrix:
25
28
  - os: osx
26
29
  rvm: default
27
30
  - env: RUBOCOP=true
28
- rvm: default
31
+ rvm: '2'
data/Makefile CHANGED
@@ -12,7 +12,7 @@ LIBMOZJPEG_VER := 3.1
12
12
  LIBPNG_VER := 1.6.23
13
13
  LIBZ_VER := 1.2.8
14
14
  OPTIPNG_VER := 0.7.6
15
- PNGCRUSH_VER := 1.8.1
15
+ PNGCRUSH_VER := 1.8.2
16
16
  PNGQUANT_VER := 2.7.1
17
17
 
18
18
  # ====== CONSTANTS ======
@@ -21,14 +21,18 @@ OS := $(shell uname -s | tr A-Z a-z)
21
21
  ARCH := $(shell uname -m)
22
22
 
23
23
  IS_DARWIN := $(findstring darwin,$(OS))
24
+ IS_LINUX := $(findstring linux,$(OS))
25
+ IS_BSD := $(findstring bsd,$(OS))
26
+ IS_FREEBSD := $(findstring freebsd,$(OS))
27
+ IS_OPENBSD := $(findstring openbsd,$(OS))
24
28
  DLEXT := $(if $(IS_DARWIN),.dylib,.so)
25
29
  HOST := $(ARCH)-$(if $(IS_DARWIN),apple,pc)-$(OS)
26
30
 
27
31
  DL_DIR := $(CURDIR)/download
28
32
  BUILD_ROOT_DIR := $(CURDIR)/build
29
- BUILD_DIR := $(BUILD_ROOT_DIR)/$(OS)/$(ARCH)
33
+ BUILD_DIR := $(BUILD_ROOT_DIR)/$(OS)-$(ARCH)
30
34
  OUTPUT_ROOT_DIR := $(CURDIR)/vendor
31
- OUTPUT_DIR := $(OUTPUT_ROOT_DIR)/$(OS)/$(ARCH)
35
+ OUTPUT_DIR := $(OUTPUT_ROOT_DIR)/$(OS)-$(ARCH)
32
36
 
33
37
  # ====== HELPERS ======
34
38
 
@@ -36,6 +40,7 @@ downcase = $(shell echo $1 | tr A-Z a-z)
36
40
 
37
41
  mkpath := mkdir -p
38
42
  ln_s := ln -sf
43
+ tar := $(shell if command -v gtar >/dev/null 2>&1; then echo gtar; else echo tar; fi)
39
44
 
40
45
  # lock using %.lock dir, download to %.tmp rename to %, remove %.lock
41
46
  define download
@@ -105,7 +110,10 @@ $(call target-build,$1,$2,$3)
105
110
  PRODUCTS += $1
106
111
  # copy product to output dir
107
112
  $$(OUTPUT_DIR)/$$($1_BASENAME) : $$($1_TARGET)
108
- strip $$< -Sx -o $$@
113
+ temppath=`mktemp tmp.XXXXXXXXXX` && \
114
+ strip $$< -Sx -o "$$$$temppath" && \
115
+ chmod 755 "$$$$temppath" && \
116
+ mv "$$$$temppath" $$@
109
117
  # short name target
110
118
  $(call downcase,$1) : | $$(OUTPUT_DIR)/$$($1_BASENAME)
111
119
  endef
@@ -136,6 +144,7 @@ download-tidy-up :
136
144
  build : $(foreach product,$(PRODUCTS),$($(product)_TARGET))
137
145
 
138
146
  define check_bin
147
+ @printf "$1: "
139
148
  @test -f $(OUTPUT_DIR)/$1 || (echo "no $1"; false)
140
149
  @# if bin exists check architecture
141
150
  @test ! -f $(OUTPUT_DIR)/$1 || \
@@ -143,15 +152,15 @@ define check_bin
143
152
  (echo "Expected $(ARCH_STRING), got $$(file -b $(OUTPUT_DIR)/$1)"; false)
144
153
  @# if bin exists check and output version
145
154
  @test ! -f $(OUTPUT_DIR)/$1 || \
146
- $(OUTPUT_DIR)/$1 $2 | fgrep --color $3 || \
155
+ $(OUTPUT_DIR)/$1 $2 | fgrep -o $3 || \
147
156
  (echo "Expected $3, got $$($(OUTPUT_DIR)/$1 $2)"; false)
148
157
  endef
149
158
 
150
159
  ifdef IS_DARWIN
151
160
  test : ARCH_STRING := $(ARCH)
152
- else ifeq (i686,$(ARCH))
161
+ else ifeq (i386,$(ARCH:i686=i386))
153
162
  test : ARCH_STRING := Intel 80386
154
- else ifeq (x86_64,$(ARCH))
163
+ else ifeq (amd64,$(ARCH:x86_64=amd64))
155
164
  test : ARCH_STRING := x86-64
156
165
  endif
157
166
  test :
@@ -209,18 +218,29 @@ endef
209
218
  define clean_untar
210
219
  rm -rf $(@D)
211
220
  $(mkpath) $(@D)
212
- tar -C $(@D) --strip-components=1 -m -xzf $<
221
+ $(tar) -C $(@D) --strip-components=1 -xzf $<
213
222
  touch $(@D)/__$(notdir $<)__
214
223
  endef
215
224
 
216
225
  pkgconfig_pwd = perl -pi -e 's/(?<=dir=).*/$$ENV{PWD}/'
217
226
 
218
- libtool_target_soname = cd $(@D) && perl -pi -e 's/(?<=soname_spec=)".*"/"$(@F)"/' -- libtool
227
+ libtool_target_soname = cd $(@D) && perl -pi -e 's/(?<=soname_spec=)".*"/"$(@F)"/ ; s/(?<=library_names_spec=)".*"/"\\\$$libname\\\$$shared_ext"/' -- libtool
219
228
 
220
- chrpath_origin = $(if $(IS_DARWIN),,chrpath -r '$$ORIGIN' $1)
229
+ ifdef IS_DARWIN
230
+ chrpath_origin =
231
+ else ifdef IS_OPENBSD
232
+ chrpath_origin = perl -pi -e 's/XORIGIN/\$$ORIGIN/' -- $1
233
+ else
234
+ chrpath_origin = chrpath -r '$$ORIGIN' $1
235
+ endif
221
236
 
237
+ ifdef IS_LINUX
222
238
  XORIGIN := -Wl,-rpath,XORIGIN
223
- XORIGIN := $(if $(IS_DARWIN),,$(XORIGIN))
239
+ else ifdef IS_BSD
240
+ XORIGIN := -Wl,-rpath,XORIGIN -Wl,-z,origin
241
+ else
242
+ XORIGIN :=
243
+ endif
224
244
 
225
245
  export CC = gcc
226
246
  export CXX = g++
@@ -240,6 +260,12 @@ ifdef IS_DARWIN
240
260
  export MACOSX_DEPLOYMENT_TARGET=10.6
241
261
  endif
242
262
 
263
+ ifdef IS_BSD
264
+ autotool_version = $(shell printf '%s\n' /usr/local/bin/$1-* | egrep -o '[0-9][^-]+$$' | tail -n 1)
265
+ export AUTOCONF_VERSION := $(call autotool_version,autoconf)
266
+ export AUTOMAKE_VERSION := $(call autotool_version,automake)
267
+ endif
268
+
243
269
  ## advpng
244
270
  $(eval $(call depend,ADVPNG,LIBZ))
245
271
  $(ADVPNG_TARGET) :; $(clean_untar)
@@ -260,7 +286,8 @@ $(JHEAD_TARGET) :; $(clean_untar)
260
286
  ## jpeg-recompress
261
287
  $(eval $(call depend-build,JPEG-RECOMPRESS,LIBMOZJPEG))
262
288
  $(JPEG-RECOMPRESS_TARGET) :; $(clean_untar)
263
- cd $(@D) && $(MAKE) jpeg-recompress CC="$(CC) $(GCC_FLAGS)" LIBJPEG=$(LIBMOZJPEG_TARGET)
289
+ cd $(@D) && $(MAKE) jpeg-recompress CC="$(CC) $(GCC_FLAGS)" LIBJPEG=$(LIBMOZJPEG_TARGET) \
290
+ MAKE=$(MAKE) # fix for bsd in jpeg-archive-2.1.1
264
291
 
265
292
  ## jpegoptim
266
293
  $(eval $(call depend,JPEGOPTIM,LIBJPEG))
data/README.markdown CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  Precompiled binaries for [`image_optim`](https://github.com/toy/image_optim).
10
10
 
11
- Contains binaries for Mac OS X (>= 10.6, i386 and x86\_64) and Linux (i686 and x86\_64).
11
+ Contains binaries for Mac OS X (>= 10.6, i386 and x86\_64), Linux (i686 and x86\_64), FreeBSD (i386 and amd64) and OpenBSD (i386 and amd64).
12
12
 
13
13
  ## Binaries and libraries
14
14
 
@@ -37,6 +37,8 @@ Contains binaries for Mac OS X (>= 10.6, i386 and x86\_64) and Linux (i686 and x
37
37
  * [pngquant](http://pngquant.org/) by Kornel Lesiński based on code by Greg Roelofs and Jef Poskanzer after an idea by Stefan Schneider ([license](acknowledgements/pngquant.txt))
38
38
  * [zlib](http://zlib.net/) by Jean-Loup Gailly and Mark Adler ([license](acknowledgements/zlib.txt))
39
39
 
40
+ **NOTE: On FreeBSD and OpenBSD `make` is not the GNU Make, so `gmake` should be used instead.**
41
+
40
42
  You can download all source code using gnu make download target:
41
43
 
42
44
  ```sh
@@ -58,27 +60,30 @@ gem 'image_optim_pack'
58
60
 
59
61
  ## Development
60
62
 
61
- Mac OS X binaries and libraries are built on host, others using vagrant.
63
+ Mac OS X binaries and libraries are built on host, others using [vagrant](https://www.vagrantup.com/).
64
+
65
+ Boxes for vagrant are built using [veewee](https://github.com/jedi4ever/veewee), check [boxes/Rakefile](boxes/Rakefile) and [boxes/definitions](boxes/definitions).
62
66
 
63
67
  ```sh
64
68
  script/run # Build and test all for all oses and architectures
65
69
  script/run NO_HALT=1 # Don't halt VMs after building
66
70
 
67
- make all # Build and copy all to output directory for current os/arch, then test
68
- make run # => all
71
+ make # Build all tools and copy them to vendor/OS-ARCH for current OS and ARCH, then test
72
+ make all # same
73
+ make run # same
69
74
 
70
- make test # Test bins for current os/arch
71
- make test -i # Continue if one of bins fail
75
+ make livecheck # Check versions
76
+ make update-versions # Update versions in Makefile
72
77
 
73
78
  make download # Download archives
74
79
  make build # Build all without copying to output directory
75
80
 
76
- make livecheck # Check versions
77
- make update-versions # Update versions in Makefile
81
+ make test # Test bins for current os/arch
82
+ make test -i # Continue if one of bins fail
78
83
 
79
84
  make clean # Remove build and output directories for current os/arch
80
85
  make clean-all # Remove build root and output root directories
81
- make clobber # `claen-all` and remove download directory
86
+ make clobber # `clean-all` and remove download directory
82
87
  ```
83
88
 
84
89
  ## Copyright
data/Vagrantfile CHANGED
@@ -1,13 +1,51 @@
1
+ Vagrant.require_version '!= 1.8.5' # OpenBSD can't be halted in 1.8.5
2
+
1
3
  Vagrant.configure('2') do |config|
4
+ # don't mess with keys
5
+ config.ssh.insert_key = false
6
+
7
+ # handle manually using rsync
8
+ config.vm.synced_folder '.', '/vagrant', disabled: true
9
+
2
10
  {
3
- linux_i686: 'chef/centos-6.5-i386',
4
- linux_x86_64: 'chef/centos-6.5',
5
- }.each do |name, url|
11
+ 'linux-x86_64' => 'boxes/centos-amd64.box',
12
+ 'linux-i686' => 'boxes/centos-i386.box',
13
+ 'freebsd-amd64' => 'boxes/freebsd-amd64.box',
14
+ 'freebsd-i386' => 'boxes/freebsd-i386.box',
15
+ 'openbsd-amd64' => 'boxes/openbsd-amd64.box',
16
+ 'openbsd-i386' => 'boxes/openbsd-i386.box',
17
+ }.each do |name, location|
6
18
  config.vm.define name do |machine|
7
- machine.vm.hostname = name.to_s.gsub('_', '-')
8
- machine.vm.box = url
19
+ machine.vm.hostname = name.gsub('_', '-')
20
+ machine.vm.box = location
21
+
22
+ machine.vm.provision :shell, inline: case name
23
+ when /^linux/
24
+ <<-SH
25
+ set -ex
26
+ yum -y install rsync ntpdate make wget gcc gcc-c++ chrpath perl pkg-config autoconf automake libtool nasm
27
+ SH
28
+ when /^freebsd/
29
+ <<-SH
30
+ set -ex
31
+ pkg install -y rsync ntp gmake wget gcc chrpath perl5 pkgconf autoconf automake libtool nasm
32
+ SH
33
+ when /^openbsd/
34
+ <<-SH
35
+ set -ex
36
+ pkg_add -z rsync-- ntp gmake gtar-- wget gcc-4.8.2p2 autoconf-2.69 automake-1.14.1 libtool nasm
37
+ path=/home/vagrant/shared
38
+ mkdir -p $path
39
+ chown vagrant:vagrant $path
40
+ ln -nfs $path /vagrant
41
+ SH
42
+ end
43
+
44
+ machine.vm.provision :shell, inline: <<-SH
45
+ set -ex
46
+ mkdir -p /vagrant
47
+ chown vagrant:vagrant /vagrant
48
+ SH
9
49
  end
10
50
  end
11
-
12
- config.vm.provision :shell, path: 'script/vm_init'
13
51
  end
data/boxes/.gitignore ADDED
@@ -0,0 +1,3 @@
1
+ /*.box
2
+ /.env
3
+ /iso/
@@ -0,0 +1,10 @@
1
+ inherit_from: ../.rubocop.yml
2
+
3
+ Lint/Eval:
4
+ Exclude: [Rakefile]
5
+
6
+ Metrics/LineLength:
7
+ Enabled: false
8
+
9
+ Style/BracesAroundHashParameters:
10
+ Enabled: false
data/boxes/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'veewee', '= 0.4.5.1'
4
+ gem 'dotenv', '~> 2.0'
5
+ gem 'atlas', '~> 1.3'
6
+ gem 'progress', '~> 3.1'
data/boxes/Rakefile ADDED
@@ -0,0 +1,143 @@
1
+ require 'atlas'
2
+ require 'dotenv/tasks'
3
+ require 'pathname'
4
+ require 'progress'
5
+
6
+ # Show progress when file is read by excon used by atlas
7
+ class BodyProgress # :nodoc:
8
+ def initialize(path, &block)
9
+ fail ArgumentError, 'block required' unless block
10
+ @io = File.open(path)
11
+ Progress.start(path, File.size(path)) do
12
+ yield self
13
+ end
14
+ end
15
+
16
+ def size
17
+ @io.size
18
+ end
19
+
20
+ def read(length)
21
+ data = @io.read(length)
22
+ Progress.step data.length if data
23
+ data
24
+ end
25
+ end
26
+
27
+ class Box # :nodoc:
28
+ attr_reader :definition_path, :definition_dir, :name, :path
29
+
30
+ def initialize(definition_path)
31
+ @definition_path = Pathname(definition_path)
32
+ @definition_dir = @definition_path.dirname
33
+ @name = @definition_dir.basename.to_s
34
+ @path = Pathname("#{@name}.box")
35
+ end
36
+
37
+ def dependencies
38
+ [definition_path] + Array(definition[:postinstall_files]).map do |path|
39
+ definition_dir + path
40
+ end
41
+ end
42
+
43
+ def build
44
+ sh(*%W[veewee vbox build --auto --checksum --force --nogui #{name}])
45
+ sh(*%w[sleep 30])
46
+ sh(*%W[veewee vbox export --force #{name}])
47
+ sh(*%W[veewee vbox destroy #{name}])
48
+ end
49
+
50
+ def add
51
+ assert_box_created
52
+
53
+ sh(*%W[vagrant box add --force --name boxes/#{path} #{path}])
54
+ end
55
+
56
+ def upload(version)
57
+ assert_box_created
58
+
59
+ box = Atlas::Box.create({
60
+ :username => 'image_optim_pack',
61
+ :name => name,
62
+ :short_description => "minimal #{name} (bash, wget) from #{definition[:iso_file]}",
63
+ })
64
+
65
+ version = box.create_version(:version => version)
66
+
67
+ provider = version.create_provider(:name => 'virtualbox')
68
+
69
+ BodyProgress.new(path) do |f|
70
+ provider.upload(f)
71
+ end
72
+
73
+ version.release
74
+ end
75
+
76
+ private
77
+
78
+ def definition
79
+ @definition ||= begin
80
+ eval definition_path.read.sub('Veewee::Session.declare', '{}.merge')
81
+ end
82
+ end
83
+
84
+ def assert_box_created
85
+ abort "#{path} doesn't exist" unless path.size?
86
+ end
87
+
88
+ def sh(*args)
89
+ abort unless system(*args)
90
+ end
91
+ end
92
+
93
+ task :atlas => :dotenv do
94
+ token = ENV['ATLAS_TOKEN'].to_s
95
+ fail 'ATLAS_TOKEN missing' if token.empty?
96
+ Atlas.configure do |config|
97
+ config.access_token = token
98
+ end
99
+ end
100
+
101
+ desc 'build all boxes'
102
+ task :build
103
+
104
+ desc 'add all boxes to vagrant'
105
+ task :add
106
+
107
+ desc 'upload all boxes to atlas'
108
+ task :upload
109
+
110
+ version = Time.now.strftime('%Y%m%d.0.0')
111
+ Dir['definitions/*/definition.rb'].each do |definition_path|
112
+ box = Box.new(definition_path)
113
+
114
+ desc "build #{box.path}"
115
+ file box.path => box.dependencies do
116
+ box.build
117
+ end
118
+ task :build => box.path
119
+
120
+ namespace :add do
121
+ desc "add #{box.path}"
122
+ task box.name => box.path do
123
+ box.add
124
+ end
125
+ end
126
+ task :add => "add:#{box.name}"
127
+
128
+ namespace :upload do
129
+ desc "upload #{box.path}"
130
+ task box.name => [:atlas, box.path] do
131
+ box.upload(version)
132
+ end
133
+ end
134
+ task :upload => "upload:#{box.name}"
135
+ end
136
+
137
+ desc 'remove *.box and iso dir'
138
+ task :clean do
139
+ sh 'rm *.box || true'
140
+ sh 'rm -r iso || true'
141
+ end
142
+
143
+ task :default => :build