3
3
using System ;
4
4
using System . Net ;
5
5
using System . Text ;
6
+ #if ! NETDESKTOP
7
+ using System . Net . Http ;
8
+ using System . Threading . Tasks ;
9
+ using System . Net . Http . Headers ;
10
+ using Newtonsoft . Json ;
11
+ using System . IO ;
12
+ #endif
6
13
7
14
public class AppVeyor : BuildServerBase
8
15
{
@@ -13,6 +20,97 @@ public override bool CanApplyToCurrentContext()
13
20
return ! string . IsNullOrEmpty ( Environment . GetEnvironmentVariable ( EnvironmentVariableName ) ) ;
14
21
}
15
22
23
+ #if ! NETDESKTOP
24
+
25
+
26
+ public override string GenerateSetVersionMessage ( VersionVariables variables )
27
+ {
28
+
29
+ var buildNumber = Environment . GetEnvironmentVariable ( "APPVEYOR_BUILD_NUMBER" ) ;
30
+ var restBase = Environment . GetEnvironmentVariable ( "APPVEYOR_API_URL" ) ;
31
+
32
+ var request = ( HttpWebRequest ) WebRequest . Create ( restBase + "api/build" ) ;
33
+ request . Method = "PUT" ;
34
+
35
+
36
+ var data = string . Format ( "{{ \" version\" : \" {0}.build.{1}\" }}" , variables . FullSemVer , buildNumber ) ;
37
+ var bytes = Encoding . UTF8 . GetBytes ( data ) ;
38
+ if ( request . Headers == null )
39
+ {
40
+ request . Headers = new WebHeaderCollection ( ) ;
41
+ }
42
+ var bytesLength = bytes . Length ;
43
+ request . Headers [ "Content-Length" ] = bytesLength . ToString ( ) ;
44
+
45
+ // request.ContentLength = bytes.Length;
46
+ request . ContentType = "application/json" ;
47
+
48
+ using ( var writeStream = request . GetRequestStreamAsync ( ) . Result )
49
+ {
50
+ writeStream . Write ( bytes , 0 , bytes . Length ) ;
51
+ }
52
+
53
+ //var result = request.BeginGetRequestStream((asyncResult) =>
54
+ // {
55
+ // using (var writeStream = request.EndGetRequestStream(asyncResult))
56
+ // {
57
+ // writeStream.Write(bytes, 0, bytes.Length);
58
+ // }
59
+
60
+ // }, null);
61
+
62
+ // result.AsyncWaitHandle.WaitOne(new TimeSpan(0, 3, 0));
63
+
64
+ using ( var response = ( HttpWebResponse ) request . GetResponseAsync ( ) . Result )
65
+ {
66
+ if ( response . StatusCode != HttpStatusCode . OK && response . StatusCode != HttpStatusCode . NoContent )
67
+ {
68
+ var message = string . Format ( "Request failed. Received HTTP {0}" , response . StatusCode ) ;
69
+ return message ;
70
+ }
71
+ }
72
+
73
+ return string . Format ( "Set AppVeyor build number to '{0}'." , variables . FullSemVer ) ;
74
+
75
+ }
76
+
77
+
78
+ public override string [ ] GenerateSetParameterMessage ( string name , string value )
79
+ {
80
+
81
+ // var buildNumber = Environment.GetEnvironmentVariable("APPVEYOR_BUILD_NUMBER");
82
+ var restBase = Environment . GetEnvironmentVariable ( "APPVEYOR_API_URL" ) ;
83
+
84
+ var request = ( HttpWebRequest ) WebRequest . Create ( restBase + "api/build/variables" ) ;
85
+ request . Method = "POST" ;
86
+ request . ContentType = "application/json" ;
87
+ request . Accept = "application/json" ;
88
+
89
+ var data = string . Format ( "{{ \" name\" : \" GitVersion_{0}\" , \" value\" : \" {1}\" }}" , name , value ) ;
90
+ var bytes = Encoding . UTF8 . GetBytes ( data ) ;
91
+ if ( request . Headers == null )
92
+ {
93
+ request . Headers = new WebHeaderCollection ( ) ;
94
+ }
95
+ var bytesLength = bytes . Length ;
96
+ // No property for content-length - and no Add() method on header collection? WHAAAAT
97
+ // request.ContentLength = bytes.Length;
98
+ request . Headers [ "Content-Length" ] = bytesLength . ToString ( ) ;
99
+
100
+ using ( var writeStream = request . GetRequestStreamAsync ( ) . Result )
101
+ {
102
+ writeStream . Write ( bytes , 0 , bytes . Length ) ;
103
+ }
104
+
105
+ return new [ ]
106
+ {
107
+ string . Format ( "Adding Environment Variable. name='GitVersion_{0}' value='{1}']" , name , value )
108
+ } ;
109
+ }
110
+
111
+
112
+ #else
113
+
16
114
public override string GenerateSetVersionMessage ( VersionVariables variables )
17
115
{
18
116
var buildNumber = Environment . GetEnvironmentVariable ( "APPVEYOR_BUILD_NUMBER" ) ;
@@ -23,7 +121,14 @@ public override string GenerateSetVersionMessage(VersionVariables variables)
23
121
24
122
var data = string . Format ( "{{ \" version\" : \" {0}.build.{1}\" }}" , variables . FullSemVer , buildNumber ) ;
25
123
var bytes = Encoding . UTF8 . GetBytes ( data ) ;
26
- request . ContentLength = bytes . Length ;
124
+ if ( request . Headers == null )
125
+ {
126
+ request . Headers = new WebHeaderCollection ( ) ;
127
+ }
128
+ var bytesLength = bytes . Length ;
129
+ request . Headers [ "Content-Length" ] = bytesLength . ToString ( ) ;
130
+
131
+ // request.ContentLength = bytes.Length;
27
132
request . ContentType = "application/json" ;
28
133
29
134
using ( var writeStream = request . GetRequestStream ( ) )
@@ -60,5 +165,9 @@ public override string[] GenerateSetParameterMessage(string name, string value)
60
165
string . Format ( "Adding Environment Variable. name='GitVersion_{0}' value='{1}']" , name , value )
61
166
} ;
62
167
}
168
+
169
+
170
+ #endif
171
+
63
172
}
64
173
}
0 commit comments