diff --git a/fdroidserver/__main__.py b/fdroidserver/__main__.py index 90e05ac1..c6e695f5 100755 --- a/fdroidserver/__main__.py +++ b/fdroidserver/__main__.py @@ -69,6 +69,8 @@ COMMANDS_INTERNAL = [ "destroy", "exec", "execute_sudo", + "fetch_repo", + "fetch_srclibs", "install_ndk", "make_source_tarball", "prepare_source", diff --git a/fdroidserver/fetch_repo.py b/fdroidserver/fetch_repo.py new file mode 100644 index 00000000..727af50a --- /dev/null +++ b/fdroidserver/fetch_repo.py @@ -0,0 +1,61 @@ +#!/usr/bin/env python3 +# +# fetch_repo.py - part of the F-Droid server tools +# Copyright (C) 2024-2025, Michael Pöhn +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +"""Subcommand for fetching Repo: to set up source code to build.""" + +import argparse +import logging +import sys +import traceback + +from fdroidserver import common, metadata + + +def fetch_repo_wrapper(app, build): + vcs, _ignored = common.setup_vcs(app) + vcs.gotorevision(build.commit, refresh=True) + if build.submodules: # TODO move to separate subcommand: fetch_submodules + vcs.initsubmodules() + else: + vcs.deinitsubmodules() + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + common.setup_global_opts(parser) + parser.add_argument( + "APPID:VERCODE", + help="Application ID with Version Code in the form APPID:VERCODE", + ) + options = common.parse_args(parser) + common.set_console_logging(options.verbose) + + try: + appid, vercode = common.split_pkg_arg(options.__dict__['APPID:VERCODE']) + app, build = metadata.get_single_build(appid, vercode) + fetch_repo_wrapper(app, build) + except Exception as e: + if options.verbose: + logging.error(traceback.format_exc()) + else: + logging.error(e) + sys.exit(1) + + +if __name__ == "__main__": + main() diff --git a/fdroidserver/fetch_srclibs.py b/fdroidserver/fetch_srclibs.py new file mode 100644 index 00000000..6ff7b604 --- /dev/null +++ b/fdroidserver/fetch_srclibs.py @@ -0,0 +1,61 @@ +#!/usr/bin/env python3 +# +# fetch_srclibs.py - part of the F-Droid server tools +# Copyright (C) 2024-2025, Michael Pöhn +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +"""Subcommand for setting up source code from srclibs:.""" + +import argparse +import logging +import os +import sys +import traceback + +from fdroidserver import common, metadata + + +def fetch_srclibs_wrapper(build): + srclib_dir = os.path.join('build', 'srclib') + os.makedirs(srclib_dir, exist_ok=True) + + for lib in build.srclibs: + common.getsrclib(lib, srclib_dir, prepare=False, build=build) + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + common.setup_global_opts(parser) + parser.add_argument( + "APPID:VERCODE", + help="Application ID with Version Code in the form APPID:VERCODE", + ) + options = common.parse_args(parser) + common.set_console_logging(options.verbose) + + try: + appid, vercode = common.split_pkg_arg(options.__dict__['APPID:VERCODE']) + _ignored, build = metadata.get_single_build(appid, vercode) + fetch_srclibs_wrapper(build) + except Exception as e: + if options.verbose: + logging.error(traceback.format_exc()) + else: + logging.error(e) + sys.exit(1) + + +if __name__ == "__main__": + main() diff --git a/fdroidserver/push.py b/fdroidserver/push.py index 1a877160..f849f440 100644 --- a/fdroidserver/push.py +++ b/fdroidserver/push.py @@ -191,6 +191,15 @@ def full_push_sequence(appid, vercode, virt_container_type): vercode, virt_container_type, ) + + # fix owner after pushing files + common.inside_exec( + appid, + vercode, + ['chown', '-R', 'vagrant:vagrant', '/home/vagrant'], + virt_container_type, + as_root=True, + ) finally: os.chdir(cwd) diff --git a/tests/test_push.py b/tests/test_push.py index 6c0bcb7f..b89c9b77 100755 --- a/tests/test_push.py +++ b/tests/test_push.py @@ -35,6 +35,7 @@ class Push_main(PushTest): @mock.patch('sys.argv', ['fdroid push', APPID_VERCODE]) @mock.patch('fdroidserver.push.create_build_dirs') @mock.patch('fdroidserver.push.podman_push') + @mock.patch('fdroidserver.common.inside_exec', mock.Mock()) def test_podman(self, podman_push, create_build_dirs): common.config['virt_container_type'] = 'podman' push.main() @@ -44,6 +45,7 @@ class Push_main(PushTest): @mock.patch('sys.argv', ['fdroid push', APPID_VERCODE]) @mock.patch('fdroidserver.push.create_build_dirs') @mock.patch('fdroidserver.push.vagrant_push') + @mock.patch('fdroidserver.common.inside_exec', mock.Mock()) def test_vagrant(self, vagrant_push, create_build_dirs): common.config['virt_container_type'] = 'vagrant' push.main()