miniexec 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/miniexec.rb +32 -5
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 23d8470c6289646978702f3c917e7a8d6e98df6aef7b2a6d8c810eecbaf9e797
4
- data.tar.gz: bb5725ff2ff691bce7c0a2aa55860889efcd8300bb39add2347415ef4dff516c
3
+ metadata.gz: 6097e4b1de5d81d2e75d5817d9fd6a722ad40c9add96a1ff817cbbe64614f5e2
4
+ data.tar.gz: 9d639bc96b249926a411662b4a54027ebbb8381bcda243b56261eb5ed7530077
5
5
  SHA512:
6
- metadata.gz: cc22648aa2042168eab09e192e89ad140ae188f20da8250e5817da3218019a580d5b7140320720bd212fbc44d2323c6f41aa1e722d7eb8973be877b6a5727c10
7
- data.tar.gz: 6a4365689aa47b7be9272d8f6297c939159df7de03862965aa39e2b10c6fa07860d951b208c10b938cfa9b6c2d9b7a5b0660ff46859e732e565cfaa179b9cfea
6
+ metadata.gz: 042ac22614eedb274be50d0cbac5f13e1e8bc05bf8421559206dcf433365b205b892dab091aff64dd07ec7da2e782a9a0f4e63ecc0341424032d56a8070755a0
7
+ data.tar.gz: b62dd5d5dddd6e0abb6057052b25cdcef90f9167c068e7821de9f928a215e06b57593fdced5c3b92f686254afe95cf37fb320cec3aa88531b34e02988840937e
data/lib/miniexec.rb CHANGED
@@ -25,12 +25,14 @@ module MiniExec
25
25
  end
26
26
 
27
27
  attr_accessor :script
28
+ attr_reader :runlog
28
29
 
29
30
  def initialize(job,
30
31
  project_path: self.class.project_path,
31
32
  docker_url: nil,
32
33
  binds: [],
33
- env: {})
34
+ env: {},
35
+ mount_cwd: true)
34
36
  @job_name = job
35
37
  @project_path = project_path
36
38
  @workflow = YAML.load(File.read("#{@project_path}/#{MiniExec.workflow_file}"))
@@ -38,7 +40,9 @@ module MiniExec
38
40
  @job['name'] = job
39
41
  @default_image = @workflow['image'] || 'debian:buster-slim'
40
42
  @image = set_job_image
43
+ @entrypoint = set_job_entrypoint
41
44
  @binds = binds
45
+ @mount_cwd = mount_cwd
42
46
  @env = {}
43
47
  [
44
48
  env,
@@ -49,6 +53,7 @@ module MiniExec
49
53
  @env.merge!(var_set.transform_values { |v| Util.expand_var(v.to_s, @env) }) if var_set
50
54
  end
51
55
  @script = compile_script
56
+ @runlog = []
52
57
  configure_logger
53
58
  Docker.options[:read_timeout] = 6000
54
59
  Docker.url = docker_url if docker_url
@@ -59,26 +64,48 @@ module MiniExec
59
64
  @logger.info "Fetching image #{@image}"
60
65
  Docker::Image.create(fromImage: @image)
61
66
  @logger.info 'Image fetched'
67
+
68
+ config = Docker::Image.get(@image).info['Config']
69
+ working_dir = if config['WorkingDir'].empty?
70
+ '/gitlab'
71
+ else
72
+ config['WorkingDir']
73
+ end
74
+ binds = @binds
75
+ binds.push "#{ENV['PWD']}:#{working_dir}" if @mount_cwd
62
76
  Dir.chdir(@project_path) do
63
77
  @logger.info 'Creating container'
64
78
  container = Docker::Container.create(
65
- Cmd: ['/bin/bash', script_path],
66
79
  Image: @image,
80
+ Cmd: ['/usr/bin/env', 'bash', script_path],
81
+ WorkingDir: working_dir,
82
+ Entrypoint: @entrypoint,
67
83
  Volumes: @binds.map { |b| { b => { path_parent: 'rw' } } }.inject(:merge),
68
84
  Env: @env.map { |k, v| "#{k}=#{v}" }
69
85
  )
70
86
  container.store_file(script_path, @script)
71
87
  container.start({ Binds: [@binds] })
72
- container.tap(&:start).attach { |_, chunk| puts chunk }
88
+ container.tap(&:start).attach { |_, chunk| puts chunk; @runlog.push chunk}
89
+ @logger.info 'Job finished. Removing container.'
90
+ # After running, we want to remove the container.
91
+ container.remove
92
+ @logger.info 'Container removed.'
73
93
  end
74
94
  end
75
95
 
76
96
  private
77
97
 
78
98
  def set_job_image
79
- return @job['image'] if @job['image']
99
+ if @job['image']
100
+ image = @job['image'] if @job['image'].instance_of?(String)
101
+ image = @job['image']['name'] if @job['image'].instance_of?(Hash)
102
+ end
103
+
104
+ image || @default_image
105
+ end
80
106
 
81
- @default_image
107
+ def set_job_entrypoint
108
+ @job['image']['entrypoint'] if @job['image'].instance_of?(Hash)
82
109
  end
83
110
 
84
111
  # Set gitlab's predefined env vars as per
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: miniexec
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Martin Pugh
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-05-04 00:00:00.000000000 Z
11
+ date: 2021-05-07 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: A minimal interpretor/executor for .gitlab-ci.yml
14
14
  email: pugh@s3kr.it