Woodpecker-Include/src/main/java/io/gitlab/jfronny/woodpecker/include/Main.java

47 lines
2.0 KiB
Java

package io.gitlab.jfronny.woodpecker.include;
import com.amihaiemil.eoyaml.*;
import io.gitlab.jfronny.commons.HttpUtils;
import io.gitlab.jfronny.commons.serialize.Serializer;
import io.gitlab.jfronny.commons.serialize.gson.api.v1.GsonHolders;
import io.gitlab.jfronny.woodpecker.include.model.*;
import io.gitlab.jfronny.woodpecker.include.util.YamlTypeAdapter;
import net.freeutils.httpserver.HTTPServer;
import java.io.*;
import java.util.concurrent.atomic.AtomicBoolean;
public class Main {
public static void main(String[] args) throws IOException {
if (args.length != 1) {
System.err.println("Usage: woodpecker-include <port>");
return;
}
HTTPServer server = new HTTPServer(Integer.parseInt(args[0]));
HTTPServer.VirtualHost host = server.getVirtualHost(null);
GsonHolders.registerSerializer();
GsonHolders.registerTypeAdapter(YamlMapping.class, new YamlTypeAdapter());
HttpUtils.setUserAgent("Woodpecker-Include/1.0");
host.addContext("/ciconfig", (req, resp) -> {
try {
RequestModel request;
try (var isr = new InputStreamReader(req.getBody())) {
request = Serializer.getInstance().deserialize(isr, RequestModel.class);
}
AtomicBoolean changed = new AtomicBoolean(false);
ResponseModel response = new ResponseModel(request.configs.stream().mapMulti(new PipelineUnpacker(changed)).toList());
if (changed.get()) {
try (OutputStreamWriter writer = new OutputStreamWriter(resp.getBody())) {
Serializer.getInstance().serialize(response, writer);
}
return 0;
} else return 204;
} catch (UncheckedIOException e) {
throw e.getCause();
}
}, "POST");
server.start();
System.out.println("Running Woodpecker-Include");
}
}