Skip to content

Commit f191832

Browse files
committed
Native binary progress. Issue #50
1 parent 02d8488 commit f191832

File tree

3 files changed

+48
-9
lines changed

3 files changed

+48
-9
lines changed

src/Dockerfile

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
FROM arm32v7/python:3.9-bullseye
2+
3+
RUN apt-get update && apt-get install -y --no-install-recommends \
4+
build-essential libssl-dev libffi-dev wget tar python3.9-dev patchelf upx-ucl \
5+
&& python3.9 -m pip install nuitka
6+
7+
WORKDIR /app
8+
COPY downloader /app/downloader/
9+
COPY __main__.py commit.py /app/
10+
11+
ENV CFLAGS="-Os -march=armv7-a"
12+
RUN nuitka --lto=no --follow-imports \
13+
--remove-output \
14+
--include-module=_json \
15+
--python-flag=no_site \
16+
--python-flag=-OO \
17+
--jobs=$(nproc) \
18+
--include-package=downloader __main__.py
19+
20+
RUN upx --best __main__.bin
21+
22+
CMD ["cat", "__main__.bin"]

src/compile.sh

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
#!/usr/bin/env bash
2+
# Copyright (c) 2021-2022 José Manuel Barroso Galindo <[email protected]>
3+
4+
set -euo pipefail
5+
6+
cd src
7+
8+
echo "default_commit = '$(git rev-parse --short HEAD)'" > "commit.py"
9+
docker build --platform=linux/arm/v7 -t downloader-nuitka . > /dev/null
10+
docker run --platform linux/arm/v7 downloader-nuitka

src/debug.py

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,11 @@ def scp_file(src, dest, **kwargs): _ssh_pass('scp', [scp_path(src), scp_path(des
2222
def exec_ssh(cmd, env=None, **kwargs): return _ssh_pass('ssh', [f'root@{mister_ip()}', f'{exports(env)}{cmd}'], **kwargs)
2323
def run_build(**kwargs): send_build(env={"SKIP_REMOVALS": "true"}), exec_ssh(f'/media/fat/downloader.sh', **kwargs)
2424
def run_launcher(**kwargs): send_build(**kwargs), exec_ssh(f'/media/fat/Scripts/downloader.sh', **kwargs)
25+
def run_compile(**kwargs): send_compile(**kwargs), exec_ssh(f'/media/fat/downloader_bin', **kwargs)
2526
def store_push(**kwargs): scp_file('downloader.json', '/media/fat/Scripts/.config/downloader/downloader.json', **kwargs)
2627
def store_pull(**kwargs): scp_file('/media/fat/Scripts/.config/downloader/downloader.json', 'downloader.json', **kwargs)
2728
def log_pull(**kwargs): scp_file('/media/fat/Scripts/.config/downloader/downloader.log', 'downloader.log', **kwargs)
2829

29-
3030
def send_build(env=None, **kwargs):
3131
env = {'DEBUG': 'true', **os.environ.copy(), **(env or {}), 'MISTER': 'true'}
3232
with tempfile.NamedTemporaryFile(delete=False) as tmp: subprocess.run(['./src/build.sh'], stdout=tmp, env=env, check=True)
@@ -39,17 +39,24 @@ def send_build(env=None, **kwargs):
3939

4040
os.remove(tmp.name)
4141

42+
def send_compile(env=None, **kwargs):
43+
with tempfile.NamedTemporaryFile(delete=False) as tmp: subprocess.run(['./src/compile.sh'], stdout=tmp, env=env, check=True)
44+
os.chmod(tmp.name, 0o755)
45+
scp_file(tmp.name, '/media/fat/downloader_bin', **kwargs)
46+
os.remove(tmp.name)
4247

43-
def run_operation(op, env=None, retries=False):
44-
{
48+
def operations_dict(env=None, retries=False):
49+
return {
4550
'store_push': lambda: store_push(retries=retries),
4651
'store_pull': lambda: store_pull(retries=retries),
4752
'log_pull': lambda: log_pull(retries=retries),
53+
'build': lambda: [send_build(env=env, retries=retries), print('OK')],
4854
'run': lambda: run_build(env=env, retries=retries),
55+
'compile': lambda: send_compile(env=env, retries=retries),
56+
'run_compile': lambda: run_compile(env=env, retries=retries),
4957
'launcher': lambda: run_launcher(env=env, retries=retries),
5058
'copy': lambda: scp_file(sys.argv[2], f'/media/fat/{sys.argv[2]}'),
51-
}.get(op, lambda: [send_build(env=env, retries=retries), print('OK')])()
52-
59+
}
5360

5461
def _ssh_pass(cmd, args, out=None, retries=True):
5562
for i in range(4):
@@ -59,13 +66,13 @@ def _ssh_pass(cmd, args, out=None, retries=True):
5966
traceback.print_exc()
6067
time.sleep(30 * (i + 1))
6168

62-
6369
def _main():
70+
operations = operations_dict()
6471
parser = argparse.ArgumentParser()
65-
parser.add_argument('command', choices=['store_push', 'store_pull', 'log_pull', 'run', 'launcher', 'copy'], nargs='?', default=None)
72+
parser.add_argument('command', choices=list(operations), nargs='?', default=None)
6673
parser.add_argument('parameter', nargs='?', default='')
67-
run_operation(parser.parse_args().command)
68-
74+
op = operations.get(parser.parse_args().command, operations['build'])
75+
op()
6976

7077
if __name__ == '__main__':
7178
_main()

0 commit comments

Comments
 (0)