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

94 lines
3.3 KiB
C#
Raw Normal View History

2020-11-27 22:12:01 +01:00
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;
namespace ln.build.server
{
class Program
{
2020-11-28 01:08:49 +01:00
static CIService CIService;
2020-11-27 22:12:01 +01:00
static HttpResponse WebHookRequest(HttpRoutingContext context, HttpRequest request)
{
HttpResponse response = new HttpResponse(request);
if (!request.Method.Equals("POST"))
{
response.StatusCode = 405;
} else if (!request.GetRequestHeader("content-type").Equals("application/json"))
{
response.StatusCode = 415;
response.ContentWriter.WriteLine("Unsupported Media Type, should be application/json");
} else {
JSONValue jsonRequest = JSONParser.Parse(request.ContentReader.ReadToEnd());
if (jsonRequest is JSONObject message)
{
try
{
string cloneUrl = message["repository"]["clone_url"].ToNative().ToString();
foreach (JSONValue commit in (message["commits"] as JSONArray).Children)
{
string commitID = commit["id"].ToNative().ToString();
2020-11-28 01:08:49 +01:00
Logging.Log("Received CI request of repository {0} for commit {1}", cloneUrl, commitID);
2020-11-27 22:12:01 +01:00
2020-11-28 01:08:49 +01:00
CIJob job = new CIJob(cloneUrl)
.SetVariable("REPO_OWNER", message["repository"]["owner"]["username"].ToNative().ToString())
.SetVariable("REPO_NAME", message["repository"]["name"].ToNative().ToString())
.SetVariable("COMMIT_ID", commitID)
.SetVariable("NOTIFY", message["pusher"]["email"].ToNative().ToString())
.SetVariable("NUGET_APIKEY", "3yAJPMxcaEhb_HP62dxK")
.SetVariable("NUGET_SOURCE", "http://nuget.l--n.de/nuget/l--n/v3/index.json")
;
2020-11-27 22:12:01 +01:00
job.UpdateBuildState(BuildState.PENDING);
2020-11-28 01:08:49 +01:00
CIService.Enqueue(job);
2020-11-27 22:12:01 +01:00
}
} catch (Exception e)
{
response.StatusCode = 500;
response.StatusMessage = "An exception occured";
response.ContentWriter.WriteLine("{0}", e.ToString());
Logging.Log(e);
}
} else {
response.StatusCode = 400;
}
}
return response;
}
static void Main(string[] args)
{
2020-11-28 01:08:49 +01:00
CIService = new CIService();
CIService.Start();
CIService.AddPipeline(new DotNetPipeLine());
2020-11-27 22:12:01 +01:00
2020-11-28 01:08:49 +01:00
2020-11-27 22:12:01 +01:00
SimpleRouter genericRouter = new SimpleRouter();
genericRouter.AddSimpleRoute("/", WebHookRequest);
HTTPServer httpServer = new HTTPServer(new Endpoint(IPv6.ANY, 1888), new LoggingRouter(genericRouter));
Logging.Log("Starting http listener...");
httpServer.Start();
}
}
}