mirror of
https://gitlab.com/fdroid/fdroidserver.git
synced 2024-06-03 06:10:10 +02:00
Compare commits
4 Commits
cfd7ff5d06
...
206d7fc633
Author | SHA1 | Date | |
---|---|---|---|
|
206d7fc633 | ||
|
ba59241422 | ||
|
04cedd1808 | ||
|
729478ee7c |
|
@ -83,7 +83,7 @@ __complete_options() {
|
||||||
__complete_build() {
|
__complete_build() {
|
||||||
opts="-v -q -l -s -t -f -a"
|
opts="-v -q -l -s -t -f -a"
|
||||||
|
|
||||||
lopts="--verbose --quiet --latest --stop --test --server --reset-server --skip-scan --scan-binary --no-tarball --force --all --no-refresh"
|
lopts="--verbose --quiet --latest --stop --test --server --debug --skip-scan --scan-binary --no-tarball --force --all --no-refresh"
|
||||||
case "${prev}" in
|
case "${prev}" in
|
||||||
:)
|
:)
|
||||||
__vercode
|
__vercode
|
||||||
|
|
|
@ -232,12 +232,16 @@ def build_server(app, build, vcs, build_dir, output_dir, log_dir, force):
|
||||||
cmdline += ' --force --test'
|
cmdline += ' --force --test'
|
||||||
if options.verbose:
|
if options.verbose:
|
||||||
cmdline += ' --verbose'
|
cmdline += ' --verbose'
|
||||||
|
if options.refresh_scanner or config.get('refresh_scanner'):
|
||||||
|
cmdline += ' --refresh-scanner'
|
||||||
if options.skipscan:
|
if options.skipscan:
|
||||||
cmdline += ' --skip-scan'
|
cmdline += ' --skip-scan'
|
||||||
if options.notarball:
|
if options.notarball:
|
||||||
cmdline += ' --no-tarball'
|
cmdline += ' --no-tarball'
|
||||||
if (options.scan_binary or config.get('scan_binary')) and not options.skipscan:
|
if (options.scan_binary or config.get('scan_binary')) and not options.skipscan:
|
||||||
cmdline += ' --scan-binary'
|
cmdline += ' --scan-binary'
|
||||||
|
if options.debug:
|
||||||
|
cmdline += ' --debug'
|
||||||
cmdline += " %s:%s" % (app.id, build.versionCode)
|
cmdline += " %s:%s" % (app.id, build.versionCode)
|
||||||
ssh_channel.exec_command('bash --login -c "' + cmdline + '"') # nosec B601 inputs are sanitized
|
ssh_channel.exec_command('bash --login -c "' + cmdline + '"') # nosec B601 inputs are sanitized
|
||||||
|
|
||||||
|
@ -302,8 +306,12 @@ def build_server(app, build, vcs, build_dir, output_dir, log_dir, force):
|
||||||
finally:
|
finally:
|
||||||
# Suspend the build server.
|
# Suspend the build server.
|
||||||
vm = vmtools.get_build_vm('builder')
|
vm = vmtools.get_build_vm('builder')
|
||||||
logging.info('destroying buildserver after build')
|
if options.debug:
|
||||||
vm.destroy()
|
vm.suspend()
|
||||||
|
logging.warning('buildserver suspended')
|
||||||
|
else:
|
||||||
|
logging.info('destroying buildserver after build')
|
||||||
|
vm.destroy()
|
||||||
|
|
||||||
# deploy logfile to repository web server
|
# deploy logfile to repository web server
|
||||||
if output:
|
if output:
|
||||||
|
@ -392,15 +400,16 @@ def build_local(app, build, vcs, build_dir, output_dir, log_dir, srclib_dir, ext
|
||||||
raise BuildException("Error running sudo command for %s:%s" %
|
raise BuildException("Error running sudo command for %s:%s" %
|
||||||
(app.id, build.versionName), p.output)
|
(app.id, build.versionName), p.output)
|
||||||
|
|
||||||
p = FDroidPopen(['sudo', 'passwd', '--lock', 'root'])
|
if not options.debug:
|
||||||
if p.returncode != 0:
|
p = FDroidPopen(['sudo', 'passwd', '--lock', 'root'])
|
||||||
raise BuildException("Error locking root account for %s:%s" %
|
if p.returncode != 0:
|
||||||
(app.id, build.versionName), p.output)
|
raise BuildException("Error locking root account for %s:%s" %
|
||||||
|
(app.id, build.versionName), p.output)
|
||||||
|
|
||||||
p = FDroidPopen(['sudo', 'SUDO_FORCE_REMOVE=yes', 'dpkg', '--purge', 'sudo'])
|
p = FDroidPopen(['sudo', 'SUDO_FORCE_REMOVE=yes', 'dpkg', '--purge', 'sudo'])
|
||||||
if p.returncode != 0:
|
if p.returncode != 0:
|
||||||
raise BuildException("Error removing sudo for %s:%s" %
|
raise BuildException("Error removing sudo for %s:%s" %
|
||||||
(app.id, build.versionName), p.output)
|
(app.id, build.versionName), p.output)
|
||||||
|
|
||||||
log_path = os.path.join(log_dir,
|
log_path = os.path.join(log_dir,
|
||||||
common.get_toolsversion_logname(app, build))
|
common.get_toolsversion_logname(app, build))
|
||||||
|
@ -854,8 +863,8 @@ def parse_commandline():
|
||||||
help=_("Test mode - put output in the tmp directory only, and always build, even if the output already exists."))
|
help=_("Test mode - put output in the tmp directory only, and always build, even if the output already exists."))
|
||||||
parser.add_argument("--server", action="store_true", default=False,
|
parser.add_argument("--server", action="store_true", default=False,
|
||||||
help=_("Use build server"))
|
help=_("Use build server"))
|
||||||
parser.add_argument("--reset-server", action="store_true", default=False,
|
parser.add_argument("--debug", action="store_true", default=False,
|
||||||
help=_("Reset and create a brand new build server, even if the existing one appears to be ok."))
|
help=_("Don't remove sudo and keep VM running after build (useful for debugging)."))
|
||||||
# this option is internal API for telling fdroid that
|
# this option is internal API for telling fdroid that
|
||||||
# it's running inside a buildserver vm.
|
# it's running inside a buildserver vm.
|
||||||
parser.add_argument("--on-server", dest="onserver", action="store_true", default=False,
|
parser.add_argument("--on-server", dest="onserver", action="store_true", default=False,
|
||||||
|
@ -929,8 +938,8 @@ def main():
|
||||||
|
|
||||||
if config['build_server_always']:
|
if config['build_server_always']:
|
||||||
options.server = True
|
options.server = True
|
||||||
if options.reset_server and not options.server:
|
if options.debug and not (options.server or options.onserver):
|
||||||
parser.error("option %s: Using --reset-server without --server makes no sense" % "reset-server")
|
parser.error("option %s: Using --debug only works with --server" % "debug")
|
||||||
|
|
||||||
log_dir = 'logs'
|
log_dir = 'logs'
|
||||||
if not os.path.isdir(log_dir):
|
if not os.path.isdir(log_dir):
|
||||||
|
|
|
@ -470,6 +470,77 @@ class BuildTest(unittest.TestCase):
|
||||||
self.assertTrue(ndk_dir.exists())
|
self.assertTrue(ndk_dir.exists())
|
||||||
self.assertTrue(os.path.exists(config['ndk_paths'][ndk_version]))
|
self.assertTrue(os.path.exists(config['ndk_paths'][ndk_version]))
|
||||||
|
|
||||||
|
def test_build_local_sudo(self):
|
||||||
|
"""Test if `fdroid build --on-server` removes sudo"""
|
||||||
|
testdir = tempfile.mkdtemp(
|
||||||
|
prefix=inspect.currentframe().f_code.co_name, dir=self.tmpdir
|
||||||
|
)
|
||||||
|
os.chdir(testdir)
|
||||||
|
|
||||||
|
config = {'ndk_paths': {}, 'sdk_path': tempfile.mkdtemp(prefix='android-sdk-')}
|
||||||
|
fdroidserver.common.config = config
|
||||||
|
fdroidserver.build.config = config
|
||||||
|
fdroidserver.build.options = mock.Mock()
|
||||||
|
fdroidserver.build.options.scan_binary = False
|
||||||
|
fdroidserver.build.options.notarball = True
|
||||||
|
fdroidserver.build.options.skipscan = True
|
||||||
|
fdroidserver.build.options.debug = False
|
||||||
|
|
||||||
|
app = fdroidserver.metadata.App()
|
||||||
|
app.id = 'mocked.app.id'
|
||||||
|
build = fdroidserver.metadata.Build()
|
||||||
|
build.commit = '1.0'
|
||||||
|
build.output = app.id + '.apk'
|
||||||
|
build.versionCode = 1
|
||||||
|
build.versionName = '1.0'
|
||||||
|
vcs = mock.Mock()
|
||||||
|
|
||||||
|
def make_fake_apk(output, build):
|
||||||
|
with open(build.output, 'w') as fp:
|
||||||
|
fp.write('APK PLACEHOLDER')
|
||||||
|
return output
|
||||||
|
|
||||||
|
fdroidopen = mock.Mock()
|
||||||
|
|
||||||
|
fdroidopen.return_value = FakeProcess
|
||||||
|
|
||||||
|
# use "as _ignored" just to make a pretty layout
|
||||||
|
with mock.patch(
|
||||||
|
'fdroidserver.common.replace_build_vars', wraps=make_fake_apk
|
||||||
|
) as _ignored, mock.patch(
|
||||||
|
'fdroidserver.common.get_native_code', return_value='x86'
|
||||||
|
) as _ignored, mock.patch(
|
||||||
|
'fdroidserver.common.get_apk_id',
|
||||||
|
return_value=(app.id, build.versionCode, build.versionName),
|
||||||
|
) as _ignored, mock.patch(
|
||||||
|
'fdroidserver.common.is_apk_and_debuggable', return_value=False
|
||||||
|
) as _ignored, mock.patch(
|
||||||
|
'fdroidserver.common.sha256sum',
|
||||||
|
return_value='ad7ce5467e18d40050dc51b8e7affc3e635c85bd8c59be62de32352328ed467e',
|
||||||
|
) as _ignored, mock.patch(
|
||||||
|
'fdroidserver.common.is_apk_and_debuggable', return_value=False
|
||||||
|
) as _ignored, mock.patch(
|
||||||
|
'fdroidserver.build.FDroidPopen', fdroidopen
|
||||||
|
) as fdroidopen:
|
||||||
|
_ignored # silence the linters
|
||||||
|
fdroidserver.build.build_local(
|
||||||
|
app,
|
||||||
|
build,
|
||||||
|
vcs,
|
||||||
|
build_dir=testdir,
|
||||||
|
output_dir=testdir,
|
||||||
|
log_dir=os.getcwd(),
|
||||||
|
srclib_dir=None,
|
||||||
|
extlib_dir=None,
|
||||||
|
tmp_dir=None,
|
||||||
|
force=False,
|
||||||
|
onserver=True,
|
||||||
|
refresh=False,
|
||||||
|
)
|
||||||
|
fdroidopen.assert_called_with(
|
||||||
|
['sudo', 'SUDO_FORCE_REMOVE=yes', 'dpkg', '--purge', 'sudo']
|
||||||
|
)
|
||||||
|
|
||||||
def test_build_local_clean(self):
|
def test_build_local_clean(self):
|
||||||
"""Test if `fdroid build` cleans ant and gradle build products"""
|
"""Test if `fdroid build` cleans ant and gradle build products"""
|
||||||
os.chdir(self.testdir)
|
os.chdir(self.testdir)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user