-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbuild_send.py
executable file
·158 lines (140 loc) · 5.13 KB
/
build_send.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
#!/usr/bin/python
##
## @author Edouard DUPIN
##
## @copyright 2012, Edouard DUPIN, all right reserved
##
## @license APACHE v2.0 (see license file)
##
import urllib, urllib2
import sys
import os
import argparse
import time
parser = argparse.ArgumentParser()
parser.add_argument("-u", "--url", help="server URL",
default="http://atria-soft.com/ci/build/inject")
parser.add_argument("-r", "--repo", help="Curent repositoty (generic github name (userName/repoName)",
default="")
parser.add_argument("-s", "--sha1", help="Sha1 on the commit (git) (256 char limited)",
default="")
parser.add_argument("-b", "--branch", help="branch of the repository (default master)",
default="")
parser.add_argument("-t", "--tag", help="Tag to register the system 'Linux', 'MacOs', 'Windows', 'IOs', 'Android' ('' for exit)",
default="")
parser.add_argument("-S", "--status", help="Build status 'START', 'OK', 'ERROR' or $?",
default="")
parser.add_argument("-G", "--stage", help="Stage of the BUILD: 'INIT', 'DOWNLOAD', 'CONFIGURE', 'BUILD', 'INSTALL', 'TEST', 'COVERAGE' or 'PACKAGE'",
default="")
parser.add_argument("-i", "--id", help="build ID (auto get env variable TRAVIS_BUILD_NUMBER)",
default="")
###################
## Choice 3 ##
###################
parser.add_argument("--test", help="test value (local server ...)",
action="store_true")
args = parser.parse_args()
if args.status not in ['START', 'OK', 'ERROR']:
#print("ploppp : '" + str(args.status) + "'")
if args.status == "0":
args.status = 'OK'
else:
args.status = 'ERROR'
if args.stage not in ['INIT', 'DOWNLOAD', 'CONFIGURE', 'BUILD', 'INSTALL', 'TEST', 'COVERAGE', 'PACKAGE']:
args.stage = 'NONE'
if args.test == True:
args.url = 'http://atria-soft.com/ci/build/inject'
args.repo = 'HeeroYui/test'
args.sha1 = ''
args.branch = 'master'
args.tag = 'Windows'
args.status = 'START'
args.stage = 'NONE'
else:
if len(args.tag) >= len("build:") \
and args.tag[:6] == "build:":
args.tag = args.tag[6:]
if args.tag == "":
print("[NOTE] (local) not set '--tag' parameter ==> just stop")
if args.status == 'ERROR':
print("[NOTE] build error, stop CI ...")
exit(-3)
exit(0)
if args.tag == "linux":
args.tag = 'Linux';
if args.tag == "windows":
args.tag = 'Windows';
if args.tag == "mac":
args.tag = 'MacOs';
list_tag = ['Linux', 'MacOs', 'Windows', 'IOs', 'Android', 'Mingw']
if args.tag not in list_tag:
print("[ERROR] (local) set '--tag=" + args.tag + "' parameter not in list: " + str(list_tag))
exit(-2)
# no more limit in build type name ==> TODO: add regex to filter on string only
if args.status == "":
print("[ERROR] (local) set '--status' parameter")
exit(-2)
# todo : check if repo is contituated with a "/" ...
# if repo, sha1 and branch is not set, we try to get it with travis global environement variable :
if args.repo == "":
args.repo = os.environ.get('TRAVIS_REPO_SLUG')
if args.repo == None:
args.repo = os.environ.get('CI_PROJECT_PATH')
if args.repo == None:
print("[ERROR] (local) missing 'repo' parameter can not get travis env variable")
exit(-2)
if args.sha1 == "":
args.sha1 = os.environ.get('TRAVIS_COMMIT')
if args.sha1 == None:
args.sha1 = os.environ.get('CI_COMMIT_SHA')
if args.sha1 == None:
args.sha1 = ""
if args.branch == "":
args.branch = os.environ.get('TRAVIS_BRANCH')
if args.branch == None:
args.branch = os.environ.get('CI_COMMIT_REF_NAME')
if args.branch == None:
args.branch = ""
if args.id == "":
args.id = os.environ.get('TRAVIS_BUILD_NUMBER')
if args.id == None:
args.id = os.environ.get('CI_JOB_ID')
if args.id == None:
args.id = ""
print(" url = " + args.url)
print(" repo = " + args.repo)
print(" sha1 = " + args.sha1)
print(" branch = " + args.branch)
print(" tag = " + args.tag)
print(" status = " + args.status)
print(" build id = " + args.id)
print(" STAGE = " + args.stage)
data = urllib.urlencode({'REPO':args.repo,
'SHA1':args.sha1,
'LIB_BRANCH':args.branch,
'TAG':args.tag,
'STATUS':args.status,
'ID':args.id,
'STAGE':args.stage})
# I do this because my server is sometime down and need time to restart (return 408)
send_done = 5
while send_done >= 0:
send_done = send_done - 1
try:
req = urllib2.Request(args.url, data)
response = urllib2.urlopen(req)
send_done = -1
except urllib2.HTTPError:
print("An error occured (maybe on server or network ... 'urllib2.HTTPError: HTTP Error 408: Request Timeout' ")
if send_done >= 0:
time.sleep(5)
#print(response.geturl())
#print(response.info())
return_data = response.read()
print(return_data)
if return_data[:7] == "[ERROR]":
exit(-1)
if args.status == 'ERROR':
print("[NOTE] build error, stop travis/GITLAB-CI ...")
exit(-3)
exit(0)