mirror of
https://github.com/DorkSquadRR/DorkNet.git
synced 2026-10-25 15:08:47 -07:00
fix(cli): exit 0 on --help so CI smoke test passes (#13)
* fix(cli): exit 0 on --help, handle parse errors cleanly --help printed usage but returned exit code 1, failing the CI smoke test. Treat --help / -h / no-args as a successful usage print (exit 0), and catch parser ArgumentExceptions so a missing value or bad --mode exits 1 with a message instead of an unhandled crash. * fix(cli): declare RuntimeIdentifiers so no-restore publish works CI restores without a RID then publishes per-RID with no-restore, which failed NETSDK1047 because the assets file had no RID targets. Declaring RuntimeIdentifiers makes the RID-less restore cover all of them.
This commit is contained in:
@@ -6,6 +6,10 @@
|
||||
alongside Windows. The shared Backend classes are written to
|
||||
OperatingSystem.IsWindows()-gate any Windows-only paths. -->
|
||||
<TargetFramework>net9.0</TargetFramework>
|
||||
<!-- Declared so a RID-less restore produces assets for every target the
|
||||
CI matrix / release pipeline later publishes with no-restore. Without
|
||||
this, RID-specific publish fails with NETSDK1047. -->
|
||||
<RuntimeIdentifiers>win-x64;linux-x64;linux-arm64;osx-x64;osx-arm64</RuntimeIdentifiers>
|
||||
<Nullable>enable</Nullable>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<RootNamespace>DorkNet.ServerCli</RootNamespace>
|
||||
|
||||
@@ -14,8 +14,15 @@ public static class Program
|
||||
{
|
||||
public static async Task<int> Main(string[] args)
|
||||
{
|
||||
// --help / -h (and a bare invocation) print usage and exit cleanly.
|
||||
if (args.Length == 0 || args.Contains("--help") || args.Contains("-h"))
|
||||
{
|
||||
PrintHelp();
|
||||
return 0;
|
||||
}
|
||||
|
||||
var parsed = ParseArgs(args);
|
||||
if (parsed is null) return 1; // ParseArgs already wrote --help or an error.
|
||||
if (parsed is null) return 1; // ParseArgs already wrote the error.
|
||||
|
||||
// Validate required values up front so the user sees the
|
||||
// failure before any download / process spin-up.
|
||||
@@ -216,50 +223,52 @@ public static class Program
|
||||
|
||||
private static ParsedArgs? ParseArgs(string[] args)
|
||||
{
|
||||
if (args.Length == 0 || args.Contains("--help") || args.Contains("-h"))
|
||||
{
|
||||
PrintHelp();
|
||||
return null;
|
||||
}
|
||||
|
||||
string photon = "", voice = "", region = "us";
|
||||
string mode = "localtunnel", apex = "", name = "DorkNet Server";
|
||||
string versionKey = "march_2020_03_10";
|
||||
string? serverDir = null;
|
||||
|
||||
for (int i = 0; i < args.Length; i++)
|
||||
try
|
||||
{
|
||||
string Next()
|
||||
for (int i = 0; i < args.Length; i++)
|
||||
{
|
||||
if (i + 1 >= args.Length)
|
||||
throw new ArgumentException($"missing value for {args[i]}");
|
||||
return args[++i];
|
||||
string Next()
|
||||
{
|
||||
if (i + 1 >= args.Length)
|
||||
throw new ArgumentException($"missing value for {args[i]}");
|
||||
return args[++i];
|
||||
}
|
||||
switch (args[i])
|
||||
{
|
||||
case "--photon-id": photon = Next(); break;
|
||||
case "--voice-id": voice = Next(); break;
|
||||
case "--region": region = Next(); break;
|
||||
case "--mode": mode = Next(); break;
|
||||
case "--apex": apex = Next(); break;
|
||||
case "--name": name = Next(); break;
|
||||
case "--version": versionKey = Next(); break;
|
||||
case "--server-dir": serverDir = Next(); break;
|
||||
default:
|
||||
Console.Error.WriteLine($"error: unknown arg '{args[i]}' (try --help)");
|
||||
return null;
|
||||
}
|
||||
}
|
||||
switch (args[i])
|
||||
|
||||
HostingMode parsedMode = mode.ToLowerInvariant() switch
|
||||
{
|
||||
case "--photon-id": photon = Next(); break;
|
||||
case "--voice-id": voice = Next(); break;
|
||||
case "--region": region = Next(); break;
|
||||
case "--mode": mode = Next(); break;
|
||||
case "--apex": apex = Next(); break;
|
||||
case "--name": name = Next(); break;
|
||||
case "--version": versionKey = Next(); break;
|
||||
case "--server-dir": serverDir = Next(); break;
|
||||
default:
|
||||
Console.Error.WriteLine($"error: unknown arg '{args[i]}' (try --help)");
|
||||
return null;
|
||||
}
|
||||
"localtunnel" or "lt" or "internet" or "tunnel" => HostingMode.SingleOriginTunnel,
|
||||
"wildcard" or "remote" or "tunnelto" => HostingMode.RemoteWildcard,
|
||||
"lan" or "local" or "wifi" => HostingMode.LocalNetwork,
|
||||
_ => throw new ArgumentException($"unknown --mode '{mode}' (try localtunnel, wildcard, lan)"),
|
||||
};
|
||||
|
||||
return new ParsedArgs(photon, voice, region, parsedMode, apex, name, versionKey, serverDir);
|
||||
}
|
||||
|
||||
HostingMode parsedMode = mode.ToLowerInvariant() switch
|
||||
catch (ArgumentException ex)
|
||||
{
|
||||
"localtunnel" or "lt" or "internet" or "tunnel" => HostingMode.SingleOriginTunnel,
|
||||
"wildcard" or "remote" or "tunnelto" => HostingMode.RemoteWildcard,
|
||||
"lan" or "local" or "wifi" => HostingMode.LocalNetwork,
|
||||
_ => throw new ArgumentException($"unknown --mode '{mode}' (try localtunnel, wildcard, lan)"),
|
||||
};
|
||||
|
||||
return new ParsedArgs(photon, voice, region, parsedMode, apex, name, versionKey, serverDir);
|
||||
Console.Error.WriteLine($"error: {ex.Message} (try --help)");
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private static void PrintHelp()
|
||||
|
||||
Reference in New Issue
Block a user