getrepos 0.1.0

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 (58) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +6 -0
  3. data/README.md +154 -0
  4. data/Rakefile +16 -0
  5. data/bin/getrepos +68 -0
  6. data/getrepos.gemspec +29 -0
  7. data/lib/getrepos/init.rb +34 -0
  8. data/lib/getrepos/install.rb +115 -0
  9. data/lib/getrepos/util.rb +48 -0
  10. data/lib/getrepos/version.rb +3 -0
  11. data/lib/getrepos.rb +3 -0
  12. data/test/basic-usage-test.sh +80 -0
  13. data/test/check-test.sh +60 -0
  14. data/test/common-archives-test.sh +63 -0
  15. data/test/github-archives-test.sh +108 -0
  16. data/test/helper/roundup.sh +307 -0
  17. data/test/helper/valid_json.rb +25 -0
  18. data/test/path-filter-test.sh +28 -0
  19. data/test/repos-basic-usage.json +24 -0
  20. data/test/repos-check-absent-all.json +3 -0
  21. data/test/repos-check-absent-name.json +3 -0
  22. data/test/repos-check-absent-repos.json +3 -0
  23. data/test/repos-check-absent-url.json +3 -0
  24. data/test/repos-check-absent-version.json +3 -0
  25. data/test/repos-check-invalid-filetype.json +3 -0
  26. data/test/repos-common-httpd-tar-bz2.json +3 -0
  27. data/test/repos-common-httpd-tar-gz.json +3 -0
  28. data/test/repos-common-mod_fcgid-tar-bz2.json +3 -0
  29. data/test/repos-common-mod_fcgid-tar-gz.json +3 -0
  30. data/test/repos-common-python-tar-xz.json +3 -0
  31. data/test/repos-common-python-tgz.json +3 -0
  32. data/test/repos-common-ruby-tar-bz2.json +3 -0
  33. data/test/repos-common-ruby-tar-gz.json +3 -0
  34. data/test/repos-common-ruby-tar-xz.json +3 -0
  35. data/test/repos-common-ruby-zip.json +3 -0
  36. data/test/repos-github-hiredis-git.json +3 -0
  37. data/test/repos-github-hiredis-tar-gz.json +3 -0
  38. data/test/repos-github-hiredis-zip.json +3 -0
  39. data/test/repos-github-libmaxminddb-git.json +3 -0
  40. data/test/repos-github-libmaxminddb-release-tar-gz.json +3 -0
  41. data/test/repos-github-libmaxminddb-tar-gz.json +3 -0
  42. data/test/repos-github-libmaxminddb-zip.json +3 -0
  43. data/test/repos-github-other-name-id-tar-gz.json +3 -0
  44. data/test/repos-github-other-name-id-zip.json +3 -0
  45. data/test/repos-github-other-name-id.json +3 -0
  46. data/test/repos-github-other-name-tag-tar-gz.json +3 -0
  47. data/test/repos-github-other-name-tag-zip.json +3 -0
  48. data/test/repos-github-other-name-tag.json +3 -0
  49. data/test/repos-github-same-name-id-tar-gz.json +3 -0
  50. data/test/repos-github-same-name-id-zip.json +3 -0
  51. data/test/repos-github-same-name-id.json +3 -0
  52. data/test/repos-github-same-name-tag-tar-gz.json +3 -0
  53. data/test/repos-github-same-name-tag-zip.json +3 -0
  54. data/test/repos-github-same-name-tag.json +3 -0
  55. data/test/repos-path-filter-git.json +5 -0
  56. data/test/repos-path-filter-tar-gz.json +5 -0
  57. data/test/repos-path-filter-zip.json +5 -0
  58. metadata +181 -0
@@ -0,0 +1,63 @@
1
+ #!/bin/bash
2
+
3
+ describe "Common archive packages handling (tar.gz/tgz, tar.bz2, tar.xz, zip, jar)"
4
+
5
+ before() {
6
+ rm -rf build
7
+ }
8
+
9
+ after() {
10
+ rm -rf build
11
+ }
12
+
13
+ it_common_httpd_tar_gz() {
14
+ ../bin/getrepos install repos-common-httpd-tar-gz.json
15
+ test -f build/repos/httpd-2.4.18/configure
16
+ }
17
+
18
+ it_common_httpd_tar_bz2() {
19
+ ../bin/getrepos install repos-common-httpd-tar-bz2.json
20
+ test -f build/repos/httpd-2.4.18/configure
21
+ }
22
+
23
+ it_common_mod_fcgid_tar_gz() {
24
+ ../bin/getrepos install repos-common-mod_fcgid-tar-gz.json
25
+ test -f build/repos/mod_fcgid-2.3.9/configure.apxs
26
+ }
27
+
28
+ it_common_mod_fcgid_tar_bz2() {
29
+ ../bin/getrepos install repos-common-mod_fcgid-tar-bz2.json
30
+ test -f build/repos/mod_fcgid-2.3.9/configure.apxs
31
+ }
32
+
33
+ it_common_python_tgz() {
34
+ ../bin/getrepos install repos-common-python-tgz.json
35
+ test -f build/repos/python-3.5.1/configure
36
+ }
37
+
38
+ it_common_python_tar_xz() {
39
+ ../bin/getrepos install repos-common-python-tar-xz.json
40
+ test -f build/repos/python-3.5.1/configure
41
+ }
42
+
43
+ it_common_ruby_tar_gz() {
44
+ ../bin/getrepos install repos-common-ruby-tar-gz.json
45
+ test -f build/repos/ruby-2.3.0/configure
46
+ }
47
+
48
+ it_common_ruby_tar_bz2() {
49
+ ../bin/getrepos install repos-common-ruby-tar-bz2.json
50
+ test -f build/repos/ruby-2.3.0/configure
51
+ }
52
+
53
+ it_common_ruby_tar_xz() {
54
+ ../bin/getrepos install repos-common-ruby-tar-xz.json
55
+ test -f build/repos/ruby-2.3.0/configure
56
+ }
57
+
58
+ it_common_ruby_zip() {
59
+ ../bin/getrepos install repos-common-ruby-zip.json
60
+ test -f build/repos/ruby-2.3.0/configure
61
+ }
62
+
63
+ # EOF
@@ -0,0 +1,108 @@
1
+ #!/bin/bash
2
+
3
+ describe "GitHub archives handling (git, tar.gz, zip)"
4
+
5
+ before() {
6
+ rm -rf build
7
+ }
8
+
9
+ after() {
10
+ rm -rf build
11
+ }
12
+
13
+ it_github_same_name_id() {
14
+ ../bin/getrepos install repos-github-same-name-id.json
15
+ test -f build/repos/nginx-push-stream-module-b2056f63c27117952afc82d7a295acf0054edc28/config
16
+ }
17
+
18
+ it_github_same_name_id_tar_gz() {
19
+ ../bin/getrepos install repos-github-same-name-id-tar-gz.json
20
+ test -f build/repos/nginx-push-stream-module-b2056f63c27117952afc82d7a295acf0054edc28/config
21
+ }
22
+
23
+ it_github_same_name_id_zip() {
24
+ ../bin/getrepos install repos-github-same-name-id-zip.json
25
+ test -f build/repos/nginx-push-stream-module-b2056f63c27117952afc82d7a295acf0054edc28/config
26
+ }
27
+
28
+ it_github_same_name_tag() {
29
+ ../bin/getrepos install repos-github-same-name-tag.json
30
+ test -f build/repos/nginx-push-stream-module-0.5.1/config
31
+ }
32
+
33
+ it_github_same_name_tag_tar_gz() {
34
+ ../bin/getrepos install repos-github-same-name-tag-tar-gz.json
35
+ test -f build/repos/nginx-push-stream-module-0.5.1/config
36
+ }
37
+
38
+ it_github_same_name_tag_zip() {
39
+ ../bin/getrepos install repos-github-same-name-tag-zip.json
40
+ test -f build/repos/nginx-push-stream-module-0.5.1/config
41
+ }
42
+
43
+ it_github_other_name_id() {
44
+ ../bin/getrepos install repos-github-other-name-id.json
45
+ test -f build/repos/nginx-push-stream-b2056f63c27117952afc82d7a295acf0054edc28/config
46
+ }
47
+
48
+ it_github_other_name_id_tar_gz() {
49
+ ../bin/getrepos install repos-github-other-name-id-tar-gz.json
50
+ test -f build/repos/nginx-push-stream-b2056f63c27117952afc82d7a295acf0054edc28/config
51
+ }
52
+
53
+ it_github_other_name_id_zip() {
54
+ ../bin/getrepos install repos-github-other-name-id-zip.json
55
+ test -f build/repos/nginx-push-stream-b2056f63c27117952afc82d7a295acf0054edc28/config
56
+ }
57
+
58
+ it_github_other_name_tag() {
59
+ ../bin/getrepos install repos-github-other-name-tag.json
60
+ test -f build/repos/nginx-push-stream-0.5.1/config
61
+ }
62
+
63
+ it_github_other_name_tag_tar_gz() {
64
+ ../bin/getrepos install repos-github-other-name-tag-tar-gz.json
65
+ test -f build/repos/nginx-push-stream-0.5.1/config
66
+ }
67
+
68
+ it_github_other_name_tag_zip() {
69
+ ../bin/getrepos install repos-github-other-name-tag-zip.json
70
+ test -f build/repos/nginx-push-stream-0.5.1/config
71
+ }
72
+
73
+ it_github_hiredis_git() {
74
+ ../bin/getrepos install repos-github-hiredis-git.json
75
+ test -f build/repos/hiredis-v0.13.3/Makefile
76
+ }
77
+
78
+ it_github_hiredis_tar_gz() {
79
+ ../bin/getrepos install repos-github-hiredis-tar-gz.json
80
+ test -f build/repos/hiredis-0.13.3/Makefile
81
+ }
82
+
83
+ it_github_hiredis_zip() {
84
+ ../bin/getrepos install repos-github-hiredis-zip.json
85
+ test -f build/repos/hiredis-0.13.3/Makefile
86
+ }
87
+
88
+ it_github_libmaxminddb_git() {
89
+ ../bin/getrepos install repos-github-libmaxminddb-git.json
90
+ test -f build/repos/libmaxminddb-1.1.4/Makefile.am
91
+ }
92
+
93
+ it_github_libmaxminddb_tar_gz() {
94
+ ../bin/getrepos install repos-github-libmaxminddb-tar-gz.json
95
+ test -f build/repos/libmaxminddb-1.1.4/Makefile.am
96
+ }
97
+
98
+ it_github_libmaxminddb_zip() {
99
+ ../bin/getrepos install repos-github-libmaxminddb-zip.json
100
+ test -f build/repos/libmaxminddb-1.1.4/Makefile.am
101
+ }
102
+
103
+ it_github_libmaxminddb_release_tar_gz() {
104
+ ../bin/getrepos install repos-github-libmaxminddb-release-tar-gz.json
105
+ test -f build/repos/libmaxminddb-1.1.4/configure
106
+ }
107
+
108
+ # EOF
@@ -0,0 +1,307 @@
1
+ #!/bin/bash
2
+ # [r5]: roundup.5.html
3
+ # [r1t]: roundup-1-test.sh.html
4
+ # [r5t]: roundup-5-test.sh.html
5
+ #
6
+ # _(c) 2010 Blake Mizerany - MIT License_
7
+ #
8
+ # Spray **roundup** on your shells to eliminate weeds and bugs. If your shells
9
+ # survive **roundup**'s deathly toxic properties, they are considered
10
+ # roundup-ready.
11
+ #
12
+ # **roundup** reads shell scripts to form test plans. Each
13
+ # test plan is sourced into a sandbox where each test is executed.
14
+ #
15
+ # See [roundup-1-test.sh.html][r1t] or [roundup-5-test.sh.html][r5t] for example
16
+ # test plans.
17
+ #
18
+ # __Install__
19
+ #
20
+ # git clone http://github.com/bmizerany/roundup.git
21
+ # cd roundup
22
+ # make
23
+ # sudo make install
24
+ # # Alternatively, copy `roundup` wherever you like.
25
+ #
26
+ # __NOTE__: Because test plans are sourced into roundup, roundup prefixes its
27
+ # variable and function names with `roundup_` to avoid name collisions. See
28
+ # "Sandbox Test Runs" below for more insight.
29
+
30
+ # Usage and Prerequisites
31
+ # -----------------------
32
+
33
+ # Exit if any following command exits with a non-zero status.
34
+ set -e
35
+
36
+ # The current version is set during `make version`. Do not modify this line in
37
+ # anyway unless you know what you're doing.
38
+ ROUNDUP_VERSION="0.0.5"
39
+ export ROUNDUP_VERSION
40
+
41
+ # Usage is defined in a specific comment syntax. It is `grep`ed out of this file
42
+ # when needed (i.e. The Tomayko Method). See
43
+ # [shocco](http://rtomayko.heroku.com/shocco) for more detail.
44
+ #/ usage: roundup [--help|-h] [--version|-v] [plan ...]
45
+
46
+ roundup_usage() {
47
+ grep '^#/' <"$0" | cut -c4-
48
+ }
49
+
50
+ while test "$#" -gt 0
51
+ do
52
+ case "$1" in
53
+ --help|-h)
54
+ roundup_usage
55
+ exit 0
56
+ ;;
57
+ --version|-v)
58
+ echo "roundup version $ROUNDUP_VERSION"
59
+ exit 0
60
+ ;;
61
+ --color)
62
+ color=always
63
+ shift
64
+ ;;
65
+ -)
66
+ echo >&2 "roundup: unknown switch $1"
67
+ exit 1
68
+ ;;
69
+ *)
70
+ break
71
+ ;;
72
+ esac
73
+ done
74
+
75
+ # Consider all scripts with names matching `*-test.sh` the plans to run unless
76
+ # otherwise specified as arguments.
77
+ if [ "$#" -gt "0" ]
78
+ then
79
+ roundup_plans="$@"
80
+ else
81
+ roundup_plans="$(ls *-test.sh)"
82
+ fi
83
+
84
+ : ${color:="auto"}
85
+
86
+ # Create a temporary storage place for test output to be retrieved for display
87
+ # after failing tests.
88
+ roundup_tmp="$PWD/.roundup.$$"
89
+ mkdir -p "$roundup_tmp"
90
+
91
+ trap "rm -rf \"$roundup_tmp\"" EXIT INT
92
+
93
+ # __Tracing failures__
94
+ roundup_trace() {
95
+ # Delete the first two lines that represent roundups execution of the
96
+ # test function. They are useless to the user.
97
+ sed '1d' |
98
+ # Delete the last line which is the "set +x" of the error trap
99
+ sed '$d' |
100
+ # Replace the rc=$? of the error trap with an verbose string appended
101
+ # to the failing command trace line.
102
+ sed '$s/.*rc=/exit code /' |
103
+ # Trim the two left most `+` signs. They represent the depth at which
104
+ # roundup executed the function. They also, are useless and confusing.
105
+ sed 's/^++//' |
106
+ # Indent the output by 4 spaces to align under the test name in the
107
+ # summary.
108
+ sed 's/^/ /' |
109
+ # Highlight the last line in front of the exit code to bring notice to
110
+ # where the error occurred.
111
+ #
112
+ # The sed magic puts every line into the hold buffer first, then
113
+ # substitutes in the previous hold buffer content, prints that and starts
114
+ # with the next cycle. At the end the last line (in the hold buffer)
115
+ # is printed without substitution.
116
+ sed -n "x;1!{ \$s/\(.*\)/$mag\1$clr/; };1!p;\$x;\$p"
117
+ }
118
+
119
+ # __Other helpers__
120
+
121
+ # Track the test stats while outputting a real-time report. This takes input on
122
+ # **stdin**. Each input line must come in the format of:
123
+ #
124
+ # # The plan description to be displayed
125
+ # d <plan description>
126
+ #
127
+ # # A passing test
128
+ # p <test name>
129
+ #
130
+ # # A failed test
131
+ # f <test name>
132
+ roundup_summarize() {
133
+ set -e
134
+
135
+ # __Colors for output__
136
+
137
+ # Use colors if we are writing to a tty device.
138
+ if (test -t 1) || (test $color = always)
139
+ then
140
+ red=$(printf "\033[31m")
141
+ grn=$(printf "\033[32m")
142
+ mag=$(printf "\033[35m")
143
+ clr=$(printf "\033[m")
144
+ cols=$(tput cols)
145
+ fi
146
+
147
+ # Make these available to `roundup_trace`.
148
+ export red grn mag clr
149
+
150
+ ntests=0
151
+ passed=0
152
+ failed=0
153
+
154
+ : ${cols:=10}
155
+
156
+ while read status name
157
+ do
158
+ case $status in
159
+ p)
160
+ ntests=$(expr $ntests + 1)
161
+ passed=$(expr $passed + 1)
162
+ printf " %-48s " "$name:"
163
+ printf "$grn[PASS]$clr\n"
164
+ ;;
165
+ f)
166
+ ntests=$(expr $ntests + 1)
167
+ failed=$(expr $failed + 1)
168
+ printf " %-48s " "$name:"
169
+ printf "$red[FAIL]$clr\n"
170
+ roundup_trace < "$roundup_tmp/$name"
171
+ ;;
172
+ d)
173
+ printf "%s\n" "$name"
174
+ ;;
175
+ esac
176
+ done
177
+ # __Test Summary__
178
+ #
179
+ # Display the summary now that all tests are finished.
180
+ yes = | head -n 57 | tr -d '\n'
181
+ printf "\n"
182
+ printf "Tests: %3d | " $ntests
183
+ printf "Passed: %3d | " $passed
184
+ printf "Failed: %3d" $failed
185
+ printf "\n"
186
+
187
+ # Exit with an error if any tests failed
188
+ test $failed -eq 0 || exit 2
189
+ }
190
+
191
+ # Sandbox Test Runs
192
+ # -----------------
193
+
194
+ # The above checks guarantee we have at least one test. We can now move through
195
+ # each specified test plan, determine its test plan, and administer each test
196
+ # listed in a isolated sandbox.
197
+ for roundup_p in $roundup_plans
198
+ do
199
+ # Create a sandbox, source the test plan, run the tests, then leave
200
+ # without a trace.
201
+ (
202
+ # Consider the description to be the `basename` of the plan minus the
203
+ # tailing -test.sh.
204
+ roundup_desc=$(basename "$roundup_p" -test.sh)
205
+
206
+ # Define functions for
207
+ # [roundup(5)][r5]
208
+
209
+ # A custom description is recommended, but optional. Use `describe` to
210
+ # set the description to something more meaningful.
211
+ # TODO: reimplement this.
212
+ describe() {
213
+ roundup_desc="$*"
214
+ }
215
+
216
+ # Provide default `before` and `after` functions that run only `:`, a
217
+ # no-op. They may or may not be redefined by the test plan.
218
+ before() { :; }
219
+ after() { :; }
220
+
221
+ # Seek test methods and aggregate their names, forming a test plan.
222
+ # This is done before populating the sandbox with tests to avoid odd
223
+ # conflicts.
224
+
225
+ # TODO: I want to do this with sed only. Please send a patch if you
226
+ # know a cleaner way.
227
+ roundup_plan=$(
228
+ grep "^it_.*()" $roundup_p |
229
+ sed "s/\(it_[a-zA-Z0-9_]*\).*$/\1/g"
230
+ )
231
+
232
+ # We have the test plan and are in our sandbox with [roundup(5)][r5]
233
+ # defined. Now we source the plan to bring its tests into scope.
234
+ . ./$roundup_p
235
+
236
+ # Output the description signal
237
+ printf "d %s" "$roundup_desc" | tr "\n" " "
238
+ printf "\n"
239
+
240
+ for roundup_test_name in $roundup_plan
241
+ do
242
+ # Any number of things are possible in `before`, `after`, and the
243
+ # test. Drop into an subshell to contain operations that may throw
244
+ # off roundup; such as `cd`.
245
+ (
246
+ # Output `before` trace to temporary file. If `before` runs cleanly,
247
+ # the trace will be overwritten by the actual test case below.
248
+ {
249
+ # redirect tracing output of `before` into file.
250
+ {
251
+ set -x
252
+ # If `before` wasn't redefined, then this is `:`.
253
+ before
254
+ } &>"$roundup_tmp/$roundup_test_name"
255
+ # disable tracing again. Its trace output goes to /dev/null.
256
+ set +x
257
+ } &>/dev/null
258
+
259
+ # exit subshell with return code of last failing command. This
260
+ # is needed to see the return code 253 on failed assumptions.
261
+ # But, only do this if the error handling is activated.
262
+ set -E
263
+ trap 'rc=$?; set +x; set -o | grep "errexit.*on" >/dev/null && exit $rc' ERR
264
+
265
+ # If `before` wasn't redefined, then this is `:`.
266
+ before
267
+
268
+ # Momentarily turn off auto-fail to give us access to the tests
269
+ # exit status in `$?` for capturing.
270
+ set +e
271
+ (
272
+ # Set `-xe` before the test in the subshell. We want the
273
+ # test to fail fast to allow for more accurate output of
274
+ # where things went wrong but not in _our_ process because a
275
+ # failed test should not immediately fail roundup. Each
276
+ # tests trace output is saved in temporary storage.
277
+ set -xe
278
+ $roundup_test_name
279
+ ) >"$roundup_tmp/$roundup_test_name" 2>&1
280
+
281
+ # We need to capture the exit status before returning the `set
282
+ # -e` mode. Returning with `set -e` before we capture the exit
283
+ # status will result in `$?` being set with `set`'s status
284
+ # instead.
285
+ roundup_result=$?
286
+
287
+ # It's safe to return to normal operation.
288
+ set -e
289
+
290
+ # If `after` wasn't redefined, then this runs `:`.
291
+ after
292
+
293
+ # This is the final step of a test. Print its pass/fail signal
294
+ # and name.
295
+ if [ "$roundup_result" -ne 0 ]
296
+ then printf "f"
297
+ else printf "p"
298
+ fi
299
+
300
+ printf " $roundup_test_name\n"
301
+ )
302
+ done
303
+ )
304
+ done |
305
+
306
+ # All signals are piped to this for summary.
307
+ roundup_summarize
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'json'
4
+
5
+ def is_valid_json?(data)
6
+ begin
7
+ JSON.parse(data)
8
+ true
9
+ rescue
10
+ false
11
+ end
12
+ end
13
+
14
+ def is_valid_json_file?(filename)
15
+ is_valid_json?(File.read(filename))
16
+ end
17
+
18
+ ############
19
+ ### MAIN ###
20
+ ############
21
+
22
+ if __FILE__ == $0
23
+ exit 0 if is_valid_json_file?(ARGV.first)
24
+ exit 1
25
+ end
@@ -0,0 +1,28 @@
1
+ #!/bin/bash
2
+
3
+ describe "Path filtering during extraction"
4
+
5
+ before() {
6
+ rm -rf build
7
+ }
8
+
9
+ after() {
10
+ rm -rf build
11
+ }
12
+
13
+ it_path_filter_git() {
14
+ ../bin/getrepos install repos-path-filter-git.json
15
+ test -f build/repos/openresty-v1.9.7.4/nginx-0.8.54-allow_request_body_updating.patch
16
+ }
17
+
18
+ it_path_filter_tar_gz() {
19
+ ../bin/getrepos install repos-path-filter-tar-gz.json
20
+ test -f build/repos/openresty-1.9.7.4/nginx-0.8.54-allow_request_body_updating.patch
21
+ }
22
+
23
+ it_path_filter_zip() {
24
+ ../bin/getrepos install repos-path-filter-zip.json
25
+ test -f build/repos/openresty-1.9.7.4/nginx-0.8.54-allow_request_body_updating.patch
26
+ }
27
+
28
+ # EOF
@@ -0,0 +1,24 @@
1
+ {"repos": [
2
+ // Nginx
3
+ {"name": "nginx", "version": "1.9.12", "url": "http://nginx.org/download/nginx-1.9.12.tar.gz"},
4
+ // Deps
5
+ {"name": "luajit", "version": "2.1.0-beta2", "url": "http://luajit.org/download/LuaJIT-2.1.0-beta2.tar.gz"},
6
+ {"name": "lua-cjson", "version": "2.1.0.3", "url": "https://github.com/openresty/lua-cjson.git"},
7
+ {"name": "hiredis", "version": "v0.13.3", "url": "https://github.com/redis/hiredis.git"},
8
+ {"name": "libmaxminddb", "version": "1.1.4", "url": "https://github.com/maxmind/libmaxminddb/releases/download/1.1.4/libmaxminddb-1.1.4.tar.gz"},
9
+ // Native modules
10
+ {"name": "lua-nginx", "version": "v0.10.2", "url": "https://github.com/openresty/lua-nginx-module.git"},
11
+ {"name": "lua-upstream-nginx", "version": "v0.05", "url": "https://github.com/openresty/lua-upstream-nginx-module.git"},
12
+ {"name": "redis2-nginx", "version": "v0.12", "url": "https://github.com/openresty/redis2-nginx-module.git"},
13
+ {"name": "set-misc-nginx", "version": "v0.30", "url": "https://github.com/openresty/set-misc-nginx-module.git"},
14
+ {"name": "ngx_cache_purge", "version": "2.3", "url": "https://github.com/FRiCKLE/ngx_cache_purge/archive/2.3.tar.gz"},
15
+ {"name": "nginx-push-stream", "version": "0.5.1", "url": "https://github.com/wandenberg/nginx-push-stream-module.git"},
16
+ {"name": "ngx_http_auth_request", "version": "662785733552", "url": "http://mdounin.ru/hg/ngx_http_auth_request_module/archive/tip.tar.gz", "path": "ngx_http_auth_request_module-662785733552"},
17
+ // Lua modules
18
+ {"name": "lua-resty-core", "version": "v0.1.5", "url": "https://github.com/openresty/lua-resty-core.git"},
19
+ {"name": "lua-resty-dns", "version": "v0.15", "url": "https://github.com/openresty/lua-resty-dns.git"},
20
+ {"name": "lua-resty-redis", "version": "v0.22", "url": "https://github.com/openresty/lua-resty-redis.git"},
21
+ {"name": "lua-resty-upstream-healthcheck", "version": "v0.04", "url": "https://github.com/openresty/lua-resty-upstream-healthcheck.git"},
22
+ // Strange
23
+ {"name": "log4j", "version": "1.2.17", "url": "https://repo1.maven.org/maven2/log4j/log4j/1.2.17/log4j-1.2.17.jar"}
24
+ ]}
@@ -0,0 +1,3 @@
1
+ {"repos": [
2
+ {"x_name": "nginx", "x_version": "1.9.12", "x_url": "http://nginx.org/download/nginx-1.9.12.tar.gz"}
3
+ ]}
@@ -0,0 +1,3 @@
1
+ {"repos": [
2
+ {"x_name": "nginx", "version": "1.9.12", "url": "http://nginx.org/download/nginx-1.9.12.tar.gz"}
3
+ ]}
@@ -0,0 +1,3 @@
1
+ {"x_repos": [
2
+ {"name": "nginx", "version": "1.9.12", "url": "http://nginx.org/download/nginx-1.9.12.tar.gz"}
3
+ ]}
@@ -0,0 +1,3 @@
1
+ {"repos": [
2
+ {"name": "nginx", "version": "1.9.12", "x_url": "http://nginx.org/download/nginx-1.9.12.tar.gz"}
3
+ ]}
@@ -0,0 +1,3 @@
1
+ {"repos": [
2
+ {"name": "nginx", "x_version": "1.9.12", "url": "http://nginx.org/download/nginx-1.9.12.tar.gz"}
3
+ ]}
@@ -0,0 +1,3 @@
1
+ {"repos": [
2
+ {"name": "nginx", "version": "1.9.12", "url": "http://nginx.org/download/nginx-1.9.12.tar.x"}
3
+ ]}
@@ -0,0 +1,3 @@
1
+ {"repos": [
2
+ {"name": "httpd", "version": "2.4.18", "url": "http://www-eu.apache.org/dist//httpd/httpd-2.4.18.tar.bz2"}
3
+ ]}
@@ -0,0 +1,3 @@
1
+ {"repos": [
2
+ {"name": "httpd", "version": "2.4.18", "url": "http://www-eu.apache.org/dist//httpd/httpd-2.4.18.tar.gz"}
3
+ ]}
@@ -0,0 +1,3 @@
1
+ {"repos": [
2
+ {"name": "mod_fcgid", "version": "2.3.9", "url": "http://www-eu.apache.org/dist//httpd/mod_fcgid/mod_fcgid-2.3.9.tar.bz2"}
3
+ ]}
@@ -0,0 +1,3 @@
1
+ {"repos": [
2
+ {"name": "mod_fcgid", "version": "2.3.9", "url": "http://www-eu.apache.org/dist//httpd/mod_fcgid/mod_fcgid-2.3.9.tar.gz"}
3
+ ]}
@@ -0,0 +1,3 @@
1
+ {"repos": [
2
+ {"name": "python", "version": "3.5.1", "url": "https://www.python.org/ftp/python/3.5.1/Python-3.5.1.tar.xz"}
3
+ ]}
@@ -0,0 +1,3 @@
1
+ {"repos": [
2
+ {"name": "python", "version": "3.5.1", "url": "https://www.python.org/ftp/python/3.5.1/Python-3.5.1.tgz"}
3
+ ]}
@@ -0,0 +1,3 @@
1
+ {"repos": [
2
+ {"name": "ruby", "version": "2.3.0", "url": "https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.0.tar.bz2"}
3
+ ]}
@@ -0,0 +1,3 @@
1
+ {"repos": [
2
+ {"name": "ruby", "version": "2.3.0", "url": "https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.0.tar.gz"}
3
+ ]}
@@ -0,0 +1,3 @@
1
+ {"repos": [
2
+ {"name": "ruby", "version": "2.3.0", "url": "https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.0.tar.xz"}
3
+ ]}
@@ -0,0 +1,3 @@
1
+ {"repos": [
2
+ {"name": "ruby", "version": "2.3.0", "url": "https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.0.zip"}
3
+ ]}
@@ -0,0 +1,3 @@
1
+ {"repos": [
2
+ {"name": "hiredis", "version": "v0.13.3", "url": "https://github.com/redis/hiredis.git"}
3
+ ]}
@@ -0,0 +1,3 @@
1
+ {"repos": [
2
+ {"name": "hiredis", "version": "0.13.3", "url": "https://github.com/redis/hiredis/archive/v0.13.3.tar.gz"}
3
+ ]}
@@ -0,0 +1,3 @@
1
+ {"repos": [
2
+ {"name": "hiredis", "version": "0.13.3", "url": "https://github.com/redis/hiredis/archive/v0.13.3.zip"}
3
+ ]}
@@ -0,0 +1,3 @@
1
+ {"repos": [
2
+ {"name": "libmaxminddb", "version": "1.1.4", "url": "https://github.com/maxmind/libmaxminddb.git"}
3
+ ]}
@@ -0,0 +1,3 @@
1
+ {"repos": [
2
+ {"name": "libmaxminddb", "version": "1.1.4", "url": "https://github.com/maxmind/libmaxminddb/releases/download/1.1.4/libmaxminddb-1.1.4.tar.gz"}
3
+ ]}
@@ -0,0 +1,3 @@
1
+ {"repos": [
2
+ {"name": "libmaxminddb", "version": "1.1.4", "url": "https://github.com/maxmind/libmaxminddb/archive/1.1.4.tar.gz"}
3
+ ]}