mirror of
				https://github.com/f-droid/fdroidserver.git
				synced 2025-11-04 14:30:30 +03:00 
			
		
		
		
	💂 implement vagrant push
This commit is contained in:
		
							parent
							
								
									9fa7193620
								
							
						
					
					
						commit
						e6e788e533
					
				
					 2 changed files with 59 additions and 1 deletions
				
			
		| 
						 | 
				
			
			@ -5213,3 +5213,43 @@ def vagrant_destroy(appid, vercode):
 | 
			
		|||
        v.destroy()
 | 
			
		||||
    if vagrantfile.parent.exists():
 | 
			
		||||
        shutil.rmtree(vagrantfile.parent, ignore_errors=True)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def get_vagrant_bin_path():
 | 
			
		||||
    p = shutil.which("vagrant")
 | 
			
		||||
    if p is None:
 | 
			
		||||
        raise Exception(
 | 
			
		||||
            "'vagrant' not found, make sure it's installed and added to your path"
 | 
			
		||||
        )
 | 
			
		||||
    return p
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def get_rsync_bin_path():
 | 
			
		||||
    p = shutil.which("rsync")
 | 
			
		||||
    if p is None:
 | 
			
		||||
        raise Exception(
 | 
			
		||||
            "'rsync' not found, make sure it's installed and added to your path"
 | 
			
		||||
        )
 | 
			
		||||
    return p
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class TmpVagrantSshConf:
 | 
			
		||||
    """Context manager for getting access to a ssh config of a vagrant VM in form of a temp file."""
 | 
			
		||||
 | 
			
		||||
    def __init__(self, vagrant_bin_path, vagrant_vm_dir):
 | 
			
		||||
        self.vagrant_bin_path = vagrant_bin_path
 | 
			
		||||
        self.vagrant_vm_dir = vagrant_vm_dir
 | 
			
		||||
 | 
			
		||||
    def __enter__(self):
 | 
			
		||||
        self.ssh_config_tf = tempfile.NamedTemporaryFile('wt', encoding="utf8")
 | 
			
		||||
        self.ssh_config_tf.write(
 | 
			
		||||
            subprocess.check_output(
 | 
			
		||||
                [self.vagrant_bin_path, 'ssh-config'],
 | 
			
		||||
                cwd=self.vagrant_vm_dir,
 | 
			
		||||
            ).decode('utf8')
 | 
			
		||||
        )
 | 
			
		||||
        self.ssh_config_tf.flush()
 | 
			
		||||
        return self.ssh_config_tf.name
 | 
			
		||||
 | 
			
		||||
    def __exit__(self, exc_type, exc_value, traceback):
 | 
			
		||||
        self.ssh_config_tf.close()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -32,6 +32,7 @@ Since this is an internal command, the strings are not localized.
 | 
			
		|||
 | 
			
		||||
import logging
 | 
			
		||||
import os
 | 
			
		||||
import subprocess
 | 
			
		||||
import sys
 | 
			
		||||
import tarfile
 | 
			
		||||
import tempfile
 | 
			
		||||
| 
						 | 
				
			
			@ -99,7 +100,24 @@ def podman_push(paths, appid, vercode, as_root=False):
 | 
			
		|||
 | 
			
		||||
def vagrant_push(paths, appid, vercode):
 | 
			
		||||
    """Push files into a build specific vagrant VM."""
 | 
			
		||||
    # TODO implement with `vagrant ssh` and rsync?
 | 
			
		||||
    vagrantbin = common.get_vagrant_bin_path()
 | 
			
		||||
    rsyncbin = common.get_rsync_bin_path()
 | 
			
		||||
 | 
			
		||||
    vagrantfile = common.get_vagrantfile_path(appid, vercode)
 | 
			
		||||
    with common.TmpVagrantSshConf(vagrantbin, vagrantfile.parent) as ssh_config_file:
 | 
			
		||||
        for path in paths:
 | 
			
		||||
            cmd = [
 | 
			
		||||
                rsyncbin,
 | 
			
		||||
                '-av',
 | 
			
		||||
                '--relative',
 | 
			
		||||
                '-e',
 | 
			
		||||
                f'ssh -F {ssh_config_file}',
 | 
			
		||||
                path,
 | 
			
		||||
                'default:{}'.format(common.BUILD_HOME),
 | 
			
		||||
            ]
 | 
			
		||||
            subprocess.check_call(
 | 
			
		||||
                cmd,
 | 
			
		||||
            )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# TODO split out shared code into _podman.py, _vagrant.py, etc
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue