mirror of
https://gitlab.com/fdroid/fdroidserver.git
synced 2024-10-03 17:50:11 +02:00
nightly: support arbitrary keystore files for setup
GitHub only allows an SSH key to be used as a Deploy Key for a single repo. That means, each nightly build repo on GitHub/Travis must have its own debug keystore.
This commit is contained in:
parent
76f20da9e8
commit
01f3d071ee
@ -47,7 +47,7 @@ DISTINGUISHED_NAME = 'CN=Android Debug,O=Android,C=US'
|
|||||||
NIGHTLY = '-nightly'
|
NIGHTLY = '-nightly'
|
||||||
|
|
||||||
|
|
||||||
def _ssh_key_from_debug_keystore():
|
def _ssh_key_from_debug_keystore(keystore=KEYSTORE_FILE):
|
||||||
tmp_dir = tempfile.mkdtemp(prefix='.')
|
tmp_dir = tempfile.mkdtemp(prefix='.')
|
||||||
privkey = os.path.join(tmp_dir, '.privkey')
|
privkey = os.path.join(tmp_dir, '.privkey')
|
||||||
key_pem = os.path.join(tmp_dir, '.key.pem')
|
key_pem = os.path.join(tmp_dir, '.key.pem')
|
||||||
@ -55,7 +55,7 @@ def _ssh_key_from_debug_keystore():
|
|||||||
_config = dict()
|
_config = dict()
|
||||||
common.fill_config_defaults(_config)
|
common.fill_config_defaults(_config)
|
||||||
subprocess.check_call([_config['keytool'], '-importkeystore',
|
subprocess.check_call([_config['keytool'], '-importkeystore',
|
||||||
'-srckeystore', KEYSTORE_FILE, '-srcalias', KEY_ALIAS,
|
'-srckeystore', keystore, '-srcalias', KEY_ALIAS,
|
||||||
'-srcstorepass', PASSWORD, '-srckeypass', PASSWORD,
|
'-srcstorepass', PASSWORD, '-srckeypass', PASSWORD,
|
||||||
'-destkeystore', p12, '-destalias', KEY_ALIAS,
|
'-destkeystore', p12, '-destalias', KEY_ALIAS,
|
||||||
'-deststorepass', PASSWORD, '-destkeypass', PASSWORD,
|
'-deststorepass', PASSWORD, '-destkeypass', PASSWORD,
|
||||||
@ -87,6 +87,8 @@ def main():
|
|||||||
|
|
||||||
parser = ArgumentParser(usage="%(prog)s")
|
parser = ArgumentParser(usage="%(prog)s")
|
||||||
common.setup_global_opts(parser)
|
common.setup_global_opts(parser)
|
||||||
|
parser.add_argument("--keystore", default=KEYSTORE_FILE,
|
||||||
|
help=_("Specify which debug keystore file to use."))
|
||||||
parser.add_argument("--show-secret-var", action="store_true", default=False,
|
parser.add_argument("--show-secret-var", action="store_true", default=False,
|
||||||
help=_("Print the secret variable to the terminal for easy copy/paste"))
|
help=_("Print the secret variable to the terminal for easy copy/paste"))
|
||||||
parser.add_argument("--file", default='app/build/outputs/apk/*.apk',
|
parser.add_argument("--file", default='app/build/outputs/apk/*.apk',
|
||||||
@ -291,19 +293,19 @@ Last updated: {date}'''.format(repo_git_base=repo_git_base,
|
|||||||
shutil.rmtree(os.path.dirname(ssh_private_key_file))
|
shutil.rmtree(os.path.dirname(ssh_private_key_file))
|
||||||
|
|
||||||
else:
|
else:
|
||||||
if not os.path.isfile(KEYSTORE_FILE):
|
if not os.path.isfile(options.keystore):
|
||||||
androiddir = os.path.dirname(KEYSTORE_FILE)
|
androiddir = os.path.dirname(options.keystore)
|
||||||
if not os.path.exists(androiddir):
|
if not os.path.exists(androiddir):
|
||||||
os.mkdir(androiddir)
|
os.mkdir(androiddir)
|
||||||
logging.info(_('created {path}').format(path=androiddir))
|
logging.info(_('created {path}').format(path=androiddir))
|
||||||
logging.error(_('{path} does not exist! Create it by running:').format(path=KEYSTORE_FILE)
|
logging.error(_('{path} does not exist! Create it by running:').format(path=options.keystore)
|
||||||
+ '\n keytool -genkey -v -keystore ' + KEYSTORE_FILE + ' -storepass android \\'
|
+ '\n keytool -genkey -v -keystore ' + options.keystore + ' -storepass android \\'
|
||||||
+ '\n -alias androiddebugkey -keypass android -keyalg RSA -keysize 2048 -validity 10000 \\'
|
+ '\n -alias androiddebugkey -keypass android -keyalg RSA -keysize 2048 -validity 10000 \\'
|
||||||
+ '\n -dname "CN=Android Debug,O=Android,C=US"')
|
+ '\n -dname "CN=Android Debug,O=Android,C=US"')
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
ssh_dir = os.path.join(os.getenv('HOME'), '.ssh')
|
ssh_dir = os.path.join(os.getenv('HOME'), '.ssh')
|
||||||
os.makedirs(os.path.dirname(ssh_dir), exist_ok=True)
|
os.makedirs(os.path.dirname(ssh_dir), exist_ok=True)
|
||||||
privkey = _ssh_key_from_debug_keystore()
|
privkey = _ssh_key_from_debug_keystore(options.keystore)
|
||||||
ssh_private_key_file = os.path.join(ssh_dir, os.path.basename(privkey))
|
ssh_private_key_file = os.path.join(ssh_dir, os.path.basename(privkey))
|
||||||
shutil.move(privkey, ssh_private_key_file)
|
shutil.move(privkey, ssh_private_key_file)
|
||||||
shutil.move(privkey + '.pub', ssh_private_key_file + '.pub')
|
shutil.move(privkey + '.pub', ssh_private_key_file + '.pub')
|
||||||
@ -311,10 +313,10 @@ Last updated: {date}'''.format(repo_git_base=repo_git_base,
|
|||||||
shutil.rmtree(os.path.dirname(privkey))
|
shutil.rmtree(os.path.dirname(privkey))
|
||||||
|
|
||||||
if options.show_secret_var:
|
if options.show_secret_var:
|
||||||
with open(KEYSTORE_FILE, 'rb') as fp:
|
with open(options.keystore, 'rb') as fp:
|
||||||
debug_keystore = base64.standard_b64encode(fp.read()).decode('ascii')
|
debug_keystore = base64.standard_b64encode(fp.read()).decode('ascii')
|
||||||
print(_('\n{path} encoded for the DEBUG_KEYSTORE secret variable:')
|
print(_('\n{path} encoded for the DEBUG_KEYSTORE secret variable:')
|
||||||
.format(path=KEYSTORE_FILE))
|
.format(path=options.keystore))
|
||||||
print(debug_keystore)
|
print(debug_keystore)
|
||||||
|
|
||||||
os.umask(umask)
|
os.umask(umask)
|
||||||
|
Loading…
Reference in New Issue
Block a user