donce 0.3.0 → 0.5.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 441d95b36d07ea59d9d3bb2adac79fda0391c241ecb7d6c100aea5f62552dcba
4
- data.tar.gz: 7cc6a4122c5eebe172e65b8d71cd262f11ac2325786567a87ee5cbf50e9a38c5
3
+ metadata.gz: '03161908e407496425db2581fce2d802d834fce0e06cc97daf13de1c2edecc21'
4
+ data.tar.gz: 7339a08b6820ec2aa9e0bda4067e3fd8947b387509ea96f9ac4e9971399ac24e
5
5
  SHA512:
6
- metadata.gz: 80e61fec77d8d68d588bd5600150648eb77a5e35513137badcd0dcb6b45c0f2f7968ddc13b345407ebe6c32d9bc557769ac5dce61ea165661a24bd366d9c44d9
7
- data.tar.gz: 4dd1618e4247936efc4dc6d15ae3397c655aedafa74555a7353df6a241a2ae0fc4292e676dc7889161c7ee6a4fc07cfc33921f1905ea3e3cd6b740f17b2df3a8
6
+ metadata.gz: 81203a7306ab4edd80ac3ce16a27bcacb8505bb73bd99c3d0ad629193cdd98222b7e954382d671a76e9a3f8f2a461914f5a18c2f7845955dc31242b3b8796c09
7
+ data.tar.gz: f4978002f8c14db6783e5480f0f50e064e6c6883c6c1de61d4728022fa522bdc98be1cba1449ad88ec2db8eb08c2a2f65f18691eef9a673f71ffbaf8157e322f
data/Gemfile CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
3
+ # SPDX-FileCopyrightText: Copyright (c) 2024-2026 Yegor Bugayenko
4
4
  # SPDX-License-Identifier: MIT
5
5
 
6
6
  source 'https://rubygems.org'
data/Gemfile.lock CHANGED
@@ -15,15 +15,17 @@ GEM
15
15
  builder (3.3.0)
16
16
  date (3.5.1)
17
17
  docile (1.4.1)
18
- elapsed (0.2.1)
18
+ elapsed (0.2.2)
19
19
  loog (~> 0.6)
20
20
  tago (~> 0.1)
21
+ ellipsized (0.3.0)
21
22
  erb (6.0.1)
22
23
  json (2.18.0)
23
24
  language_server-protocol (3.17.0.5)
24
25
  lint_roller (1.1.0)
25
26
  logger (1.7.0)
26
- loog (0.6.1)
27
+ loog (0.7.2)
28
+ ellipsized
27
29
  logger (~> 1.0)
28
30
  minitest (6.0.1)
29
31
  prism (~> 1.5)
@@ -32,18 +34,18 @@ GEM
32
34
  builder
33
35
  minitest (>= 5.0)
34
36
  ruby-progressbar
35
- minitest-retry (0.3.0)
37
+ minitest-retry (0.3.1)
36
38
  minitest (>= 5.0)
37
39
  os (1.1.4)
38
40
  parallel (1.27.0)
39
- parser (3.3.10.0)
41
+ parser (3.3.10.1)
40
42
  ast (~> 2.4.1)
41
43
  racc
42
- prism (1.7.0)
44
+ prism (1.8.0)
43
45
  psych (5.3.1)
44
46
  date
45
47
  stringio
46
- qbash (0.4.8)
48
+ qbash (0.7.1)
47
49
  backtrace (> 0)
48
50
  elapsed (> 0)
49
51
  loog (> 0)
@@ -51,7 +53,7 @@ GEM
51
53
  racc (1.8.1)
52
54
  rainbow (3.1.1)
53
55
  rake (13.3.1)
54
- rdoc (7.0.3)
56
+ rdoc (7.1.0)
55
57
  erb
56
58
  psych (>= 4.0.0)
57
59
  tsort
@@ -93,7 +95,7 @@ GEM
93
95
  simplecov-html (0.13.2)
94
96
  simplecov_json_formatter (0.1.4)
95
97
  stringio (3.2.0)
96
- tago (0.6.0)
98
+ tago (0.7.0)
97
99
  tsort (0.2.0)
98
100
  unicode-display_width (3.2.0)
99
101
  unicode-emoji (~> 4.1)
data/LICENSE.txt CHANGED
@@ -1,6 +1,6 @@
1
1
  (The MIT License)
2
2
 
3
- Copyright (c) 2024-2025 Yegor Bugayenko
3
+ Copyright (c) 2024-2026 Yegor Bugayenko
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the 'Software'), to deal
data/LICENSES/MIT.txt CHANGED
@@ -1,6 +1,6 @@
1
1
  (The MIT License)
2
2
 
3
- Copyright (c) 2024-2025 Yegor Bugayenko
3
+ Copyright (c) 2024-2026 Yegor Bugayenko
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the 'Software'), to deal
data/README.md CHANGED
@@ -38,8 +38,24 @@ stdout = donce(image: 'ubuntu', command: 'sleep 9999') do |id|
38
38
  end
39
39
  ```
40
40
 
41
- If you set `DONCE_SUDO` environment variable to `true`, `docker` will
42
- be executed via `sudo`.
41
+ If you set `DONCE_SUDO` environment variable to `true`,
42
+ `docker` will be executed via `sudo`.
43
+
44
+ Host group/user IDs are passed to the build, as `GID` and `UID` args.
45
+ You can use them, when you copy resources into the image, for example:
46
+
47
+ ```
48
+ FROM ubuntu
49
+ ARG UID
50
+ ARG GID
51
+ RUN groupadd -g ${GID} foo || true
52
+ RUN useradd -m -u ${UID} -g ${GID} foo
53
+ USER foo',
54
+ WORKDIR /foo
55
+ COPY --chown=${UID}:${GID} bar.txt .
56
+ ```
57
+
58
+ The `bar.txt` file is not ready to be modified inside the container.
43
59
 
44
60
  ## Parameters
45
61
 
data/REUSE.toml CHANGED
@@ -1,4 +1,4 @@
1
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
1
+ # SPDX-FileCopyrightText: Copyright (c) 2024-2026 Yegor Bugayenko
2
2
  # SPDX-License-Identifier: MIT
3
3
 
4
4
  version = 1
@@ -31,5 +31,5 @@ path = [
31
31
  "renovate.json",
32
32
  ]
33
33
  precedence = "override"
34
- SPDX-FileCopyrightText = "Copyright (c) 2024-2025 Yegor Bugayenko"
34
+ SPDX-FileCopyrightText = "Copyright (c) 2024-2026 Yegor Bugayenko"
35
35
  SPDX-License-Identifier = "MIT"
data/Rakefile CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
3
+ # SPDX-FileCopyrightText: Copyright (c) 2024-2026 Yegor Bugayenko
4
4
  # SPDX-License-Identifier: MIT
5
5
 
6
6
  require 'rubygems'
data/donce.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
3
+ # SPDX-FileCopyrightText: Copyright (c) 2024-2026 Yegor Bugayenko
4
4
  # SPDX-License-Identifier: MIT
5
5
 
6
6
  require 'English'
@@ -9,7 +9,7 @@ Gem::Specification.new do |s|
9
9
  s.required_rubygems_version = Gem::Requirement.new('>= 0') if s.respond_to? :required_rubygems_version=
10
10
  s.required_ruby_version = '>=3.0'
11
11
  s.name = 'donce'
12
- s.version = '0.3.0'
12
+ s.version = '0.5.0'
13
13
  s.license = 'MIT'
14
14
  s.summary = 'Builds and starts temporary Docker containers'
15
15
  s.description =
data/lib/donce.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
3
+ # SPDX-FileCopyrightText: Copyright (c) 2024-2026 Yegor Bugayenko
4
4
  # SPDX-License-Identifier: MIT
5
5
 
6
6
  require 'logger'
@@ -42,7 +42,7 @@ require 'tmpdir'
42
42
  # variable to any value.
43
43
  #
44
44
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
45
- # Copyright:: Copyright (c) 2024-2025 Yegor Bugayenko
45
+ # Copyright:: Copyright (c) 2024-2026 Yegor Bugayenko
46
46
  # License:: MIT
47
47
  module Kernel
48
48
  # The name of the localhost inside Docker container.
@@ -81,7 +81,8 @@ module Kernel
81
81
  raise 'The "volumes" must be a Hash' unless volumes.is_a?(Hash)
82
82
  raise 'The "log" is nil' if log.nil?
83
83
  raise 'The "args" is nil' if args.nil?
84
- raise 'The "args" must be a String' unless args.is_a?(String)
84
+ raise 'The "args" must be a String or Array' unless args.is_a?(String) || args.is_a?(Array)
85
+ args = args.join(' ') if args.is_a?(Array)
85
86
  raise 'The "env" is nil' if env.nil?
86
87
  raise 'The "env" must be a Hash' unless env.is_a?(Hash)
87
88
  raise 'The "command" is nil' if command.nil?
@@ -102,16 +103,18 @@ module Kernel
102
103
  i = "donce-#{SecureRandom.hex(6)}"
103
104
  a = [
104
105
  "--tag #{i}",
105
- build_args.map { |k, v| "--build-arg #{Shellwords.escape("#{k}=#{v}")}" }.join(' ')
106
+ build_args.merge({ GID: Process.gid, UID: Process.uid }).map do |k, v|
107
+ "--build-arg #{Shellwords.escape("#{k}=#{v}")}"
108
+ end.join(' ')
106
109
  ].compact.join(' ')
107
110
  if dockerfile
108
111
  Dir.mktmpdir do |tmp|
109
112
  dockerfile = dockerfile.join("\n") if dockerfile.is_a?(Array)
110
113
  File.write(File.join(tmp, 'Dockerfile'), dockerfile)
111
- qbash("#{docker} build #{a} #{Shellwords.escape(tmp)}", log:)
114
+ qbash("#{docker} build #{a} #{Shellwords.escape(tmp)}", stdout: log)
112
115
  end
113
116
  elsif home
114
- qbash("#{docker} build #{a} #{Shellwords.escape(home)}", log:)
117
+ qbash("#{docker} build #{a} #{Shellwords.escape(home)}", stdout: log)
115
118
  else
116
119
  raise 'Either "dockerfile" or "home" must be provided'
117
120
  end
@@ -139,7 +142,7 @@ module Kernel
139
142
  Timeout.timeout(timeout) do
140
143
  qbash(
141
144
  cmd,
142
- log:,
145
+ stdout: log,
143
146
  accept: nil,
144
147
  both: true,
145
148
  env:
@@ -156,15 +159,15 @@ module Kernel
156
159
  logs = qbash(
157
160
  "#{docker} logs #{Shellwords.escape(container)}",
158
161
  level: code.zero? ? Logger::DEBUG : Logger::ERROR,
159
- log:
162
+ stdout: log
160
163
  )
161
164
  stdout = logs if block_given?
162
- qbash("#{docker} rm --force #{Shellwords.escape(container)}", log:)
165
+ qbash("#{docker} rm --force #{Shellwords.escape(container)}", stdout: log)
163
166
  end
164
167
  stdout
165
168
  ensure
166
169
  Timeout.timeout(10) do
167
- qbash("#{docker} rmi #{img}", log:) unless image
170
+ qbash("#{docker} rmi #{img}", stdout: log) unless image
168
171
  end
169
172
  end
170
173
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: donce
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yegor Bugayenko