public static JenkinsBuild GetLatestBuild(string baseUri, string versionBase, bool stable = true) { JenkinsBuild result = null; if (!(baseUri.EndsWith("/"))) { baseUri = baseUri + "/"; } // http://jenkins.mumech.com/job/MechJeb2/lastStableBuild/api/json string json = Call(baseUri + "lastStableBuild/api/json"); JObject build = JObject.Parse(json); if (build != null) { string buildNumber = (string)build ["number"]; JArray artifacts = (JArray)build ["artifacts"]; log.DebugFormat(" Parsing artifacts from {0}", artifacts); foreach (JObject artifact in artifacts.Children()) { log.DebugFormat(" Parsing artifact from {0}", artifact); string fileName = (string)artifact ["fileName"]; // TODO - filtering of artifacts, for now hardcoded for zip files. if (fileName.EndsWith(".zip")) { result = new JenkinsBuild(artifact, versionBase, buildNumber, baseUri, stable); } } } return(result); }
/// <summary> /// Fetch Metadata from (successful) Jenkins builds /// Returns a JObject that should be a fully formed CKAN file. /// </summary> internal static JObject Jenkins(JObject orig_metadata, string remote_id, NetFileCache cache) { string versionBase = (string)orig_metadata ["x_ci_version_base"]; log.DebugFormat("versionBase: {0}", versionBase); JObject resources = (JObject)orig_metadata ["resources"]; log.DebugFormat("resources: {0}", resources); string baseUri = (string)resources ["ci"]; if (baseUri == null) { // Fallback, we don't have the defined resource 'ci' in the schema yet... baseUri = (string)resources ["x_ci"]; } log.DebugFormat("baseUri: {0}", baseUri); JenkinsBuild build = JenkinsAPI.GetLatestBuild(baseUri, versionBase, true); Version version = build.version; log.DebugFormat("Mod: {0} {1}", remote_id, version); // Find the latest download. string filename = build.Download((string)orig_metadata["identifier"], cache); JObject metadata = MetadataFromFileOrDefault(filename, orig_metadata); // Check if we should auto-inflate. string kref = (string)metadata[expand_token]; if (kref == (string)orig_metadata[expand_token] || kref == "#/ckan/kerbalstuff") { log.InfoFormat("Inflating from Jenkins... {0}", metadata[expand_token]); build.InflateMetadata(metadata, filename, null); metadata.Remove(expand_token); } else { log.WarnFormat("Not inflating metadata for {0}", orig_metadata["identifier"]); } return(metadata); }