A bit of build and installer cleanup.

This commit is contained in:
David Carley
2022-09-14 02:58:24 +00:00
parent f76fc064fd
commit 23abeb9e84
9 changed files with 99 additions and 189 deletions

View File

@@ -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

149
package-lock.json generated
View File

@@ -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",

View File

@@ -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"
}
}

View File

@@ -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

View File

@@ -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)

View File

@@ -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,
)

View File

@@ -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
};
}
// Normal version comparisons
const major = latestParts[1] - currentParts[1];
const minor = latestParts[2] - currentParts[2];
const patch = latestParts[3] - currentParts[3];
function fixup_version_number(version) {
const v = parse_version(version);
// If current is a pre-release, and latest is a release
const betaToRelease = latestParts[4].length === 0 && currentParts[4].length > 0;
version = `${v.major}.${v.minor}.${v.patch}`;
if (v.pre) {
const [ , prefix, num ] = v.pre.match(/([a-zA-Z])(\d+)/);
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;
const suffix = prefix === "b"
? `beta.${num}`
: v.pre;
default:
return false;
version = `${version}-${suffix}`;
}
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) {