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 +4 -4
- data/Gemfile +1 -1
- data/Gemfile.lock +10 -8
- data/LICENSE.txt +1 -1
- data/LICENSES/MIT.txt +1 -1
- data/README.md +18 -2
- data/REUSE.toml +2 -2
- data/Rakefile +1 -1
- data/donce.gemspec +2 -2
- data/lib/donce.rb +13 -10
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: '03161908e407496425db2581fce2d802d834fce0e06cc97daf13de1c2edecc21'
|
|
4
|
+
data.tar.gz: 7339a08b6820ec2aa9e0bda4067e3fd8947b387509ea96f9ac4e9971399ac24e
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 81203a7306ab4edd80ac3ce16a27bcacb8505bb73bd99c3d0ad629193cdd98222b7e954382d671a76e9a3f8f2a461914f5a18c2f7845955dc31242b3b8796c09
|
|
7
|
+
data.tar.gz: f4978002f8c14db6783e5480f0f50e064e6c6883c6c1de61d4728022fa522bdc98be1cba1449ad88ec2db8eb08c2a2f65f18691eef9a673f71ffbaf8157e322f
|
data/Gemfile
CHANGED
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.
|
|
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.
|
|
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.
|
|
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.
|
|
41
|
+
parser (3.3.10.1)
|
|
40
42
|
ast (~> 2.4.1)
|
|
41
43
|
racc
|
|
42
|
-
prism (1.
|
|
44
|
+
prism (1.8.0)
|
|
43
45
|
psych (5.3.1)
|
|
44
46
|
date
|
|
45
47
|
stringio
|
|
46
|
-
qbash (0.
|
|
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
|
|
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.
|
|
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
data/LICENSES/MIT.txt
CHANGED
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`,
|
|
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-
|
|
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-
|
|
34
|
+
SPDX-FileCopyrightText = "Copyright (c) 2024-2026 Yegor Bugayenko"
|
|
35
35
|
SPDX-License-Identifier = "MIT"
|
data/Rakefile
CHANGED
data/donce.gemspec
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
# SPDX-FileCopyrightText: Copyright (c) 2024-
|
|
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.
|
|
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-
|
|
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-
|
|
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.
|
|
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
|
|
170
|
+
qbash("#{docker} rmi #{img}", stdout: log) unless image
|
|
168
171
|
end
|
|
169
172
|
end
|
|
170
173
|
end
|