odysseus-cli 0.10.0 → 0.10.1
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/CHANGELOG.md +14 -0
- data/lib/odysseus/cli/ui.rb +13 -2
- data/lib/odysseus/cli/version.rb +1 -1
- 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: c0eb25b1702c32b92d66cde114b8b031fa31b551c52e74b4cfb99d6bfe07c463
|
|
4
|
+
data.tar.gz: fc97e09aea1e18234e89a4b439a06180ae11793265d2df5e3f075eed5b031d32
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: a8054d607b4d1bd6878c9e3f3f880c2c35a70cb8ee9df9c16db05c4f310d1d21dadff4410504e7f1e31fb6cfdac670cdc688db27ee7694d356b99a0a0c3066ad
|
|
7
|
+
data.tar.gz: 3693ec2a1e91cd7b7f0a4c71b0dfe265fe9f69cebb0c9fa14fbd366b7a8472e9cda7b0ef03dfa85590351490712730602d4dbf84568361b9fe5df357dfb8f15a
|
data/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,20 @@ gem artifacts, so they are summaries rather than contemporaneous notes.
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.10.1] - 2026-09-18
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
|
|
14
|
+
- `deploy --build` no longer dies with `incompatible character encodings:
|
|
15
|
+
UTF-8 and BINARY` after the build has already succeeded. The streamed-output
|
|
16
|
+
reader accumulated chunks from `IO#read_nonblock`, which returns ASCII-8BIT,
|
|
17
|
+
into a UTF-8 string literal -- which silently takes the chunk's encoding on
|
|
18
|
+
the first append. Any byte above 0x7F in the build or push output then
|
|
19
|
+
reached the spinner's UTF-8 format string as binary and raised there. Bytes
|
|
20
|
+
are now accumulated as binary and decoded once a line is complete, so a read
|
|
21
|
+
boundary falling inside a multi-byte character cannot mangle it either.
|
|
22
|
+
Reported from a real deploy that failed while pushing to a host.
|
|
23
|
+
|
|
10
24
|
## [0.10.0] - 2026-08-28
|
|
11
25
|
|
|
12
26
|
### Changed
|
data/lib/odysseus/cli/ui.rb
CHANGED
|
@@ -203,7 +203,13 @@ module Odysseus
|
|
|
203
203
|
end
|
|
204
204
|
|
|
205
205
|
frame_idx = 0
|
|
206
|
-
|
|
206
|
+
# Binary on purpose. IO#read_nonblock below returns ASCII-8BIT, and a
|
|
207
|
+
# UTF-8 literal here would silently take that encoding on the first
|
|
208
|
+
# append -- then any byte above 0x7F reaching the spinner's UTF-8
|
|
209
|
+
# format string raises Encoding::CompatibilityError, after the build it
|
|
210
|
+
# was reporting on has already succeeded. Accumulate bytes; decode a
|
|
211
|
+
# line once it is complete.
|
|
212
|
+
buf = String.new(encoding: Encoding::BINARY)
|
|
207
213
|
|
|
208
214
|
loop do
|
|
209
215
|
# Non-blocking read from pipe
|
|
@@ -218,7 +224,12 @@ module Odysseus
|
|
|
218
224
|
|
|
219
225
|
# Process complete lines
|
|
220
226
|
while (nl = buf.index("\n"))
|
|
221
|
-
|
|
227
|
+
# Decode here rather than per chunk: a read boundary can fall
|
|
228
|
+
# inside a multi-byte character, and scrubbing a half-read chunk
|
|
229
|
+
# would destroy it. By the time a newline is in the buffer, every
|
|
230
|
+
# byte of that line has arrived, so scrub can only be removing
|
|
231
|
+
# genuinely invalid sequences.
|
|
232
|
+
line = buf.slice!(0..nl).force_encoding(Encoding::UTF_8).scrub('').strip
|
|
222
233
|
next if line.empty?
|
|
223
234
|
|
|
224
235
|
line = clean_line(line)
|
data/lib/odysseus/cli/version.rb
CHANGED