From 846f5422fd25a45e7762194a98399d8ba51a01f8 Mon Sep 17 00:00:00 2001 From: thez3ro Date: Wed, 17 May 2017 20:37:49 +0200 Subject: [PATCH] Use gitlab pages as mirror --- fdroidserver/index.py | 20 ++++++++++++-------- fdroidserver/server.py | 30 ++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 8 deletions(-) diff --git a/fdroidserver/index.py b/fdroidserver/index.py index 643210b2..aae2e1b6 100644 --- a/fdroidserver/index.py +++ b/fdroidserver/index.py @@ -114,7 +114,7 @@ def make(apps, sortedids, apks, repodir, archive): else: mirrors.append(urllib.parse.urljoin(mirror + '/', urlbasepath)) for mirror in common.config.get('servergitmirrors', []): - mirror = get_raw_mirror(mirror) + mirror = get_mirror_service_url(mirror) if mirror is not None: mirrors.append(mirror + '/') if mirrorcheckfailed: @@ -517,7 +517,7 @@ def extract_pubkey(): return hexlify(pubkey), repo_pubkey_fingerprint -def get_raw_mirror(url): +def get_mirror_service_url(url): '''Get direct URL from git service for use by fdroidclient Via 'servergitmirrors', fdroidserver can create and push a mirror @@ -531,23 +531,27 @@ def get_raw_mirror(url): url = re.sub(r'^git@(.*):(.*)', r'https://\1/\2', url) segments = url.split("/") + + if segments[4].endswith('.git'): + segments[4] = segments[4][:-4] + hostname = segments[2] + user = segments[3] + repo = segments[4] branch = "master" folder = "fdroid" if hostname == "github.com": - # Github like RAW segments "https://raw.githubusercontent.com/user/repo/master/fdroid" + # Github-like RAW segments "https://raw.githubusercontent.com/user/repo/master/fdroid" segments[2] = "raw.githubusercontent.com" segments.extend([branch, folder]) elif hostname == "gitlab.com": - # Gitlab like RAW segments "https://gitlab.com/user/repo/raw/master/fdroid" - segments.extend(["raw", branch, folder]) + # Gitlab-like Pages segments "https://user.gitlab.com/repo/fdroid" + gitlab_url = ["https:", "", user + ".gitlab.io", repo, folder] + segments = gitlab_url else: return None - if segments[4].endswith('.git'): - segments[4] = segments[4][:-4] - return '/'.join(segments) diff --git a/fdroidserver/server.py b/fdroidserver/server.py index fb20148d..8f8d578f 100644 --- a/fdroidserver/server.py +++ b/fdroidserver/server.py @@ -369,6 +369,36 @@ def update_servergitmirrors(servergitmirrors, repo_section): logging.debug('Pushing to ' + remote.url) with repo.git.custom_environment(GIT_SSH_COMMAND=ssh_cmd): remote.push('master', force=True, set_upstream=True, progress=progress) + + # push for every remote. This will overwrite the git history + for remote in repo.remotes: + branch = 'master' + if remote.name == 'gitlab': + logging.debug('Writing .gitlab-ci.yml to deploy to GitLab Pages') + with open(os.path.join(git_mirror_path, ".gitlab-ci.yml"), "wt") as out_file: + out_file.write("""pages: + script: + - mkdir .public + - cp -r * .public/ + - mv .public public + artifacts: + paths: + - public +""") + + repo.git.add(all=True) + repo.index.commit("fdroidserver git-mirror: Deploy to GitLab Pages") + + logging.debug('Pushing to ' + remote.url) + with repo.git.custom_environment(GIT_SSH_COMMAND=ssh_cmd): + remote.push(branch, force=True, set_upstream=True, progress=progress) + + # Reset the gitlab specific stuff before the next remote. + if remote.name == 'gitlab': + logging.debug('Removing .gitlab-ci.yml now that it has successfully deployed') + repo.index.reset('HEAD^') + repo.index.checkout() + if progress: bar.done()