vx-builder 0.5.54 → 0.5.55

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 (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