vx-builder 0.5.54 → 0.5.55

Sign up to get free protection for your applications and to get access to all the features.
Files changed (35) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +3 -2
  3. data/lib/vx/builder/build_configuration.rb +2 -0
  4. data/lib/vx/builder/script_builder_v2/base.rb +67 -0
  5. data/lib/vx/builder/script_builder_v2/cache.rb +62 -0
  6. data/lib/vx/builder/script_builder_v2/clojure.rb +35 -0
  7. data/lib/vx/builder/script_builder_v2/clone.rb +43 -0
  8. data/lib/vx/builder/script_builder_v2/defaults.rb +44 -0
  9. data/lib/vx/builder/script_builder_v2/deploy.rb +40 -0
  10. data/lib/vx/builder/script_builder_v2/env.rb +65 -0
  11. data/lib/vx/builder/script_builder_v2/go.rb +64 -0
  12. data/lib/vx/builder/script_builder_v2/java.rb +36 -0
  13. data/lib/vx/builder/script_builder_v2/nodejs.rb +58 -0
  14. data/lib/vx/builder/script_builder_v2/python.rb +69 -0
  15. data/lib/vx/builder/script_builder_v2/ruby.rb +87 -0
  16. data/lib/vx/builder/script_builder_v2/rust.rb +48 -0
  17. data/lib/vx/builder/script_builder_v2/scala.rb +52 -0
  18. data/lib/vx/builder/script_builder_v2/services.rb +25 -0
  19. data/lib/vx/builder/script_builder_v2.rb +158 -0
  20. data/lib/vx/builder/templates/script_builder_v2/to_script.erb +29 -0
  21. data/lib/vx/builder/version.rb +1 -1
  22. data/lib/vx/builder.rb +5 -0
  23. data/spec/fixtures/script_builder_v2/simple.sh +15 -0
  24. data/spec/fixtures/script_builder_v2/simple.yml +89 -0
  25. data/spec/integration/script_builder_v2/clojure_spec.rb +41 -0
  26. data/spec/integration/script_builder_v2/go_spec.rb +54 -0
  27. data/spec/integration/script_builder_v2/nodejs_spec.rb +63 -0
  28. data/spec/integration/script_builder_v2/python_spec.rb +43 -0
  29. data/spec/integration/script_builder_v2/ruby_spec.rb +141 -0
  30. data/spec/integration/script_builder_v2/rust_spec.rb +41 -0
  31. data/spec/lib/builder/build_configuration_spec.rb +1 -0
  32. data/spec/lib/builder/script_builder_v2_spec.rb +52 -0
  33. data/spec/lib/builder/task_spec.rb +1 -1
  34. data/spec/support/create.rb +1 -1
  35. metadata +37 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3b0e214c4dd936826ad49c577cd66ad2c7ca4bfc
4
- data.tar.gz: fb16d8ec09db80a233d61bdcf4de8f03d3ada920
3
+ metadata.gz: 8dc5e509544ffeff672245424d59e62d7d6cebe0
4
+ data.tar.gz: a7b222086011c1c59c1f31be46355dd4b7888ebc
5
5
  SHA512:
6
- metadata.gz: 4e51ad46303d5cadcaaebae1249cd4edfc8cea83d02600d99148cfb3a1a333bbfc0f7ee1dfc222e5a31598b6841069085deb2232bb7dbc52be005765be19175f
7
- data.tar.gz: 56f852c7520f7cad619e5435efa1af7f662b8ea25496e5be8bd457318c643deb41912137f598ebc5a1236f7be68c1f0d3d19868fdf02f39777cc8b5a4aca4cf1
6
+ metadata.gz: c90f593060af8044c5883a15cc2c72bef734c4046bf33a233af95be53c4ac684f05027a5b38b496ae64a1db6234dfa874881217eebd4df124cfdd7f6d4992f09
7
+ data.tar.gz: 38f7ecd0466b9c319511c1bb94c23f4240b2edf3705f132711862a6b60b7b6ee9a144f290e155aed1e8325a1ba4015865859c9e5e5716debd4f01f7e8f895149
data/.travis.yml CHANGED
@@ -1,10 +1,11 @@
1
1
  rvm:
2
- - 2.0.0
3
- - 2.1.3
2
+ - 2.0
3
+ - 2.1
4
4
 
5
5
  env:
6
6
  global:
7
7
  - 'VX_BUILDER_REAL=1'
8
+ - 'SPEC_OPTS=--fail-fast'
8
9
 
9
10
  script:
10
11
  - bundle exec rspec spec/
@@ -47,6 +47,8 @@ module Vx
47
47
 
48
48
  parallel
49
49
  parallel_job_number
50
+
51
+ database
50
52
  }
51
53
 
52
54
  class << self
@@ -0,0 +1,67 @@
1
+ module Vx
2
+ module Builder
3
+ class ScriptBuilderV2
4
+
5
+ Base = Struct.new(:app) do
6
+
7
+ def do_cache_key(env)
8
+ yield env.cache_key
9
+ end
10
+
11
+ def do_cached_directories(env)
12
+ if env.source.cached_directories != false
13
+ yield env.source.cached_directories
14
+ end
15
+ end
16
+
17
+ def do_script(env)
18
+ if env.source.script.empty? && !env.source.deploy_modules?
19
+ yield
20
+ end
21
+ end
22
+
23
+ def do_install(env)
24
+ if env.source.install.empty?
25
+ yield
26
+ end
27
+ end
28
+
29
+ def do_before_script(env)
30
+ if env.source.before_script.empty? && !deploy?(env)
31
+ yield
32
+ end
33
+ end
34
+
35
+ def do_database(env)
36
+ if env.source.database.empty?
37
+ yield
38
+ end
39
+ end
40
+
41
+ def do_deploy_script(env)
42
+ if deploy?(env)
43
+ yield
44
+ end
45
+ end
46
+
47
+ def do_before_deploy(env)
48
+ if deploy?(env)
49
+ yield
50
+ end
51
+ end
52
+
53
+ def do_after_deploy(env)
54
+ if deploy?(env)
55
+ yield
56
+ end
57
+ end
58
+
59
+ def deploy?(env)
60
+ env.source.deploy_modules?
61
+ end
62
+
63
+ end
64
+
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,62 @@
1
+ module Vx
2
+ module Builder
3
+ class ScriptBuilderV2
4
+
5
+ class Cache < Base
6
+
7
+ include Helper::Config
8
+
9
+ def call(env)
10
+ rs = app.call env
11
+
12
+ if env.task.cache_url_prefix && enabled?(env)
13
+ env.stage("init").add_task "cache_fetch", "url" => cache_fetch_urls(env)
14
+ env.stage("init").add_task "cache_add", "dir" => cache_directories(env)
15
+ env.stage("teardown").add_task "cache_push", "url" => cache_push_url(env)
16
+ end
17
+
18
+ rs
19
+ end
20
+
21
+ private
22
+
23
+ def enabled?(env)
24
+ env.source.cache.enabled? && cache_directories(env).any?
25
+ end
26
+
27
+ def cache_directories(env)
28
+ env.source.cache.directories
29
+ end
30
+
31
+ def cache_push_url(env)
32
+ url_for(env, env.task.branch)
33
+ end
34
+
35
+ def cache_fetch_urls(env)
36
+ urls = []
37
+ branch = env.task.branch
38
+ if branch != 'master'
39
+ urls << url_for(env, branch)
40
+ end
41
+ urls << url_for(env, 'master')
42
+
43
+ urls
44
+ end
45
+
46
+ def url_for(env, branch)
47
+ name = branch
48
+
49
+ key =
50
+ if env.cache_key.empty?
51
+ "cache"
52
+ else
53
+ env.cache_key.join("-").downcase.gsub(/[^a-z0-9_\-.]/, '-')
54
+ end
55
+
56
+ "#{env.task.cache_url_prefix}/#{name}/#{key}.tgz"
57
+ end
58
+
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,35 @@
1
+ module Vx
2
+ module Builder
3
+ class ScriptBuilderV2
4
+
5
+ class Clojure < Base
6
+
7
+ def call(env)
8
+ if enabled?(env)
9
+ env.stage("install").tap do |i|
10
+ do_install(env) do
11
+ i.add_task "shell", "lein version"
12
+ i.add_task "shell", "lein deps"
13
+ end
14
+ end
15
+
16
+ env.stage("script").tap do |i|
17
+ do_script(env) do
18
+ i.add_task "shell", "lein test"
19
+ end
20
+ end
21
+ end
22
+
23
+ app.call(env)
24
+ end
25
+
26
+ private
27
+
28
+ def enabled?(env)
29
+ env.source.language == 'clojure'
30
+ end
31
+
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,43 @@
1
+ require 'vx/common'
2
+
3
+ module Vx
4
+ module Builder
5
+ class ScriptBuilderV2
6
+
7
+ Clone = Struct.new(:app) do
8
+
9
+ def call(env)
10
+
11
+ env.stage("clone").tap do |e|
12
+ e.add_var "ssh_key", env.task.deploy_key
13
+
14
+ e.add_task "ssh_agent", "key" => "$ssh_key"
15
+ clone = {}
16
+ clone["repo"] = env.task.src
17
+ clone["dest"] = "~/#{env.task.name}"
18
+ clone["branch"] = branch_name(env)
19
+ clone["sha"] = env.task.sha
20
+ if pr = env.task.pull_request_id
21
+ clone["pr"] = pr
22
+ end
23
+ e.add_task "git_clone", clone
24
+ end
25
+
26
+ env.stage("init").chdir!("~/#{env.task.name}")
27
+
28
+ app.call(env)
29
+ end
30
+
31
+ private
32
+
33
+ def branch_name(env)
34
+ b = env.task && env.task.branch
35
+ if b && b != 'HEAD'
36
+ b
37
+ end
38
+ end
39
+
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,44 @@
1
+ module Vx
2
+ module Builder
3
+ class ScriptBuilderV2
4
+
5
+ class Defaults < Base
6
+
7
+ def call(env)
8
+ env.source.before_install.each do |c|
9
+ env.stage("before_install").tap do |i|
10
+ i.add_task "shell", c
11
+ end
12
+ end
13
+
14
+ env.source.install.each do |c|
15
+ env.stage("install").tap do |i|
16
+ i.add_task "shell", c
17
+ end
18
+ end
19
+
20
+ env.source.before_script.each do |c|
21
+ env.stage("before_script").tap do |i|
22
+ i.add_task "shell", c
23
+ end
24
+ end
25
+
26
+ env.source.script.each do |c|
27
+ env.stage("script").tap do |i|
28
+ i.add_task "shell", c
29
+ end
30
+ end
31
+
32
+ env.source.after_success.each do |c|
33
+ env.stage("after_success").tap do |i|
34
+ i.add_task "shell", c
35
+ end
36
+ end
37
+
38
+ app.call env
39
+ end
40
+
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,40 @@
1
+ module Vx
2
+ module Builder
3
+ class ScriptBuilderV2
4
+
5
+ class Deploy < Base
6
+
7
+ def call(env)
8
+ do_before_deploy(env) do
9
+ env.stage("before_script").tap do |i|
10
+ env.source.before_deploy.each do |c|
11
+ i.add_task "shell", c
12
+ end
13
+ end
14
+ end
15
+
16
+ do_deploy_script(env) do
17
+ env.stage("script").tap do |i|
18
+ env.source.deploy_modules.each do |m|
19
+ m.to_commands.each do |c|
20
+ i.add_task "shell", c
21
+ end
22
+ end
23
+ end
24
+ end
25
+
26
+ do_after_deploy(env) do
27
+ env.stage("after_success").tap do |i|
28
+ env.source.after_deploy.each do |c|
29
+ i.add_task "shell", c
30
+ end
31
+ end
32
+ end
33
+
34
+ app.call(env)
35
+ end
36
+
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,65 @@
1
+ module Vx
2
+ module Builder
3
+ class ScriptBuilderV2
4
+
5
+ class Env < Base
6
+
7
+ def call(env)
8
+ env.stage("init").tap do |e|
9
+ e.add_env "CI", "1"
10
+ e.add_env "CI_JOB_ID", env.task.job_id
11
+ e.add_env "CI_JOB_NUMBER", env.task.job_number
12
+ e.add_env "CI_BUILD_ID", env.task.build_id
13
+ e.add_env "CI_BUILD_NUMBER", env.task.build_number
14
+ e.add_env "CI_PROJECT_NAME", env.task.name
15
+ e.add_env "CI_BUILD_SHA", env.task.sha
16
+
17
+ if env.task.project_token
18
+ e.add_env "CI_PROJECT_TOKEN", env.task.project_token, hidden: true
19
+ end
20
+
21
+ if env.task.pull_request_id
22
+ e.add_env "CI_PULL_REQUEST_ID", env.task.pull_request_id
23
+ end
24
+
25
+ if env.task.branch
26
+ e.add_env "CI_BRANCH", env.task.branch
27
+ end
28
+
29
+ e.add_env "DISPLAY", ":99"
30
+
31
+ if env.source.parallel?
32
+ e.add_env "CI_PARALLEL_JOBS", env.source.parallel
33
+ e.add_env "CI_PARALLEL_JOB_NUMBER", env.source.parallel_job_number
34
+ end
35
+
36
+ env.source.env.global.each do |i|
37
+ i = i.split("=")
38
+ key = i.shift
39
+ value = i.join("=").to_s
40
+ e.add_env key, normalize_env_value(value)
41
+ end
42
+
43
+ env.source.env.matrix.each do |i|
44
+ i = i.split("=")
45
+ key = i.shift
46
+ value = i.join("=").to_s
47
+ e.add_env key, normalize_env_value(value)
48
+ end
49
+ end
50
+
51
+ app.call(env)
52
+ end
53
+
54
+ def normalize_env_value(value)
55
+ if value[0] == '"' && value[-1] == '"'
56
+ value[1..-2]
57
+ else
58
+ value
59
+ end
60
+ end
61
+
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,64 @@
1
+ module Vx
2
+ module Builder
3
+ class ScriptBuilderV2
4
+
5
+ class Go < Base
6
+
7
+ DEFAULT_GO = '1.2'
8
+
9
+ def call(env)
10
+ if enabled?(env)
11
+
12
+ do_install(env) do
13
+ env.stage("before_install").tap do |i|
14
+ i.add_task "vxvm", "go #{go_version(env)}"
15
+ end
16
+ end
17
+
18
+ do_install(env) do
19
+ env.stage("install").tap do |i|
20
+ i.add_env 'GOPATH', '${HOME}/gopath:${GOPATH}'
21
+ i.add_env 'PATH', '${HOME}/gopath/bin:${PATH}'
22
+ i.add_env 'VX_ORIG_CODE_ROOT', '${PWD}'
23
+ i.add_env "VX_NEW_CODE_ROOT", "${HOME}/gopath/src/#{project_path env}"
24
+
25
+ i.add_task 'shell', 'mkdir -p $VX_NEW_CODE_ROOT'
26
+ i.add_task 'shell', 'rmdir $VX_NEW_CODE_ROOT'
27
+ i.add_task 'shell', 'cp -r $VX_ORIG_CODE_ROOT $VX_NEW_CODE_ROOT'
28
+ i.add_task 'chdir', '${VX_NEW_CODE_ROOT}'
29
+
30
+ i.add_task 'shell', 'go version'
31
+ i.add_task 'shell', 'go env'
32
+ i.add_task 'shell', 'go get -v ./...'
33
+ end
34
+ end
35
+
36
+ do_script(env) do
37
+ env.stage("script").tap do |i|
38
+ i.add_task 'shell', 'go test -v ./...'
39
+ end
40
+ end
41
+
42
+ end
43
+
44
+ app.call(env)
45
+ end
46
+
47
+ private
48
+
49
+ def project_path(env)
50
+ "#{env.task.project_host}/#{env.task.name}"
51
+ end
52
+
53
+ def enabled?(env)
54
+ env.source.language == 'go'
55
+ end
56
+
57
+ def go_version(env)
58
+ env.source.go.first || DEFAULT_GO
59
+ end
60
+
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,36 @@
1
+ module Vx
2
+ module Builder
3
+ class ScriptBuilderV2
4
+
5
+ class Java < Base
6
+
7
+ def call(env)
8
+ if java(env)
9
+ =begin
10
+ do_cache_key(env) do |i|
11
+ i << "jdk-#{java env}"
12
+ end
13
+
14
+ env.stage("before_install").tap do |i|
15
+ end
16
+
17
+ do_before_install(env) do |i|
18
+ i << "source $(which jdk_switcher.sh)"
19
+ i << trace_sh_command("jdk_switcher use #{java env}")
20
+ end
21
+ =end
22
+ end
23
+
24
+ app.call(env)
25
+ end
26
+
27
+ private
28
+
29
+ def java(env)
30
+ env.source.jdk.first
31
+ end
32
+
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,58 @@
1
+ module Vx
2
+ module Builder
3
+ class ScriptBuilderV2
4
+
5
+ class Nodejs < Base
6
+
7
+ DEFAULT_NODE = '0.10'
8
+ NPM_PACKAGES = 'node_modules'
9
+ BOWER_COMPONENTS = 'bower_components'
10
+
11
+ def call(env)
12
+ if enabled?(env)
13
+
14
+ do_cache_key(env) do |i|
15
+ i << "nodejs-#{node_version env}"
16
+ end
17
+
18
+ do_cached_directories(env) do |i|
19
+ i << NPM_PACKAGES
20
+ i << BOWER_COMPONENTS
21
+ end
22
+
23
+ do_install(env) do
24
+ env.stage("install").tap do |i|
25
+ i.add_env 'PATH', "${PATH}:${PWD}/#{NPM_PACKAGES}/bin"
26
+
27
+ i.add_task "vxvm", "nodejs #{node_version(env)}"
28
+ i.add_task "shell", 'npm config set spin false'
29
+ i.add_task 'shell', 'node --version'
30
+ i.add_task 'shell', 'npm --version'
31
+ i.add_task 'shell', 'npm install'
32
+ end
33
+ end
34
+
35
+ do_script(env) do
36
+ env.stage("script").tap do |i|
37
+ i.add_task 'shell', 'npm test'
38
+ end
39
+ end
40
+ end
41
+
42
+ app.call(env)
43
+ end
44
+
45
+ private
46
+
47
+ def enabled?(env)
48
+ env.source.node_js.first || env.source.language == 'node_js'
49
+ end
50
+
51
+ def node_version(env)
52
+ env.source.node_js.first || DEFAULT_NODE
53
+ end
54
+
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,69 @@
1
+ module Vx
2
+ module Builder
3
+ class ScriptBuilderV2
4
+
5
+ class Python < Base
6
+
7
+ DEFAULT_PYTHON = '2.7'
8
+ PIP_DOWNLOADS = "~/.pip-downloads"
9
+ PIP_OPTS = " --download-cache=#{PIP_DOWNLOADS}"
10
+
11
+ def call(env)
12
+ if enabled?(env)
13
+
14
+ py_version = python_version(env)
15
+
16
+ do_cache_key(env) do |i|
17
+ i << "python-#{py_version}"
18
+ end
19
+
20
+ do_cached_directories(env) do |i|
21
+ i << PIP_DOWNLOADS
22
+ end
23
+
24
+ env.stage("init").tap do |i|
25
+ i.add_env 'TRAVIS_PYTHON_VERSION', "py_version"
26
+ end
27
+
28
+ do_install(env) do
29
+ env.stage("install").tap do |i|
30
+ i.add_task "python", "action" => "install", "python" => DEFAULT_PYTHON
31
+ i.add_task "python", "virtualenv"
32
+ i.add_task "python", "announce"
33
+
34
+ i.add_task "python", "action" => "pip:install", "pip_args" => PIP_OPTS
35
+ end
36
+ end
37
+
38
+ do_before_script(env) do
39
+ env.stage("before_script").tap do |i|
40
+ i.add_task "python", "django:settings"
41
+ end
42
+ end
43
+
44
+ do_script(env) do
45
+ env.stage("script").tap do |i|
46
+ i.add_task "python", "script"
47
+ end
48
+ end
49
+
50
+ end
51
+
52
+ app.call(env)
53
+ end
54
+
55
+ private
56
+
57
+ def enabled?(env)
58
+ env.source.python.first || env.source.language == 'python'
59
+ end
60
+
61
+ def python_version(env)
62
+ v = env.source.python.first
63
+ v || DEFAULT_PYTHON
64
+ end
65
+
66
+ end
67
+ end
68
+ end
69
+ end