Skip to content

Commit 519a862

Browse files
committed
enshure full messages are sent to runner
1 parent 896610a commit 519a862

1 file changed

Lines changed: 35 additions & 7 deletions

File tree

actions-runner-worker.py

Lines changed: 35 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,44 @@
1212
wdr, wdw = os.pipe()
1313
rdr, rdw = os.pipe()
1414

15+
def readfull(fd: int, l: int):
16+
b = bytes()
17+
while len(b) < l:
18+
r = os.read(fd, l - len(b))
19+
if len(r) <= 0:
20+
raise RuntimeError("unexpected read len: " + len(r))
21+
b += r
22+
if len(b) != l:
23+
raise RuntimeError("written " + len(b) + "bytes expected " + l)
24+
return b
25+
26+
def writefull(fd: int, buf: bytes):
27+
written: int = 0
28+
while written >= len(buf):
29+
w = os.write(fd, buf[written:])
30+
if w <= 0:
31+
raise RuntimeError("unexpected write result: " + w)
32+
if written != len(buf):
33+
raise RuntimeError("written " + written + "bytes expected " + len)
34+
return written
35+
1536
def redirectio():
1637
while(True):
1738
stdin = sys.stdin.fileno()
18-
messageType = int.from_bytes(os.read(stdin, 4), "big", signed=False)
19-
os.write(rdw, messageType.to_bytes(4, sys.byteorder, signed=False))
20-
messageLength = int.from_bytes(os.read(stdin, 4), "big", signed=False)
21-
message = os.read(stdin, messageLength)
22-
encoded = codecs.decode(message, "utf-8").encode("utf_16")[2:]
23-
os.write(rdw, len(encoded).to_bytes(4, sys.byteorder, signed=False))
24-
os.write(rdw, encoded)
39+
messageType = int.from_bytes(readfull(stdin, 4), "big", signed=False)
40+
writefull(rdw, messageType.to_bytes(4, sys.byteorder, signed=False))
41+
messageLength = int.from_bytes(readfull(stdin, 4), "big", signed=False)
42+
rawmessage = readfull(stdin, messageLength)
43+
message = codecs.decode(rawmessage, "utf-8")
44+
if os.getenv("ACTIONS_RUNNER_WORKER_DEBUG", "0") != "0":
45+
print("Message Received")
46+
print("Type:", messageType)
47+
print("================")
48+
print(message)
49+
print("================")
50+
encoded = message.encode("utf_16")[2:]
51+
writefull(rdw, len(encoded).to_bytes(4, sys.byteorder, signed=False))
52+
writefull(rdw, encoded)
2553

2654
threading.Thread(target=redirectio, daemon=True).start()
2755

0 commit comments

Comments
 (0)