From 0fcd2b45bfefbc1c7bf31af35be07b5c87f9020b Mon Sep 17 00:00:00 2001 From: Patrick Stevens Date: Thu, 29 Dec 2022 23:37:36 +0000 Subject: [PATCH] Use Argu in app (#3) --- Gitea.App/Gitea.App.fsproj | 1 + Gitea.App/Program.fs | 47 ++++++++++++++++++++++++++++++-------- nix/deps.nix | 15 ++++++++++++ 3 files changed, 54 insertions(+), 9 deletions(-) diff --git a/Gitea.App/Gitea.App.fsproj b/Gitea.App/Gitea.App.fsproj index f74ccb4..9a4258c 100644 --- a/Gitea.App/Gitea.App.fsproj +++ b/Gitea.App/Gitea.App.fsproj @@ -14,6 +14,7 @@ + diff --git a/Gitea.App/Program.fs b/Gitea.App/Program.fs index 6b001a3..ca9d009 100644 --- a/Gitea.App/Program.fs +++ b/Gitea.App/Program.fs @@ -6,6 +6,30 @@ open System.Net.Http open Microsoft.Extensions.Logging open Microsoft.Extensions.Logging.Console open Microsoft.Extensions.Options +open Argu + +type ArgsFragments = + | [] Config_File of string + | [] Gitea_Host of string + | [] Gitea_Admin_Api_Token of string + | [] GitHub_Api_Token of string + + interface IArgParserTemplate with + member s.Usage = + match s with + | Config_File _ -> + "a config file, JSON, conforming to GiteaConfig.schema.json, specifying the desired Gitea configuration" + | Gitea_Host _ -> "the Gitea host, e.g. https://gitea.mydomain.com" + | Gitea_Admin_Api_Token _ -> "a Gitea admin user's API token" + | GitHub_Api_Token _ -> "a GitHub API token with read access to every desired sync-from-GitHub repo" + +type Args = + { + ConfigFile : FileInfo + GiteaHost : Uri + GiteaAdminApiToken : string + GitHubApiToken : string option + } module Program = @@ -129,13 +153,18 @@ module Program = [] let main argv = - let configFile, giteaHost, giteaApiToken, githubApiToken = - match argv with - | [| f ; giteaHost ; giteaToken |] -> FileInfo f, Uri giteaHost, giteaToken, None - | [| f ; giteaHost ; giteaToken ; githubToken |] -> FileInfo f, Uri giteaHost, giteaToken, Some githubToken - | _ -> failwithf $"malformed args: %+A{argv}" + let parser = ArgumentParser.Create () + let parsed = parser.Parse argv - let config = GiteaConfig.get configFile + let args = + { + ConfigFile = parsed.GetResult ArgsFragments.Config_File |> FileInfo + GiteaHost = parsed.GetResult ArgsFragments.Gitea_Host |> Uri + GiteaAdminApiToken = parsed.GetResult ArgsFragments.Gitea_Admin_Api_Token + GitHubApiToken = parsed.TryGetResult ArgsFragments.GitHub_Api_Token + } + + let config = GiteaConfig.get args.ConfigFile let options = let options = ConsoleLoggerOptions () @@ -154,8 +183,8 @@ module Program = let logger = loggerProvider.CreateLogger "Gitea.App" use client = new HttpClient () - client.BaseAddress <- giteaHost - client.DefaultRequestHeaders.Add ("Authorization", $"token {giteaApiToken}") + client.BaseAddress <- args.GiteaHost + client.DefaultRequestHeaders.Add ("Authorization", $"token {args.GiteaAdminApiToken}") let client = Gitea.Client client @@ -172,7 +201,7 @@ module Program = match repoErrors with | Ok () -> () - | Error errors -> do! Gitea.reconcileRepoErrors logger client githubApiToken errors + | Error errors -> do! Gitea.reconcileRepoErrors logger client args.GitHubApiToken errors match userErrors, repoErrors with | Ok (), Ok () -> return 0 diff --git a/nix/deps.nix b/nix/deps.nix index b034947..d9f5262 100644 --- a/nix/deps.nix +++ b/nix/deps.nix @@ -1,6 +1,11 @@ # This file was automatically generated by passthru.fetch-deps. # Please don't edit it manually, your changes might get overwritten! {fetchNuGet}: [ + (fetchNuGet { + pname = "Argu"; + version = "6.1.1"; + sha256 = "1v996g0760qhiys2ahdpnvkldaxr2jn5f1falf789glnk4a6f3xl"; + }) (fetchNuGet { pname = "coverlet.collector"; version = "3.1.2"; @@ -556,6 +561,11 @@ version = "4.3.0"; sha256 = "0wi10md9aq33jrkh2c24wr2n9hrpyamsdhsxdcnf43b7y86kkii8"; }) + (fetchNuGet { + pname = "System.Configuration.ConfigurationManager"; + version = "4.4.0"; + sha256 = "1hjgmz47v5229cbzd2pwz2h0dkq78lb2wp9grx8qr72pb5i0dk7v"; + }) (fetchNuGet { pname = "System.Diagnostics.Debug"; version = "4.0.11"; @@ -816,6 +826,11 @@ version = "4.3.0"; sha256 = "0pyzncsv48zwly3lw4f2dayqswcfvdwq2nz0dgwmi7fj3pn64wby"; }) + (fetchNuGet { + pname = "System.Security.Cryptography.ProtectedData"; + version = "4.4.0"; + sha256 = "1q8ljvqhasyynp94a1d7jknk946m20lkwy2c3wa8zw2pc517fbj6"; + }) (fetchNuGet { pname = "System.Security.Cryptography.X509Certificates"; version = "4.3.0";