ln.build/ln.build.server/Program.cs

100 lines
3.1 KiB
C#

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<ServiceWorker>();
});
*/
}
}