From 3fbe72666002583f87163df8d401dbf469c4e2a4 Mon Sep 17 00:00:00 2001 From: Rodgers Andati Date: Wed, 18 Dec 2019 15:12:47 +0300 Subject: [PATCH 01/15] add cicd script --- .travis.yml | 66 ++++++++++++++++++++++++------------------------- scripts/cicd.py | 40 ++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+), 34 deletions(-) create mode 100644 scripts/cicd.py diff --git a/.travis.yml b/.travis.yml index 91c74ed..36fe249 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,35 +1,33 @@ -android: - components: - - build-tools-28.0.3 - - android-28 - - extra-google-google_play_services - - extra-google-m2repository - - extra-android-m2repository - - sys-img-x86-android-26 - - sys-img-armeabi-v7a-android-17 +android: + components: + - build-tools-28.0.3 + - android-28 + - extra-google-google_play_services + - extra-google-m2repository + - extra-android-m2repository + - sys-img-x86-android-26 + - sys-img-armeabi-v7a-android-17 language: android -notifications: - slack: "argila:bXGzFxqVuwbq5AC2pbP4J2yq" -script: - - "./gradlew build" - - echo $TRAVIS_COMMIT_MESSAGE - - log=$(git log $TRAVIS_COMMIT_RANGE --oneline) - - echo $'**Change log:**
'${log//$'\n'/
} -before_deploy: - - "git fetch --tags" - - "echo $TRAVIS_COMMIT_MESSAGE" - - "log=$(git log $TRAVIS_COMMIT_RANGE --oneline)" - - "export TAG=$'v'$TRAVIS_COMMIT_MESSAGE" - - "export BODY=$'**Change log:**
'${log//$'\\n'/
}" -deploy: - - provider: releases - api_key: - secure: TZVw75NsfqF9MYBzyBvV1Inx1EXQWZcBuyQzczLXueuZprIHlXo9jJ6gdxO5GaJC5KABbQiXP1fcDieS/CEvYEVfjqy4191gdcBhQ54/cGyF/qJX4e52FwU+5ufqSegv3MY1tmACwlEFFbRXwZ9aR/uaPa9hMGTC0QsxdNpAf4m5HHkp3HGoA24m+Dj1uoH5woNhNQPIC33KS1QkYxTWYm+RzjHzkF7E4hLETVECfX2/vhL8KMLUi+b8aRzHunDOXzi09BMR3SnODHYb8pjrVwOxazDMHMKyWzKdt19CSnV94+SqRuti+NYqrBaWb3YYR+I3PLHkNgdhJUhh4ucAzE/qhMnlwIjKsOYki6BNl4j2KMPzJsmo8IkdIoq5VQY9naAx83gMa7VUqWae6lSvHeNyTLyt3/GnDcnu3j00l0LqV/O8IwyHln4BFNOyd794NeiocrIvDNJPYNg9n5BsiEOaaleS7slF8x/KoJVoi4+ymuxrISGfylLUwfsh5T8b/HnR2VNMuryHrb5xOMmongvEORySfl/gpNHihW060IdgmwdI7WYKKI2nXpKLgxWSUppVOP7JxeRUw7TIHHbQ95gXZmg9Qvckf4wITmk1fJd2wV6pO4xK82Jqh42BC5Uc+DWFl90hpZAm6tHv6BE0O4tY7ZzdBxiwP30cCQrZYa4= - body: $BODY - file: sample/build/outputs/apk/debug/sample-debug.apk - skip_cleanup: true - on: - tags: true - repo: Andati/BriskPesa - - +notifications: + slack: argila:bXGzFxqVuwbq5AC2pbP4J2yq +script: +- "./gradlew build" +- log=`python cicd.py GITHUB_API_KEY` +- echo $'**Change log:**
'${log//$'\n'/
} +before_deploy: +- git fetch --tags +- log=`python cicd.py GITHUB_API_KEY` +- export BODY=$'**Change log:**
'${log//$'\n'/
} +deploy: +- provider: releases + api_key: + secure: TZVw75NsfqF9MYBzyBvV1Inx1EXQWZcBuyQzczLXueuZprIHlXo9jJ6gdxO5GaJC5KABbQiXP1fcDieS/CEvYEVfjqy4191gdcBhQ54/cGyF/qJX4e52FwU+5ufqSegv3MY1tmACwlEFFbRXwZ9aR/uaPa9hMGTC0QsxdNpAf4m5HHkp3HGoA24m+Dj1uoH5woNhNQPIC33KS1QkYxTWYm+RzjHzkF7E4hLETVECfX2/vhL8KMLUi+b8aRzHunDOXzi09BMR3SnODHYb8pjrVwOxazDMHMKyWzKdt19CSnV94+SqRuti+NYqrBaWb3YYR+I3PLHkNgdhJUhh4ucAzE/qhMnlwIjKsOYki6BNl4j2KMPzJsmo8IkdIoq5VQY9naAx83gMa7VUqWae6lSvHeNyTLyt3/GnDcnu3j00l0LqV/O8IwyHln4BFNOyd794NeiocrIvDNJPYNg9n5BsiEOaaleS7slF8x/KoJVoi4+ymuxrISGfylLUwfsh5T8b/HnR2VNMuryHrb5xOMmongvEORySfl/gpNHihW060IdgmwdI7WYKKI2nXpKLgxWSUppVOP7JxeRUw7TIHHbQ95gXZmg9Qvckf4wITmk1fJd2wV6pO4xK82Jqh42BC5Uc+DWFl90hpZAm6tHv6BE0O4tY7ZzdBxiwP30cCQrZYa4= + body: "$BODY" + file: sample/build/outputs/apk/debug/sample-debug.apk + skip_cleanup: true + on: + tags: true + repo: Andati/BriskPesa +env: + global: + secure: 1s70r8zZNAsAHI7fctsEdBTWAAvmiDtvK2tThC+2RBxEJnKZqSFzDkLC1LvM1tX8ufN/dD0y6oBdKhOkxlFaiVci/ow+sUZbTx4PBP1/NsleMwk+muK732MQBiMFz4a7Tcwc6tY8OZYovBrPlcbEuZ/UJroinxMJucUOiPUTMmZbvK6XKBOm+8+jH4zIQjhOskJCE81SoZxaQwVpZ0Dur61nPxevLPlrw27Dz6pGON/leTegWa1LhTbD5Yn4t/tcHCxqgn5SEXjgUt+I4EK4+4WkKhn3hACtLo8q2N5BC8+fXdAoR2EbrCxyX4/zcfDpqwtzvkAzdv4Stfy7miCo29bWGDdufvFXxP/oNHS08HYU1Qkg8F2o3egAMvEbA397QSqC2WjFtgJ06UA/DC6JB5nC/slokaoGKllLq8YJfFP5979a6l8rHmk7uFwRNdSx9NqN0lqIu8ByqqmHhG3ju7Z4HSpxUxWdeK7rV4G04545Xp+u5oJc7MWM8wBTHG/8FaQgrE0/+qw3m8zbsmAT7zhJl0qbug4mF7MPx+om8ViFRH/mlneyOScKnioQt3vfWsxy4oheICxAH6a3LHB9R6RWaKn8VzrWuL5wKIYGk/zttX41fZ+YAIS4DUEQ04DG3FL2l0ztr20a4bYdcdXaZ+QxKSYDaW63oylB9Z957K0= diff --git a/scripts/cicd.py b/scripts/cicd.py new file mode 100644 index 0000000..8b4ec9a --- /dev/null +++ b/scripts/cicd.py @@ -0,0 +1,40 @@ +import requests +import sys + +GraphQL_URL = "https://api.github.com/graphql" + +if len(sys.argv) == 1: + print "pass your GitHub key to this script" + exit(0) + +headers = {"Authorization": "Bearer " + sys.argv[1]} + +query = """ +{ + search(query: "repo:Andati/BriskPesa is:pr is:merged merged:>2019-12-09", type: ISSUE, last: 100) { + edges { + node { + ... on PullRequest { + url + title + bodyText + createdAt + mergedAt + } + } + } + } +} +""" + +response = requests.post(GraphQL_URL, json={'query':query}, headers=headers) +if response.status_code == 200: + json_response = response.json() + #print json_response['data'] + edges = json_response['data']['search']['edges'] + for edge in edges: + #print edge['node']['title'] + print edge['node']['bodyText'] +else: + print "Error code returned " + str(response.status_code) + From af51d509b8589bc9655601a445f2c51eacd5d95c Mon Sep 17 00:00:00 2001 From: Rodgers Andati Date: Wed, 18 Dec 2019 15:18:50 +0300 Subject: [PATCH 02/15] correct the path of cicd.py file --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 36fe249..904a8a8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -12,11 +12,11 @@ notifications: slack: argila:bXGzFxqVuwbq5AC2pbP4J2yq script: - "./gradlew build" -- log=`python cicd.py GITHUB_API_KEY` +- log=`python scripts/cicd.py GITHUB_API_KEY` - echo $'**Change log:**
'${log//$'\n'/
} before_deploy: - git fetch --tags -- log=`python cicd.py GITHUB_API_KEY` +- log=`python scripts/cicd.py GITHUB_API_KEY` - export BODY=$'**Change log:**
'${log//$'\n'/
} deploy: - provider: releases From e846a3c67d53c2c76e38cee44c1f233bb8fe181f Mon Sep 17 00:00:00 2001 From: Rodgers Andati Date: Wed, 18 Dec 2019 15:28:53 +0300 Subject: [PATCH 03/15] convert data send by cicd.py from dict to json --- scripts/cicd.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/scripts/cicd.py b/scripts/cicd.py index 8b4ec9a..461ad5c 100644 --- a/scripts/cicd.py +++ b/scripts/cicd.py @@ -1,5 +1,6 @@ import requests import sys +import json GraphQL_URL = "https://api.github.com/graphql" @@ -7,7 +8,7 @@ print "pass your GitHub key to this script" exit(0) -headers = {"Authorization": "Bearer " + sys.argv[1]} +headers = {"Authorization": "Bearer " + sys.argv[1], 'content-type': 'application/json'} query = """ { @@ -27,7 +28,7 @@ } """ -response = requests.post(GraphQL_URL, json={'query':query}, headers=headers) +response = requests.post(GraphQL_URL, data=json.dumps({'query':query}), headers=headers) if response.status_code == 200: json_response = response.json() #print json_response['data'] From 7d04a0de7ab1894c946209f2861a5fdd21681209 Mon Sep 17 00:00:00 2001 From: Rodgers Andati Date: Wed, 18 Dec 2019 15:39:32 +0300 Subject: [PATCH 04/15] fix github_api_key env variable --- .travis.yml | 4 ++-- scripts/cicd.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 904a8a8..e52729a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -12,11 +12,11 @@ notifications: slack: argila:bXGzFxqVuwbq5AC2pbP4J2yq script: - "./gradlew build" -- log=`python scripts/cicd.py GITHUB_API_KEY` +- log=`python scripts/cicd.py $GITHUB_API_KEY` - echo $'**Change log:**
'${log//$'\n'/
} before_deploy: - git fetch --tags -- log=`python scripts/cicd.py GITHUB_API_KEY` +- log=`python scripts/cicd.py $GITHUB_API_KEY` - export BODY=$'**Change log:**
'${log//$'\n'/
} deploy: - provider: releases diff --git a/scripts/cicd.py b/scripts/cicd.py index 461ad5c..68dd8b9 100644 --- a/scripts/cicd.py +++ b/scripts/cicd.py @@ -8,7 +8,7 @@ print "pass your GitHub key to this script" exit(0) -headers = {"Authorization": "Bearer " + sys.argv[1], 'content-type': 'application/json'} +headers = {"Authorization": "Bearer " + sys.argv[1], "content-type": "application/json"} query = """ { From 078f0714c14831ff96becb9fbd738f5dd11e8176 Mon Sep 17 00:00:00 2001 From: Rodgers Andati Date: Wed, 18 Dec 2019 16:07:45 +0300 Subject: [PATCH 05/15] remove repeating \n characters from pr body --- scripts/cicd.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/scripts/cicd.py b/scripts/cicd.py index 68dd8b9..1e7feac 100644 --- a/scripts/cicd.py +++ b/scripts/cicd.py @@ -28,14 +28,23 @@ } """ +def cleanBodyText(body): + res = ""; + for i in range(len(body)): + if(body[i]=='\n'): + if len(res)>1 and res[len(res)-1] != '\n': + res += body[i] + else: + res += body[i] + return res + response = requests.post(GraphQL_URL, data=json.dumps({'query':query}), headers=headers) if response.status_code == 200: json_response = response.json() - #print json_response['data'] edges = json_response['data']['search']['edges'] for edge in edges: - #print edge['node']['title'] - print edge['node']['bodyText'] + print cleanBodyText(edge['node']['bodyText']) else: print "Error code returned " + str(response.status_code) + From c75b3f04cc5ced13e5fdb7575ab85765de354042 Mon Sep 17 00:00:00 2001 From: Rodgers Andati Date: Fri, 20 Dec 2019 12:37:08 +0300 Subject: [PATCH 06/15] publish apk link to confluence once release is created --- .travis.yml | 8 ++- scripts/cicd.py | 5 +- scripts/confluence.py | 133 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 142 insertions(+), 4 deletions(-) create mode 100644 scripts/confluence.py diff --git a/.travis.yml b/.travis.yml index e52729a..bf94261 100644 --- a/.travis.yml +++ b/.travis.yml @@ -17,7 +17,7 @@ script: before_deploy: - git fetch --tags - log=`python scripts/cicd.py $GITHUB_API_KEY` -- export BODY=$'**Change log:**
'${log//$'\n'/
} +- export BODY=${log//$'\n'/
} deploy: - provider: releases api_key: @@ -28,6 +28,10 @@ deploy: on: tags: true repo: Andati/BriskPesa +after_deploy: +- python scripts/confluence.py $ATLASSIAN_EMAIL $ATLASSIAN_TOKEN $GITHUB_API_KEY env: global: - secure: 1s70r8zZNAsAHI7fctsEdBTWAAvmiDtvK2tThC+2RBxEJnKZqSFzDkLC1LvM1tX8ufN/dD0y6oBdKhOkxlFaiVci/ow+sUZbTx4PBP1/NsleMwk+muK732MQBiMFz4a7Tcwc6tY8OZYovBrPlcbEuZ/UJroinxMJucUOiPUTMmZbvK6XKBOm+8+jH4zIQjhOskJCE81SoZxaQwVpZ0Dur61nPxevLPlrw27Dz6pGON/leTegWa1LhTbD5Yn4t/tcHCxqgn5SEXjgUt+I4EK4+4WkKhn3hACtLo8q2N5BC8+fXdAoR2EbrCxyX4/zcfDpqwtzvkAzdv4Stfy7miCo29bWGDdufvFXxP/oNHS08HYU1Qkg8F2o3egAMvEbA397QSqC2WjFtgJ06UA/DC6JB5nC/slokaoGKllLq8YJfFP5979a6l8rHmk7uFwRNdSx9NqN0lqIu8ByqqmHhG3ju7Z4HSpxUxWdeK7rV4G04545Xp+u5oJc7MWM8wBTHG/8FaQgrE0/+qw3m8zbsmAT7zhJl0qbug4mF7MPx+om8ViFRH/mlneyOScKnioQt3vfWsxy4oheICxAH6a3LHB9R6RWaKn8VzrWuL5wKIYGk/zttX41fZ+YAIS4DUEQ04DG3FL2l0ztr20a4bYdcdXaZ+QxKSYDaW63oylB9Z957K0= + - secure: 1s70r8zZNAsAHI7fctsEdBTWAAvmiDtvK2tThC+2RBxEJnKZqSFzDkLC1LvM1tX8ufN/dD0y6oBdKhOkxlFaiVci/ow+sUZbTx4PBP1/NsleMwk+muK732MQBiMFz4a7Tcwc6tY8OZYovBrPlcbEuZ/UJroinxMJucUOiPUTMmZbvK6XKBOm+8+jH4zIQjhOskJCE81SoZxaQwVpZ0Dur61nPxevLPlrw27Dz6pGON/leTegWa1LhTbD5Yn4t/tcHCxqgn5SEXjgUt+I4EK4+4WkKhn3hACtLo8q2N5BC8+fXdAoR2EbrCxyX4/zcfDpqwtzvkAzdv4Stfy7miCo29bWGDdufvFXxP/oNHS08HYU1Qkg8F2o3egAMvEbA397QSqC2WjFtgJ06UA/DC6JB5nC/slokaoGKllLq8YJfFP5979a6l8rHmk7uFwRNdSx9NqN0lqIu8ByqqmHhG3ju7Z4HSpxUxWdeK7rV4G04545Xp+u5oJc7MWM8wBTHG/8FaQgrE0/+qw3m8zbsmAT7zhJl0qbug4mF7MPx+om8ViFRH/mlneyOScKnioQt3vfWsxy4oheICxAH6a3LHB9R6RWaKn8VzrWuL5wKIYGk/zttX41fZ+YAIS4DUEQ04DG3FL2l0ztr20a4bYdcdXaZ+QxKSYDaW63oylB9Z957K0= + - secure: S2K63SyyYxAZZR5W1EiX8Sv5FcNjJwzOlIyOcOY2LGx1TR8IYj7aD0zV9PUcS0PLePJYTeQdRXhftx+C34Or1a66VFnVNUQSLEazDkQXIYG9agd727YIdOghq6othttNFGB9PQUgyE6AZ81jmUNT064B3bFm/lXxK4bfV4sHdO6ZUO09jByYXIZbEyxvtwoM9vJaH4rrQPJeBwfVxpsH7QLVfsb3pgN9yj4uqhleeOHaHHvNQVevZdxG9K82lNxEQnp1lkYYJymlLcnKwNBsFArHNqwtKHkAhQ7pneclt+uojXp0qKHi4A2pnBJwHPVA483QopJQxTb/mwPQSCpW/R4tZmgfa1IUJF/Zcc/MjlXIWsF7hr8ZFw90h6j7Wa61gf8OnT/kYNPtmYo6/n0wWwN0ZEVdUmFBcyBF6LRn1tMKyIbjNK5O7fx4G1KqP3senfuyvPoTqmBwq/FDQELKIUD/lSeT1He8Wq0mepuEW5G3xKj98KPHUlZTYhFt8J1Tbl/b+Gea/93btY8iAB1Fvg1mbYW1rOEkPU9rfNjMeY/jNDeaZhxoNn9oI5sCzQ61FEugqZaodoEbpooTPniyhWRc+JJmadJaErk99u2f3zEVywfcPEcGbIawZ9g4nyxCMhosxXdRrBCvv6T/u010AKycgaNw7ghR0iwkpPUKV1Q= + - secure: b6tts5l57ga98XglOGSaKtq7+sMVannkMXI4qZwXQJzslRL1GJ8Qrm3gk/iYcyHNFqmuWM53g/GyFm3NASRNKz9YyXSEfY22Smka34+2aePKkzlNG9R+I0BzNiAqStC0FP29ry6Nbkumpi2TmYpK90g9YTx+DLgqCQY4zoujIPMeZO1Kvy5H9BZhSCiyi7ncjkfYJcZ0MbKUwYLPR07F0Ql9zKmcHNNKJtXAryw+POVqk3jc8Oopj50ZpNZwHRyXY8afRON4gqwOzEq/z9m3DdcZC7sFUt5lv2F/G/YR8nIeL9G5OV9WMfI0HJbUbi4RjNpn7p6528GlxXrL/gXIVzfu5Am3Bg/W3rmvQY6x9PrkTb3Tb8nWwcOHlOtmzHbpqFmh2AmILW7whvWVOTS6UCaoWpwylFnlD/r9uSajrUX+nVuKDhgFJ904tpFBQ5mc+d9IpRrbKTLIxdgpVCMsyxGutWH+znxDMvFNi9h0K3ji07vKA7/r9RcyKMQwVz5nixwMAA7z7D2KZ0SVa/tanVdtfer3YuTm9TpkzDjJInybSOSpM7oVtkoetTKOTVdjNrV6+QKqKXryMpl2IS1Z+weHcNkTC2kuZrf4iaWcvk2GM/uFAeGmFtgj812olP8uAakqiKhylVaFV8uI1lDb2BjYftngZpmc7fVOTo9t7g0= diff --git a/scripts/cicd.py b/scripts/cicd.py index 1e7feac..5b80358 100644 --- a/scripts/cicd.py +++ b/scripts/cicd.py @@ -5,10 +5,11 @@ GraphQL_URL = "https://api.github.com/graphql" if len(sys.argv) == 1: - print "pass your GitHub key to this script" + print("Usage: python %s GITHUB_API_KEY" % sys.argv[0]) exit(0) -headers = {"Authorization": "Bearer " + sys.argv[1], "content-type": "application/json"} +GITHUB_API_KEY = sys.argv[1] +headers = {"Authorization": "Bearer " + GITHUB_API_KEY, "content-type": "application/json"} query = """ { diff --git a/scripts/confluence.py b/scripts/confluence.py new file mode 100644 index 0000000..7588f57 --- /dev/null +++ b/scripts/confluence.py @@ -0,0 +1,133 @@ +import json +import requests +import sys +from requests.auth import HTTPBasicAuth +import dateutil.parser + +if len(sys.argv) < 4: + print("Usage: python %s ATLASSIAN_EMAIL ATLASSIAN_TOKEN GITHUB_API_KEY" % sys.argv[0]) + exit(0) + +BASE_URL = "https://smartregister.atlassian.net/wiki/rest/api/content" +GraphQL_URL = "https://api.github.com/graphql" +ATLASSIAN_EMAIL = sys.argv[1] +ATLASSIAN_TOKEN = sys.argv[2] +GITHUB_API_KEY = sys.argv[3] + +BASIC_AUTH = HTTPBasicAuth(ATLASSIAN_EMAIL, ATLASSIAN_TOKEN) + +def get_page_json(page_id, expand = False): + if expand: + suffix = "?expand=" + expand + else: + suffix = "" + + url=BASE_URL + "/" + page_id + suffix + response = requests.get(url, auth=BASIC_AUTH) + if response.status_code == 200: + json_body = json.loads(response.text) + return json_body + else: + print "Error code returned " + str(response.status_code) + +def get_page_info(page_id): + url = '{base}/{page_id}'.format( + base = BASE_URL, + page_id = page_id) + response = requests.get(url, auth = BASIC_AUTH) + if response.status_code == 200: + return json.loads(response.text) + else: + print "Error code returned " + str(response.status_code) + +def update_page(page_id, html): + info = get_page_info(page_id) + version = int(info['version']['number']) + 1 + + data = { + 'id' : str(page_id), + 'type' : 'page', + 'title' : info['title'], + 'version' : {'number' : version}, + 'body' : { + 'storage' : + { + 'representation' : 'storage', + 'value' : str(html), + } + } + } + + data = json.dumps(data) + url = '{base}/{page_id}'.format(base = BASE_URL, page_id = page_id) + + response = requests.put( + url, + data = data, + headers = { 'Content-Type' : 'application/json' }, + auth = BASIC_AUTH + ) + if response.status_code == 200: + return json.loads(response.text) + else: + print "Error code returned " + str(response.status_code) + +def insert_row_to_page(current_content, new_html): + # find last occurrence of + body = current_content['body']['storage']['value'] + k = body.rfind("") + return body[:k] + new_html + body[k:] + + +def get_release_details(): + headers = {"Authorization": "Bearer " + GITHUB_API_KEY, "content-type": "application/json"} + query = """ + { + repository(owner: "Andati", name: "BriskPesa") { + releases(last: 1) { + edges{ + node{ + tagName + publishedAt + description + releaseAssets(first: 1) { + nodes { + downloadUrl + } + } + } + } + } + } + } + """ + response = requests.post(GraphQL_URL, data=json.dumps({'query':query}), headers=headers) + if response.status_code == 200: + json_response = response.json() + tag_name = json_response['data']['repository']['releases']['edges'][0]['node']['tagName'] + published_at = json_response['data']['repository']['releases']['edges'][0]['node']['publishedAt'] + description = json_response['data']['repository']['releases']['edges'][0]['node']['description'] + download_url = json_response['data']['repository']['releases']['edges'][0]['node']['releaseAssets']['nodes'][0]['downloadUrl'] + return {"published_at":published_at, "description":description, "download_url":download_url, "tag_name":tag_name} + else: + print "Error code returned " + str(response.status_code) + +def suffix(day): + return 'th' if 11<=day<=13 else {1:'st',2:'nd',3:'rd'}.get(day%10, 'th') + +def custom_strftime(format, t): + return t.strftime(format).replace('{S}', str(t.day) + suffix(t.day)) + +current_content = get_page_json("1245380625", "body.storage") +#print current_content + +release_details = get_release_details() +#print release_details + +published_at = dateutil.parser.parse(release_details["published_at"]) +new_html = '

'+ release_details["tag_name"] +'

'+ custom_strftime('%b {S}, %Y', published_at) +'

'+ release_details["description"] +'

' +print new_html + +res = update_page("1245380625", insert_row_to_page(current_content, new_html)) +#print(res) + From 2a35204868426041507bd04f983f5e0e5157c2ce Mon Sep 17 00:00:00 2001 From: Rodgers Andati Date: Fri, 20 Dec 2019 12:52:28 +0300 Subject: [PATCH 07/15] show python version --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index bf94261..de82de7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -13,7 +13,8 @@ notifications: script: - "./gradlew build" - log=`python scripts/cicd.py $GITHUB_API_KEY` -- echo $'**Change log:**
'${log//$'\n'/
} +- echo ${log//$'\n'/
} +- python --version before_deploy: - git fetch --tags - log=`python scripts/cicd.py $GITHUB_API_KEY` From 10fd48720e83eee8383918e3cb322c35ee7fc21c Mon Sep 17 00:00:00 2001 From: Rodgers Andati Date: Fri, 20 Dec 2019 13:09:20 +0300 Subject: [PATCH 08/15] stop using dateutil.parser module --- .travis.yml | 1 - scripts/confluence.py | 5 +++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index de82de7..3743964 100644 --- a/.travis.yml +++ b/.travis.yml @@ -16,7 +16,6 @@ script: - echo ${log//$'\n'/
} - python --version before_deploy: -- git fetch --tags - log=`python scripts/cicd.py $GITHUB_API_KEY` - export BODY=${log//$'\n'/
} deploy: diff --git a/scripts/confluence.py b/scripts/confluence.py index 7588f57..0ee6d49 100644 --- a/scripts/confluence.py +++ b/scripts/confluence.py @@ -2,7 +2,7 @@ import requests import sys from requests.auth import HTTPBasicAuth -import dateutil.parser +from datetime import datetime if len(sys.argv) < 4: print("Usage: python %s ATLASSIAN_EMAIL ATLASSIAN_TOKEN GITHUB_API_KEY" % sys.argv[0]) @@ -124,7 +124,8 @@ def custom_strftime(format, t): release_details = get_release_details() #print release_details -published_at = dateutil.parser.parse(release_details["published_at"]) +published_at = datetime.strptime(release_details["published_at"], "%Y-%m-%dT%H:%M:%SZ") + new_html = '

'+ release_details["tag_name"] +'

'+ custom_strftime('%b {S}, %Y', published_at) +'

'+ release_details["description"] +'

' print new_html From 1163dd9404ea80175954461421cf0256d5eeaa6e Mon Sep 17 00:00:00 2001 From: Rodgers Andati Date: Fri, 20 Dec 2019 14:29:20 +0300 Subject: [PATCH 09/15] pass TRAVIS_REPO_SLUG to the deploy scripts --- .travis.yml | 6 +++--- scripts/cicd.py | 40 +++++++++++++++++++++------------------- scripts/confluence.py | 17 +++++++++++++---- 3 files changed, 37 insertions(+), 26 deletions(-) diff --git a/.travis.yml b/.travis.yml index 3743964..4d2afb8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -12,11 +12,11 @@ notifications: slack: argila:bXGzFxqVuwbq5AC2pbP4J2yq script: - "./gradlew build" -- log=`python scripts/cicd.py $GITHUB_API_KEY` +- log=`python scripts/cicd.py $GITHUB_API_KEY $TRAVIS_REPO_SLUG` - echo ${log//$'\n'/
} - python --version before_deploy: -- log=`python scripts/cicd.py $GITHUB_API_KEY` +- log=`python scripts/cicd.py $GITHUB_API_KEY $TRAVIS_REPO_SLUG` - export BODY=${log//$'\n'/
} deploy: - provider: releases @@ -29,7 +29,7 @@ deploy: tags: true repo: Andati/BriskPesa after_deploy: -- python scripts/confluence.py $ATLASSIAN_EMAIL $ATLASSIAN_TOKEN $GITHUB_API_KEY +- python scripts/confluence.py $ATLASSIAN_EMAIL $ATLASSIAN_TOKEN $GITHUB_API_KEY $TRAVIS_REPO_SLUG env: global: - secure: 1s70r8zZNAsAHI7fctsEdBTWAAvmiDtvK2tThC+2RBxEJnKZqSFzDkLC1LvM1tX8ufN/dD0y6oBdKhOkxlFaiVci/ow+sUZbTx4PBP1/NsleMwk+muK732MQBiMFz4a7Tcwc6tY8OZYovBrPlcbEuZ/UJroinxMJucUOiPUTMmZbvK6XKBOm+8+jH4zIQjhOskJCE81SoZxaQwVpZ0Dur61nPxevLPlrw27Dz6pGON/leTegWa1LhTbD5Yn4t/tcHCxqgn5SEXjgUt+I4EK4+4WkKhn3hACtLo8q2N5BC8+fXdAoR2EbrCxyX4/zcfDpqwtzvkAzdv4Stfy7miCo29bWGDdufvFXxP/oNHS08HYU1Qkg8F2o3egAMvEbA397QSqC2WjFtgJ06UA/DC6JB5nC/slokaoGKllLq8YJfFP5979a6l8rHmk7uFwRNdSx9NqN0lqIu8ByqqmHhG3ju7Z4HSpxUxWdeK7rV4G04545Xp+u5oJc7MWM8wBTHG/8FaQgrE0/+qw3m8zbsmAT7zhJl0qbug4mF7MPx+om8ViFRH/mlneyOScKnioQt3vfWsxy4oheICxAH6a3LHB9R6RWaKn8VzrWuL5wKIYGk/zttX41fZ+YAIS4DUEQ04DG3FL2l0ztr20a4bYdcdXaZ+QxKSYDaW63oylB9Z957K0= diff --git a/scripts/cicd.py b/scripts/cicd.py index 5b80358..514dfcf 100644 --- a/scripts/cicd.py +++ b/scripts/cicd.py @@ -4,30 +4,31 @@ GraphQL_URL = "https://api.github.com/graphql" -if len(sys.argv) == 1: - print("Usage: python %s GITHUB_API_KEY" % sys.argv[0]) +if len(sys.argv) < 3: + print("Usage: python %s GITHUB_API_KEY REPO_SLUG" % sys.argv[0]) exit(0) GITHUB_API_KEY = sys.argv[1] +REPO_SLUG = sys.argv[2] headers = {"Authorization": "Bearer " + GITHUB_API_KEY, "content-type": "application/json"} query = """ -{ - search(query: "repo:Andati/BriskPesa is:pr is:merged merged:>2019-12-09", type: ISSUE, last: 100) { - edges { - node { - ... on PullRequest { - url - title - bodyText - createdAt - mergedAt - } - } - } - } -} -""" + { + search(query: "repo:%s is:pr is:merged merged:>2019-12-09", type: ISSUE, last: 100) { + edges { + node { + ... on PullRequest { + url + title + bodyText + createdAt + mergedAt + } + } + } + } + } + """ % REPO_SLUG def cleanBodyText(body): res = ""; @@ -43,9 +44,10 @@ def cleanBodyText(body): if response.status_code == 200: json_response = response.json() edges = json_response['data']['search']['edges'] + if len(edges) == 0: + print "No PR found given the search params: " + REPO_SLUG for edge in edges: print cleanBodyText(edge['node']['bodyText']) else: print "Error code returned " + str(response.status_code) - diff --git a/scripts/confluence.py b/scripts/confluence.py index 0ee6d49..39b94f7 100644 --- a/scripts/confluence.py +++ b/scripts/confluence.py @@ -4,8 +4,8 @@ from requests.auth import HTTPBasicAuth from datetime import datetime -if len(sys.argv) < 4: - print("Usage: python %s ATLASSIAN_EMAIL ATLASSIAN_TOKEN GITHUB_API_KEY" % sys.argv[0]) +if len(sys.argv) < 5: + print("Usage: python %s ATLASSIAN_EMAIL ATLASSIAN_TOKEN GITHUB_API_KEY REPO_SLUG" % sys.argv[0]) exit(0) BASE_URL = "https://smartregister.atlassian.net/wiki/rest/api/content" @@ -14,6 +14,9 @@ ATLASSIAN_TOKEN = sys.argv[2] GITHUB_API_KEY = sys.argv[3] +REPO_SLUG = sys.argv[4] +(OWNER_NAME, REPO_NAME) = REPO_SLUG.split("/") + BASIC_AUTH = HTTPBasicAuth(ATLASSIAN_EMAIL, ATLASSIAN_TOKEN) def get_page_json(page_id, expand = False): @@ -83,7 +86,7 @@ def get_release_details(): headers = {"Authorization": "Bearer " + GITHUB_API_KEY, "content-type": "application/json"} query = """ { - repository(owner: "Andati", name: "BriskPesa") { + repository(owner: "%s", name: "%s") { releases(last: 1) { edges{ node{ @@ -100,10 +103,14 @@ def get_release_details(): } } } - """ + """ % (OWNER_NAME, REPO_NAME) + response = requests.post(GraphQL_URL, data=json.dumps({'query':query}), headers=headers) if response.status_code == 200: json_response = response.json() + if json_response['data']['repository'] == None: + print "Exception encountered: " + response.text + return None tag_name = json_response['data']['repository']['releases']['edges'][0]['node']['tagName'] published_at = json_response['data']['repository']['releases']['edges'][0]['node']['publishedAt'] description = json_response['data']['repository']['releases']['edges'][0]['node']['description'] @@ -122,6 +129,8 @@ def custom_strftime(format, t): #print current_content release_details = get_release_details() +if release_details == None: + exit(0) #print release_details published_at = datetime.strptime(release_details["published_at"], "%Y-%m-%dT%H:%M:%SZ") From 3af17287ef93ce27193c08d39edcd254af20e170 Mon Sep 17 00:00:00 2001 From: Rodgers Andati Date: Fri, 28 Feb 2020 15:58:27 +0300 Subject: [PATCH 10/15] make date when prs were merged variable --- scripts/cicd.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/scripts/cicd.py b/scripts/cicd.py index 514dfcf..97a3f8a 100644 --- a/scripts/cicd.py +++ b/scripts/cicd.py @@ -1,8 +1,10 @@ import requests import sys import json +from datetime import datetime, timedelta GraphQL_URL = "https://api.github.com/graphql" +PERIOD = 150 #days if len(sys.argv) < 3: print("Usage: python %s GITHUB_API_KEY REPO_SLUG" % sys.argv[0]) @@ -12,9 +14,11 @@ REPO_SLUG = sys.argv[2] headers = {"Authorization": "Bearer " + GITHUB_API_KEY, "content-type": "application/json"} +date_since = (datetime.today() - timedelta(days=PERIOD)).strftime("%Y-%m-%d") + query = """ { - search(query: "repo:%s is:pr is:merged merged:>2019-12-09", type: ISSUE, last: 100) { + search(query: "repo:%s is:pr is:merged merged:>%s", type: ISSUE, last: 100) { edges { node { ... on PullRequest { @@ -28,7 +32,7 @@ } } } - """ % REPO_SLUG + """ % (date_since, REPO_SLUG) def cleanBodyText(body): res = ""; From 08634eab0ee1558978c6f381da91f143af5afbe9 Mon Sep 17 00:00:00 2001 From: Rodgers Andati Date: Fri, 28 Feb 2020 16:04:46 +0300 Subject: [PATCH 11/15] remove unnecessary commands --- .travis.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 4d2afb8..f5c3018 100644 --- a/.travis.yml +++ b/.travis.yml @@ -12,17 +12,16 @@ notifications: slack: argila:bXGzFxqVuwbq5AC2pbP4J2yq script: - "./gradlew build" -- log=`python scripts/cicd.py $GITHUB_API_KEY $TRAVIS_REPO_SLUG` -- echo ${log//$'\n'/
} - python --version before_deploy: - log=`python scripts/cicd.py $GITHUB_API_KEY $TRAVIS_REPO_SLUG` +- echo ${log//$'\n'/
} - export BODY=${log//$'\n'/
} deploy: - provider: releases api_key: secure: TZVw75NsfqF9MYBzyBvV1Inx1EXQWZcBuyQzczLXueuZprIHlXo9jJ6gdxO5GaJC5KABbQiXP1fcDieS/CEvYEVfjqy4191gdcBhQ54/cGyF/qJX4e52FwU+5ufqSegv3MY1tmACwlEFFbRXwZ9aR/uaPa9hMGTC0QsxdNpAf4m5HHkp3HGoA24m+Dj1uoH5woNhNQPIC33KS1QkYxTWYm+RzjHzkF7E4hLETVECfX2/vhL8KMLUi+b8aRzHunDOXzi09BMR3SnODHYb8pjrVwOxazDMHMKyWzKdt19CSnV94+SqRuti+NYqrBaWb3YYR+I3PLHkNgdhJUhh4ucAzE/qhMnlwIjKsOYki6BNl4j2KMPzJsmo8IkdIoq5VQY9naAx83gMa7VUqWae6lSvHeNyTLyt3/GnDcnu3j00l0LqV/O8IwyHln4BFNOyd794NeiocrIvDNJPYNg9n5BsiEOaaleS7slF8x/KoJVoi4+ymuxrISGfylLUwfsh5T8b/HnR2VNMuryHrb5xOMmongvEORySfl/gpNHihW060IdgmwdI7WYKKI2nXpKLgxWSUppVOP7JxeRUw7TIHHbQ95gXZmg9Qvckf4wITmk1fJd2wV6pO4xK82Jqh42BC5Uc+DWFl90hpZAm6tHv6BE0O4tY7ZzdBxiwP30cCQrZYa4= - body: "$BODY" + body: $BODY file: sample/build/outputs/apk/debug/sample-debug.apk skip_cleanup: true on: From 675f012cc4e73d43181399155f89bfbe123fdab8 Mon Sep 17 00:00:00 2001 From: Rodgers Andati Date: Fri, 28 Feb 2020 16:28:55 +0300 Subject: [PATCH 12/15] fix param order in cicd.py query variable --- scripts/cicd.py | 2 +- scripts/confluence.py | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/scripts/cicd.py b/scripts/cicd.py index 97a3f8a..abe1c98 100644 --- a/scripts/cicd.py +++ b/scripts/cicd.py @@ -32,7 +32,7 @@ } } } - """ % (date_since, REPO_SLUG) + """ % (REPO_SLUG, date_since) def cleanBodyText(body): res = ""; diff --git a/scripts/confluence.py b/scripts/confluence.py index 39b94f7..037bc62 100644 --- a/scripts/confluence.py +++ b/scripts/confluence.py @@ -131,10 +131,12 @@ def custom_strftime(format, t): release_details = get_release_details() if release_details == None: exit(0) -#print release_details published_at = datetime.strptime(release_details["published_at"], "%Y-%m-%dT%H:%M:%SZ") +if release_details["description"] == None: + release_details["description"] = "" + new_html = '

'+ release_details["tag_name"] +'

'+ custom_strftime('%b {S}, %Y', published_at) +'

'+ release_details["description"] +'

' print new_html From b5d6433768fa23c314127fbc04bebf4f0d2073c5 Mon Sep 17 00:00:00 2001 From: Rodgers Andati Date: Fri, 28 Feb 2020 16:57:19 +0300 Subject: [PATCH 13/15] move getting log to script --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index f5c3018..101a12e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -12,10 +12,10 @@ notifications: slack: argila:bXGzFxqVuwbq5AC2pbP4J2yq script: - "./gradlew build" -- python --version -before_deploy: - log=`python scripts/cicd.py $GITHUB_API_KEY $TRAVIS_REPO_SLUG` - echo ${log//$'\n'/
} +- python --version +before_deploy: - export BODY=${log//$'\n'/
} deploy: - provider: releases From 106a03b8adffa9e91aa7400747a61ba501c10c8c Mon Sep 17 00:00:00 2001 From: Rodgers Andati Date: Fri, 28 Feb 2020 17:34:53 +0300 Subject: [PATCH 14/15] change body to release_notes --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 101a12e..38acfb1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -21,7 +21,7 @@ deploy: - provider: releases api_key: secure: TZVw75NsfqF9MYBzyBvV1Inx1EXQWZcBuyQzczLXueuZprIHlXo9jJ6gdxO5GaJC5KABbQiXP1fcDieS/CEvYEVfjqy4191gdcBhQ54/cGyF/qJX4e52FwU+5ufqSegv3MY1tmACwlEFFbRXwZ9aR/uaPa9hMGTC0QsxdNpAf4m5HHkp3HGoA24m+Dj1uoH5woNhNQPIC33KS1QkYxTWYm+RzjHzkF7E4hLETVECfX2/vhL8KMLUi+b8aRzHunDOXzi09BMR3SnODHYb8pjrVwOxazDMHMKyWzKdt19CSnV94+SqRuti+NYqrBaWb3YYR+I3PLHkNgdhJUhh4ucAzE/qhMnlwIjKsOYki6BNl4j2KMPzJsmo8IkdIoq5VQY9naAx83gMa7VUqWae6lSvHeNyTLyt3/GnDcnu3j00l0LqV/O8IwyHln4BFNOyd794NeiocrIvDNJPYNg9n5BsiEOaaleS7slF8x/KoJVoi4+ymuxrISGfylLUwfsh5T8b/HnR2VNMuryHrb5xOMmongvEORySfl/gpNHihW060IdgmwdI7WYKKI2nXpKLgxWSUppVOP7JxeRUw7TIHHbQ95gXZmg9Qvckf4wITmk1fJd2wV6pO4xK82Jqh42BC5Uc+DWFl90hpZAm6tHv6BE0O4tY7ZzdBxiwP30cCQrZYa4= - body: $BODY + release_notes: $BODY file: sample/build/outputs/apk/debug/sample-debug.apk skip_cleanup: true on: From 060132ba3edc95fdddbc6c5c1fcef1e014f353c4 Mon Sep 17 00:00:00 2001 From: Rodgers Andati Date: Fri, 28 Feb 2020 17:45:54 +0300 Subject: [PATCH 15/15] put body in quotes --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 38acfb1..dbd145f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -21,7 +21,7 @@ deploy: - provider: releases api_key: secure: TZVw75NsfqF9MYBzyBvV1Inx1EXQWZcBuyQzczLXueuZprIHlXo9jJ6gdxO5GaJC5KABbQiXP1fcDieS/CEvYEVfjqy4191gdcBhQ54/cGyF/qJX4e52FwU+5ufqSegv3MY1tmACwlEFFbRXwZ9aR/uaPa9hMGTC0QsxdNpAf4m5HHkp3HGoA24m+Dj1uoH5woNhNQPIC33KS1QkYxTWYm+RzjHzkF7E4hLETVECfX2/vhL8KMLUi+b8aRzHunDOXzi09BMR3SnODHYb8pjrVwOxazDMHMKyWzKdt19CSnV94+SqRuti+NYqrBaWb3YYR+I3PLHkNgdhJUhh4ucAzE/qhMnlwIjKsOYki6BNl4j2KMPzJsmo8IkdIoq5VQY9naAx83gMa7VUqWae6lSvHeNyTLyt3/GnDcnu3j00l0LqV/O8IwyHln4BFNOyd794NeiocrIvDNJPYNg9n5BsiEOaaleS7slF8x/KoJVoi4+ymuxrISGfylLUwfsh5T8b/HnR2VNMuryHrb5xOMmongvEORySfl/gpNHihW060IdgmwdI7WYKKI2nXpKLgxWSUppVOP7JxeRUw7TIHHbQ95gXZmg9Qvckf4wITmk1fJd2wV6pO4xK82Jqh42BC5Uc+DWFl90hpZAm6tHv6BE0O4tY7ZzdBxiwP30cCQrZYa4= - release_notes: $BODY + release_notes: "$BODY" file: sample/build/outputs/apk/debug/sample-debug.apk skip_cleanup: true on: