cellon 1.4.0__tar.gz

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 (318) hide show
  1. cellon-1.4.0/.github/workflows/ci.yml +171 -0
  2. cellon-1.4.0/.github/workflows/docs.yml +66 -0
  3. cellon-1.4.0/.github/workflows/publish.yml +193 -0
  4. cellon-1.4.0/.gitignore +118 -0
  5. cellon-1.4.0/CLAUDE.md +467 -0
  6. cellon-1.4.0/CONTRIBUTING.md +173 -0
  7. cellon-1.4.0/Cargo.lock +4440 -0
  8. cellon-1.4.0/Cargo.toml +188 -0
  9. cellon-1.4.0/ENTERPRISE_ROADMAP.md +472 -0
  10. cellon-1.4.0/LICENSE +21 -0
  11. cellon-1.4.0/PKG-INFO +773 -0
  12. cellon-1.4.0/PLAN.md +51 -0
  13. cellon-1.4.0/PUBLISHING.md +74 -0
  14. cellon-1.4.0/README.md +721 -0
  15. cellon-1.4.0/benchmarks/README.md +135 -0
  16. cellon-1.4.0/benchmarks/benchmark.py +475 -0
  17. cellon-1.4.0/benchmarks/compare/README.md +58 -0
  18. cellon-1.4.0/benchmarks/compare/apps/__init__.py +0 -0
  19. cellon-1.4.0/benchmarks/compare/apps/blacksheep_app.py +9 -0
  20. cellon-1.4.0/benchmarks/compare/apps/cello_app.py +15 -0
  21. cellon-1.4.0/benchmarks/compare/apps/fastapi_app.py +9 -0
  22. cellon-1.4.0/benchmarks/compare/apps/robyn_app.py +13 -0
  23. cellon-1.4.0/benchmarks/compare/requirements.txt +9 -0
  24. cellon-1.4.0/benchmarks/compare/run_benchmarks.py +702 -0
  25. cellon-1.4.0/benchmarks/quick_bench.py +231 -0
  26. cellon-1.4.0/cello.md +204 -0
  27. cellon-1.4.0/docs/community/code-of-conduct.md +103 -0
  28. cellon-1.4.0/docs/community/contributing.md +305 -0
  29. cellon-1.4.0/docs/community/index.md +227 -0
  30. cellon-1.4.0/docs/community/support.md +120 -0
  31. cellon-1.4.0/docs/data-layer.md +203 -0
  32. cellon-1.4.0/docs/enterprise/deployment/docker.md +201 -0
  33. cellon-1.4.0/docs/enterprise/deployment/kubernetes.md +245 -0
  34. cellon-1.4.0/docs/enterprise/deployment/service-mesh.md +225 -0
  35. cellon-1.4.0/docs/enterprise/index.md +408 -0
  36. cellon-1.4.0/docs/enterprise/integration/database.md +144 -0
  37. cellon-1.4.0/docs/enterprise/integration/graphql.md +195 -0
  38. cellon-1.4.0/docs/enterprise/integration/grpc.md +203 -0
  39. cellon-1.4.0/docs/enterprise/integration/message-queues.md +239 -0
  40. cellon-1.4.0/docs/enterprise/observability/health-checks.md +172 -0
  41. cellon-1.4.0/docs/enterprise/observability/metrics.md +180 -0
  42. cellon-1.4.0/docs/enterprise/observability/opentelemetry.md +181 -0
  43. cellon-1.4.0/docs/enterprise/observability/tracing.md +159 -0
  44. cellon-1.4.0/docs/enterprise/roadmap.md +311 -0
  45. cellon-1.4.0/docs/examples/advanced/background-tasks.md +388 -0
  46. cellon-1.4.0/docs/examples/advanced/file-storage.md +429 -0
  47. cellon-1.4.0/docs/examples/advanced/fullstack.md +263 -0
  48. cellon-1.4.0/docs/examples/advanced/graphql.md +106 -0
  49. cellon-1.4.0/docs/examples/advanced/microservices.md +269 -0
  50. cellon-1.4.0/docs/examples/advanced/realtime-dashboard.md +273 -0
  51. cellon-1.4.0/docs/examples/advanced/redis-caching.md +321 -0
  52. cellon-1.4.0/docs/examples/basic/database.md +201 -0
  53. cellon-1.4.0/docs/examples/basic/forms.md +273 -0
  54. cellon-1.4.0/docs/examples/basic/hello-world.md +176 -0
  55. cellon-1.4.0/docs/examples/basic/jwt-auth.md +167 -0
  56. cellon-1.4.0/docs/examples/basic/query-params.md +167 -0
  57. cellon-1.4.0/docs/examples/basic/rest-api.md +231 -0
  58. cellon-1.4.0/docs/examples/enterprise/api-gateway.md +409 -0
  59. cellon-1.4.0/docs/examples/enterprise/event-sourcing.md +523 -0
  60. cellon-1.4.0/docs/examples/enterprise/health-checks.md +438 -0
  61. cellon-1.4.0/docs/examples/enterprise/multi-tenant.md +336 -0
  62. cellon-1.4.0/docs/examples/enterprise/oauth2.md +485 -0
  63. cellon-1.4.0/docs/examples/enterprise/rate-limiting.md +371 -0
  64. cellon-1.4.0/docs/examples/index.md +487 -0
  65. cellon-1.4.0/docs/examples/real/adaptive-rate-limiting.md +72 -0
  66. cellon-1.4.0/docs/examples/real/advanced-middleware.md +98 -0
  67. cellon-1.4.0/docs/examples/real/advanced-patterns.md +1022 -0
  68. cellon-1.4.0/docs/examples/real/all-features.md +635 -0
  69. cellon-1.4.0/docs/examples/real/api-protocols.md +636 -0
  70. cellon-1.4.0/docs/examples/real/async-handlers.md +60 -0
  71. cellon-1.4.0/docs/examples/real/auto-openapi.md +108 -0
  72. cellon-1.4.0/docs/examples/real/blueprints-advanced.md +325 -0
  73. cellon-1.4.0/docs/examples/real/circuit-breaker.md +93 -0
  74. cellon-1.4.0/docs/examples/real/cluster-demo.md +427 -0
  75. cellon-1.4.0/docs/examples/real/complete-showcase.md +455 -0
  76. cellon-1.4.0/docs/examples/real/comprehensive-demo.md +618 -0
  77. cellon-1.4.0/docs/examples/real/database-demo.md +142 -0
  78. cellon-1.4.0/docs/examples/real/dto-validation.md +63 -0
  79. cellon-1.4.0/docs/examples/real/enterprise-config.md +391 -0
  80. cellon-1.4.0/docs/examples/real/guards.md +114 -0
  81. cellon-1.4.0/docs/examples/real/hello-world.md +107 -0
  82. cellon-1.4.0/docs/examples/real/lifecycle-hooks.md +63 -0
  83. cellon-1.4.0/docs/examples/real/middleware-demo.md +114 -0
  84. cellon-1.4.0/docs/examples/real/minijinja-advanced.md +255 -0
  85. cellon-1.4.0/docs/examples/real/minijinja-basic.md +155 -0
  86. cellon-1.4.0/docs/examples/real/minijinja-blog.md +371 -0
  87. cellon-1.4.0/docs/examples/real/minijinja-emails.md +405 -0
  88. cellon-1.4.0/docs/examples/real/minijinja-forms.md +328 -0
  89. cellon-1.4.0/docs/examples/real/minijinja-macros.md +344 -0
  90. cellon-1.4.0/docs/examples/real/security.md +413 -0
  91. cellon-1.4.0/docs/examples/real/simple-api.md +214 -0
  92. cellon-1.4.0/docs/examples/real/smart-caching.md +81 -0
  93. cellon-1.4.0/docs/examples/real/streaming-sse.md +98 -0
  94. cellon-1.4.0/docs/features/advanced/background-tasks.md +263 -0
  95. cellon-1.4.0/docs/features/advanced/dependency-injection.md +308 -0
  96. cellon-1.4.0/docs/features/advanced/dto-validation.md +435 -0
  97. cellon-1.4.0/docs/features/advanced/file-uploads.md +349 -0
  98. cellon-1.4.0/docs/features/advanced/static-files.md +319 -0
  99. cellon-1.4.0/docs/features/advanced/templates.md +328 -0
  100. cellon-1.4.0/docs/features/advanced/threadpool.md +126 -0
  101. cellon-1.4.0/docs/features/core/async.md +304 -0
  102. cellon-1.4.0/docs/features/core/blueprints.md +300 -0
  103. cellon-1.4.0/docs/features/core/requests.md +241 -0
  104. cellon-1.4.0/docs/features/core/responses.md +313 -0
  105. cellon-1.4.0/docs/features/core/routing.md +347 -0
  106. cellon-1.4.0/docs/features/index.md +434 -0
  107. cellon-1.4.0/docs/features/middleware/caching.md +238 -0
  108. cellon-1.4.0/docs/features/middleware/circuit-breaker.md +218 -0
  109. cellon-1.4.0/docs/features/middleware/compression.md +186 -0
  110. cellon-1.4.0/docs/features/middleware/cors.md +192 -0
  111. cellon-1.4.0/docs/features/middleware/logging.md +171 -0
  112. cellon-1.4.0/docs/features/middleware/overview.md +220 -0
  113. cellon-1.4.0/docs/features/middleware/rate-limiting.md +222 -0
  114. cellon-1.4.0/docs/features/minijinja-templates.md +337 -0
  115. cellon-1.4.0/docs/features/realtime/sse.md +406 -0
  116. cellon-1.4.0/docs/features/realtime/websocket.md +379 -0
  117. cellon-1.4.0/docs/features/security/authentication.md +210 -0
  118. cellon-1.4.0/docs/features/security/csrf.md +238 -0
  119. cellon-1.4.0/docs/features/security/guards.md +363 -0
  120. cellon-1.4.0/docs/features/security/headers.md +263 -0
  121. cellon-1.4.0/docs/features/security/jwt.md +306 -0
  122. cellon-1.4.0/docs/features/security/overview.md +479 -0
  123. cellon-1.4.0/docs/features/security/sessions.md +247 -0
  124. cellon-1.4.0/docs/features/templates.md +598 -0
  125. cellon-1.4.0/docs/getting-started/configuration.md +435 -0
  126. cellon-1.4.0/docs/getting-started/first-app.md +404 -0
  127. cellon-1.4.0/docs/getting-started/index.md +265 -0
  128. cellon-1.4.0/docs/getting-started/installation.md +230 -0
  129. cellon-1.4.0/docs/getting-started/project-structure.md +397 -0
  130. cellon-1.4.0/docs/getting-started/quickstart.md +274 -0
  131. cellon-1.4.0/docs/includes/abbreviations.md +37 -0
  132. cellon-1.4.0/docs/index.md +501 -0
  133. cellon-1.4.0/docs/issue-5-answer.md +162 -0
  134. cellon-1.4.0/docs/javascripts/extra.js +528 -0
  135. cellon-1.4.0/docs/learn/guides/best-practices.md +239 -0
  136. cellon-1.4.0/docs/learn/guides/deployment.md +276 -0
  137. cellon-1.4.0/docs/learn/guides/error-handling.md +257 -0
  138. cellon-1.4.0/docs/learn/guides/performance.md +244 -0
  139. cellon-1.4.0/docs/learn/guides/testing.md +297 -0
  140. cellon-1.4.0/docs/learn/index.md +280 -0
  141. cellon-1.4.0/docs/learn/patterns/cqrs.md +283 -0
  142. cellon-1.4.0/docs/learn/patterns/event-driven.md +227 -0
  143. cellon-1.4.0/docs/learn/patterns/repository.md +230 -0
  144. cellon-1.4.0/docs/learn/patterns/service-layer.md +238 -0
  145. cellon-1.4.0/docs/learn/tutorials/auth-system.md +333 -0
  146. cellon-1.4.0/docs/learn/tutorials/chat-app.md +275 -0
  147. cellon-1.4.0/docs/learn/tutorials/microservices.md +324 -0
  148. cellon-1.4.0/docs/learn/tutorials/rest-api.md +316 -0
  149. cellon-1.4.0/docs/logo-full.png +0 -0
  150. cellon-1.4.0/docs/logo-icon.svg +3 -0
  151. cellon-1.4.0/docs/logo.jpg +0 -0
  152. cellon-1.4.0/docs/logo.svg +3 -0
  153. cellon-1.4.0/docs/middleware.md +125 -0
  154. cellon-1.4.0/docs/overrides/main.html +54 -0
  155. cellon-1.4.0/docs/reference/api/app.md +942 -0
  156. cellon-1.4.0/docs/reference/api/blueprint.md +280 -0
  157. cellon-1.4.0/docs/reference/api/context.md +187 -0
  158. cellon-1.4.0/docs/reference/api/guards.md +290 -0
  159. cellon-1.4.0/docs/reference/api/middleware.md +291 -0
  160. cellon-1.4.0/docs/reference/api/plugins.md +191 -0
  161. cellon-1.4.0/docs/reference/api/request.md +431 -0
  162. cellon-1.4.0/docs/reference/api/response.md +229 -0
  163. cellon-1.4.0/docs/reference/cli.md +134 -0
  164. cellon-1.4.0/docs/reference/config/middleware.md +247 -0
  165. cellon-1.4.0/docs/reference/config/security.md +242 -0
  166. cellon-1.4.0/docs/reference/config/server.md +256 -0
  167. cellon-1.4.0/docs/reference/errors.md +213 -0
  168. cellon-1.4.0/docs/reference/index.md +264 -0
  169. cellon-1.4.0/docs/releases/changelog.md +193 -0
  170. cellon-1.4.0/docs/releases/index.md +317 -0
  171. cellon-1.4.0/docs/releases/migration.md +379 -0
  172. cellon-1.4.0/docs/releases/v0.10.0.md +488 -0
  173. cellon-1.4.0/docs/releases/v0.3.0.md +190 -0
  174. cellon-1.4.0/docs/releases/v0.4.0.md +265 -0
  175. cellon-1.4.0/docs/releases/v0.5.0.md +317 -0
  176. cellon-1.4.0/docs/releases/v0.6.0.md +247 -0
  177. cellon-1.4.0/docs/releases/v0.7.0.md +276 -0
  178. cellon-1.4.0/docs/releases/v0.8.0.md +254 -0
  179. cellon-1.4.0/docs/releases/v0.9.0.md +329 -0
  180. cellon-1.4.0/docs/releases/v1.0.0.md +398 -0
  181. cellon-1.4.0/docs/releases/v1.0.1.md +421 -0
  182. cellon-1.4.0/docs/releases/v1.1.0.md +218 -0
  183. cellon-1.4.0/docs/releases/v1.2.0.md +228 -0
  184. cellon-1.4.0/docs/releases/v1.2.1.md +167 -0
  185. cellon-1.4.0/docs/releases/v1.2.2.md +131 -0
  186. cellon-1.4.0/docs/releases/v1.2.3.md +121 -0
  187. cellon-1.4.0/docs/releases/v1.2.4.md +107 -0
  188. cellon-1.4.0/docs/releases/v1.3.0.md +258 -0
  189. cellon-1.4.0/docs/requirements.txt +24 -0
  190. cellon-1.4.0/docs/stylesheets/extra.css +1195 -0
  191. cellon-1.4.0/docs/tags.md +14 -0
  192. cellon-1.4.0/examples/adaptive_rate_limit.py +33 -0
  193. cellon-1.4.0/examples/advanced.py +230 -0
  194. cellon-1.4.0/examples/advanced_middleware.py +305 -0
  195. cellon-1.4.0/examples/advanced_patterns_demo.py +1002 -0
  196. cellon-1.4.0/examples/all_features_demo.py +598 -0
  197. cellon-1.4.0/examples/api_protocols_demo.py +598 -0
  198. cellon-1.4.0/examples/async_demo.py +34 -0
  199. cellon-1.4.0/examples/auto_openapi_demo.py +123 -0
  200. cellon-1.4.0/examples/blocking_handlers_demo.py +79 -0
  201. cellon-1.4.0/examples/circuit_breaker.py +45 -0
  202. cellon-1.4.0/examples/cluster_demo.py +403 -0
  203. cellon-1.4.0/examples/complete_showcase.py +418 -0
  204. cellon-1.4.0/examples/comprehensive_demo.py +581 -0
  205. cellon-1.4.0/examples/database_demo.py +314 -0
  206. cellon-1.4.0/examples/database_orm_demo.py +179 -0
  207. cellon-1.4.0/examples/dto_validation.py +33 -0
  208. cellon-1.4.0/examples/enterprise.py +355 -0
  209. cellon-1.4.0/examples/guards.py +117 -0
  210. cellon-1.4.0/examples/hello.py +87 -0
  211. cellon-1.4.0/examples/lifecycle_hooks.py +34 -0
  212. cellon-1.4.0/examples/middleware_demo.py +302 -0
  213. cellon-1.4.0/examples/middleware_full_demo.py +74 -0
  214. cellon-1.4.0/examples/minijinja_advanced.py +217 -0
  215. cellon-1.4.0/examples/minijinja_basic.py +119 -0
  216. cellon-1.4.0/examples/minijinja_blog.py +333 -0
  217. cellon-1.4.0/examples/minijinja_emails.py +368 -0
  218. cellon-1.4.0/examples/minijinja_forms.py +291 -0
  219. cellon-1.4.0/examples/minijinja_macros.py +308 -0
  220. cellon-1.4.0/examples/plugins_demo.py +93 -0
  221. cellon-1.4.0/examples/security.py +372 -0
  222. cellon-1.4.0/examples/simple_api.py +427 -0
  223. cellon-1.4.0/examples/smart_caching.py +36 -0
  224. cellon-1.4.0/examples/streaming_demo.py +331 -0
  225. cellon-1.4.0/examples/three_pillars_demo.py +69 -0
  226. cellon-1.4.0/mkdocs.yml +403 -0
  227. cellon-1.4.0/pyproject.toml +99 -0
  228. cellon-1.4.0/python/cello/__init__.py +2230 -0
  229. cellon-1.4.0/python/cello/cqrs.py +734 -0
  230. cellon-1.4.0/python/cello/database.py +249 -0
  231. cellon-1.4.0/python/cello/eventsourcing.py +980 -0
  232. cellon-1.4.0/python/cello/graphql.py +1258 -0
  233. cellon-1.4.0/python/cello/grpc.py +539 -0
  234. cellon-1.4.0/python/cello/guards.py +197 -0
  235. cellon-1.4.0/python/cello/messaging.py +502 -0
  236. cellon-1.4.0/python/cello/middleware.py +170 -0
  237. cellon-1.4.0/python/cello/orm.py +672 -0
  238. cellon-1.4.0/python/cello/saga.py +674 -0
  239. cellon-1.4.0/python/cello/validation.py +169 -0
  240. cellon-1.4.0/python/cellon/__init__.py +38 -0
  241. cellon-1.4.0/src/arena.rs +201 -0
  242. cellon-1.4.0/src/async_loop.rs +118 -0
  243. cellon-1.4.0/src/background.rs +325 -0
  244. cellon-1.4.0/src/blueprint.rs +163 -0
  245. cellon-1.4.0/src/context.rs +411 -0
  246. cellon-1.4.0/src/db/mod.rs +13 -0
  247. cellon-1.4.0/src/db/postgres.rs +303 -0
  248. cellon-1.4.0/src/db/redis_client.rs +417 -0
  249. cellon-1.4.0/src/db/value.rs +215 -0
  250. cellon-1.4.0/src/dependency.rs +514 -0
  251. cellon-1.4.0/src/dto.rs +597 -0
  252. cellon-1.4.0/src/error.rs +615 -0
  253. cellon-1.4.0/src/handler.rs +482 -0
  254. cellon-1.4.0/src/http_client.rs +244 -0
  255. cellon-1.4.0/src/json.rs +393 -0
  256. cellon-1.4.0/src/lib.rs +2650 -0
  257. cellon-1.4.0/src/lifecycle.rs +688 -0
  258. cellon-1.4.0/src/middleware/auth.rs +752 -0
  259. cellon-1.4.0/src/middleware/body_limit.rs +473 -0
  260. cellon-1.4.0/src/middleware/cache.rs +912 -0
  261. cellon-1.4.0/src/middleware/circuit_breaker.rs +205 -0
  262. cellon-1.4.0/src/middleware/cors.rs +566 -0
  263. cellon-1.4.0/src/middleware/cqrs.rs +794 -0
  264. cellon-1.4.0/src/middleware/csrf.rs +612 -0
  265. cellon-1.4.0/src/middleware/database.rs +664 -0
  266. cellon-1.4.0/src/middleware/etag.rs +449 -0
  267. cellon-1.4.0/src/middleware/eventsourcing.rs +1001 -0
  268. cellon-1.4.0/src/middleware/exception_handler.rs +663 -0
  269. cellon-1.4.0/src/middleware/graphql.rs +625 -0
  270. cellon-1.4.0/src/middleware/grpc.rs +1074 -0
  271. cellon-1.4.0/src/middleware/guards.rs +725 -0
  272. cellon-1.4.0/src/middleware/health.rs +600 -0
  273. cellon-1.4.0/src/middleware/messaging.rs +1102 -0
  274. cellon-1.4.0/src/middleware/mod.rs +840 -0
  275. cellon-1.4.0/src/middleware/prometheus.rs +546 -0
  276. cellon-1.4.0/src/middleware/rate_limit.rs +986 -0
  277. cellon-1.4.0/src/middleware/redis.rs +773 -0
  278. cellon-1.4.0/src/middleware/request_id.rs +337 -0
  279. cellon-1.4.0/src/middleware/saga.rs +1059 -0
  280. cellon-1.4.0/src/middleware/security.rs +789 -0
  281. cellon-1.4.0/src/middleware/session.rs +705 -0
  282. cellon-1.4.0/src/middleware/static_files.rs +667 -0
  283. cellon-1.4.0/src/middleware/telemetry.rs +486 -0
  284. cellon-1.4.0/src/minijinja_engine.rs +457 -0
  285. cellon-1.4.0/src/multipart.rs +250 -0
  286. cellon-1.4.0/src/openapi.rs +563 -0
  287. cellon-1.4.0/src/request/mod.rs +597 -0
  288. cellon-1.4.0/src/request/multipart_streaming.rs +469 -0
  289. cellon-1.4.0/src/request/parsing.rs +488 -0
  290. cellon-1.4.0/src/response/mod.rs +683 -0
  291. cellon-1.4.0/src/response/streaming.rs +559 -0
  292. cellon-1.4.0/src/response/xml.rs +511 -0
  293. cellon-1.4.0/src/router.rs +161 -0
  294. cellon-1.4.0/src/routing/constraints.rs +641 -0
  295. cellon-1.4.0/src/routing/mod.rs +626 -0
  296. cellon-1.4.0/src/server/cluster.rs +528 -0
  297. cellon-1.4.0/src/server/mod.rs +1384 -0
  298. cellon-1.4.0/src/server/protocols.rs +530 -0
  299. cellon-1.4.0/src/sse.rs +269 -0
  300. cellon-1.4.0/src/template.rs +308 -0
  301. cellon-1.4.0/src/timeout.rs +670 -0
  302. cellon-1.4.0/src/websocket.rs +213 -0
  303. cellon-1.4.0/tests/test_cello.py +5434 -0
  304. cellon-1.4.0/tests/test_file_databases.py +126 -0
  305. cellon-1.4.0/tests/test_middleware.py +149 -0
  306. cellon-1.4.0/tests/test_minijinja.py +483 -0
  307. cellon-1.4.0/tests/test_native_db.py +246 -0
  308. cellon-1.4.0/tests/test_plugins.py +291 -0
  309. cellon-1.4.0/tests/test_threadpool.py +263 -0
  310. cellon-1.4.0/tests/test_upgrades.py +197 -0
  311. cellon-1.4.0/tests/test_v130_fixes.py +269 -0
  312. cellon-1.4.0/tests/verify_adaptive.py +53 -0
  313. cellon-1.4.0/tests/verify_async_client.py +250 -0
  314. cellon-1.4.0/tests/verify_caching.py +46 -0
  315. cellon-1.4.0/tests/verify_circuit_breaker.py +77 -0
  316. cellon-1.4.0/tests/verify_dto.py +73 -0
  317. cellon-1.4.0/tests/verify_guards_impl.py +103 -0
  318. cellon-1.4.0/tests/verify_lifecycle.py +73 -0
@@ -0,0 +1,171 @@
1
+ # Continuous Integration for Cello
2
+ # Runs on every push and pull request to main branch
3
+ # Builds for multiple platforms: Linux (x86_64, aarch64), macOS (x86_64, aarch64), Windows (x86_64)
4
+
5
+ name: CI
6
+
7
+ on:
8
+ push:
9
+ branches: [main, master]
10
+ pull_request:
11
+ branches: [main, master]
12
+
13
+ env:
14
+ CARGO_TERM_COLOR: always
15
+ PYTHON_VERSION: "3.12"
16
+
17
+ jobs:
18
+ lint:
19
+ name: Lint
20
+ runs-on: ubuntu-latest
21
+ steps:
22
+ - uses: actions/checkout@v4
23
+
24
+ - name: Set up Python
25
+ uses: actions/setup-python@v5
26
+ with:
27
+ python-version: ${{ env.PYTHON_VERSION }}
28
+
29
+ - name: Install Rust
30
+ uses: dtolnay/rust-toolchain@stable
31
+ with:
32
+ components: rustfmt, clippy
33
+
34
+ - name: Check Rust formatting
35
+ run: cargo fmt --check || echo "Formatting issues found (non-blocking)"
36
+
37
+ - name: Run Clippy
38
+ run: cargo clippy --all-targets || echo "Clippy warnings found (non-blocking)"
39
+
40
+ - name: Install Python linters
41
+ run: pip install ruff
42
+
43
+ - name: Run Ruff
44
+ run: ruff check python/ tests/ || echo "Ruff issues found (non-blocking)"
45
+
46
+ test:
47
+ name: Test (${{ matrix.os }})
48
+ runs-on: ${{ matrix.os }}
49
+ strategy:
50
+ fail-fast: false
51
+ matrix:
52
+ os: [ubuntu-latest, macos-latest, windows-latest]
53
+ steps:
54
+ - uses: actions/checkout@v4
55
+
56
+ - name: Set up Python
57
+ uses: actions/setup-python@v5
58
+ with:
59
+ python-version: ${{ env.PYTHON_VERSION }}
60
+
61
+ - name: Install test dependencies
62
+ run: pip install pytest pytest-asyncio requests
63
+
64
+ # Use maturin-action for proper build
65
+ - name: Build and install wheel
66
+ uses: PyO3/maturin-action@v1
67
+ with:
68
+ command: build
69
+ args: --release --out dist
70
+
71
+ - name: Install built wheel
72
+ shell: bash
73
+ run: pip install dist/*.whl
74
+
75
+ - name: Run Python tests
76
+ run: pytest tests/ -v -k "not integration"
77
+
78
+ # ============================================================================
79
+ # Linux x86_64 Build
80
+ # ============================================================================
81
+ build-linux-x86:
82
+ name: Build Linux (x86_64)
83
+ runs-on: ubuntu-latest
84
+ steps:
85
+ - uses: actions/checkout@v4
86
+
87
+ - name: Build wheels (manylinux)
88
+ uses: PyO3/maturin-action@v1
89
+ with:
90
+ target: x86_64-unknown-linux-gnu
91
+ args: --release --out dist
92
+ manylinux: auto
93
+
94
+ - name: Upload wheel
95
+ uses: actions/upload-artifact@v4
96
+ with:
97
+ name: wheel-linux-x86_64
98
+ path: dist/*.whl
99
+
100
+ # ============================================================================
101
+ # Linux aarch64 Build (uses QEMU for cross-compilation)
102
+ # ============================================================================
103
+ build-linux-aarch64:
104
+ name: Build Linux (aarch64)
105
+ runs-on: ubuntu-latest
106
+ steps:
107
+ - uses: actions/checkout@v4
108
+
109
+ - name: Set up QEMU
110
+ uses: docker/setup-qemu-action@v3
111
+ with:
112
+ platforms: arm64
113
+
114
+ - name: Build wheels (manylinux aarch64)
115
+ uses: PyO3/maturin-action@v1
116
+ with:
117
+ target: aarch64-unknown-linux-gnu
118
+ args: --release --out dist
119
+ manylinux: 2_28
120
+
121
+ - name: Upload wheel
122
+ uses: actions/upload-artifact@v4
123
+ with:
124
+ name: wheel-linux-aarch64
125
+ path: dist/*.whl
126
+
127
+ # ============================================================================
128
+ # macOS Build (aarch64 Apple Silicon only)
129
+ # ============================================================================
130
+ build-macos:
131
+ name: Build macOS (Apple Silicon)
132
+ runs-on: macos-latest
133
+ steps:
134
+ - uses: actions/checkout@v4
135
+
136
+ - name: Build wheels
137
+ uses: PyO3/maturin-action@v1
138
+ with:
139
+ target: aarch64-apple-darwin
140
+ args: --release --out dist
141
+
142
+ - name: Upload wheel
143
+ uses: actions/upload-artifact@v4
144
+ with:
145
+ name: wheel-macos-aarch64
146
+ path: dist/*.whl
147
+
148
+ # ============================================================================
149
+ # Windows Builds (x86_64)
150
+ # ============================================================================
151
+ build-windows:
152
+ name: Build Windows (x86_64)
153
+ runs-on: windows-latest
154
+ steps:
155
+ - uses: actions/checkout@v4
156
+
157
+ - name: Set up Python
158
+ uses: actions/setup-python@v5
159
+ with:
160
+ python-version: ${{ env.PYTHON_VERSION }}
161
+
162
+ - name: Build wheels
163
+ uses: PyO3/maturin-action@v1
164
+ with:
165
+ args: --release --out dist
166
+
167
+ - name: Upload wheel
168
+ uses: actions/upload-artifact@v4
169
+ with:
170
+ name: wheel-windows-x86_64
171
+ path: dist/*.whl
@@ -0,0 +1,66 @@
1
+ name: Documentation
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ paths:
8
+ - 'docs/**'
9
+ - 'mkdocs.yml'
10
+ - '.github/workflows/docs.yml'
11
+ pull_request:
12
+ branches:
13
+ - main
14
+ paths:
15
+ - 'docs/**'
16
+ - 'mkdocs.yml'
17
+ workflow_dispatch:
18
+
19
+ permissions:
20
+ contents: write
21
+ pages: write
22
+ id-token: write
23
+
24
+ concurrency:
25
+ group: "docs-${{ github.ref }}"
26
+ cancel-in-progress: true
27
+
28
+ jobs:
29
+ build:
30
+ runs-on: ubuntu-latest
31
+ steps:
32
+ - name: Checkout
33
+ uses: actions/checkout@v4
34
+ with:
35
+ fetch-depth: 0 # Required for git-revision-date-localized plugin
36
+
37
+ - name: Setup Python
38
+ uses: actions/setup-python@v5
39
+ with:
40
+ python-version: '3.12'
41
+ cache: 'pip'
42
+ cache-dependency-path: docs/requirements.txt
43
+
44
+ - name: Install dependencies
45
+ run: pip install -r docs/requirements.txt
46
+
47
+ - name: Build documentation
48
+ run: mkdocs build
49
+
50
+ - name: Upload artifact
51
+ if: github.ref == 'refs/heads/main' && github.event_name == 'push'
52
+ uses: actions/upload-pages-artifact@v3
53
+ with:
54
+ path: site/
55
+
56
+ deploy:
57
+ if: github.ref == 'refs/heads/main' && github.event_name == 'push'
58
+ needs: build
59
+ runs-on: ubuntu-latest
60
+ environment:
61
+ name: github-pages
62
+ url: ${{ steps.deployment.outputs.page_url }}
63
+ steps:
64
+ - name: Deploy to GitHub Pages
65
+ id: deployment
66
+ uses: actions/deploy-pages@v4
@@ -0,0 +1,193 @@
1
+ # Build and publish Cellon to PyPI entirely in GitHub Actions.
2
+ # Builds wheels for all platforms and uploads to PyPI
3
+ # Platforms: Linux (x86_64, aarch64), macOS (aarch64), Windows (x86_64)
4
+
5
+ name: Publish Cellon to PyPI
6
+
7
+ on:
8
+ release:
9
+ types: [published]
10
+ workflow_dispatch:
11
+ inputs:
12
+ publish_to_test_pypi:
13
+ description: 'Publish to Test PyPI instead of PyPI'
14
+ required: false
15
+ default: 'false'
16
+
17
+ env:
18
+ PYTHON_VERSION: "3.12"
19
+
20
+ jobs:
21
+ # ============================================================================
22
+ # Source Distribution
23
+ # ============================================================================
24
+ build-sdist:
25
+ name: Build source distribution
26
+ runs-on: ubuntu-latest
27
+ steps:
28
+ - uses: actions/checkout@v4
29
+
30
+ - name: Build sdist
31
+ uses: PyO3/maturin-action@v1
32
+ with:
33
+ command: sdist
34
+ args: --out dist
35
+
36
+ - name: Upload sdist
37
+ uses: actions/upload-artifact@v4
38
+ with:
39
+ name: sdist
40
+ path: dist/*.tar.gz
41
+
42
+ # ============================================================================
43
+ # Linux x86_64 Build
44
+ # ============================================================================
45
+ build-linux-x86:
46
+ name: Build Linux (x86_64-unknown-linux-gnu)
47
+ runs-on: ubuntu-latest
48
+ steps:
49
+ - uses: actions/checkout@v4
50
+
51
+ - name: Build wheels (manylinux)
52
+ uses: PyO3/maturin-action@v1
53
+ with:
54
+ target: x86_64-unknown-linux-gnu
55
+ args: --release --out dist
56
+ manylinux: auto
57
+
58
+ - name: Upload wheel
59
+ uses: actions/upload-artifact@v4
60
+ with:
61
+ name: wheel-linux-x86_64-unknown-linux-gnu
62
+ path: dist/*.whl
63
+
64
+ # ============================================================================
65
+ # Linux aarch64 Build (uses QEMU for cross-compilation)
66
+ # ============================================================================
67
+ build-linux-aarch64:
68
+ name: Build Linux (aarch64-unknown-linux-gnu)
69
+ runs-on: ubuntu-latest
70
+ steps:
71
+ - uses: actions/checkout@v4
72
+
73
+ - name: Set up QEMU
74
+ uses: docker/setup-qemu-action@v3
75
+ with:
76
+ platforms: arm64
77
+
78
+ - name: Build wheels (manylinux aarch64)
79
+ uses: PyO3/maturin-action@v1
80
+ with:
81
+ target: aarch64-unknown-linux-gnu
82
+ args: --release --out dist
83
+ manylinux: 2_28
84
+
85
+ - name: Upload wheel
86
+ uses: actions/upload-artifact@v4
87
+ with:
88
+ name: wheel-linux-aarch64-unknown-linux-gnu
89
+ path: dist/*.whl
90
+
91
+ # ============================================================================
92
+ # macOS Build (aarch64 Apple Silicon only)
93
+ # ============================================================================
94
+ build-macos:
95
+ name: Build macOS (Apple Silicon)
96
+ runs-on: macos-latest
97
+ steps:
98
+ - uses: actions/checkout@v4
99
+
100
+ - name: Build wheels
101
+ uses: PyO3/maturin-action@v1
102
+ with:
103
+ target: aarch64-apple-darwin
104
+ args: --release --out dist
105
+
106
+ - name: Upload wheel
107
+ uses: actions/upload-artifact@v4
108
+ with:
109
+ name: wheel-macos-aarch64
110
+ path: dist/*.whl
111
+
112
+ # ============================================================================
113
+ # Windows Builds (x86_64)
114
+ # ============================================================================
115
+ build-windows:
116
+ name: Build Windows (x86_64)
117
+ runs-on: windows-latest
118
+ steps:
119
+ - uses: actions/checkout@v4
120
+
121
+ - name: Set up Python
122
+ uses: actions/setup-python@v5
123
+ with:
124
+ python-version: ${{ env.PYTHON_VERSION }}
125
+
126
+ - name: Build wheels
127
+ uses: PyO3/maturin-action@v1
128
+ with:
129
+ args: --release --out dist
130
+
131
+ - name: Upload wheel
132
+ uses: actions/upload-artifact@v4
133
+ with:
134
+ name: wheel-windows-x86_64
135
+ path: dist/*.whl
136
+
137
+ # ============================================================================
138
+ # Publish to PyPI
139
+ # ============================================================================
140
+ publish:
141
+ name: Publish Cellon to PyPI
142
+ needs: [build-sdist, build-linux-x86, build-linux-aarch64, build-macos, build-windows]
143
+ runs-on: ubuntu-latest
144
+ if: github.event_name == 'release'
145
+ environment:
146
+ name: pypi
147
+ url: https://pypi.org/project/cellon/
148
+ permissions:
149
+ contents: read
150
+
151
+ steps:
152
+ - name: Download all artifacts
153
+ uses: actions/download-artifact@v4
154
+ with:
155
+ path: dist
156
+ merge-multiple: true
157
+
158
+ - name: List artifacts
159
+ run: ls -la dist/
160
+
161
+ - name: Publish Cellon to PyPI
162
+ uses: pypa/gh-action-pypi-publish@release/v1
163
+ with:
164
+ packages-dir: dist/
165
+ username: __token__
166
+ password: ${{ secrets.PYPI_API_TOKEN }}
167
+ skip-existing: true
168
+
169
+ # ============================================================================
170
+ # Publish to Test PyPI (manual trigger)
171
+ # ============================================================================
172
+ publish-test:
173
+ name: Publish Cellon to Test PyPI
174
+ needs: [build-sdist, build-linux-x86, build-linux-aarch64, build-macos, build-windows]
175
+ runs-on: ubuntu-latest
176
+ if: github.event_name == 'workflow_dispatch' && github.event.inputs.publish_to_test_pypi == 'true'
177
+ permissions:
178
+ contents: read
179
+
180
+ steps:
181
+ - name: Download all artifacts
182
+ uses: actions/download-artifact@v4
183
+ with:
184
+ path: dist
185
+ merge-multiple: true
186
+
187
+ - name: Publish Cellon to Test PyPI
188
+ uses: pypa/gh-action-pypi-publish@release/v1
189
+ with:
190
+ repository-url: https://test.pypi.org/legacy/
191
+ packages-dir: dist/
192
+ username: __token__
193
+ password: ${{ secrets.TEST_PYPI_API_TOKEN }}
@@ -0,0 +1,118 @@
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ # Distribution / packaging
10
+ .Python
11
+ build/
12
+ develop-eggs/
13
+ dist/
14
+ downloads/
15
+ eggs/
16
+ .eggs/
17
+ lib/
18
+ lib64/
19
+ parts/
20
+ sdist/
21
+ var/
22
+ wheels/
23
+ share/python-wheels/
24
+ *.egg-info/
25
+ .installed.cfg
26
+ *.egg
27
+ MANIFEST
28
+
29
+ *.txt
30
+ !*requirements*.txt
31
+
32
+ # PyInstaller
33
+ *.manifest
34
+ *.spec
35
+
36
+ # Installer logs
37
+ pip-log.txt
38
+ pip-delete-this-directory.txt
39
+
40
+ # Unit test / coverage reports
41
+ htmlcov/
42
+ .tox/
43
+ .nox/
44
+ .coverage
45
+ .coverage.*
46
+ .cache
47
+ nosetests.xml
48
+ coverage.xml
49
+ *.cover
50
+ *.py,cover
51
+ .hypothesis/
52
+ .pytest_cache/
53
+ pytest_cache/
54
+
55
+ # Translations
56
+ *.mo
57
+ *.pot
58
+
59
+ # Environments
60
+ .env
61
+ .venv
62
+ env/
63
+ venv/
64
+ ENV/
65
+ env.bak/
66
+ venv.bak/
67
+
68
+ # IDE / Editor
69
+ .vscode/
70
+ .idea/
71
+ *.swp
72
+ *.swo
73
+ *~
74
+ .project
75
+ .pydevproject
76
+ .settings/
77
+ *.sublime-project
78
+ *.sublime-workspace
79
+
80
+ # macOS
81
+ .DS_Store
82
+ .AppleDouble
83
+ .LSOverride
84
+ ._*
85
+ .Spotlight-V100
86
+ .Trashes
87
+
88
+ # Windows
89
+ Thumbs.db
90
+ ehthumbs.db
91
+ Desktop.ini
92
+
93
+ # Rust
94
+ target/
95
+ Cargo.lock
96
+ **/*.rs.bk
97
+
98
+ # Maturin
99
+ *.whl
100
+
101
+ # Documentation
102
+ docs/_build/
103
+ site/
104
+
105
+ # Jupyter Notebook
106
+ .ipynb_checkpoints
107
+
108
+ # Local development
109
+ *.log
110
+ *.tmp
111
+ *.temp
112
+ .scratch/
113
+
114
+ # Secrets (never commit these!)
115
+ *.pem
116
+ *.key
117
+ secrets.toml
118
+ .secrets