Compare commits

...

6 Commits

Author SHA1 Message Date
benedettadavico 75a6d3426b update changelog 2025-10-30 11:59:32 +01:00
benedetta davico e9753fbe33 Merge pull request #6154 from nymtech/ci/ns-agent-workflow
update ns agent workflow
2025-10-30 09:46:39 +01:00
Tommy Verrall 7d20609276 Merge pull request #6153 from nymtech/cherry-pick/circuit-breaker
Cherry pick - request #6143 from nymtech/bugfix/mix-tx-closed-v2
2025-10-29 15:37:15 +01:00
benedettadavico e010e7a5e2 update workflow 2025-10-29 14:14:58 +01:00
Tommy Verrall 981b32cdcd Merge pull request #6143 from nymtech/bugfix/mix-tx-closed-v2
Bugfix: Add circuit breaker
2025-10-29 14:03:59 +01:00
benedettadavico 9c336f5549 bump versions 2025-10-17 08:52:16 +02:00
18 changed files with 127 additions and 94 deletions
+3 -30
View File
@@ -3,11 +3,6 @@ name: Build and upload Node Status agent container to harbor.nymte.ch
on: on:
workflow_dispatch: workflow_dispatch:
inputs: inputs:
gateway_probe_git_ref:
type: string
default: nym-vpn-core-v1.4.0
required: true
description: Which gateway probe git ref to build the image with
release_image: release_image:
description: 'Tag image as a release' description: 'Tag image as a release'
required: true required: true
@@ -43,16 +38,6 @@ jobs:
VERSION=$(yq -oy '.package.version' ${{ env.WORKING_DIRECTORY }}/Cargo.toml) VERSION=$(yq -oy '.package.version' ${{ env.WORKING_DIRECTORY }}/Cargo.toml)
echo "result=$VERSION" >> $GITHUB_OUTPUT echo "result=$VERSION" >> $GITHUB_OUTPUT
- name: cleanup-gateway-probe-ref
id: cleanup_gateway_probe_ref
run: |
GATEWAY_PROBE_GIT_REF=${{ github.event.inputs.gateway_probe_git_ref }}
GIT_REF_SLUG="${GATEWAY_PROBE_GIT_REF//\//-}"
echo "git_ref=${GIT_REF_SLUG}" >> $GITHUB_OUTPUT
- name: Set GIT_TAG variable
run: echo "GIT_TAG=${{ env.WORKING_DIRECTORY }}-${{ steps.get_version.outputs.result }}-${{ steps.cleanup_gateway_probe_ref.outputs.git_ref }}" >> $GITHUB_ENV
- name: Initialize RELEASE_TAG - name: Initialize RELEASE_TAG
run: echo "RELEASE_TAG=" >> $GITHUB_ENV run: echo "RELEASE_TAG=" >> $GITHUB_ENV
@@ -61,24 +46,12 @@ jobs:
run: echo "RELEASE_TAG=golden-" >> $GITHUB_ENV run: echo "RELEASE_TAG=golden-" >> $GITHUB_ENV
- name: Set IMAGE_NAME_AND_TAGS variable - name: Set IMAGE_NAME_AND_TAGS variable
run: echo "IMAGE_NAME_AND_TAGS=${{ env.CONTAINER_NAME }}:${{ env.RELEASE_TAG }}${{ steps.get_version.outputs.result }}-${{ steps.cleanup_gateway_probe_ref.outputs.git_ref }}" >> $GITHUB_ENV run: echo "IMAGE_NAME_AND_TAGS=${{ env.CONTAINER_NAME }}:${{ env.RELEASE_TAG }}${{ steps.get_version.outputs.result }}" >> $GITHUB_ENV
- name: New env vars - name: New env vars
run: echo "RELEASE_TAG='$RELEASE_TAG' GIT_TAG='$GIT_TAG' IMAGE_NAME_AND_TAGS='$IMAGE_NAME_AND_TAGS'" run: echo "RELEASE_TAG='$RELEASE_TAG' IMAGE_NAME_AND_TAGS='$IMAGE_NAME_AND_TAGS'"
# - name: Remove existing tag if exists
# run: |
# if git rev-parse $${{ env.GIT_TAG }} >/dev/null 2>&1; then
# git push --delete origin $${{ env.GIT_TAG }}
# git tag -d $${{ env.GIT_TAG }}
# fi
# - name: Create tag
# run: |
# git tag -a $${{ env.GIT_TAG }} -m "Version ${{ steps.get_version.outputs.result }}-${{ steps.cleanup_gateway_probe_ref.outputs.git_ref }}"
# git push origin $${{ env.GIT_TAG }}
- name: BuildAndPushImageOnHarbor - name: BuildAndPushImageOnHarbor
run: | run: |
docker build --build-arg GIT_REF=${{ github.event.inputs.gateway_probe_git_ref }} -f ${{ env.WORKING_DIRECTORY }}/Dockerfile . -t harbor.nymte.ch/nym/${{ env.IMAGE_NAME_AND_TAGS }} docker build -f ${{ env.WORKING_DIRECTORY }}/Dockerfile . -t harbor.nymte.ch/nym/${{ env.IMAGE_NAME_AND_TAGS }}
docker push harbor.nymte.ch/nym/${{ env.CONTAINER_NAME }} --all-tags docker push harbor.nymte.ch/nym/${{ env.CONTAINER_NAME }} --all-tags
+40
View File
@@ -4,6 +4,46 @@ Post 1.0.0 release, the changelog format is based on [Keep a Changelog](https://
## [Unreleased] ## [Unreleased]
## [2025.19-kase] (2025-10-30)
- update ns agent workflow ([#6154])
- Cherry pick - request #6143 from nymtech/bugfix/mix-tx-closed-v2 ([#6153])
- bugfix: nym-credential-proxy query params parsing regression ([#6121])
- bugfix: revert some dep updates introduced in #6043 ([#6120])
- Skip ipv6 metadata endpoint request ([#6118])
- update to no longer use 1mb files ([#6117])
- chore: restore pending dkg contract state migration ([#6116])
- Revert "Propagate cancel token to mixnet client" ([#6115])
- Update dirs to 6.0 ([#6109])
- Propagate cancel token to mixnet client ([#6105])
- bugfix: retrieve and update ticketbook in the same query ([#6101])
- bugfix: include network name in the default gateway probe config path ([#6100])
- Bugfix/incompatibility fixes ([#6099])
- [DOCs/operators] QUIC deployment script & docs ([#6098])
- bugfix: testnet manager 02sql migration ([#6096])
- feat: move gateway probe to monorepo (and update to rust edition 2024) ([#6094])
- bugfix: use custom topology provider for list of init gateways ([#6092])
- Max/fix wasm client + build commands ([#6043])
[#6154]: https://github.com/nymtech/nym/pull/6154
[#6153]: https://github.com/nymtech/nym/pull/6153
[#6121]: https://github.com/nymtech/nym/pull/6121
[#6120]: https://github.com/nymtech/nym/pull/6120
[#6118]: https://github.com/nymtech/nym/pull/6118
[#6117]: https://github.com/nymtech/nym/pull/6117
[#6116]: https://github.com/nymtech/nym/pull/6116
[#6115]: https://github.com/nymtech/nym/pull/6115
[#6109]: https://github.com/nymtech/nym/pull/6109
[#6105]: https://github.com/nymtech/nym/pull/6105
[#6101]: https://github.com/nymtech/nym/pull/6101
[#6100]: https://github.com/nymtech/nym/pull/6100
[#6099]: https://github.com/nymtech/nym/pull/6099
[#6098]: https://github.com/nymtech/nym/pull/6098
[#6096]: https://github.com/nymtech/nym/pull/6096
[#6094]: https://github.com/nymtech/nym/pull/6094
[#6092]: https://github.com/nymtech/nym/pull/6092
[#6043]: https://github.com/nymtech/nym/pull/6043
## [2025.18-jarlsberg] (2025-10-14) ## [2025.18-jarlsberg] (2025-10-14)
- ns-api: add descriptions to dVPN gateway responses ([#6102]) - ns-api: add descriptions to dVPN gateway responses ([#6102])
Generated
+7 -7
View File
@@ -4824,7 +4824,7 @@ dependencies = [
[[package]] [[package]]
name = "nym-api" name = "nym-api"
version = "1.1.67" version = "1.1.68"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"async-trait", "async-trait",
@@ -5050,7 +5050,7 @@ dependencies = [
[[package]] [[package]]
name = "nym-cli" name = "nym-cli"
version = "1.1.64" version = "1.1.65"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"base64 0.22.1", "base64 0.22.1",
@@ -5133,7 +5133,7 @@ dependencies = [
[[package]] [[package]]
name = "nym-client" name = "nym-client"
version = "1.1.64" version = "1.1.65"
dependencies = [ dependencies = [
"bs58", "bs58",
"clap", "clap",
@@ -6354,7 +6354,7 @@ dependencies = [
[[package]] [[package]]
name = "nym-network-requester" name = "nym-network-requester"
version = "1.1.65" version = "1.1.66"
dependencies = [ dependencies = [
"addr", "addr",
"anyhow", "anyhow",
@@ -6404,7 +6404,7 @@ dependencies = [
[[package]] [[package]]
name = "nym-node" name = "nym-node"
version = "1.19.0" version = "1.20.0"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"arc-swap", "arc-swap",
@@ -6930,7 +6930,7 @@ dependencies = [
[[package]] [[package]]
name = "nym-socks5-client" name = "nym-socks5-client"
version = "1.1.64" version = "1.1.65"
dependencies = [ dependencies = [
"bs58", "bs58",
"clap", "clap",
@@ -7669,7 +7669,7 @@ dependencies = [
[[package]] [[package]]
name = "nymvisor" name = "nymvisor"
version = "0.1.29" version = "0.1.30"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"bytes", "bytes",
+1 -1
View File
@@ -1,6 +1,6 @@
[package] [package]
name = "nym-client" name = "nym-client"
version = "1.1.64" version = "1.1.65"
authors = ["Dave Hrycyszyn <futurechimp@users.noreply.github.com>", "Jędrzej Stuczyński <andrew@nymtech.net>"] authors = ["Dave Hrycyszyn <futurechimp@users.noreply.github.com>", "Jędrzej Stuczyński <andrew@nymtech.net>"]
description = "Implementation of the Nym Client" description = "Implementation of the Nym Client"
edition = "2021" edition = "2021"
+1 -1
View File
@@ -1,6 +1,6 @@
[package] [package]
name = "nym-socks5-client" name = "nym-socks5-client"
version = "1.1.64" version = "1.1.65"
authors = ["Dave Hrycyszyn <futurechimp@users.noreply.github.com>"] authors = ["Dave Hrycyszyn <futurechimp@users.noreply.github.com>"]
description = "A SOCKS5 localhost proxy that converts incoming messages to Sphinx and sends them to a Nym address" description = "A SOCKS5 localhost proxy that converts incoming messages to Sphinx and sends them to a Nym address"
edition = "2021" edition = "2021"
@@ -783,7 +783,7 @@ where
event_tx, event_tx,
); );
let mix_tx = mix_traffic_controller.mix_rx(); let mix_tx = mix_traffic_controller.mix_tx();
let client_tx = mix_traffic_controller.client_tx(); let client_tx = mix_traffic_controller.client_tx();
shutdown_tracker.try_spawn_named( shutdown_tracker.try_spawn_named(
@@ -940,8 +940,8 @@ where
// Create a shutdown tracker for this client - either as a child of provided tracker // Create a shutdown tracker for this client - either as a child of provided tracker
// or get one from the registry // or get one from the registry
let shutdown_tracker = match self.shutdown { let shutdown_tracker = match self.shutdown {
Some(parent_tracker) => parent_tracker.child_tracker(), Some(parent_tracker) => parent_tracker.clone(),
None => nym_task::get_sdk_shutdown_tracker()?, None => nym_task::create_sdk_shutdown_tracker()?,
}; };
Self::start_event_control(self.event_tx, event_receiver, &shutdown_tracker); Self::start_event_control(self.event_tx, event_receiver, &shutdown_tracker);
@@ -976,7 +976,7 @@ where
self.user_agent.clone(), self.user_agent.clone(),
generate_client_stats_id(*self_address.identity()), generate_client_stats_id(*self_address.identity()),
input_sender.clone(), input_sender.clone(),
&shutdown_tracker.child_tracker(), &shutdown_tracker.clone(),
); );
// needs to be started as the first thing to block if required waiting for the gateway // needs to be started as the first thing to block if required waiting for the gateway
@@ -986,7 +986,7 @@ where
shared_topology_accessor.clone(), shared_topology_accessor.clone(),
self_address.gateway(), self_address.gateway(),
self.wait_for_gateway, self.wait_for_gateway,
&shutdown_tracker.child_tracker(), &shutdown_tracker.clone(),
) )
.await?; .await?;
@@ -1006,7 +1006,7 @@ where
stats_reporter.clone(), stats_reporter.clone(),
#[cfg(unix)] #[cfg(unix)]
self.connection_fd_callback, self.connection_fd_callback,
&shutdown_tracker.child_tracker(), &shutdown_tracker.clone(),
) )
.await?; .await?;
let gateway_ws_fd = gateway_transceiver.ws_fd(); let gateway_ws_fd = gateway_transceiver.ws_fd();
@@ -1014,7 +1014,7 @@ where
let reply_storage = Self::setup_persistent_reply_storage( let reply_storage = Self::setup_persistent_reply_storage(
reply_storage_backend, reply_storage_backend,
key_rotation_config, key_rotation_config,
&shutdown_tracker.child_tracker(), &shutdown_tracker.clone(),
) )
.await?; .await?;
@@ -1025,7 +1025,7 @@ where
reply_storage.key_storage(), reply_storage.key_storage(),
reply_controller_sender.clone(), reply_controller_sender.clone(),
stats_reporter.clone(), stats_reporter.clone(),
&shutdown_tracker.child_tracker(), &shutdown_tracker.clone(),
); );
// The message_sender is the transmitter for any component generating sphinx packets // The message_sender is the transmitter for any component generating sphinx packets
@@ -1035,7 +1035,7 @@ where
let (message_sender, client_request_sender) = Self::start_mix_traffic_controller( let (message_sender, client_request_sender) = Self::start_mix_traffic_controller(
gateway_transceiver, gateway_transceiver,
&shutdown_tracker.child_tracker(), &shutdown_tracker.clone(),
EventSender(event_sender), EventSender(event_sender),
); );
@@ -1066,7 +1066,7 @@ where
shared_lane_queue_lengths.clone(), shared_lane_queue_lengths.clone(),
client_connection_rx, client_connection_rx,
stats_reporter.clone(), stats_reporter.clone(),
&shutdown_tracker.child_tracker(), &shutdown_tracker.clone(),
); );
if !self if !self
@@ -1082,7 +1082,7 @@ where
shared_topology_accessor.clone(), shared_topology_accessor.clone(),
message_sender, message_sender,
stats_reporter.clone(), stats_reporter.clone(),
&shutdown_tracker.child_tracker(), &shutdown_tracker.clone(),
); );
} }
@@ -205,7 +205,7 @@ impl LoopCoverTrafficStream<OsRng> {
TrySendError::Full(_) => { TrySendError::Full(_) => {
// This isn't a problem, if the channel is full means we're already sending the // This isn't a problem, if the channel is full means we're already sending the
// max amount of messages downstream can handle. // max amount of messages downstream can handle.
tracing::debug!("Failed to send cover message - channel full"); tracing::trace!("Failed to send cover message - channel full");
} }
TrySendError::Closed(_) => { TrySendError::Closed(_) => {
tracing::warn!("Failed to send cover message - channel closed"); tracing::warn!("Failed to send cover message - channel closed");
@@ -20,7 +20,10 @@ pub mod transceiver;
// We remind ourselves that 32 x 32kb = 1024kb, a reasonable size for a network buffer. // We remind ourselves that 32 x 32kb = 1024kb, a reasonable size for a network buffer.
pub const MIX_MESSAGE_RECEIVER_BUFFER_SIZE: usize = 32; pub const MIX_MESSAGE_RECEIVER_BUFFER_SIZE: usize = 32;
const MAX_FAILURE_COUNT: usize = 100;
/// Reduced from 100 to 20 to fail fast (~1-2 seconds instead of ~6 seconds).
/// If we can't send 20 packets in a row, the gateway is unreachable.
const MAX_FAILURE_COUNT: usize = 20;
// that's also disgusting. // that's also disgusting.
pub struct Empty; pub struct Empty;
@@ -84,7 +87,7 @@ impl MixTrafficController {
self.client_tx.clone() self.client_tx.clone()
} }
pub fn mix_rx(&self) -> BatchMixMessageSender { pub fn mix_tx(&self) -> BatchMixMessageSender {
self.mix_tx.clone() self.mix_tx.clone()
} }
@@ -156,6 +159,11 @@ impl MixTrafficController {
// Do we need to handle the embedded mixnet client case // Do we need to handle the embedded mixnet client case
// separately? // separately?
self.event_tx.send(MixnetClientEvent::Traffic(MixTrafficEvent::FailedSendingSphinx)); self.event_tx.send(MixnetClientEvent::Traffic(MixTrafficEvent::FailedSendingSphinx));
// IMO it shouldn't be signalled from there but it is how it is
// TODO : report the failure upwards and shutdown from upwards
// Gateway is dead, we have to shut down currently
error!("Signalling shutdown from the MixTrafficController");
self.shutdown_token.cancel();
break; break;
} }
} }
@@ -298,6 +298,8 @@ where
"failed to send mixnet packet due to closed channel (outside of shutdown!)" "failed to send mixnet packet due to closed channel (outside of shutdown!)"
); );
} }
// Early return to avoid further processing when channel is closed
return;
} }
Ok(_) => { Ok(_) => {
let event = if fragment_id.is_some() { let event = if fragment_id.is_some() {
+2 -2
View File
@@ -24,6 +24,6 @@ pub use crate::runtime_registry::RegistryAccessError;
/// Get or create a ShutdownTracker for SDK use. /// Get or create a ShutdownTracker for SDK use.
/// This provides automatic task management without requiring manual setup. /// This provides automatic task management without requiring manual setup.
pub fn get_sdk_shutdown_tracker() -> Result<ShutdownTracker, RegistryAccessError> { pub fn create_sdk_shutdown_tracker() -> Result<ShutdownTracker, RegistryAccessError> {
Ok(runtime_registry::RuntimeRegistry::get_or_create_sdk()?.shutdown_tracker_owned()) Ok(runtime_registry::RuntimeRegistry::create_sdk()?.shutdown_tracker_owned())
} }
+34 -16
View File
@@ -19,30 +19,45 @@ pub(crate) struct RuntimeRegistry {
pub enum RegistryAccessError { pub enum RegistryAccessError {
#[error("the runtime registry is poisoned")] #[error("the runtime registry is poisoned")]
Poisoned, Poisoned,
#[error("The SDK ShutdownManager already exists")]
ExistingShutdownManager,
#[error("No existing SDK ShutdownManager")]
MissingShutdownManager,
} }
impl RuntimeRegistry { impl RuntimeRegistry {
/// Get or create a ShutdownManager for SDK use. /// Create a ShutdownManager for SDK use.
/// This manager doesn't listen to OS signals, making it suitable for library use. /// This manager doesn't listen to OS signals, making it suitable for library use.
pub(crate) fn get_or_create_sdk() -> Result<Arc<ShutdownManager>, RegistryAccessError> { /// This function overwrite any existing manager!
pub(crate) fn create_sdk() -> Result<Arc<ShutdownManager>, RegistryAccessError> {
let mut guard = REGISTRY
.sdk_manager
.write()
.map_err(|_| RegistryAccessError::Poisoned)?;
Ok(guard
.insert(Arc::new(
ShutdownManager::new_without_signals().with_cancel_on_panic(),
))
.clone())
}
/// Get the ShutdownManager for SDK use.
/// This manager doesn't listen to OS signals, making it suitable for library use.
/// Not yet used, but maybe in the future
#[allow(dead_code)]
pub(crate) fn get_sdk() -> Result<Arc<ShutdownManager>, RegistryAccessError> {
let guard = REGISTRY let guard = REGISTRY
.sdk_manager .sdk_manager
.read() .read()
.map_err(|_| RegistryAccessError::Poisoned)?; .map_err(|_| RegistryAccessError::Poisoned)?;
if let Some(manager) = guard.as_ref() { if let Some(manager) = guard.as_ref() {
return Ok(manager.clone()); Ok(manager.clone())
} else {
Err(RegistryAccessError::MissingShutdownManager)
} }
drop(guard);
let mut guard = REGISTRY
.sdk_manager
.write()
.map_err(|_| RegistryAccessError::Poisoned)?;
Ok(guard
.get_or_insert_with(|| {
Arc::new(ShutdownManager::new_without_signals().with_cancel_on_panic())
})
.clone())
} }
/// Check if an SDK manager has been created. /// Check if an SDK manager has been created.
@@ -85,10 +100,13 @@ mod tests {
assert!(!RuntimeRegistry::has_sdk_manager().unwrap()); assert!(!RuntimeRegistry::has_sdk_manager().unwrap());
let manager1 = RuntimeRegistry::get_or_create_sdk().unwrap(); // Error if nothing was created
assert!(RuntimeRegistry::get_sdk().is_err());
let manager1 = RuntimeRegistry::create_sdk().unwrap();
assert!(RuntimeRegistry::has_sdk_manager().unwrap()); assert!(RuntimeRegistry::has_sdk_manager().unwrap());
let manager2 = RuntimeRegistry::get_or_create_sdk().unwrap(); let manager2 = RuntimeRegistry::get_sdk().unwrap();
// Should return the same instance // Should return the same instance
assert!(Arc::ptr_eq(&manager1, &manager2)); assert!(Arc::ptr_eq(&manager1, &manager2));
+1 -1
View File
@@ -4,7 +4,7 @@
[package] [package]
name = "nym-api" name = "nym-api"
license = "GPL-3.0" license = "GPL-3.0"
version = "1.1.67" version = "1.1.68"
authors.workspace = true authors.workspace = true
edition = "2021" edition = "2021"
rust-version.workspace = true rust-version.workspace = true
@@ -1,21 +1,17 @@
# this will only work with VPN, otherwise remove the harbor part # this will only work with VPN, otherwise remove the harbor part
FROM harbor.nymte.ch/dockerhub/rust:latest AS builder FROM harbor.nymte.ch/dockerhub/rust:latest AS builder
ARG GIT_REF=main
RUN apt update && apt install -yy libdbus-1-dev pkg-config libclang-dev RUN apt update && apt install -yy libdbus-1-dev pkg-config libclang-dev
# Install go # Install go
RUN wget https://go.dev/dl/go1.22.5.linux-amd64.tar.gz -O go.tar.gz RUN wget https://go.dev/dl/go1.22.5.linux-amd64.tar.gz -O go.tar.gz
RUN tar -xzvf go.tar.gz -C /usr/local RUN tar -xzvf go.tar.gz -C /usr/local
RUN git clone https://github.com/nymtech/nym-vpn-client /usr/src/nym-vpn-client
RUN cd /usr/src/nym-vpn-client && git checkout $GIT_REF
ENV PATH=/go/bin:/usr/local/go/bin:$PATH ENV PATH=/go/bin:/usr/local/go/bin:$PATH
WORKDIR /usr/src/nym-vpn-client/nym-vpn-core
RUN cargo build --release --package nym-gateway-probe
COPY ./ /usr/src/nym COPY ./ /usr/src/nym
WORKDIR /usr/src/nym
RUN cargo build --release --package nym-gateway-probe
WORKDIR /usr/src/nym/nym-node-status-api/nym-node-status-agent WORKDIR /usr/src/nym/nym-node-status-api/nym-node-status-agent
RUN cargo build --release RUN cargo build --release
@@ -35,7 +31,7 @@ RUN apt-get update && apt-get install -y ca-certificates
WORKDIR /nym WORKDIR /nym
COPY --from=builder /usr/src/nym/target/release/nym-node-status-agent ./ COPY --from=builder /usr/src/nym/target/release/nym-node-status-agent ./
COPY --from=builder /usr/src/nym-vpn-client/nym-vpn-core/target/release/nym-gateway-probe ./ COPY --from=builder /usr/src/nym/target/release/nym-gateway-probe ./
COPY --from=builder /usr/src/nym/nym-node-status-api/nym-node-status-agent/entrypoint.sh ./ COPY --from=builder /usr/src/nym/nym-node-status-api/nym-node-status-agent/entrypoint.sh ./
RUN chmod +x /nym/entrypoint.sh RUN chmod +x /nym/entrypoint.sh
+1 -1
View File
@@ -3,7 +3,7 @@
[package] [package]
name = "nym-node" name = "nym-node"
version = "1.19.0" version = "1.20.0"
authors.workspace = true authors.workspace = true
repository.workspace = true repository.workspace = true
homepage.workspace = true homepage.workspace = true
+6 -10
View File
@@ -720,15 +720,11 @@ where
base_builder = base_builder.with_topology_provider(topology_provider); base_builder = base_builder.with_topology_provider(topology_provider);
} }
// Use custom shutdown if provided, otherwise get from registry // Use custom shutdown if provided, otherwise the sdk one will be used later down the line
let shutdown_tracker = match self.custom_shutdown { if let Some(shutdown_tracker) = self.custom_shutdown {
Some(custom) => custom, base_builder = base_builder.with_shutdown(shutdown_tracker);
None => { }
// Auto-create from registry for SDK use
nym_task::get_sdk_shutdown_tracker()?
}
};
base_builder = base_builder.with_shutdown(shutdown_tracker);
if let Some(event_tx) = self.event_tx { if let Some(event_tx) = self.event_tx {
base_builder = base_builder.with_event_tx(event_tx); base_builder = base_builder.with_event_tx(event_tx);
} }
@@ -793,7 +789,7 @@ where
client_output, client_output,
client_state.clone(), client_state.clone(),
nym_address, nym_address,
started_client.shutdown_handle.child_tracker(), started_client.shutdown_handle.clone(),
packet_type, packet_type,
); );
@@ -4,7 +4,7 @@
[package] [package]
name = "nym-network-requester" name = "nym-network-requester"
license = "GPL-3.0" license = "GPL-3.0"
version = "1.1.65" version = "1.1.66"
authors.workspace = true authors.workspace = true
edition.workspace = true edition.workspace = true
rust-version = "1.85" rust-version = "1.85"
+1 -1
View File
@@ -1,6 +1,6 @@
[package] [package]
name = "nym-cli" name = "nym-cli"
version = "1.1.64" version = "1.1.65"
authors.workspace = true authors.workspace = true
edition = "2021" edition = "2021"
license.workspace = true license.workspace = true
+1 -1
View File
@@ -1,6 +1,6 @@
[package] [package]
name = "nymvisor" name = "nymvisor"
version = "0.1.29" version = "0.1.30"
authors.workspace = true authors.workspace = true
repository.workspace = true repository.workspace = true
homepage.workspace = true homepage.workspace = true