annotate service/iot2/tasks.py @ 1492:7c7415cfbc02

iot2: WIP still. more messages schema Ignore-this: ef94336852ff8885df861146fc1b01b darcs-hash:f5e1ffe61ecff1a7430b58a7504e35dcc809b1f8
author drewp <drewp@bigasterisk.com>
date Wed, 29 Jan 2020 01:03:40 -0800
parents 455b1b80516e
children 17ff9322328b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1489
a4fb4cc60ae1 get some iot2 tests going
drewp <drewp@bigasterisk.com>
parents:
diff changeset
1 from invoke import task
a4fb4cc60ae1 get some iot2 tests going
drewp <drewp@bigasterisk.com>
parents:
diff changeset
2 from pathlib import Path
a4fb4cc60ae1 get some iot2 tests going
drewp <drewp@bigasterisk.com>
parents:
diff changeset
3
1490
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
4 PY_ENV = f'build/py'
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
5 NIM_ENV = f'build/nim'
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
6 NIM_BIN = f'{NIM_ENV}/bin'
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
7 PY_SITE_PACKAGES = f'{PY_ENV}/lib/python3.7/site-packages'
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
8 SOME_PY_DEP = Path(f'{PY_SITE_PACKAGES}/standardservice')
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
9
1489
a4fb4cc60ae1 get some iot2 tests going
drewp <drewp@bigasterisk.com>
parents:
diff changeset
10 @task
a4fb4cc60ae1 get some iot2 tests going
drewp <drewp@bigasterisk.com>
parents:
diff changeset
11 def nim_install(ctx):
1490
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
12 if Path(f'{NIM_BIN}/nim').exists():
1489
a4fb4cc60ae1 get some iot2 tests going
drewp <drewp@bigasterisk.com>
parents:
diff changeset
13 return
1490
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
14 ctx.run(f'curl https://nim-lang.org/download/nim-1.0.4-linux_x64.tar.xz | '
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
15 f'xz -dc | '
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
16 f'tar --extract --strip-components=1 --one-top-level={NIM_ENV}')
1489
a4fb4cc60ae1 get some iot2 tests going
drewp <drewp@bigasterisk.com>
parents:
diff changeset
17
a4fb4cc60ae1 get some iot2 tests going
drewp <drewp@bigasterisk.com>
parents:
diff changeset
18 @task
a4fb4cc60ae1 get some iot2 tests going
drewp <drewp@bigasterisk.com>
parents:
diff changeset
19 def py_install(ctx):
1490
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
20 if Path(f'{PY_ENV}/bin/python').exists():
1489
a4fb4cc60ae1 get some iot2 tests going
drewp <drewp@bigasterisk.com>
parents:
diff changeset
21 return
1490
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
22 ctx.run(f'mkdir -p {PY_ENV}')
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
23 ctx.run(f'virtualenv -p /usr/bin/python3.7 {PY_ENV}')
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
24 # now .../wheel is newer than requirements.txt
1489
a4fb4cc60ae1 get some iot2 tests going
drewp <drewp@bigasterisk.com>
parents:
diff changeset
25
a4fb4cc60ae1 get some iot2 tests going
drewp <drewp@bigasterisk.com>
parents:
diff changeset
26 @task(pre=[py_install])
a4fb4cc60ae1 get some iot2 tests going
drewp <drewp@bigasterisk.com>
parents:
diff changeset
27 def py_deps(ctx):
1490
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
28 pip_install_ever_ran = SOME_PY_DEP.exists()
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
29 pip_install_last_ran = Path(f'{PY_SITE_PACKAGES}/wheel').stat().st_mtime
1489
a4fb4cc60ae1 get some iot2 tests going
drewp <drewp@bigasterisk.com>
parents:
diff changeset
30 requirements = Path('requirements.txt').stat().st_mtime
1490
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
31 if pip_install_ever_ran and pip_install_last_ran > requirements:
1489
a4fb4cc60ae1 get some iot2 tests going
drewp <drewp@bigasterisk.com>
parents:
diff changeset
32 return
1490
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
33 ctx.run(f'{PY_ENV}/bin/pip install '
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
34 #f'--quiet '
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
35 f'--index-url https://projects.bigasterisk.com/ '
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
36 f'--extra-index-url https://pypi.org/simple '
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
37 f'-r requirements.txt')
1489
a4fb4cc60ae1 get some iot2 tests going
drewp <drewp@bigasterisk.com>
parents:
diff changeset
38
a4fb4cc60ae1 get some iot2 tests going
drewp <drewp@bigasterisk.com>
parents:
diff changeset
39 @task(pre=[nim_install])
a4fb4cc60ae1 get some iot2 tests going
drewp <drewp@bigasterisk.com>
parents:
diff changeset
40 def nim_deps(ctx):
1490
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
41 pkgs = [('nimpy', 'nimpy-0.1.0'),
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
42 ('https://github.com/avsej/capnp.nim.git', 'capnp-0.0.3'),
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
43 ]
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
44 if all(Path(f'~/.nimble/pkgs/{pkg[1]}').expanduser().exists() for pkg in pkgs):
1489
a4fb4cc60ae1 get some iot2 tests going
drewp <drewp@bigasterisk.com>
parents:
diff changeset
45 return
1490
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
46 plain_names = ' '.join(p[0] for p in pkgs)
1492
7c7415cfbc02 iot2: WIP still. more messages schema
drewp <drewp@bigasterisk.com>
parents: 1490
diff changeset
47 print('todo: on initial install, this may need to be run a few times')
7c7415cfbc02 iot2: WIP still. more messages schema
drewp <drewp@bigasterisk.com>
parents: 1490
diff changeset
48 ctx.run(f'{NIM_BIN}/nimble install -y {plain_names}',
7c7415cfbc02 iot2: WIP still. more messages schema
drewp <drewp@bigasterisk.com>
parents: 1490
diff changeset
49 pty=True, env={'PATH': f'/usr/bin:{NIM_BIN}'})
1490
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
50 ctx.run(f'ln -s ~/.nimble/bin/capnpc ~/.nimble/bin/capnpc-nim')
1489
a4fb4cc60ae1 get some iot2 tests going
drewp <drewp@bigasterisk.com>
parents:
diff changeset
51
a4fb4cc60ae1 get some iot2 tests going
drewp <drewp@bigasterisk.com>
parents:
diff changeset
52
1490
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
53 @task(pre=[nim_deps])
1489
a4fb4cc60ae1 get some iot2 tests going
drewp <drewp@bigasterisk.com>
parents:
diff changeset
54 def nim_build_x86(ctx):
1490
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
55 ctx.run(f'{NIM_BIN}/nim compile '
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
56 f'--out:build/iot2_linux_x86 '
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
57 f'iot2_linux.nim',
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
58 pty=True)
1489
a4fb4cc60ae1 get some iot2 tests going
drewp <drewp@bigasterisk.com>
parents:
diff changeset
59
a4fb4cc60ae1 get some iot2 tests going
drewp <drewp@bigasterisk.com>
parents:
diff changeset
60 @task
a4fb4cc60ae1 get some iot2 tests going
drewp <drewp@bigasterisk.com>
parents:
diff changeset
61 def arm_cross_compiler_install(ctx):
1490
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
62 if Path('/usr/share/crossbuild-essential-armhf/list').exists():
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
63 return
1489
a4fb4cc60ae1 get some iot2 tests going
drewp <drewp@bigasterisk.com>
parents:
diff changeset
64 ctx.run(f'sudo apt install -y crossbuild-essential-armhf', pty=True)
a4fb4cc60ae1 get some iot2 tests going
drewp <drewp@bigasterisk.com>
parents:
diff changeset
65
1490
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
66 @task(pre=[arm_cross_compiler_install, nim_install])
1489
a4fb4cc60ae1 get some iot2 tests going
drewp <drewp@bigasterisk.com>
parents:
diff changeset
67 def nim_build_arm(ctx):
1490
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
68 ctx.run(f'{NIM_BIN}/nim compile '
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
69 f'--cpu:arm '
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
70 f'--out:build/iot2_linux_arm '
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
71 f'iot2_linux.nim',
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
72 pty=True)
1489
a4fb4cc60ae1 get some iot2 tests going
drewp <drewp@bigasterisk.com>
parents:
diff changeset
73
a4fb4cc60ae1 get some iot2 tests going
drewp <drewp@bigasterisk.com>
parents:
diff changeset
74 @task(pre=[py_deps, nim_build_x86])
a4fb4cc60ae1 get some iot2 tests going
drewp <drewp@bigasterisk.com>
parents:
diff changeset
75 def local_run(ctx):
1490
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
76 ctx.run(f'build/iot2_linux_x86')
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
77
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
78 @task
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
79 def nim_build_esp32(ctx):
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
80 ctx.run(f'{NIM_BIN}/nim compile '
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
81 f'--cpu:arm '
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
82 f'--os:standalone '
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
83 #f'--deadCodeElim:on '
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
84 # --gc:refc|v2|markAndSweep|boehm|go|none|regions
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
85 f'--gc:stack '
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
86 f'--compileOnly:on '
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
87 f'--noMain '
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
88 f'--nimcache:build/nimcache '
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
89 f'--embedsrc:on '
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
90 f'--verbosity:3 '
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
91 #f'-d:release '
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
92 f'iot2_esp32.nim')
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
93 ctx.run(f'')
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
94
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
95 @task
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
96 def install_nim_capnp(ctx):
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
97 ctx.run(f'git clone git@github.com:drewp/capnp.nim.git build/capnp.nim')
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
98 ctx.run(f'cd build/capnp.nim; ./build.sh')
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
99 ctx.run(f'cd build/capnp.nim; bin/nim c capnp/capnpc.nim')
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
100
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
101 @task
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
102 def messages_build_nim(ctx):
455b1b80516e introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents: 1489
diff changeset
103 ctx.run(f'capnp compile -o ./build/capnp.nim/capnp/capnpc messages.capnp > build/messages.nim')
1489
a4fb4cc60ae1 get some iot2 tests going
drewp <drewp@bigasterisk.com>
parents:
diff changeset
104
a4fb4cc60ae1 get some iot2 tests going
drewp <drewp@bigasterisk.com>
parents:
diff changeset
105
a4fb4cc60ae1 get some iot2 tests going
drewp <drewp@bigasterisk.com>
parents:
diff changeset
106 # pack this into docker for pushing to Pi
a4fb4cc60ae1 get some iot2 tests going
drewp <drewp@bigasterisk.com>
parents:
diff changeset
107
a4fb4cc60ae1 get some iot2 tests going
drewp <drewp@bigasterisk.com>
parents:
diff changeset
108 # apt install -y sshfs
a4fb4cc60ae1 get some iot2 tests going
drewp <drewp@bigasterisk.com>
parents:
diff changeset
109 # sshfs drewp@10.2.0.110:/my/proj/homeauto/service/iot2 /mnt
a4fb4cc60ae1 get some iot2 tests going
drewp <drewp@bigasterisk.com>
parents:
diff changeset
110 # cd /mnt
a4fb4cc60ae1 get some iot2 tests going
drewp <drewp@bigasterisk.com>
parents:
diff changeset
111 # ./iot2_linux_arm