mirror of
https://github.com/f-droid/fdroidserver.git
synced 2025-11-03 22:20:28 +03:00
🖼 set cpus and memory from CLI options
This commit is contained in:
parent
a9f4467661
commit
2386bcc64f
1 changed files with 40 additions and 2 deletions
|
|
@ -30,6 +30,7 @@ Since this is an internal command, the strings are not localized.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
import os
|
||||||
import sys
|
import sys
|
||||||
import textwrap
|
import textwrap
|
||||||
import traceback
|
import traceback
|
||||||
|
|
@ -39,7 +40,7 @@ from . import common
|
||||||
from .exception import BuildException
|
from .exception import BuildException
|
||||||
|
|
||||||
|
|
||||||
def run_podman(appid, vercode):
|
def run_podman(appid, vercode, cpus=None, memory=None):
|
||||||
"""Create a Podman container env isolated for a single app build.
|
"""Create a Podman container env isolated for a single app build.
|
||||||
|
|
||||||
This creates a Podman "pod", which is like an isolated box to
|
This creates a Podman "pod", which is like an isolated box to
|
||||||
|
|
@ -52,6 +53,8 @@ def run_podman(appid, vercode):
|
||||||
The container is set up with an interactive bash process to keep
|
The container is set up with an interactive bash process to keep
|
||||||
the container running.
|
the container running.
|
||||||
|
|
||||||
|
The CPU configuration assumes a Linux kernel.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
container_name = common.get_container_name(appid, vercode)
|
container_name = common.get_container_name(appid, vercode)
|
||||||
pod_name = common.get_pod_name(appid, vercode)
|
pod_name = common.get_pod_name(appid, vercode)
|
||||||
|
|
@ -70,6 +73,10 @@ def run_podman(appid, vercode):
|
||||||
logging.warning(f'Pod {pod_name} exists, removing!')
|
logging.warning(f'Pod {pod_name} exists, removing!')
|
||||||
p.remove(force=True)
|
p.remove(force=True)
|
||||||
|
|
||||||
|
if cpus:
|
||||||
|
# TODO implement some kind of CPU weighting
|
||||||
|
logging.warning('--cpus is currently ignored by the Podman setup')
|
||||||
|
|
||||||
pod = client.pods.create(pod_name)
|
pod = client.pods.create(pod_name)
|
||||||
container = client.containers.create(
|
container = client.containers.create(
|
||||||
image,
|
image,
|
||||||
|
|
@ -79,6 +86,7 @@ def run_podman(appid, vercode):
|
||||||
detach=True,
|
detach=True,
|
||||||
remove=True,
|
remove=True,
|
||||||
stdin_open=True,
|
stdin_open=True,
|
||||||
|
mem_limit=memory,
|
||||||
)
|
)
|
||||||
pod.start()
|
pod.start()
|
||||||
pod.reload()
|
pod.reload()
|
||||||
|
|
@ -132,11 +140,39 @@ def run_vagrant(appid, vercode, cpus, memory):
|
||||||
v.up()
|
v.up()
|
||||||
|
|
||||||
|
|
||||||
|
def get_virt_cpus_opt(cpus):
|
||||||
|
"""Read options and deduce number of requested CPUs for build VM.
|
||||||
|
|
||||||
|
If no CPU count is configured, calculate a reasonable default value.
|
||||||
|
|
||||||
|
"""
|
||||||
|
if cpus:
|
||||||
|
return cpus
|
||||||
|
cpu_cnt = os.cpu_count()
|
||||||
|
if cpu_cnt < 8:
|
||||||
|
return max(1, int(0.5 * cpu_cnt))
|
||||||
|
# use a quarter of available CPUs if there
|
||||||
|
return 2 + int(0.25 * cpu_cnt)
|
||||||
|
|
||||||
|
|
||||||
|
def get_virt_memory_opt(memory):
|
||||||
|
"""Read VM memory size in GB from options or return default.
|
||||||
|
|
||||||
|
Defaults to 6 GB (minimum to build org.fdroid.fdroid in 2025).
|
||||||
|
|
||||||
|
"""
|
||||||
|
if memory:
|
||||||
|
return memory
|
||||||
|
return 6144
|
||||||
|
|
||||||
|
|
||||||
def up_wrapper(appid, vercode, virt_container_type, cpus=None, memory=None):
|
def up_wrapper(appid, vercode, virt_container_type, cpus=None, memory=None):
|
||||||
|
cpus = get_virt_cpus_opt(cpus)
|
||||||
|
memory = get_virt_memory_opt(memory)
|
||||||
if virt_container_type == 'vagrant':
|
if virt_container_type == 'vagrant':
|
||||||
run_vagrant(appid, vercode, cpus, memory)
|
run_vagrant(appid, vercode, cpus, memory)
|
||||||
elif virt_container_type == 'podman':
|
elif virt_container_type == 'podman':
|
||||||
run_podman(appid, vercode)
|
run_podman(appid, vercode, cpus, memory)
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
|
|
@ -170,6 +206,8 @@ def main():
|
||||||
appid,
|
appid,
|
||||||
vercode,
|
vercode,
|
||||||
common.get_virt_container_type(options),
|
common.get_virt_container_type(options),
|
||||||
|
cpus=options.cpus,
|
||||||
|
memory=options.memory,
|
||||||
)
|
)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
if options.verbose:
|
if options.verbose:
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue