biucingcli 0.9.1__py3-none-any.whl

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 (269) hide show
  1. biucingcli/__init__.py +5 -0
  2. biucingcli/cli.py +849 -0
  3. biucingcli/template_data/android/template/.editorconfig +9 -0
  4. biucingcli/template_data/android/template/.gitignore +26 -0
  5. biucingcli/template_data/android/template/.mise.toml +3 -0
  6. biucingcli/template_data/android/template/Brewfile +6 -0
  7. biucingcli/template_data/android/template/Makefile +103 -0
  8. biucingcli/template_data/android/template/README.md +163 -0
  9. biucingcli/template_data/android/template/app/build.gradle.kts +178 -0
  10. biucingcli/template_data/android/template/app/proguard-rules.pro +1 -0
  11. biucingcli/template_data/android/template/app/src/androidTest/java/app/HomeRouteUiTest.kt +21 -0
  12. biucingcli/template_data/android/template/app/src/main/AndroidManifest.xml +18 -0
  13. biucingcli/template_data/android/template/app/src/main/java/app/MainActivity.kt +36 -0
  14. biucingcli/template_data/android/template/app/src/main/res/values/strings.xml +4 -0
  15. biucingcli/template_data/android/template/app/src/main/res/values/themes.xml +8 -0
  16. biucingcli/template_data/android/template/app/src/test/java/app/AppSmokeTest.kt +19 -0
  17. biucingcli/template_data/android/template/build.gradle.kts +27 -0
  18. biucingcli/template_data/android/template/core/designsystem/build.gradle.kts +33 -0
  19. biucingcli/template_data/android/template/core/designsystem/src/main/java/designsystem/Components.kt +75 -0
  20. biucingcli/template_data/android/template/core/designsystem/src/main/java/designsystem/DesignTokens.kt +23 -0
  21. biucingcli/template_data/android/template/core/designsystem/src/main/java/designsystem/Theme.kt +110 -0
  22. biucingcli/template_data/android/template/core/model/build.gradle.kts +26 -0
  23. biucingcli/template_data/android/template/core/model/src/main/java/model/Greeting.kt +6 -0
  24. biucingcli/template_data/android/template/core/model/src/test/java/model/GreetingTest.kt +16 -0
  25. biucingcli/template_data/android/template/core/network/build.gradle.kts +26 -0
  26. biucingcli/template_data/android/template/core/network/src/main/java/network/AppEnvironment.kt +17 -0
  27. biucingcli/template_data/android/template/core/testing/build.gradle.kts +27 -0
  28. biucingcli/template_data/android/template/core/testing/src/main/java/testing/FakeAppEnvironmentProvider.kt +13 -0
  29. biucingcli/template_data/android/template/docs/release-delivery.md +68 -0
  30. biucingcli/template_data/android/template/docs/release-signing.properties.example +20 -0
  31. biucingcli/template_data/android/template/fastlane/.env.example +22 -0
  32. biucingcli/template_data/android/template/fastlane/Appfile +1 -0
  33. biucingcli/template_data/android/template/fastlane/Fastfile +121 -0
  34. biucingcli/template_data/android/template/feature/home/build.gradle.kts +35 -0
  35. biucingcli/template_data/android/template/feature/home/src/main/java/home/HomeRoute.kt +38 -0
  36. biucingcli/template_data/android/template/feature/settings/build.gradle.kts +34 -0
  37. biucingcli/template_data/android/template/feature/settings/src/main/java/settings/SettingsRoute.kt +35 -0
  38. biucingcli/template_data/android/template/gradle/libs.versions.toml +35 -0
  39. biucingcli/template_data/android/template/gradle/verification-metadata.xml +3462 -0
  40. biucingcli/template_data/android/template/gradle/wrapper/gradle-wrapper.jar +0 -0
  41. biucingcli/template_data/android/template/gradle/wrapper/gradle-wrapper.jar.sha256 +1 -0
  42. biucingcli/template_data/android/template/gradle/wrapper/gradle-wrapper.properties +10 -0
  43. biucingcli/template_data/android/template/gradle.properties +4 -0
  44. biucingcli/template_data/android/template/gradlew +252 -0
  45. biucingcli/template_data/android/template/gradlew.bat +94 -0
  46. biucingcli/template_data/android/template/scripts/artifact-info +11 -0
  47. biucingcli/template_data/android/template/scripts/bootstrap +17 -0
  48. biucingcli/template_data/android/template/scripts/doctor +133 -0
  49. biucingcli/template_data/android/template/scripts/setup-android-sdk +23 -0
  50. biucingcli/template_data/android/template/scripts/sync-gradle-wrapper +19 -0
  51. biucingcli/template_data/android/template/scripts/verify-gradle-supply-chain +61 -0
  52. biucingcli/template_data/android/template/scripts/verify-release-artifact +104 -0
  53. biucingcli/template_data/android/template/settings.gradle.kts +25 -0
  54. biucingcli/template_data/android/template.json +146 -0
  55. biucingcli/template_data/apple/template/.gitignore +28 -0
  56. biucingcli/template_data/apple/template/.mise.toml +4 -0
  57. biucingcli/template_data/apple/template/.swiftformat +10 -0
  58. biucingcli/template_data/apple/template/.swiftlint.yml +33 -0
  59. biucingcli/template_data/apple/template/App/Config/ProjectDescriptionHelpers/Module.swift +6 -0
  60. biucingcli/template_data/apple/template/App/Config/XCConfig/Base.xcconfig +4 -0
  61. biucingcli/template_data/apple/template/App/Project.swift +66 -0
  62. biucingcli/template_data/apple/template/App/Targets/App/Resources/.gitkeep +1 -0
  63. biucingcli/template_data/apple/template/App/Targets/App/Sources/AppEntry.swift +9 -0
  64. biucingcli/template_data/apple/template/App/Targets/App/Sources/HomeView.swift +18 -0
  65. biucingcli/template_data/apple/template/App/Targets/App/Sources/HomeViewModel.swift +38 -0
  66. biucingcli/template_data/apple/template/App/Targets/AppTests/Sources/AppTests.swift +59 -0
  67. biucingcli/template_data/apple/template/Brewfile +8 -0
  68. biucingcli/template_data/apple/template/Makefile +128 -0
  69. biucingcli/template_data/apple/template/Packages/AppServices/Package.swift +20 -0
  70. biucingcli/template_data/apple/template/Packages/AppServices/Sources/AppServices/StarterMetadata.swift +52 -0
  71. biucingcli/template_data/apple/template/Packages/DesignSystem/Package.swift +20 -0
  72. biucingcli/template_data/apple/template/Packages/DesignSystem/Sources/DesignSystem/Theme.swift +8 -0
  73. biucingcli/template_data/apple/template/README.md +133 -0
  74. biucingcli/template_data/apple/template/Tuist.swift +8 -0
  75. biucingcli/template_data/apple/template/Workspace.swift +11 -0
  76. biucingcli/template_data/apple/template/docs/release-delivery.md +55 -0
  77. biucingcli/template_data/apple/template/fastlane/.env.example +20 -0
  78. biucingcli/template_data/apple/template/fastlane/Appfile +3 -0
  79. biucingcli/template_data/apple/template/fastlane/Fastfile +126 -0
  80. biucingcli/template_data/apple/template/fastlane/Matchfile +7 -0
  81. biucingcli/template_data/apple/template/scripts/bootstrap +9 -0
  82. biucingcli/template_data/apple/template/scripts/doctor +163 -0
  83. biucingcli/template_data/apple/template/scripts/setup-xcode +6 -0
  84. biucingcli/template_data/apple/template/scripts/test-destination +42 -0
  85. biucingcli/template_data/apple/template/scripts/verify-release-identity +88 -0
  86. biucingcli/template_data/apple/template.json +110 -0
  87. biucingcli/template_data/frontend/template/.dockerignore +8 -0
  88. biucingcli/template_data/frontend/template/.env.example +1 -0
  89. biucingcli/template_data/frontend/template/.gitignore +7 -0
  90. biucingcli/template_data/frontend/template/.npmrc +1 -0
  91. biucingcli/template_data/frontend/template/.prettierignore +2 -0
  92. biucingcli/template_data/frontend/template/.prettierrc.json +4 -0
  93. biucingcli/template_data/frontend/template/Dockerfile +25 -0
  94. biucingcli/template_data/frontend/template/Dockerfile.dev +35 -0
  95. biucingcli/template_data/frontend/template/Dockerfile.dev.full +40 -0
  96. biucingcli/template_data/frontend/template/Makefile +137 -0
  97. biucingcli/template_data/frontend/template/README.md +146 -0
  98. biucingcli/template_data/frontend/template/compose.dev.yaml +29 -0
  99. biucingcli/template_data/frontend/template/eslint.config.js +27 -0
  100. biucingcli/template_data/frontend/template/index.html +12 -0
  101. biucingcli/template_data/frontend/template/nginx.conf +11 -0
  102. biucingcli/template_data/frontend/template/package.json +50 -0
  103. biucingcli/template_data/frontend/template/playwright.production.config.ts +21 -0
  104. biucingcli/template_data/frontend/template/playwright.smoke.config.ts +19 -0
  105. biucingcli/template_data/frontend/template/pnpm-lock.yaml +4054 -0
  106. biucingcli/template_data/frontend/template/public/.gitkeep +1 -0
  107. biucingcli/template_data/frontend/template/scripts/browser-smoke-production +55 -0
  108. biucingcli/template_data/frontend/template/scripts/doctor +46 -0
  109. biucingcli/template_data/frontend/template/src/App.test.tsx +18 -0
  110. biucingcli/template_data/frontend/template/src/App.tsx +5 -0
  111. biucingcli/template_data/frontend/template/src/components/MetricCard.tsx +14 -0
  112. biucingcli/template_data/frontend/template/src/components/TaskPanel.tsx +32 -0
  113. biucingcli/template_data/frontend/template/src/config/env.ts +3 -0
  114. biucingcli/template_data/frontend/template/src/hooks/useProjectOverview.ts +24 -0
  115. biucingcli/template_data/frontend/template/src/index.css +208 -0
  116. biucingcli/template_data/frontend/template/src/main.tsx +11 -0
  117. biucingcli/template_data/frontend/template/src/pages/HomePage.tsx +60 -0
  118. biucingcli/template_data/frontend/template/src/router/AppRouter.tsx +14 -0
  119. biucingcli/template_data/frontend/template/src/services/api/client.ts +33 -0
  120. biucingcli/template_data/frontend/template/src/services/projectOverview.ts +39 -0
  121. biucingcli/template_data/frontend/template/src/test/setup.ts +1 -0
  122. biucingcli/template_data/frontend/template/src/types/projectOverview.ts +22 -0
  123. biucingcli/template_data/frontend/template/src/vite-env.d.ts +9 -0
  124. biucingcli/template_data/frontend/template/tests/browser-smoke.spec.ts +16 -0
  125. biucingcli/template_data/frontend/template/tests/production-browser-smoke.spec.ts +22 -0
  126. biucingcli/template_data/frontend/template/tsconfig.json +21 -0
  127. biucingcli/template_data/frontend/template/vite.config.ts +12 -0
  128. biucingcli/template_data/frontend/template.json +81 -0
  129. biucingcli/template_data/harmonyos/template/.gitignore +21 -0
  130. biucingcli/template_data/harmonyos/template/.mise.toml +2 -0
  131. biucingcli/template_data/harmonyos/template/AppScope/app.json5 +10 -0
  132. biucingcli/template_data/harmonyos/template/AppScope/resources/base/element/string.json +8 -0
  133. biucingcli/template_data/harmonyos/template/AppScope/resources/base/media/background.svg +3 -0
  134. biucingcli/template_data/harmonyos/template/AppScope/resources/base/media/foreground.svg +4 -0
  135. biucingcli/template_data/harmonyos/template/AppScope/resources/base/media/layered_image.json +6 -0
  136. biucingcli/template_data/harmonyos/template/Makefile +106 -0
  137. biucingcli/template_data/harmonyos/template/README.md +152 -0
  138. biucingcli/template_data/harmonyos/template/build-profile.json5 +36 -0
  139. biucingcli/template_data/harmonyos/template/code-linter.json5 +12 -0
  140. biucingcli/template_data/harmonyos/template/docs/release-signing.local.properties.example +14 -0
  141. biucingcli/template_data/harmonyos/template/entry/build-profile.json5 +9 -0
  142. biucingcli/template_data/harmonyos/template/entry/hvigorfile.ts +6 -0
  143. biucingcli/template_data/harmonyos/template/entry/oh-package.json5 +9 -0
  144. biucingcli/template_data/harmonyos/template/entry/src/main/ets/core/config/AppConfig.ets +10 -0
  145. biucingcli/template_data/harmonyos/template/entry/src/main/ets/core/designsystem/Tokens.ets +28 -0
  146. biucingcli/template_data/harmonyos/template/entry/src/main/ets/entryability/EntryAbility.ets +29 -0
  147. biucingcli/template_data/harmonyos/template/entry/src/main/ets/pages/Index.ets +47 -0
  148. biucingcli/template_data/harmonyos/template/entry/src/main/ets/pages/Settings.ets +96 -0
  149. biucingcli/template_data/harmonyos/template/entry/src/main/module.json5 +34 -0
  150. biucingcli/template_data/harmonyos/template/entry/src/main/resources/base/element/color.json +24 -0
  151. biucingcli/template_data/harmonyos/template/entry/src/main/resources/base/element/string.json +12 -0
  152. biucingcli/template_data/harmonyos/template/entry/src/main/resources/base/media/app_icon.svg +5 -0
  153. biucingcli/template_data/harmonyos/template/entry/src/main/resources/base/profile/main_pages.json +6 -0
  154. biucingcli/template_data/harmonyos/template/entry/src/test/List.test.ets +11 -0
  155. biucingcli/template_data/harmonyos/template/hvigor/hvigor-config.json5 +8 -0
  156. biucingcli/template_data/harmonyos/template/hvigorfile.ts +6 -0
  157. biucingcli/template_data/harmonyos/template/oh-package-lock.json5 +19 -0
  158. biucingcli/template_data/harmonyos/template/oh-package.json5 +13 -0
  159. biucingcli/template_data/harmonyos/template/scripts/artifact-info +31 -0
  160. biucingcli/template_data/harmonyos/template/scripts/bootstrap +38 -0
  161. biucingcli/template_data/harmonyos/template/scripts/doctor +147 -0
  162. biucingcli/template_data/harmonyos/template/scripts/lint +105 -0
  163. biucingcli/template_data/harmonyos/template/scripts/release-build +199 -0
  164. biucingcli/template_data/harmonyos/template/scripts/release-preflight +109 -0
  165. biucingcli/template_data/harmonyos/template/scripts/test +28 -0
  166. biucingcli/template_data/harmonyos/template/scripts/verify-release-artifact +173 -0
  167. biucingcli/template_data/harmonyos/template/scripts/verify-supply-chain +70 -0
  168. biucingcli/template_data/harmonyos/template.json +134 -0
  169. biucingcli/template_data/microservice/template/.air.toml +11 -0
  170. biucingcli/template_data/microservice/template/.dockerignore +5 -0
  171. biucingcli/template_data/microservice/template/.gitignore +4 -0
  172. biucingcli/template_data/microservice/template/.mise.toml +3 -0
  173. biucingcli/template_data/microservice/template/Brewfile +7 -0
  174. biucingcli/template_data/microservice/template/Dockerfile +44 -0
  175. biucingcli/template_data/microservice/template/Dockerfile.dev +50 -0
  176. biucingcli/template_data/microservice/template/Makefile +145 -0
  177. biucingcli/template_data/microservice/template/README.md +191 -0
  178. biucingcli/template_data/microservice/template/api/buf.gen.yaml +11 -0
  179. biucingcli/template_data/microservice/template/api/buf.yaml +11 -0
  180. biucingcli/template_data/microservice/template/api/proto/service/v1/service.proto +18 -0
  181. biucingcli/template_data/microservice/template/cmd/server/main.go +81 -0
  182. biucingcli/template_data/microservice/template/compose.dev.yaml +49 -0
  183. biucingcli/template_data/microservice/template/configs/config.yaml +18 -0
  184. biucingcli/template_data/microservice/template/deploy/compose.yaml +35 -0
  185. biucingcli/template_data/microservice/template/deploy/otel-collector.yaml +15 -0
  186. biucingcli/template_data/microservice/template/go.mod +53 -0
  187. biucingcli/template_data/microservice/template/go.sum +138 -0
  188. biucingcli/template_data/microservice/template/internal/config/config.go +112 -0
  189. biucingcli/template_data/microservice/template/internal/config/config_test.go +92 -0
  190. biucingcli/template_data/microservice/template/internal/handler/health.go +25 -0
  191. biucingcli/template_data/microservice/template/internal/handler/ping.go +25 -0
  192. biucingcli/template_data/microservice/template/internal/model/health.go +8 -0
  193. biucingcli/template_data/microservice/template/internal/model/ping.go +7 -0
  194. biucingcli/template_data/microservice/template/internal/repository/.gitkeep +1 -0
  195. biucingcli/template_data/microservice/template/internal/router/router.go +26 -0
  196. biucingcli/template_data/microservice/template/internal/runtime/server.go +116 -0
  197. biucingcli/template_data/microservice/template/internal/runtime/server_test.go +161 -0
  198. biucingcli/template_data/microservice/template/internal/service/health.go +26 -0
  199. biucingcli/template_data/microservice/template/internal/service/ping.go +23 -0
  200. biucingcli/template_data/microservice/template/internal/telemetry/telemetry.go +56 -0
  201. biucingcli/template_data/microservice/template/internal/transport/grpc.go +51 -0
  202. biucingcli/template_data/microservice/template/internal/transport/ping.go +28 -0
  203. biucingcli/template_data/microservice/template/scripts/bootstrap +29 -0
  204. biucingcli/template_data/microservice/template/scripts/doctor +115 -0
  205. biucingcli/template_data/microservice/template/tests/server_test.go +153 -0
  206. biucingcli/template_data/microservice/template.json +114 -0
  207. biucingcli/template_data/web-service/template/.air.toml +11 -0
  208. biucingcli/template_data/web-service/template/.dockerignore +5 -0
  209. biucingcli/template_data/web-service/template/.gitignore +5 -0
  210. biucingcli/template_data/web-service/template/.mise.toml +2 -0
  211. biucingcli/template_data/web-service/template/Brewfile +5 -0
  212. biucingcli/template_data/web-service/template/Dockerfile +41 -0
  213. biucingcli/template_data/web-service/template/Dockerfile.dev +45 -0
  214. biucingcli/template_data/web-service/template/Makefile +113 -0
  215. biucingcli/template_data/web-service/template/README.md +164 -0
  216. biucingcli/template_data/web-service/template/cmd/server/main.go +50 -0
  217. biucingcli/template_data/web-service/template/compose.dev.yaml +28 -0
  218. biucingcli/template_data/web-service/template/compose.yaml +14 -0
  219. biucingcli/template_data/web-service/template/configs/config.yaml +10 -0
  220. biucingcli/template_data/web-service/template/go.mod +36 -0
  221. biucingcli/template_data/web-service/template/go.sum +89 -0
  222. biucingcli/template_data/web-service/template/internal/config/config.go +84 -0
  223. biucingcli/template_data/web-service/template/internal/config/config_test.go +88 -0
  224. biucingcli/template_data/web-service/template/internal/handler/health.go +25 -0
  225. biucingcli/template_data/web-service/template/internal/handler/ping.go +25 -0
  226. biucingcli/template_data/web-service/template/internal/handler/user.go +40 -0
  227. biucingcli/template_data/web-service/template/internal/model/health.go +6 -0
  228. biucingcli/template_data/web-service/template/internal/model/ping.go +7 -0
  229. biucingcli/template_data/web-service/template/internal/model/user.go +7 -0
  230. biucingcli/template_data/web-service/template/internal/repository/.gitkeep +1 -0
  231. biucingcli/template_data/web-service/template/internal/repository/user.go +37 -0
  232. biucingcli/template_data/web-service/template/internal/router/router.go +28 -0
  233. biucingcli/template_data/web-service/template/internal/runtime/server.go +76 -0
  234. biucingcli/template_data/web-service/template/internal/runtime/server_test.go +139 -0
  235. biucingcli/template_data/web-service/template/internal/service/health.go +22 -0
  236. biucingcli/template_data/web-service/template/internal/service/ping.go +23 -0
  237. biucingcli/template_data/web-service/template/internal/service/user.go +27 -0
  238. biucingcli/template_data/web-service/template/scripts/bootstrap +23 -0
  239. biucingcli/template_data/web-service/template/scripts/doctor +83 -0
  240. biucingcli/template_data/web-service/template/tests/server_test.go +160 -0
  241. biucingcli/template_data/web-service/template.json +88 -0
  242. biucingcli/template_data/worker/template/.dockerignore +3 -0
  243. biucingcli/template_data/worker/template/.gitignore +2 -0
  244. biucingcli/template_data/worker/template/.mise.toml +2 -0
  245. biucingcli/template_data/worker/template/Brewfile +1 -0
  246. biucingcli/template_data/worker/template/Dockerfile +19 -0
  247. biucingcli/template_data/worker/template/Dockerfile.dev +9 -0
  248. biucingcli/template_data/worker/template/Makefile +105 -0
  249. biucingcli/template_data/worker/template/README.md +164 -0
  250. biucingcli/template_data/worker/template/cmd/worker/main.go +41 -0
  251. biucingcli/template_data/worker/template/compose.dev.yaml +29 -0
  252. biucingcli/template_data/worker/template/configs/config.json +11 -0
  253. biucingcli/template_data/worker/template/go.mod +3 -0
  254. biucingcli/template_data/worker/template/go.sum +1 -0
  255. biucingcli/template_data/worker/template/internal/config/config.go +108 -0
  256. biucingcli/template_data/worker/template/internal/config/config_test.go +86 -0
  257. biucingcli/template_data/worker/template/internal/runtime/runner.go +199 -0
  258. biucingcli/template_data/worker/template/internal/runtime/runner_test.go +215 -0
  259. biucingcli/template_data/worker/template/internal/task/heartbeat.go +19 -0
  260. biucingcli/template_data/worker/template/scripts/bootstrap +6 -0
  261. biucingcli/template_data/worker/template/scripts/doctor +41 -0
  262. biucingcli/template_data/worker/template/tests/worker_test.go +44 -0
  263. biucingcli/template_data/worker/template.json +100 -0
  264. biucingcli/templates.py +902 -0
  265. biucingcli-0.9.1.dist-info/METADATA +204 -0
  266. biucingcli-0.9.1.dist-info/RECORD +269 -0
  267. biucingcli-0.9.1.dist-info/WHEEL +5 -0
  268. biucingcli-0.9.1.dist-info/entry_points.txt +2 -0
  269. biucingcli-0.9.1.dist-info/top_level.txt +1 -0
@@ -0,0 +1,163 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ failures=0
5
+ warnings=0
6
+ platform="{{APPLE_PLATFORM}}"
7
+ platform_name="{{APPLE_PLATFORM_NAME}}"
8
+ repo_root="$(pwd)"
9
+ worktree_id="${WORKTREE_ID:-$(printf '%s' "$repo_root" | shasum | cut -c1-8)}"
10
+ tuist_home="${TUIST_HOME:-${repo_root}/.cache/tuist/${worktree_id}/home}"
11
+ tuist_xdg_cache="${TUIST_XDG_CACHE_HOME:-${repo_root}/.cache/tuist/${worktree_id}/xdg-cache}"
12
+ tuist_xdg_state="${TUIST_XDG_STATE_HOME:-${repo_root}/.cache/tuist/${worktree_id}/xdg-state}"
13
+ tuist_xdg_config="${TUIST_XDG_CONFIG_HOME:-${repo_root}/.cache/tuist/${worktree_id}/xdg-config}"
14
+ tuist_tmp="${TUIST_TMPDIR:-${repo_root}/.cache/tuist/${worktree_id}/tmp}"
15
+
16
+ pass() {
17
+ echo "[pass] $1"
18
+ }
19
+
20
+ warn() {
21
+ echo "[warn] $1"
22
+ warnings=$((warnings + 1))
23
+ }
24
+
25
+ fail() {
26
+ echo "[fail] $1"
27
+ failures=$((failures + 1))
28
+ }
29
+
30
+ echo "Apple environment doctor"
31
+ echo "platform: ${platform_name}"
32
+
33
+ developer_dir=""
34
+ if developer_dir="$(xcode-select -p 2>/dev/null)"; then
35
+ pass "xcode-select points to ${developer_dir}"
36
+ else
37
+ fail "xcode-select is not configured. Open Xcode once or run 'sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer'."
38
+ fi
39
+
40
+ if command -v xcodebuild >/dev/null 2>&1; then
41
+ xcodebuild_version="$(xcodebuild -version 2>&1 || true)"
42
+ if [[ "$xcodebuild_version" == Xcode* ]]; then
43
+ pass "xcodebuild is available"
44
+ echo "$xcodebuild_version" | sed -n '1,2p'
45
+ else
46
+ fail "xcodebuild is installed but not usable. Output: ${xcodebuild_version}"
47
+ fi
48
+ else
49
+ fail "xcodebuild is not available. Install Xcode and accept the license before building."
50
+ fi
51
+
52
+ if command -v tuist >/dev/null 2>&1; then
53
+ mkdir -p "$tuist_home" "$tuist_xdg_cache" "$tuist_xdg_state" "$tuist_xdg_config" "$tuist_tmp"
54
+ tuist_version_output="$(
55
+ HOME="$tuist_home" \
56
+ XDG_CACHE_HOME="$tuist_xdg_cache" \
57
+ XDG_STATE_HOME="$tuist_xdg_state" \
58
+ XDG_CONFIG_HOME="$tuist_xdg_config" \
59
+ TMPDIR="$tuist_tmp" \
60
+ tuist version 2>&1 || true
61
+ )"
62
+ if [[ "$tuist_version_output" =~ ^[0-9] ]]; then
63
+ pass "tuist is available"
64
+ echo "tuist: ${tuist_version_output}"
65
+ else
66
+ fail "tuist is installed but not usable. Output: ${tuist_version_output}"
67
+ fi
68
+ else
69
+ fail "tuist is not available. Run 'brew bundle' or install Tuist before generating the workspace."
70
+ fi
71
+
72
+ if command -v swift >/dev/null 2>&1; then
73
+ swift_version_output="$(swift --version 2>&1 || true)"
74
+ if [[ "$swift_version_output" == *"swift-driver version"* || "$swift_version_output" == *"Apple Swift version"* ]]; then
75
+ pass "swift is available"
76
+ echo "$swift_version_output" | head -n 1
77
+ else
78
+ fail "swift is installed but not usable. Output: ${swift_version_output}"
79
+ fi
80
+ else
81
+ fail "swift is not available. Install Xcode command line tools before continuing."
82
+ fi
83
+
84
+ if command -v swiftlint >/dev/null 2>&1; then
85
+ swiftlint_version_output="$(swiftlint version 2>&1 || true)"
86
+ if [[ -n "$swiftlint_version_output" ]]; then
87
+ pass "swiftlint is available"
88
+ echo "swiftlint: ${swiftlint_version_output}"
89
+ else
90
+ fail "swiftlint is installed but did not return a version."
91
+ fi
92
+ else
93
+ fail "swiftlint is not available. Run 'brew bundle' before using make lint."
94
+ fi
95
+
96
+ if command -v swiftformat >/dev/null 2>&1; then
97
+ swiftformat_version_output="$(swiftformat --version 2>&1 || true)"
98
+ if [[ -n "$swiftformat_version_output" ]]; then
99
+ pass "swiftformat is available"
100
+ echo "swiftformat: ${swiftformat_version_output}"
101
+ else
102
+ fail "swiftformat is installed but did not return a version."
103
+ fi
104
+ else
105
+ fail "swiftformat is not available. Run 'brew bundle' before using make format."
106
+ fi
107
+
108
+ if command -v fastlane >/dev/null 2>&1; then
109
+ fastlane_version_output="$(fastlane --version 2>&1 || true)"
110
+ if [[ -n "$fastlane_version_output" ]]; then
111
+ pass "fastlane is available"
112
+ echo "$fastlane_version_output" | sed -n '1p'
113
+ else
114
+ warn "fastlane is installed but did not return version information. Beta and release automation may fail."
115
+ fi
116
+ else
117
+ warn "fastlane is not available. Run 'brew bundle' before using make beta or make release."
118
+ fi
119
+
120
+ if command -v xcrun >/dev/null 2>&1; then
121
+ simctl_output="$(xcrun simctl list devices available 2>&1 || true)"
122
+ if [[ "$simctl_output" == *"Unable to locate device set"* || "$simctl_output" == *"CoreSimulatorService connection became invalid"* || "$simctl_output" == *"Failed to initialize simulator device set"* ]]; then
123
+ if [[ "$platform" == "macos" ]]; then
124
+ warn "xcrun simctl is installed but simulator services are not ready. macOS builds can still proceed, but iOS-family simulator workflows may fail. Output: ${simctl_output}"
125
+ else
126
+ fail "xcrun simctl could not inspect available simulators. Resolve CoreSimulator service issues before running ${platform_name} tests. Output: ${simctl_output}"
127
+ fi
128
+ elif [[ "$simctl_output" == *"=="* || -n "$(printf '%s' "$simctl_output" | sed '/^$/d')" ]]; then
129
+ available_devices="$(printf '%s\n' "$simctl_output" | rg -c '^ ' || true)"
130
+ if [[ "${available_devices:-0}" -gt 0 ]]; then
131
+ pass "xcrun simctl can see ${available_devices} available simulator device(s)"
132
+ else
133
+ if [[ "$platform" == "macos" ]]; then
134
+ warn "xcrun simctl is available, but no simulator devices were listed. macOS builds can still proceed."
135
+ else
136
+ fail "xcrun simctl is available, but no simulator devices were listed. Install a ${platform_name} runtime and create a simulator before running tests."
137
+ fi
138
+ fi
139
+ else
140
+ if [[ "$platform" == "macos" ]]; then
141
+ warn "xcrun simctl returned an unexpected result. macOS builds can still proceed, but simulator inspection is unreliable. Output: ${simctl_output}"
142
+ else
143
+ fail "xcrun simctl returned an unexpected result while checking simulators. Output: ${simctl_output}"
144
+ fi
145
+ fi
146
+ else
147
+ if [[ "$platform" == "macos" ]]; then
148
+ warn "xcrun is not available, so simulator readiness could not be checked."
149
+ else
150
+ fail "xcrun is not available, so simulator readiness could not be checked for ${platform_name}."
151
+ fi
152
+ fi
153
+
154
+ if (( failures > 0 )); then
155
+ echo "Doctor found ${failures} issue(s) and ${warnings} warning(s)."
156
+ exit 1
157
+ fi
158
+
159
+ if (( warnings > 0 )); then
160
+ echo "Doctor completed with ${warnings} warning(s)."
161
+ else
162
+ echo "Environment looks ready."
163
+ fi
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ DEVELOPER_DIR_PATH="$(xcode-select -p)"
5
+ echo "Using developer directory: ${DEVELOPER_DIR_PATH}"
6
+ xcodebuild -version
@@ -0,0 +1,42 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ platform="${1:-ios}"
5
+
6
+ case "$platform" in
7
+ ios)
8
+ runtime_label="iOS"
9
+ ;;
10
+ watchos)
11
+ runtime_label="watchOS"
12
+ ;;
13
+ tvos)
14
+ runtime_label="tvOS"
15
+ ;;
16
+ macos)
17
+ printf '%s\n' "platform=macOS"
18
+ exit 0
19
+ ;;
20
+ *)
21
+ printf 'Unsupported Apple platform for tests: %s\n' "$platform" >&2
22
+ exit 1
23
+ ;;
24
+ esac
25
+
26
+ device_line="$(
27
+ xcrun simctl list devices available 2>/dev/null \
28
+ | awk -v label="$runtime_label" '
29
+ $0 ~ "^-- " label " " { active = 1; next }
30
+ $0 ~ "^-- " { active = 0 }
31
+ active && /^ / { print; exit }
32
+ '
33
+ )"
34
+
35
+ udid="$(printf '%s\n' "$device_line" | sed -E 's/.*\(([0-9A-Fa-f-]{36})\).*/\1/')"
36
+
37
+ if [[ -z "$udid" || "$udid" == "$device_line" ]]; then
38
+ printf 'No available %s simulator was found. Install a runtime and create a simulator, then rerun make test.\n' "$runtime_label" >&2
39
+ exit 1
40
+ fi
41
+
42
+ printf 'id=%s\n' "$udid"
@@ -0,0 +1,88 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require "json"
5
+ require "open3"
6
+
7
+ EXPECTED_BUNDLE_IDENTIFIER = "{{BUNDLE_IDENTIFIER}}"
8
+ WORKSPACE = "{{PROJECT_NAME}}.xcworkspace"
9
+ SCHEME = "{{SWIFT_MODULE_NAME}}"
10
+
11
+ def fail_identity(message, actual: nil)
12
+ warn "Apple release identity check failed: #{message}"
13
+ warn "Expected: #{EXPECTED_BUNDLE_IDENTIFIER}"
14
+ warn "Actual: #{actual || '<missing>'}"
15
+ exit 1
16
+ end
17
+
18
+ def run_command(*command)
19
+ stdout, stderr, status = Open3.capture3(*command)
20
+ return stdout if status.success?
21
+
22
+ warn stderr unless stderr.empty?
23
+ fail_identity("command failed: #{command.join(' ')}")
24
+ rescue Errno::ENOENT => error
25
+ fail_identity("command is unavailable: #{error.message}")
26
+ end
27
+
28
+ def verify_workspace
29
+ output = run_command(
30
+ "xcodebuild",
31
+ "-workspace", WORKSPACE,
32
+ "-scheme", SCHEME,
33
+ "-configuration", "Release",
34
+ "-showBuildSettings",
35
+ "-json"
36
+ )
37
+
38
+ settings = JSON.parse(output)
39
+ fail_identity("xcodebuild JSON root must be an array") unless settings.is_a?(Array)
40
+
41
+ app_targets = settings.select { |entry| entry["target"] == SCHEME }
42
+ unless app_targets.length == 1
43
+ fail_identity("expected exactly one Release build-settings entry for target #{SCHEME}")
44
+ end
45
+
46
+ actual = app_targets.first.fetch("buildSettings", {})["PRODUCT_BUNDLE_IDENTIFIER"]
47
+ unless actual == EXPECTED_BUNDLE_IDENTIFIER
48
+ fail_identity("Release build settings use the wrong bundle identifier", actual: actual)
49
+ end
50
+
51
+ puts "Apple Release workspace identity verified: #{actual}"
52
+ rescue JSON::ParserError => error
53
+ fail_identity("xcodebuild returned invalid JSON: #{error.message}")
54
+ end
55
+
56
+ def verify_archive(path)
57
+ info_plist = File.join(path, "Info.plist")
58
+ fail_identity("archive Info.plist is missing: #{info_plist}") unless File.file?(info_plist)
59
+
60
+ actual = run_command(
61
+ "/usr/libexec/PlistBuddy",
62
+ "-c", "Print :ApplicationProperties:CFBundleIdentifier",
63
+ info_plist
64
+ ).strip
65
+ unless actual == EXPECTED_BUNDLE_IDENTIFIER
66
+ fail_identity("archive uses the wrong bundle identifier", actual: actual)
67
+ end
68
+
69
+ puts "Apple Release archive identity verified: #{actual}"
70
+ end
71
+
72
+ mode = ARGV.shift
73
+
74
+ case mode
75
+ when "workspace"
76
+ fail_identity("workspace mode does not accept extra arguments") unless ARGV.empty?
77
+ verify_workspace
78
+ when "archive"
79
+ archive_path = ARGV.shift
80
+ if archive_path.to_s.empty? || !ARGV.empty?
81
+ fail_identity("archive mode requires exactly one xcarchive path")
82
+ end
83
+ verify_archive(archive_path)
84
+ else
85
+ warn "Usage: ./scripts/verify-release-identity workspace"
86
+ warn " ./scripts/verify-release-identity archive PATH_TO_XCARCHIVE"
87
+ exit 2
88
+ end
@@ -0,0 +1,110 @@
1
+ {
2
+ "name": "apple",
3
+ "description": "Swift + Tuist Apple app starter for mid-sized teams",
4
+ "category": "native",
5
+ "stack": ["Swift", "Tuist", "SwiftPM", "fastlane"],
6
+ "tags": ["apple", "swiftui", "tuist", "fastlane"],
7
+ "platforms": ["ios", "macos", "watchos", "tvos"],
8
+ "maturity": {
9
+ "level": "validated",
10
+ "summary": "Multi-platform Apple starter with doctor, generate, lint, test, beta, and release workflows."
11
+ },
12
+ "validation": {
13
+ "status": "generated-project-verified",
14
+ "verification_tier": "generated-project",
15
+ "evidence": [
16
+ "python unittest template rendering coverage",
17
+ "real generated project make generate/build/test validation"
18
+ ]
19
+ },
20
+ "operating_assumptions": [
21
+ "The starter assumes a native Apple workstation with Xcode-oriented tooling and simulator-first validation.",
22
+ "Generated projects should keep bootstrap, doctor, generate, lint, test, beta, and release workflows explicit."
23
+ ],
24
+ "workflow_labels": ["bootstrap", "doctor", "generate", "lint", "test", "build", "release", "open"],
25
+ "commands": {
26
+ "bootstrap": "make bootstrap",
27
+ "doctor": "make doctor",
28
+ "lint": "make lint",
29
+ "test": "make test",
30
+ "verify": "make verify",
31
+ "build": "make build",
32
+ "clean": "make clean",
33
+ "help": "make help"
34
+ },
35
+ "worktree": {
36
+ "support_level": "worktree-ready",
37
+ "isolation_dimensions": [
38
+ "caches",
39
+ "generated-output",
40
+ "local-config",
41
+ "installed-app-identity",
42
+ "cleanup",
43
+ "diagnostics"
44
+ ],
45
+ "diagnostics": [
46
+ "make worktree-info",
47
+ "make worktree-doctor"
48
+ ],
49
+ "cleanup": [
50
+ "make clean-worktree"
51
+ ]
52
+ },
53
+ "variables": [
54
+ {
55
+ "name": "project_name",
56
+ "required": true,
57
+ "validator": "project-name"
58
+ },
59
+ {
60
+ "name": "display_name",
61
+ "required": false,
62
+ "default_from": "project_name",
63
+ "validator": "display-name"
64
+ },
65
+ {
66
+ "name": "apple_platform",
67
+ "required": false,
68
+ "default": "ios",
69
+ "validator": "choice",
70
+ "choices": ["ios", "macos", "watchos", "tvos"]
71
+ },
72
+ {
73
+ "name": "bundle_identifier",
74
+ "required": true,
75
+ "prompt": "Bundle identifier: ",
76
+ "validator": "bundle-identifier"
77
+ },
78
+ {
79
+ "name": "organization_name",
80
+ "required": false,
81
+ "default": "Example Team",
82
+ "validator": "display-name"
83
+ },
84
+ {
85
+ "name": "development_team",
86
+ "required": false,
87
+ "default": "DEVELOPMENT_TEAM_ID",
88
+ "validator": "team-id"
89
+ },
90
+ {
91
+ "name": "minimum_os_version",
92
+ "required": false,
93
+ "default": "26.0",
94
+ "validator": "apple-version"
95
+ },
96
+ {
97
+ "name": "swift_module_name",
98
+ "required": false,
99
+ "validator": "identifier"
100
+ }
101
+ ],
102
+ "next_steps": [
103
+ "make bootstrap",
104
+ "make doctor",
105
+ "make generate",
106
+ "make lint",
107
+ "make test",
108
+ "open {{PROJECT_NAME}}.xcworkspace"
109
+ ]
110
+ }
@@ -0,0 +1,8 @@
1
+ node_modules/
2
+ .pnpm-home/
3
+ .pnpm-store/
4
+ dist/
5
+ playwright-report/
6
+ test-results/
7
+ .git/
8
+ .DS_Store
@@ -0,0 +1 @@
1
+ VITE_API_BASE_URL=http://localhost:8080
@@ -0,0 +1,7 @@
1
+ node_modules/
2
+ .pnpm-home/
3
+ .pnpm-store/
4
+ dist/
5
+ playwright-report/
6
+ test-results/
7
+ .DS_Store
@@ -0,0 +1 @@
1
+ store-dir=.pnpm-store
@@ -0,0 +1,2 @@
1
+ dist
2
+ node_modules
@@ -0,0 +1,4 @@
1
+ {
2
+ "singleQuote": false,
3
+ "trailingComma": "all"
4
+ }
@@ -0,0 +1,25 @@
1
+ ARG BUILDER_IMAGE=node:20-alpine
2
+ ARG RUNTIME_IMAGE=nginx:1.27-alpine
3
+
4
+ FROM ${BUILDER_IMAGE} AS builder
5
+
6
+ WORKDIR /app
7
+
8
+ COPY package.json pnpm-lock.yaml ./
9
+ RUN corepack enable && corepack prepare pnpm@9.9.0 --activate \
10
+ && pnpm install --frozen-lockfile
11
+
12
+ COPY . .
13
+ RUN pnpm build
14
+
15
+ FROM ${RUNTIME_IMAGE}
16
+
17
+ COPY nginx.conf /etc/nginx/conf.d/default.conf
18
+ COPY --from=builder /app/dist /usr/share/nginx/html
19
+
20
+ EXPOSE 80
21
+
22
+ HEALTHCHECK --interval=1s --timeout=2s --start-period=2s --retries=30 \
23
+ CMD wget -q -O /dev/null http://127.0.0.1/ || exit 1
24
+
25
+ CMD ["nginx", "-g", "daemon off;"]
@@ -0,0 +1,35 @@
1
+ ARG DEV_BASE_IMAGE=node:20-bookworm
2
+ FROM ${DEV_BASE_IMAGE}
3
+
4
+ WORKDIR /workspace
5
+
6
+ RUN apt-get update \
7
+ && apt-get install -y --no-install-recommends \
8
+ bash \
9
+ ca-certificates \
10
+ git \
11
+ libasound2 \
12
+ libatk-bridge2.0-0 \
13
+ libatk1.0-0 \
14
+ libatspi2.0-0 \
15
+ libcups2 \
16
+ libdbus-1-3 \
17
+ libgbm1 \
18
+ libgtk-3-0 \
19
+ libnspr4 \
20
+ libnss3 \
21
+ libxcomposite1 \
22
+ libxdamage1 \
23
+ libxfixes3 \
24
+ libxkbcommon0 \
25
+ libxrandr2 \
26
+ && rm -rf /var/lib/apt/lists/*
27
+
28
+ RUN corepack enable && corepack prepare pnpm@9.9.0 --activate
29
+
30
+ ENV CI=1
31
+ ENV PNPM_STORE_DIR=/pnpm-store
32
+ ENV npm_config_store_dir=/pnpm-store
33
+ ENV PLAYWRIGHT_BROWSERS_PATH=/ms-playwright
34
+
35
+ CMD ["bash", "-lc", "if [ ! -d node_modules/.pnpm ]; then pnpm install --frozen-lockfile; fi; pnpm dev --host 0.0.0.0 --port 5173"]
@@ -0,0 +1,40 @@
1
+ ARG DEV_BASE_IMAGE=node:20-bookworm
2
+ FROM ${DEV_BASE_IMAGE}
3
+
4
+ WORKDIR /workspace
5
+
6
+ RUN apt-get update \
7
+ && apt-get install -y --no-install-recommends \
8
+ bash \
9
+ ca-certificates \
10
+ git \
11
+ libasound2 \
12
+ libatk-bridge2.0-0 \
13
+ libatk1.0-0 \
14
+ libatspi2.0-0 \
15
+ libcups2 \
16
+ libdbus-1-3 \
17
+ libgbm1 \
18
+ libgtk-3-0 \
19
+ libnspr4 \
20
+ libnss3 \
21
+ libxcomposite1 \
22
+ libxdamage1 \
23
+ libxfixes3 \
24
+ libxkbcommon0 \
25
+ libxrandr2 \
26
+ && rm -rf /var/lib/apt/lists/*
27
+
28
+ RUN corepack enable && corepack prepare pnpm@9.9.0 --activate
29
+
30
+ ENV CI=1
31
+ ENV PNPM_STORE_DIR=/pnpm-store
32
+ ENV npm_config_store_dir=/pnpm-store
33
+ ENV PLAYWRIGHT_BROWSERS_PATH=/ms-playwright
34
+
35
+ COPY package.json pnpm-lock.yaml ./
36
+ RUN pnpm install --frozen-lockfile \
37
+ && pnpm exec playwright install chromium \
38
+ && rm -rf node_modules
39
+
40
+ CMD ["bash", "-lc", "if [ ! -d node_modules/.pnpm ]; then pnpm install --frozen-lockfile; fi; pnpm dev --host 0.0.0.0 --port 5173"]