From 23abeb9e847078d47f965b2991255b4a4daa3f08 Mon Sep 17 00:00:00 2001 From: David Carley Date: Wed, 14 Sep 2022 02:58:24 +0000 Subject: [PATCH] A bit of build and installer cleanup. --- Makefile | 12 +- .../{bbctrl-logrotate => onefinity-logrotate} | 0 ...off.service => onefinity-poweroff.service} | 0 package-lock.json | 149 +++++------------- package.json | 9 +- scripts/install.sh | 19 ++- scripts/next-rc | 19 --- setup.py | 27 +--- src/js/app.js | 53 ++++--- 9 files changed, 99 insertions(+), 189 deletions(-) rename installer/config/{bbctrl-logrotate => onefinity-logrotate} (100%) rename installer/config/{bbctrl-poweroff.service => onefinity-poweroff.service} (100%) delete mode 100755 scripts/next-rc diff --git a/Makefile b/Makefile index f9fedeb..caffdb0 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,6 @@ DIR := $(shell dirname $(lastword $(MAKEFILE_LIST))) NODE_MODS := $(DIR)/node_modules PUG := $(NODE_MODS)/.bin/pug -STYLUS := $(NODE_MODS)/.bin/stylus TARGET_DIR := build/http HTML := index @@ -16,8 +15,10 @@ GPLAN_MOD := rpi-share/camotics/gplan.so GPLAN_TARGET := src/py/camotics/gplan.so GPLAN_IMG := gplan-dev.img -VERSION := $(shell sed -n 's/^.*"version": "\([^"]*\)",.*$$/\1/p' package.json) -PKG_NAME := bbctrl-$(VERSION) +VERSION := $(shell jq -r '.version' package.json) +PY_VERSION := $(shell jq -r '.version' package.json | sed -E 's|([0-9]+)\.([0-9]+)\.([0-9]+)(-(b)eta\.(.*))?|\1.\2.\3\5\6|g') +PKG_NAME := dist/bbctrl-$(PY_VERSION).tar.bz2 +FINAL_PKG_NAME := dist/onefinity-$(VERSION).tar.bz2 SUBPROJECTS := avr boot pwr @@ -34,6 +35,7 @@ all: $(HTML) $(RESOURCES) pkg: all $(AVR_FIRMWARE) bbserial ./setup.py sdist + mv $(PKG_NAME) $(FINAL_PKG_NAME) bbserial: $(MAKE) -C src/bbserial @@ -57,8 +59,8 @@ $(AVR_FIRMWARE): $(MAKE) -C src/avr update: pkg - http_proxy= curl -i -X PUT -H "Content-Type: multipart/form-data" \ - -F "firmware=@dist/$(PKG_NAME).tar.bz2" -F "password=$(PASSWORD)" \ + curl -i -X PUT -H "Content-Type: multipart/form-data" \ + -F "firmware=@$(FINAL_PKG_NAME)" -F "password=$(PASSWORD)" \ http://$(HOST)/api/firmware/update @-tput sgr0 && echo # Fix terminal output diff --git a/installer/config/bbctrl-logrotate b/installer/config/onefinity-logrotate similarity index 100% rename from installer/config/bbctrl-logrotate rename to installer/config/onefinity-logrotate diff --git a/installer/config/bbctrl-poweroff.service b/installer/config/onefinity-poweroff.service similarity index 100% rename from installer/config/bbctrl-poweroff.service rename to installer/config/onefinity-poweroff.service diff --git a/package-lock.json b/package-lock.json index fb79a32..e438f65 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { - "name": "bbctrl", - "version": "1.1.1b5", + "name": "onefinity", + "version": "1.1.1-beta.6", "lockfileVersion": 2, "requires": true, "packages": { "": { - "name": "bbctrl", - "version": "1.1.1b5", + "name": "onefinity", + "version": "1.1.1-beta.6", "hasInstallScript": true, "license": "GPL-3.0+", "devDependencies": { @@ -28,7 +28,8 @@ "jstransformer-stylus": "^1.5.0", "lodash.merge": "4.6.2", "node-fetch": "^2.6.7", - "pug-cli": "^1.0.0-alpha6" + "pug-cli": "^1.0.0-alpha6", + "semver": "^7.3.7" } }, "node_modules/@aws-crypto/ie11-detection": { @@ -1502,21 +1503,6 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@typescript-eslint/parser": { "version": "5.36.1", "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.36.1.tgz", @@ -1697,21 +1683,6 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@typescript-eslint/utils": { "version": "5.36.1", "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.36.1.tgz", @@ -2473,21 +2444,6 @@ "semver": "^7.0.0" } }, - "node_modules/builtins/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/cached-path-relative": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.1.0.tgz", @@ -3556,21 +3512,6 @@ "eslint": ">=7.0.0" } }, - "node_modules/eslint-plugin-n/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/eslint-plugin-promise": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.0.1.tgz", @@ -6411,12 +6352,18 @@ "dev": true }, "node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, "bin": { "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, "node_modules/sha.js": { @@ -6785,6 +6732,15 @@ "node": ">=10" } }, + "node_modules/stylus/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/stylus/node_modules/source-map": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", @@ -8745,15 +8701,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } } } }, @@ -8860,15 +8807,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } } } }, @@ -9484,17 +9422,6 @@ "dev": true, "requires": { "semver": "^7.0.0" - }, - "dependencies": { - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } } }, "cached-path-relative": { @@ -10457,17 +10384,6 @@ "minimatch": "^3.1.2", "resolve": "^1.22.1", "semver": "^7.3.7" - }, - "dependencies": { - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } } }, "eslint-plugin-promise": { @@ -12537,10 +12453,13 @@ "dev": true }, "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } }, "sha.js": { "version": "2.4.11", @@ -12826,6 +12745,12 @@ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, "source-map": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", diff --git a/package.json b/package.json index 936ce26..3311ee0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { - "name": "bbctrl", - "version": "1.1.1b5", + "name": "onefinity", + "version": "1.1.1-beta.6", "homepage": "https://onefinitycnc.com/", "repository": "https://github.com/OneFinityCNC/onefinity", "license": "GPL-3.0+", @@ -26,6 +26,7 @@ "jstransformer-stylus": "^1.5.0", "lodash.merge": "4.6.2", "node-fetch": "^2.6.7", - "pug-cli": "^1.0.0-alpha6" + "pug-cli": "^1.0.0-alpha6", + "semver": "^7.3.7" } -} \ No newline at end of file +} diff --git a/scripts/install.sh b/scripts/install.sh index 29a7f26..340e90f 100755 --- a/scripts/install.sh +++ b/scripts/install.sh @@ -4,6 +4,15 @@ UPDATE_AVR=true UPDATE_PY=true REBOOT=false +remove_services() { + for service in "$@" + do + systemctl stop "${service}.service" + systemctl disable "${service}.service" + find /etc/systemd -name "${service}.service" -exec rm -f {} \; + done +} + while [ $# -gt 0 ]; do case "$1" in --no-avr) UPDATE_AVR=false ;; @@ -185,9 +194,10 @@ if $UPDATE_PY; then fi # Install the service that turns off the screen during shutdown -cp ./installer/config/bbctrl-poweroff.service /etc/systemd/system/ +remove_services bbctrl-poweroff onefinity-poweroff +cp ./installer/config/onefinity-poweroff.service /etc/systemd/system/ systemctl daemon-reload -systemctl enable bbctrl-poweroff +systemctl enable onefinity-poweroff # Expand the file system if necessary chmod +x ./installer/scripts/resize_root_fs.sh @@ -197,8 +207,9 @@ if [ $? -eq 0 ]; then fi # Install our logrotate config -cp ./installer/config/bbctrl-logrotate /etc/logrotate.d/bbctrl -chown root:root /etc/logrotate.d/bbctrl +rm -f /etc/logrotate.d/{bbctrl,onefinity} +cp ./installer/config/onefinity-logrotate /etc/logrotate.d/onefinity +chown root:root /etc/logrotate.d/onefinity # Ensure logrotate runs on every boot (for systems with no network, thus bad clock) if [ ! -e /etc/cron.d/reboot ]; then diff --git a/scripts/next-rc b/scripts/next-rc deleted file mode 100755 index 2edc50a..0000000 --- a/scripts/next-rc +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/bin/env python3 - -import os -import json - -if os.path.exists('dist/latest-beta.txt'): - with open('dist/latest-beta.txt', 'r') as f: - latest_beta = f.read().strip() - -else: latest_beta = '' - -with open('package.json', 'r') as f: - version = json.load(f)['version'] - -if latest_beta.startswith(version + '-rc'): - print(int(latest_beta[len(version) + 3:]) + 1) - -else: - print(1) diff --git a/setup.py b/setup.py index 5005f9b..3718fc4 100755 --- a/setup.py +++ b/setup.py @@ -6,27 +6,19 @@ import json pkg = json.load(open('package.json', 'r')) setup( - name=pkg['name'], + name='bbctrl', version=pkg['version'], - description='Buildbotics Machine Controller', + description='Onefinity Controller', long_description=open('README.md', 'rt').read(), - author='Joseph Coffland', - author_email='joseph@buildbotics.org', + maintainer='support@onefinitycnc.com', + maintainer_email='support@onefinitycnc.com', platforms=['any'], license=pkg['license'], url=pkg['homepage'], package_dir={'': 'src/py'}, - packages=[ - 'bbctrl', - 'camotics', - 'iw_parse' - ], + packages=['bbctrl', 'camotics', 'iw_parse'], include_package_data=True, - entry_points={ - 'console_scripts': [ - 'bbctrl = bbctrl:run' - ] - }, + entry_points={'console_scripts': ['bbctrl = bbctrl:run']}, scripts=[ 'installer/scripts/update-bbctrl', 'installer/scripts/upgrade-bbctrl', @@ -37,12 +29,7 @@ setup( 'installer/scripts/browser', ], install_requires=[ - 'tornado', - 'sockjs-tornado', - 'pyserial', - 'pyudev', - 'smbus2', - 'watchdog' + 'tornado', 'sockjs-tornado', 'pyserial', 'pyudev', 'smbus2', 'watchdog' ], zip_safe=False, ) diff --git a/src/js/app.js b/src/js/app.js index bc5b872..7591457 100644 --- a/src/js/app.js +++ b/src/js/app.js @@ -3,38 +3,40 @@ const api = require("./api"); const cookie = require("./cookie")("bbctrl-"); const Sock = require("./sock"); +const semver = require("semver"); SvelteComponents.createComponent("DialogHost", document.getElementById("svelte-dialog-host") ); -function is_newer_version(current, latest) { - const pattern = /(\d+)\.(\d+)\.(\d+)(.*)/; - const currentParts = current.match(pattern); - const latestParts = latest.match(pattern); +function parse_version(v) { + const pattern = /^(\d+)\.(\d+)\.(\d+)(?:[-.]?(.*))?$/; + const [ version, major, minor, patch, pre ] = v.trim().match(pattern) || []; - if (!currentParts || !latestParts) { - return false; + return { + version, + major, + minor, + patch, + pre + }; +} + +function fixup_version_number(version) { + const v = parse_version(version); + + version = `${v.major}.${v.minor}.${v.patch}`; + if (v.pre) { + const [ , prefix, num ] = v.pre.match(/([a-zA-Z])(\d+)/); + + const suffix = prefix === "b" + ? `beta.${num}` + : v.pre; + + version = `${version}-${suffix}`; } - // Normal version comparisons - const major = latestParts[1] - currentParts[1]; - const minor = latestParts[2] - currentParts[2]; - const patch = latestParts[3] - currentParts[3]; - - // If current is a pre-release, and latest is a release - const betaToRelease = latestParts[4].length === 0 && currentParts[4].length > 0; - - switch (true) { - case major > 0: - case major === 0 && minor > 0: - case major === 0 && minor === 0 && patch > 0: - case major === 0 && minor === 0 && patch === 0 && betaToRelease: - return true; - - default: - return false; - } + return version; } function is_object(o) { @@ -294,7 +296,7 @@ module.exports = new Vue({ return false; } - return is_newer_version(this.config.version, this.latestVersion); + return semver.lt(this.config.full_version, this.latestVersion); }, showShutdownDialog: function() { @@ -305,6 +307,7 @@ module.exports = new Vue({ const config = await api.get("config/load"); update_object(this.config, config, true); + this.config.full_version = fixup_version_number(this.config.full_version); this.parse_hash(); if (!this.checkedUpgrade) {