From 0bdd85366a6f5cf17b4de8db2755698f3bf07e23 Mon Sep 17 00:00:00 2001 From: Romain Bazile Date: Wed, 30 Jun 2021 18:41:00 +0200 Subject: [PATCH] update: fix various bugs flow: improve update handling --- flows/main.json | 187 ++++++++++++++++++++++++++--------------- scripts/bash/update.sh | 42 +++++---- 2 files changed, 142 insertions(+), 87 deletions(-) diff --git a/flows/main.json b/flows/main.json index 0d9d847..00ed232 100644 --- a/flows/main.json +++ b/flows/main.json @@ -314,7 +314,8 @@ "primary": "indigo", "accents": "blue", "warn": "red", - "background": "grey" + "background": "grey", + "palette": "light" } }, "site": { @@ -879,7 +880,16 @@ "collapse": false }, { - "id": "7551712b.8ef1b8", + "id": "f0eab4f4.40bc08", + "type": "ui_spacer", + "name": "spacer", + "group": "4248342d.e55fac", + "order": 2, + "width": 5, + "height": 1 + }, + { + "id": "13f34bee.279a44", "type": "ui_spacer", "name": "spacer", "group": "1be83144.4fe4bf", @@ -888,34 +898,34 @@ "height": 1 }, { - "id": "74adb5c6.b38aa4", + "id": "a862072d.0ec1e8", "type": "ui_spacer", "name": "spacer", "group": "1be83144.4fe4bf", "order": 6, - "width": 12, - "height": 1 - }, - { - "id": "5296bfb6.a27f6", - "type": "ui_spacer", - "name": "spacer", - "group": "1be83144.4fe4bf", - "order": 7, "width": 3, "height": 1 }, { - "id": "4179b30f.de0144", + "id": "ac09f674.27d14", + "type": "ui_spacer", + "name": "spacer", + "group": "1be83144.4fe4bf", + "order": 8, + "width": 3, + "height": 1 + }, + { + "id": "bbc09199.173ee", "type": "ui_spacer", "name": "spacer", "group": "1be83144.4fe4bf", "order": 9, - "width": 3, + "width": 12, "height": 1 }, { - "id": "8c8cf500.19fde", + "id": "4b444d98.a84854", "type": "ui_spacer", "name": "spacer", "group": "1be83144.4fe4bf", @@ -924,59 +934,41 @@ "height": 1 }, { - "id": "a39d5554.7b4f38", + "id": "5b88d5d8.baac64", "type": "ui_spacer", "name": "spacer", "group": "1be83144.4fe4bf", "order": 11, - "width": 12, - "height": 1 - }, - { - "id": "9694f7f4.22987", - "type": "ui_spacer", - "name": "spacer", - "group": "1be83144.4fe4bf", - "order": 12, "width": 4, "height": 1 }, { - "id": "8bd48fcc.096fc", + "id": "df135e23.9d5ba", + "type": "ui_spacer", + "name": "spacer", + "group": "1be83144.4fe4bf", + "order": 13, + "width": 4, + "height": 1 + }, + { + "id": "6d0cfbad.fb566c", "type": "ui_spacer", "name": "spacer", "group": "1be83144.4fe4bf", "order": 14, - "width": 4, - "height": 1 - }, - { - "id": "f01875cc.409c4", - "type": "ui_spacer", - "name": "spacer", - "group": "1be83144.4fe4bf", - "order": 15, "width": 12, "height": 1 }, { - "id": "8290ff38.260b6", + "id": "7d988743.b75b", "type": "ui_spacer", "name": "spacer", "group": "1be83144.4fe4bf", - "order": 17, + "order": 16, "width": 8, "height": 1 }, - { - "id": "f0eab4f4.40bc08", - "type": "ui_spacer", - "name": "spacer", - "group": "4248342d.e55fac", - "order": 2, - "width": 5, - "height": 1 - }, { "id": "4e78af2d.90be7", "type": "ui_ui_control", @@ -5982,7 +5974,7 @@ "z": "9daf9e2b.019fc", "name": "", "group": "1be83144.4fe4bf", - "order": 16, + "order": 15, "width": 2, "height": 1, "passthru": false, @@ -6027,7 +6019,7 @@ "z": "9daf9e2b.019fc", "name": "", "group": "1be83144.4fe4bf", - "order": 18, + "order": 17, "width": 2, "height": 1, "passthru": false, @@ -6112,7 +6104,7 @@ "z": "9daf9e2b.019fc", "name": "Restart Python", "group": "1be83144.4fe4bf", - "order": 13, + "order": 12, "width": 4, "height": 1, "passthru": true, @@ -6504,7 +6496,7 @@ "z": "9daf9e2b.019fc", "name": "Update", "group": "1be83144.4fe4bf", - "order": 8, + "order": 7, "width": 6, "height": 1, "passthru": false, @@ -6513,9 +6505,10 @@ "color": "", "bgcolor": "", "icon": "mi-system_update", - "payload": "", + "payload": " ", "payloadType": "str", "topic": "update", + "topicType": "str", "x": 260, "y": 460, "wires": [ @@ -6558,7 +6551,7 @@ "name": "Update message", "order": 1, "width": 12, - "height": 2, + "height": 3, "format": "
If you want to update to the latest code version of Node-Red and Python, please click here.\nWe are trying to save your configuration changes with git stash and restore them afterwards, but clearly, things may break!\nAlso, you can choose the branch you want to update to. BE CAREFUL, selecting a branch WILL update the code immediately.\nIf you have made changes to the flow, you will lose them. Please commit those changes from Node-Red interface, from the Project History tab.
", "storeOutMessages": true, "fwdInMessages": true, @@ -8921,7 +8914,8 @@ "y": 340, "wires": [ [ - "af2b8d95.195bb8" + "af2b8d95.195bb8", + "6c20d6a7.869b6" ], [], [] @@ -8931,7 +8925,7 @@ "id": "d334d264.8a7728", "type": "exec", "z": "9daf9e2b.019fc", - "command": "git --git-dir=/home/pi/PlanktonScope/.git branch --list", + "command": "git --git-dir=/home/pi/PlanktonScope/.git branch --remotes --list | awk '/HEAD/{next;} split($1, a, \"/\") {print a[2]}'", "addpay": false, "append": "", "useSpawn": "false", @@ -9009,11 +9003,12 @@ "noerr": 0, "initialize": "", "finalize": "", - "x": 930, + "x": 870, "y": 260, "wires": [ [ - "3f13b9f8.bac94e" + "3f13b9f8.bac94e", + "ccc7d79b.a419f" ] ] }, @@ -9055,7 +9050,7 @@ "label": "Current code version", "format": "{{msg.payload}}", "layout": "row-center", - "x": 860, + "x": 900, "y": 320, "wires": [] }, @@ -9099,7 +9094,7 @@ "z": "1371dec5.76e671", "name": "git version", "links": [ - "aa2dbb6.4cd9948" + "6c20d6a7.869b6" ], "x": 455, "y": 520, @@ -9623,18 +9618,6 @@ ] ] }, - { - "id": "b6bc9b81.ff942", - "type": "function", - "z": "9daf9e2b.019fc", - "name": "get git revision", - "outputs": 1, - "x": 835, - "y": 360, - "wires": [ - [] - ] - }, { "id": "ba2947.c854deb8", "type": "function", @@ -10133,5 +10116,69 @@ "8dd6f57f.b77f98" ] ] + }, + { + "id": "6c20d6a7.869b6", + "type": "link out", + "z": "9daf9e2b.019fc", + "name": "Git revision", + "links": [ + "be6bddd3.2004f" + ], + "x": 815, + "y": 360, + "wires": [] + }, + { + "id": "7de3a9b4.0ab108", + "type": "ui_toast", + "z": "9daf9e2b.019fc", + "position": "top right", + "displayTime": "10", + "highlight": "", + "sendall": true, + "outputs": 0, + "ok": "OK", + "cancel": "", + "raw": false, + "topic": "", + "name": "Git branch update", + "x": 1290, + "y": 260, + "wires": [] + }, + { + "id": "ccc7d79b.a419f", + "type": "change", + "z": "9daf9e2b.019fc", + "name": "", + "rules": [ + { + "t": "set", + "p": "payload", + "pt": "msg", + "to": "List update successfull", + "tot": "str" + }, + { + "t": "set", + "p": "topic", + "pt": "msg", + "to": "Branch list update", + "tot": "str" + } + ], + "action": "", + "property": "", + "from": "", + "to": "", + "reg": false, + "x": 1080, + "y": 260, + "wires": [ + [ + "7de3a9b4.0ab108" + ] + ] } ] \ No newline at end of file diff --git a/scripts/bash/update.sh b/scripts/bash/update.sh index dc993e8..4922655 100755 --- a/scripts/bash/update.sh +++ b/scripts/bash/update.sh @@ -1,8 +1,13 @@ #!/bin/bash -log="logger -t update.sh -s " +log="echo -e" +REMOTE_BRANCHES=$(git --git-dir=/home/pi/PlanktonScope/.git branch --remotes --list | awk '/HEAD/{next;} split($1, a, "/") {print a[2]}') if [[ $# == 1 ]]; then - BRANCH=$1 + if [[ $REMOTE_BRANCHES =~ (^| )$1($| ) ]]; then + BRANCH=$1 + else + BRANCH="master" + fi else BRANCH="master" fi @@ -11,8 +16,9 @@ ${log} "Updating the main repository to branch $BRANCH" function auto_update(){ git fetch - UPDATE=$(git diff --numstat origin/$BRANCH scripts/bash/update.sh | awk '/update.sh/ {print $NF}') - if [[ -n "${UPDATE}" ]]; then + NEWVERSION=$(git diff --numstat origin/$BRANCH scripts/bash/update.sh | awk '/update.sh/ {print $NF}') + if [[ -n "${NEWVERSION}" ]]; then + ${log} "Updating the update script first" # Update the file and restart the script git checkout origin/$BRANCH scripts/bash/update.sh exec scripts/bash/update.sh $BRANCH @@ -31,8 +37,8 @@ function update(){ git stash # TODO detect branch change and use git pull on same branch and checkout on diff branch CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD) - if [ "$CURRENT_BRANCH" -eq $BRANCH ]; then - git merge + if [[ "$CURRENT_BRANCH" == "$BRANCH" ]]; then + git pull else git checkout --force $BRANCH fi @@ -44,7 +50,7 @@ function update(){ function special_before(){ cd /home/pi/.node-red || { echo "/home/pi/.node-red does not exist"; exit 1; } npm install copy-dependencies - pip3 install --update adafruit-blinka adafruit-platformdetect loguru Pillow pyserial smbus2 matplotlib morphocut adafruit-circuitpython-motor adafruit-circuitpython-motorkit adafruit-circuitpython-pca9685 numpy paho-mqtt + pip3 install --upgrade adafruit-blinka adafruit-platformdetect loguru Pillow pyserial smbus2 matplotlib morphocut adafruit-circuitpython-motor adafruit-circuitpython-motorkit adafruit-circuitpython-pca9685 numpy paho-mqtt ${log} "Nothing else special to do before updating!" } @@ -58,18 +64,20 @@ function special_after(){ ${log} "Nothing else special to do after updating!" } - +echo -e "Update on $(date)\n\n\n\n" >> /home/pi/update.log cd /home/pi/PlanktonScope || { echo "/home/pi/PlanktonScope does not exist"; exit 1; } remote=$(git ls-remote -h origin $BRANCH | awk '{print $1}') local=$(git rev-parse HEAD) if [[ "$local" == "$remote" ]]; then - ${log} "nothing to do!" + ${log} "Nothing to do!" else - ${log} "Local and Remote are different, we have to update!" - auto_update - special_before - update - special_after - restart - ${log} "Done!" -fi \ No newline at end of file + ${log} "Local and Remote are different, we have to update, starting now... Please Wait." + auto_update &>> /home/pi/update.log + special_before &>> /home/pi/update.log + ${log} "Everything is ready, doing the update now!" + update &>> /home/pi/update.log + special_after &>> /home/pi/update.log + ${log} "Update is complete, let's restart now." + restart &>> /home/pi/update.log +fi +${log} "Update done!" \ No newline at end of file