Eric 13d453d5ed
chore: Docker updates to support release tests in logos-storage-nim, and remove Codex references (#124)
* ci(docker): build dist-tests images

* Update to .net 10, kubernetes client 18.0.13

Kubernetes client 18.0.13 is compatible with Kubernetes 1.34.x. The Kubernetes version is selected automatically by kubeadm in docker desktop (v1.34.1). See https://github.com/kubernetes-client/csharp#version-compatibility for a compatibility table.

* Updates to support Kubernetes upgrade

* bump openapi.yaml to match openapi.yaml in the logos-storage-nim docker image

* bump doc to .net 10

* bump docker to .net 10

* Build image with latest tag always

Always build an image with a latest tag (as well as a sha commit hash) when there's a push to master

* docker image tag as "latest" only when pushing to master

* Update docker image to install doctl

* Remove doctl install

kubeconfig is now created and uses a plain bearer token instead of using doctl as a credential mgr

* Rename and remove all instances of Codex

* Further remove CodexNetDeployer as it is no longer needed

---------

Co-authored-by: Adam Uhlíř <adam@uhlir.dev>
2026-04-17 15:03:22 +10:00

44 lines
1.1 KiB
C#

using System.Net.NetworkInformation;
namespace StoragePlugin
{
public class FreePortFinder
{
private readonly object _lock = new object();
private int nextPort = 8080;
public int GetNextFreePort()
{
lock (_lock)
{
return Next();
}
}
private int Next()
{
while (true)
{
var p = nextPort;
nextPort++;
if (!IsInUse(p))
{
return p;
}
if (nextPort > 30000) throw new Exception("Running out of ports.");
}
}
private bool IsInUse(int port)
{
var ipProps = IPGlobalProperties.GetIPGlobalProperties();
if (ipProps.GetActiveTcpConnections().Any(t => t.LocalEndPoint.Port == port)) return true;
if (ipProps.GetActiveTcpListeners().Any(t => t.Port == port)) return true;
if (ipProps.GetActiveUdpListeners().Any(u => u.Port == port)) return true;
return false;
}
}
}