Merge branch 'debug_flag' into 'master'
[build] Replace unused --reset-server with --debug See merge request fdroid/fdroidserver!1038
This commit is contained in:
commit
30b607752f
|
@ -83,7 +83,7 @@ __complete_options() {
|
|||
__complete_build() {
|
||||
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
|
||||
:)
|
||||
__vercode
|
||||
|
|
|
@ -240,6 +240,8 @@ def build_server(app, build, vcs, build_dir, output_dir, log_dir, force):
|
|||
cmdline += ' --no-tarball'
|
||||
if (options.scan_binary or config.get('scan_binary')) and not options.skipscan:
|
||||
cmdline += ' --scan-binary'
|
||||
if options.debug:
|
||||
cmdline += ' --debug'
|
||||
cmdline += " %s:%s" % (app.id, build.versionCode)
|
||||
ssh_channel.exec_command('bash --login -c "' + cmdline + '"') # nosec B601 inputs are sanitized
|
||||
|
||||
|
@ -304,8 +306,12 @@ def build_server(app, build, vcs, build_dir, output_dir, log_dir, force):
|
|||
finally:
|
||||
# Suspend the build server.
|
||||
vm = vmtools.get_build_vm('builder')
|
||||
logging.info('destroying buildserver after build')
|
||||
vm.destroy()
|
||||
if options.debug:
|
||||
vm.suspend()
|
||||
logging.warning('buildserver suspended')
|
||||
else:
|
||||
logging.info('destroying buildserver after build')
|
||||
vm.destroy()
|
||||
|
||||
# deploy logfile to repository web server
|
||||
if output:
|
||||
|
@ -394,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" %
|
||||
(app.id, build.versionName), p.output)
|
||||
|
||||
p = FDroidPopen(['sudo', 'passwd', '--lock', 'root'])
|
||||
if p.returncode != 0:
|
||||
raise BuildException("Error locking root account for %s:%s" %
|
||||
(app.id, build.versionName), p.output)
|
||||
if not options.debug:
|
||||
p = FDroidPopen(['sudo', 'passwd', '--lock', 'root'])
|
||||
if p.returncode != 0:
|
||||
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'])
|
||||
if p.returncode != 0:
|
||||
raise BuildException("Error removing sudo for %s:%s" %
|
||||
(app.id, build.versionName), p.output)
|
||||
p = FDroidPopen(['sudo', 'SUDO_FORCE_REMOVE=yes', 'dpkg', '--purge', 'sudo'])
|
||||
if p.returncode != 0:
|
||||
raise BuildException("Error removing sudo for %s:%s" %
|
||||
(app.id, build.versionName), p.output)
|
||||
|
||||
log_path = os.path.join(log_dir,
|
||||
common.get_toolsversion_logname(app, build))
|
||||
|
@ -858,8 +865,8 @@ def parse_commandline():
|
|||
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,
|
||||
help=_("Use build server"))
|
||||
parser.add_argument("--reset-server", action="store_true", default=False,
|
||||
help=_("Reset and create a brand new build server, even if the existing one appears to be ok."))
|
||||
parser.add_argument("--debug", action="store_true", default=False,
|
||||
help=_("Don't remove sudo and keep VM running after build (useful for debugging)."))
|
||||
# this option is internal API for telling fdroid that
|
||||
# it's running inside a buildserver vm.
|
||||
parser.add_argument("--on-server", dest="onserver", action="store_true", default=False,
|
||||
|
@ -933,8 +940,8 @@ def main():
|
|||
|
||||
if config['build_server_always']:
|
||||
options.server = True
|
||||
if options.reset_server and not options.server:
|
||||
parser.error("option %s: Using --reset-server without --server makes no sense" % "reset-server")
|
||||
if options.debug and not (options.server or options.onserver):
|
||||
parser.error("option %s: Using --debug only works with --server" % "debug")
|
||||
|
||||
log_dir = 'logs'
|
||||
if not os.path.isdir(log_dir):
|
||||
|
|
|
@ -471,6 +471,77 @@ class BuildTest(unittest.TestCase):
|
|||
self.assertTrue(ndk_dir.exists())
|
||||
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):
|
||||
"""Test if `fdroid build` cleans ant and gradle build products"""
|
||||
os.chdir(self.testdir)
|
||||
|
|
Loading…
Reference in New Issue