ci: faster, stricter CI (instrumented gate, parallel jobs, test forks) (#1348)

This commit is contained in:
m57 authored and GitHub committed 2026-09-28 00:20:52 +03:00
1 parent 2a41a8a417
commit d81fc39f25
6 files changed
+58 -19

No files matched your search

@@ -415,6 +415,7 @@ object HermesWsClient {
@VisibleForTesting
internal fun probeLivenessOnTransportChange(
timeoutMs: Long = LIVENESS_PROBE_TIMEOUT_MS,
onFailureAction: () -> Unit = {
synchronized(outboundLock) {
if (connected.get()) webSocket?.cancel()
@@ -426,7 +427,7 @@ object HermesWsClient {
transportProbeJob =
wsScope.launch {
Log.d(TAG, "Network transport changed — probing WebSocket liveness")
val alive = runCatching { ping(LIVENESS_PROBE_TIMEOUT_MS) }.isSuccess
val alive = runCatching { ping(timeoutMs) }.isSuccess
if (alive) {
Log.d(TAG, "WebSocket liveness probe succeeded on new transport")
return@launch
@@ -25,6 +25,9 @@ open class NotificationReplyReceiver : BroadcastReceiver() {
const val EXTRA_SESSION_ID = "extra_session_id"
private const val REPLY_TIMEOUT_MS = 5_000L
/** Overall deadline for persisting and submitting one notification reply. */
private const val PERSISTENCE_TIMEOUT_MS = 5_000L
/**
* Turn-boundary read budget inside the reply deadline. Deliberately tight:
* the probe sits on the reply path, so a slow or unreachable gateway must
@@ -44,6 +47,9 @@ open class NotificationReplyReceiver : BroadcastReceiver() {
*/
internal open fun goAsyncCompat(): BroadcastReceiver.PendingResult = goAsync()
/** Overridable so tests can prove the timeout path without waiting 5s. */
internal open val persistenceTimeoutMs: Long get() = PERSISTENCE_TIMEOUT_MS
/**
* Test-friendly wrapper for notification creation. Override in tests to
* avoid [NotificationCompat.Builder.build()] calling Android framework
@@ -75,7 +81,7 @@ open class NotificationReplyReceiver : BroadcastReceiver() {
val pendingResult = goAsyncCompat()
replyScope.launch {
try {
withTimeout(5000L) {
withTimeout(persistenceTimeoutMs) {
withContext(Dispatchers.IO) {
val db =
com.m57.hermescontrol.data.local.HermesDatabase