This is probably one of the releases with the biggest changelog.
What Changed:
- New "OP" system: All the code of the three main component (client, local, server) has been rewritten to match a new project structure based on modules/extensions named "op" (for operation). This is meant to fix an issue (#83) where the codebase was becoming unmaintainable.
- Major minor changes: A lot of small logic has been refactored during this rewrite, meaning the output of specific commands might have changed. If you have custom scripts, please check if they still operate correctly.
rmcommand behavior change: Thermcommand, both on local and server, now supports file globbing (for example,rm *.wavremoves all wav files,rm morse_*removes all files starting withmorse_). Theallargument is deprecated in favor of*.wav. Note that it will still work for now, but will print a warning.rmconfirmation retrieval: The server'srmcommand now waits for the client's response instead of firing and forgetting like on previous versions.getgets proper globbing: Thegetcommand now supports proper globbing, runningget *bw*returns every environment variable containingbwin it.updatecommand syntax change: Theupdatecommand'slatestargument is deprecated. To update to the latest release, simply leave the version empty. Usinglatestwill still work for now, but will print a warning. If you wish to update to the latest commit (unreleased) on the machine, you'll have to usebw-update --latestby yourself. We don't recommend using un-released programs in production.- New debug logs: new debug logs have started to be implemented across the program. They can be enabled by setting
TALKto true (or adding--talkto the start command). - TLS certificates are now cached: the server used to regenerate a self-signed TLS certificate on every startup. It is now cached in
/tmp/bw_certs/and reused across restarts, only regenerating if missing or unreadable. - Remote CLI behavior change: The remote cli manager now prints when a remote client disconnects, and also provides the
REMOTE_CLIENT_IPin the context of onwsjoin and onwsleave handlers. - Auto-runner reliability fix: The systemd service generated by
bw-autorunnow sendsSIGINTon stop instead of the default signal, allowing the client/server to shut down cleanly and run their exit handlers. - Protocol version bump: The protocol commands
PINGandPONGhave been removed, since unused. The client also expects different arguments from the server to start a broadcast. Therefore, the protocol version has been bumped to2.1.3.
Deprecations
Warning
The rm command will no longer accept a all argument in future releases. Please update your scripts to use *wav.
The update command will no longer accept latest as a version. Please leave the version empty to update to the latest version.
Additional Notes
As mentioned earlier, this release comes from a full manual rewrite of the codebase. While we've tested it as thoroughly as we could, bugs are likely still present. If you run into anything unexpected, please open an issue and we'll take care of it as soon as possible.
Updating to this version
To update to this version, run the following command:
bw-update --to v1.2.0-moraCommit history
- =--- v1.2.0-mora ---= (
db4fc97) - server|local: fixed the local and server stopping yet crashing when getting interrupted in daemon mode (
626a277) - client/ops/start.py|local/|server/: uniformize a bit the 'start' signature (
4818813) - Merge pull request #86 from dpipstudio/server-tls (
0323507) - server/ops/startup.py: trying to reuse generated certificates instead of polluting /tmp/ with them (
02a8442) - .github/workflows/*: updated commit message to match the non-existing norms (
0776d4b) - assets/installation.json: added the local status op (
a537c03) - Merge pull request #84 from dpipstudio/op-base (
21648b6) - local/ops/*: setting the tips.is_broadcasting depending on broadcast state (
a8471e9) - client/*: added docstrings (
296a59e) - local/*: added docstrings to every class (
604ed92) - server/ops/sh_cmd.py: forgot the docstring here (
bcc71f1) - server/ops/exit.py: removed useless line (
ff3b0c2) - shared/queue.py: omfg i hate this queue it has so many bugs (
79477cd) - *: Updated headers (
92a5a98) - server/*: commented every class (
f3adfc4) - local/ops/help.py|server/ops/help.py: updated get help (
c139304) - server/opt/env.py|local/opt/env.py: added globbing support on get command (
74caa6a) - shared/prompt.py: fixed edge case where it could read history file but not write in it (
d040c30) - server/ops/hep.py: updated sync part (
bfb3903) - server/ops/upload.py: deprecated latest (
20565e0) - server: removed redundant Log.end() calls (
9cce554) - server/ops/sync.py: some improvements (
d578494) - shared/ws_cmd.py: logging client disconnection and providing ip context to handlers (
8ade97b) - shared/ws_cmd.py: fixed issue introduced by the previous bug fix (
a4090a5) - shared/ws_cmd.py: fixed hanging on 'exit' command (
ac4c309) - shared/queue.py: self.owner -> self.server (
44dbe88) - server: error handling in message catching (
8104f01) - server/ops/exit.py: only dispatching kick if there are connected clients (
cd2ce58) - server/ops/status.py: fixed "Unexpected error in 'status': 'bool' object is not iterable" (
766710b) - shared/ops/sync.py: putting the full source name in the temp filename instead of only the first char (bugfix) (
6fea3ab) - server/ops/help.py: update don't accept latest anymore (
7b48232) - server: providing client_id context to handlers_ondisconnect (
3684307) - server/ops/client_message.py: fixed a bug introduced by the previous bug fix (
6417c2c) - server: better startup sequence (
20646b4) - *: bug fixes (
307f3f5) - server/ops/sh_cmd.py: restored old behavior (
bbae4e0) - server/ops/client_message: restored old behavior (
57fa33e) - server/ops/handlers.py: returning the correct port value (
ee76b2f) - server/ops/start.py|server/ops/stop.py: fixed a small inconsistency (
fb4fddd) - local: removed is_server from get_prompt (
d13b6c2) - server: removed is_server from get_prompt (
e595994) - shared/prompt.py: removed is_server parameter from get_prompt (unused) (
815993d) - assets/installation.json: included server ops (
cdbbb01) - server/ops/kick.py: added a print line (
c509abe) - server: first ""working"" version of ops-based server system (
16f90b9) - shared/ops/handlers.py: preventing against "None" strings (
fa6fe23) - client: replaced os.path with Path in 'shared' inclusion (
a754aed) - local: replaced os.path with Path in 'shared' inclusion (
4141209) - server/ops/exit.py: added exit command and thus the server shutdown process (
b6477e2) - server/ops/status.py: added status command (
a54a418) - server/ops/env.py: added get and set commands, just a copy/paste of local/ops/env.py, not sure if it works properly (
d20c7bb) - server/ops/sh_cmd.py: added < and | commands, just a copy/paste of local/ops/sh_cmd.py, not sure if it works properly (
a8ef252) - server/opt/handlers.py: added handlers command and handler events (
6efdd46) - server/ops/update.py: added support for the update command (
15c2286) - server/ops/kick.py: added kick command (
bef2065) - server/ops/sync.py: fixed rm call (
714bc61) - server/ops/rm.py: added support for the rm cmd (
cfc15db) - server/ops/lf.py: added support for the lf command (
c514e4b) - server/ops/help.py: updated help for dl command (
e91766b) - server/ops/dl.py: added support for dl command, also added [destination] arg (
64370cc) - server/ops/sync.py: added support for sync command (
7b9731f) - server/ops/start.py: uniformize start syntax command with other ones (
f3a5739) - server/ops/morse.py: added support for the morse command (
728ee31) - server/ops/sstv.py: only pausing queue if was triggered by a command (
99e99d4) - server/ops/sstv.py: added sstv command (
a8d5bed) - server/ops/upload.py: added support for upload command (
1358762) - server/ops/queue.py: added support for queue command (
baba454) - server/ops/live.py: added support for live command (
6cde319) - server/ops/stop.py: added stop command (
822a547) - server/ops/start: added start command (
1d10dc8) - server/ops/list.py: added list command (
3ba9a26) - server/ops/help.py: added help command (
838e3b8) - server/ops/client_message.py: handling OK, ERROR, END commands (
b2099f2) - server/ops/register.py: added an op to handle client registration (
f4273a7) - server/ops/startup.py: added server startup op (
47d37e8) - client: fixed the client not stopping on registration timeout (
25d310c) - client: fixed it from stopping two times when failing to connect (
3b32362) - assets/installation.json: added client ops (
7ed456d) - client/ops/stream.py: renamed steam.py to stream.py (
6b678b1) - shared/registry: small change in dbg log (
f64c133) - local/ops/rm.py|client/ops/rm.py: deprecated 'all', still making it work (replaces itself with '*.wav') (
d139302) - client: made minor changes and bug fixes (
cdd6699) - client/ops/*: first pass of bug fixes (
2cb605e) - shared/registry.py: only showing traceback if talk is on true (
b1bd2c1) - client: a somewhat working version (
7abc613) - shared/logger.py: fixed broken logic (
0ceaeb8) - local: updated help message (
9f57d7e) - shared/registry.py: added debug logs (
bb3e69c) - shared/logger.py: forgot the DBG icon (
c46d1ff) - shared/logger.py: directly returning on debug logs if talk isn't set on true (
e3974f8) - shared/logger.py: added a .debug log (
20bb719) - client/ops/status.py: fixed a bug that caused status to crash when broadcasting (
9b9ef88) - client/ops/stream.py: handling STREAM_TOKEN commands (
acd72af) - client/ops/client_stop: removed unused dep (
d147fdd) - client/ops/client_stop.py: replaced Commands.STOP with "stop_broadcast" (
d8a9391) - client/ops/stop.py: added support for the STOP command (
bc7b89e) - client/ops/start.py: support for the START command (
5ac0b69) - client/ops/upload.py: added support for UPLOAD_TOKEN (
1e33e9d) - client/ops/dl.py: added support for DOWNLOAD_TOKEN (
1e4668b) - client/ops/dl.py: added DOWNLOAD_URL command support (
59e9acf) - client/ops/update.py: added support for the UPDATE command (
6fc6e9c) - client/ops/rm.py: added support for REMOVE_FILE command (
b278d21) - local/ops/rm.py: simplified logic (
8f4e6c2) - local/ops/rm.py: using pathvalidator (
4eee933) - client/ops/list_files.py: added support for the LIST_FILES command (
e5c6989) - client/ops/client_stop.py: internal op to cleanly stop the client (similar to the local's "exit" command) (
81329a9) - client/ops/status.py: support for the STATUS command (
30fc4d3) - client/ops/kick.py: support for the KICK command (
f855f4b) - client/ops/connect.py: actually handling every protocol message related to connecting (
0c72886) - shared/protocol.py: removed PING/PONG messages (unused), bumped version to 2.1.3 (
8314a8c) - client: switched to a op-based system ! NO WORKING SYSTEM YET ! (
362f89c) - client/ops/connect.py: basic startup/registration for botwave client (
7571c7e) - local: help hint (
cf1fb23) - local: re-added start comment (
a7576f0) - local: ordered init (
5f809e6) - autorun: now using sigint as a term signal (
7f2d84b) - docs: updated local doc for rm (
06a6d9d) - local/ops/exit.py: no, those signals weren't useful. We'll now just tell systemd to send a SIGINT caught by keyboardinterrupt (
e789420) - shared/queue.py: fixed bug leading to being unable to start broadcast on newer local version (
38a0fcb) - local/ops/live.py: now using piwave_monitor again (
809ae95) - local/ops/start.py: fixed a bug where handlers_onready was called two times (
5947f29) - local/ops/stop.py: accepting silent: bool for logging (
b5620ff) - local: starting the tips engine (
4134bd8) - local/ops/morse.py|local/ops/stop.py: fixed small bugs (
1473d46) - local/ops/sh_cmd.py: ensuring that shell commands dont block the whole event loop by spawning a new thread for them (
2e54120) - local/ops/rm.py: trying to prevent directory traversal and symlinks deletion (
65a753d) - local/ops/*: fixed bugs that the previous bug fix introduced (
5019cfb) - local/ops/status.py: fixed f-string error on older py vers (
a751a42) - local/ops/status.py: fixed copy-paste error (
c8552ba) - local/ops/lf.py: showing only the file name (
67e3796) - local/ops/status.py: added missing status command (
d97f038) - local/*: various (a shit ton) bug fixes (
63b6596) - local: displaying an error on unknown command (
0c54d5c) - local: fixed the program crashing on EOF (
91edc00) - assets/installation.json: included new files (
8f7c524) - local: new op-based prototype (
6a9cc71) - shared/prompt.py: no hardcoded commands anymore, get_prompt takes a command dict in args (
74d064a) - shared/registry: removed get(), get_all(), and added get_instances() (
8d2ba53) - local/ops/handlers.py: removed a leftover debug log (
605d5c2) - local/ops/handlers.py: now async handlers execution (
79a3336) - shared/ws_cmd.py: now async cmd execution (
0f4061f) - shared/handlers.py: now async cmd execution (
af41f1c) - local/ops/sh_cmd.py: using cmd_exec instead of exec (
b549173) - local/ops/exit.py: added support for the exit command (
b285a4d) - shared/registry.py: added UpperException that bypasses on purpose the general Exception catch (
fb461ba) - local/ops/env.py: added get and set commands (
ec745bd) - local/ops/sh_cmd.py: added < and | commands ops (
b224481) - local/ops/*: dispatching correctly handler events (
f5f7521) - local/ops/handlers.py: added handlers commands and events (
79b2e99) - local/ops/dl.wav: implemented dl command (
b29b5f8) - local/ops/upload.py: added upload command op (
86e163d) - local/ops/help.py: updated help | omg i used shared/ops/ for like all the previous commits (
d5e2a8f) - shared/ops/rm.py: added rm command, also refactored logic. now supports globbing (and no 'all' anymore) (
611c640) - shared/ops/lf.py: added lf op (
86cc92d) - shared/ops/morse.py: morse op (
d079b86) - shared/registry.py: tracebacking errors (
dc75f18) - shared/ops/*: using our own registry (
65a43e7) - local/ops/sstv.py: added sstv op (
b2d6ecb) - shared/registry.py: providing registry to ops (
0920de4) - shared/ops.py: including the registry for easier access (
d5bebab) - local/ops/queue.py: added queue op (
6b1e8e5) - shared/registry.py: added from_dir() func (
cde32dd) - local/ops/*: added setup functions (
3db39f8) - shared/pw_monitor.py: replaced asyncio with inspect for a function call (
fd54e1b) - shared/registry.py: the operations register (
2ffd726) - shared/ops.py: different operations (modules) base classes (
ad4c2a1) - local/ops/stop.py: added stop operation (
64e6f41) - local/ops/start.py: added start operation (
70efe9f) - local/ops/live.py: added live operation (
0666161) - local/ops/help.py: added help operation (
6ccff54) - .github/workflows: following redirects (
855c407) - Update installation.json for release v1.1.12-osa (
8a0090b)