@alteriom/painlessmesh 1.7.8 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/CHANGELOG.md +139 -3
  2. package/README.md +114 -4
  3. package/RELEASE_GUIDE.md +57 -8
  4. package/docs/BRIDGE_FAILOVER.md +512 -0
  5. package/docs/BRIDGE_HEALTH_MONITORING.md +293 -0
  6. package/docs/CREATE_MISSING_RELEASES.md +321 -0
  7. package/docs/README.md +2 -1
  8. package/docs/RELEASE_AGENT_SUMMARY.md +386 -0
  9. package/docs/releases/RELEASE_SUMMARY_v1.7.8.md +523 -0
  10. package/docs/releases/RELEASE_SUMMARY_v1.7.9.md +542 -0
  11. package/docs/troubleshooting/ESP32_C6_COMPATIBILITY.md +157 -0
  12. package/docs/troubleshooting/common-issues.md +28 -0
  13. package/examples/alteriom/alteriom_sensor_package.hpp +233 -1
  14. package/examples/alteriom/platformio.ini +1 -1
  15. package/examples/alteriomImproved/platformio.ini +1 -1
  16. package/examples/alteriomMetricsHealth/metrics_health_node.ino +18 -7
  17. package/examples/alteriomMetricsHealth/platformio.ini +1 -1
  18. package/examples/alteriomPhase1/platformio.ini +1 -1
  19. package/examples/alteriomPhase2/platformio.ini +1 -1
  20. package/examples/alteriomSensorNode/alteriom_sensor_package.hpp +1014 -11
  21. package/examples/alteriomSensorNode/platformio.ini +1 -1
  22. package/examples/basic/basic.ino +6 -2
  23. package/examples/basic/platformio.ini +1 -1
  24. package/examples/bridge/alteriom_sensor_package.hpp +1170 -0
  25. package/examples/bridge/bridge.ino +44 -23
  26. package/examples/bridge/bridge_health_monitoring_example.ino +188 -0
  27. package/examples/bridge/enhanced_mqtt_bridge.hpp +1 -1
  28. package/examples/bridge/mqtt_command_bridge.hpp +2 -2
  29. package/examples/bridge/platformio.ini +2 -1
  30. package/examples/bridgeAwareSensorNode/alteriom_sensor_package.hpp +1227 -0
  31. package/examples/bridgeAwareSensorNode/bridgeAwareSensorNode.ino +343 -0
  32. package/examples/bridgeAwareSensorNode/platformio.ini +26 -0
  33. package/examples/bridge_failover/README.md +358 -0
  34. package/examples/bridge_failover/bridge_failover.ino +180 -0
  35. package/examples/bridge_failover/platformio.ini +27 -0
  36. package/examples/diagnosticsExample/diagnosticsExample.ino +171 -0
  37. package/examples/diagnosticsExample/platformio.ini +26 -0
  38. package/examples/echoNode/platformio.ini +1 -1
  39. package/examples/logClient/platformio.ini +1 -1
  40. package/examples/logServer/platformio.ini +1 -1
  41. package/examples/mqttStatusBridge/platformio.ini +1 -1
  42. package/examples/namedMesh/platformio.ini +1 -1
  43. package/examples/ntpTimeSyncBridge/alteriom_sensor_package.hpp +1383 -0
  44. package/examples/ntpTimeSyncBridge/ntpTimeSyncBridge.ino +81 -0
  45. package/examples/ntpTimeSyncNode/alteriom_sensor_package.hpp +1383 -0
  46. package/examples/ntpTimeSyncNode/ntpTimeSyncNode.ino +109 -0
  47. package/examples/otaReceiver/platformio.ini +1 -1
  48. package/examples/rtcIntegration/README.md +235 -0
  49. package/examples/rtcIntegration/rtcIntegration.ino +196 -0
  50. package/examples/startHere/platformio.ini +1 -1
  51. package/examples/webServer/platformio.ini +1 -1
  52. package/library.json +93 -53
  53. package/library.properties +1 -1
  54. package/package.json +2 -2
  55. package/src/arduino/wifi.hpp +581 -0
  56. package/src/painlessMeshSTA.cpp +68 -0
  57. package/src/painlessMeshSTA.h +3 -0
  58. package/src/painlessmesh/mesh.hpp +1127 -4
  59. package/src/painlessmesh/rtc.hpp +203 -0
@@ -0,0 +1,293 @@
1
+ # Bridge Health Monitoring & Metrics Collection
2
+
3
+ ## Overview
4
+
5
+ The Bridge Health Monitoring feature provides comprehensive operational visibility into bridge health, connectivity quality, and performance metrics. This is essential for production deployments, troubleshooting, and capacity planning.
6
+
7
+ ## Features
8
+
9
+ ✅ **Connectivity Metrics** - Track uptime, internet connectivity, and disconnection events
10
+ ✅ **Signal Quality** - Monitor WiFi signal strength (RSSI) statistics
11
+ ✅ **Traffic Metrics** - Measure bytes and messages transmitted/received
12
+ ✅ **Performance Metrics** - Calculate latency and packet loss
13
+ ✅ **JSON Export** - Easy integration with monitoring tools
14
+ ✅ **Prometheus Support** - Export metrics for Prometheus scraping
15
+ ✅ **Periodic Callbacks** - Automated metric collection and reporting
16
+
17
+ ## API Reference
18
+
19
+ ### BridgeHealthMetrics Structure
20
+
21
+ ```cpp
22
+ struct BridgeHealthMetrics {
23
+ // Connectivity
24
+ uint32_t uptimeSeconds; // Total uptime in seconds
25
+ uint32_t internetUptimeSeconds; // Time with Internet connection
26
+ uint32_t totalDisconnects; // Number of disconnection events
27
+ uint32_t currentUptime; // Current uptime in milliseconds
28
+
29
+ // Signal Quality
30
+ int8_t currentRSSI; // Current WiFi signal strength (dBm)
31
+ int8_t avgRSSI; // Average signal strength
32
+ int8_t minRSSI; // Minimum observed signal strength
33
+ int8_t maxRSSI; // Maximum observed signal strength
34
+
35
+ // Traffic
36
+ uint64_t bytesRx; // Total bytes received
37
+ uint64_t bytesTx; // Total bytes transmitted
38
+ uint32_t messagesRx; // Total messages received
39
+ uint32_t messagesTx; // Total messages transmitted
40
+ uint32_t messagesQueued; // Messages currently queued
41
+ uint32_t messagesDropped; // Messages that failed to send
42
+
43
+ // Performance
44
+ uint32_t avgLatencyMs; // Average message latency
45
+ uint8_t packetLossPercent; // Packet loss percentage (0-100)
46
+ uint32_t meshNodeCount; // Number of nodes in mesh
47
+ };
48
+ ```
49
+
50
+ ### Methods
51
+
52
+ #### getBridgeHealthMetrics()
53
+
54
+ Get current health metrics snapshot.
55
+
56
+ ```cpp
57
+ BridgeHealthMetrics metrics = mesh.getBridgeHealthMetrics();
58
+
59
+ Serial.printf("Uptime: %u s\n", metrics.uptimeSeconds);
60
+ Serial.printf("Messages RX: %u\n", metrics.messagesRx);
61
+ Serial.printf("Avg Latency: %u ms\n", metrics.avgLatencyMs);
62
+ ```
63
+
64
+ #### resetHealthMetrics()
65
+
66
+ Reset all counters to zero. Useful for periodic monitoring windows.
67
+
68
+ ```cpp
69
+ mesh.resetHealthMetrics();
70
+ ```
71
+
72
+ **Note:** This resets counters (messages, bytes, disconnects) but keeps current state metrics (RSSI, node count).
73
+
74
+ #### getHealthMetricsJSON()
75
+
76
+ Export metrics as JSON string for easy integration.
77
+
78
+ ```cpp
79
+ String json = mesh.getHealthMetricsJSON();
80
+ mqttClient.publish("bridge/metrics", json.c_str());
81
+ ```
82
+
83
+ **JSON Format:**
84
+ ```json
85
+ {
86
+ "connectivity": {
87
+ "uptimeSeconds": 3600,
88
+ "internetUptimeSeconds": 3540,
89
+ "totalDisconnects": 2,
90
+ "currentUptime": 3600000
91
+ },
92
+ "signalQuality": {
93
+ "currentRSSI": -65,
94
+ "avgRSSI": -68,
95
+ "minRSSI": -75,
96
+ "maxRSSI": -60
97
+ },
98
+ "traffic": {
99
+ "bytesRx": 1048576,
100
+ "bytesTx": 524288,
101
+ "messagesRx": 1234,
102
+ "messagesTx": 567,
103
+ "messagesQueued": 0,
104
+ "messagesDropped": 5
105
+ },
106
+ "performance": {
107
+ "avgLatencyMs": 45,
108
+ "packetLossPercent": 1,
109
+ "meshNodeCount": 8
110
+ }
111
+ }
112
+ ```
113
+
114
+ #### onHealthMetricsUpdate()
115
+
116
+ Register a periodic callback for automated monitoring.
117
+
118
+ ```cpp
119
+ mesh.onHealthMetricsUpdate([](BridgeHealthMetrics metrics) {
120
+ // Process metrics
121
+ Serial.printf("Nodes: %u, Latency: %u ms\n",
122
+ metrics.meshNodeCount, metrics.avgLatencyMs);
123
+ }, 60000); // Every 60 seconds
124
+ ```
125
+
126
+ ## Integration Examples
127
+
128
+ ### MQTT Publishing
129
+
130
+ ```cpp
131
+ #include <PubSubClient.h>
132
+
133
+ WiFiClient espClient;
134
+ PubSubClient mqttClient(espClient);
135
+
136
+ void metricsCallback(BridgeHealthMetrics metrics) {
137
+ if (mqttClient.connected()) {
138
+ String json = mesh.getHealthMetricsJSON();
139
+ mqttClient.publish("bridge/metrics", json.c_str());
140
+ }
141
+ }
142
+
143
+ void setup() {
144
+ // ... mesh setup ...
145
+ mesh.onHealthMetricsUpdate(metricsCallback, 60000);
146
+ }
147
+ ```
148
+
149
+ ### Prometheus Exporter
150
+
151
+ ```cpp
152
+ #include <ESPAsyncWebServer.h>
153
+
154
+ AsyncWebServer server(80);
155
+
156
+ String exportPrometheus() {
157
+ auto metrics = mesh.getBridgeHealthMetrics();
158
+
159
+ String output = "";
160
+ output += "# HELP bridge_uptime_seconds Bridge uptime\n";
161
+ output += "# TYPE bridge_uptime_seconds counter\n";
162
+ output += "bridge_uptime_seconds " + String(metrics.uptimeSeconds) + "\n";
163
+
164
+ output += "# HELP bridge_rssi_dbm WiFi signal strength\n";
165
+ output += "# TYPE bridge_rssi_dbm gauge\n";
166
+ output += "bridge_rssi_dbm " + String(metrics.currentRSSI) + "\n";
167
+
168
+ // Add more metrics...
169
+
170
+ return output;
171
+ }
172
+
173
+ void setup() {
174
+ // ... mesh setup ...
175
+
176
+ server.on("/metrics", HTTP_GET, [](AsyncWebServerRequest *request){
177
+ request->send(200, "text/plain", exportPrometheus());
178
+ });
179
+
180
+ server.begin();
181
+ }
182
+ ```
183
+
184
+ ### Grafana Dashboard
185
+
186
+ Use the Prometheus exporter above with Grafana to create monitoring dashboards:
187
+
188
+ 1. Configure Prometheus to scrape your bridge node: `http://bridge-ip/metrics`
189
+ 2. Import metrics into Grafana
190
+ 3. Create panels for:
191
+ - Uptime and availability
192
+ - Signal strength trends
193
+ - Traffic throughput
194
+ - Latency and packet loss
195
+ - Mesh topology changes
196
+
197
+ ### Cloud Logging (AWS CloudWatch, Azure Monitor, etc.)
198
+
199
+ ```cpp
200
+ void metricsCallback(BridgeHealthMetrics metrics) {
201
+ String json = mesh.getHealthMetricsJSON();
202
+
203
+ // Send to CloudWatch
204
+ httpClient.post("/cloudwatch", json);
205
+
206
+ // Send to Azure Monitor
207
+ httpClient.post("/azure-monitor", json);
208
+ }
209
+ ```
210
+
211
+ ## Use Cases
212
+
213
+ ### Production Monitoring
214
+
215
+ Monitor bridge health in production deployments:
216
+ - Track uptime and availability
217
+ - Detect connectivity issues early
218
+ - Analyze signal quality trends
219
+ - Capacity planning based on traffic patterns
220
+
221
+ ### Troubleshooting
222
+
223
+ Debug network issues:
224
+ - Identify sources of packet loss
225
+ - Locate signal strength problems
226
+ - Diagnose latency spikes
227
+ - Track disconnection patterns
228
+
229
+ ### Performance Optimization
230
+
231
+ Optimize mesh performance:
232
+ - Analyze traffic patterns
233
+ - Identify bottlenecks
234
+ - Optimize node placement based on RSSI
235
+ - Fine-tune routing strategies
236
+
237
+ ## Best Practices
238
+
239
+ ### Monitoring Intervals
240
+
241
+ - **Development:** 10-30 seconds for rapid feedback
242
+ - **Production:** 60-300 seconds to reduce overhead
243
+ - **Critical Systems:** 30-60 seconds with alerting
244
+
245
+ ### Metric Storage
246
+
247
+ - Use time-series databases (InfluxDB, Prometheus)
248
+ - Retain raw metrics for 7-30 days
249
+ - Aggregate to hourly/daily for long-term storage
250
+ - Set up automated retention policies
251
+
252
+ ### Alerting
253
+
254
+ Set up alerts for:
255
+ - Packet loss > 5%
256
+ - Latency > 200ms
257
+ - Signal strength < -80 dBm
258
+ - Frequent disconnections (> 3/hour)
259
+ - Node count drops
260
+
261
+ ### Resource Management
262
+
263
+ On ESP8266 (limited RAM):
264
+ - Use longer intervals (120-300 seconds)
265
+ - Minimize callback complexity
266
+ - Consider offloading processing to gateway
267
+
268
+ On ESP32 (more RAM):
269
+ - Can use shorter intervals (30-60 seconds)
270
+ - More sophisticated processing possible
271
+ - Support multiple monitoring integrations
272
+
273
+ ## Example: Complete Monitoring Setup
274
+
275
+ See `examples/bridge/bridge_health_monitoring_example.ino` for a complete working example with:
276
+ - Periodic metrics logging
277
+ - MQTT integration
278
+ - Prometheus export endpoint
279
+ - Manual metrics queries
280
+
281
+ ## Version History
282
+
283
+ - **v1.8.0** - Initial release
284
+ - Basic metrics collection
285
+ - JSON export
286
+ - Periodic callbacks
287
+ - MQTT and Prometheus examples
288
+
289
+ ## See Also
290
+
291
+ - [Bridge Architecture](BRIDGE_ARCHITECTURE_IMPLEMENTATION.md)
292
+ - [Bridge Status Feature](BRIDGE_STATUS_FEATURE.md)
293
+ - [MQTT Bridge Examples](../examples/bridge/)
@@ -0,0 +1,321 @@
1
+ # Creating Missing GitHub Releases for v1.7.8 and v1.7.9
2
+
3
+ ## Problem
4
+
5
+ Versions 1.7.8 and 1.7.9 have:
6
+ - ✅ CHANGELOG.md entries (complete release notes)
7
+ - ✅ Release summary documentation (docs/releases/RELEASE_SUMMARY_v1.7.x.md)
8
+ - ✅ Version numbers in library files (library.properties, library.json, package.json)
9
+ - ❌ **Missing GitHub Releases** (no tags, no release pages)
10
+
11
+ This means:
12
+ - Users cannot download these specific versions from GitHub
13
+ - Release automation may not have run properly
14
+ - NPM/GitHub Packages may not have been published
15
+
16
+ ## Solution: Create GitHub Releases Retroactively
17
+
18
+ ### Option 1: Automated Script (Recommended)
19
+
20
+ We've created a script to automate the process:
21
+
22
+ ```bash
23
+ ./scripts/create-missing-releases.sh
24
+ ```
25
+
26
+ **What it does:**
27
+ 1. Extracts release notes from CHANGELOG.md
28
+ 2. Creates git tags (v1.7.8, v1.7.9)
29
+ 3. Pushes tags to GitHub
30
+ 4. Creates GitHub releases with proper release notes
31
+ 5. Provides links to verify releases
32
+
33
+ **Requirements:**
34
+ - GitHub CLI (`gh`) installed: https://cli.github.com/
35
+ - Authenticated with GitHub: `gh auth login`
36
+ - Write access to the repository
37
+
38
+ **Running the script:**
39
+
40
+ ```bash
41
+ # Navigate to repository root
42
+ cd /path/to/painlessMesh
43
+
44
+ # Run the script
45
+ ./scripts/create-missing-releases.sh
46
+
47
+ # Follow the prompts
48
+ # - Confirm you want to proceed
49
+ # - If releases exist, choose whether to recreate them
50
+ ```
51
+
52
+ ### Option 2: Manual Process
53
+
54
+ If you prefer to create releases manually or the script doesn't work:
55
+
56
+ #### Step 1: Extract Release Notes
57
+
58
+ ```bash
59
+ # Extract v1.7.8 notes
60
+ awk '/^## \[1\.7\.8\]/ {flag=1; next} /^## \[/ {flag=0} flag' CHANGELOG.md > release_notes_1.7.8.txt
61
+
62
+ # Extract v1.7.9 notes
63
+ awk '/^## \[1\.7\.9\]/ {flag=1; next} /^## \[/ {flag=0} flag' CHANGELOG.md > release_notes_1.7.9.txt
64
+ ```
65
+
66
+ #### Step 2: Create Tags and Releases via GitHub CLI
67
+
68
+ **For v1.7.8:**
69
+ ```bash
70
+ # Create and push tag
71
+ git tag -a v1.7.8 -m "painlessMesh v1.7.8"
72
+ git push origin v1.7.8
73
+
74
+ # Create GitHub release
75
+ gh release create v1.7.8 \
76
+ --repo Alteriom/painlessMesh \
77
+ --title "painlessMesh v1.7.8" \
78
+ --notes-file release_notes_1.7.8.txt
79
+ ```
80
+
81
+ **For v1.7.9:**
82
+ ```bash
83
+ # Create and push tag
84
+ git tag -a v1.7.9 -m "painlessMesh v1.7.9"
85
+ git push origin v1.7.9
86
+
87
+ # Create GitHub release
88
+ gh release create v1.7.9 \
89
+ --repo Alteriom/painlessMesh \
90
+ --title "painlessMesh v1.7.9" \
91
+ --notes-file release_notes_1.7.9.txt
92
+ ```
93
+
94
+ #### Step 3: Create Releases via GitHub Web UI
95
+
96
+ If you don't have GitHub CLI:
97
+
98
+ 1. **Go to**: https://github.com/Alteriom/painlessMesh/releases/new
99
+ 2. **For v1.7.8**:
100
+ - Tag: `v1.7.8`
101
+ - Release title: `painlessMesh v1.7.8`
102
+ - Description: Copy content from `CHANGELOG.md` section `[1.7.8]`
103
+ - Click "Publish release"
104
+ 3. **For v1.7.9**:
105
+ - Tag: `v1.7.9`
106
+ - Release title: `painlessMesh v1.7.9`
107
+ - Description: Copy content from `CHANGELOG.md` section `[1.7.9]`
108
+ - Click "Publish release"
109
+
110
+ ## Verification
111
+
112
+ After creating the releases, verify:
113
+
114
+ ### 1. Check GitHub Releases Page
115
+ ```bash
116
+ # View releases via CLI
117
+ gh release list --repo Alteriom/painlessMesh
118
+
119
+ # Or visit in browser
120
+ # https://github.com/Alteriom/painlessMesh/releases
121
+ ```
122
+
123
+ **Expected output:**
124
+ ```
125
+ v1.7.9 painlessMesh v1.7.9 Latest 2025-11-08
126
+ v1.7.8 painlessMesh v1.7.8 2025-11-05
127
+ ```
128
+
129
+ ### 2. Check Tags
130
+ ```bash
131
+ git fetch --tags
132
+ git tag -l | grep -E "v1.7.[89]"
133
+ ```
134
+
135
+ **Expected output:**
136
+ ```
137
+ v1.7.8
138
+ v1.7.9
139
+ ```
140
+
141
+ ### 3. Verify Release Notes
142
+ Visit each release page and confirm:
143
+ - ✅ Release notes match CHANGELOG.md content
144
+ - ✅ Date is correct (v1.7.8: Nov 5, 2025; v1.7.9: Nov 8, 2025)
145
+ - ✅ Release is marked as "Latest" for v1.7.9
146
+
147
+ ## Publishing Packages
148
+
149
+ After creating the GitHub releases, you may want to publish packages to NPM and GitHub Packages.
150
+
151
+ ### Check if Already Published
152
+
153
+ ```bash
154
+ # Check NPM
155
+ npm view @alteriom/painlessmesh versions
156
+
157
+ # Check if 1.7.8 and 1.7.9 are listed
158
+ ```
159
+
160
+ ### Publish if Missing
161
+
162
+ If versions are not published:
163
+
164
+ ```bash
165
+ # Option 1: Trigger manual publish workflow
166
+ gh workflow run manual-publish.yml --repo Alteriom/painlessMesh
167
+
168
+ # Option 2: Manual NPM publish (requires NPM token)
169
+ npm publish --access public
170
+ ```
171
+
172
+ ## Why This Happened
173
+
174
+ The releases were likely missed because:
175
+
176
+ 1. **Commits didn't trigger release workflow** - The release workflow triggers on:
177
+ - Commits to `main` branch
178
+ - Changes to version files OR commit message starting with `release:`
179
+ - If neither condition was met, no release was created
180
+
181
+ 2. **Version was bumped without triggering release** - The version files were updated but:
182
+ - Commit message didn't start with `release:`
183
+ - Or changes were pushed to a different branch first
184
+
185
+ 3. **Workflow may have failed** - Check GitHub Actions history for failed workflows
186
+
187
+ ## Preventing Future Issues
188
+
189
+ ### Ensure Releases Trigger Properly
190
+
191
+ The release workflow (`.github/workflows/release.yml`) triggers when:
192
+
193
+ 1. **Automatic trigger** (recommended):
194
+ - Modify `library.properties`, `library.json`, or `package.json`
195
+ - Commit changes to `main` branch
196
+ - Workflow automatically detects version bump and creates release
197
+
198
+ 2. **Manual trigger**:
199
+ - Commit message starts with `release:`
200
+ - Example: `git commit -m "release: v1.8.0 - New features"`
201
+
202
+ ### Best Practices for Future Releases
203
+
204
+ 1. **Use the bump-version script:**
205
+ ```bash
206
+ ./scripts/bump-version.sh patch # or minor, major
207
+ ```
208
+
209
+ 2. **Update CHANGELOG.md** with release notes
210
+
211
+ 3. **Use release agent to validate:**
212
+ ```bash
213
+ ./scripts/release-agent.sh
214
+ ```
215
+
216
+ 4. **Commit with proper message:**
217
+ ```bash
218
+ git add library.properties library.json package.json CHANGELOG.md
219
+ git commit -m "release: v1.8.0 - Brief description"
220
+ git push origin main
221
+ ```
222
+
223
+ 5. **Verify workflow runs:**
224
+ - Go to: https://github.com/Alteriom/painlessMesh/actions
225
+ - Watch the "Automated Release" workflow
226
+ - Confirm it completes successfully
227
+
228
+ 6. **Check release was created:**
229
+ ```bash
230
+ gh release list --repo Alteriom/painlessMesh
231
+ ```
232
+
233
+ ### Monitoring Release Success
234
+
235
+ After pushing a release commit, verify:
236
+
237
+ - ✅ GitHub Actions workflow runs successfully
238
+ - ✅ Git tag is created and pushed
239
+ - ✅ GitHub release is created with notes
240
+ - ✅ NPM package is published
241
+ - ✅ GitHub Packages is updated
242
+ - ✅ Wiki is synchronized (if enabled)
243
+
244
+ View the workflow run:
245
+ ```bash
246
+ gh run list --workflow=release.yml --repo Alteriom/painlessMesh
247
+ ```
248
+
249
+ ## Troubleshooting
250
+
251
+ ### "Tag already exists" Error
252
+
253
+ If tags exist but releases don't:
254
+ ```bash
255
+ # Delete existing tags (careful!)
256
+ git tag -d v1.7.8
257
+ git push origin :refs/tags/v1.7.8
258
+
259
+ # Then recreate using the script
260
+ ./scripts/create-missing-releases.sh
261
+ ```
262
+
263
+ ### "Permission denied" Error
264
+
265
+ You need write access to the repository:
266
+ - Verify you're authenticated: `gh auth status`
267
+ - Check your permissions on the repository
268
+ - Contact repository owner for access
269
+
270
+ ### Script Fails
271
+
272
+ If the automated script fails:
273
+ 1. Check error messages
274
+ 2. Verify GitHub CLI is installed: `gh --version`
275
+ 3. Verify you're authenticated: `gh auth login`
276
+ 4. Try manual process (Option 2 above)
277
+
278
+ ### Release Notes Are Empty
279
+
280
+ If release notes extraction fails:
281
+ 1. Verify CHANGELOG.md format matches expected pattern
282
+ 2. Check that version sections exist: `## [1.7.8]` and `## [1.7.9]`
283
+ 3. Manually copy content from CHANGELOG.md
284
+
285
+ ## Additional Resources
286
+
287
+ - **Release Guide**: See `RELEASE_GUIDE.md` for complete release process
288
+ - **GitHub Releases**: https://github.com/Alteriom/painlessMesh/releases
289
+ - **GitHub CLI Docs**: https://cli.github.com/manual/
290
+ - **Release Workflow**: `.github/workflows/release.yml`
291
+
292
+ ## Summary
293
+
294
+ **To create missing releases:**
295
+
296
+ ```bash
297
+ # Quick method (automated)
298
+ ./scripts/create-missing-releases.sh
299
+
300
+ # Verify
301
+ gh release list --repo Alteriom/painlessMesh
302
+
303
+ # Publish packages if needed
304
+ gh workflow run manual-publish.yml --repo Alteriom/painlessMesh
305
+ ```
306
+
307
+ **To prevent future issues:**
308
+
309
+ ```bash
310
+ # Always use this workflow for releases:
311
+ ./scripts/bump-version.sh patch
312
+ # Update CHANGELOG.md
313
+ ./scripts/release-agent.sh # Validate
314
+ git add . && git commit -m "release: vX.Y.Z - Description"
315
+ git push origin main
316
+ # Watch GitHub Actions to confirm success
317
+ ```
318
+
319
+ ---
320
+
321
+ **Questions?** Open an issue with the `ci/cd` label.
package/docs/README.md CHANGED
@@ -36,7 +36,7 @@ Welcome to the comprehensive documentation for the Alteriom fork of painlessMesh
36
36
  - [Basic Examples](tutorials/basic-examples.md) - Simple mesh networking examples
37
37
  - [Custom Packages](tutorials/custom-packages.md) - Creating your own message types
38
38
  - [Sensor Networks](tutorials/sensor-networks.md) - Building IoT sensor networks
39
- - [Bridge Applications](tutorials/bridge-apps.md) - Connecting mesh to external networks
39
+ - [Bridge to Internet](../BRIDGE_TO_INTERNET.md) - Connecting mesh to WiFi/Internet/MQTT
40
40
 
41
41
  ### Alteriom Extensions
42
42
 
@@ -63,6 +63,7 @@ Welcome to the comprehensive documentation for the Alteriom fork of painlessMesh
63
63
  ### Troubleshooting
64
64
 
65
65
  - [Common Issues](troubleshooting/common-issues.md) - Solutions to frequent problems
66
+ - [ESP32-C6 Compatibility](troubleshooting/ESP32_C6_COMPATIBILITY.md) - ESP32-C6 specific issues and solutions
66
67
  - [Debugging Guide](troubleshooting/debugging.md) - Tools and techniques for debugging
67
68
  - [FAQ](troubleshooting/faq.md) - Frequently asked questions
68
69
  - [Network Issues](troubleshooting/network-issues.md) - Connectivity and mesh topology problems