Release 0.10.0
This commit is contained in:
13
CHANGELOG.md
13
CHANGELOG.md
@@ -10,6 +10,19 @@ ADR-007 and ADR-002.
|
|||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
|
## [0.10.0] - 2026-08-17
|
||||||
|
|
||||||
|
A security release. The Windows installer left the directories it creates
|
||||||
|
writable by every logged-on user, which made two of the files it puts there a
|
||||||
|
local privilege escalation; that is fixed and verified on Windows. Alongside it,
|
||||||
|
the work that makes this product genuinely adoptable by a second site: one
|
||||||
|
site's hostnames, share paths and networks are out of the product code and out
|
||||||
|
of the published documentation, and the rule that keeps them out now fails the
|
||||||
|
build rather than printing a warning nobody read.
|
||||||
|
|
||||||
|
The plugin contract moved to 0.19.0, which is a BREAKING change - see the
|
||||||
|
Changed section and CONTRACT-STABILITY.md before upgrading a plugin you wrote.
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
||||||
- Applications accept an uploaded image and an uploaded installer, rather than
|
- Applications accept an uploaded image and an uploaded installer, rather than
|
||||||
|
|||||||
22
README.md
22
README.md
@@ -108,8 +108,10 @@ SQLite). Do not run dev or production against SQLite.
|
|||||||
|
|
||||||
### Distribution
|
### Distribution
|
||||||
|
|
||||||
The application is distributed through the internal GE Aerospace git server. Clone
|
Source lives here. The Windows installer ships as a release asset rather than a
|
||||||
it from there; there is no public package or image registry.
|
file in the repository - it is around 240 MB, well past what a repository takes
|
||||||
|
and well inside what a release asset does. There is no package or image
|
||||||
|
registry; a site installs from that `.exe` or builds from source.
|
||||||
|
|
||||||
### Fast path (Docker)
|
### Fast path (Docker)
|
||||||
|
|
||||||
@@ -172,7 +174,8 @@ project wiki.
|
|||||||
To import a site's legacy data, use the HTTP import surface: an admin API
|
To import a site's legacy data, use the HTTP import surface: an admin API
|
||||||
token plus the IMPORT-API page in the project wiki drive the whole migration
|
token plus the IMPORT-API page in the project wiki drive the whole migration
|
||||||
through documented endpoints (`X-Import-Mode` preserves original timestamps).
|
through documented endpoints (`X-Import-Mode` preserves original timestamps).
|
||||||
`scripts/site_imports/wjf/` is the West Jefferson reference loader.
|
`scripts/site_imports/wjf/` is the reference site's loader, kept as a worked
|
||||||
|
example of the whole sequence.
|
||||||
|
|
||||||
### Which deployment route
|
### Which deployment route
|
||||||
|
|
||||||
@@ -220,12 +223,22 @@ Query parameters for list endpoints:
|
|||||||
- `search` - Search term
|
- `search` - Search term
|
||||||
- `assettype` - Filter by asset type (computer, printer, machine, networkdevice, measuringtool)
|
- `assettype` - Filter by asset type (computer, printer, machine, networkdevice, measuringtool)
|
||||||
|
|
||||||
|
## Where to start
|
||||||
|
|
||||||
|
the START-HERE page in the project wiki routes by what you are here to do -
|
||||||
|
standing up a site, deploying the shop-floor tools, writing a plugin,
|
||||||
|
integrating with the API, or diagnosing something. On the published mirror the
|
||||||
|
same page is the wiki's front door.
|
||||||
|
|
||||||
## Plugin System
|
## Plugin System
|
||||||
|
|
||||||
ShopDB supports plugins for extending functionality. See `CONTRIBUTING.md` for plugin development guidelines.
|
ShopDB supports plugins for extending functionality. See `CONTRIBUTING.md` for plugin development guidelines.
|
||||||
|
|
||||||
The image bundles thirteen plugins; only the ones a site installs are loaded:
|
The image bundles these plugins; only the ones a site installs are loaded. The
|
||||||
|
current count and each plugin's version and migration head are in
|
||||||
|
the PROJECT-MAP page in the project wiki, which is generated:
|
||||||
|
|
||||||
|
- **backups** - Machine configuration backups (NTLARS/DNC, CMM, part marker, UDC) with revision history and diffs
|
||||||
- **computers** - Shopfloor PCs and workstations, collector fleet ingest
|
- **computers** - Shopfloor PCs and workstations, collector fleet ingest
|
||||||
- **employees** - Employee directory
|
- **employees** - Employee directory
|
||||||
- **geenforce** - GE-Enforce imaging/software manifests and fleet compliance
|
- **geenforce** - GE-Enforce imaging/software manifests and fleet compliance
|
||||||
@@ -237,6 +250,7 @@ The image bundles thirteen plugins; only the ones a site installs are loaded:
|
|||||||
- **printedparts** - 3D-printed part catalogue, kiosk issue tracking and stock alerts
|
- **printedparts** - 3D-printed part catalogue, kiosk issue tracking and stock alerts
|
||||||
- **printers** - Extended printer management with Zabbix integration
|
- **printers** - Extended printer management with Zabbix integration
|
||||||
- **slides** - TV/kiosk slideshows
|
- **slides** - TV/kiosk slideshows
|
||||||
|
- **tools** - Tech Tools: barcode and QR generation laid out for real label stock
|
||||||
- **usb** - CMMC USB check-in/out tracking
|
- **usb** - CMMC USB check-in/out tracking
|
||||||
- **warranty** - Warranty records with Dell lookups
|
- **warranty** - Warranty records with Dell lookups
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "shopdb-frontend",
|
"name": "shopdb-frontend",
|
||||||
"version": "0.9.0",
|
"version": "0.10.0",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ __contract_version__ = '0.19.0'
|
|||||||
# plugin-contract version above are distinct series with independent
|
# plugin-contract version above are distinct series with independent
|
||||||
# bump rules. Not part of the shopdb.api contract surface, so it is
|
# bump rules. Not part of the shopdb.api contract surface, so it is
|
||||||
# not re-exported there.
|
# not re-exported there.
|
||||||
__version__ = '0.9.0'
|
__version__ = '0.10.0'
|
||||||
|
|
||||||
|
|
||||||
def create_app(config_name: str = None) -> Flask:
|
def create_app(config_name: str = None) -> Flask:
|
||||||
|
|||||||
@@ -40,7 +40,19 @@ PLUGIN_COUNT = re.compile(r'\b(\d+)\s+bundled plugins\b', re.I)
|
|||||||
|
|
||||||
|
|
||||||
def documentation_files():
|
def documentation_files():
|
||||||
return sorted(p for p in DOCS.rglob('*.md') if p.name not in EXEMPT)
|
"""Everything published that a reader treats as documentation.
|
||||||
|
|
||||||
|
README.md and CONTRIBUTING.md are included deliberately: README is the first
|
||||||
|
page anyone sees on the mirror, and it was claiming thirteen bundled plugins
|
||||||
|
when there were fifteen. A rule that covers only docs/ leaves the most-read
|
||||||
|
file in the repository outside it.
|
||||||
|
"""
|
||||||
|
files = [p for p in DOCS.rglob('*.md') if p.name not in EXEMPT]
|
||||||
|
for name in ('README.md', 'CONTRIBUTING.md'):
|
||||||
|
top = REPO / name
|
||||||
|
if top.is_file():
|
||||||
|
files.append(top)
|
||||||
|
return sorted(files)
|
||||||
|
|
||||||
|
|
||||||
def current_versions():
|
def current_versions():
|
||||||
|
|||||||
Reference in New Issue
Block a user