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:
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
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)
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()