using System; using System.Collections.Generic; using ln.http; using ln.http.router; using ln.json; using ln.logging; using ln.type; using ln.threading; using ln.build; using ln.build.repositories; using Microsoft.VisualBasic; using ln.application; using System.IO; using ln.build.repositories.gitea; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.DependencyInjection; using ln.build.semver; using ln.build.pipeline; namespace ln.build.server { public enum RunMode { serv, versioning, build } class Program { static CIService CIService; [StaticArgument( Option = 'm')] static RunMode RunMode { get; set; } = RunMode.serv; [StaticArgument( LongOption = "build")] static string BuildPath { get; set; } [StaticArgument( LongOption = "build-secret")] static string BuildSecret { get; set; } [StaticArgument( LongOption = "versioning-provider")] static string VersioningProviderName { get; set; } [StaticArgument( LongOption = "versioning-level")] static SemVerLevels VersioningLevel { get; set;} = SemVerLevels.PATCH; [StaticArgument( LongOption = "versioning-source")] static string VersioningSource { get; set;} static void Main(string[] args) { ArgumentContainer ac = new ArgumentContainer(typeof(Program)); CIService = new CIService(); ac.AddOptions(CIService); ac.Parse(ref args); CIService.Initialize(); switch (RunMode) { case RunMode.serv: CIService.AddWebHookHandler("gitea", GiteaRepository.WebHookHandler); CIService.Start(); break; case RunMode.build: CIJob job = new CIJob(CIService, null, (BuildSecret != null) ? CIService.GetSecretStorage(BuildSecret) : null); job.WorkingDirectory = BuildPath; job.Environment.WorkingDirectory = BuildPath; job.RunJob(); break; case RunMode.versioning: Versioning versioning = new Versioning(VersioningProviderName); versioning.Sources = new string[]{ VersioningSource }; SemVersion version = versioning.GetCurrentVersion(null); Logging.Log("INFO: found version {0}", version); version.Increment(VersioningLevel); Logging.Log("INFO: write back version {0}", version); versioning.SetVersion(null, version); break; } } /* public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .UseSystemd() .ConfigureServices((hostContext, services) => { services.AddHostedService(); }); */ } }