예제 #1
0
        /// <summary>
        /// Get all of the <see cref="JobId"/> values that are children of the provided
        /// value.  The provided value can be a folder, the root or even a normal job. The
        /// latter of which simply will not have any children.
        /// </summary>
        public List <JobId> GetJobIds(JobId parent = null)
        {
            parent = parent ?? JobId.Root;
            var data = GetJson(JenkinsUtil.GetJobPath(parent));

            return(JsonUtil.ParseJobs(parent, (JArray)data["jobs"]));
        }
예제 #2
0
        public static bool TryConvertPathToJobId(string path, out JobId jobId)
        {
            var items = path.Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries);

            if (items.Length % 2 != 0)
            {
                jobId = null;
                return(false);
            }

            var current = JobId.Root;

            for (var i = 0; i < items.Length; i += 2)
            {
                if (items[i] != "job")
                {
                    jobId = null;
                    return(false);
                }

                current = new JobId(shortName: items[i + 1], parent: current);
            }

            jobId = current;
            return(true);
        }
예제 #3
0
 public QueuedItemInfo(int id, JobId jobId, PullRequestInfo prInfo, int?buildNumber)
 {
     Id              = id;
     JobId           = jobId;
     PullRequestInfo = prInfo;
     BuildNumber     = buildNumber;
 }
예제 #4
0
        public string GetJobKind(JobId id)
        {
            var json = GetJson(JenkinsUtil.GetJobIdPath(id));
            var xml  = GetXml(JenkinsUtil.GetJobIdPath(id));

            return(XmlUtil.ParseJobKind(xml));
        }
예제 #5
0
        public JobInfo GetJobInfo(JobId id)
        {
            var json = GetJson(JenkinsUtil.GetJobPath(id));
            var xml  = GetXml(JenkinsUtil.GetJobPath(id));

            return(GetJobInfoCore(id, json, xml));
        }
예제 #6
0
        public static string ConvertJobIdToPath(JobId jobId)
        {
            var builder = new StringBuilder();

            ConvertJobIdToPathCore(builder, jobId);
            return(builder.ToString());
        }
예제 #7
0
        public async Task <List <JobId> > GetJobIdsAsync(JobId parent = null)
        {
            parent = parent ?? JobId.Root;
            var data = await GetJsonAsync(JenkinsUtil.GetJobPath(parent));

            return(JsonUtil.ParseJobs(parent, (JArray)data["jobs"]));
        }
예제 #8
0
        private static JobInfo GetJobInfoCore(JobId id, JObject json, XElement xml)
        {
            var builds = JsonUtil.ParseBuilds(id, (json["builds"] as JArray) ?? new JArray()) ?? new List <BuildId>(capacity: 0);
            var jobs   = JsonUtil.ParseJobs(id, (json["jobs"] as JArray) ?? new JArray()) ?? new List <JobId>(capacity: 0);
            var kind   = XmlUtil.ParseJobKind(xml);

            return(new JobInfo(id, kind, builds, jobs));
        }
예제 #9
0
        public async Task <JobInfo> GetJobInfoAsync(JobId id)
        {
            var json = await GetJsonAsync(JenkinsUtil.GetJobPath(id));

            var xml = await GetXmlAsync(JenkinsUtil.GetJobPath(id));

            return(GetJobInfoCore(id, json, xml));
        }
예제 #10
0
        public async Task <string> GetJobKindAsync(JobId id)
        {
            var json = await GetJsonAsync(JenkinsUtil.GetJobIdPath(id));

            var xml = GetXml(JenkinsUtil.GetJobIdPath(id));

            return(XmlUtil.ParseJobKind(xml));
        }
예제 #11
0
        internal static BuildInfo ParseBuildInfo(JobId jobId, JObject build)
        {
            var id          = build.Value <int>("id");
            var duration    = TimeSpan.FromMilliseconds(build.Value <int>("duration"));
            var state       = ParseBuildInfoState(build);
            var date        = JenkinsUtil.ConvertTimestampToDateTimeOffset(build.Value <long>("timestamp"));
            var buildId     = new BuildId(id, jobId);
            var machineName = build.Value <string>("builtOn");

            return(new BuildInfo(buildId, state, date, duration, machineName));
        }
예제 #12
0
        public JobInfo(JobId id, string jobKind, List <BuildId> builds = null, List <JobId> jobs = null)
        {
            Debug.Assert(jobs.All(x => x.Parent.Name == id.Name));
            builds = builds ?? new List <BuildId>(capacity: 0);
            jobs   = jobs ?? new List <JobId>(capacity: 0);

            Id      = id;
            Builds  = builds;
            Jobs    = jobs;
            JobKind = jobKind;
        }
예제 #13
0
        internal static List <BuildInfo> ParseBuildInfoList(JobId jobId, JObject data)
        {
            var list   = new List <BuildInfo>();
            var builds = (JArray)data["builds"];

            foreach (JObject build in builds)
            {
                list.Add(ParseBuildInfo(jobId, build));
            }

            return(list);
        }
예제 #14
0
        internal static List <BuildId> ParseBuilds(JobId id, JArray builds)
        {
            Debug.Assert(builds != null);
            var list = new List <BuildId>();

            foreach (var cur in builds)
            {
                var build = cur.ToObject <Json.Build>();
                list.Add(new BuildId(build.Number, id));
            }

            return(list);
        }
예제 #15
0
        public static string GetJobPath(JobId id)
        {
            if (id.IsRoot)
            {
                return("");
            }

            if (id.Parent.IsRoot)
            {
                return($"job/{id.ShortName}");
            }

            return($"{GetJobPath(id.Parent)}/job/{id.ShortName}");
        }
예제 #16
0
        public static bool IsAuthNeededHeuristic(JobId jobId)
        {
            // TODO: Bit of a hack.  Avoiding API rate limit issues by using a hueristic of
            // when to do authentication.
            var name = jobId.Name;

            if (name.Contains("Private") ||
                name.Contains("perf_win10") ||
                name.Contains("dotnet_citest"))
            {
                return(true);
            }

            return(false);
        }
예제 #17
0
        private static void ConvertJobIdToPathCore(StringBuilder builder, JobId jobId)
        {
            if (jobId.IsRoot)
            {
                return;
            }

            ConvertJobIdToPathCore(builder, jobId.Parent);

            if (builder.Length != 0)
            {
                builder.Append('/');
            }

            builder.Append($"job/{jobId.ShortName}");
        }
예제 #18
0
        internal static List <JobId> ParseJobs(JobId parent, JArray jobs)
        {
            if (jobs == null)
            {
                return(new List <JobId>(capacity: 0));
            }

            var list = new List <JobId>();

            foreach (var cur in jobs)
            {
                var name = cur.Value <string>("name");
                var id   = new JobId(name, parent);
                list.Add(id);
            }

            return(list);
        }
예제 #19
0
 public static string GetJobDisablePath(JobId jobId)
 {
     return($"{GetJobPath(jobId)}/disable");
 }
예제 #20
0
 public static string GetJobEnablePath(JobId jobId)
 {
     return($"{GetJobPath(jobId)}/enable");
 }
예제 #21
0
 public static string GetJobDeletePath(JobId jobId)
 {
     return($"{GetJobPath(jobId)}/doDelete");
 }
예제 #22
0
 public BuildId(int number, JobId jobId)
 {
     Number = number;
     JobId  = jobId;
 }
예제 #23
0
        public static Uri GetJobUri(Uri baseUrl, JobId jobId)
        {
            var path = GetJobPath(jobId);

            return(GetUri(baseUrl, path));
        }
예제 #24
0
 public BoundBuildId(Uri host, int number, JobId id) : this(host, new BuildId(number, id))
 {
 }
예제 #25
0
        /// <summary>
        /// Get all of the <see cref="BuildInfo"/> values for the specified <see cref="JobId"/>.
        /// </summary>
        public List <BuildInfo> GetBuildInfoList(JobId id)
        {
            var data = GetJson(JenkinsUtil.GetJobPath(id), tree: JsonUtil.BuildInfoListTreeFilter, depth: 2);

            return(JsonUtil.ParseBuildInfoList(Host, id, data));
        }
예제 #26
0
        public async Task <List <BuildInfo> > GetBuildInfoListAsync(JobId id)
        {
            var data = await GetJsonAsync(JenkinsUtil.GetJobPath(id), tree : JsonUtil.BuildInfoListTreeFilter, depth : 2);

            return(JsonUtil.ParseBuildInfoList(Host, id, data));
        }
예제 #27
0
 public bool JobDisable(JobId jobId)
 {
     return(DoAction(JenkinsUtil.GetJobDisablePath(jobId)));
 }
예제 #28
0
        public async Task <List <BuildId> > GetBuildIdsAsync(JobId jobId)
        {
            var data = await GetJsonAsync(JenkinsUtil.GetJobPath(jobId));

            return(JsonUtil.ParseBuilds(jobId, (JArray)data["builds"] ?? new JArray()));
        }
예제 #29
0
        public List <BuildId> GetBuildIds(JobId jobId)
        {
            var data = GetJson(JenkinsUtil.GetJobPath(jobId));

            return(JsonUtil.ParseBuilds(jobId, (JArray)data["builds"] ?? new JArray()));
        }
예제 #30
0
 public async Task <bool> JobDisableAsync(JobId jobId)
 {
     return(await DoActionAsync(JenkinsUtil.GetJobDisablePath(jobId)));
 }