@hybridlabor-api/aos 4.7.2 → 4.9.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 (166) hide show
  1. package/.agents/agents.md +1 -1
  2. package/.agents/nodes.json +1 -1
  3. package/.agents/vendor-manifest.json +23 -1
  4. package/.claude/agents/godmode-media-eventtech.md +1 -1
  5. package/.claude/hooks/conventional-commits.mjs +125 -0
  6. package/.claude/hooks/env-file-protection.mjs +105 -0
  7. package/.claude/hooks/go-gate.mjs +101 -81
  8. package/.claude/settings.json +13 -0
  9. package/.opencode/agents/godmode-media-eventtech.md +1 -1
  10. package/.opencode/plugins/bdb-aos.js +31 -4
  11. package/README.de.md +1 -1
  12. package/README.md +1 -1
  13. package/README.pt.md +1 -1
  14. package/THIRD_PARTY_NOTICES.md +88 -0
  15. package/docs/skills_table.md +1 -1
  16. package/installer.js +309 -101
  17. package/package.json +6 -2
  18. package/packages/aos-cli/README.md +80 -0
  19. package/packages/aos-cli/bin/aos-cli.mjs +134 -0
  20. package/packages/aos-cli/core-skills.json +12 -0
  21. package/packages/aos-cli/extensions/aos.ts +321 -0
  22. package/packages/aos-cli/package-lock.json +1923 -0
  23. package/packages/aos-cli/package.json +29 -0
  24. package/packages/aos-cli/scripts/check-theme.mjs +63 -0
  25. package/packages/aos-cli/themes/aos.json +97 -0
  26. package/scripts/build-plugin-manifest.mjs +131 -0
  27. package/scripts/validate-skills.mjs +81 -6
  28. package/skills/basic/ao-orchestrator/SKILL.md +116 -0
  29. package/skills/global_config/agenttrail/SKILL.md +6 -1
  30. package/skills/global_config/ask-tim/SKILL.md +4 -4
  31. package/skills/global_config/bash-script-generator/SKILL.md +201 -0
  32. package/skills/global_config/bash-script-generator/assets/templates/standard-template.sh +96 -0
  33. package/skills/global_config/bash-script-generator/docs/bash-scripting-guide.md +729 -0
  34. package/skills/global_config/bash-script-generator/docs/generation-best-practices.md +193 -0
  35. package/skills/global_config/bash-script-generator/docs/script-patterns.md +566 -0
  36. package/skills/global_config/bash-script-generator/docs/text-processing-guide.md +437 -0
  37. package/skills/global_config/bash-script-generator/examples/log-analyzer.sh +92 -0
  38. package/skills/global_config/bash-script-generator/scripts/generate_script_template.sh +123 -0
  39. package/skills/global_config/bash-script-generator/scripts/run_ci_checks.sh +172 -0
  40. package/skills/global_config/bash-script-generator/scripts/test_generator.sh +413 -0
  41. package/skills/global_config/bash-script-validator/SKILL.md +249 -0
  42. package/skills/global_config/bash-script-validator/docs/awk-reference.md +449 -0
  43. package/skills/global_config/bash-script-validator/docs/bash-reference.md +468 -0
  44. package/skills/global_config/bash-script-validator/docs/common-mistakes.md +623 -0
  45. package/skills/global_config/bash-script-validator/docs/grep-reference.md +395 -0
  46. package/skills/global_config/bash-script-validator/docs/regex-reference.md +391 -0
  47. package/skills/global_config/bash-script-validator/docs/sed-reference.md +454 -0
  48. package/skills/global_config/bash-script-validator/docs/shell-reference.md +463 -0
  49. package/skills/global_config/bash-script-validator/docs/shellcheck-reference.md +399 -0
  50. package/skills/global_config/bash-script-validator/examples/bad-bash.sh +55 -0
  51. package/skills/global_config/bash-script-validator/examples/bad-shell.sh +54 -0
  52. package/skills/global_config/bash-script-validator/examples/good-bash.sh +71 -0
  53. package/skills/global_config/bash-script-validator/examples/good-shell.sh +69 -0
  54. package/skills/global_config/bash-script-validator/scripts/run_ci_checks.sh +23 -0
  55. package/skills/global_config/bash-script-validator/scripts/shellcheck_wrapper.sh +174 -0
  56. package/skills/global_config/bash-script-validator/scripts/test_validate.sh +446 -0
  57. package/skills/global_config/bash-script-validator/scripts/validate.sh +512 -0
  58. package/skills/global_config/ci-pipeline/SKILL.md +135 -0
  59. package/skills/global_config/dispatching-parallel-agents/SKILL.md +170 -0
  60. package/skills/global_config/dockerfile-generator/SKILL.md +1038 -0
  61. package/skills/global_config/dockerfile-generator/examples/example.dockerignore +95 -0
  62. package/skills/global_config/dockerfile-generator/examples/golang-distroless.Dockerfile +34 -0
  63. package/skills/global_config/dockerfile-generator/examples/java-springboot.Dockerfile +45 -0
  64. package/skills/global_config/dockerfile-generator/examples/nextjs-production.Dockerfile +49 -0
  65. package/skills/global_config/dockerfile-generator/examples/nodejs-multistage.Dockerfile +55 -0
  66. package/skills/global_config/dockerfile-generator/examples/python-fastapi.Dockerfile +48 -0
  67. package/skills/global_config/dockerfile-generator/references/language_specific_guides.md +510 -0
  68. package/skills/global_config/dockerfile-generator/references/multistage_builds.md +570 -0
  69. package/skills/global_config/dockerfile-generator/references/optimization_patterns.md +492 -0
  70. package/skills/global_config/dockerfile-generator/references/security_best_practices.md +375 -0
  71. package/skills/global_config/dockerfile-generator/scripts/generate_dockerignore.sh +199 -0
  72. package/skills/global_config/dockerfile-generator/scripts/generate_golang.sh +172 -0
  73. package/skills/global_config/dockerfile-generator/scripts/generate_java.sh +185 -0
  74. package/skills/global_config/dockerfile-generator/scripts/generate_nodejs.sh +279 -0
  75. package/skills/global_config/dockerfile-generator/scripts/generate_python.sh +218 -0
  76. package/skills/global_config/dockerfile-generator/scripts/test_generator.sh +210 -0
  77. package/skills/global_config/dockerfile-validator/SKILL.md +300 -0
  78. package/skills/global_config/dockerfile-validator/examples/.dockerignore.example +34 -0
  79. package/skills/global_config/dockerfile-validator/examples/bad-example.Dockerfile +37 -0
  80. package/skills/global_config/dockerfile-validator/examples/golang-distroless.Dockerfile +50 -0
  81. package/skills/global_config/dockerfile-validator/examples/good-example.Dockerfile +52 -0
  82. package/skills/global_config/dockerfile-validator/examples/python-optimized.Dockerfile +53 -0
  83. package/skills/global_config/dockerfile-validator/examples/security-issues.Dockerfile +42 -0
  84. package/skills/global_config/dockerfile-validator/references/docker_best_practices.md +348 -0
  85. package/skills/global_config/dockerfile-validator/references/optimization_guide.md +473 -0
  86. package/skills/global_config/dockerfile-validator/references/security_checklist.md +208 -0
  87. package/skills/global_config/dockerfile-validator/scripts/dockerfile-validate.sh +699 -0
  88. package/skills/global_config/dockerfile-validator/scripts/test_validate.sh +35 -0
  89. package/skills/global_config/dockerfile-validator/tests/fixtures/copy-before-yarn-lock-read.Dockerfile +6 -0
  90. package/skills/global_config/dockerfile-validator/tests/fixtures/copy-before-yarn.Dockerfile +6 -0
  91. package/skills/global_config/dockerfile-validator/tests/fixtures/from-platform-nonroot.Dockerfile +7 -0
  92. package/skills/global_config/dockerfile-validator/tests/test_regression.sh +164 -0
  93. package/skills/global_config/finishing-a-development-branch/SKILL.md +228 -0
  94. package/skills/global_config/github-actions-generator/SKILL.md +353 -0
  95. package/skills/global_config/github-actions-generator/assets/templates/action/composite/action.yml +82 -0
  96. package/skills/global_config/github-actions-generator/assets/templates/action/docker/Dockerfile +25 -0
  97. package/skills/global_config/github-actions-generator/assets/templates/action/docker/action.yml +42 -0
  98. package/skills/global_config/github-actions-generator/assets/templates/action/docker/entrypoint.sh +27 -0
  99. package/skills/global_config/github-actions-generator/assets/templates/action/javascript/action.yml +33 -0
  100. package/skills/global_config/github-actions-generator/assets/templates/action/javascript/index.js +50 -0
  101. package/skills/global_config/github-actions-generator/assets/templates/action/javascript/package.json +27 -0
  102. package/skills/global_config/github-actions-generator/assets/templates/workflow/basic_workflow.yml +242 -0
  103. package/skills/global_config/github-actions-generator/assets/templates/workflow/reusable_workflow.yml +106 -0
  104. package/skills/global_config/github-actions-generator/examples/README.md +147 -0
  105. package/skills/global_config/github-actions-generator/examples/actions/setup-node-cached/action.yml +93 -0
  106. package/skills/global_config/github-actions-generator/examples/caching/docker-buildkit.yml +256 -0
  107. package/skills/global_config/github-actions-generator/examples/security/dependency-review.yml +62 -0
  108. package/skills/global_config/github-actions-generator/examples/security/sbom-attestation.yml +119 -0
  109. package/skills/global_config/github-actions-generator/examples/triggers/chatops-commands.yml +475 -0
  110. package/skills/global_config/github-actions-generator/examples/triggers/repository-dispatch.yml +418 -0
  111. package/skills/global_config/github-actions-generator/examples/triggers/workflow-orchestration.yml +404 -0
  112. package/skills/global_config/github-actions-generator/examples/workflows/docker-build-push.yml +68 -0
  113. package/skills/global_config/github-actions-generator/examples/workflows/go-ci.yml +161 -0
  114. package/skills/global_config/github-actions-generator/examples/workflows/monorepo-ci.yml +340 -0
  115. package/skills/global_config/github-actions-generator/examples/workflows/multi-environment-deploy.yml +406 -0
  116. package/skills/global_config/github-actions-generator/examples/workflows/nodejs-ci.yml +122 -0
  117. package/skills/global_config/github-actions-generator/examples/workflows/python-ci.yml +157 -0
  118. package/skills/global_config/github-actions-generator/examples/workflows/scheduled-tasks.yml +376 -0
  119. package/skills/global_config/github-actions-generator/references/advanced-triggers.md +917 -0
  120. package/skills/global_config/github-actions-generator/references/best-practices.md +755 -0
  121. package/skills/global_config/github-actions-generator/references/common-actions.md +715 -0
  122. package/skills/global_config/github-actions-generator/references/custom-actions.md +320 -0
  123. package/skills/global_config/github-actions-generator/references/expressions-and-contexts.md +688 -0
  124. package/skills/global_config/github-actions-generator/references/modern-features.md +421 -0
  125. package/skills/global_config/github-actions-generator/scripts/test_generator.sh +344 -0
  126. package/skills/global_config/github-actions-templates/SKILL.md +7 -0
  127. package/skills/global_config/github-actions-validator/SKILL.md +576 -0
  128. package/skills/global_config/github-actions-validator/examples/README.md +88 -0
  129. package/skills/global_config/github-actions-validator/examples/outdated-versions.yml +76 -0
  130. package/skills/global_config/github-actions-validator/examples/valid-ci.yml +79 -0
  131. package/skills/global_config/github-actions-validator/examples/with-errors.yml +47 -0
  132. package/skills/global_config/github-actions-validator/references/act_usage.md +233 -0
  133. package/skills/global_config/github-actions-validator/references/action_versions.md +122 -0
  134. package/skills/global_config/github-actions-validator/references/actionlint_usage.md +343 -0
  135. package/skills/global_config/github-actions-validator/references/common_errors.md +512 -0
  136. package/skills/global_config/github-actions-validator/references/modern_features.md +384 -0
  137. package/skills/global_config/github-actions-validator/references/runners.md +317 -0
  138. package/skills/global_config/github-actions-validator/scripts/install_tools.sh +113 -0
  139. package/skills/global_config/github-actions-validator/scripts/validate_workflow.sh +910 -0
  140. package/skills/global_config/github-actions-validator/tests/test_validate_workflow.sh +237 -0
  141. package/skills/global_config/makefile-generator/SKILL.md +614 -0
  142. package/skills/global_config/makefile-generator/assets/templates/.gitkeep +1 -0
  143. package/skills/global_config/makefile-generator/docs/makefile-structure.md +530 -0
  144. package/skills/global_config/makefile-generator/docs/optimization-guide.md +784 -0
  145. package/skills/global_config/makefile-generator/docs/patterns-guide.md +642 -0
  146. package/skills/global_config/makefile-generator/docs/security-guide.md +361 -0
  147. package/skills/global_config/makefile-generator/docs/targets-guide.md +642 -0
  148. package/skills/global_config/makefile-generator/docs/variables-guide.md +596 -0
  149. package/skills/global_config/makefile-generator/scripts/add_standard_targets.sh +539 -0
  150. package/skills/global_config/makefile-generator/scripts/generate_makefile_template.sh +690 -0
  151. package/skills/global_config/makefile-generator/test/test_helper_scripts.sh +190 -0
  152. package/skills/global_config/makefile-validator/SKILL.md +244 -0
  153. package/skills/global_config/makefile-validator/docs/bake-tool.md +1000 -0
  154. package/skills/global_config/makefile-validator/docs/best-practices.md +858 -0
  155. package/skills/global_config/makefile-validator/docs/common-mistakes.md +944 -0
  156. package/skills/global_config/makefile-validator/examples/bad-makefile.mk +77 -0
  157. package/skills/global_config/makefile-validator/examples/good-makefile.mk +103 -0
  158. package/skills/global_config/makefile-validator/scripts/test_validate.sh +382 -0
  159. package/skills/global_config/makefile-validator/scripts/validate_makefile.sh +712 -0
  160. package/skills/global_config/{MCP_Manage → mcp-manage}/SKILL.md +3 -3
  161. package/skills/global_config/requesting-code-review/SKILL.md +98 -0
  162. package/skills/global_config/requesting-code-review/code-reviewer.md +198 -0
  163. package/skills/global_config/using-git-worktrees/SKILL.md +170 -0
  164. package/skills/global_config/verification-before-completion/SKILL.md +123 -0
  165. package/skills/global_config/writing-plans/SKILL.md +126 -46
  166. package/skills/global_config/writing-plans-legacy/SKILL.md +139 -0
@@ -0,0 +1,690 @@
1
+ #!/usr/bin/env bash
2
+ #
3
+ # generate_makefile_template.sh
4
+ # Description: Generate Makefile templates for different project types
5
+ # Usage: bash generate_makefile_template.sh [OPTIONS] [PROJECT_TYPE] [PROJECT_NAME] [OUTPUT_FILE]
6
+ #
7
+
8
+ set -euo pipefail
9
+
10
+ # Script metadata
11
+ readonly SCRIPT_NAME="$(basename "${BASH_SOURCE[0]}")"
12
+ readonly SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
13
+
14
+ # Default values
15
+ FORCE=0
16
+ PROJECT_TYPE=""
17
+ PROJECT_NAME="myproject"
18
+ OUTPUT_FILE="Makefile"
19
+
20
+ # Colors for output
21
+ if [[ -t 1 ]]; then
22
+ readonly RED='\033[0;31m'
23
+ readonly GREEN='\033[0;32m'
24
+ readonly YELLOW='\033[1;33m'
25
+ readonly NC='\033[0m' # No Color
26
+ else
27
+ readonly RED=''
28
+ readonly GREEN=''
29
+ readonly YELLOW=''
30
+ readonly NC=''
31
+ fi
32
+
33
+ # Print functions
34
+ print_error() {
35
+ echo -e "${RED}ERROR:${NC} $*" >&2
36
+ }
37
+
38
+ print_success() {
39
+ echo -e "${GREEN}SUCCESS:${NC} $*"
40
+ }
41
+
42
+ print_info() {
43
+ echo -e "${YELLOW}INFO:${NC} $*"
44
+ }
45
+
46
+ # Usage information
47
+ usage() {
48
+ cat << EOF
49
+ Usage: ${SCRIPT_NAME} [OPTIONS] [PROJECT_TYPE] [PROJECT_NAME] [OUTPUT_FILE]
50
+
51
+ Generate Makefile templates for different project types.
52
+
53
+ Options:
54
+ -f, --force Overwrite existing files without prompting
55
+ -h, --help Show this help message
56
+
57
+ Arguments:
58
+ PROJECT_TYPE Type of project (required)
59
+ PROJECT_NAME Name of the project (default: myproject)
60
+ OUTPUT_FILE Output file path (default: Makefile)
61
+
62
+ Project Types:
63
+ c Simple C project
64
+ c-lib C library project
65
+ cpp C++ project
66
+ go Go project
67
+ python Python project
68
+ java Java project
69
+ generic Generic project
70
+
71
+ Examples:
72
+ ${SCRIPT_NAME} c myapp
73
+ ${SCRIPT_NAME} go server Makefile
74
+ ${SCRIPT_NAME} python mypackage build.mk
75
+ ${SCRIPT_NAME} -f c myapp Makefile # Force overwrite
76
+
77
+ EOF
78
+ }
79
+
80
+ # Parse command line options
81
+ parse_args() {
82
+ local -a positional=()
83
+
84
+ while [[ $# -gt 0 ]]; do
85
+ case "$1" in
86
+ -f|--force)
87
+ FORCE=1
88
+ shift
89
+ ;;
90
+ -h|--help)
91
+ usage
92
+ exit 0
93
+ ;;
94
+ -*)
95
+ print_error "Unknown option: $1"
96
+ usage
97
+ exit 1
98
+ ;;
99
+ *)
100
+ positional+=("$1")
101
+ shift
102
+ ;;
103
+ esac
104
+ done
105
+
106
+ if [[ ${#positional[@]} -gt 3 ]]; then
107
+ print_error "Too many positional arguments. Expected: [PROJECT_TYPE] [PROJECT_NAME] [OUTPUT_FILE]"
108
+ usage
109
+ exit 1
110
+ fi
111
+
112
+ if [[ ${#positional[@]} -ge 1 ]]; then
113
+ PROJECT_TYPE="${positional[0]}"
114
+ fi
115
+ if [[ ${#positional[@]} -ge 2 ]]; then
116
+ PROJECT_NAME="${positional[1]}"
117
+ fi
118
+ if [[ ${#positional[@]} -ge 3 ]]; then
119
+ OUTPUT_FILE="${positional[2]}"
120
+ fi
121
+ }
122
+
123
+ # Escape replacement text for sed "s///" usage.
124
+ escape_sed_replacement() {
125
+ printf '%s' "$1" | sed -e 's/[\\/&]/\\&/g'
126
+ }
127
+
128
+ # Render a template from stdin and replace PROJECT_NAME safely.
129
+ render_template_with_project() {
130
+ local project="$1"
131
+ local escaped_project
132
+ escaped_project="$(escape_sed_replacement "$project")"
133
+ sed "s/PROJECT_NAME/${escaped_project}/g"
134
+ }
135
+
136
+ # Generate C project Makefile
137
+ generate_c_makefile() {
138
+ local project="$1"
139
+ render_template_with_project "$project" << 'EOF'
140
+ # Makefile for C project
141
+ SHELL := bash
142
+ .ONESHELL:
143
+ .SHELLFLAGS := -eu -o pipefail -c
144
+ .DELETE_ON_ERROR:
145
+ .SUFFIXES:
146
+ MAKEFLAGS += --warn-undefined-variables
147
+ MAKEFLAGS += --no-builtin-rules
148
+
149
+ PROJECT := PROJECT_NAME
150
+ VERSION := 1.0.0
151
+
152
+ CC ?= gcc
153
+ CFLAGS ?= -Wall -Wextra -O2
154
+ PREFIX ?= /usr/local
155
+
156
+ SRCDIR := src
157
+ BUILDDIR := build
158
+ OBJDIR := $(BUILDDIR)/obj
159
+
160
+ SOURCES := $(wildcard $(SRCDIR)/*.c)
161
+ OBJECTS := $(SOURCES:$(SRCDIR)/%.c=$(OBJDIR)/%.o)
162
+ DEPENDS := $(OBJECTS:.o=.d)
163
+ TARGET := $(BUILDDIR)/$(PROJECT)
164
+
165
+ .PHONY: all clean install test help
166
+
167
+ ## Build the application (default)
168
+ all: $(TARGET)
169
+
170
+ $(TARGET): $(OBJECTS)
171
+ @mkdir -p $(@D)
172
+ $(CC) $(LDFLAGS) $^ $(LDLIBS) -o $@
173
+
174
+ $(OBJDIR)/%.o: $(SRCDIR)/%.c
175
+ @mkdir -p $(@D)
176
+ $(CC) $(CPPFLAGS) $(CFLAGS) -MMD -MP -c $< -o $@
177
+
178
+ -include $(DEPENDS)
179
+
180
+ ## Install to PREFIX
181
+ install: $(TARGET)
182
+ install -d $(DESTDIR)$(PREFIX)/bin
183
+ install -m 755 $(TARGET) $(DESTDIR)$(PREFIX)/bin/$(PROJECT)
184
+
185
+ ## Run tests
186
+ test: $(TARGET)
187
+ @echo "Running tests..."
188
+ @$(TARGET) --test
189
+
190
+ ## Remove build artifacts
191
+ clean:
192
+ $(RM) -r $(BUILDDIR)
193
+
194
+ ## Show help
195
+ help:
196
+ @echo "$(PROJECT) v$(VERSION)"
197
+ @echo ""
198
+ @sed -n 's/^## //p' $(MAKEFILE_LIST)
199
+ EOF
200
+ }
201
+
202
+ # Generate C++ project Makefile
203
+ generate_cpp_makefile() {
204
+ local project="$1"
205
+ render_template_with_project "$project" << 'EOF'
206
+ # Makefile for C++ project
207
+ SHELL := bash
208
+ .ONESHELL:
209
+ .SHELLFLAGS := -eu -o pipefail -c
210
+ .DELETE_ON_ERROR:
211
+ .SUFFIXES:
212
+ MAKEFLAGS += --warn-undefined-variables
213
+ MAKEFLAGS += --no-builtin-rules
214
+
215
+ PROJECT := PROJECT_NAME
216
+ VERSION := 1.0.0
217
+
218
+ CXX ?= g++
219
+ CXXFLAGS ?= -Wall -Wextra -std=c++17 -O2
220
+ PREFIX ?= /usr/local
221
+
222
+ SRCDIR := src
223
+ BUILDDIR := build
224
+ OBJDIR := $(BUILDDIR)/obj
225
+
226
+ SOURCES := $(wildcard $(SRCDIR)/*.cpp)
227
+ OBJECTS := $(SOURCES:$(SRCDIR)/%.cpp=$(OBJDIR)/%.o)
228
+ DEPENDS := $(OBJECTS:.o=.d)
229
+ TARGET := $(BUILDDIR)/$(PROJECT)
230
+
231
+ .PHONY: all clean install test help
232
+
233
+ ## Build the application (default)
234
+ all: $(TARGET)
235
+
236
+ $(TARGET): $(OBJECTS)
237
+ @mkdir -p $(@D)
238
+ $(CXX) $(LDFLAGS) $^ $(LDLIBS) -o $@
239
+
240
+ $(OBJDIR)/%.o: $(SRCDIR)/%.cpp
241
+ @mkdir -p $(@D)
242
+ $(CXX) $(CPPFLAGS) $(CXXFLAGS) -MMD -MP -c $< -o $@
243
+
244
+ -include $(DEPENDS)
245
+
246
+ ## Install to PREFIX
247
+ install: $(TARGET)
248
+ install -d $(DESTDIR)$(PREFIX)/bin
249
+ install -m 755 $(TARGET) $(DESTDIR)$(PREFIX)/bin/$(PROJECT)
250
+
251
+ ## Run tests
252
+ test: $(TARGET)
253
+ @echo "Running tests..."
254
+ @$(TARGET) --test
255
+
256
+ ## Remove build artifacts
257
+ clean:
258
+ $(RM) -r $(BUILDDIR)
259
+
260
+ ## Show help
261
+ help:
262
+ @echo "$(PROJECT) v$(VERSION)"
263
+ @echo ""
264
+ @sed -n 's/^## //p' $(MAKEFILE_LIST)
265
+ EOF
266
+ }
267
+
268
+ # Generate C library Makefile
269
+ generate_c_lib_makefile() {
270
+ local project="$1"
271
+ render_template_with_project "$project" << 'EOF'
272
+ # Makefile for C library project
273
+ .DELETE_ON_ERROR:
274
+
275
+ PROJECT := PROJECT_NAME
276
+ VERSION := 1.0.0
277
+
278
+ CC ?= gcc
279
+ AR ?= ar
280
+ RANLIB ?= ranlib
281
+ CFLAGS ?= -Wall -Wextra -O2 -fPIC
282
+ PREFIX ?= /usr/local
283
+
284
+ SRCDIR := src
285
+ BUILDDIR := build
286
+ OBJDIR := $(BUILDDIR)/obj
287
+
288
+ SOURCES := $(wildcard $(SRCDIR)/*.c)
289
+ OBJECTS := $(SOURCES:$(SRCDIR)/%.c=$(OBJDIR)/%.o)
290
+ HEADERS := $(wildcard $(SRCDIR)/*.h)
291
+
292
+ STATIC_LIB := $(BUILDDIR)/lib$(PROJECT).a
293
+ SHARED_LIB := $(BUILDDIR)/lib$(PROJECT).so.$(VERSION)
294
+
295
+ .PHONY: all static shared clean install help
296
+
297
+ ## Build both static and shared libraries
298
+ all: static shared
299
+
300
+ ## Build static library
301
+ static: $(STATIC_LIB)
302
+
303
+ ## Build shared library
304
+ shared: $(SHARED_LIB)
305
+
306
+ $(STATIC_LIB): $(OBJECTS)
307
+ @mkdir -p $(@D)
308
+ $(AR) rcs $@ $^
309
+ $(RANLIB) $@
310
+
311
+ $(SHARED_LIB): $(OBJECTS)
312
+ @mkdir -p $(@D)
313
+ $(CC) -shared -Wl,-soname,lib$(PROJECT).so.1 $^ -o $@
314
+
315
+ $(OBJDIR)/%.o: $(SRCDIR)/%.c
316
+ @mkdir -p $(@D)
317
+ $(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@
318
+
319
+ ## Install libraries
320
+ install: all
321
+ install -d $(DESTDIR)$(PREFIX)/lib
322
+ install -m 644 $(STATIC_LIB) $(DESTDIR)$(PREFIX)/lib/
323
+ install -m 755 $(SHARED_LIB) $(DESTDIR)$(PREFIX)/lib/
324
+ install -d $(DESTDIR)$(PREFIX)/include/$(PROJECT)
325
+ install -m 644 $(HEADERS) $(DESTDIR)$(PREFIX)/include/$(PROJECT)/
326
+
327
+ ## Clean build artifacts
328
+ clean:
329
+ $(RM) -r $(BUILDDIR)
330
+
331
+ ## Show help
332
+ help:
333
+ @sed -n 's/^## //p' $(MAKEFILE_LIST)
334
+ EOF
335
+ }
336
+
337
+ # Generate Go project Makefile
338
+ generate_go_makefile() {
339
+ local project="$1"
340
+ render_template_with_project "$project" << 'EOF'
341
+ # Makefile for Go project
342
+ .PHONY: all build install test clean fmt lint help
343
+
344
+ PROJECT := PROJECT_NAME
345
+ GO ?= go
346
+ PREFIX ?= /usr/local
347
+ GO_MAIN ?= ./cmd/$(PROJECT)
348
+
349
+ VERSION := $(shell git describe --tags --always --dirty 2>/dev/null || echo "dev")
350
+ LDFLAGS := -ldflags "-X main.version=$(VERSION)"
351
+
352
+ SOURCES := $(shell find . -name '*.go' -not -path './vendor/*')
353
+ GO_SUM := $(wildcard go.sum)
354
+ TARGET := $(PROJECT)
355
+
356
+ ## Build the application (default)
357
+ all: build
358
+
359
+ ## Build binary
360
+ build: $(TARGET)
361
+
362
+ $(TARGET): $(SOURCES) go.mod $(GO_SUM)
363
+ $(GO) build $(LDFLAGS) -o $@ $(GO_MAIN)
364
+
365
+ ## Install to PREFIX
366
+ install: $(TARGET)
367
+ install -d $(DESTDIR)$(PREFIX)/bin
368
+ install -m 755 $(TARGET) $(DESTDIR)$(PREFIX)/bin/
369
+
370
+ ## Run tests
371
+ test:
372
+ $(GO) test -v ./...
373
+
374
+ ## Clean build artifacts
375
+ clean:
376
+ $(RM) $(TARGET)
377
+ $(GO) clean
378
+
379
+ ## Format code
380
+ fmt:
381
+ $(GO) fmt ./...
382
+
383
+ ## Run linter
384
+ lint:
385
+ golangci-lint run
386
+
387
+ ## Show help
388
+ help:
389
+ @echo "$(PROJECT) - Go Project"
390
+ @echo "Version: $(VERSION)"
391
+ @echo ""
392
+ @sed -n 's/^## //p' $(MAKEFILE_LIST)
393
+ EOF
394
+ }
395
+
396
+ # Generate Python project Makefile
397
+ generate_python_makefile() {
398
+ local project="$1"
399
+ render_template_with_project "$project" << 'EOF'
400
+ # Makefile for Python project
401
+ .PHONY: all build install develop test format lint clean help
402
+
403
+ PROJECT := PROJECT_NAME
404
+ PYTHON ?= python3
405
+ PIP ?= $(PYTHON) -m pip
406
+
407
+ ## Build the package (default)
408
+ all: build
409
+
410
+ ## Build Python package
411
+ build:
412
+ $(PYTHON) -m build
413
+
414
+ ## Install package
415
+ install:
416
+ $(PIP) install .
417
+
418
+ ## Install in development mode
419
+ develop:
420
+ $(PIP) install -e .[dev]
421
+
422
+ ## Run tests
423
+ test:
424
+ $(PYTHON) -m pytest tests/ -v
425
+
426
+ ## Format code
427
+ format:
428
+ $(PYTHON) -m black src/ tests/
429
+ $(PYTHON) -m isort src/ tests/
430
+
431
+ ## Run linters
432
+ lint:
433
+ $(PYTHON) -m flake8 src/ tests/
434
+ $(PYTHON) -m pylint src/
435
+
436
+ ## Clean build artifacts
437
+ clean:
438
+ $(RM) -r build/ dist/ *.egg-info/
439
+ $(RM) -r .pytest_cache/ .coverage htmlcov/
440
+ find . -type d -name '__pycache__' -exec rm -r {} +
441
+
442
+ ## Show help
443
+ help:
444
+ @echo "$(PROJECT) - Python Project"
445
+ @echo ""
446
+ @sed -n 's/^## //p' $(MAKEFILE_LIST)
447
+ EOF
448
+ }
449
+
450
+ # Generate Java project Makefile
451
+ generate_java_makefile() {
452
+ local project="$1"
453
+ render_template_with_project "$project" << 'EOF'
454
+ # Makefile for Java project
455
+ .DELETE_ON_ERROR:
456
+
457
+ PROJECT := PROJECT_NAME
458
+ VERSION := 1.0.0
459
+ MAIN_CLASS := Main
460
+
461
+ # Java tools
462
+ JAVAC ?= javac
463
+ JAVA ?= java
464
+ JAR ?= jar
465
+
466
+ # Compiler flags
467
+ JAVAC_FLAGS ?= -Xlint:all -encoding UTF-8
468
+ JAR_FLAGS := cvf
469
+
470
+ # Directories
471
+ SRCDIR := src
472
+ BUILDDIR := build
473
+ CLASSDIR := $(BUILDDIR)/classes
474
+ LIBDIR := lib
475
+ DOCDIR := $(BUILDDIR)/docs
476
+ DISTDIR := dist
477
+
478
+ # Source and class files
479
+ JAVA_SOURCES := $(shell find $(SRCDIR) -name '*.java')
480
+ JAVA_CLASSES := $(JAVA_SOURCES:$(SRCDIR)/%.java=$(CLASSDIR)/%.class)
481
+
482
+ # Classpath
483
+ CLASSPATH := $(CLASSDIR)
484
+ ifneq ($(wildcard $(LIBDIR)/*.jar),)
485
+ CLASSPATH := $(CLASSPATH):$(LIBDIR)/*
486
+ endif
487
+
488
+ # Output JAR
489
+ TARGET := $(DISTDIR)/$(PROJECT)-$(VERSION).jar
490
+
491
+ .PHONY: all build compile jar run run-jar test clean distclean docs help
492
+
493
+ ## Build the project (default)
494
+ all: build
495
+
496
+ ## Compile and create JAR
497
+ build: jar
498
+
499
+ ## Compile Java sources
500
+ compile: $(CLASSDIR)/.compiled
501
+
502
+ $(CLASSDIR)/.compiled: $(JAVA_SOURCES)
503
+ @mkdir -p $(CLASSDIR)
504
+ $(JAVAC) $(JAVAC_FLAGS) -d $(CLASSDIR) -cp "$(CLASSPATH)" $(JAVA_SOURCES)
505
+ @touch $@
506
+
507
+ ## Create JAR file
508
+ jar: compile
509
+ @mkdir -p $(DISTDIR)
510
+ @echo "Manifest-Version: 1.0" > $(BUILDDIR)/MANIFEST.MF
511
+ @echo "Main-Class: $(MAIN_CLASS)" >> $(BUILDDIR)/MANIFEST.MF
512
+ @echo "Created-By: Makefile" >> $(BUILDDIR)/MANIFEST.MF
513
+ $(JAR) $(JAR_FLAGS)m $(TARGET) $(BUILDDIR)/MANIFEST.MF -C $(CLASSDIR) .
514
+ @echo "Created: $(TARGET)"
515
+
516
+ ## Run the application
517
+ run: compile
518
+ $(JAVA) -cp "$(CLASSPATH)" $(MAIN_CLASS)
519
+
520
+ ## Run with JAR
521
+ run-jar: jar
522
+ $(JAVA) -jar $(TARGET)
523
+
524
+ ## Run tests (requires JUnit in lib/)
525
+ test: compile
526
+ @echo "Running tests..."
527
+ @if [ -d "$(SRCDIR)/test" ]; then \
528
+ $(JAVA) -cp "$(CLASSPATH):$(LIBDIR)/*" org.junit.runner.JUnitCore; \
529
+ else \
530
+ echo "No test directory found"; \
531
+ fi
532
+
533
+ ## Generate Javadoc
534
+ docs:
535
+ @mkdir -p $(DOCDIR)
536
+ javadoc -d $(DOCDIR) -sourcepath $(SRCDIR) -subpackages .
537
+ @echo "Documentation generated: $(DOCDIR)/index.html"
538
+
539
+ ## Remove build artifacts
540
+ clean:
541
+ $(RM) -r $(BUILDDIR)
542
+ @echo "Clean complete"
543
+
544
+ ## Remove all generated files
545
+ distclean: clean
546
+ $(RM) -r $(DISTDIR)
547
+ @echo "Distclean complete"
548
+
549
+ ## Show available targets
550
+ help:
551
+ @echo "$(PROJECT) v$(VERSION) - Java Project"
552
+ @echo ""
553
+ @echo "Targets:"
554
+ @sed -n 's/^## //p' $(MAKEFILE_LIST) | column -t -s ':' | sed 's/^/ /'
555
+ @echo ""
556
+ @echo "Variables:"
557
+ @echo " JAVAC=$(JAVAC)"
558
+ @echo " JAVAC_FLAGS=$(JAVAC_FLAGS)"
559
+ @echo " MAIN_CLASS=$(MAIN_CLASS)"
560
+ @echo ""
561
+ @echo "Directory Structure:"
562
+ @echo " $(SRCDIR)/ - Java source files"
563
+ @echo " $(LIBDIR)/ - External JAR dependencies"
564
+ @echo " $(BUILDDIR)/ - Build output"
565
+ @echo " $(DISTDIR)/ - Distribution JARs"
566
+ @echo ""
567
+ @echo "Examples:"
568
+ @echo " make # Build the project"
569
+ @echo " make run # Compile and run"
570
+ @echo " make jar # Create JAR file"
571
+ @echo " make MAIN_CLASS=MyApp # Set main class"
572
+ EOF
573
+ }
574
+
575
+ # Generate generic Makefile
576
+ generate_generic_makefile() {
577
+ local project="$1"
578
+ render_template_with_project "$project" << 'EOF'
579
+ # Generic Makefile
580
+ .PHONY: all build clean install test help
581
+
582
+ PROJECT := PROJECT_NAME
583
+ VERSION := 1.0.0
584
+
585
+ ## Build the project (default)
586
+ all: build
587
+
588
+ ## Build target
589
+ build:
590
+ @echo "Building $(PROJECT)..."
591
+ # Add build commands here
592
+
593
+ ## Install target
594
+ install: build
595
+ @echo "Installing $(PROJECT)..."
596
+ # Add installation commands here
597
+
598
+ ## Run tests
599
+ test:
600
+ @echo "Running tests..."
601
+ # Add test commands here
602
+
603
+ ## Clean build artifacts
604
+ clean:
605
+ @echo "Cleaning..."
606
+ # Add cleanup commands here
607
+
608
+ ## Show help
609
+ help:
610
+ @echo "$(PROJECT) v$(VERSION)"
611
+ @echo ""
612
+ @echo "Available targets:"
613
+ @sed -n 's/^## //p' $(MAKEFILE_LIST)
614
+ EOF
615
+ }
616
+
617
+ # Main generation logic
618
+ generate_makefile() {
619
+ local type="$1"
620
+ local project="$2"
621
+ local output="$3"
622
+
623
+ # Check if output file exists
624
+ if [[ -f "${output}" ]]; then
625
+ if [[ "${FORCE}" -eq 1 ]]; then
626
+ print_info "Overwriting existing file: ${output}"
627
+ elif [[ -t 0 ]]; then
628
+ # Interactive mode - prompt user
629
+ print_error "File '${output}' already exists"
630
+ read -p "Overwrite? [y/N] " -n 1 -r
631
+ echo
632
+ if [[ ! $REPLY =~ ^[Yy]$ ]]; then
633
+ print_info "Aborted"
634
+ exit 0
635
+ fi
636
+ else
637
+ # Non-interactive mode - fail without --force
638
+ print_error "File '${output}' already exists. Use -f/--force to overwrite."
639
+ exit 1
640
+ fi
641
+ fi
642
+
643
+ print_info "Generating ${type} Makefile for project '${project}'..."
644
+
645
+ case "${type}" in
646
+ c)
647
+ generate_c_makefile "${project}" > "${output}"
648
+ ;;
649
+ c-lib)
650
+ generate_c_lib_makefile "${project}" > "${output}"
651
+ ;;
652
+ cpp)
653
+ generate_cpp_makefile "${project}" > "${output}"
654
+ ;;
655
+ go)
656
+ generate_go_makefile "${project}" > "${output}"
657
+ ;;
658
+ python)
659
+ generate_python_makefile "${project}" > "${output}"
660
+ ;;
661
+ java)
662
+ generate_java_makefile "${project}" > "${output}"
663
+ ;;
664
+ generic)
665
+ generate_generic_makefile "${project}" > "${output}"
666
+ ;;
667
+ *)
668
+ print_error "Unknown project type: ${type}"
669
+ echo ""
670
+ usage
671
+ exit 1
672
+ ;;
673
+ esac
674
+
675
+ print_success "Makefile generated: ${output}"
676
+ print_info "Edit the Makefile to customize for your project"
677
+ print_info "Run 'make help' to see available targets"
678
+ }
679
+
680
+ # Parse arguments
681
+ parse_args "$@"
682
+
683
+ # Check required argument
684
+ if [[ -z "${PROJECT_TYPE}" ]]; then
685
+ usage
686
+ exit 0
687
+ fi
688
+
689
+ # Main execution
690
+ generate_makefile "${PROJECT_TYPE}" "${PROJECT_NAME}" "${OUTPUT_FILE}"