From 0c67e4092996af4e50fc440aac3d1bfb102ce2cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Jos=C3=A9=20Arboleda?= Date: Thu, 2 Oct 2025 13:09:40 -0500 Subject: [PATCH] build: remove macos-13 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The macos-13 image will be removed by december 4th, 2025 Refs: * https://github.blog/changelog/2025-09-19-github-actions-macos-13-runner-image-is-closing-down/ * https://github.com/actions/runner-images/issues/10924 Signed-off-by: Juan José Arboleda --- .github/workflows/CI-unix.yml | 4 ++-- .github/workflows/sanitizer.yml | 2 +- src/unix/udp.c | 2 ++ test/test-tcp-connect6-error.c | 13 +++++++++---- test/test-udp-multicast-interface.c | 6 +++++- test/test-udp-multicast-join.c | 15 +++++++++++++-- test/test-udp-multicast-join6.c | 20 ++++++++++++++++---- test/test-udp-multicast-ttl.c | 6 +++++- 8 files changed, 53 insertions(+), 15 deletions(-) diff --git a/.github/workflows/CI-unix.yml b/.github/workflows/CI-unix.yml index 776833a5c..f5e7e40cb 100644 --- a/.github/workflows/CI-unix.yml +++ b/.github/workflows/CI-unix.yml @@ -80,7 +80,7 @@ jobs: strategy: fail-fast: false matrix: - os: [macos-13, macos-14] + os: [macos-14, macos-15] steps: - uses: actions/checkout@v5 - name: Envinfo @@ -122,7 +122,7 @@ jobs: strategy: fail-fast: false matrix: - os: [macos-13, macos-14] + os: [macos-14, macos-15] steps: - uses: actions/checkout@v5 - name: Configure diff --git a/.github/workflows/sanitizer.yml b/.github/workflows/sanitizer.yml index ab506d957..63f70e23f 100644 --- a/.github/workflows/sanitizer.yml +++ b/.github/workflows/sanitizer.yml @@ -55,7 +55,7 @@ jobs: fi sanitizers-macos: - runs-on: macos-13 + runs-on: macos-14 strategy: matrix: config: diff --git a/src/unix/udp.c b/src/unix/udp.c index c96a0e4e6..b7c4c68e3 100644 --- a/src/unix/udp.c +++ b/src/unix/udp.c @@ -358,7 +358,9 @@ static void uv__udp_recvmsg(uv_udp_t* handle, int flag) { #endif handle->recv_cb(handle, nread, &buf, (const struct sockaddr*) &peer, flags); } +#if defined(__linux__) out: +#endif count--; } /* recv_cb callback may decide to pause or close the handle */ diff --git a/test/test-tcp-connect6-error.c b/test/test-tcp-connect6-error.c index dc2fce82f..e5cd5524d 100644 --- a/test/test-tcp-connect6-error.c +++ b/test/test-tcp-connect6-error.c @@ -116,10 +116,15 @@ TEST_IMPL(tcp_connect6_link_local) { * connection attempt to the address above, i.e., we don't expect the * connect() system call to fail synchronously. */ - ASSERT_OK(uv_tcp_connect(&req, - &server, - (struct sockaddr*) &addr, - connect_cb)); + ok = uv_tcp_connect(&req, + &server, + (struct sockaddr*) &addr, + connect_cb); +#ifdef __APPLE__ + if (ok == UV_EHOSTUNREACH) + RETURN_SKIP("macos-15 does not grant permission to local network access"); +#endif + ASSERT_OK(ok); uv_close((uv_handle_t*) &server, NULL); ASSERT_OK(uv_run(uv_default_loop(), UV_RUN_DEFAULT)); diff --git a/test/test-udp-multicast-interface.c b/test/test-udp-multicast-interface.c index 2c558c8b0..35f349206 100644 --- a/test/test-udp-multicast-interface.c +++ b/test/test-udp-multicast-interface.c @@ -44,7 +44,11 @@ static void close_cb(uv_handle_t* handle) { static void sv_send_cb(uv_udp_send_t* req, int status) { ASSERT_NOT_NULL(req); - ASSERT(status == 0 || status == UV_ENETUNREACH || status == UV_EPERM); + ASSERT(status == 0 || + status == UV_ENETUNREACH || + status == UV_EPERM || + /* macos-15 does not grant permission to local network access */ + status == UV_EHOSTUNREACH); CHECK_HANDLE(req->handle); sv_send_cb_called++; diff --git a/test/test-udp-multicast-join.c b/test/test-udp-multicast-join.c index 548bf7414..853f79dd9 100644 --- a/test/test-udp-multicast-join.c +++ b/test/test-udp-multicast-join.c @@ -37,6 +37,7 @@ static uv_udp_send_t req; static uv_udp_send_t req_ss; static int darwin_ebusy_errors; +static int darwin_ehostunreach_errors; static int cl_recv_cb_called; static int sv_send_cb_called; static int close_cb_called; @@ -60,11 +61,18 @@ static void close_cb(uv_handle_t* handle) { static void sv_send_cb(uv_udp_send_t* req, int status) { ASSERT_NOT_NULL(req); - ASSERT_OK(status); + /* macos-15 does not grant permission to local network access */ + ASSERT(status == 0 || status == UV_EHOSTUNREACH); CHECK_HANDLE(req->handle); sv_send_cb_called++; + if (status == UV_EHOSTUNREACH) { + darwin_ehostunreach_errors++; + uv_close((uv_handle_t*)&server, close_cb); + return; + } + if (sv_send_cb_called == 2) uv_close((uv_handle_t*) req->handle, close_cb); } @@ -73,7 +81,7 @@ static void sv_send_cb(uv_udp_send_t* req, int status) { static int do_send(uv_udp_send_t* send_req) { uv_buf_t buf; struct sockaddr_in addr; - + buf = uv_buf_init("PING", 4); ASSERT_OK(uv_ip4_addr(MULTICAST_ADDR, TEST_PORT, &addr)); @@ -189,6 +197,9 @@ TEST_IMPL(udp_multicast_join) { /* run the loop till all events are processed */ uv_run(uv_default_loop(), UV_RUN_DEFAULT); + if (darwin_ehostunreach_errors > 0) + RETURN_SKIP("macos-15 does not grant permission to local network access"); + if (darwin_ebusy_errors > 0) RETURN_SKIP("Unexplained macOS IP_ADD_SOURCE_MEMBERSHIP EBUSY bug"); diff --git a/test/test-udp-multicast-join6.c b/test/test-udp-multicast-join6.c index c7d624318..fda9c193a 100644 --- a/test/test-udp-multicast-join6.c +++ b/test/test-udp-multicast-join6.c @@ -26,7 +26,6 @@ #include #include - #define CHECK_HANDLE(handle) \ ASSERT_NE((uv_udp_t*)(handle) == &server || (uv_udp_t*)(handle) == &client, 0) @@ -55,6 +54,8 @@ static int sv_send_cb_called; static int close_cb_called; +static int darwin_ehostunreach_errors; + static void alloc_cb(uv_handle_t* handle, size_t suggested_size, uv_buf_t* buf) { @@ -74,11 +75,19 @@ static void close_cb(uv_handle_t* handle) { static void sv_send_cb(uv_udp_send_t* req, int status) { ASSERT_NOT_NULL(req); - ASSERT_OK(status); + /* macos-15 does not grant permission to local network access */ + ASSERT(status == 0 || status == UV_EHOSTUNREACH); CHECK_HANDLE(req->handle); sv_send_cb_called++; + if (status == UV_EHOSTUNREACH) { + darwin_ehostunreach_errors++; + uv_close((uv_handle_t*)&server, close_cb); + return; + } + + if (sv_send_cb_called == 2) uv_close((uv_handle_t*) req->handle, close_cb); } @@ -87,7 +96,7 @@ static void sv_send_cb(uv_udp_send_t* req, int status) { static int do_send(uv_udp_send_t* send_req) { uv_buf_t buf; struct sockaddr_in6 addr; - + buf = uv_buf_init("PING", 4); ASSERT_OK(uv_ip6_addr(MULTICAST_ADDR, TEST_PORT, &addr)); @@ -208,7 +217,7 @@ TEST_IMPL(udp_multicast_join6) { #endif r = uv_udp_recv_start(&server, alloc_cb, cl_recv_cb); ASSERT_OK(r); - + r = do_send(&req); ASSERT_OK(r); @@ -219,6 +228,9 @@ TEST_IMPL(udp_multicast_join6) { /* run the loop till all events are processed */ uv_run(uv_default_loop(), UV_RUN_DEFAULT); + if (darwin_ehostunreach_errors > 0) + RETURN_SKIP("macos-15 does not grant permission to local network access"); + ASSERT_EQ(2, cl_recv_cb_called); ASSERT_EQ(2, sv_send_cb_called); ASSERT_EQ(2, close_cb_called); diff --git a/test/test-udp-multicast-ttl.c b/test/test-udp-multicast-ttl.c index 50bc54a06..cbe7f0d3d 100644 --- a/test/test-udp-multicast-ttl.c +++ b/test/test-udp-multicast-ttl.c @@ -44,7 +44,11 @@ static void close_cb(uv_handle_t* handle) { static void sv_send_cb(uv_udp_send_t* req, int status) { ASSERT_NOT_NULL(req); - ASSERT(status == 0 || status == UV_ENETUNREACH || status == UV_EPERM); + ASSERT(status == 0 || + status == UV_ENETUNREACH || + status == UV_EPERM || + /* macos-15 does not grant permission to local network access */ + status == UV_EHOSTUNREACH); CHECK_HANDLE(req->handle); sv_send_cb_called++;