Module: GetRepos
- Defined in:
- lib/getrepos/init.rb,
lib/getrepos/install.rb,
lib/getrepos/version.rb
Constant Summary collapse
- VERSION =
'0.1.1'
Class Method Summary collapse
- .init(filename) ⇒ Object
- .install(filename) ⇒ Object
- .install_archive(repo, ext) ⇒ Object
- .install_git(repo) ⇒ Object
Class Method Details
.init(filename) ⇒ Object
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/getrepos/init.rb', line 4 def init(filename) sample_json = %q({"repos": [ // Nginx {"name": "nginx", "version": "1.9.12", "url": "http://nginx.org/download/nginx-1.9.12.tar.gz"}, // Deps {"name": "luajit", "version": "2.1.0-beta2", "url": "http://luajit.org/download/LuaJIT-2.1.0-beta2.tar.gz", "path": "LuaJIT-2.1.0-beta2"}, {"name": "lua-cjson", "version": "2.1.0.3", "url": "https://github.com/openresty/lua-cjson.git"}, {"name": "hiredis", "version": "v0.13.3", "url": "https://github.com/redis/hiredis.git"}, {"name": "libmaxminddb", "version": "1.1.4", "url": "https://github.com/maxmind/libmaxminddb/releases/download/1.1.4/libmaxminddb-1.1.4.tar.gz"}, // Native modules {"name": "lua-nginx", "version": "v0.10.2", "url": "https://github.com/openresty/lua-nginx-module.git"}, {"name": "lua-upstream-nginx", "version": "v0.05", "url": "https://github.com/openresty/lua-upstream-nginx-module.git"}, {"name": "redis2-nginx", "version": "v0.12", "url": "https://github.com/openresty/redis2-nginx-module.git"}, {"name": "set-misc-nginx", "version": "v0.30", "url": "https://github.com/openresty/set-misc-nginx-module.git"}, {"name": "ngx_cache_purge", "version": "2.3", "url": "https://github.com/FRiCKLE/ngx_cache_purge/archive/2.3.tar.gz"}, {"name": "nginx-push-stream", "version": "0.5.1", "url": "https://github.com/wandenberg/nginx-push-stream-module.git"}, {"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"}, // Lua modules {"name": "lua-resty-core", "version": "v0.1.5", "url": "https://github.com/openresty/lua-resty-core.git"}, {"name": "lua-resty-dns", "version": "v0.15", "url": "https://github.com/openresty/lua-resty-dns.git"}, {"name": "lua-resty-redis", "version": "v0.22", "url": "https://github.com/openresty/lua-resty-redis.git"}, {"name": "lua-resty-upstream-healthcheck", "version": "v0.04", "url": "https://github.com/openresty/lua-resty-upstream-healthcheck.git"}, // Strange {"name": "log4j", "version": "1.2.17", "url": "https://repo1.maven.org/maven2/log4j/log4j/1.2.17/log4j-1.2.17.jar"} ]} ) File.write(filename, sample_json) puts "Generated '#{filename}'".light_green end |
.install(filename) ⇒ Object
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/getrepos/install.rb', line 6 def install(filename) FileUtils.mkdir_p('build/repos') repos = JSON.parse(open(filename).read, symbolize_names: true) unless is_valid_json_root?(repos) puts "Invalid JSON '#{filename}' (missing required field)".light_red exit 1 end repos[:repos].each do |repo| unless is_valid_json_repo?(repo) puts "Invalid JSON entry '#{repo}' (missing required field)".light_red exit 1 end puts puts 'Processing entry: '.light_cyan + repo.to_s if is_git_url?(repo[:url]) # Git install_git(repo) else # Archive archive = URI(repo[:url]).path if archive.end_with?('.tar.gz') install_archive(repo, 'tar.gz') elsif archive.end_with?('.tgz') install_archive(repo, 'tgz') elsif archive.end_with?('.tar.bz2') install_archive(repo, 'tar.bz2') elsif archive.end_with?('.tar.xz') install_archive(repo, 'tar.xz') elsif archive.end_with?('.zip') install_archive(repo, 'zip') elsif archive.end_with?('.jar') install_archive(repo, 'jar') elsif archive.end_with?('.war') install_archive(repo, 'war') elsif archive.end_with?('.ear') install_archive(repo, 'ear') else puts "Unsupported file extension in URL '#{repo[:url]}'".light_red exit 1 end end end end |
.install_archive(repo, ext) ⇒ Object
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 |
# File 'lib/getrepos/install.rb', line 77 def install_archive(repo, ext) dest_dir = "build/repos/#{repo[:name]}-#{repo[:version]}" archive_dest_file = "build/.archive/#{repo[:name]}-#{repo[:version]}.#{ext}" # Download if File.exists?(archive_dest_file) puts "Already downloaded '#{repo[:url]}' to '#{archive_dest_file}'".light_green else puts "Saving '#{repo[:url]}' to '#{archive_dest_file}'".light_cyan FileUtils.mkdir_p(File.dirname(archive_dest_file)) IO.copy_stream(open(repo[:url]), archive_dest_file) end # Extract puts "Extracting and filtering '#{archive_dest_file}' to '#{dest_dir}'".light_cyan prep_dest_dir(dest_dir) ret = 0 if ext == 'tar.gz' || ext == 'tgz' ret = run_local("tar xzf '#{archive_dest_file}' -C 'build/.tmprepo/'") elsif ext == 'tar.bz2' ret = run_local("tar xjf '#{archive_dest_file}' -C 'build/.tmprepo/'") elsif ext == 'tar.xz' ret = run_local("tar xJf '#{archive_dest_file}' -C 'build/.tmprepo/'") elsif ext == 'zip' || ext == 'jar' || ext == 'war' || ext == 'ear' ret = run_local("unzip -o '#{archive_dest_file}' -d 'build/.tmprepo/'") else puts "Unsupported file extension '#{ext}'".light_red exit 1 end exit ret if ret != 0 # Was the archive expanded to the usual directory 'name-version'? archive_usual_dir = "build/.tmprepo/#{repo[:name]}-#{repo[:version]}/#{repo[:path]}" if File.directory?(archive_usual_dir) FileUtils.mv(archive_usual_dir, dest_dir) else FileUtils.mv("build/.tmprepo/#{repo[:path]}", dest_dir) end end |
.install_git(repo) ⇒ Object
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/getrepos/install.rb', line 53 def install_git(repo) dest_dir = "build/repos/#{repo[:name]}-#{repo[:version]}" = "build/.gitbare/#{repo[:name]}" # Clone if File.exists?("#{}/HEAD") puts "Updating cloned '#{repo[:url]}' inside '#{}'".light_green ret = run_local("cd #{} && git fetch -q") exit ret if ret != 0 else puts "Cloning '#{repo[:url]}' to '#{}'".light_cyan ret = run_local("git clone -q --mirror '#{repo[:url]}' '#{}'") exit ret if ret != 0 end # Extract puts "Extracting and filtering '#{}' to '#{dest_dir}'".light_cyan prep_dest_dir(dest_dir) ret = run_local("cd #{} && git archive '#{repo[:version]}' -- #{repo[:path]} | tar xf - -C '../../.tmprepo/'") exit ret if ret != 0 FileUtils.mv("build/.tmprepo/#{repo[:path]}", dest_dir) end |