package io.gitlab.jfronny.inceptum.common.api; import io.gitlab.jfronny.commons.HttpUtils; import io.gitlab.jfronny.gson.compile.util.GList; import io.gitlab.jfronny.gson.stream.JsonReader; import io.gitlab.jfronny.inceptum.common.model.gitlab.*; import java.io.IOException; import java.io.Reader; import java.net.URISyntaxException; import java.util.List; import java.util.function.Predicate; public class GitlabApi { public static final String PROJECTS = "https://gitlab.com/api/v4/projects/"; public static final long PROJECT_ID = 30862253L; public static final String PROJECT_MAVEN = "https://gitlab.com/api/v4/projects/" + PROJECT_ID + "/packages/maven/"; public static GitlabProject getProject(Long projectId) throws IOException, URISyntaxException { try (Reader r = HttpUtils.get(PROJECTS + projectId).sendReader()) { return GC_GitlabProject.read(r); } } public static List getPackages(GitlabProject project) throws IOException, URISyntaxException { try (JsonReader r = new JsonReader(HttpUtils.get(PROJECTS + project.id + "/packages?order_by=created_at&sort=desc").sendReader())) { return GList.read(r, GC_GitlabPackage::read); } } public static List getJobs(GitlabProject project, Long pipelineId) throws IOException, URISyntaxException { try (JsonReader r = new JsonReader(HttpUtils.get(PROJECTS + project.id + "/pipelines/" + pipelineId + "/jobs").sendReader())) { List list = GList.read(r, GC_GitlabJob::read); list.sort((left, right) -> right.created_at.compareTo(left.created_at)); return list; } } public static GitlabPackageFile getFile(GitlabProject project, GitlabPackage packageInfo, Predicate isValid) throws IOException, URISyntaxException { int page = 0; while (true) { try (JsonReader r = new JsonReader(HttpUtils.get(PROJECTS + project.id + "/packages/" + packageInfo.id + "/package_files?per_page=100&page=" + ++page).sendReader())) { List files = GList.read(r, GC_GitlabPackageFile::read); if (files.isEmpty()) return null; for (GitlabPackageFile file : files) { if (isValid.test(file)) return file; } } } } }