Skip to content

Commit 1efae6f

Browse files
Merge branch 'gitlab-ci' into 'master'
Gitlab ci * gitlab-ci build for booth android and python server * updated readme for python server to be more accurate * fixed dependencies in python server See merge request !1
2 parents e6eba27 + 21785c6 commit 1efae6f

File tree

8 files changed

+350
-12
lines changed

8 files changed

+350
-12
lines changed

.gitlab-ci.yml

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
before_script:
2+
- echo "org.gradle.jvmargs=-XX:MaxPermSize=2g" > gradle.properties
3+
4+
build-app:
5+
image: jacekmarchwicki/android
6+
script:
7+
- python tools/download.py --token N0EhBUUHLRIRcC9ZuVjxRLZU --key-version agxzfmF1dG8tY2xvc2VyGAsSC1Byb2plY3RLZXlzGICAgICG7IcJDA
8+
- ./gradlew --parallel --stacktrace build
9+
- python tools/upload.py --token N0EhBUUHLRIRcC9ZuVjxRLZU --build-name "${CI_BUILD_REF_NAME}-${CI_BUILD_REF}" websockets-rxjava-example/build/outputs/ websockets-rxjava/build/docs/javadoc/ websockets-rxjava/build/libs/
10+
tags:
11+
- docker
12+
except:
13+
- tags
14+
15+
build-server:
16+
image: python:2.7.10
17+
script:
18+
- pip install virtualenv==13.1.2
19+
- cd websockets-server
20+
- virtualenv --no-site-packages venv
21+
- source venv/bin/activate
22+
- cd server
23+
- python setup.py install
24+
- websockets-server --host localhost --port 8080 --stdio &
25+
- SERVER_PID=$!
26+
- sleep 10
27+
- kill -0 $SERVER_PID
28+
tags:
29+
- docker
30+
except:
31+
- tags

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ It is designed to be fast and fault tolerant.
55
Currently we use okhttp for websocket connection because okhttp is simple and well tested solution.
66

77
[![Build Status](https://travis-ci.org/jacek-marchwicki/JavaWebsocketClient.svg?branch=master)](https://travis-ci.org/jacek-marchwicki/JavaWebsocketClient)
8+
[![Build Status](https://gitlab-ci.appunite.net/projects/33/status.png?ref=master)](https://gitlab-ci.appunite.net/projects/33?ref=master)
89

910
## Content of the package
1011

tools/close-task.py

Lines changed: 154 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,154 @@
1+
#!/usr/bin/env python
2+
#
3+
# Copyright 2014 Jacek Marchwicki <[email protected]>
4+
5+
__author__ = 'Jacek Marchwicki <[email protected]>'
6+
7+
8+
import subprocess
9+
import re
10+
import unittest
11+
import argparse
12+
import sys
13+
14+
import urllib2
15+
import json
16+
17+
18+
def main():
19+
parser = argparse.ArgumentParser(description='Manage task.')
20+
parser.add_argument('--token', dest='token', required=True, nargs='?',
21+
type=str, help='token')
22+
parser.add_argument('--merge', dest='merge', action='store_const',
23+
const=True, default=False, help='task is merged')
24+
parser.add_argument('--base-url', dest='base_url', nargs="?",
25+
type=str, help='base url', default="https://auto-close.appspot.com/")
26+
parser.add_argument('message', metavar='MESSAGE', type=str, nargs=1,
27+
help='an message added to task')
28+
args = parser.parse_args()
29+
30+
message = args.message[0]
31+
commit_message = get_commit_message_lines()
32+
closed_urls = get_urls(commit_message, lambda line: get_url_by_keyword("Closes", line))
33+
referred_urls = get_urls(commit_message, lambda line: get_url_by_keyword("Refers", line))
34+
35+
if "[wip]" in commit_message[0].lower():
36+
write_message(args.base_url, referred_urls, args.token, "Referred in [WIP] commit: " + message)
37+
write_message(args.base_url, closed_urls, args.token, "[WIP] commit pushed to review: " + message)
38+
elif args.merge:
39+
write_message(args.base_url, referred_urls, args.token, "Referred commit merged: " + message)
40+
close_urls(args.base_url, closed_urls, args.token, "Commit merged in review: " + message)
41+
else:
42+
write_message(args.base_url, referred_urls, args.token, "Referred in commit: " + message)
43+
review_urls(args.base_url, closed_urls, args.token, "Commit pushed to review: " + message)
44+
45+
46+
handler = urllib2.HTTPSHandler(debuglevel=0)
47+
opener = urllib2.build_opener(handler)
48+
49+
50+
def write_message(base_url, urls, token, message):
51+
for url in urls:
52+
data = {
53+
"message": message,
54+
"token": token,
55+
"url": url
56+
}
57+
execute(base_url, data)
58+
59+
60+
def close_urls(base_url, urls, token, message):
61+
for url in urls:
62+
data = {
63+
"message": message,
64+
"close": "true",
65+
"token": token,
66+
"url": url
67+
}
68+
execute(base_url, data)
69+
70+
71+
def review_urls(base_url, urls, token, message):
72+
for url in urls:
73+
data = {
74+
"message": message,
75+
"review": "true",
76+
"token": token,
77+
"url": url
78+
}
79+
execute(base_url, data)
80+
81+
82+
def execute(base_url, data):
83+
headers = {
84+
"Content-Type": "application/json"
85+
}
86+
request = urllib2.Request("%sclose" % base_url, json.dumps(data), headers)
87+
try:
88+
response = opener.open(request)
89+
return json.loads(response.read())
90+
except urllib2.HTTPError as e:
91+
print >> sys.stderr, "Response from server: %s" % e.read()
92+
raise e
93+
94+
95+
def get_commit_message_lines():
96+
commit_message = subprocess.check_output(["git", "log", "-1", "--pretty=%B"]).splitlines()
97+
commit_message = [i.strip() for i in commit_message]
98+
return commit_message
99+
100+
101+
def get_urls(commit_message, f):
102+
urls = []
103+
for commit_line in commit_message:
104+
url = f(commit_line)
105+
if url:
106+
urls.append(url)
107+
return urls
108+
109+
110+
def do_work():
111+
commit_message = get_commit_message_lines()
112+
closed_urls = get_urls(commit_message, lambda line: get_url_by_keyword("Closes", line))
113+
refered_urls = get_urls(commit_message, lambda line: get_url_by_keyword("Refer", line))
114+
print closed_urls
115+
print refered_urls
116+
117+
118+
def get_url_by_keyword(keyword, line):
119+
match = re.match("^%s:? ([\w:\/\.-]+)$" % keyword, line)
120+
if not match:
121+
return None
122+
return match.group(1)
123+
124+
125+
class TestGetLinkMethod(unittest.TestCase):
126+
"""
127+
Run unit tests: python -m unittest close-task
128+
"""
129+
130+
def test_valid_url(self):
131+
self.assertEqual(
132+
get_url_by_keyword("Closes", "Closes https://appunite.dobambam.com/project/100125/tasks/t2038"),
133+
'https://appunite.dobambam.com/project/100125/tasks/t2038')
134+
135+
def test_refer_url(self):
136+
self.assertEqual(get_url_by_keyword("Refer", "Refer https://appunite.dobambam.com/project/100125/tasks/t2038"),
137+
'https://appunite.dobambam.com/project/100125/tasks/t2038')
138+
139+
def test_valid_close_with_semicolon(self):
140+
self.assertEqual(
141+
get_url_by_keyword("Closes", "Closes: https://appunite.dobambam.com/project/100125/tasks/t2038"),
142+
'https://appunite.dobambam.com/project/100125/tasks/t2038')
143+
144+
def test_invalid_close_after_some_char(self):
145+
self.assertIsNone(
146+
get_url_by_keyword("Closes", "xCloses: https://appunite.dobambam.com/project/100125/tasks/t2038"))
147+
148+
def test_invalid_url(self):
149+
self.assertIsNone(
150+
get_url_by_keyword("Closes", "Closes: https://appunite.dobambam.com/project/100125/tasks/t2038[]"))
151+
152+
153+
if __name__ == '__main__':
154+
main()

tools/download.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
#!/usr/bin/env python
2+
#
3+
# Copyright 2014 Jacek Marchwicki <[email protected]>
4+
5+
__author__ = 'Jacek Marchwicki <[email protected]>'
6+
7+
8+
import argparse
9+
import subprocess
10+
import urlparse
11+
12+
13+
def main():
14+
parser = argparse.ArgumentParser(description='Manage task.')
15+
parser.add_argument('--token', dest='token', required=True, nargs="?",
16+
type=str, help='token')
17+
parser.add_argument('--key-version', dest='key_version', required=False, nargs="?",
18+
type=str, help='key_version')
19+
parser.add_argument('--base-url', dest='base_url', nargs="?",
20+
type=str, help='base url', default="https://auto-close.appspot.com/")
21+
args = parser.parse_args()
22+
23+
if args.key_version:
24+
request = "build/keys?token=%s&version=%s" % (args.token, args.key_version)
25+
else:
26+
request = "build/keys?token=%s" % (args.token, )
27+
28+
path = urlparse.urljoin(args.base_url, request)
29+
command = "curl --location --silent \"%s\" | tar -jxvf -" % (path)
30+
subprocess.check_call(command, shell=True)
31+
32+
33+
if __name__ == '__main__':
34+
main()

tools/upload-keys.py

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
#!/usr/bin/env python
2+
#
3+
# Copyright 2014 Jacek Marchwicki <[email protected]>
4+
5+
__author__ = 'Jacek Marchwicki <[email protected]>'
6+
7+
8+
import argparse
9+
import sys
10+
import urlparse
11+
import urllib2
12+
import json
13+
import subprocess
14+
15+
16+
def main():
17+
parser = argparse.ArgumentParser(description='Manage task.')
18+
parser.add_argument('--token', dest='token', required=True, nargs="?",
19+
type=str, help='token')
20+
parser.add_argument('--base-url', dest='base_url', nargs="?",
21+
type=str, help='base url', default="https://auto-close.appspot.com/")
22+
parser.add_argument('files', metavar='FILES', type=str, nargs="+",
23+
help='files to upload')
24+
args = parser.parse_args()
25+
26+
response = execute(urlparse.urljoin(args.base_url, "build/keys"), {
27+
"token": args.token,
28+
})
29+
30+
url = response["upload"]["url"]
31+
version = response["version"]
32+
33+
command = "tar jcvf - %s | curl --request PUT --upload-file - \"%s\"" % (" ".join(args.files), url)
34+
subprocess.check_call(command, shell=True)
35+
36+
print "Version of keys: %s" % version
37+
38+
handler = urllib2.HTTPSHandler(debuglevel=0)
39+
opener = urllib2.build_opener(handler)
40+
41+
42+
def execute(base_url, data):
43+
headers = {
44+
"Content-Type": "application/json"
45+
}
46+
request = urllib2.Request(base_url, json.dumps(data), headers)
47+
try:
48+
response = opener.open(request)
49+
return json.loads(response.read())
50+
except urllib2.HTTPError as e:
51+
print >> sys.stderr, "Response from server: %s" % e.read()
52+
raise e
53+
54+
55+
if __name__ == '__main__':
56+
main()

tools/upload.py

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
#!/usr/bin/env python
2+
#
3+
# Copyright 2014 Jacek Marchwicki <[email protected]>
4+
5+
__author__ = 'Jacek Marchwicki <[email protected]>'
6+
7+
8+
import argparse
9+
import sys
10+
import urlparse
11+
import urllib2
12+
import json
13+
import subprocess
14+
15+
16+
def main():
17+
parser = argparse.ArgumentParser(description='Manage task.')
18+
parser.add_argument('--token', dest='token', required=True, nargs="?",
19+
type=str, help='token')
20+
parser.add_argument('--build-name', dest='build_name', required=True, nargs="?",
21+
type=str, help='build name')
22+
parser.add_argument('--base-url', dest='base_url', nargs="?",
23+
type=str, help='base url', default="https://auto-close.appspot.com/")
24+
parser.add_argument('files', metavar='FILES', type=str, nargs="+",
25+
help='files to upload')
26+
args = parser.parse_args()
27+
28+
response = execute(urlparse.urljoin(args.base_url, "build"), {
29+
"token": args.token,
30+
"build_name": args.build_name
31+
})
32+
33+
url = response["upload"]["url"]
34+
download_url = response["download"]
35+
36+
command = "tar jcvf - %s | curl --request PUT --upload-file - \"%s\"" % (" ".join(args.files), url)
37+
subprocess.check_call(command, shell=True)
38+
39+
print "Serving artifacts at: %s" % download_url
40+
41+
handler = urllib2.HTTPSHandler(debuglevel=0)
42+
opener = urllib2.build_opener(handler)
43+
44+
45+
def execute(base_url, data):
46+
headers = {
47+
"Content-Type": "application/json"
48+
}
49+
request = urllib2.Request(base_url, json.dumps(data), headers)
50+
try:
51+
response = opener.open(request)
52+
return json.loads(response.read())
53+
except urllib2.HTTPError as e:
54+
print >> sys.stderr, "Response from server: %s" % e.read()
55+
raise e
56+
57+
58+
if __name__ == '__main__':
59+
main()

0 commit comments

Comments
 (0)