Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        /// <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);
        }