miniexec 0.1.1 → 0.2.0

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