dapp 0.10.2 → 0.36.24
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.
- checksums.yaml +5 -5
- data/bin/dapp +77 -15
- data/config/en/common.yml +20 -11
- data/config/en/net_status.yml +108 -27
- data/lib/dapp/cli/cli.rb +1 -0
- data/lib/dapp/cli/command/base.rb +111 -0
- data/lib/dapp/cli/command/sample/base.rb +28 -0
- data/lib/dapp/cli/command/sample/create.rb +24 -0
- data/lib/dapp/cli/command/sample/list.rb +25 -0
- data/lib/dapp/cli/command/sample.rb +20 -0
- data/lib/dapp/cli/command/slug.rb +26 -0
- data/lib/dapp/cli/command/update.rb +65 -0
- data/lib/dapp/cli/options/ssh.rb +18 -0
- data/lib/dapp/cli/options/tag.rb +51 -0
- data/lib/dapp/cli.rb +11 -3
- data/lib/dapp/config/config.rb +21 -0
- data/lib/dapp/config/directive/base.rb +100 -3
- data/lib/dapp/core_ext/hash.rb +14 -0
- data/lib/dapp/core_ext/pathname.rb +6 -4
- data/lib/dapp/dapp/chef.rb +1 -9
- data/lib/dapp/dapp/command/common.rb +24 -0
- data/lib/dapp/dapp/command/sample/common.rb +54 -0
- data/lib/dapp/dapp/command/sample/create.rb +57 -0
- data/lib/dapp/dapp/command/sample/list.rb +13 -0
- data/lib/dapp/dapp/command/slug.rb +11 -0
- data/lib/dapp/dapp/dapp_config.rb +85 -0
- data/lib/dapp/dapp/dappfile.rb +108 -27
- data/lib/dapp/dapp/deps/base.rb +9 -32
- data/lib/dapp/dapp/deps/common.rb +26 -0
- data/lib/dapp/dapp/deps/gitartifact.rb +2 -20
- data/lib/dapp/dapp/deps/toolchain.rb +11 -0
- data/lib/dapp/dapp/git_artifact.rb +6 -4
- data/lib/dapp/dapp/lock.rb +6 -5
- data/lib/dapp/dapp/logging/base.rb +32 -20
- data/lib/dapp/dapp/logging/i18n.rb +5 -1
- data/lib/dapp/dapp/logging/process.rb +6 -6
- data/lib/dapp/dapp/option_tags.rb +98 -0
- data/lib/dapp/dapp/ruby2go.rb +130 -0
- data/lib/dapp/dapp/sentry.rb +97 -0
- data/lib/dapp/dapp/shellout/base.rb +26 -18
- data/lib/dapp/dapp/shellout/streaming.rb +2 -2
- data/lib/dapp/dapp/slug.rb +12 -0
- data/lib/dapp/dapp/ssh_agent.rb +25 -7
- data/lib/dapp/dapp.rb +192 -41
- data/lib/dapp/deployment.rb +1 -0
- data/lib/dapp/dimg/artifact.rb +12 -4
- data/lib/dapp/dimg/build/stage/artifact_base.rb +26 -30
- data/lib/dapp/dimg/build/stage/artifact_default.rb +50 -28
- data/lib/dapp/dimg/build/stage/base.rb +187 -52
- data/lib/dapp/dimg/build/stage/before_install.rb +4 -15
- data/lib/dapp/dimg/build/stage/before_install_artifact.rb +4 -0
- data/lib/dapp/dimg/build/stage/before_setup.rb +1 -20
- data/lib/dapp/dimg/build/stage/build_artifact.rb +1 -20
- data/lib/dapp/dimg/build/stage/docker_instructions.rb +5 -4
- data/lib/dapp/dimg/build/stage/from.rb +62 -9
- data/lib/dapp/dimg/build/stage/ga_archive.rb +14 -1
- data/lib/dapp/dimg/build/stage/ga_artifact_patch.rb +1 -5
- data/lib/dapp/dimg/build/stage/ga_base.rb +5 -35
- data/lib/dapp/dimg/build/stage/ga_latest_patch.rb +15 -34
- data/lib/dapp/dimg/build/stage/ga_related_base.rb +21 -0
- data/lib/dapp/dimg/build/stage/import_artifact.rb +22 -11
- data/lib/dapp/dimg/build/stage/install/ga_post_install_patch.rb +6 -2
- data/lib/dapp/dimg/build/stage/install/ga_pre_install_patch.rb +6 -2
- data/lib/dapp/dimg/build/stage/install/install.rb +1 -19
- data/lib/dapp/dimg/build/stage/instructions.rb +27 -0
- data/lib/dapp/dimg/build/stage/mod/group.rb +19 -7
- data/lib/dapp/dimg/build/stage/mod/logging.rb +15 -19
- data/lib/dapp/dimg/build/stage/setup/ga_post_setup_patch.rb +24 -1
- data/lib/dapp/dimg/build/stage/setup/ga_pre_setup_patch.rb +6 -2
- data/lib/dapp/dimg/build/stage/setup/setup.rb +1 -19
- data/lib/dapp/dimg/builder/ansible.rb +5 -0
- data/lib/dapp/dimg/builder/chef/cookbook.rb +8 -8
- data/lib/dapp/dimg/builder/chef.rb +29 -16
- data/lib/dapp/dimg/builder/none.rb +1 -34
- data/lib/dapp/dimg/builder/ruby2go.rb +57 -0
- data/lib/dapp/dimg/builder/shell.rb +1 -20
- data/lib/dapp/dimg/cli/cli.rb +2 -1
- data/lib/dapp/dimg/cli/command/base.rb +24 -0
- data/lib/dapp/dimg/cli/command/dimg/bp.rb +60 -0
- data/lib/dapp/dimg/cli/command/dimg/build.rb +43 -0
- data/lib/dapp/dimg/cli/{build_context → command/dimg/build_context}/export.rb +9 -4
- data/lib/dapp/dimg/cli/{build_context → command/dimg/build_context}/import.rb +4 -4
- data/lib/dapp/dimg/cli/{build_context.rb → command/dimg/build_context.rb} +5 -5
- data/lib/dapp/dimg/cli/{cleanup.rb → command/dimg/cleanup.rb} +4 -6
- data/lib/dapp/dimg/cli/command/dimg/cleanup_repo.rb +47 -0
- data/lib/dapp/dimg/cli/command/dimg/flush_local.rb +24 -0
- data/lib/dapp/dimg/cli/command/dimg/flush_repo.rb +36 -0
- data/lib/dapp/dimg/cli/{list.rb → command/dimg/list.rb} +6 -3
- data/lib/dapp/dimg/cli/{mrproper.rb → command/dimg/mrproper.rb} +4 -4
- data/lib/dapp/dimg/cli/command/dimg/push.rb +39 -0
- data/lib/dapp/dimg/cli/{run.rb → command/dimg/run.rb} +30 -15
- data/lib/dapp/dimg/cli/{spush.rb → command/dimg/spush.rb} +4 -4
- data/lib/dapp/dimg/cli/{stage_image.rb → command/dimg/stage_image.rb} +12 -3
- data/lib/dapp/dimg/cli/command/dimg/stages/base.rb +13 -0
- data/lib/dapp/dimg/cli/{stages → command/dimg/stages}/cleanup_local.rb +13 -9
- data/lib/dapp/dimg/cli/{stages → command/dimg/stages}/cleanup_repo.rb +6 -8
- data/lib/dapp/dimg/cli/command/dimg/stages/flush_local.rb +21 -0
- data/lib/dapp/dimg/cli/command/dimg/stages/flush_repo.rb +28 -0
- data/lib/dapp/dimg/cli/command/dimg/stages/pull.rb +34 -0
- data/lib/dapp/dimg/cli/command/dimg/stages/push.rb +30 -0
- data/lib/dapp/dimg/cli/command/dimg/stages.rb +22 -0
- data/lib/dapp/dimg/cli/command/dimg/tag.rb +24 -0
- data/lib/dapp/dimg/cli/command/dimg.rb +31 -0
- data/lib/dapp/dimg/cli/options/introspection.rb +45 -0
- data/lib/dapp/dimg/config/config.rb +24 -0
- data/lib/dapp/dimg/config/directive/artifact.rb +13 -15
- data/lib/dapp/dimg/config/directive/artifact_base.rb +13 -8
- data/lib/dapp/dimg/config/directive/artifact_dimg.rb +12 -0
- data/lib/dapp/dimg/config/directive/artifact_group.rb +60 -0
- data/lib/dapp/dimg/config/directive/dimg/instance_methods.rb +203 -0
- data/lib/dapp/dimg/config/directive/dimg/validation.rb +217 -0
- data/lib/dapp/dimg/config/directive/dimg.rb +36 -0
- data/lib/dapp/dimg/config/directive/dimg_group.rb +73 -0
- data/lib/dapp/dimg/config/directive/dimg_group_base.rb +46 -0
- data/lib/dapp/dimg/config/directive/docker/artifact.rb +5 -0
- data/lib/dapp/dimg/config/directive/docker/base.rb +2 -3
- data/lib/dapp/dimg/config/directive/docker/dimg.rb +4 -4
- data/lib/dapp/dimg/config/directive/git_artifact_local.rb +24 -5
- data/lib/dapp/dimg/config/directive/git_artifact_remote.rb +23 -12
- data/lib/dapp/dimg/config/directive/mount.rb +11 -3
- data/lib/dapp/dimg/config/directive/shell/dimg.rb +2 -2
- data/lib/dapp/dimg/dapp/command/bp.rb +3 -5
- data/lib/dapp/dimg/dapp/command/build.rb +4 -6
- data/lib/dapp/dimg/dapp/command/build_context/common.rb +2 -2
- data/lib/dapp/dimg/dapp/command/build_context/export.rb +14 -14
- data/lib/dapp/dimg/dapp/command/build_context/import.rb +28 -23
- data/lib/dapp/dimg/dapp/command/cleanup.rb +4 -11
- data/lib/dapp/dimg/dapp/command/cleanup_repo.rb +143 -0
- data/lib/dapp/dimg/dapp/command/common.rb +148 -38
- data/lib/dapp/dimg/dapp/command/flush_local.rb +25 -0
- data/lib/dapp/dimg/dapp/command/flush_repo.rb +25 -0
- data/lib/dapp/dimg/dapp/command/list.rb +1 -1
- data/lib/dapp/dimg/dapp/command/mrproper.rb +16 -63
- data/lib/dapp/dimg/dapp/command/push.rb +11 -16
- data/lib/dapp/dimg/dapp/command/ruby2go_cleanup.rb +48 -0
- data/lib/dapp/dimg/dapp/command/run.rb +4 -4
- data/lib/dapp/dimg/dapp/command/spush.rb +4 -5
- data/lib/dapp/dimg/dapp/command/stage_image.rb +2 -2
- data/lib/dapp/dimg/dapp/command/stages/cleanup_local.rb +13 -115
- data/lib/dapp/dimg/dapp/command/stages/cleanup_repo.rb +23 -102
- data/lib/dapp/dimg/dapp/command/stages/common.rb +57 -39
- data/lib/dapp/dimg/dapp/command/stages/flush_local.rb +13 -7
- data/lib/dapp/dimg/dapp/command/stages/flush_repo.rb +14 -8
- data/lib/dapp/dimg/dapp/command/stages/pull.rb +4 -13
- data/lib/dapp/dimg/dapp/command/stages/push.rb +4 -9
- data/lib/dapp/dimg/dapp/command/tag.rb +4 -6
- data/lib/dapp/dimg/dapp/config_artifact_group.rb +20 -0
- data/lib/dapp/dimg/dapp/dapp.rb +40 -0
- data/lib/dapp/dimg/dapp/dappfile.rb +43 -0
- data/lib/dapp/dimg/dapp/dimg.rb +41 -0
- data/lib/dapp/dimg/dimg/git_artifact.rb +25 -11
- data/lib/dapp/dimg/dimg/path.rb +7 -9
- data/lib/dapp/dimg/dimg/stages.rb +27 -15
- data/lib/dapp/dimg/dimg.rb +172 -69
- data/lib/dapp/dimg/docker_registry/base.rb +31 -74
- data/lib/dapp/dimg/docker_registry/dimg.rb +55 -0
- data/lib/dapp/dimg/docker_registry.rb +5 -23
- data/lib/dapp/dimg/error/build.rb +1 -1
- data/lib/dapp/dimg/error/chef.rb +1 -5
- data/lib/dapp/dimg/error/{command.rb → default.rb} +1 -1
- data/lib/dapp/dimg/error/dimg.rb +1 -1
- data/lib/dapp/dimg/error/lock.rb +1 -1
- data/lib/dapp/dimg/error/registry.rb +1 -1
- data/lib/dapp/dimg/error/rugged.rb +1 -1
- data/lib/dapp/dimg/error/tar_writer.rb +1 -1
- data/lib/dapp/dimg/git_artifact.rb +195 -179
- data/lib/dapp/dimg/git_repo/base.rb +49 -45
- data/lib/dapp/dimg/git_repo/local.rb +45 -0
- data/lib/dapp/dimg/git_repo/own.rb +3 -31
- data/lib/dapp/dimg/git_repo/remote.rb +65 -26
- data/lib/dapp/dimg/image/argument.rb +15 -50
- data/lib/dapp/dimg/image/dimg.rb +15 -0
- data/lib/dapp/dimg/image/scratch.rb +35 -9
- data/lib/dapp/dimg/image/stage.rb +223 -44
- data/lib/dapp/dimg/lock/file.rb +4 -4
- data/lib/dapp/downloader.rb +117 -0
- data/lib/dapp/error/base.rb +1 -5
- data/lib/dapp/error/command.rb +5 -0
- data/lib/dapp/error/config.rb +5 -0
- data/lib/dapp/error/dapp.rb +1 -1
- data/lib/dapp/error/dappfile.rb +1 -1
- data/lib/dapp/error/default.rb +11 -0
- data/lib/dapp/error/mod/user.rb +11 -0
- data/lib/dapp/error/shellout.rb +1 -1
- data/lib/dapp/exception/base.rb +1 -1
- data/lib/dapp/helper/case_conversion.rb +17 -0
- data/lib/dapp/helper/cli.rb +18 -7
- data/lib/dapp/helper/net_status.rb +5 -1
- data/lib/dapp/helper/sha256.rb +1 -1
- data/lib/dapp/helper/tar.rb +31 -0
- data/lib/dapp/helper/trivia.rb +40 -1
- data/lib/dapp/helper/url.rb +23 -0
- data/lib/dapp/helper/yaml.rb +24 -0
- data/lib/dapp/kube/cli/cli.rb +1 -0
- data/lib/dapp/kube/cli/command/base.rb +14 -0
- data/lib/dapp/kube/cli/command/kube/chart_create.rb +19 -0
- data/lib/dapp/kube/cli/command/kube/deploy.rb +80 -0
- data/lib/dapp/kube/cli/command/kube/dismiss.rb +31 -0
- data/lib/dapp/kube/cli/command/kube/lint.rb +53 -0
- data/lib/dapp/kube/cli/command/kube/minikube_setup.rb +19 -0
- data/lib/dapp/kube/cli/command/kube/render.rb +63 -0
- data/lib/dapp/kube/cli/command/kube/secret_edit.rb +30 -0
- data/lib/dapp/kube/cli/command/kube/secret_extract.rb +39 -0
- data/lib/dapp/kube/cli/command/kube/secret_generate.rb +34 -0
- data/lib/dapp/kube/cli/command/kube/secret_key_generate.rb +16 -0
- data/lib/dapp/kube/cli/command/kube/secret_regenerate.rb +29 -0
- data/lib/dapp/kube/cli/command/kube/value_get.rb +47 -0
- data/lib/dapp/kube/cli/command/kube.rb +28 -0
- data/lib/dapp/kube/dapp/command/chart_create.rb +103 -0
- data/lib/dapp/kube/dapp/command/common.rb +379 -0
- data/lib/dapp/kube/dapp/command/deploy.rb +351 -0
- data/lib/dapp/kube/dapp/command/dismiss.rb +50 -0
- data/lib/dapp/kube/dapp/command/lint.rb +69 -0
- data/lib/dapp/kube/dapp/command/minikube_setup.rb +402 -0
- data/lib/dapp/kube/dapp/command/render.rb +54 -0
- data/lib/dapp/kube/dapp/command/ruby2go.rb +17 -0
- data/lib/dapp/kube/dapp/command/secret_edit.rb +21 -0
- data/lib/dapp/kube/dapp/command/secret_extract.rb +17 -0
- data/lib/dapp/kube/dapp/command/secret_generate.rb +21 -0
- data/lib/dapp/kube/dapp/command/secret_key_generate.rb +13 -0
- data/lib/dapp/kube/dapp/command/secret_regenerate.rb +13 -0
- data/lib/dapp/kube/dapp/command/value_get.rb +32 -0
- data/lib/dapp/kube/dapp/dapp.rb +26 -0
- data/lib/dapp/kube/error/default.rb +7 -0
- data/lib/dapp/kube/helm/release.rb +189 -0
- data/lib/dapp/kube/helm/values.rb +148 -0
- data/lib/dapp/kube/helm.rb +5 -0
- data/lib/dapp/kube/kubernetes/client/error.rb +43 -0
- data/lib/dapp/kube/kubernetes/client/resource/base.rb +33 -0
- data/lib/dapp/kube/kubernetes/client/resource/deployment.rb +11 -0
- data/lib/dapp/kube/kubernetes/client/resource/event.rb +8 -0
- data/lib/dapp/kube/kubernetes/client/resource/job.rb +27 -0
- data/lib/dapp/kube/kubernetes/client/resource/pod.rb +62 -0
- data/lib/dapp/kube/kubernetes/client/resource/replicaset.rb +8 -0
- data/lib/dapp/kube/kubernetes/client.rb +314 -0
- data/lib/dapp/kube/kubernetes/config.rb +132 -0
- data/lib/dapp/kube/kubernetes/error.rb +15 -0
- data/lib/dapp/kube/kubernetes/manager/base.rb +15 -0
- data/lib/dapp/kube/kubernetes/manager/container.rb +103 -0
- data/lib/dapp/kube/kubernetes/manager/deployment.rb +212 -0
- data/lib/dapp/kube/kubernetes/manager/job.rb +65 -0
- data/lib/dapp/kube/kubernetes/manager/pod.rb +69 -0
- data/lib/dapp/kube/kubernetes.rb +6 -0
- data/lib/dapp/kube/secret.rb +93 -0
- data/lib/dapp/kube.rb +1 -0
- data/lib/dapp/version.rb +2 -2
- data/lib/dapp.rb +155 -61
- metadata +208 -61
- data/lib/dapp/cli/base.rb +0 -63
- data/lib/dapp/config/base.rb +0 -54
- data/lib/dapp/config/error/config.rb +0 -7
- data/lib/dapp/dimg/build/stage/ga_archive_dependencies.rb +0 -27
- data/lib/dapp/dimg/build/stage/ga_dependencies_base.rb +0 -20
- data/lib/dapp/dimg/build/stage/install/ga_post_install_patch_dependencies.rb +0 -22
- data/lib/dapp/dimg/build/stage/install/ga_pre_install_patch_dependencies.rb +0 -22
- data/lib/dapp/dimg/build/stage/mod/git_artifact_dependencies.rb +0 -23
- data/lib/dapp/dimg/build/stage/setup/ga_post_setup_patch_dependencies.rb +0 -32
- data/lib/dapp/dimg/build/stage/setup/ga_pre_setup_patch_dependencies.rb +0 -22
- data/lib/dapp/dimg/cli/base.rb +0 -16
- data/lib/dapp/dimg/cli/bp.rb +0 -37
- data/lib/dapp/dimg/cli/build.rb +0 -64
- data/lib/dapp/dimg/cli/dimg.rb +0 -30
- data/lib/dapp/dimg/cli/push.rb +0 -61
- data/lib/dapp/dimg/cli/stages/flush_local.rb +0 -23
- data/lib/dapp/dimg/cli/stages/flush_repo.rb +0 -24
- data/lib/dapp/dimg/cli/stages/pull.rb +0 -28
- data/lib/dapp/dimg/cli/stages/push.rb +0 -24
- data/lib/dapp/dimg/cli/stages.rb +0 -22
- data/lib/dapp/dimg/cli/tag.rb +0 -24
- data/lib/dapp/dimg/config/artifact_dimg.rb +0 -17
- data/lib/dapp/dimg/config/artifact_group.rb +0 -43
- data/lib/dapp/dimg/config/base.rb +0 -7
- data/lib/dapp/dimg/config/dimg/instance_methods.rb +0 -179
- data/lib/dapp/dimg/config/dimg/validation.rb +0 -126
- data/lib/dapp/dimg/config/dimg.rb +0 -24
- data/lib/dapp/dimg/config/dimg_group.rb +0 -61
- data/lib/dapp/dimg/config/dimg_group_base.rb +0 -54
- data/lib/dapp/dimg/config/dimg_group_main.rb +0 -22
- data/lib/dapp/dimg/dapp/command.rb +0 -21
- data/lib/dapp/dimg/dimg/tags.rb +0 -65
- data/lib/dapp/dimg/docker_registry/base/authorization.rb +0 -63
- data/lib/dapp/dimg/docker_registry/base/request.rb +0 -34
- data/lib/dapp/dimg/docker_registry/default.rb +0 -18
- data/lib/dapp/dimg/error/base.rb +0 -7
- data/lib/dapp/dimg/error/config.rb +0 -7
- data/lib/dapp/dimg/exception/introspect_image.rb +0 -7
- data/lib/dapp/dimg/image/docker.rb +0 -134
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
module Dapp
|
|
2
|
+
class Dapp
|
|
3
|
+
module Ruby2Go
|
|
4
|
+
class Error < ::Dapp::Error::Base
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def ruby2go_image(args_hash)
|
|
8
|
+
_ruby2go("image", args_hash)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def ruby2go_docker_registry(args_hash)
|
|
12
|
+
_ruby2go("docker_registry", args_hash)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def ruby2go_builder(args_hash)
|
|
16
|
+
_ruby2go("builder", args_hash)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def ruby2go_git_artifact(args_hash)
|
|
20
|
+
_ruby2go("git-artifact", args_hash)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def ruby2go_dappdeps(args_hash)
|
|
24
|
+
_ruby2go("dappdeps", args_hash)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def ruby2go_git_repo(args_hash)
|
|
28
|
+
_ruby2go("git-repo", args_hash)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def ruby2go_cleanup(args_hash)
|
|
32
|
+
_ruby2go("cleanup", args_hash)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def ruby2go_slug(args_hash)
|
|
36
|
+
_ruby2go("slug", args_hash)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def ruby2go_deploy_watcher(args_hash, **kwargs)
|
|
40
|
+
_ruby2go("deploy-watcher", args_hash, **kwargs)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def ruby2go_deploy(args_hash)
|
|
44
|
+
_ruby2go("deploy", args_hash)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def ruby2go_init
|
|
48
|
+
@_call_after_before_terminate << proc {
|
|
49
|
+
FileUtils.rmtree(@_ruby2go_tmp_dir) if @_ruby2go_tmp_dir
|
|
50
|
+
}
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def _ruby2go_bin_path_env_var_name(progname)
|
|
54
|
+
"DAPP_BIN_#{progname.gsub("-", "_").upcase}"
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def _ruby2go(progname, args_hash, tmp_dir: nil)
|
|
58
|
+
tmp_dir = _ruby2go_tmp_dir if tmp_dir.nil?
|
|
59
|
+
|
|
60
|
+
call_id = SecureRandom.uuid
|
|
61
|
+
|
|
62
|
+
args_file = File.join(tmp_dir, "args.#{call_id}.json")
|
|
63
|
+
File.open(args_file, "w") {|f| f.write JSON.dump(args_hash)}
|
|
64
|
+
|
|
65
|
+
res_file = File.join(tmp_dir, "res.#{call_id}.json")
|
|
66
|
+
|
|
67
|
+
if bin_path = ENV[_ruby2go_bin_path_env_var_name(progname)]
|
|
68
|
+
unless File.exists? bin_path
|
|
69
|
+
raise ::Dapp::Error::Dapp,
|
|
70
|
+
code: :ruby2go_bin_path_not_found,
|
|
71
|
+
data: {env_var_name: _ruby2go_bin_path_env_var_name(progname), path: bin_path}
|
|
72
|
+
end
|
|
73
|
+
else
|
|
74
|
+
bin_path = File.join(::Dapp::Dapp.home_dir, "bin", progname, ::Dapp::VERSION, progname)
|
|
75
|
+
unless File.exists? bin_path
|
|
76
|
+
_download_ruby2go_bin(progname, bin_path)
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
env_hash = ENV.map {|k, v| [k, v]}.to_h
|
|
81
|
+
|
|
82
|
+
begin
|
|
83
|
+
exec(env_hash, "#{bin_path} -args-from-file #{args_file} -result-to-file #{res_file}") unless (pid = fork)
|
|
84
|
+
pid, status = Process.waitpid2(pid)
|
|
85
|
+
rescue Interrupt => _e
|
|
86
|
+
Process.kill('INT', pid)
|
|
87
|
+
raise
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
status_code = status.exitstatus
|
|
91
|
+
if [0, 16].include?(status_code)
|
|
92
|
+
res = nil
|
|
93
|
+
File.open(res_file, "r") {|f| res = JSON.load(f.read)}
|
|
94
|
+
res
|
|
95
|
+
else
|
|
96
|
+
raise ::Dapp::Dapp::Ruby2Go::Error, code: :ruby2go_command_unexpected_exitstatus, data: { progname: progname, status_code: status_code }
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def _ruby2go_tmp_dir
|
|
101
|
+
@_ruby2go_tmp_dir ||= Dir.mktmpdir('dapp-ruby2go-', tmp_base_dir)
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def _download_ruby2go_bin(progname, bin_path)
|
|
105
|
+
lock("downloader.bin.#{progname}", default_timeout: 1800) do
|
|
106
|
+
return if File.exists? bin_path
|
|
107
|
+
|
|
108
|
+
log_process("Downloading #{progname} dapp dependency") do
|
|
109
|
+
location = URI("https://dl.bintray.com/dapp/ruby2go/#{::Dapp::VERSION}/#{progname}")
|
|
110
|
+
|
|
111
|
+
tmp_bin_path = File.join(self.class.tmp_base_dir, "#{progname}-#{SecureRandom.uuid}")
|
|
112
|
+
::Dapp::Downloader.download(location, tmp_bin_path, show_progress: true, progress_titile: bin_path)
|
|
113
|
+
|
|
114
|
+
checksum_location = URI("https://dl.bintray.com/dapp/ruby2go/#{::Dapp::VERSION}/#{progname}.sha")
|
|
115
|
+
tmp_bin_checksum_path = tmp_bin_path + ".checksum"
|
|
116
|
+
::Dapp::Downloader.download(checksum_location, tmp_bin_checksum_path)
|
|
117
|
+
|
|
118
|
+
if Digest::SHA256.hexdigest(File.read(tmp_bin_path)) != File.read(tmp_bin_checksum_path).strip
|
|
119
|
+
raise ::Dapp::Error::Dapp, code: :ruby2go_download_failed_bad_checksum, data: {url: location.to_s, checksum_url: checksum_location.to_s, progname: progname}
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
File.chmod(0755, tmp_bin_path)
|
|
123
|
+
FileUtils.mkdir_p File.dirname(bin_path)
|
|
124
|
+
FileUtils.mv tmp_bin_path, bin_path
|
|
125
|
+
end # log_process
|
|
126
|
+
end # lock
|
|
127
|
+
end
|
|
128
|
+
end # Ruby2Go
|
|
129
|
+
end # Dapp
|
|
130
|
+
end # Dapp
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
module Dapp
|
|
2
|
+
class Dapp
|
|
3
|
+
module Sentry
|
|
4
|
+
def sentry_message(msg, **kwargs)
|
|
5
|
+
return if not ensure_sentry_configured
|
|
6
|
+
kwargs[:level] ||= "info"
|
|
7
|
+
Raven.capture_message(msg, _make_sentry_params(**kwargs))
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def sentry_exception(exception, **kwargs)
|
|
11
|
+
return if not ensure_sentry_configured
|
|
12
|
+
(kwargs[:tags] ||= {})['error-code'] = begin
|
|
13
|
+
net_status = exception.net_status
|
|
14
|
+
[net_status[:context], net_status[:code]].compact.join('_')
|
|
15
|
+
end
|
|
16
|
+
Raven.capture_exception(exception, _make_sentry_params(**kwargs))
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def ensure_sentry_configured
|
|
20
|
+
return false unless sentry_settings = settings["sentry"]
|
|
21
|
+
|
|
22
|
+
unless @sentry_settings_configured
|
|
23
|
+
Raven.configure do |config|
|
|
24
|
+
logger = ::Logger.new(STDOUT)
|
|
25
|
+
logger.level = ::Logger::WARN
|
|
26
|
+
|
|
27
|
+
config.logger = logger
|
|
28
|
+
config.dsn = sentry_settings["dsn"]
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
@sentry_settings_configured = true
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
return true
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def _make_sentry_params(level: nil, tags: {}, extra: {}, user: {})
|
|
38
|
+
Marshal.load(Marshal.dump({
|
|
39
|
+
level: level,
|
|
40
|
+
tags: _sentry_tags_context.merge(tags),
|
|
41
|
+
extra: _sentry_extra_context.merge(extra),
|
|
42
|
+
user: _sentry_user_context.merge(user),
|
|
43
|
+
}))
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def _sentry_extra_context
|
|
47
|
+
@_sentry_extra_context ||= {
|
|
48
|
+
"pwd" => Dir.pwd,
|
|
49
|
+
"dapp-dir" => self.work_dir,
|
|
50
|
+
"build-dir" => self.build_dir,
|
|
51
|
+
"options" => self.options,
|
|
52
|
+
"env-options" => {
|
|
53
|
+
"DAPP_FORCE_SAVE_CACHE" => ENV["DAPP_FORCE_SAVE_CACHE"],
|
|
54
|
+
"DAPP_BIN_DAPPFILE_YML" => ENV["DAPP_BIN_DAPPFILE_YML"],
|
|
55
|
+
"ANSIBLE_ARGS" => ENV["ANSIBLE_ARGS"],
|
|
56
|
+
"DAPP_CHEF_DEBUG" => ENV["DAPP_CHEF_DEBUG"],
|
|
57
|
+
},
|
|
58
|
+
}.tap {|extra|
|
|
59
|
+
extra["ci-env"] = {"CI" => ENV["CI"]}
|
|
60
|
+
ENV.select {|k, v| k.start_with?("CI_")}.each do |k, v|
|
|
61
|
+
extra["ci-env"][k] = v
|
|
62
|
+
end
|
|
63
|
+
}
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def _sentry_tags_context
|
|
67
|
+
@_sentry_tags_context ||= {
|
|
68
|
+
"dapp-name" => self.name,
|
|
69
|
+
"dapp-short-version" => ::Dapp::VERSION.split(".")[0..1].join("."),
|
|
70
|
+
"dapp-version" => ::Dapp::VERSION,
|
|
71
|
+
"dapp-build-cache-version" => ::Dapp::BUILD_CACHE_VERSION,
|
|
72
|
+
"dapp-command" => self.options[:dapp_command],
|
|
73
|
+
}.tap {|tags|
|
|
74
|
+
# FIXME: precache this info after Dapp object initialization
|
|
75
|
+
#if git_own_repo_exist? && git_own_repo.remote_origin_url
|
|
76
|
+
#tags["git-host"] = self.get_host_from_git_url(git_own_repo.remote_origin_url)
|
|
77
|
+
|
|
78
|
+
#git_name = self.git_url_to_name(git_own_repo.remote_origin_url)
|
|
79
|
+
|
|
80
|
+
#tags["git-group"] = git_name.partition("/")[0]
|
|
81
|
+
#tags["git-name"] = git_name
|
|
82
|
+
#end
|
|
83
|
+
|
|
84
|
+
begin
|
|
85
|
+
ver = self.class.host_docker_minor_version
|
|
86
|
+
tags["docker-minor-version"] = ver.to_s
|
|
87
|
+
rescue ::Exception
|
|
88
|
+
end
|
|
89
|
+
}
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def _sentry_user_context
|
|
93
|
+
@__sentry_user_context ||= {}
|
|
94
|
+
end
|
|
95
|
+
end # Sentry
|
|
96
|
+
end # Dapp
|
|
97
|
+
end # Dapp
|
|
@@ -19,7 +19,7 @@ module Dapp
|
|
|
19
19
|
env = (env || {}).merge(param_env) if param_env
|
|
20
20
|
kwargs[:env] = env if env
|
|
21
21
|
|
|
22
|
-
do_shellout = -> { ::Mixlib::ShellOut.new(*args, timeout:
|
|
22
|
+
do_shellout = -> { ::Mixlib::ShellOut.new(*args, timeout: 86400, **kwargs).run_command }
|
|
23
23
|
if defined? ::Bundler
|
|
24
24
|
::Bundler.with_clean_env { do_shellout.call }
|
|
25
25
|
else
|
|
@@ -28,13 +28,16 @@ module Dapp
|
|
|
28
28
|
end
|
|
29
29
|
|
|
30
30
|
def shellout!(*args, **kwargs)
|
|
31
|
-
|
|
32
|
-
|
|
31
|
+
if instance_of? Dapp
|
|
32
|
+
default_kwarg = proc { |key, value| kwargs[key] = value unless kwargs.key?(key) }
|
|
33
|
+
default_kwarg.call(:quiet, log_quiet?)
|
|
34
|
+
default_kwarg.call(:time, log_time?)
|
|
33
35
|
end
|
|
36
|
+
_shellout_with_logging!(*args, **kwargs)
|
|
34
37
|
end
|
|
35
38
|
|
|
36
39
|
def shellout_pack(command)
|
|
37
|
-
"eval $(echo #{Base64.strict_encode64(command)} |
|
|
40
|
+
"eval $(echo #{Base64.strict_encode64(command)} | #{base64_bin} --decode)"
|
|
38
41
|
end
|
|
39
42
|
|
|
40
43
|
class << self
|
|
@@ -47,24 +50,29 @@ module Dapp
|
|
|
47
50
|
end
|
|
48
51
|
end # << self
|
|
49
52
|
|
|
50
|
-
|
|
53
|
+
def shellout_cmd_should_succeed!(cmd)
|
|
54
|
+
return cmd.tap(&:error!)
|
|
55
|
+
rescue ::Mixlib::ShellOut::ShellCommandFailed => e
|
|
56
|
+
raise Error::Shellout, code: Helper::Trivia.class_to_lowercase(e.class), data: { stream: e.message }
|
|
57
|
+
end
|
|
51
58
|
|
|
52
|
-
|
|
53
|
-
return yield(**kwargs) unless instance_of? Dapp
|
|
59
|
+
protected
|
|
54
60
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
kwargs[:live_stderr] = Proxy::Error.new(stream, with_time:
|
|
61
|
+
def _shellout_with_logging!(*args, verbose: false, quiet: true, time: false, raise_on_error: true, **kwargs)
|
|
62
|
+
stream = Stream.new
|
|
63
|
+
if verbose && !quiet
|
|
64
|
+
kwargs[:live_stream] = Proxy::Base.new(stream, STDOUT, with_time: time)
|
|
65
|
+
kwargs[:live_stderr] = Proxy::Error.new(stream, STDERR, with_time: time)
|
|
66
|
+
else
|
|
67
|
+
kwargs[:live_stdout] = Proxy::Base.new(stream, with_time: time)
|
|
68
|
+
kwargs[:live_stderr] = Proxy::Error.new(stream, with_time: time)
|
|
69
|
+
end
|
|
63
70
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
raise Error::Shellout, code: class_to_lowercase(e.class), data: { stream: stream.show }
|
|
71
|
+
shellout(*args, **kwargs).tap do |res|
|
|
72
|
+
res.error! if raise_on_error
|
|
67
73
|
end
|
|
74
|
+
rescue ::Mixlib::ShellOut::ShellCommandFailed => e
|
|
75
|
+
raise Error::Shellout, code: Helper::Trivia.class_to_lowercase(e.class), data: { stream: stream.show }
|
|
68
76
|
end
|
|
69
77
|
end
|
|
70
78
|
end
|
|
@@ -28,13 +28,13 @@ module Dapp
|
|
|
28
28
|
end
|
|
29
29
|
|
|
30
30
|
def format_string(str)
|
|
31
|
-
str.lines.map { |l| "#{Dapp.log_time if @with_time}#{l.
|
|
31
|
+
str.lines.map { |l| "#{Dapp.log_time if @with_time}#{l.chomp}\n" }.join
|
|
32
32
|
end
|
|
33
33
|
end
|
|
34
34
|
|
|
35
35
|
class Error < Base
|
|
36
36
|
def format_string(str)
|
|
37
|
-
"#{Dapp.paint_string(super.
|
|
37
|
+
"#{Dapp.paint_string(super.chomp, :warning)}\n"
|
|
38
38
|
end
|
|
39
39
|
end
|
|
40
40
|
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
module Dapp
|
|
2
|
+
class Dapp
|
|
3
|
+
module Slug
|
|
4
|
+
def consistent_uniq_slugify(s)
|
|
5
|
+
ruby2go_slug({ options: { data: s } }).tap do |res|
|
|
6
|
+
raise Error::Build, code: :ruby2go_slug_failed_unexpected_error, data: { message: res["error"] } unless res["error"].nil?
|
|
7
|
+
break res['data']
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
end # Slug
|
|
11
|
+
end # Dapp
|
|
12
|
+
end # Dapp
|
data/lib/dapp/dapp/ssh_agent.rb
CHANGED
|
@@ -46,10 +46,24 @@ module Dapp
|
|
|
46
46
|
shellout! "ssh-add #{ssh_key_path}", env: { SSH_AUTH_SOCK: ssh_auth_sock(force_run_agent: true) }
|
|
47
47
|
end
|
|
48
48
|
|
|
49
|
+
def ssh_agent_exist?
|
|
50
|
+
ENV['SSH_AUTH_SOCK'] && File.exist?(ENV['SSH_AUTH_SOCK'])
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def default_ssh_keys
|
|
54
|
+
@default_ssh_keys ||= begin
|
|
55
|
+
%w(id_rsa id_dsa).map do |path|
|
|
56
|
+
File.join(ENV["HOME"], ".ssh", path)
|
|
57
|
+
end.select do |path|
|
|
58
|
+
File.exist? path
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
49
63
|
def ssh_auth_sock(force_run_agent: false)
|
|
50
64
|
@ssh_auth_sock ||= begin
|
|
51
65
|
system_ssh_auth_sock = nil
|
|
52
|
-
system_ssh_auth_sock = File.expand_path(ENV['SSH_AUTH_SOCK']) if
|
|
66
|
+
system_ssh_auth_sock = File.expand_path(ENV['SSH_AUTH_SOCK']) if ssh_agent_exist?
|
|
53
67
|
|
|
54
68
|
if force_run_agent
|
|
55
69
|
run_ssh_agent.tap { |ssh_auth_sock| ENV['SSH_AUTH_SOCK'] = ssh_auth_sock }
|
|
@@ -60,13 +74,17 @@ module Dapp
|
|
|
60
74
|
end
|
|
61
75
|
|
|
62
76
|
def setup_ssh_agent
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
raise Error::Dapp, code: :ssh_key_not_found, data: { path: ssh_key } unless File.exist? ssh_key
|
|
77
|
+
if options[:ssh_key]
|
|
78
|
+
options[:ssh_key].each do |ssh_key|
|
|
79
|
+
raise Error::Dapp, code: :ssh_key_not_found, data: { path: ssh_key } unless File.exist? ssh_key
|
|
67
80
|
|
|
68
|
-
|
|
69
|
-
|
|
81
|
+
File.chmod 0o600, ssh_key
|
|
82
|
+
add_ssh_key ssh_key
|
|
83
|
+
end
|
|
84
|
+
elsif (not ssh_agent_exist?) and default_ssh_keys.any?
|
|
85
|
+
default_ssh_keys.each do |ssh_key|
|
|
86
|
+
add_ssh_key ssh_key
|
|
87
|
+
end
|
|
70
88
|
end
|
|
71
89
|
end
|
|
72
90
|
end # SshAgent
|
data/lib/dapp/dapp.rb
CHANGED
|
@@ -4,6 +4,15 @@ module Dapp
|
|
|
4
4
|
include GitArtifact
|
|
5
5
|
include Dappfile
|
|
6
6
|
include Chef
|
|
7
|
+
include DappConfig
|
|
8
|
+
include OptionTags
|
|
9
|
+
include Slug
|
|
10
|
+
|
|
11
|
+
include Command::Common
|
|
12
|
+
include Command::Slug
|
|
13
|
+
include Command::Sample::Common
|
|
14
|
+
include Command::Sample::List
|
|
15
|
+
include Command::Sample::Create
|
|
7
16
|
|
|
8
17
|
include Logging::Base
|
|
9
18
|
include Logging::Process
|
|
@@ -11,78 +20,127 @@ module Dapp
|
|
|
11
20
|
include Logging::Paint
|
|
12
21
|
|
|
13
22
|
include SshAgent
|
|
23
|
+
include Sentry
|
|
24
|
+
include Ruby2Go
|
|
25
|
+
|
|
14
26
|
include Helper::Sha256
|
|
27
|
+
extend Helper::Trivia
|
|
15
28
|
include Helper::Trivia
|
|
29
|
+
include Helper::Tar
|
|
30
|
+
include Helper::Url
|
|
16
31
|
|
|
32
|
+
include Deps::Common
|
|
33
|
+
include Deps::Toolchain
|
|
17
34
|
include Deps::Gitartifact
|
|
18
35
|
include Deps::Base
|
|
19
36
|
|
|
20
37
|
include Shellout::Base
|
|
21
38
|
|
|
22
|
-
|
|
23
|
-
attr_reader :dimgs_patterns
|
|
39
|
+
GCR_REGISTRIES = %w(asia.gcr.io eu.gcr.io gcr.io marketplace.gcr.io staging-k8s.gcr.io us.gcr.io)
|
|
24
40
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
41
|
+
attr_reader :options
|
|
42
|
+
|
|
43
|
+
def get_ruby2go_state_hash
|
|
44
|
+
{
|
|
45
|
+
"Name" => name.to_s,
|
|
46
|
+
"WorkDir" => work_dir.to_s,
|
|
47
|
+
}
|
|
48
|
+
end
|
|
29
49
|
|
|
30
|
-
|
|
50
|
+
def initialize(options: {})
|
|
51
|
+
self.class.options.merge!(options)
|
|
31
52
|
Logging::I18n.initialize
|
|
53
|
+
validate_config_options!
|
|
54
|
+
Logging::Paint.initialize(option_color)
|
|
55
|
+
|
|
56
|
+
@_call_before_terminate = []
|
|
57
|
+
@_call_after_before_terminate = []
|
|
58
|
+
|
|
59
|
+
ruby2go_init
|
|
60
|
+
|
|
61
|
+
setup_ssh_agent
|
|
62
|
+
try_host_docker_login unless !!options[:ignore_try_host_docker_login]
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def options
|
|
66
|
+
self.class.options
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def settings
|
|
70
|
+
@settings ||= begin
|
|
71
|
+
settings_path = File.join(self.class.home_dir, "settings.toml")
|
|
72
|
+
|
|
73
|
+
if File.exists? settings_path
|
|
74
|
+
TomlRB.load_file(settings_path)
|
|
75
|
+
else
|
|
76
|
+
{}
|
|
77
|
+
end
|
|
78
|
+
end
|
|
32
79
|
end
|
|
33
80
|
|
|
34
81
|
def name
|
|
35
82
|
@name ||= begin
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
83
|
+
n = begin
|
|
84
|
+
if (name = options[:name])
|
|
85
|
+
name
|
|
86
|
+
elsif git_own_repo_exist?
|
|
87
|
+
if git_url
|
|
88
|
+
repo_name = git_url.split('/').last
|
|
89
|
+
repo_name = repo_name[/.*(?=\.git)/] if repo_name.end_with? '.git'
|
|
90
|
+
repo_name
|
|
91
|
+
else
|
|
92
|
+
File.basename(File.dirname(git_own_repo.path)).to_s
|
|
93
|
+
end
|
|
94
|
+
else
|
|
95
|
+
path.basename.to_s
|
|
96
|
+
end
|
|
44
97
|
end
|
|
98
|
+
consistent_uniq_slugify(n)
|
|
45
99
|
end
|
|
46
100
|
end
|
|
47
101
|
|
|
48
102
|
def git_url
|
|
49
|
-
return unless
|
|
50
|
-
|
|
103
|
+
return unless git_own_repo_exist?
|
|
104
|
+
git_own_repo.remote_origin_url
|
|
51
105
|
end
|
|
52
106
|
|
|
53
|
-
def
|
|
54
|
-
|
|
55
|
-
IniFile.load(File.join(git_path, 'config')) if git_path
|
|
56
|
-
end
|
|
107
|
+
def git_own_repo_exist?
|
|
108
|
+
!git_own_repo.nil?
|
|
57
109
|
end
|
|
58
110
|
|
|
59
|
-
def
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
111
|
+
def git_own_repo
|
|
112
|
+
@git_own_repo ||= Dimg::GitRepo::Own.new(self)
|
|
113
|
+
rescue Dimg::Error::Rugged => e
|
|
114
|
+
raise unless e.net_status[:code] == :local_git_repository_does_not_exist
|
|
115
|
+
nil
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
def work_dir
|
|
119
|
+
File.expand_path(options[:dir] || Dir.pwd)
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
def path(*path)
|
|
123
|
+
@path ||= make_path(work_dir)
|
|
124
|
+
make_path(@path, *path)
|
|
63
125
|
end
|
|
64
126
|
|
|
65
|
-
def
|
|
66
|
-
|
|
127
|
+
def tmp_base_dir
|
|
128
|
+
self.class.tmp_base_dir
|
|
67
129
|
end
|
|
68
130
|
|
|
69
|
-
def
|
|
70
|
-
@
|
|
71
|
-
if
|
|
72
|
-
Pathname.new(
|
|
131
|
+
def build_dir
|
|
132
|
+
@build_dir ||= begin
|
|
133
|
+
if option_build_dir
|
|
134
|
+
Pathname.new(option_build_dir)
|
|
73
135
|
else
|
|
74
|
-
|
|
136
|
+
dir = File.join(self.class.home_dir, "builds", self.name)
|
|
137
|
+
Pathname.new(dir)
|
|
75
138
|
end.expand_path.tap(&:mkpath)
|
|
76
139
|
end
|
|
77
140
|
end
|
|
78
141
|
|
|
79
|
-
def
|
|
80
|
-
|
|
81
|
-
build_path_relpath = Pathname.new(build_path).subpath_of(File.dirname(git_path))
|
|
82
|
-
exclude_paths << build_path_relpath.to_s if build_path_relpath
|
|
83
|
-
|
|
84
|
-
yield exclude_paths if block_given?
|
|
85
|
-
end
|
|
142
|
+
def build_path(*path)
|
|
143
|
+
make_path(build_dir, *path)
|
|
86
144
|
end
|
|
87
145
|
|
|
88
146
|
def stage_cache
|
|
@@ -93,8 +151,101 @@ module Dapp
|
|
|
93
151
|
name
|
|
94
152
|
end
|
|
95
153
|
|
|
96
|
-
def
|
|
97
|
-
|
|
154
|
+
def terminate
|
|
155
|
+
@_call_before_terminate.each {|on_terminate| on_terminate.call(self)}
|
|
156
|
+
@_call_after_before_terminate.each {|on_terminate| on_terminate.call(self)}
|
|
157
|
+
FileUtils.rmtree(host_docker_tmp_config_dir)
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
def host_docker
|
|
161
|
+
self.class.host_docker
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
def host_docker_tmp_config_dir
|
|
165
|
+
self.class.host_docker_tmp_config_dir
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
def try_host_docker_login
|
|
169
|
+
return unless option_repo
|
|
170
|
+
validate_repo_name!(option_repo)
|
|
171
|
+
host_docker_login(option_repo)
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
def host_docker_login(repo)
|
|
175
|
+
return unless self.class.options_with_docker_credentials?
|
|
176
|
+
|
|
177
|
+
username, password = self.class.docker_credentials
|
|
178
|
+
::Dapp::Dimg::Image::Stage.ruby2go_command(self, command: :login, options: { username: username, password: password, repository: repo })
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
class << self
|
|
182
|
+
def home_dir
|
|
183
|
+
ENV["DAPP_HOME"] || File.join(Dir.home, ".dapp")
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
def options
|
|
187
|
+
@options ||= {}
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
def host_docker
|
|
191
|
+
@host_docker ||= begin
|
|
192
|
+
min_docker_minor_version = Gem::Version.new('1.10')
|
|
193
|
+
unless host_docker_minor_version > min_docker_minor_version
|
|
194
|
+
raise Error::Dapp, code: :docker_version, data: { min_version: min_docker_minor_version.to_s,
|
|
195
|
+
version: host_docker_minor_version.to_s }
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
[].tap do |cmd|
|
|
199
|
+
cmd << host_docker_bin
|
|
200
|
+
cmd << "--config #{host_docker_config_dir}"
|
|
201
|
+
end.join(' ')
|
|
202
|
+
end
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
def host_docker_bin
|
|
206
|
+
raise Error::Dapp, code: :docker_not_found if (res = shellout('which docker')).exitstatus.nonzero?
|
|
207
|
+
res.stdout.strip
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
def host_docker_minor_version
|
|
211
|
+
Gem::Version.new(shellout!("#{host_docker_bin} --version").stdout.strip[/\d+\.\d+/])
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
def host_docker_config_dir
|
|
215
|
+
if options_with_docker_credentials? && !options[:repo].nil?
|
|
216
|
+
host_docker_tmp_config_dir
|
|
217
|
+
elsif ENV.key?('DAPP_DOCKER_CONFIG')
|
|
218
|
+
ENV['DAPP_DOCKER_CONFIG']
|
|
219
|
+
else
|
|
220
|
+
File.join(Dir.home, '.docker')
|
|
221
|
+
end
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
def options_with_docker_credentials?
|
|
225
|
+
!docker_credentials.nil?
|
|
226
|
+
end
|
|
227
|
+
|
|
228
|
+
def docker_credentials
|
|
229
|
+
if options[:registry_username] && options[:registry_password]
|
|
230
|
+
[options[:registry_username], options[:registry_password]]
|
|
231
|
+
elsif ENV.key?('DAPP_DOCKER_CONFIG')
|
|
232
|
+
elsif !gcr_registry? && !ENV.key?('DAPP_IGNORE_CI_DOCKER_AUTOLOGIN') && ENV.key?('CI_REGISTRY') && ENV.key?('CI_JOB_TOKEN')
|
|
233
|
+
['gitlab-ci-token', ENV['CI_JOB_TOKEN']]
|
|
234
|
+
end
|
|
235
|
+
end
|
|
236
|
+
|
|
237
|
+
def gcr_registry?
|
|
238
|
+
return false if options[:repo].nil?
|
|
239
|
+
GCR_REGISTRIES.any? { |registry| options[:repo].to_s.start_with?(registry) }
|
|
240
|
+
end
|
|
241
|
+
|
|
242
|
+
def host_docker_tmp_config_dir
|
|
243
|
+
@host_docker_tmp_config_dir ||= Dir.mktmpdir('dapp-', tmp_base_dir)
|
|
244
|
+
end
|
|
245
|
+
|
|
246
|
+
def tmp_base_dir
|
|
247
|
+
File.expand_path(options[:tmp_dir_prefix] || '/tmp')
|
|
248
|
+
end
|
|
98
249
|
end
|
|
99
250
|
end # Dapp
|
|
100
251
|
end # Dapp
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
module Dapp::Deployment; end
|