Skip to content

Commit f8063d3

Browse files
committed
Pin a Build by ConfigId and BuildNumber
Added a Function to Pin a Build by providing the ConfigId and BuildNumber. You can provide a Message which will show up as comment to the pinned Build.
1 parent 5440a71 commit f8063d3

File tree

2 files changed

+122
-114
lines changed

2 files changed

+122
-114
lines changed

src/TeamCitySharp/ActionTypes/Builds.cs

+121-114
Original file line numberDiff line numberDiff line change
@@ -7,143 +7,150 @@
77

88
namespace TeamCitySharp.ActionTypes
99
{
10-
internal class Builds : IBuilds
11-
{
12-
private readonly TeamCityCaller _caller;
13-
14-
internal Builds(TeamCityCaller caller)
15-
{
16-
_caller = caller;
17-
}
18-
19-
public List<Build> ByBuildLocator(BuildLocator locator)
20-
{
21-
var buildWrapper = _caller.GetFormat<BuildWrapper>("/app/rest/builds?locator={0}", locator);
22-
if (int.Parse(buildWrapper.Count) > 0)
23-
{
24-
return buildWrapper.Build;
25-
}
26-
return new List<Build>();
27-
}
28-
29-
public Build LastBuildByAgent(string agentName)
30-
{
31-
return ByBuildLocator(BuildLocator.WithDimensions(
10+
internal class Builds : IBuilds
11+
{
12+
private readonly TeamCityCaller _caller;
13+
14+
internal Builds(TeamCityCaller caller)
15+
{
16+
_caller = caller;
17+
}
18+
19+
public List<Build> ByBuildLocator(BuildLocator locator)
20+
{
21+
var buildWrapper = _caller.GetFormat<BuildWrapper>("/app/rest/builds?locator={0}", locator);
22+
if (int.Parse(buildWrapper.Count) > 0)
23+
{
24+
return buildWrapper.Build;
25+
}
26+
27+
return new List<Build>();
28+
}
29+
30+
public Build LastBuildByAgent(string agentName)
31+
{
32+
return ByBuildLocator(BuildLocator.WithDimensions(
3233
agentName: agentName,
3334
maxResults: 1
34-
)).SingleOrDefault();
35-
}
35+
)).SingleOrDefault();
36+
}
3637

37-
public void Add2QueueBuildByBuildConfigId(string buildConfigId)
38-
{
39-
_caller.GetFormat("/action.html?add2Queue={0}", buildConfigId);
40-
}
38+
public void Add2QueueBuildByBuildConfigId(string buildConfigId)
39+
{
40+
_caller.GetFormat("/action.html?add2Queue={0}", buildConfigId);
41+
}
4142

42-
public List<Build> SuccessfulBuildsByBuildConfigId(string buildConfigId)
43-
{
44-
return ByBuildLocator(BuildLocator.WithDimensions(BuildTypeLocator.WithId(buildConfigId),
43+
public List<Build> SuccessfulBuildsByBuildConfigId(string buildConfigId)
44+
{
45+
return ByBuildLocator(BuildLocator.WithDimensions(BuildTypeLocator.WithId(buildConfigId),
4546
status: BuildStatus.SUCCESS
46-
));
47-
}
47+
));
48+
}
4849

49-
public Build LastSuccessfulBuildByBuildConfigId(string buildConfigId)
50-
{
51-
var builds = ByBuildLocator(BuildLocator.WithDimensions(BuildTypeLocator.WithId(buildConfigId),
50+
public Build LastSuccessfulBuildByBuildConfigId(string buildConfigId)
51+
{
52+
var builds = ByBuildLocator(BuildLocator.WithDimensions(BuildTypeLocator.WithId(buildConfigId),
5253
status: BuildStatus.SUCCESS,
5354
maxResults: 1
54-
));
55-
return builds != null ? builds.FirstOrDefault() : new Build();
56-
}
55+
));
56+
return builds != null ? builds.FirstOrDefault() : new Build();
57+
}
5758

58-
public List<Build> FailedBuildsByBuildConfigId(string buildConfigId)
59-
{
60-
return ByBuildLocator(BuildLocator.WithDimensions(BuildTypeLocator.WithId(buildConfigId),
59+
public List<Build> FailedBuildsByBuildConfigId(string buildConfigId)
60+
{
61+
return ByBuildLocator(BuildLocator.WithDimensions(BuildTypeLocator.WithId(buildConfigId),
6162
status: BuildStatus.FAILURE
62-
));
63-
}
63+
));
64+
}
6465

65-
public Build LastFailedBuildByBuildConfigId(string buildConfigId)
66-
{
67-
var builds = ByBuildLocator(BuildLocator.WithDimensions(BuildTypeLocator.WithId(buildConfigId),
66+
public Build LastFailedBuildByBuildConfigId(string buildConfigId)
67+
{
68+
var builds = ByBuildLocator(BuildLocator.WithDimensions(BuildTypeLocator.WithId(buildConfigId),
6869
status: BuildStatus.FAILURE,
6970
maxResults: 1
70-
));
71-
return builds != null ? builds.FirstOrDefault() : new Build();
72-
}
71+
));
72+
return builds != null ? builds.FirstOrDefault() : new Build();
73+
}
7374

74-
public Build LastBuildByBuildConfigId(string buildConfigId)
75-
{
76-
var builds = ByBuildLocator(BuildLocator.WithDimensions(BuildTypeLocator.WithId(buildConfigId),
75+
public Build LastBuildByBuildConfigId(string buildConfigId)
76+
{
77+
var builds = ByBuildLocator(BuildLocator.WithDimensions(BuildTypeLocator.WithId(buildConfigId),
7778
maxResults: 1
78-
));
79-
return builds != null ? builds.FirstOrDefault() : new Build();
80-
}
79+
));
80+
return builds != null ? builds.FirstOrDefault() : new Build();
81+
}
8182

82-
public List<Build> ErrorBuildsByBuildConfigId(string buildConfigId)
83-
{
84-
return ByBuildLocator(BuildLocator.WithDimensions(BuildTypeLocator.WithId(buildConfigId),
83+
public List<Build> ErrorBuildsByBuildConfigId(string buildConfigId)
84+
{
85+
return ByBuildLocator(BuildLocator.WithDimensions(BuildTypeLocator.WithId(buildConfigId),
8586
status: BuildStatus.ERROR
86-
));
87-
}
87+
));
88+
}
8889

89-
public Build LastErrorBuildByBuildConfigId(string buildConfigId)
90-
{
91-
var builds = ByBuildLocator(BuildLocator.WithDimensions(BuildTypeLocator.WithId(buildConfigId),
90+
public Build LastErrorBuildByBuildConfigId(string buildConfigId)
91+
{
92+
var builds = ByBuildLocator(BuildLocator.WithDimensions(BuildTypeLocator.WithId(buildConfigId),
9293
status: BuildStatus.ERROR,
9394
maxResults: 1
94-
));
95-
return builds != null ? builds.FirstOrDefault() : new Build();
96-
}
97-
98-
public List<Build> ByBuildConfigId(string buildConfigId)
99-
{
100-
return ByBuildLocator(BuildLocator.WithDimensions(BuildTypeLocator.WithId(buildConfigId)
101-
));
102-
}
103-
104-
public List<Build> ByConfigIdAndTag(string buildConfigId, string tag)
105-
{
106-
return ByConfigIdAndTag(buildConfigId, new[] { tag });
107-
}
108-
109-
public List<Build> ByConfigIdAndTag(string buildConfigId, string[] tags)
110-
{
111-
return ByBuildLocator(BuildLocator.WithDimensions(BuildTypeLocator.WithId(buildConfigId),
95+
));
96+
return builds != null ? builds.FirstOrDefault() : new Build();
97+
}
98+
99+
public List<Build> ByBuildConfigId(string buildConfigId)
100+
{
101+
return ByBuildLocator(BuildLocator.WithDimensions(BuildTypeLocator.WithId(buildConfigId)
102+
));
103+
}
104+
105+
public List<Build> ByConfigIdAndTag(string buildConfigId, string tag)
106+
{
107+
return ByConfigIdAndTag(buildConfigId, new[] { tag });
108+
}
109+
110+
public List<Build> ByConfigIdAndTag(string buildConfigId, string[] tags)
111+
{
112+
return ByBuildLocator(BuildLocator.WithDimensions(BuildTypeLocator.WithId(buildConfigId),
112113
tags: tags
113-
));
114-
}
114+
));
115+
}
115116

116-
public List<Build> ByUserName(string userName)
117-
{
118-
return ByBuildLocator(BuildLocator.WithDimensions(
117+
public List<Build> ByUserName(string userName)
118+
{
119+
return ByBuildLocator(BuildLocator.WithDimensions(
119120
user: UserLocator.WithUserName(userName)
120-
));
121-
}
122-
123-
public List<Build> AllSinceDate(DateTime date)
124-
{
125-
return ByBuildLocator(BuildLocator.WithDimensions(sinceDate: date));
126-
}
127-
128-
public List<Build> ByBranch(string branchName)
129-
{
130-
return ByBuildLocator(BuildLocator.WithDimensions(branch: branchName));
131-
}
132-
133-
public List<Build> AllBuildsOfStatusSinceDate(DateTime date, BuildStatus buildStatus)
134-
{
135-
return ByBuildLocator(BuildLocator.WithDimensions(sinceDate: date, status: buildStatus));
136-
}
137-
138-
public List<Build> NonSuccessfulBuildsForUser(string userName)
139-
{
140-
var builds = ByUserName(userName);
141-
if (builds == null)
142-
{
143-
return null;
144-
}
145-
146-
return builds.Where(b => b.Status != "SUCCESS").ToList();
121+
));
122+
}
123+
124+
public List<Build> AllSinceDate(DateTime date)
125+
{
126+
return ByBuildLocator(BuildLocator.WithDimensions(sinceDate: date));
127+
}
128+
129+
public List<Build> ByBranch(string branchName)
130+
{
131+
return ByBuildLocator(BuildLocator.WithDimensions(branch: branchName));
132+
}
133+
134+
public List<Build> AllBuildsOfStatusSinceDate(DateTime date, BuildStatus buildStatus)
135+
{
136+
return ByBuildLocator(BuildLocator.WithDimensions(sinceDate: date, status: buildStatus));
137+
}
138+
139+
public List<Build> NonSuccessfulBuildsForUser(string userName)
140+
{
141+
var builds = ByUserName(userName);
142+
if (builds == null)
143+
{
144+
return null;
145+
}
146+
147+
return builds.Where(b => b.Status != "SUCCESS").ToList();
148+
}
149+
150+
public void PinBuildByBuildNumber(string buildConfigId, string buildNumber, string message)
151+
{
152+
message = message == null? string.Empty : message;
153+
_caller.Put(message, "text/plain", string.Format("/app/rest/builds/buildType:{0},number:{1}/{2}/", buildConfigId, buildNumber, "pin"), null);
147154
}
148155
}
149156
}

src/TeamCitySharp/ActionTypes/IBuilds.cs

+1
Original file line numberDiff line numberDiff line change
@@ -24,5 +24,6 @@ public interface IBuilds
2424
List<Build> ByBranch(string branchName);
2525
Build LastBuildByAgent(string agentName);
2626
void Add2QueueBuildByBuildConfigId(string buildConfigId);
27+
void PinBuildByBuildNumber(string buildConfigId, string buildNumber, string message);
2728
}
2829
}

0 commit comments

Comments
 (0)