blockmine 1.24.0 → 1.25.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 (346) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/README.en.md +427 -0
  3. package/README.md +40 -0
  4. package/backend/cli.js +1 -1
  5. package/backend/src/ai/plugin-assistant-system-prompt.md +664 -5
  6. package/backend/src/api/routes/bots.js +13 -0
  7. package/backend/src/api/routes/servers.js +14 -2
  8. package/backend/src/core/BotProcess.js +98 -2
  9. package/backend/src/core/PluginLoader.js +83 -3
  10. package/backend/src/core/PluginManager.js +75 -5
  11. package/backend/src/core/services/BotLifecycleService.js +186 -2
  12. package/backend/src/server.js +11 -1
  13. package/frontend/dist/assets/browser-ponyfill-DN7pwmHT.js +2 -0
  14. package/frontend/dist/assets/index-LSy71uwm.js +11261 -0
  15. package/frontend/dist/assets/index-SfhKxI4-.css +32 -0
  16. package/frontend/dist/flags/en.svg +32 -0
  17. package/frontend/dist/flags/ru.svg +5 -0
  18. package/frontend/dist/index.html +2 -2
  19. package/frontend/dist/locales/en/admin.json +100 -0
  20. package/frontend/dist/locales/en/api-keys.json +58 -0
  21. package/frontend/dist/locales/en/bots.json +110 -0
  22. package/frontend/dist/locales/en/common.json +47 -0
  23. package/frontend/dist/locales/en/configuration.json +22 -0
  24. package/frontend/dist/locales/en/console.json +10 -0
  25. package/frontend/dist/locales/en/dashboard.json +85 -0
  26. package/frontend/dist/locales/en/dialogs.json +70 -0
  27. package/frontend/dist/locales/en/event-graphs.json +50 -0
  28. package/frontend/dist/locales/en/graph-store.json +70 -0
  29. package/frontend/dist/locales/en/login.json +34 -0
  30. package/frontend/dist/locales/en/management.json +114 -0
  31. package/frontend/dist/locales/en/minecraft-viewer.json +27 -0
  32. package/frontend/dist/locales/en/nodes.json +1077 -0
  33. package/frontend/dist/locales/en/permissions.json +50 -0
  34. package/frontend/dist/locales/en/plugin-detail.json +49 -0
  35. package/frontend/dist/locales/en/plugins.json +110 -0
  36. package/frontend/dist/locales/en/proxies.json +81 -0
  37. package/frontend/dist/locales/en/servers.json +39 -0
  38. package/frontend/dist/locales/en/setup.json +17 -0
  39. package/frontend/dist/locales/en/sidebar.json +27 -0
  40. package/frontend/dist/locales/en/tasks.json +62 -0
  41. package/frontend/dist/locales/en/visual-editor.json +219 -0
  42. package/frontend/dist/locales/en/websocket.json +86 -0
  43. package/frontend/dist/locales/ru/admin.json +100 -0
  44. package/frontend/dist/locales/ru/api-keys.json +58 -0
  45. package/frontend/dist/locales/ru/bots.json +110 -0
  46. package/frontend/dist/locales/ru/common.json +49 -0
  47. package/frontend/dist/locales/ru/configuration.json +22 -0
  48. package/frontend/dist/locales/ru/console.json +10 -0
  49. package/frontend/dist/locales/ru/dashboard.json +85 -0
  50. package/frontend/dist/locales/ru/dialogs.json +70 -0
  51. package/frontend/dist/locales/ru/event-graphs.json +50 -0
  52. package/frontend/dist/locales/ru/graph-store.json +70 -0
  53. package/frontend/dist/locales/ru/login.json +34 -0
  54. package/frontend/dist/locales/ru/management.json +114 -0
  55. package/frontend/dist/locales/ru/minecraft-viewer.json +27 -0
  56. package/frontend/dist/locales/ru/nodes.json +1077 -0
  57. package/frontend/dist/locales/ru/permissions.json +50 -0
  58. package/frontend/dist/locales/ru/plugin-detail.json +49 -0
  59. package/frontend/dist/locales/ru/plugins.json +110 -0
  60. package/frontend/dist/locales/ru/proxies.json +81 -0
  61. package/frontend/dist/locales/ru/servers.json +39 -0
  62. package/frontend/dist/locales/ru/setup.json +17 -0
  63. package/frontend/dist/locales/ru/sidebar.json +27 -0
  64. package/frontend/dist/locales/ru/tasks.json +62 -0
  65. package/frontend/dist/locales/ru/visual-editor.json +221 -0
  66. package/frontend/dist/locales/ru/websocket.json +86 -0
  67. package/frontend/dist/monacoeditorwork/css.worker.bundle.js +7 -7
  68. package/frontend/dist/monacoeditorwork/html.worker.bundle.js +7 -7
  69. package/frontend/dist/monacoeditorwork/json.worker.bundle.js +7 -7
  70. package/frontend/dist/monacoeditorwork/ts.worker.bundle.js +3 -3
  71. package/frontend/package.json +4 -0
  72. package/package.json +1 -1
  73. package/screen/3dviewer.png +0 -0
  74. package/screen/console.png +0 -0
  75. package/screen/dashboard.png +0 -0
  76. package/screen/graph_collabe.png +0 -0
  77. package/screen/graph_live_debug.png +0 -0
  78. package/screen/language_selector.png +0 -0
  79. package/screen/management_command.png +0 -0
  80. package/screen/node_debug_trace.png +0 -0
  81. package/screen/plugin_/320/276/320/261/320/267/320/276/321/200.png +0 -0
  82. package/screen/websocket.png +0 -0
  83. package/screen//320/275/320/260/321/201/321/202/321/200/320/276/320/271/320/272/320/270_/320/276/321/202/320/264/320/265/320/273/321/214/320/275/321/213/321/205_/320/272/320/276/320/274/320/260/320/275/320/264_/320/272/320/260/320/266/320/264/321/203_/320/272/320/276/320/274/320/260/320/275/320/273/320/264/321/203_/320/274/320/276/320/266/320/275/320/276_/320/275/320/260/321/201/321/202/321/200/320/260/320/270/320/262/320/260/321/202/321/214.png +0 -0
  84. package/screen//320/277/320/273/320/260/320/275/320/270/321/200/320/276/320/262/321/211/320/270/320/272_/320/274/320/276/320/266/320/275/320/276_/320/267/320/260/320/264/320/260/320/262/320/260/321/202/321/214_/320/264/320/265/320/271/321/201/321/202/320/262/320/270/321/217_/320/277/320/276_/320/262/321/200/320/265/320/274/320/265/320/275/320/270.png +0 -0
  85. package/.claude/agents/README.md +0 -469
  86. package/.claude/agents/auth-route-debugger.md +0 -118
  87. package/.claude/agents/auth-route-tester.md +0 -93
  88. package/.claude/agents/auto-error-resolver.md +0 -97
  89. package/.claude/agents/build-optimizer.md +0 -236
  90. package/.claude/agents/code-architect.md +0 -34
  91. package/.claude/agents/code-architecture-reviewer.md +0 -83
  92. package/.claude/agents/code-explorer.md +0 -51
  93. package/.claude/agents/code-refactor-master.md +0 -94
  94. package/.claude/agents/code-reviewer.md +0 -46
  95. package/.claude/agents/cost-optimizer.md +0 -134
  96. package/.claude/agents/deployment-orchestrator.md +0 -113
  97. package/.claude/agents/documentation-architect.md +0 -82
  98. package/.claude/agents/frontend-error-fixer.md +0 -77
  99. package/.claude/agents/iac-code-generator.md +0 -71
  100. package/.claude/agents/incident-responder.md +0 -346
  101. package/.claude/agents/infrastructure-architect.md +0 -31
  102. package/.claude/agents/kubernetes-specialist.md +0 -56
  103. package/.claude/agents/migration-planner.md +0 -181
  104. package/.claude/agents/network-architect.md +0 -196
  105. package/.claude/agents/plan-reviewer.md +0 -52
  106. package/.claude/agents/refactor-planner.md +0 -63
  107. package/.claude/agents/security-scanner.md +0 -102
  108. package/.claude/agents/web-research-specialist.md +0 -78
  109. package/.claude/commands/cost-analysis.md +0 -315
  110. package/.claude/commands/dev-docs-update.md +0 -55
  111. package/.claude/commands/dev-docs.md +0 -51
  112. package/.claude/commands/feature-dev.md +0 -125
  113. package/.claude/commands/incident-debug.md +0 -247
  114. package/.claude/commands/infra-plan.md +0 -81
  115. package/.claude/commands/migration-plan.md +0 -478
  116. package/.claude/commands/route-research-for-testing.md +0 -37
  117. package/.claude/commands/security-review.md +0 -66
  118. package/.claude/hooks/CONFIG.md +0 -448
  119. package/.claude/hooks/README.md +0 -163
  120. package/.claude/hooks/SKILL_ACTIVATION_COMPLETE.md +0 -226
  121. package/.claude/hooks/WINDOWS_HOOKS_README.md +0 -151
  122. package/.claude/hooks/add-skill-activation-banners.ts +0 -132
  123. package/.claude/hooks/comprehensive-skill-test.ts +0 -1315
  124. package/.claude/hooks/error-handling-reminder.sh +0 -12
  125. package/.claude/hooks/error-handling-reminder.ts +0 -222
  126. package/.claude/hooks/k8s-manifest-validator.sh +0 -56
  127. package/.claude/hooks/package-lock.json +0 -556
  128. package/.claude/hooks/package.json +0 -16
  129. package/.claude/hooks/post-tool-use-tracker.ps1 +0 -174
  130. package/.claude/hooks/post-tool-use-tracker.sh +0 -183
  131. package/.claude/hooks/security-policy-check.sh +0 -247
  132. package/.claude/hooks/skill-activation-prompt.ps1 +0 -10
  133. package/.claude/hooks/skill-activation-prompt.sh +0 -10
  134. package/.claude/hooks/skill-activation-prompt.ts +0 -141
  135. package/.claude/hooks/stop-build-check-enhanced.sh +0 -130
  136. package/.claude/hooks/terraform-validator.sh +0 -53
  137. package/.claude/hooks/test-input.json +0 -7
  138. package/.claude/hooks/test-skill-activation.ts +0 -427
  139. package/.claude/hooks/trigger-build-resolver.sh +0 -79
  140. package/.claude/hooks/tsc-check.sh +0 -173
  141. package/.claude/hooks/tsconfig.json +0 -19
  142. package/.claude/settings.json +0 -59
  143. package/.claude/settings.local.json +0 -67
  144. package/.claude/skills/README.md +0 -507
  145. package/.claude/skills/api-engineering/SKILL.md +0 -63
  146. package/.claude/skills/api-engineering/resources/api-versioning.md +0 -88
  147. package/.claude/skills/api-engineering/resources/graphql-patterns.md +0 -106
  148. package/.claude/skills/api-engineering/resources/rate-limiting.md +0 -118
  149. package/.claude/skills/api-engineering/resources/rest-api-design.md +0 -105
  150. package/.claude/skills/backend-dev-guidelines/SKILL.md +0 -306
  151. package/.claude/skills/backend-dev-guidelines/resources/architecture-overview.md +0 -451
  152. package/.claude/skills/backend-dev-guidelines/resources/async-and-errors.md +0 -307
  153. package/.claude/skills/backend-dev-guidelines/resources/complete-examples.md +0 -638
  154. package/.claude/skills/backend-dev-guidelines/resources/configuration.md +0 -275
  155. package/.claude/skills/backend-dev-guidelines/resources/database-patterns.md +0 -224
  156. package/.claude/skills/backend-dev-guidelines/resources/middleware-guide.md +0 -213
  157. package/.claude/skills/backend-dev-guidelines/resources/routing-and-controllers.md +0 -756
  158. package/.claude/skills/backend-dev-guidelines/resources/sentry-and-monitoring.md +0 -336
  159. package/.claude/skills/backend-dev-guidelines/resources/services-and-repositories.md +0 -789
  160. package/.claude/skills/backend-dev-guidelines/resources/testing-guide.md +0 -235
  161. package/.claude/skills/backend-dev-guidelines/resources/validation-patterns.md +0 -754
  162. package/.claude/skills/budget-and-cost-management/SKILL.md +0 -850
  163. package/.claude/skills/build-engineering/SKILL.md +0 -431
  164. package/.claude/skills/build-engineering/resources/artifact-repositories.md +0 -72
  165. package/.claude/skills/build-engineering/resources/build-caching.md +0 -96
  166. package/.claude/skills/build-engineering/resources/build-pipelines.md +0 -105
  167. package/.claude/skills/build-engineering/resources/build-security.md +0 -95
  168. package/.claude/skills/build-engineering/resources/build-systems.md +0 -389
  169. package/.claude/skills/build-engineering/resources/compilation-optimization.md +0 -201
  170. package/.claude/skills/build-engineering/resources/dependency-management.md +0 -73
  171. package/.claude/skills/build-engineering/resources/monorepo-builds.md +0 -110
  172. package/.claude/skills/build-engineering/resources/performance-optimization.md +0 -113
  173. package/.claude/skills/build-engineering/resources/reproducible-builds.md +0 -82
  174. package/.claude/skills/cloud-engineering/SKILL.md +0 -675
  175. package/.claude/skills/cloud-engineering/resources/aws-patterns.md +0 -742
  176. package/.claude/skills/cloud-engineering/resources/azure-patterns.md +0 -714
  177. package/.claude/skills/cloud-engineering/resources/cleared-cloud-environments.md +0 -987
  178. package/.claude/skills/cloud-engineering/resources/cloud-cost-optimization.md +0 -757
  179. package/.claude/skills/cloud-engineering/resources/cloud-networking.md +0 -1058
  180. package/.claude/skills/cloud-engineering/resources/cloud-security-tools.md +0 -1530
  181. package/.claude/skills/cloud-engineering/resources/cloud-security.md +0 -990
  182. package/.claude/skills/cloud-engineering/resources/gcp-patterns.md +0 -758
  183. package/.claude/skills/cloud-engineering/resources/migration-strategies.md +0 -820
  184. package/.claude/skills/cloud-engineering/resources/multi-cloud-strategies.md +0 -670
  185. package/.claude/skills/cloud-engineering/resources/oci-patterns.md +0 -1198
  186. package/.claude/skills/cloud-engineering/resources/serverless-patterns.md +0 -795
  187. package/.claude/skills/cloud-engineering/resources/well-architected-frameworks.md +0 -966
  188. package/.claude/skills/cybersecurity/SKILL.md +0 -409
  189. package/.claude/skills/cybersecurity/resources/security-architecture.md +0 -266
  190. package/.claude/skills/database-engineering/SKILL.md +0 -61
  191. package/.claude/skills/database-engineering/resources/backup-and-recovery.md +0 -72
  192. package/.claude/skills/database-engineering/resources/database-replication.md +0 -63
  193. package/.claude/skills/database-engineering/resources/postgresql-fundamentals.md +0 -70
  194. package/.claude/skills/database-engineering/resources/query-optimization.md +0 -68
  195. package/.claude/skills/devsecops/SKILL.md +0 -374
  196. package/.claude/skills/devsecops/resources/ci-cd-security.md +0 -204
  197. package/.claude/skills/devsecops/resources/compliance-automation.md +0 -530
  198. package/.claude/skills/devsecops/resources/compliance-frameworks.md +0 -2322
  199. package/.claude/skills/devsecops/resources/container-security.md +0 -915
  200. package/.claude/skills/devsecops/resources/cspm-integration.md +0 -1440
  201. package/.claude/skills/devsecops/resources/policy-enforcement.md +0 -619
  202. package/.claude/skills/devsecops/resources/secrets-management.md +0 -755
  203. package/.claude/skills/devsecops/resources/security-monitoring.md +0 -146
  204. package/.claude/skills/devsecops/resources/security-scanning.md +0 -887
  205. package/.claude/skills/devsecops/resources/security-testing.md +0 -203
  206. package/.claude/skills/devsecops/resources/supply-chain-security.md +0 -518
  207. package/.claude/skills/devsecops/resources/vulnerability-management.md +0 -481
  208. package/.claude/skills/devsecops/resources/zero-trust-architecture.md +0 -177
  209. package/.claude/skills/documentation-as-code/SKILL.md +0 -323
  210. package/.claude/skills/documentation-as-code/resources/api-documentation.md +0 -90
  211. package/.claude/skills/documentation-as-code/resources/changelog-management.md +0 -79
  212. package/.claude/skills/documentation-as-code/resources/diagram-generation.md +0 -44
  213. package/.claude/skills/documentation-as-code/resources/docs-as-code-workflow.md +0 -99
  214. package/.claude/skills/documentation-as-code/resources/documentation-automation.md +0 -68
  215. package/.claude/skills/documentation-as-code/resources/documentation-sites.md +0 -79
  216. package/.claude/skills/documentation-as-code/resources/markdown-best-practices.md +0 -162
  217. package/.claude/skills/documentation-as-code/resources/openapi-specification.md +0 -77
  218. package/.claude/skills/documentation-as-code/resources/readme-engineering.md +0 -60
  219. package/.claude/skills/documentation-as-code/resources/technical-writing-guide.md +0 -202
  220. package/.claude/skills/engineering-management/SKILL.md +0 -356
  221. package/.claude/skills/engineering-management/resources/career-ladders.md +0 -609
  222. package/.claude/skills/engineering-management/resources/hiring-and-assessment.md +0 -555
  223. package/.claude/skills/engineering-management/resources/one-on-one-guides.md +0 -609
  224. package/.claude/skills/engineering-management/resources/resource-planning.md +0 -557
  225. package/.claude/skills/engineering-management/resources/team-organization-patterns.md +0 -491
  226. package/.claude/skills/engineering-management/resources/technical-interviews.md +0 -474
  227. package/.claude/skills/engineering-operations-management/SKILL.md +0 -817
  228. package/.claude/skills/error-tracking/SKILL.md +0 -379
  229. package/.claude/skills/frontend-design/SKILL.md +0 -42
  230. package/.claude/skills/frontend-dev-guidelines/SKILL.md +0 -403
  231. package/.claude/skills/frontend-dev-guidelines/resources/common-patterns.md +0 -331
  232. package/.claude/skills/frontend-dev-guidelines/resources/complete-examples.md +0 -872
  233. package/.claude/skills/frontend-dev-guidelines/resources/component-patterns.md +0 -502
  234. package/.claude/skills/frontend-dev-guidelines/resources/data-fetching.md +0 -767
  235. package/.claude/skills/frontend-dev-guidelines/resources/file-organization.md +0 -502
  236. package/.claude/skills/frontend-dev-guidelines/resources/loading-and-error-states.md +0 -501
  237. package/.claude/skills/frontend-dev-guidelines/resources/performance.md +0 -406
  238. package/.claude/skills/frontend-dev-guidelines/resources/routing-guide.md +0 -364
  239. package/.claude/skills/frontend-dev-guidelines/resources/styling-guide.md +0 -428
  240. package/.claude/skills/frontend-dev-guidelines/resources/typescript-standards.md +0 -418
  241. package/.claude/skills/general-it-engineering/SKILL.md +0 -393
  242. package/.claude/skills/general-it-engineering/resources/asset-management.md +0 -712
  243. package/.claude/skills/general-it-engineering/resources/automation-orchestration.md +0 -817
  244. package/.claude/skills/general-it-engineering/resources/business-continuity.md +0 -786
  245. package/.claude/skills/general-it-engineering/resources/change-management.md +0 -715
  246. package/.claude/skills/general-it-engineering/resources/enterprise-monitoring.md +0 -729
  247. package/.claude/skills/general-it-engineering/resources/help-desk-operations.md +0 -738
  248. package/.claude/skills/general-it-engineering/resources/incident-service-management.md +0 -834
  249. package/.claude/skills/general-it-engineering/resources/it-governance.md +0 -753
  250. package/.claude/skills/general-it-engineering/resources/itil-framework.md +0 -503
  251. package/.claude/skills/general-it-engineering/resources/service-management.md +0 -669
  252. package/.claude/skills/infrastructure-architecture/SKILL.md +0 -328
  253. package/.claude/skills/infrastructure-architecture/resources/architecture-decision-records.md +0 -505
  254. package/.claude/skills/infrastructure-architecture/resources/architecture-patterns.md +0 -528
  255. package/.claude/skills/infrastructure-architecture/resources/capacity-planning.md +0 -453
  256. package/.claude/skills/infrastructure-architecture/resources/cleared-environment-architecture.md +0 -773
  257. package/.claude/skills/infrastructure-architecture/resources/cost-architecture.md +0 -499
  258. package/.claude/skills/infrastructure-architecture/resources/data-architecture.md +0 -501
  259. package/.claude/skills/infrastructure-architecture/resources/disaster-recovery.md +0 -535
  260. package/.claude/skills/infrastructure-architecture/resources/migration-architecture.md +0 -512
  261. package/.claude/skills/infrastructure-architecture/resources/multi-region-design.md +0 -608
  262. package/.claude/skills/infrastructure-architecture/resources/reference-architectures.md +0 -562
  263. package/.claude/skills/infrastructure-architecture/resources/security-architecture.md +0 -538
  264. package/.claude/skills/infrastructure-architecture/resources/system-design-principles.md +0 -489
  265. package/.claude/skills/infrastructure-architecture/resources/workload-classification.md +0 -1000
  266. package/.claude/skills/infrastructure-strategy/SKILL.md +0 -924
  267. package/.claude/skills/network-engineering/SKILL.md +0 -385
  268. package/.claude/skills/network-engineering/resources/dns-management.md +0 -738
  269. package/.claude/skills/network-engineering/resources/load-balancing.md +0 -820
  270. package/.claude/skills/network-engineering/resources/network-architecture.md +0 -546
  271. package/.claude/skills/network-engineering/resources/network-security.md +0 -921
  272. package/.claude/skills/network-engineering/resources/network-troubleshooting.md +0 -749
  273. package/.claude/skills/network-engineering/resources/routing-switching.md +0 -373
  274. package/.claude/skills/network-engineering/resources/sdn-networking.md +0 -695
  275. package/.claude/skills/network-engineering/resources/service-mesh-networking.md +0 -777
  276. package/.claude/skills/network-engineering/resources/tcp-ip-protocols.md +0 -444
  277. package/.claude/skills/network-engineering/resources/vpn-connectivity.md +0 -672
  278. package/.claude/skills/node-development/SKILL.md +0 -317
  279. package/.claude/skills/observability-engineering/SKILL.md +0 -101
  280. package/.claude/skills/observability-engineering/resources/apm-tools.md +0 -97
  281. package/.claude/skills/observability-engineering/resources/correlation-strategies.md +0 -87
  282. package/.claude/skills/observability-engineering/resources/distributed-tracing.md +0 -98
  283. package/.claude/skills/observability-engineering/resources/logs-aggregation.md +0 -118
  284. package/.claude/skills/observability-engineering/resources/observability-cost-optimization.md +0 -141
  285. package/.claude/skills/observability-engineering/resources/opentelemetry.md +0 -110
  286. package/.claude/skills/platform-engineering/SKILL.md +0 -555
  287. package/.claude/skills/platform-engineering/resources/architecture-overview.md +0 -600
  288. package/.claude/skills/platform-engineering/resources/container-orchestration.md +0 -916
  289. package/.claude/skills/platform-engineering/resources/cost-optimization.md +0 -634
  290. package/.claude/skills/platform-engineering/resources/developer-platforms.md +0 -670
  291. package/.claude/skills/platform-engineering/resources/gitops-automation.md +0 -650
  292. package/.claude/skills/platform-engineering/resources/infrastructure-as-code.md +0 -778
  293. package/.claude/skills/platform-engineering/resources/infrastructure-standards.md +0 -708
  294. package/.claude/skills/platform-engineering/resources/multi-tenancy.md +0 -602
  295. package/.claude/skills/platform-engineering/resources/platform-security.md +0 -711
  296. package/.claude/skills/platform-engineering/resources/resource-management.md +0 -592
  297. package/.claude/skills/platform-engineering/resources/service-mesh.md +0 -628
  298. package/.claude/skills/release-engineering/SKILL.md +0 -393
  299. package/.claude/skills/release-engineering/resources/artifact-management.md +0 -108
  300. package/.claude/skills/release-engineering/resources/build-optimization.md +0 -84
  301. package/.claude/skills/release-engineering/resources/ci-cd-pipelines.md +0 -411
  302. package/.claude/skills/release-engineering/resources/deployment-strategies.md +0 -197
  303. package/.claude/skills/release-engineering/resources/pipeline-security.md +0 -62
  304. package/.claude/skills/release-engineering/resources/progressive-delivery.md +0 -83
  305. package/.claude/skills/release-engineering/resources/release-automation.md +0 -68
  306. package/.claude/skills/release-engineering/resources/release-orchestration.md +0 -77
  307. package/.claude/skills/release-engineering/resources/rollback-strategies.md +0 -66
  308. package/.claude/skills/release-engineering/resources/versioning-strategies.md +0 -59
  309. package/.claude/skills/route-tester/SKILL.md +0 -392
  310. package/.claude/skills/skill-developer/ADVANCED.md +0 -197
  311. package/.claude/skills/skill-developer/HOOK_MECHANISMS.md +0 -306
  312. package/.claude/skills/skill-developer/PATTERNS_LIBRARY.md +0 -152
  313. package/.claude/skills/skill-developer/SKILL.md +0 -430
  314. package/.claude/skills/skill-developer/SKILL_RULES_REFERENCE.md +0 -315
  315. package/.claude/skills/skill-developer/TRIGGER_TYPES.md +0 -305
  316. package/.claude/skills/skill-developer/TROUBLESHOOTING.md +0 -514
  317. package/.claude/skills/skill-rules.json +0 -2989
  318. package/.claude/skills/sre/SKILL.md +0 -464
  319. package/.claude/skills/sre/resources/alerting-best-practices.md +0 -282
  320. package/.claude/skills/sre/resources/capacity-planning.md +0 -226
  321. package/.claude/skills/sre/resources/chaos-engineering.md +0 -193
  322. package/.claude/skills/sre/resources/disaster-recovery.md +0 -232
  323. package/.claude/skills/sre/resources/incident-management.md +0 -436
  324. package/.claude/skills/sre/resources/observability-stack.md +0 -240
  325. package/.claude/skills/sre/resources/on-call-runbooks.md +0 -167
  326. package/.claude/skills/sre/resources/performance-optimization.md +0 -108
  327. package/.claude/skills/sre/resources/reliability-patterns.md +0 -183
  328. package/.claude/skills/sre/resources/slo-sli-sla.md +0 -464
  329. package/.claude/skills/sre/resources/toil-reduction.md +0 -145
  330. package/.claude/skills/systems-engineering/SKILL.md +0 -648
  331. package/.claude/skills/systems-engineering/resources/automation-patterns.md +0 -771
  332. package/.claude/skills/systems-engineering/resources/configuration-management.md +0 -998
  333. package/.claude/skills/systems-engineering/resources/linux-administration.md +0 -672
  334. package/.claude/skills/systems-engineering/resources/networking-fundamentals.md +0 -982
  335. package/.claude/skills/systems-engineering/resources/performance-tuning.md +0 -871
  336. package/.claude/skills/systems-engineering/resources/powershell-scripting.md +0 -482
  337. package/.claude/skills/systems-engineering/resources/security-hardening.md +0 -739
  338. package/.claude/skills/systems-engineering/resources/shell-scripting.md +0 -915
  339. package/.claude/skills/systems-engineering/resources/storage-management.md +0 -628
  340. package/.claude/skills/systems-engineering/resources/system-monitoring.md +0 -787
  341. package/.claude/skills/systems-engineering/resources/troubleshooting-guide.md +0 -753
  342. package/.claude/skills/systems-engineering/resources/windows-administration.md +0 -738
  343. package/.claude/skills/technical-leadership/SKILL.md +0 -728
  344. package/backend/docs/SECRETS_DOCUMENTATION.md +0 -327
  345. package/frontend/dist/assets/index-BC-NbKXi.css +0 -32
  346. package/frontend/dist/assets/index-DqJXZMHY.js +0 -11266
@@ -1,915 +0,0 @@
1
- # Shell Scripting
2
-
3
- Comprehensive guide to Bash scripting covering patterns, error handling, functions, input validation, common pitfalls, testing, and best practices for production-ready scripts.
4
-
5
- ## Table of Contents
6
-
7
- - [Script Structure](#script-structure)
8
- - [Error Handling](#error-handling)
9
- - [Functions and Modularity](#functions-and-modularity)
10
- - [Input Validation](#input-validation)
11
- - [Common Pitfalls](#common-pitfalls)
12
- - [Testing Shell Scripts](#testing-shell-scripts)
13
- - [Best Practices](#best-practices)
14
- - [Complete Examples](#complete-examples)
15
-
16
- ## Script Structure
17
-
18
- ### Basic Template
19
-
20
- ```bash
21
- #!/usr/bin/env bash
22
- #
23
- # Script: backup.sh
24
- # Description: Automated backup script with error handling
25
- # Author: DevOps Team
26
- # Date: 2025-01-01
27
- #
28
-
29
- set -euo pipefail # Exit on error, undefined vars, pipe failures
30
- IFS=$'\n\t' # Set Internal Field Separator
31
-
32
- # Constants
33
- readonly SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
34
- readonly SCRIPT_NAME="$(basename "$0")"
35
- readonly BACKUP_DIR="/backup"
36
- readonly LOG_FILE="/var/log/${SCRIPT_NAME%.sh}.log"
37
-
38
- # Variables
39
- VERBOSE=false
40
- DRY_RUN=false
41
-
42
- # Cleanup function
43
- cleanup() {
44
- local exit_code=$?
45
- # Cleanup temporary files
46
- rm -f /tmp/backup-$$-*
47
- exit "$exit_code"
48
- }
49
-
50
- # Set trap for cleanup
51
- trap cleanup EXIT INT TERM
52
-
53
- # Main function
54
- main() {
55
- log "INFO" "Starting backup process"
56
-
57
- # Script logic here
58
-
59
- log "INFO" "Backup completed successfully"
60
- }
61
-
62
- # Run main function
63
- main "$@"
64
- ```
65
-
66
- ### Shebang Best Practices
67
-
68
- ```bash
69
- # BEST - Portable, uses env to find bash
70
- #!/usr/bin/env bash
71
-
72
- # ACCEPTABLE - Direct path (less portable)
73
- #!/bin/bash
74
-
75
- # AVOID - Assumes bash is in specific location
76
- #!/usr/local/bin/bash
77
-
78
- # FOR sh compatibility (POSIX)
79
- #!/bin/sh
80
- ```
81
-
82
- ## Error Handling
83
-
84
- ### set Options
85
-
86
- ```bash
87
- # Exit on any error
88
- set -e
89
-
90
- # Exit on undefined variable
91
- set -u
92
-
93
- # Exit on pipe failure (not just last command)
94
- set -o pipefail
95
-
96
- # Combined (recommended for production scripts)
97
- set -euo pipefail
98
-
99
- # Debug mode (print each command)
100
- set -x
101
-
102
- # Alternative: enable only for debugging
103
- DEBUG=${DEBUG:-false}
104
- if [ "$DEBUG" = "true" ]; then
105
- set -x
106
- fi
107
- ```
108
-
109
- ### Error Handling Patterns
110
-
111
- ```bash
112
- # Pattern 1: Check command success
113
- if ! command -v docker &> /dev/null; then
114
- echo "Error: docker not found" >&2
115
- exit 1
116
- fi
117
-
118
- # Pattern 2: Or operator
119
- mkdir -p /backup || {
120
- echo "Error: Failed to create backup directory" >&2
121
- exit 1
122
- }
123
-
124
- # Pattern 3: Explicit error checking
125
- cp source.txt dest.txt
126
- if [ $? -ne 0 ]; then
127
- echo "Error: Copy failed" >&2
128
- exit 1
129
- fi
130
-
131
- # Pattern 4: Command substitution with error check
132
- output=$(command 2>&1) || {
133
- echo "Error: Command failed with output: $output" >&2
134
- exit 1
135
- }
136
- ```
137
-
138
- ### trap for Cleanup
139
-
140
- ```bash
141
- #!/bin/bash
142
-
143
- # Cleanup function
144
- cleanup() {
145
- local exit_code=$?
146
- echo "Cleaning up..."
147
-
148
- # Remove temporary files
149
- rm -f "$TEMP_FILE"
150
-
151
- # Unmount if mounted
152
- if mountpoint -q "$MOUNT_POINT"; then
153
- umount "$MOUNT_POINT"
154
- fi
155
-
156
- # Kill background processes
157
- if [ -n "${PID:-}" ]; then
158
- kill "$PID" 2>/dev/null || true
159
- fi
160
-
161
- exit "$exit_code"
162
- }
163
-
164
- # Trap on EXIT, INT, TERM
165
- trap cleanup EXIT INT TERM
166
-
167
- # Create temp file
168
- TEMP_FILE=$(mktemp)
169
-
170
- # Rest of script...
171
- ```
172
-
173
- ### Logging Functions
174
-
175
- ```bash
176
- # Color codes
177
- readonly RED='\033[0;31m'
178
- readonly YELLOW='\033[1;33m'
179
- readonly GREEN='\033[0;32m'
180
- readonly NC='\033[0m' # No Color
181
-
182
- # Logging function
183
- log() {
184
- local level=$1
185
- shift
186
- local message="$@"
187
- local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
188
-
189
- case "$level" in
190
- ERROR)
191
- echo -e "${RED}[$timestamp] ERROR: $message${NC}" >&2
192
- echo "[$timestamp] ERROR: $message" >> "$LOG_FILE"
193
- ;;
194
- WARN)
195
- echo -e "${YELLOW}[$timestamp] WARN: $message${NC}" >&2
196
- echo "[$timestamp] WARN: $message" >> "$LOG_FILE"
197
- ;;
198
- INFO)
199
- echo "[$timestamp] INFO: $message"
200
- echo "[$timestamp] INFO: $message" >> "$LOG_FILE"
201
- ;;
202
- DEBUG)
203
- if [ "$VERBOSE" = true ]; then
204
- echo "[$timestamp] DEBUG: $message"
205
- fi
206
- echo "[$timestamp] DEBUG: $message" >> "$LOG_FILE"
207
- ;;
208
- esac
209
- }
210
-
211
- # Die function (log error and exit)
212
- die() {
213
- log "ERROR" "$@"
214
- exit 1
215
- }
216
-
217
- # Usage
218
- log "INFO" "Starting process"
219
- log "WARN" "Disk space is low"
220
- log "ERROR" "Failed to connect to database"
221
- die "Critical error occurred"
222
- ```
223
-
224
- ## Functions and Modularity
225
-
226
- ### Function Basics
227
-
228
- ```bash
229
- # Function definition
230
- function_name() {
231
- local arg1=$1
232
- local arg2=${2:-"default"} # Default value
233
-
234
- # Function logic
235
- echo "Processing $arg1 and $arg2"
236
-
237
- return 0 # Return status (0-255)
238
- }
239
-
240
- # Calling function
241
- function_name "value1" "value2"
242
-
243
- # Capture output
244
- result=$(function_name "value1")
245
-
246
- # Check return status
247
- if function_name "value1"; then
248
- echo "Success"
249
- else
250
- echo "Failed"
251
- fi
252
- ```
253
-
254
- ### Advanced Function Patterns
255
-
256
- ```bash
257
- # Function with named parameters (associative array)
258
- process_data() {
259
- local -A params=(
260
- [input]=""
261
- [output]=""
262
- [format]="json"
263
- )
264
-
265
- # Parse parameters
266
- while [[ $# -gt 0 ]]; do
267
- case $1 in
268
- --input)
269
- params[input]="$2"
270
- shift 2
271
- ;;
272
- --output)
273
- params[output]="$2"
274
- shift 2
275
- ;;
276
- --format)
277
- params[format]="$2"
278
- shift 2
279
- ;;
280
- *)
281
- echo "Unknown parameter: $1" >&2
282
- return 1
283
- ;;
284
- esac
285
- done
286
-
287
- # Validate required parameters
288
- if [ -z "${params[input]}" ]; then
289
- echo "Error: --input is required" >&2
290
- return 1
291
- fi
292
-
293
- echo "Processing ${params[input]} in ${params[format]} format"
294
- }
295
-
296
- # Usage
297
- process_data --input "data.csv" --output "result.json" --format "json"
298
- ```
299
-
300
- ### Library Pattern
301
-
302
- ```bash
303
- # lib/common.sh - Shared functions
304
- #!/bin/bash
305
-
306
- # Prevent multiple sourcing
307
- [[ -n "${_COMMON_LIB_LOADED:-}" ]] && return
308
- readonly _COMMON_LIB_LOADED=1
309
-
310
- # Shared functions
311
- is_root() {
312
- [ "$(id -u)" -eq 0 ]
313
- }
314
-
315
- check_command() {
316
- command -v "$1" &> /dev/null
317
- }
318
-
319
- # Export functions (for older bash)
320
- export -f is_root
321
- export -f check_command
322
- ```
323
-
324
- ```bash
325
- # main-script.sh - Use library
326
- #!/bin/bash
327
-
328
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
329
- source "$SCRIPT_DIR/lib/common.sh"
330
-
331
- if ! is_root; then
332
- echo "This script must be run as root" >&2
333
- exit 1
334
- fi
335
-
336
- if ! check_command "docker"; then
337
- echo "Docker is not installed" >&2
338
- exit 1
339
- fi
340
- ```
341
-
342
- ## Input Validation
343
-
344
- ### Argument Parsing with getopts
345
-
346
- ```bash
347
- #!/bin/bash
348
-
349
- usage() {
350
- cat <<EOF
351
- Usage: $0 [OPTIONS]
352
-
353
- Options:
354
- -h, --help Show this help message
355
- -v, --verbose Enable verbose mode
356
- -f, --file FILE Input file (required)
357
- -o, --output DIR Output directory (default: ./output)
358
- -n, --dry-run Dry run mode
359
- EOF
360
- exit 1
361
- }
362
-
363
- # Default values
364
- VERBOSE=false
365
- DRY_RUN=false
366
- INPUT_FILE=""
367
- OUTPUT_DIR="./output"
368
-
369
- # Parse arguments
370
- while [[ $# -gt 0 ]]; do
371
- case $1 in
372
- -h|--help)
373
- usage
374
- ;;
375
- -v|--verbose)
376
- VERBOSE=true
377
- shift
378
- ;;
379
- -f|--file)
380
- INPUT_FILE="$2"
381
- shift 2
382
- ;;
383
- -o|--output)
384
- OUTPUT_DIR="$2"
385
- shift 2
386
- ;;
387
- -n|--dry-run)
388
- DRY_RUN=true
389
- shift
390
- ;;
391
- -*)
392
- echo "Unknown option: $1" >&2
393
- usage
394
- ;;
395
- *)
396
- echo "Unknown argument: $1" >&2
397
- usage
398
- ;;
399
- esac
400
- done
401
-
402
- # Validate required arguments
403
- if [ -z "$INPUT_FILE" ]; then
404
- echo "Error: --file is required" >&2
405
- usage
406
- fi
407
-
408
- # Validate file exists
409
- if [ ! -f "$INPUT_FILE" ]; then
410
- echo "Error: File not found: $INPUT_FILE" >&2
411
- exit 1
412
- fi
413
- ```
414
-
415
- ### Input Validation Functions
416
-
417
- ```bash
418
- # Validate IP address
419
- is_valid_ip() {
420
- local ip=$1
421
- local regex='^([0-9]{1,3}\.){3}[0-9]{1,3}$'
422
-
423
- if [[ $ip =~ $regex ]]; then
424
- # Check each octet
425
- IFS='.' read -r -a octets <<< "$ip"
426
- for octet in "${octets[@]}"; do
427
- if [ "$octet" -gt 255 ]; then
428
- return 1
429
- fi
430
- done
431
- return 0
432
- fi
433
- return 1
434
- }
435
-
436
- # Validate email
437
- is_valid_email() {
438
- local email=$1
439
- local regex='^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
440
- [[ $email =~ $regex ]]
441
- }
442
-
443
- # Validate number
444
- is_number() {
445
- local value=$1
446
- [[ $value =~ ^[0-9]+$ ]]
447
- }
448
-
449
- # Validate port
450
- is_valid_port() {
451
- local port=$1
452
- is_number "$port" && [ "$port" -ge 1 ] && [ "$port" -le 65535 ]
453
- }
454
-
455
- # Usage
456
- if ! is_valid_ip "$IP_ADDRESS"; then
457
- die "Invalid IP address: $IP_ADDRESS"
458
- fi
459
- ```
460
-
461
- ## Common Pitfalls
462
-
463
- ### Quoting Variables
464
-
465
- ```bash
466
- # BAD - Word splitting and globbing
467
- file="my file.txt"
468
- cat $file # Interprets as two arguments: "my" and "file.txt"
469
-
470
- # GOOD - Quoted
471
- cat "$file"
472
-
473
- # BAD - Globbing can expand
474
- files="*.txt"
475
- rm $files # May delete unintended files
476
-
477
- # GOOD - Quoted to prevent globbing
478
- rm "$files"
479
-
480
- # Array iteration
481
- # BAD
482
- for file in $FILES; do
483
- echo $file
484
- done
485
-
486
- # GOOD
487
- for file in "${FILES[@]}"; do
488
- echo "$file"
489
- done
490
- ```
491
-
492
- ### Word Splitting
493
-
494
- ```bash
495
- # BAD
496
- files=$(ls /tmp)
497
- for file in $files; do
498
- # Breaks on spaces in filenames
499
- echo "$file"
500
- done
501
-
502
- # GOOD - Use arrays
503
- mapfile -t files < <(find /tmp -type f)
504
- for file in "${files[@]}"; do
505
- echo "$file"
506
- done
507
-
508
- # BETTER - Direct loop
509
- find /tmp -type f | while IFS= read -r file; do
510
- echo "$file"
511
- done
512
- ```
513
-
514
- ### Command Substitution
515
-
516
- ```bash
517
- # BAD - Deprecated
518
- output=`command`
519
-
520
- # GOOD - Modern syntax
521
- output=$(command)
522
-
523
- # Nested - Modern syntax is easier to read
524
- result=$(echo "The date is $(date)")
525
- ```
526
-
527
- ### Test Command
528
-
529
- ```bash
530
- # Use [[ ]] instead of [ ]
531
-
532
- # BAD - [ ] (test)
533
- if [ $var = "value" ]; then # Fails if var is empty
534
- echo "Match"
535
- fi
536
-
537
- # GOOD - [[ ]]
538
- if [[ $var = "value" ]]; then
539
- echo "Match"
540
- fi
541
-
542
- # [[ ]] benefits:
543
- # - No word splitting
544
- # - Pattern matching with =
545
- # - Regex matching with =~
546
- # - && and || operators
547
-
548
- # Pattern matching
549
- if [[ $filename = *.txt ]]; then
550
- echo "Text file"
551
- fi
552
-
553
- # Regex
554
- if [[ $email =~ ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ ]]; then
555
- echo "Valid email"
556
- fi
557
- ```
558
-
559
- ### Comparison Operators
560
-
561
- ```bash
562
- # String comparison
563
- [[ $str1 = $str2 ]] # Equal
564
- [[ $str1 != $str2 ]] # Not equal
565
- [[ -z $str ]] # Empty string
566
- [[ -n $str ]] # Not empty
567
-
568
- # Numeric comparison
569
- [[ $num1 -eq $num2 ]] # Equal
570
- [[ $num1 -ne $num2 ]] # Not equal
571
- [[ $num1 -lt $num2 ]] # Less than
572
- [[ $num1 -le $num2 ]] # Less than or equal
573
- [[ $num1 -gt $num2 ]] # Greater than
574
- [[ $num1 -ge $num2 ]] # Greater than or equal
575
-
576
- # File tests
577
- [[ -f $file ]] # File exists
578
- [[ -d $dir ]] # Directory exists
579
- [[ -e $path ]] # Path exists
580
- [[ -r $file ]] # Readable
581
- [[ -w $file ]] # Writable
582
- [[ -x $file ]] # Executable
583
- ```
584
-
585
- ## Testing Shell Scripts
586
-
587
- ### shellcheck
588
-
589
- ```bash
590
- # Install shellcheck
591
- sudo apt install shellcheck
592
-
593
- # Check script
594
- shellcheck myscript.sh
595
-
596
- # Ignore specific warnings
597
- # shellcheck disable=SC2086
598
- echo $var
599
-
600
- # Multiple warnings
601
- # shellcheck disable=SC2086,SC2181
602
- ```
603
-
604
- ### BATS (Bash Automated Testing System)
605
-
606
- ```bash
607
- # Install bats
608
- git clone https://github.com/bats-core/bats-core.git
609
- cd bats-core
610
- sudo ./install.sh /usr/local
611
- ```
612
-
613
- **Test File:**
614
- ```bash
615
- # test/backup.bats
616
- #!/usr/bin/env bats
617
-
618
- # Setup runs before each test
619
- setup() {
620
- load 'test_helper/bats-support/load'
621
- load 'test_helper/bats-assert/load'
622
-
623
- # Create test directory
624
- TEST_DIR=$(mktemp -d)
625
- SOURCE_DIR="$TEST_DIR/source"
626
- BACKUP_DIR="$TEST_DIR/backup"
627
-
628
- mkdir -p "$SOURCE_DIR" "$BACKUP_DIR"
629
- echo "test data" > "$SOURCE_DIR/file1.txt"
630
- }
631
-
632
- # Teardown runs after each test
633
- teardown() {
634
- rm -rf "$TEST_DIR"
635
- }
636
-
637
- @test "backup creates archive" {
638
- run ./backup.sh --source "$SOURCE_DIR" --dest "$BACKUP_DIR"
639
-
640
- assert_success
641
- assert [ -f "$BACKUP_DIR/backup-*.tar.gz" ]
642
- }
643
-
644
- @test "backup fails without source" {
645
- run ./backup.sh --dest "$BACKUP_DIR"
646
-
647
- assert_failure
648
- assert_output --partial "Error: --source is required"
649
- }
650
-
651
- @test "backup preserves file content" {
652
- run ./backup.sh --source "$SOURCE_DIR" --dest "$BACKUP_DIR"
653
-
654
- assert_success
655
-
656
- # Extract and verify
657
- cd "$BACKUP_DIR"
658
- tar -xzf backup-*.tar.gz
659
- assert [ "$(cat source/file1.txt)" = "test data" ]
660
- }
661
- ```
662
-
663
- **Run Tests:**
664
- ```bash
665
- bats test/backup.bats
666
- ```
667
-
668
- ## Best Practices
669
-
670
- ### 1. Script Organization
671
-
672
- ```bash
673
- #!/usr/bin/env bash
674
- #
675
- # Well-organized script structure
676
- #
677
-
678
- set -euo pipefail
679
-
680
- # Constants first
681
- readonly SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
682
- readonly CONFIG_FILE="/etc/myapp/config"
683
-
684
- # Variables
685
- DEBUG=false
686
-
687
- # Functions
688
- log() { ... }
689
- validate_input() { ... }
690
- process_data() { ... }
691
-
692
- # Main logic
693
- main() {
694
- log "INFO" "Starting"
695
- validate_input "$@"
696
- process_data
697
- log "INFO" "Complete"
698
- }
699
-
700
- # Run main
701
- if [ "${BASH_SOURCE[0]}" = "${0}" ]; then
702
- main "$@"
703
- fi
704
- ```
705
-
706
- ### 2. Documentation
707
-
708
- ```bash
709
- #!/usr/bin/env bash
710
- #
711
- # Script: deploy.sh
712
- # Description: Deploy application to production
713
- # Usage: ./deploy.sh [OPTIONS]
714
- # Options:
715
- # -e, --env ENV Environment (staging|production)
716
- # -v, --version VER Version to deploy
717
- # -h, --help Show help
718
- #
719
- # Examples:
720
- # ./deploy.sh --env production --version v1.2.3
721
- # ./deploy.sh -e staging -v latest
722
- #
723
- # Author: DevOps Team
724
- # Date: 2025-01-01
725
- #
726
-
727
- # Function documentation
728
- #
729
- # backup_database()
730
- # Creates a database backup before deployment
731
- #
732
- # Arguments:
733
- # $1 - Database name
734
- # $2 - Backup directory
735
- #
736
- # Returns:
737
- # 0 on success, 1 on failure
738
- #
739
- backup_database() {
740
- local db_name=$1
741
- local backup_dir=$2
742
- # ...
743
- }
744
- ```
745
-
746
- ### 3. Error Messages
747
-
748
- ```bash
749
- # Good error messages are:
750
- # - Clear and specific
751
- # - Include context
752
- # - Suggest solutions
753
-
754
- # BAD
755
- echo "Error" >&2
756
-
757
- # GOOD
758
- echo "Error: Failed to connect to database 'production' at localhost:5432" >&2
759
- echo "Suggestion: Check if PostgreSQL is running and credentials are correct" >&2
760
- ```
761
-
762
- ### 4. Debugging
763
-
764
- ```bash
765
- # Enable debugging
766
- bash -x script.sh
767
-
768
- # Or in script
769
- set -x # Enable
770
- set +x # Disable
771
-
772
- # Conditional debugging
773
- DEBUG=${DEBUG:-false}
774
- if [ "$DEBUG" = "true" ]; then
775
- set -x
776
- fi
777
-
778
- # Verbose logging
779
- VERBOSE=${VERBOSE:-false}
780
- debug_log() {
781
- if [ "$VERBOSE" = "true" ]; then
782
- echo "[DEBUG] $@" >&2
783
- fi
784
- }
785
- ```
786
-
787
- ## Complete Examples
788
-
789
- ### System Backup Script
790
-
791
- ```bash
792
- #!/usr/bin/env bash
793
- #
794
- # backup.sh - Automated system backup
795
- #
796
-
797
- set -euo pipefail
798
-
799
- # Configuration
800
- readonly BACKUP_DIR="/backup"
801
- readonly RETENTION_DAYS=7
802
- readonly LOG_FILE="/var/log/backup.log"
803
-
804
- # Directories to backup
805
- readonly BACKUP_SOURCES=(
806
- "/etc"
807
- "/var/www"
808
- "/home"
809
- )
810
-
811
- # Logging
812
- log() {
813
- echo "[$(date '+%Y-%m-%d %H:%M:%S')] $@" | tee -a "$LOG_FILE"
814
- }
815
-
816
- die() {
817
- log "ERROR: $@"
818
- exit 1
819
- }
820
-
821
- # Check if running as root
822
- if [ "$(id -u)" -ne 0 ]; then
823
- die "This script must be run as root"
824
- fi
825
-
826
- # Create backup directory
827
- mkdir -p "$BACKUP_DIR" || die "Failed to create backup directory"
828
-
829
- # Backup filename
830
- BACKUP_FILE="$BACKUP_DIR/backup-$(date +%Y%m%d-%H%M%S).tar.gz"
831
-
832
- log "Starting backup to $BACKUP_FILE"
833
-
834
- # Create backup
835
- if tar -czf "$BACKUP_FILE" "${BACKUP_SOURCES[@]}" 2>&1 | tee -a "$LOG_FILE"; then
836
- log "Backup created successfully"
837
- log "Size: $(du -h "$BACKUP_FILE" | cut -f1)"
838
- else
839
- die "Backup failed"
840
- fi
841
-
842
- # Remove old backups
843
- log "Removing backups older than $RETENTION_DAYS days"
844
- find "$BACKUP_DIR" -name "backup-*.tar.gz" -mtime +$RETENTION_DAYS -delete
845
-
846
- log "Backup completed successfully"
847
- ```
848
-
849
- ### Service Health Check
850
-
851
- ```bash
852
- #!/usr/bin/env bash
853
- #
854
- # health-check.sh - Check service health
855
- #
856
-
857
- set -euo pipefail
858
-
859
- # Configuration
860
- readonly SERVICE_NAME="myapp"
861
- readonly HEALTH_URL="http://localhost:8080/health"
862
- readonly MAX_RETRIES=3
863
- readonly RETRY_DELAY=5
864
-
865
- check_service() {
866
- if systemctl is-active --quiet "$SERVICE_NAME"; then
867
- echo "✓ Service $SERVICE_NAME is running"
868
- return 0
869
- else
870
- echo "✗ Service $SERVICE_NAME is not running"
871
- return 1
872
- fi
873
- }
874
-
875
- check_http() {
876
- local url=$1
877
- local retries=0
878
-
879
- while [ $retries -lt $MAX_RETRIES ]; do
880
- if curl -sf "$url" > /dev/null 2>&1; then
881
- echo "✓ HTTP endpoint $url is healthy"
882
- return 0
883
- fi
884
-
885
- retries=$((retries + 1))
886
- if [ $retries -lt $MAX_RETRIES ]; then
887
- echo "Retry $retries/$MAX_RETRIES after $RETRY_DELAY seconds..."
888
- sleep $RETRY_DELAY
889
- fi
890
- done
891
-
892
- echo "✗ HTTP endpoint $url is unhealthy"
893
- return 1
894
- }
895
-
896
- # Main checks
897
- echo "Checking service health..."
898
- check_service
899
- check_http "$HEALTH_URL"
900
-
901
- if [ $? -eq 0 ]; then
902
- echo "All health checks passed"
903
- exit 0
904
- else
905
- echo "Health checks failed"
906
- exit 1
907
- fi
908
- ```
909
-
910
- ---
911
-
912
- **Related Topics:**
913
- - See [automation-patterns.md](automation-patterns.md) for cron and systemd timers
914
- - See [troubleshooting-guide.md](troubleshooting-guide.md) for debugging scripts
915
- - See [linux-administration.md](linux-administration.md) for system management