Releases: thin-edge/thin-edge.io
1.1.1
1.1.0
What's Changed
🚀 Features
Highlights
Configure devices in offline mode #2843
Now you can configure your device even if you don't have internet connectivity. This is suitable for factory scenarios, where the devices might not have internet, but you wish to pre-configure thin-edge.io to connect to your cloud provider once internet connection is restored.
Just use the new --offline
flag when connecting:
tedge connect c8y --offline
tedge connect aws --offline
tedge connect az --offline
If you're using a self-signed certificate, then you will have to upload the public certificate manually from a machine with internet connectivity (e.g. by copying it via ssh on the local network etc.).
Filter out uninteresting software packages with an exclude filter #2869
Previously thin-edge.io only supported an include filter in the apt specific software management plugin (e.g. tedge-apt-plugin). Now you can specify an include and exclude filter which will be applied to the output of all software management plugins!
This allows you to focus on the software packages that are meaningful to you, and you can save on network bandwidth.
Example
If you want to ignore all of the software packages related to libraries and Linux kernel modules, then just set the following command:
tedge config set software.plugin.exclude "^(glibc|lib|kernel-|iptables-module).*"
Restart the tedge-agent, then you're good to go!
Draft Helm chart for Kubernetes deployment #2775
A draft helm chart has been added to the project so that users can start using thin-edge.io in Kubernetes environments. Contributions are welcomed, and we'll eventually promote it from the Draft status and publish the helm chart.
Create Certificate Signing Request with tedge cli #2783
A new tedge command (tedge cert create-csr
) has been added to make it easier to integrate thin-edge.io with your preferred Public Key Infrastructure (PKI). The command will read the existing certificate information from an existing device certificate so it is more convenient then looking up the equivalent openssl command.
Misc.
The following features are maybe not as flashy as the features above, but the are still very useful.
-
(cli): Avoid modifying files if they are up to date in
tedge init
#2876 -
(cli): Update service manager fallback message #2872
-
(configuration): tedge agent creates
tedgeUrl
when not provided in config snapshot payload #2826 -
(fts): improve is a directory error detection to support other OS targets #2747
-
(logs): only enable ansi colors in logs when stderr is a terminal #2738
-
(packaging): remove adduser debian dependency declaration #2883
-
(remote-access): support reading child connection string from stdin #2874
-
(software): c8y-mapper sends software list to advanced software management endpoint #2771
-
(watchdog): Limit tedge-watchdog interval to 1s minimum
-
(workflow): improve workflow log readability for humans #2860
🐛 Bug Fixes
-
(certificates): Do not panic changing ownership of device cert to unknown user #2875
-
(cli) Ignore port when comparing configure url with expected url
-
(cli): Honor c8y.mqtt setting on tedge connect #2789
-
(cli): ignore port when comparing cloud urls #2865
-
(cli): set directory ownership using given user/group instead of root #2746
-
(config|log): Uploader supports multipart/form-data and attaches filename #2811
-
(mqtt): Add tedgeUrl field for firmware command created by c8y-mapper #2795
-
(mqtt): apply delay to mqtt connect errors by default #2832
-
(mqtt): Finish auto-registration even on bad input #2737 #2889
-
(remote-access) Spawn process using current process path and config dir
-
(remote-access) Switch to env::args for establishing the executable name #2892
-
(remote-access): spawn process using current process path and config dir #2888
-
(remote-access): Use configured certificates when connecting to auth proxy in remote access plugin #2809
-
(software): tedge-agent publishes "types" for software_list and software_update #2730
-
(software|restart): Check sudo.enable in software and restart managers #2749
-
(file-watcher): use canonical path when watching a directory #2758
📜 Deprecation Notices
Workflow: build-in restart workflow action has been removed #2852
Technically this is a deprecation, however since it was only used in the official firmware integrations (e.g. Rugpi, RAUC, Mender OSS), we have replaced this functionality with the ability to call other workflows from an existing workflow.
📓 Documentation
-
(mapper): remove out of date and unused section #2736
-
(yocto): add missing build dependency
file
#2765 -
(mqtt): Document commands to de-register entities #2755
-
(mqtt): Correct topic and payload in registration in reference c8y-mapper guide #2827
-
(mqtt): remove retain from cmd/health/check examples #2828
-
(mqtt): Update doc: Troubleshooting > Monitoring Service Health #2855
-
(firmware): use RAUC image in the Yocto build instructions #2861
Full Changelog: 1.0.1...1.1.0
1.0.1
What's Changed
🐛 Bug Fixes
-
Retry internal id lookup when not found #2533 by @albinsuresh in #2690
-
Fix missing supported operations #2689 by @albinsuresh in #2695
📓 Documentation
- docs: fix broken anchor to rugpi instructions by @reubenmiller in #2691
📋 Miscellaneous Tasks
-
Log memory usage of the agent and the mapper by @didier-wenzek in #2693
-
chore: remove deprecated and unused plugins by @reubenmiller in #2709
Notes
The release artifacts are no longer uploaded to the Github release as these were less useful, however you can download all of the artifacts directly from our cloudsmith.io repositories (for all the linux packages and the tarballs):
- tedge-release - all architectures except for armv6
- tedge-release-armv6 - armv6 only repository
Full Changelog: 1.0.0...1.0.1
1.0.0 - Production grade edge device management
What's Changed in 1.0.0 (Summary)
🎉 thin-edge.io 1.0.0 is here 🚀
Thanks to everyone for contributing to the project, as this is the result of a lot of hard work from many people. And whilst 1.0.0 is a massive milestone in the project, we're still committed to continuing implementing new features, so stay tuned.
The documentation has been improved focussing on consistency and readability. Below are some notable links to highlight some of the features that thin-edge.io provides out of the box:
- Firmware Management
- Software Management
- Configuration Management
- Log Management
- Remote Access
- Health Monitoring
And if you don't find what you want then you can check out our the new Community Plugins page, to explore the ever growing list of plugins.
Need help upgrading to 1.0.0? Then check out the Legacy Guide.
New Features
Cumulocity - Support software types
You no longer need to prefix software versions in Cumulocity IoT using the ::<type>
syntax! We now support the of official software type as defined in the Cumulocity IoT Device Library. This enables users to also filter for software types in the UI.
Check out the user docs for Software Management for more details.
Implemented by @rina23q in #2613
Cumulocity - Listen to Cumulocity Operation in their JSON format
The Cumulocity operations are now received via the c8y/devicecontrol/operations
MQTT topic instead of the c8y/s/ds
SmartREST topic. This lays the groundwork for a future features.
Implemented by @rina23q in #2596
New command to recreate mosquitto bridges
The mosquitto bridges are automatically recreated when upgrading thin-edge.io, and only the bridges which are configured will be recreated.
You can manually refresh the bridge configuration by running:
tedge refresh-bridges
Implemented by @Bravo555 in #2573
Restart tedge-agent after self updates
Note If you are upgrading from anything prior to 1.0.0, you will still need to restart the tedge-agent
(or just restart the whole device). All future self updates of thin-edge.io will not require this step.
Implemented by @albinsuresh in #2587
Minor improvements
- Add support for commands with multiple arguments in custom operations by @Ruadhri17 in #2602
- Default configuration for tedge operation plugins by @albinsuresh in #2637
- Bypass duplicate message filtering on mapper startup with config flag by @Ruadhri17 in #2632
Fixes
- Only send 114 when operations changed by @Bravo555 in #2588
- Limit the length of the message for failed operation by @Ruadhri17 in #2586
- fixed services shown as child devices #2584 by @Bravo555 in #2620
- Fix entity store file permission on mapper startup #2598 by @albinsuresh in #2638
- Fix tedge-agent stuck on too many pending operations by @didier-wenzek in #2640
- tedge-apt-plugin update list missing keep config options by @rina23q in #2681
Documentation
- Add a legacy documentation section by @didier-wenzek in #2581
- Improve certificate related documentation by @didier-wenzek in #2585
- docs: update supported platform information by @reubenmiller in #2594
What's Changed in 1.0.0 (full list)
- Bump actions/upload-pages-artifact from 2 to 3 by @dependabot in #2538
- Bump actions/deploy-pages from 3 to 4 by @dependabot in #2539
- Remove reference to version in installation scripts by @jarhodes314 in #2553
- docs: remove tedge-log-plugin and tedge-configuration-plugin references by @reubenmiller in #2554
- Fix new clippy warnings by @Bravo555 in #2563
- docs: remove deprecated domain model by @reubenmiller in #2559
- docs: move connect external device under security section by @reubenmiller in #2560
- feat: add user warning when an invalid custom operation filename is used by @reubenmiller in #2562
- docs(operations): add tip about valid filenames for custom operations by @reubenmiller in #2564
- Bump crate-ci/typos from 1.16.0 to 1.17.0 by @dependabot in #2561
- docs: add instructions to reconnect with c8y after changing settings by @reubenmiller in #2555
- docs(smartrest): add full example of using a custom smart rest operation by @reubenmiller in #2565
- docs: update MacOS instructions for building rugpi images by @reubenmiller in #2556
- dev: add CODEOWNERS definition by @reubenmiller in #2557
- ci: enable merge queue by @reubenmiller in #2570
- ci: fix incompatible PR checks from merge queue trigger by @reubenmiller in #2572
- Rename configuration
enable.sudo
tosudo.enable
by @Ruadhri17 in #2571 - chore: update system test dependencies by @reubenmiller in #2577
- ci: only run filter step on PRs by @reubenmiller in #2578
- test: refactor service tests by removing unnecessary logic by @reubenmiller in #2575
- chore: upgrade tempfile to resolve dependentabot alert about rustix by @reubenmiller in #2576
- test: don't configure repos when installing thin-edge.io via local deb packages by @reubenmiller in #2579
- test: filter MQTT message to avoid false negatives when thin-edge.io splits measurements by @reubenmiller in #2580
- Add
refresh-bridges
command by @Bravo555 in #2573 - Add a legacy documentation section by @didier-wenzek in #2581
- Add examples to
tedge config list --doc
by @didier-wenzek in #2583 - Improve doc TOC by @didier-wenzek in #2582
- build(deps): Bump crate-ci/typos from 1.17.0 to 1.17.1 by @dependabot in #2589
- docs: move c8y token docs and expand on details and alternatives by @reubenmiller in #2558
- reenable default settings for dbg profile by @Bravo555 in #2590
- Only send 114 when operations changed by @Bravo555 in #2588
- docs: remove the child device configuration management page by @reubenmiller in #2593
- Limit the length of the message for failed operation by @Ruadhri17 in #2586
- Improve certificate related documentation by @didier-wenzek in #2585
- docs: update supported platform information by @reubenmiller in #2594
- docs: make markdown compatible with mdx v3 by @reubenmiller in #2599
- Restart tedge-agent after self update by @albinsuresh in #2587
- Use JSON over MQTT to listen C8Y operations by @rina23q in #2596
- fix: update h2 dependency by @reubenmiller in #2610
- test: use random service name in tests to avoid side effects from concurrent runs by @reubenmiller in #2618
- docs: correct note about certificate chain order by @reubenmiller in #2607
- build(deps): Bump dorny/paths-filter from 2 to 3 by @dependabot in #2621
- test: use local ca to generate device certificates by @reubenmiller in #2619
- build(deps): B...
1.0.0 Release Candidate 1
What's Changed in 1.0.0-rc.1 (Summary)
We made it 🎉 thin-edge.io 1.0.0 (Release Candidate 1) is here 🚀
We wanted to publicly communicate our commitment to bringing the production ready thin-edge.io to the community. We're using the release candidate to enable users to try it out and provide some feedback before the 1.0.0 release. We're still updating some of the documentation around some of the new features, but this will be done before the release candidate phase has ended.
You can monitor the progress of the 1.0.0 release, but the goal is to finalize the 1.0.0 release in January 2024, so please provide feedback as soon as possible.
New Features
Support for Firmware Updates - aka. Operating System A/B Updates
With the help of the workflows feature, thin-edge.io now supports integrating with OS A/B update solutions such as:
- mender (yocto image)
- Rugpi
We have included instructions and examples to build two types of images, however the methodology demonstrated can be used to create other integrations like:
- Rauc
- SWUpdate
Please reach out to use to assist in adding new integrations.
Consolidated tedge-agent
The tedge-log-plugin and tedge-configuration-plugin are now deprecated, and their functionality has been rolled into the tedge-agent. This makes it much easier to manage as you only have a single service. You can still deactivate the log or configuration functionality via the tedge.toml.
Container
A public container image is now published to the Github Container Registry (ghcr.io). The containers are ideal for running thin-edge.io under a true single-process container setup. The image contains all of the thin-edge.io binaries which can be called.
The image is a multi-platform image which supports the following Platforms/Architectures:
- linux/arm/v6
- linux/arm/v7
- linux/arm64
- linux/amd64
Two different images are available which are based on our release cycle:
- tedge-main - Published every time a PR is closed (merged into the main branch)
- tedge - Published on official releases (e.g.
1.0.0-rc.1
)
We're still working on the documentation, however we've added the following demos under the tedge-demo-container repository for working examples on how to use it:
Support for multiple timestamp formats
Telemetry data can now be published either using the previous ISO-8601 format, or unix timestamps (e.g. seconds since 1970-01-01). The unix timestamps accepts floats, so you can also provide the fraction of a second (e.g. 1703083945.123567
). Unix timestamps are much easier for machines to parse, and for user's to write their own parsers in plugins.
Below shows a simple example how to use the unix timestamp when creating an event (in the past):
tedge mqtt pub \
te/device/main///e/example \
'{"text":"Unix timestamps","time":1703083945.123567}'
HTTPS/TLS support
HTTPS/TLS support has been added to the File Transfer Service (included in the tedge-agent
service), and the Cumulocity Auth Proxy Service (included in the tedge-mapper-c8y
service). Users with certificate knowledge (e.g. how to create both server and client services)
The configuration of certificates still requires advanced certificate knowledge, as the correct server and client certificates need to be generated etc. We will look at improving the configuration story for beginners in 2024.
Minor Changes
- Give the default failure "reason" when commands failed by @rina23q in #2463
- tedge cert upload c8y: ambiguous file/folder not found error - missing path in error message by @PradeepKiruvale in #2473
- Create sm-plugins and operations/c8y directories by tedge init by @rina23q in #2469
- logs.path location should be explicit rather than implicit by @PradeepKiruvale in #2480
- Config setting to disable auto-registration of entities by @PradeepKiruvale in #2486, #2490
- Don't restart tedge-agent on (re)connect by @jarhodes314 in #2505
- New tedge cli command to renew current self-signed certificate by @PradeepKiruvale in #2502, #2509, #2520
- Ordered processing of entity registration messages before any other messages by @albinsuresh in #2466
- feat: run initializations before starting main process by @reubenmiller in #2516
- Move
config_update
file download from tedge-mapper-c8y to tedge-agent by @Bravo555 in #2511 - tedge-apt-plugin: support settings to control if configuration files are kept or replaced when included in a debian package by @PradeepKiruvale in #2518
- Make entity store persistent #2428 by @albinsuresh in #2522
Fixes
- log entry erroneously set to ERROR when handling device/services registered with custom topic schema by @PradeepKiruvale in #2441
- Stop duplicate messages being sent by
tedge-log-plugin
andtedge-configuration-plugin
on file reload by @Bravo555 in #2454, #2536 - Support quotes in Cumulocity failureReason field by @jarhodes314 in #2493
- Fix broken mosquitto config generation for Azure by @jarhodes314 in #2515
- adjust the expected return code when user is missing "Tenant manager" admin rights by @reey in #2529
What's Changed in 1.0.0-rc.1 (full list)
- fix(#2445): add c8y proxy config settings by @Bravo555 in #2446
- Extend tedge-agent with config and log management by @albinsuresh in #2436
- Improve error messages for c8y-http-proxy and tedge-agent by @Bravo555 in #2437
- Delete ported PySys tests by @gligorisaev in #2324
- Close stdin of child processes by @didier-wenzek in #2455
- Create aggregated log file in temp dir #2443 by @albinsuresh in #2460
- Add HTTPS/TLS support to the auth proxy by @jarhodes314 in #2430
- Add testing steps for configuration list by @gligorisaev in #2465
- Kill scripts still running after a timeout by @didier-wenzek in #2458
- log entry erroneously set to ERROR when handling device/services registered with custom topic schema by @PradeepKiruvale in #2441
- Give the default failure "reason" when commands failed by @rina23q in #2463
- Stop duplicate messages being sent by
tedge-log-plugin
andtedge-configuration-plugin
on file reload by @Bravo555 in #2454 - Replace routerify in file transfer server with axum by @jarhodes314 in #2461
- Fix typos by @didier-wenzek in #2470
- tedge cert upload c8y: ambiguous file/folder not found error - missing path in error message by @PradeepKiruvale in #2473
- Create sm-plugins and operations/c8y directories by tedge init by @rina23q in #2469
- Operation Workflow Specification & Implementation by @didier-wenzek in #2071
- Add firmware_update support to c8y mapper by @rina23q in #2464
- logs.path location should be explicit rather than implicit by @PradeepKiruvale in #2480
- fix: use taplo for formatting Cargo.toml by @Bravo555 in #2476
- Config setting to disable auto-registration of entities by @PradeepKiruvale in #2486
- Add HTTPS/certificate authentication support to file transfer service by @jarhodes314 in #2474
- Add support for operation workflow triggering device restart by @didier-wenzek in #2479
- Add tedge config agent.state.path setting by @didier-wenzek in #2492
- feat: add tedge-write as new multicall b...
0.13.1
What's Changed in 0.13.1 (Summary)
Fixes
- c8y: use qos 0 when publishing to c8y/s/uat to request a Cumulocity IoT token by @PradeepKiruvale in #2420
- c8y: Fix send_event() in c8y_http_proxy to create events under child devices by @rina23q in #2421
- c8y: custom operation option to disable quoting of results to enable c8y_RelayArray compatibility by @reubenmiller in #2439
- general: add http.client.host/port setting options by @Bravo555 in #2411
- troubleshooting: tedge-log-manager - wait for upload before marking operation successful by @Bravo555 in #2435
What's Changed in 0.13.1 (full list)
- tests: update tests after latest 0.13.0 release by @reubenmiller in #2406
- Add a custom error message for invalid use of
default(value = ...)
indefine_tedge_config!
by @jarhodes314 in #2401 - Tedge ops plugins init use async move_file by @albinsuresh in #2405
- docs: enforce/normalize v1 format on all te2mqtt code blocks by @reubenmiller in #2408
- Use default(variable = "AutoFlag::Auto") by @didier-wenzek in #2407
- tests: include more readable mqtt logs in Get Logs keyword by @reubenmiller in #2410
- tests: use stop/start over restart for service to improve flaky system test by @reubenmiller in #2415
- use qos 0 when publishing to c8y/s/uat to request a Cumulocity IoT token by @PradeepKiruvale in #2420
- tests: hide cumulocity iot token message from the test log output by @reubenmiller in #2425
- Disable nested child device operation support #2409 by @albinsuresh in #2424
- chore: update dev and system test images by @reubenmiller in #2422
- docs: fix incorrect mqtt sub command by @reubenmiller in #2431
- Fix send_event() in c8y_http_proxy to create events under child devices by @rina23q in #2421
- add http.client.host/port setting options by @Bravo555 in #2411
- misleading log entry when state file does not exist in tedge-agent by @PradeepKiruvale in #2434
- C8y Mapper consumes Uploader Actor by @rina23q in #2361
- tedge-log-manager: wait for upload before marking operation successful by @Bravo555 in #2435
- custom operation option to disable quoting of results to enable c8y_RelayArray compatibility by @reubenmiller in #2439
- Remove git dependency for ws_stream_tungstenite by @jarhodes314 in #2442
- fix: use FTS for
log_upload
andconfig_snapshot
operations by @Bravo555 in #2440
Full Changelog: 0.13.0...0.13.1
0.13.0 - New MQTT V1 API
What's Changed in 0.13.0 (Summary)
New Features
Support for any linux distribution
A lot of hard work has gone into supporting thin-edge.io on any linux distribution. A new revamped installation script will automatically detect your linux distribution whether it is Ubuntu/Debian, Rocky Linux, Alpine or Poky (yocto), we have you covered.
thin-edge.io now publishes packages on cloudsmith in the following formats:
- deb (Debian/Ubuntu)
- apk (Alpine Linux)
- rpm (RHEL/Fedora/Rocky Linux/Alma Linux)
- tarball (for any other linux distribution without one of the above package managers)
The documentation has been updated to included the new simplified instructions so that you can deploy thin-edge.io in a simple memorable one-liner on your preferred linux distribution.
Community support for additional service managers (e.g. for distributions without systemd)
The support for additional service managers has been extended (via the community) allowing thin-edge.io to run seamlessly on linux distributions that don't have systemd installed.
The following service managers are provided along with an easy to use install script which will auto detect the correct system manager for your system (if you don't really know or care about which service manager to use):
- sysvinit
- openrc
- runit
- s6-overlay
- supervisord
Check out the documentation for more details.
New MQTT API te/ topics
The new thin-edge.io MQTT API has been implemented to provide a consistent interface across the entire topic.
This release marks the transition from the now deprecated tedge/#
topics to the new te/#
topics. The new te/#
topics implement the same features as the legacy interface plus much more.
The new MQTT API documents the full interface and brings the following functionality:
- Device/service registration via MQTT
- Publishing telemetry data to any device, child device or service on running on either types
- All metrics now support a custom type in the topic
- Public interface to send commands on the local
te/
topic - More reliable processing of commands by leveraging MQTT retained messages for state transitions
- Support custom root prefixes (e.g. being able to replace
te/
with a custom prefix) - Support for updating digital twin data such as custom fragments (
twin
) - thin-edge.io errors are published on the
te/errors
topic (replacingtedge/errors
)
Services are now registered in Cumulocity IoT under new external identities, which will result in duplicated services in the cloud. The renaming was done so that the external identities would be consistent across all entities (child devices, services etc.). If you don't want to see the older services, then you they can be deleted by using the Cumulocity API or using tools such as go-c8y-cli, for example:
c8y devices list --query "c8y_Agent.name eq 'thin-edge.io'" --includeAll \
| c8y devices services list --includeAll \
| c8y identity list --filter "externalId notlike '*:*'" \
| c8y inventory delete
If you are having trouble with removing the old services then please reach out to us and we can offer assistance!
Local Cumulocity IoT API proxy #2261, #2230
A local Cumulocity IoT API proxy is provided by default to simplify accessing the Cumulocity IoT REST api from 3rd party components which makes requesting a local JWT token a thing of the past!
Check out the documentation for more details.
Generic configuration and log plugins
The c8y-configuration-plugin
and c8y-log-plugin
plugins have been refactored to be cloud agnostic. The plugins now only rely on the thin-edge.io interface (both local MQTT and API).
The table below shows the package names which are deprecated and their replacements:
Deprecated Package | New Package |
---|---|
c8y-configuration-plugin | tedge-configuration-plugin |
c8y-log-plugin | tedge-log-plugin |
Note: In the near future, the c8y-firmware-plugin
will also be refactored, but it didn't make it into this release.
Since the plugins are now cloud agnostic, the configuration files used by the plugins have been relocated to the following paths, but don't worry this happens automatically during initialization of each plugin.
/etc/tedge/c8y/c8y-configuration-plugin.toml
➡️/etc/tedge/plugins/tedge-configuration-plugin.toml
/etc/tedge/c8y/c8y-log-plugin.toml
➡️/etc/tedge/plugins/tedge-log-plugin.toml
Re-using thin-edge.io plugins on child device
With the changes to the thin-edge.io MQTT API and the rewriting of the generic plugins, it enabled us to be able to run the same plugins either on the main device (e.g. the current/default setup) or on a child device. This allows you to reduce the amount of could you have to write even further.
The following plugins can be run either in main or child device mode:
- tedge-agent (software management)
- tedge-log-plugin (log management)
- tedge-configuration-plugin (configuration management)
Detailed documentation and examples are not yet available, however they will be updated in the next coming weeks. However below shows a brief example how to run the tedge-agent on a child device to provide software management on child devices:
tedge-agent --mqtt-device-topic-id "device/child1//"
~80% Reduction of installation size - #2295
thin-edge.io installation size has dramatically decreased from ~40MB down to 8MB by packaging the binaries as a single "multi-call" binary. This is a significant step forward to reducing the overall footprint to allow running thin-edge.io on even smaller devices.
Minor changes
- cli: Allow log filtering with $RUST_LOG by @Bravo555 in #2130
- cli: use tedge instead of mosquitto as owner of mosquitto files/folders by @reubenmiller in #2156
- feat(azure): extend supported topics on Azure IoT Hub bridge by @reubenmiller in #2278
- general: Disable lock file if directory does not exist or no permissions by @Ruadhri17 in #2190
- general: Handle binary uploads/downloads without attempting conversion to UTF-8 by @jarhodes314 in #2319
- general: tedge-agent creates /var/tedge/cache directory on start-up by @rina23q in #2293
- monitoring(collectd): increase the default intervals to avoid spamming iot platforms by @reubenmiller in #2141
- mqtt: allow non-root users to read mosquitto configuration files by @Ruadhri17 in #2269
- mqtt: Implement a converter that bridges the old MEA (measurements, events and alarms) topics to the new ones by @PradeepKiruvale in #2125
- troubleshooting: Add support for
config-dir
flag to c8y-remote-access-plugin by @Ruadhri17 in #2211 - troubleshooting: Check if sudo is available when using tedge agent operations by @Ruadhri17 in #2224
Bug fixes
- cli: Exit with code 0 if service manager not present by @Ruadhri17 in #2204
- cli: Fix the wrong exit code after the cloud connection test failure by @Ruadhri17 in #2182
- cli: tedge connect c8y --test must not use a persistent MQTT session by @didier-wenzek in #2209
- configuration: Fix: plugins don't update their internal representation of config files on file change by @Ruadhri17 in #2262
- installation: explicitly remove all packages to avoid problems when dependencies are changed by @reubenmiller in #2124
- installation: remove sudo dependency from installation scripts
- mapper(aws): tedge-mapper-aws health message uses two different timestamp formats for up and down messages by @PradeepKiruvale in #2320
- mapper(aws): tedge-mapper-aws prints errors for known non-json mosquitto bridge health status messages by @PradeepKiruvale in #2247
- mapper(azure): azure tedge mapper fails to translate health status messages by @PradeepKiruvale in #2273
- mapper(c8y): Avoid subscribing to s/dcr and forwarding s/ucr by @jarhodes314 in #2173
- mapper(c8y): Use MQTT clean session for the mosquitto c8y bridge connection by @jarhodes314 in #2171
- mqtt: Adding missing tests for c8y-log-manager and fixing a bug that causes mqtt actor termination by @Ruadhri17 in #2161
- mqtt: Don't log authentication configuration when connecting to MQTT broker by @Bravo555 in #2249
- mqtt: Enable concurrent processing of incoming and outgoing MQTT messages by @jarhodes314 in #2327
- mqtt: Fix tedge agent's mqtt actor termination when wrong payload was parsed by @Ruadhri17 in...
0.12.0
What's Changed
Features
- Support configurable tedge-mapper MQTT topics by @rina23q in #2033
- tedge init command #1764 by @albinsuresh in #2001
- download: Partial downloads by @Bravo555 in #1966
- Configurable timeout for custom operation handler by @PradeepKiruvale in #1917
- Retry http requests to c8y fails with the response status code 401,403 and 404 by @PradeepKiruvale in #2065
- Filtering criteria in apt-sm-plugin output by @Ruadhri17 in #1961
- Add a symlink to tedge-apt-plugin in /etc/tedge/sm-plugins by @PradeepKiruvale in #2027
Fixes
- Removing an operation with mv command does not remove the operation by @PradeepKiruvale in #1978
- tedge-mapper-c8y sync with tedge-agent by @PradeepKiruvale in #2050
- Improve downloader logging behaviour and make SoftwareManager exit immediately on ^C by @Bravo555 in #2049
What's Changed in 0.12.0 (full list)
- Added 14 steps to cover the whole config list by @gligorisaev in #1976
- Proc macro for tedge config by @jarhodes314 in #1936
- Fix setting names to match the new tedge-config by @didier-wenzek in #1989
- update deps to fix failing check on nightly by @Bravo555 in #1994
- Fix server/client auth docs page not appearing by @Bravo555 in #1995
- feat(tedge-mapper): retrieve agent version from cargo package version instead of calling the tedge cli by @reubenmiller in #1996
- Removing an operation with mv command does not remove the operation by @PradeepKiruvale in #1978
- ci: remove usage of actions-rs/toolchain@v1 as it is not actively maintained by @reubenmiller in #1999
- CI improvements by @Bravo555 in #1997
- Filtering criteria in apt-sm-plugin output by @Ruadhri17 in #1961
- fix(docs): remove outdated statement about optional HSM by @reubenmiller in #2000
- fix(test-framework): Fix Should Have MQTT Messages keyword for payload pattern matching by @reubenmiller in #2004
- download: Partial downloads by @Bravo555 in #1966
- tedge init command #1764 by @albinsuresh in #2001
- Bump crate-ci/typos from 1.14.3 to 1.15.0 by @dependabot in #2021
- Replace actions-rs with toolchain install by @Bravo555 in #2011
- fix(ci): use official github hosted runner names by @reubenmiller in #2009
- docker/docker-compose images are always pruned by @PradeepKiruvale in #2016
- Flaky test mapper_fails_during_sw_update_recovers_and_process_response test by @PradeepKiruvale in #2002
- Export tedge features via a library crate by @jarhodes314 in #2014
- Configurable timeout for custom operation handler by @PradeepKiruvale in #1917
- Requirements and design of thin-edge Rust extensions by @didier-wenzek in #1549
- fix(ci): remove erroneous prefix before run commands by @reubenmiller in #2022
- Add missing pub constructor by @didier-wenzek in #2015
- Child device firmware management specification #1998 by @albinsuresh in #2007
- Fix spell check failures by @rina23q in #2029
- Refactor tedge-mapper by using new tedge config API by @rina23q in #2013
- Add workflow to upload coverage report on pushes to main by @Bravo555 in #2025
- Add a symlink to tedge-apt-plugin in /etc/tedge/sm-plugins by @PradeepKiruvale in #2027
- Add test fot tedge init by @gligorisaev in #2031
- Improve ConnectUrl parse error message by @Bravo555 in #2038
- update doc to reflect the custom ops timeout by @PradeepKiruvale in #2037
- Don't exit ConfigManager if error processing event and improve config snapshot error message by @Bravo555 in #2040
- Bump joonvena/robotframework-reporter-action from 2.1 to 2.2 by @dependabot in #2024
- Fix/docs layout by @didier-wenzek in #2034
- Remove the file prefix numbers on documentation pages by @didier-wenzek in #2044
- Fix AwsConverter and AzConverter not being killed by JSON parse error by @rina23q in #2047
- pass config location to plugin-sm from agent by @Ruadhri17 in #2008
- Fix compilation error on nightly by @Bravo555 in #2052
- Fix thin-edge markdown to be accepted by Docusaurus. by @didier-wenzek in #2003
- docs: minor formatting improvements by @reubenmiller in #2053
- feat: publish docusaurus docs to github pages by @reubenmiller in #2054
- Fix broken links by @didier-wenzek in #2055
- docs: fix management typo in title by @reubenmiller in #2057
- docs: fix getting started step indentation by @reubenmiller in #2056
- tedge-mapper-c8y sync with tedge-agent by @PradeepKiruvale in #2050
- Move out Install section by @didier-wenzek in #2058
- docs: refactor markdown guidelines to show components by @reubenmiller in #2059
- Add DocCardList to all index pages by @didier-wenzek in #2060
- dev(docs): ignore symlink created when building the docs by @reubenmiller in #2061
- Improve documentation of the main concepts by @didier-wenzek in #2046
- Fix broken anchor links by @didier-wenzek in #2062
- Support configurable tedge-mapper MQTT topics by @rina23q in #2033
- Extra tools in dev-containers by @albinsuresh in #1988
- Refactor plugins by using new TEdgeConfig API by @Ruadhri17 in #2064
- Bump crate-ci/typos from 1.15.0 to 1.16.0 by @dependabot in #2066
- Fix Rust 1.71.0 update-related errors by @Bravo555 in #2072
- tedge-agent must use new tedge-config by @PradeepKiruvale in #2073
- Fix bug in ConcurrentServerMessageBox by @Bravo555 in #2068
- docs(fix): add missing commas to json examples by @reubenmiller in #2074
- Improve downloader logging behaviour and make SoftwareManager exit immediately on ^C by @Bravo555 in #2049
- Remove hardcoded port in test_mqtt_server.rs by @Bravo555 in #2076
- fix(c8y-bridge): don't use mqtt wildcard due to breaking change in cumulocity by @reubenmiller in #2078
- docs: remove duplicate row in the external broker instructions by @reubenmiller in #2080
- fix(test): remove erroneous robot framework resource import by @reubenmiller in #2083
- Guidelines for MQTT topics by @albinsuresh in #2030
- Bump actions/upload-pages-artifact from 1 to 2 by @dependabot in #2067
- docs(mqtt): fix invalid json in an example by @reubenmiller in #2084
- docs: mark mqtt v1 mapper docs as draft by @reubenmiller in #2090
- test(software): use local http server with rate limiting instead of external resource by @reubenmiller in #2085
- Refactor tedge to use new config by @PradeepKiruvale in #2077
...
0.11.0
Release notes:
This release marks a significant milestone in thin-edges's history. The thin-edge.io components have been refactored to use an Actor model which improves the internal project structure and lays the ground work for even faster releases, with even more features in the future (and not to mention even easier to test features 💯).
Functionally, everything will work as it did before, however you may notice that the traceability of each component has improved significantly, allowing you to better reason with what is going on.
A big thanks to the core team who worked very hard over the last few months to make this happen ❤️
- @didier-wenzek, @albinsuresh, @rina23q, @PradeepKiruvale, @gligorisaev, @Bravo555, @Ruadhri17, @jarhodes314, @jmshark, @reubenmiller
New features
Refactoring
- Migrate all services to use the actor model (no breaking changes have been introduced) by Core Team (too many PRs to mention here)
Monitoring
- Add support for PID files by @Ruadhri17 in #1849
MQTT
- Add MQTT client authentication by @Bravo555 in #1864
- Add MQTT server authentication by @Bravo555 in #1816
- mosquitto.conf: put
per_listener_settings
first by @Bravo555 in #1919 - Add separate HTTP and MQTT endpoints for Cumulocity by @Bravo555 in #1957
- fix(cli): use clean session when validating url connectivity during tedge connect by @reubenmiller in #1967
- Quit the MQTT event loop on Outgoing::Disconnect by @didier-wenzek in #1982
Telemetry
- Measurement type is static as "ThinEdgeMeasurement" by @PradeepKiruvale in #1911
Packaging
- feat: package all binaries in single tarball by @reubenmiller in #1944
- Improve debian systemd service enable/start logic in post installation scripts by @reubenmiller in #1865
Misc.
- feat: use native (OS) certs by default for reqwest by @reubenmiller in #1891
- Downloader to download directly to target location by @albinsuresh in #1881
Bug fixes
- fix: always remove/purge if package exists by @reubenmiller in #1866
- Ignore errors when cleaning up remote access plugin by @jarhodes314 in #1871
- fix: use transfer dir setting instead of hard-coded path by @reubenmiller in #1898
- tedge-mapper-c8y service restart is required after a change of supported operation file contents by @PradeepKiruvale in #1959
Docs
- Cosmetic documentation improvements by @didier-wenzek in #1892
Developer
- Add just file support by @Ruadhri17 in #1889
What's Changed in 0.11.0 (full list)
- feat: add new plugins to install/remove script by @reubenmiller in #1857
- fix: bump tedge version in script to 0.10.0 by @reubenmiller in #1858
- Correct spell check errors by @gligorisaev in #1860
- Feat: Detect latest thin-edge.io version via github api in install script by @reubenmiller in #1861
- Rewrite c8y-log-plugin using c8y_log_manager by @didier-wenzek in #1820
- Remove message box trait by @jmshark in #1855
- Refactor c8y-config-plugin to use c8y-config-manager actor by @albinsuresh in #1828
- Add #[derive(Document)] to TEdgeConfigDto and replace FilePath with camino::Utf8PathBuf by @jarhodes314 in #1867
- Remove unnecessary AWS config field alias by @Bravo555 in #1859
- Add support for PID files by @Ruadhri17 in #1849
- fix: always remove/purge if package exists by @reubenmiller in #1866
- Added examples to keywords by @gligorisaev in #1868
- Add test for checking the lock file creation set/unset by @gligorisaev in #1851
- Add MQTT server authentication by @Bravo555 in #1816
- Add Converter trait and ConvertingActor by @didier-wenzek in #1873
- Impl Sender for TimedMessageBox test helper by @albinsuresh in #1870
- Fixed most clippy lints and enabled clippy for all targets by @Bravo555 in #1874
- Ignore errors when cleaning up remote access plugin by @jarhodes314 in #1871
- Removed the Task trait by @jmshark in #1878
- Downloader to download directly to target location by @albinsuresh in #1881
- Fix flaky test: test_fs_events by @didier-wenzek in #1882
- Install rust version from Cargo.toml in CI checks by @jarhodes314 in #1885
- Improve debian systemd service enable/start logic in post installation scripts by @reubenmiller in #1865
- Add test for documented configuration examples by @jarhodes314 in #1877
- Add tedge-downloader-actor by @rina23q in #1884
- add test for raising alarms in folder telemetry and move the child de… by @gligorisaev in #1887
- feat: use native (OS) certs by default for reqwest by @reubenmiller in #1891
- Cosmetic documentation improvements by @didier-wenzek in #1892
- docs: use inline code blocks to avoid warnings by @reubenmiller in #1893
- Add steps to check PID in lock file by @gligorisaev in #1895
- Add a Config type parameter to MessageSink by @didier-wenzek in #1880
- Refactor Azure and Aws mapper using actors by @PradeepKiruvale in #1888
- docs: add missing debian packages to instructions by @reubenmiller in #1901
- Bump peter-evans/create-pull-request from 4 to 5 by @dependabot in #1903
- get pid api by @PradeepKiruvale in #1890
- docs: use double quotes instead of open/close by @reubenmiller in #1897
- doc: fix spelling mistakes by @reubenmiller in #1900
- fix: use transfer dir setting instead of hard-coded path by @reubenmiller in #1898
- Use mdbook-pagetoc to add a table of contents to each page by @didier-wenzek in #1904
- Add just file support by @Ruadhri17 in #1889
- Refactor the collectd mapper using actors by @didier-wenzek in #1817
- New
c8y_firmware_manager
by @rina23q in #1830 - Cargo update by @didier-wenzek in #1910
- Improve actor builders by @didier-wenzek in #1913
- mosquitto.conf: put
per_listener_settings
first by @Bravo555 in #1919 - CI: use beta toolchain for clippy by @Bravo555 in #1924
- Delay systemd automatic service restarts by 5 sec by @reubenmiller in #1921
- Run
cargo update
to passcargo audit
by @Bravo555 in #1925 - Add MQTT client authentication by @Bravo555 in #1864
- Fix rename by @Ruadhri17 in #1914
- Test configuration management on main device by @reubenmiller in #1875
- Test configuration of tedge services to use a remote MQTT broker by @reubenmiller in #1848
- Fix/1896/file modifications by @jmshark in #1928
- Fix typo in mqtt.client.auth.key set error message by @Bravo555 in #1929
- Fix MQTT session of c8y_http_proxy by @didier-wenzek in #1933
- extend error message for chown function by @Ruadhri17 in #1930
- ci(fix): Used fixed version for udep...
0.10.0
Release notes:
New features
Cloud Connectors
- Add aws support - Samuel's version without CSR by @Bravo555 in #1723
- Add child device support for azure (measurements) by @toewsar in #1805
Commands (CLI)
Configuration
- Allow configuration to be passed in using TEDGE_ environment variables by @jarhodes314 in #1790 and #1837
- Add configuration option to disable lock file creation by @Ruadhri17 in #1818
- Issue#1804 tedge config setting for data path by @albinsuresh in #1807
Device Management
- Add c8y-firmware-plugin to support Child Devices (only) by @rina23q in #1719
- Add Cumulocity IoT remote access plugin (
c8y-remote-access-plugin
) by @jarhodes314 in #1694
Monitoring
- Adapt monitoring of daemons to new Service Monitoring Feature in 10.14 by @PradeepKiruvale in #1728
MQTT
Telemetry
- Support custom fragments in alarm creation by @PradeepKiruvale in #1699
- tedge alarm does not transform message fragment to text in the tedge-mapper-c8y by @PradeepKiruvale in #1715
Bug fixes
- Fix issues with
flock
preventing to launch a daemon even if not con… by @didier-wenzek in #1740
Docs
- Doc fix misalignment and typos in c8y-configuration-plugin specs by @rina23q in #1700
- Fix uninstall script name in the doc by @PradeepKiruvale in #1713
- Software management plugin docs: fix grammer and api mistakes by @reubenmiller in #1727
- Use mdbook-cmdrun to generate man pages by @didier-wenzek in #1809
- update yocto documentation by @Ruadhri17 in #1796
- Refactor the documentation layout. by @didier-wenzek in #1841
Build
- Build/publish artifacts - musl, zigbuild and cloudsmith by @reubenmiller in #1712
Developer
- feat: add vscode devcontainer definition by @reubenmiller in #1690
What's Changed since 0.10.0
- Fix default version logic in thin-edge install script by @reubenmiller in #1698
- feat: add vscode devcontainer definition by @reubenmiller in #1690
- Create tedge reference docs by @github-actions in #1668
- Doc fix misalignment and typos in c8y-configuration-plugin specs by @rina23q in #1700
- update dev container instructions by @reubenmiller in #1701
- Add initial data model by @cstoidner in #1677
- Add Cumulocity remote access plugin by @jarhodes314 in #1694
- Fix remove remote access install by @reubenmiller in #1706
- Bump crate-ci/typos from 1.13.9 to 1.13.10 by @dependabot in #1708
- Update the health status document by @PradeepKiruvale in #1704
- Support custom fragments in alarm creation by @PradeepKiruvale in #1699
- tedge_mapper az/collectd services start running when the thin-edge device restarts by @PradeepKiruvale in #1683
- Doc: Update the supported operation file example by @rina23q in #1702
- Refactor the download implementation of c8y-configuration-plugin by @rina23q in #1709
- Fix uninstall script name in the doc by @PradeepKiruvale in #1713
- Build/publish artifacts - musl, zigbuild and cloudsmith by @reubenmiller in #1712
- publish workflow: skip installation of build dependencies by @reubenmiller in #1717
- remove unnecessary build jobs from pull-request-checks workflow by @reubenmiller in #1720
- Support posix shells in uninstall script by @reubenmiller in #1722
- Introduce actor-based thin-edge components by @didier-wenzek in #1622
- tedge alarm does not transform message fragment to text in the tedge-mapper-c8y by @PradeepKiruvale in #1715
- Software management plugin docs: fix grammer and api mistakes by @reubenmiller in #1727
- refactor robot framework tests by @reubenmiller in #1714
- Add aws support - Samuel's version without CSR by @Bravo555 in #1723
- Wait for mapper health message before starting software list assertion by @reubenmiller in #1730
- Implemented
tedge reconnect aws
by @Bravo555 in #1737 - Additional dev tools in devcontainer by @albinsuresh in #1736
- Fix issues with
flock
preventing to launch a daemon even if not con… by @didier-wenzek in #1740 - Adapt monitoring of daemons to new Service Monitoring Feature in 10.14 by @PradeepKiruvale in #1728
- Simplify actor spawn logic by @didier-wenzek in #1742
- Applied clippy lints by @Bravo555 in #1734
- Issue #1724 Derive actor configs from TEdgeConfig by @albinsuresh in #1745
- Add c8y-firmware-plugin by @rina23q in #1719
- Bump crate-ci/typos from 1.13.10 to 1.13.12 by @dependabot in #1755
- disable unstable alarm tests by @PradeepKiruvale in #1756
- Fix clippy warning almost_swapped by @didier-wenzek in #1761
- Bump actions/checkout from 2 to 3 by @dependabot in #1759
- Bump actions/download-artifact from 1 to 3 by @dependabot in #1760
- Improve naming for message box builder traits by @didier-wenzek in #1748
- Remove tedge_actors dependency on anyhow by @didier-wenzek in #1752
- tedge-mapper-c8y sends the incorrect service type when the service is down by @PradeepKiruvale in #1754
- Bump actions/upload-artifact from 1 to 3 by @dependabot in #1758
- Test tasks improvements by @reubenmiller in #1751
- Switched to stable clippy by @Bravo555 in #1766
- Aws topic mapping by @Bravo555 in #1739
- Deprecate useless specialization: C8YConnectionBuilder by @didier-wenzek in #1770
- use relative svg link to prevent CORB error by @reubenmiller in #1780
- remove duplicate container networks before tests by @reubenmiller in #1781
- Fix the flaky alarms tests by @PradeepKiruvale in #1765
- Output tedge config control messages to stderr by @Bravo555 in #1771
- Combine message box receivers by @jmshark in #1738
- Add address/port config settings for crates using MQTT clients by @Bravo555 in #1789
- Allow configuration to be passed in using TEDGE_ environment variables by @jarhodes314 in #1790
- Simplify Actor Builders by @didier-wenzek in #1772
- Add a RobotFramework test for c8y-firmware-plugin by @rina23q in #1787
- Document tedge_actors crate by @didier-wenzek in #1744
- All service statuses are set to down and remain down after restarting mosquitto by @PradeepKiruvale in #1788
- Issue #1782 Non blocking firmware download by @albinsuresh in #1791
- Add test for jwt request b...