Skip to content

Commit 76457db

Browse files
committed
Merge remote-tracking branch 'origin/main'
2 parents 71e6397 + 34c10e0 commit 76457db

22 files changed

Lines changed: 1694 additions & 93 deletions

File tree

.github/workflows/release.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ on:
77

88
permissions:
99
contents: write
10+
actions: write
1011

1112
env:
1213
CARGO_TERM_COLOR: always
@@ -565,4 +566,3 @@ jobs:
565566
});
566567
567568
console.log(`Triggered winget publishing for version ${version}`);
568-

CHANGELOG.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,14 @@ All notable changes to A3S Box will be documented in this file.
44

55
## [Unreleased]
66

7+
## [0.8.12] — 2026-03-20
8+
9+
### Fixed
10+
- macOS bridge networking restored for shim-hosted netproxy so `localhost` port publishing works reliably again
11+
- Linux release CI restored by adding the missing `prometheus` dependency back to the workspace
12+
- Windows release builds no longer fail on non-macOS network setup bindings
13+
- Release workflow can dispatch the winget publish workflow with `actions: write`
14+
715
## [0.4.0] — 2026-02-18
816

917
### Added

src/Cargo.lock

Lines changed: 95 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ members = [
1212
resolver = "2"
1313

1414
[workspace.package]
15-
version = "0.8.8"
15+
version = "0.8.15"
1616
edition = "2021"
1717
authors = ["A3S Lab Team"]
1818
license = "MIT"

src/cli/src/health.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@ pub fn spawn_health_checker(
4040

4141
#[cfg(not(windows))]
4242
async fn run_health_loop(box_id: String, exec_socket_path: PathBuf, hc: HealthCheck) {
43-
use std::path::Path;
4443
use std::time::Duration;
4544

4645
// Honour start_period before the first probe

src/core/src/vmm.rs

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
//! - [`VmHandler`] — lifecycle operations on a running VM
1111
1212
use std::net::Ipv4Addr;
13+
#[cfg(target_os = "macos")]
14+
use std::os::fd::RawFd;
1315
use std::path::PathBuf;
1416

1517
use async_trait::async_trait;
@@ -51,11 +53,21 @@ pub struct TeeInstanceConfig {
5153
pub tee_type: String,
5254
}
5355

54-
/// Network instance configuration for passt-based networking.
56+
/// Network instance configuration for the network backend (passt on Linux, gvproxy on macOS).
5557
#[derive(Debug, Clone, Serialize, Deserialize)]
5658
pub struct NetworkInstanceConfig {
57-
/// Path to the passt Unix socket.
58-
pub passt_socket_path: PathBuf,
59+
/// Path to the network backend Unix socket (passt on Linux, gvproxy on macOS).
60+
pub net_socket_path: PathBuf,
61+
62+
/// Pre-opened Unix datagram socket fd inherited by the shim on macOS.
63+
#[cfg(target_os = "macos")]
64+
#[serde(default)]
65+
pub net_socket_fd: Option<RawFd>,
66+
67+
/// Proxy-side Unix datagram socket fd inherited by the shim on macOS.
68+
#[cfg(target_os = "macos")]
69+
#[serde(default)]
70+
pub net_proxy_fd: Option<RawFd>,
5971

6072
/// Assigned IPv4 address for this VM.
6173
pub ip_address: Ipv4Addr,
@@ -127,8 +139,8 @@ pub struct InstanceSpec {
127139
#[serde(default)]
128140
pub user: Option<String>,
129141

130-
/// Network configuration for passt-based networking.
131-
/// None = TSI mode (default), Some = passt virtio-net mode.
142+
/// Network configuration for virtio-net networking.
143+
/// None = TSI mode (default), Some = virtio-net mode (passt on Linux, gvproxy on macOS).
132144
#[serde(default)]
133145
pub network: Option<NetworkInstanceConfig>,
134146

@@ -371,7 +383,11 @@ mod tests {
371383
fn test_instance_spec_with_network() {
372384
let spec = InstanceSpec {
373385
network: Some(NetworkInstanceConfig {
374-
passt_socket_path: PathBuf::from("/tmp/passt.sock"),
386+
net_socket_path: PathBuf::from("/tmp/net.sock"),
387+
#[cfg(target_os = "macos")]
388+
net_socket_fd: Some(42),
389+
#[cfg(target_os = "macos")]
390+
net_proxy_fd: Some(43),
375391
ip_address: "10.0.0.2".parse().unwrap(),
376392
gateway: "10.0.0.1".parse().unwrap(),
377393
prefix_len: 24,
@@ -385,6 +401,10 @@ mod tests {
385401
let deserialized: InstanceSpec = serde_json::from_str(&json).unwrap();
386402

387403
let net = deserialized.network.unwrap();
404+
#[cfg(target_os = "macos")]
405+
assert_eq!(net.net_socket_fd, Some(42));
406+
#[cfg(target_os = "macos")]
407+
assert_eq!(net.net_proxy_fd, Some(43));
388408
assert_eq!(net.ip_address, "10.0.0.2".parse::<Ipv4Addr>().unwrap());
389409
assert_eq!(net.gateway, "10.0.0.1".parse::<Ipv4Addr>().unwrap());
390410
assert_eq!(net.prefix_len, 24);

0 commit comments

Comments
 (0)