summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Wirzenius <lwirzenius@wikimedia.org>2019-07-07 20:46:41 +0300
committerLars Wirzenius <lwirzenius@wikimedia.org>2019-07-07 20:46:41 +0300
commit3fafe644a9ce713000107100fc653c5343a21abf (patch)
tree8e235c252a372d1ab02271a26dd0e9e6582570a1
parent2a94bfed8a2a0a445309c05487f30246f93c30c4 (diff)
downloadwmf-ci-arch-3fafe644a9ce713000107100fc653c5343a21abf.tar.gz
Change: vcsworker now sets GitLab CI project variable to API token
-rwxr-xr-xapi.py55
1 files changed, 39 insertions, 16 deletions
diff --git a/api.py b/api.py
index 234ebc7..cbde310 100755
--- a/api.py
+++ b/api.py
@@ -203,8 +203,9 @@ class VCSWorker(API):
GITLAB_DOMAIN = 'wmf-gitlab3.vm.liw.fi'
GITLAB_PROJECT = 'liw'
- def __init__(self, gitlab_token):
- self._token = gitlab_token
+ def __init__(self, gitlab_token, artifact_token):
+ self._gitlab_token = gitlab_token
+ self._artifact_token = artifact_token
self._tmpdir = tempfile.mkdtemp()
logging.info('Workspace: %s', self._tmpdir)
@@ -227,17 +228,22 @@ class VCSWorker(API):
name = spec['gitlab']
dirname = os.path.join(self._tmpdir, name)
- if self._clone(url, ref, dirname):
- ok = self._remove(
- self._token, self.GITLAB_DOMAIN, self.GITLAB_PROJECT, name)
- if ok:
- ok = self._create_repo(self._token, self.GITLAB_DOMAIN, name)
- if ok:
- ok = self._push(
- dirname, self.GITLAB_DOMAIN, self.GITLAB_PROJECT, ref,
- name)
- if ok:
- return 'Repository copied successfully\n'
+ T = self._gitlab_token
+ D = self.GITLAB_DOMAIN
+ P = self.GITLAB_PROJECT
+
+ key = 'ARTIFACT_TOKEN'
+ value = self._artifact_token
+
+ def update():
+ return (self._clone(url, ref, dirname) and
+ self._remove(T, D, P, name) and
+ self._create_repo(T, D, name) and
+ self._set_var(T, D, P, name, key, value) and
+ self._push(dirname, D, P, ref, name))
+
+ if update():
+ return 'Repository copied successfully\n'
logging.error('Something went wrong when copying repository')
return bottle.HTTPError(418)
@@ -267,6 +273,23 @@ class VCSWorker(API):
]
return runcmd('.', argv, self.MAX_CREATE_REPO_TIME)
+
+ def _set_var(self, token, gitlab_domain, gitlab_project, name, key, value):
+ logging.info(
+ 'Setting variable for %s/%s: %s=%s',
+ gitlab_project, name, key, value)
+ name = urllib.parse.quote('%s/%s' % (gitlab_project, name), safe='')
+ url = 'https://%s/api/v4/projects/%s/variables' % (gitlab_domain, name)
+ argv = [
+ 'curl',
+ url,
+ '-sv', '-X' 'POST',
+ '-d', 'key=%s' % key,
+ '-d', 'value=%s' % value,
+ '-HPRIVATE-TOKEN: %s' % token,
+ ]
+ return runcmd('.', argv, self.MAX_CREATE_REPO_TIME)
+
def _push(self, dirname, gitlab_domain, gitlab_project, ref, name):
logging.info('Pushing %s to %s as %s', dirname, gitlab_domain, name)
url = 'ssh://git@%s/%s/%s.git' % (gitlab_domain, gitlab_project, name)
@@ -324,9 +347,9 @@ def main():
if cmd == 'controller':
api = Controller()
elif cmd == 'vcsworker':
- gitlab_token_filename = args.pop(0)
- gitlab_token = get_token_from_file(gitlab_token_filename)
- api = VCSWorker(gitlab_token)
+ gitlab_token = get_token_from_file(args.pop(0))
+ artifact_token = get_token_from_file(args.pop(0))
+ api = VCSWorker(gitlab_token, artifact_token)
else:
sys.exit('Unknown command %s' % cmd)