@@ -7,6 +7,7 @@ def initialize options
77 end
88
99 def execute
10+ mktmpdirs
1011 if @options [ :release ]
1112 print_step 'Deploying a past release'
1213 else
@@ -22,9 +23,21 @@ def execute
2223 configure
2324 apply
2425 rollout
26+ ensure
27+ rmtmpdirs
2528 end
2629
2730 private
31+
32+ def mktmpdirs
33+ @repo_tmpdir = Dir . mktmpdir
34+ @kubernetes_tmpdir = Dir . mktmpdir
35+ end
36+
37+ def rmtmpdirs
38+ FileUtils . remove_entry @repo_tmpdir
39+ FileUtils . remove_entry @kubernetes_tmpdir
40+ end
2841
2942 def print_step desc
3043 puts
@@ -33,17 +46,14 @@ def print_step desc
3346
3447 def checkout
3548 print_step 'Cloning Git repository'
36- path = '.cuber/repo'
37- FileUtils . mkdir_p path
38- FileUtils . rm_rf path , secure : true
3949 cmd = [ 'git' , 'clone' ]
4050 cmd += [ '--branch' , @options [ :repo ] [ :branch ] ] if @options [ :repo ] [ :branch ]
41- cmd += [ '--depth' , '1' , @options [ :repo ] [ :url ] , path ]
51+ cmd += [ '--depth' , '1' , @options [ :repo ] [ :url ] , @repo_tmpdir ]
4252 system ( *cmd ) || abort ( 'Cuber: git clone failed' )
4353 end
4454
4555 def commit_hash
46- out , status = Open3 . capture2 'git' , 'rev-parse' , '--short' , 'HEAD' , chdir : '.cuber/repo'
56+ out , status = Open3 . capture2 'git' , 'rev-parse' , '--short' , 'HEAD' , chdir : @repo_tmpdir
4757 abort 'Cuber: cannot get commit hash' unless status . success?
4858 out . strip
4959 end
@@ -57,7 +67,7 @@ def pack
5767 tag = "#{ @options [ :image ] } :#{ @options [ :release ] } "
5868 cmd = [ 'pack' , 'build' , tag , '--builder' , @options [ :buildpacks ] , '--publish' ]
5969 cmd += [ '--pull-policy' , 'always' , '--clear-cache' ] if @options [ :cache ] == false
60- system ( *cmd , chdir : '.cuber/repo' ) || abort ( 'Cuber: pack build failed' )
70+ system ( *cmd , chdir : @repo_tmpdir ) || abort ( 'Cuber: pack build failed' )
6171 end
6272
6373 def build
@@ -67,7 +77,7 @@ def build
6777 cmd = [ 'docker' , 'build' ]
6878 cmd += [ '--pull' , '--no-cache' ] if @options [ :cache ] == false
6979 cmd += [ '--platform' , 'linux/amd64' , '--progress' , 'plain' , '-f' , dockerfile , '-t' , tag , '.' ]
70- system ( *cmd , chdir : '.cuber/repo' ) || abort ( 'Cuber: docker build failed' )
80+ system ( *cmd , chdir : @repo_tmpdir ) || abort ( 'Cuber: docker build failed' )
7181 end
7282
7383 def push
@@ -80,13 +90,13 @@ def configure
8090 print_step 'Generating Kubernetes configuration'
8191 @options [ :instance ] = "#{ @options [ :app ] } -#{ Time . now . utc . iso8601 . delete ( '^0-9' ) } "
8292 @options [ :dockerconfigjson ] = Base64 . strict_encode64 File . read File . expand_path ( @options [ :dockerconfig ] || '~/.docker/config.json' )
83- render 'deployment.yml' , '.cuber/kubernetes/ deployment.yml'
93+ render 'deployment.yml' , File . join ( @kubernetes_tmpdir , ' deployment.yml')
8494 end
8595
8696 def apply
8797 print_step 'Applying configuration to Kubernetes cluster'
8898 kubectl 'apply' ,
89- '-f' , '.cuber/kubernetes/ deployment.yml',
99+ '-f' , File . join ( @kubernetes_tmpdir , ' deployment.yml') ,
90100 '--prune' , '-l' , "app.kubernetes.io/name=#{ @options [ :app ] } ,app.kubernetes.io/managed-by=cuber"
91101 end
92102
0 commit comments