Build, test and release on the club Gitea #2

Merged
erik merged 5 commits from claude/forgejo-ci into main 2026-09-26 14:05:08 +00:00
Showing only changes of commit 32878d825e - Show all commits

View file

@ -17,6 +17,7 @@ internal sealed class TestSocketServer : IDisposable
private readonly CancellationTokenSource _cts = new(); private readonly CancellationTokenSource _cts = new();
private readonly Task _accept; private readonly Task _accept;
private WebSocket? _current; private WebSocket? _current;
private HttpListenerContext? _currentContext;
public TestSocketServer() public TestSocketServer()
{ {
@ -53,7 +54,12 @@ internal sealed class TestSocketServer : IDisposable
{ {
WebSocket socket = await WaitForSocketAsync(); WebSocket socket = await WaitForSocketAsync();
socket.Abort(); socket.Abort();
// Aborting the socket alone leaves the TCP connection open on some
// platforms' listeners, so the client never sees the drop; ending the
// response closes the connection everywhere, as a real server's drop does.
_currentContext?.Response.Abort();
_current = null; _current = null;
_currentContext = null;
} }
public string NextFrame(int timeoutMs = 5000) public string NextFrame(int timeoutMs = 5000)
@ -111,6 +117,7 @@ internal sealed class TestSocketServer : IDisposable
Secrets.Enqueue(context.Request.Headers["X-Plugin-Secret"]); Secrets.Enqueue(context.Request.Headers["X-Plugin-Secret"]);
HttpListenerWebSocketContext ws = await context.AcceptWebSocketAsync(null); HttpListenerWebSocketContext ws = await context.AcceptWebSocketAsync(null);
_current = ws.WebSocket; _current = ws.WebSocket;
_currentContext = context;
_ = Task.Run(() => ReadLoopAsync(ws.WebSocket)); _ = Task.Run(() => ReadLoopAsync(ws.WebSocket));
} }
} }