routemq 0.22.1__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.
- routemq-0.22.1/.dockerignore +87 -0
- routemq-0.22.1/.env.docker +63 -0
- routemq-0.22.1/.env.example +98 -0
- routemq-0.22.1/.github/CODEOWNERS +4 -0
- routemq-0.22.1/.github/ISSUE_TEMPLATE/bug_report.yml +44 -0
- routemq-0.22.1/.github/ISSUE_TEMPLATE/feature_request.yml +26 -0
- routemq-0.22.1/.github/SECURITY-TRIAGE.md +68 -0
- routemq-0.22.1/.github/branch-protection.yml +118 -0
- routemq-0.22.1/.github/dependabot.yml +24 -0
- routemq-0.22.1/.github/release-drafter.yml +78 -0
- routemq-0.22.1/.github/release-token-rotation.md +42 -0
- routemq-0.22.1/.github/workflows/bench.yml +108 -0
- routemq-0.22.1/.github/workflows/ci.yml +200 -0
- routemq-0.22.1/.github/workflows/github-release.yml +123 -0
- routemq-0.22.1/.github/workflows/publish-test.yml +59 -0
- routemq-0.22.1/.github/workflows/publish.yml +56 -0
- routemq-0.22.1/.github/workflows/release.yml +189 -0
- routemq-0.22.1/.github/workflows/scorecard.yml +47 -0
- routemq-0.22.1/.github/workflows/update-docs-summary.yml +91 -0
- routemq-0.22.1/.gitignore +159 -0
- routemq-0.22.1/.pre-commit-config.yaml +16 -0
- routemq-0.22.1/CHANGELOG.md +325 -0
- routemq-0.22.1/CODE_OF_CONDUCT.md +83 -0
- routemq-0.22.1/CONTRIBUTING.md +75 -0
- routemq-0.22.1/Dockerfile +62 -0
- routemq-0.22.1/INSTALL.md +306 -0
- routemq-0.22.1/LICENSE +21 -0
- routemq-0.22.1/Makefile +109 -0
- routemq-0.22.1/PKG-INFO +245 -0
- routemq-0.22.1/README.md +173 -0
- routemq-0.22.1/SECURITY.md +55 -0
- routemq-0.22.1/TEMPLATE.md +204 -0
- routemq-0.22.1/app/.gitignore +3 -0
- routemq-0.22.1/app/__init__.py +1 -0
- routemq-0.22.1/app/controllers/__init__.py +0 -0
- routemq-0.22.1/app/jobs/__init__.py +1 -0
- routemq-0.22.1/app/jobs/example_data_processing_job.py +70 -0
- routemq-0.22.1/app/jobs/example_email_job.py +65 -0
- routemq-0.22.1/app/jobs/example_report_job.py +74 -0
- routemq-0.22.1/app/middleware/__init__.py +0 -0
- routemq-0.22.1/app/middleware/rate_limit.py +520 -0
- routemq-0.22.1/app/models/__init__.py +0 -0
- routemq-0.22.1/app/models/queue_failed_job.py +1 -0
- routemq-0.22.1/app/models/queue_job.py +1 -0
- routemq-0.22.1/app/routers/__init__.py +0 -0
- routemq-0.22.1/benchmarks/README.md +30 -0
- routemq-0.22.1/benchmarks/__init__.py +0 -0
- routemq-0.22.1/benchmarks/baselines/.gitignore +3 -0
- routemq-0.22.1/benchmarks/baselines/master.json +11143 -0
- routemq-0.22.1/benchmarks/conftest.py +105 -0
- routemq-0.22.1/benchmarks/db_matrix.py +154 -0
- routemq-0.22.1/benchmarks/test_database_queue.py +110 -0
- routemq-0.22.1/benchmarks/test_observability.py +78 -0
- routemq-0.22.1/benchmarks/test_queue_serialization.py +59 -0
- routemq-0.22.1/benchmarks/test_queue_worker.py +54 -0
- routemq-0.22.1/benchmarks/test_router.py +68 -0
- routemq-0.22.1/bootstrap/__init__.py +0 -0
- routemq-0.22.1/bootstrap/app.py +473 -0
- routemq-0.22.1/docker-compose.dev.yml +120 -0
- routemq-0.22.1/docker-compose.yml +305 -0
- routemq-0.22.1/docs/.gitbook/assets/Logo1-500x500.png +0 -0
- routemq-0.22.1/docs/README.md +61 -0
- routemq-0.22.1/docs/SUMMARY.md +101 -0
- routemq-0.22.1/docs/adr/0001-pypi-distribution-model.md +58 -0
- routemq-0.22.1/docs/adr/0002-queue-driver-registry.md +54 -0
- routemq-0.22.1/docs/adr/0003-docker-backed-integration-tests.md +55 -0
- routemq-0.22.1/docs/adr/0004-centralized-runtime-settings.md +54 -0
- routemq-0.22.1/docs/adr/0005-observability-stack.md +61 -0
- routemq-0.22.1/docs/adr/0006-pool-tuning-knobs.md +64 -0
- routemq-0.22.1/docs/adr/0007-benchmark-harness.md +63 -0
- routemq-0.22.1/docs/adr/0008-fail-fast-logging-audit.md +66 -0
- routemq-0.22.1/docs/adr/0009-supply-chain-and-provenance.md +67 -0
- routemq-0.22.1/docs/adr/0010-tsdb-driver-registry.md +79 -0
- routemq-0.22.1/docs/api-reference/README.md +101 -0
- routemq-0.22.1/docs/api-reference/controller-api.md +492 -0
- routemq-0.22.1/docs/api-reference/health-observability-api.md +167 -0
- routemq-0.22.1/docs/api-reference/middleware-api.md +612 -0
- routemq-0.22.1/docs/api-reference/redis-manager-api.md +689 -0
- routemq-0.22.1/docs/api-reference/router-api.md +339 -0
- routemq-0.22.1/docs/api-reference/worker-manager-api.md +561 -0
- routemq-0.22.1/docs/architecture.md +42 -0
- routemq-0.22.1/docs/best-practices.md +32 -0
- routemq-0.22.1/docs/configuration/README.md +71 -0
- routemq-0.22.1/docs/configuration/environment-variables.md +265 -0
- routemq-0.22.1/docs/configuration/logging.md +201 -0
- routemq-0.22.1/docs/controllers/README.md +79 -0
- routemq-0.22.1/docs/controllers/best-practices.md +656 -0
- routemq-0.22.1/docs/controllers/controller-methods.md +404 -0
- routemq-0.22.1/docs/controllers/creating-controllers.md +196 -0
- routemq-0.22.1/docs/controllers/database-operations.md +604 -0
- routemq-0.22.1/docs/controllers/redis-integration.md +482 -0
- routemq-0.22.1/docs/core-concepts/README.md +70 -0
- routemq-0.22.1/docs/core-concepts/architecture.md +170 -0
- routemq-0.22.1/docs/core-concepts/message-flow.md +373 -0
- routemq-0.22.1/docs/core-concepts/middleware-pipeline.md +507 -0
- routemq-0.22.1/docs/core-concepts/router-discovery.md +316 -0
- routemq-0.22.1/docs/core-concepts/worker-processes.md +595 -0
- routemq-0.22.1/docs/database/README.md +92 -0
- routemq-0.22.1/docs/database/configuration.md +346 -0
- routemq-0.22.1/docs/database/creating-models.md +581 -0
- routemq-0.22.1/docs/database/operations.md +763 -0
- routemq-0.22.1/docs/deployment/README.md +81 -0
- routemq-0.22.1/docs/deployment/docker.md +705 -0
- routemq-0.22.1/docs/deployment/load-balancing.md +1115 -0
- routemq-0.22.1/docs/deployment/scaling.md +878 -0
- routemq-0.22.1/docs/docker-deployment.md +596 -0
- routemq-0.22.1/docs/examples/README.md +164 -0
- routemq-0.22.1/docs/examples/api-gateway.md +682 -0
- routemq-0.22.1/docs/examples/chat-app.md +767 -0
- routemq-0.22.1/docs/examples/iot-devices.md +500 -0
- routemq-0.22.1/docs/examples/notifications.md +624 -0
- routemq-0.22.1/docs/examples/sensor-data.md +0 -0
- routemq-0.22.1/docs/faq.md +177 -0
- routemq-0.22.1/docs/getting-started/README.md +28 -0
- routemq-0.22.1/docs/getting-started/development-setup.md +103 -0
- routemq-0.22.1/docs/getting-started/first-route.md +89 -0
- routemq-0.22.1/docs/getting-started/installation.md +74 -0
- routemq-0.22.1/docs/getting-started/quick-start.md +57 -0
- routemq-0.22.1/docs/middleware/README.md +80 -0
- routemq-0.22.1/docs/middleware/creating-middleware.md +655 -0
- routemq-0.22.1/docs/middleware/middleware-chains.md +823 -0
- routemq-0.22.1/docs/monitoring/README.md +87 -0
- routemq-0.22.1/docs/monitoring/benchmarks.md +59 -0
- routemq-0.22.1/docs/monitoring/error-handling-audit.md +150 -0
- routemq-0.22.1/docs/monitoring/health-checks.md +34 -0
- routemq-0.22.1/docs/monitoring/metrics.md +130 -0
- routemq-0.22.1/docs/monitoring/mqtt-monitoring.md +23 -0
- routemq-0.22.1/docs/monitoring/pool-tuning.evidence.json +181 -0
- routemq-0.22.1/docs/monitoring/pool-tuning.md +79 -0
- routemq-0.22.1/docs/monitoring/redis-monitoring.md +30 -0
- routemq-0.22.1/docs/queue/README.md +132 -0
- routemq-0.22.1/docs/queue/best-practices.md +537 -0
- routemq-0.22.1/docs/queue/creating-jobs.md +351 -0
- routemq-0.22.1/docs/queue/dispatching-jobs.md +439 -0
- routemq-0.22.1/docs/queue/drivers.md +530 -0
- routemq-0.22.1/docs/queue/failed-jobs.md +473 -0
- routemq-0.22.1/docs/queue/getting-started.md +228 -0
- routemq-0.22.1/docs/queue/running-workers.md +496 -0
- routemq-0.22.1/docs/rate-limiting/README.md +106 -0
- routemq-0.22.1/docs/rate-limiting/advanced-features.md +1124 -0
- routemq-0.22.1/docs/rate-limiting/basic-rate-limiting.md +419 -0
- routemq-0.22.1/docs/rate-limiting/client-based.md +853 -0
- routemq-0.22.1/docs/rate-limiting/strategies.md +560 -0
- routemq-0.22.1/docs/rate-limiting/topic-specific.md +707 -0
- routemq-0.22.1/docs/redis/README.md +75 -0
- routemq-0.22.1/docs/release-conformance.md +82 -0
- routemq-0.22.1/docs/routing/README.md +73 -0
- routemq-0.22.1/docs/routing/dynamic-loading.md +496 -0
- routemq-0.22.1/docs/routing/route-definition.md +194 -0
- routemq-0.22.1/docs/routing/route-groups.md +217 -0
- routemq-0.22.1/docs/routing/route-parameters.md +300 -0
- routemq-0.22.1/docs/routing/shared-subscriptions.md +965 -0
- routemq-0.22.1/docs/security.md +21 -0
- routemq-0.22.1/docs/testing/README.md +104 -0
- routemq-0.22.1/docs/testing/coverage.md +19 -0
- routemq-0.22.1/docs/testing/integration-tests.md +100 -0
- routemq-0.22.1/docs/testing/mocking.md +20 -0
- routemq-0.22.1/docs/testing/running-tests.md +33 -0
- routemq-0.22.1/docs/testing/unit-tests.md +17 -0
- routemq-0.22.1/docs/tinker.md +301 -0
- routemq-0.22.1/docs/troubleshooting/README.md +96 -0
- routemq-0.22.1/docs/tsdb/README.md +122 -0
- routemq-0.22.1/logo.png +0 -0
- routemq-0.22.1/pyproject.toml +217 -0
- routemq-0.22.1/requirements.txt +19 -0
- routemq-0.22.1/routemq/__init__.py +20 -0
- routemq-0.22.1/routemq/cli.py +385 -0
- routemq-0.22.1/routemq/controller.py +7 -0
- routemq-0.22.1/routemq/health.py +134 -0
- routemq-0.22.1/routemq/job.py +219 -0
- routemq-0.22.1/routemq/logging_config.py +551 -0
- routemq-0.22.1/routemq/metrics/__init__.py +26 -0
- routemq-0.22.1/routemq/metrics/exposition.py +129 -0
- routemq-0.22.1/routemq/metrics/hooks.py +289 -0
- routemq-0.22.1/routemq/metrics/prometheus.py +98 -0
- routemq-0.22.1/routemq/metrics/registry.py +228 -0
- routemq-0.22.1/routemq/middleware.py +24 -0
- routemq-0.22.1/routemq/model.py +135 -0
- routemq-0.22.1/routemq/mqtt_utils.py +202 -0
- routemq-0.22.1/routemq/observability.py +502 -0
- routemq-0.22.1/routemq/py.typed +0 -0
- routemq-0.22.1/routemq/queue/__init__.py +19 -0
- routemq-0.22.1/routemq/queue/database_queue.py +225 -0
- routemq-0.22.1/routemq/queue/models.py +39 -0
- routemq-0.22.1/routemq/queue/queue_driver.py +100 -0
- routemq-0.22.1/routemq/queue/queue_manager.py +329 -0
- routemq-0.22.1/routemq/queue/queue_worker.py +347 -0
- routemq-0.22.1/routemq/queue/redis_queue.py +271 -0
- routemq-0.22.1/routemq/redis_manager.py +412 -0
- routemq-0.22.1/routemq/retry.py +102 -0
- routemq-0.22.1/routemq/router.py +182 -0
- routemq-0.22.1/routemq/router_registry.py +125 -0
- routemq-0.22.1/routemq/scaffold/__init__.py +3 -0
- routemq-0.22.1/routemq/scaffold/prompts.py +55 -0
- routemq-0.22.1/routemq/scaffold/scaffolder.py +182 -0
- routemq-0.22.1/routemq/scaffold/templates/__init__.py +0 -0
- routemq-0.22.1/routemq/scaffold/templates/base/.env +34 -0
- routemq-0.22.1/routemq/scaffold/templates/base/.gitignore +18 -0
- routemq-0.22.1/routemq/scaffold/templates/base/README.md.j2 +30 -0
- routemq-0.22.1/routemq/scaffold/templates/base/app/__init__.py +0 -0
- routemq-0.22.1/routemq/scaffold/templates/base/app/controllers/__init__.py +0 -0
- routemq-0.22.1/routemq/scaffold/templates/base/app/controllers/example_controller.py +10 -0
- routemq-0.22.1/routemq/scaffold/templates/base/app/middleware/__init__.py +0 -0
- routemq-0.22.1/routemq/scaffold/templates/base/app/middleware/example_middleware.py +26 -0
- routemq-0.22.1/routemq/scaffold/templates/base/app/models/__init__.py +0 -0
- routemq-0.22.1/routemq/scaffold/templates/base/app/routers/__init__.py +0 -0
- routemq-0.22.1/routemq/scaffold/templates/base/app/routers/example_device.py +10 -0
- routemq-0.22.1/routemq/scaffold/templates/base/pyproject.toml.j2 +16 -0
- routemq-0.22.1/routemq/scaffold/templates/features/docker/Dockerfile +12 -0
- routemq-0.22.1/routemq/scaffold/templates/features/docker/Makefile +19 -0
- routemq-0.22.1/routemq/scaffold/templates/features/docker/docker-compose.yml.j2 +49 -0
- routemq-0.22.1/routemq/scaffold/templates/features/mysql/.env.fragment +7 -0
- routemq-0.22.1/routemq/scaffold/templates/features/mysql/app/models/__init__.py +0 -0
- routemq-0.22.1/routemq/scaffold/templates/features/mysql/app/models/example_model.py +14 -0
- routemq-0.22.1/routemq/scaffold/templates/features/queue/.env.fragment +2 -0
- routemq-0.22.1/routemq/scaffold/templates/features/queue/app/jobs/__init__.py +0 -0
- routemq-0.22.1/routemq/scaffold/templates/features/queue/app/jobs/example_job.py +11 -0
- routemq-0.22.1/routemq/scaffold/templates/features/redis/.env.fragment +4 -0
- routemq-0.22.1/routemq/settings.py +251 -0
- routemq-0.22.1/routemq/tinker.py +518 -0
- routemq-0.22.1/routemq/tsdb/__init__.py +5 -0
- routemq-0.22.1/routemq/tsdb/clickhouse_driver.py +169 -0
- routemq-0.22.1/routemq/tsdb/tsdb_driver.py +54 -0
- routemq-0.22.1/routemq/tsdb/tsdb_manager.py +154 -0
- routemq-0.22.1/routemq/worker_manager.py +346 -0
- routemq-0.22.1/run_tests.py +25 -0
- routemq-0.22.1/scripts/README.md +244 -0
- routemq-0.22.1/scripts/update_summary.py +290 -0
- routemq-0.22.1/setup-project.ps1 +110 -0
- routemq-0.22.1/setup-project.sh +108 -0
- routemq-0.22.1/test_queue.py +113 -0
- routemq-0.22.1/tests/__init__.py +16 -0
- routemq-0.22.1/tests/integration/__init__.py +0 -0
- routemq-0.22.1/tests/integration/helpers.py +31 -0
- routemq-0.22.1/tests/integration/test_mqtt_end_to_end.py +78 -0
- routemq-0.22.1/tests/integration/test_queue_backends.py +117 -0
- routemq-0.22.1/tests/unit/__init__.py +2 -0
- routemq-0.22.1/tests/unit/app/__init__.py +0 -0
- routemq-0.22.1/tests/unit/app/middleware/__init__.py +0 -0
- routemq-0.22.1/tests/unit/app/middleware/test_rate_limit.py +83 -0
- routemq-0.22.1/tests/unit/app/middleware/test_rate_limit_strategies.py +443 -0
- routemq-0.22.1/tests/unit/app/models/__init__.py +0 -0
- routemq-0.22.1/tests/unit/app/models/test_queue_failed_job.py +51 -0
- routemq-0.22.1/tests/unit/app/models/test_queue_job.py +51 -0
- routemq-0.22.1/tests/unit/bootstrap/__init__.py +0 -0
- routemq-0.22.1/tests/unit/bootstrap/test_app.py +594 -0
- routemq-0.22.1/tests/unit/bootstrap/test_app_paths.py +254 -0
- routemq-0.22.1/tests/unit/bootstrap/test_tsdb.py +461 -0
- routemq-0.22.1/tests/unit/core/__init__.py +0 -0
- routemq-0.22.1/tests/unit/core/test_database_queue.py +254 -0
- routemq-0.22.1/tests/unit/core/test_health.py +132 -0
- routemq-0.22.1/tests/unit/core/test_job.py +239 -0
- routemq-0.22.1/tests/unit/core/test_job_extra.py +37 -0
- routemq-0.22.1/tests/unit/core/test_job_unserialize.py +143 -0
- routemq-0.22.1/tests/unit/core/test_logging_config.py +125 -0
- routemq-0.22.1/tests/unit/core/test_metrics_exposition.py +117 -0
- routemq-0.22.1/tests/unit/core/test_metrics_hooks.py +136 -0
- routemq-0.22.1/tests/unit/core/test_metrics_prometheus.py +97 -0
- routemq-0.22.1/tests/unit/core/test_metrics_registry.py +141 -0
- routemq-0.22.1/tests/unit/core/test_model.py +333 -0
- routemq-0.22.1/tests/unit/core/test_model_queries.py +126 -0
- routemq-0.22.1/tests/unit/core/test_mqtt_utils.py +186 -0
- routemq-0.22.1/tests/unit/core/test_observability.py +423 -0
- routemq-0.22.1/tests/unit/core/test_queue.py +493 -0
- routemq-0.22.1/tests/unit/core/test_queue_driver_contract.py +42 -0
- routemq-0.22.1/tests/unit/core/test_queue_manager_extra.py +134 -0
- routemq-0.22.1/tests/unit/core/test_queue_models_repr.py +38 -0
- routemq-0.22.1/tests/unit/core/test_queue_worker_extra.py +443 -0
- routemq-0.22.1/tests/unit/core/test_redis_manager.py +236 -0
- routemq-0.22.1/tests/unit/core/test_redis_queue.py +257 -0
- routemq-0.22.1/tests/unit/core/test_retry.py +78 -0
- routemq-0.22.1/tests/unit/core/test_router_registry.py +321 -0
- routemq-0.22.1/tests/unit/core/test_settings.py +263 -0
- routemq-0.22.1/tests/unit/core/test_worker_manager.py +244 -0
- routemq-0.22.1/tests/unit/core/test_worker_manager_process.py +319 -0
- routemq-0.22.1/tests/unit/scaffold/__init__.py +0 -0
- routemq-0.22.1/tests/unit/scaffold/test_prompts.py +79 -0
- routemq-0.22.1/tests/unit/scaffold/test_scaffolder.py +149 -0
- routemq-0.22.1/tests/unit/test_cli.py +231 -0
- routemq-0.22.1/tests/unit/test_controller.py +49 -0
- routemq-0.22.1/tests/unit/test_middleware.py +85 -0
- routemq-0.22.1/tests/unit/test_router.py +144 -0
- routemq-0.22.1/tests/unit/test_tinker_rich.py +402 -0
- routemq-0.22.1/uv.lock +2971 -0
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# Python
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
*.so
|
|
6
|
+
.Python
|
|
7
|
+
build/
|
|
8
|
+
develop-eggs/
|
|
9
|
+
dist/
|
|
10
|
+
downloads/
|
|
11
|
+
eggs/
|
|
12
|
+
.eggs/
|
|
13
|
+
lib/
|
|
14
|
+
lib64/
|
|
15
|
+
parts/
|
|
16
|
+
sdist/
|
|
17
|
+
var/
|
|
18
|
+
wheels/
|
|
19
|
+
share/python-wheels/
|
|
20
|
+
*.egg-info/
|
|
21
|
+
.installed.cfg
|
|
22
|
+
*.egg
|
|
23
|
+
MANIFEST
|
|
24
|
+
|
|
25
|
+
# PyInstaller
|
|
26
|
+
*.manifest
|
|
27
|
+
*.spec
|
|
28
|
+
|
|
29
|
+
# Installer logs
|
|
30
|
+
pip-log.txt
|
|
31
|
+
pip-delete-this-directory.txt
|
|
32
|
+
|
|
33
|
+
# Unit test / coverage reports
|
|
34
|
+
htmlcov/
|
|
35
|
+
.tox/
|
|
36
|
+
.nox/
|
|
37
|
+
.coverage
|
|
38
|
+
.coverage.*
|
|
39
|
+
.cache
|
|
40
|
+
nosetests.xml
|
|
41
|
+
coverage.xml
|
|
42
|
+
*.cover
|
|
43
|
+
*.py,cover
|
|
44
|
+
.hypothesis/
|
|
45
|
+
.pytest_cache/
|
|
46
|
+
cover/
|
|
47
|
+
|
|
48
|
+
# Environments
|
|
49
|
+
.env.local
|
|
50
|
+
.env.*.local
|
|
51
|
+
venv/
|
|
52
|
+
env/
|
|
53
|
+
ENV/
|
|
54
|
+
env.bak/
|
|
55
|
+
venv.bak/
|
|
56
|
+
|
|
57
|
+
# IDE
|
|
58
|
+
.vscode/
|
|
59
|
+
.idea/
|
|
60
|
+
*.swp
|
|
61
|
+
*.swo
|
|
62
|
+
*~
|
|
63
|
+
|
|
64
|
+
# OS
|
|
65
|
+
.DS_Store
|
|
66
|
+
.DS_Store?
|
|
67
|
+
._*
|
|
68
|
+
.Spotlight-V100
|
|
69
|
+
.Trashes
|
|
70
|
+
ehthumbs.db
|
|
71
|
+
Thumbs.db
|
|
72
|
+
|
|
73
|
+
# Project specific
|
|
74
|
+
logs/
|
|
75
|
+
*.log
|
|
76
|
+
.git/
|
|
77
|
+
.gitignore
|
|
78
|
+
README.md
|
|
79
|
+
docker-compose.yml
|
|
80
|
+
Dockerfile
|
|
81
|
+
*.md
|
|
82
|
+
!README.md
|
|
83
|
+
logo.png
|
|
84
|
+
|
|
85
|
+
# Docker
|
|
86
|
+
docker/
|
|
87
|
+
.dockerignore
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# Docker Environment Configuration for RouteMQ
|
|
2
|
+
# Copy this file to .env and customize for your deployment
|
|
3
|
+
|
|
4
|
+
# MQTT Broker Configuration
|
|
5
|
+
MQTT_BROKER=test.mosquitto.org
|
|
6
|
+
MQTT_PORT=1883
|
|
7
|
+
MQTT_USERNAME=
|
|
8
|
+
MQTT_PASSWORD=
|
|
9
|
+
MQTT_GROUP_NAME=mqtt_framework_group
|
|
10
|
+
|
|
11
|
+
# MySQL Configuration
|
|
12
|
+
ENABLE_MYSQL=true
|
|
13
|
+
DB_HOST=mysql
|
|
14
|
+
DB_PORT=3306
|
|
15
|
+
DB_NAME=mqtt_framework
|
|
16
|
+
DB_USER=routemq
|
|
17
|
+
DB_PASS=routemq
|
|
18
|
+
|
|
19
|
+
# Database Pool Configuration
|
|
20
|
+
# DB_POOL_SIZE=5
|
|
21
|
+
# DB_POOL_MAX_OVERFLOW=10
|
|
22
|
+
# DB_POOL_TIMEOUT=30
|
|
23
|
+
# DB_POOL_RECYCLE=1800
|
|
24
|
+
# DB_POOL_PRE_PING=true
|
|
25
|
+
# DB_POOL_USE_LIFO=false
|
|
26
|
+
# DB_POOL_CLASS=default
|
|
27
|
+
|
|
28
|
+
# Redis Configuration
|
|
29
|
+
ENABLE_REDIS=true
|
|
30
|
+
REDIS_HOST=redis
|
|
31
|
+
REDIS_PORT=6379
|
|
32
|
+
REDIS_DB=0
|
|
33
|
+
REDIS_PASSWORD=
|
|
34
|
+
|
|
35
|
+
# TSDB (ClickHouse) Configuration
|
|
36
|
+
ENABLE_TSDB=false
|
|
37
|
+
TSDB_HOST=clickhouse
|
|
38
|
+
TSDB_PORT=8123
|
|
39
|
+
TSDB_DATABASE=default
|
|
40
|
+
TSDB_USER=default
|
|
41
|
+
TSDB_PASSWORD=
|
|
42
|
+
|
|
43
|
+
# Queue Configuration
|
|
44
|
+
QUEUE_CONNECTION=redis
|
|
45
|
+
|
|
46
|
+
# Metrics HTTP Configuration
|
|
47
|
+
METRICS_HTTP_ENABLED=false
|
|
48
|
+
# PROMETHEUS_MULTIPROC_DIR=/tmp/routemq-prom
|
|
49
|
+
|
|
50
|
+
# Timezone
|
|
51
|
+
TIMEZONE=Asia/Jakarta
|
|
52
|
+
|
|
53
|
+
# Logging Configuration
|
|
54
|
+
LOG_FORMATTER=json
|
|
55
|
+
LOG_FIELD_PROFILE=otel
|
|
56
|
+
LOG_LEVEL=INFO
|
|
57
|
+
LOG_TO_CONSOLE=true
|
|
58
|
+
LOG_STREAM=stdout
|
|
59
|
+
LOG_INCLUDE_CONTEXT=true
|
|
60
|
+
LOG_LIFECYCLE_EVENTS=true
|
|
61
|
+
LOG_LIFECYCLE_LEVEL=INFO
|
|
62
|
+
LOG_TO_FILE=false
|
|
63
|
+
LOG_FORMAT=%(asctime)s - %(name)s - %(levelname)s - %(message)s
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# RouteMQ Configuration Example
|
|
2
|
+
|
|
3
|
+
# Basic Configuration
|
|
4
|
+
MQTT_BROKER=localhost
|
|
5
|
+
MQTT_PORT=1883
|
|
6
|
+
MQTT_CLIENT_ID=mqtt-framework-main
|
|
7
|
+
MQTT_USERNAME=
|
|
8
|
+
MQTT_PASSWORD=
|
|
9
|
+
MQTT_GROUP_NAME=mqtt_framework_group
|
|
10
|
+
|
|
11
|
+
# Database Configuration
|
|
12
|
+
ENABLE_MYSQL=true
|
|
13
|
+
DB_HOST=localhost
|
|
14
|
+
DB_PORT=3306
|
|
15
|
+
DB_NAME=mqtt_framework
|
|
16
|
+
DB_USER=root
|
|
17
|
+
DB_PASS=
|
|
18
|
+
|
|
19
|
+
# Database Pool Configuration
|
|
20
|
+
# DB_POOL_SIZE=5
|
|
21
|
+
# DB_POOL_MAX_OVERFLOW=10
|
|
22
|
+
# DB_POOL_TIMEOUT=30
|
|
23
|
+
# DB_POOL_RECYCLE=1800
|
|
24
|
+
# DB_POOL_PRE_PING=true
|
|
25
|
+
# DB_POOL_USE_LIFO=false
|
|
26
|
+
# DB_POOL_CLASS=default
|
|
27
|
+
|
|
28
|
+
# Redis Configuration
|
|
29
|
+
ENABLE_REDIS=false
|
|
30
|
+
|
|
31
|
+
# TSDB (ClickHouse) Configuration — optional, requires routemq[clickhouse]
|
|
32
|
+
ENABLE_TSDB=false
|
|
33
|
+
TSDB_HOST=localhost
|
|
34
|
+
TSDB_PORT=8123
|
|
35
|
+
TSDB_DATABASE=default
|
|
36
|
+
TSDB_USER=default
|
|
37
|
+
TSDB_PASSWORD=
|
|
38
|
+
TSDB_BATCH_SIZE=10000
|
|
39
|
+
TSDB_FLUSH_INTERVAL=1.0
|
|
40
|
+
TSDB_BUFFER_MAXSIZE=50000
|
|
41
|
+
TSDB_ASYNC_INSERT=true
|
|
42
|
+
|
|
43
|
+
# Queue Configuration
|
|
44
|
+
# Queue connection driver: 'redis' or 'database'
|
|
45
|
+
# Redis queue is faster but requires ENABLE_REDIS=true
|
|
46
|
+
# Database queue is persistent but requires ENABLE_MYSQL=true
|
|
47
|
+
QUEUE_CONNECTION=redis
|
|
48
|
+
|
|
49
|
+
# Metrics HTTP Configuration
|
|
50
|
+
METRICS_HTTP_ENABLED=false
|
|
51
|
+
# PROMETHEUS_MULTIPROC_DIR=/tmp/routemq-prom
|
|
52
|
+
|
|
53
|
+
# Logging Configuration
|
|
54
|
+
# Formatter: json (default NDJSON) or plain (legacy text logs)
|
|
55
|
+
LOG_FORMATTER=json
|
|
56
|
+
|
|
57
|
+
# Field profile: otel, ecs, datadog, loki, or routemq
|
|
58
|
+
LOG_FIELD_PROFILE=otel
|
|
59
|
+
|
|
60
|
+
# Log level: DEBUG, INFO, WARNING, ERROR, CRITICAL
|
|
61
|
+
LOG_LEVEL=INFO
|
|
62
|
+
|
|
63
|
+
# Console logging and stream selection
|
|
64
|
+
LOG_TO_CONSOLE=true
|
|
65
|
+
LOG_STREAM=stdout
|
|
66
|
+
|
|
67
|
+
# Include RouteMQ observability context in log records
|
|
68
|
+
LOG_INCLUDE_CONTEXT=true
|
|
69
|
+
|
|
70
|
+
# Mirror RouteMQ lifecycle events to logs
|
|
71
|
+
LOG_LIFECYCLE_EVENTS=true
|
|
72
|
+
LOG_LIFECYCLE_LEVEL=INFO
|
|
73
|
+
|
|
74
|
+
# Enable/disable file logging (true/false)
|
|
75
|
+
LOG_TO_FILE=false
|
|
76
|
+
|
|
77
|
+
# Log file path (relative to project root or absolute path)
|
|
78
|
+
LOG_FILE=logs/app.log
|
|
79
|
+
|
|
80
|
+
# Legacy plain log format pattern (used when LOG_FORMATTER=plain)
|
|
81
|
+
LOG_FORMAT=%(asctime)s - %(name)s - %(levelname)s - %(message)s
|
|
82
|
+
|
|
83
|
+
# Rotation type: 'size' for size-based rotation, 'time' for time-based rotation
|
|
84
|
+
LOG_ROTATION_TYPE=size
|
|
85
|
+
|
|
86
|
+
# Size-based rotation settings
|
|
87
|
+
# Maximum file size in bytes before rotation (default: 10MB)
|
|
88
|
+
LOG_MAX_BYTES=10485760
|
|
89
|
+
# Number of backup files to keep
|
|
90
|
+
LOG_BACKUP_COUNT=5
|
|
91
|
+
|
|
92
|
+
# Time-based rotation settings (only used when LOG_ROTATION_TYPE=time)
|
|
93
|
+
# When to rotate: 'midnight', 'D' (daily), 'H' (hourly), 'M' (monthly), etc.
|
|
94
|
+
LOG_ROTATION_WHEN=midnight
|
|
95
|
+
# Rotation interval (e.g., 1 for every day if WHEN=D)
|
|
96
|
+
LOG_ROTATION_INTERVAL=1
|
|
97
|
+
# Date format for backup file names
|
|
98
|
+
LOG_DATE_FORMAT=%Y-%m-%d
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
name: Bug report
|
|
2
|
+
description: Report a reproducible RouteMQ bug
|
|
3
|
+
title: "bug: "
|
|
4
|
+
labels: [bug]
|
|
5
|
+
body:
|
|
6
|
+
- type: markdown
|
|
7
|
+
attributes:
|
|
8
|
+
value: |
|
|
9
|
+
Do not report undisclosed security vulnerabilities here. Use GitHub Security Advisories or the fallback email in SECURITY.md.
|
|
10
|
+
- type: input
|
|
11
|
+
id: version
|
|
12
|
+
attributes:
|
|
13
|
+
label: RouteMQ version
|
|
14
|
+
description: Package version or commit SHA.
|
|
15
|
+
placeholder: "0.17.1"
|
|
16
|
+
validations:
|
|
17
|
+
required: true
|
|
18
|
+
- type: input
|
|
19
|
+
id: python
|
|
20
|
+
attributes:
|
|
21
|
+
label: Python version
|
|
22
|
+
placeholder: "3.12"
|
|
23
|
+
validations:
|
|
24
|
+
required: true
|
|
25
|
+
- type: textarea
|
|
26
|
+
id: reproduce
|
|
27
|
+
attributes:
|
|
28
|
+
label: Minimal reproduction
|
|
29
|
+
description: Include topic, payload shape, route definition, broker/Redis/MySQL details if relevant, and exact commands.
|
|
30
|
+
validations:
|
|
31
|
+
required: true
|
|
32
|
+
- type: textarea
|
|
33
|
+
id: expected
|
|
34
|
+
attributes:
|
|
35
|
+
label: Expected behavior
|
|
36
|
+
validations:
|
|
37
|
+
required: true
|
|
38
|
+
- type: textarea
|
|
39
|
+
id: actual
|
|
40
|
+
attributes:
|
|
41
|
+
label: Actual behavior
|
|
42
|
+
description: Include logs or traceback with secrets removed.
|
|
43
|
+
validations:
|
|
44
|
+
required: true
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
name: Feature request
|
|
2
|
+
description: Propose a RouteMQ feature or behavior change
|
|
3
|
+
title: "feat: "
|
|
4
|
+
labels: [enhancement]
|
|
5
|
+
body:
|
|
6
|
+
- type: textarea
|
|
7
|
+
id: use-case
|
|
8
|
+
attributes:
|
|
9
|
+
label: Use case
|
|
10
|
+
description: What problem does this solve for a RouteMQ user?
|
|
11
|
+
validations:
|
|
12
|
+
required: true
|
|
13
|
+
- type: textarea
|
|
14
|
+
id: proposal
|
|
15
|
+
attributes:
|
|
16
|
+
label: Proposed behavior or API
|
|
17
|
+
description: Include example routes, jobs, middleware, or CLI commands when helpful.
|
|
18
|
+
validations:
|
|
19
|
+
required: true
|
|
20
|
+
- type: textarea
|
|
21
|
+
id: compatibility
|
|
22
|
+
attributes:
|
|
23
|
+
label: Compatibility concerns
|
|
24
|
+
description: Note any migration, SemVer, or dependency impact.
|
|
25
|
+
validations:
|
|
26
|
+
required: false
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# Security Vulnerability Triage Process
|
|
2
|
+
|
|
3
|
+
## Scope
|
|
4
|
+
|
|
5
|
+
- Covers Bandit SAST findings, pip-audit dependency CVE findings, and future scanners that report
|
|
6
|
+
actionable vulnerability findings.
|
|
7
|
+
- Does not cover secret-scanning findings. Secret-scanning is handled separately through GitGuardian or
|
|
8
|
+
GitHub secret-scanning.
|
|
9
|
+
|
|
10
|
+
## Severity Classification
|
|
11
|
+
|
|
12
|
+
| Unified | Bandit | pip-audit (CVSS) | SLA to acknowledge | SLA to resolve |
|
|
13
|
+
|---|---|---|---|---|
|
|
14
|
+
| Critical | n/a | 9.0-10.0 | 1 business day | 7 calendar days |
|
|
15
|
+
| High | High | 7.0-8.9 | 2 business days | 14 calendar days |
|
|
16
|
+
| Medium | Medium | 4.0-6.9 | 5 business days | 30 calendar days |
|
|
17
|
+
| Low | Low | 0.1-3.9 | best-effort | best-effort |
|
|
18
|
+
| Info | n/a (low confidence) | n/a | n/a - TP review only | n/a |
|
|
19
|
+
|
|
20
|
+
## Triage Decision Tree
|
|
21
|
+
|
|
22
|
+
1. New finding appears in CI output.
|
|
23
|
+
2. Reviewer classifies the finding. The default reviewer is the PR author. Escalate to CODEOWNERS if
|
|
24
|
+
ownership is unclear.
|
|
25
|
+
3. Use one of these outcomes:
|
|
26
|
+
|
|
27
|
+
- **TP (true positive)** - real vulnerability exploitable in this codebase's usage. Open an issue, label
|
|
28
|
+
`security:tp`, attach the finding ID, and prioritize per the SLA above.
|
|
29
|
+
- **FP (false positive)** - finding does not apply. Examples: dev-only dependency, unreachable code path, or
|
|
30
|
+
wrong tool inference. Suppress per the Suppression section below; document rationale in the PR or issue.
|
|
31
|
+
- **Won't fix (accepted risk)** - TP but business-justified. Requires CODEOWNER sign-off; document in
|
|
32
|
+
`.github/SECURITY-EXCEPTIONS.md` created on first use; review at least quarterly.
|
|
33
|
+
|
|
34
|
+
## Suppression Mechanisms
|
|
35
|
+
|
|
36
|
+
### Bandit
|
|
37
|
+
|
|
38
|
+
- Per-line: `# nosec B<rule-id> # <one-line rationale>`; must include rule ID and rationale.
|
|
39
|
+
- Per-file: `# nosec # justified at top-of-file: <rationale>`.
|
|
40
|
+
- Repo-wide: `pyproject.toml [tool.bandit]` `skips` or `tests` arrays. Requires PR review and CODEOWNER
|
|
41
|
+
sign-off.
|
|
42
|
+
|
|
43
|
+
### pip-audit
|
|
44
|
+
|
|
45
|
+
- Per-vulnerability ignore: `pyproject.toml [tool.pip-audit]`, if supported in the current version, or CLI flag
|
|
46
|
+
`--ignore-vuln <ID>`.
|
|
47
|
+
- Document each ignore in a `.github/PIP_AUDIT_IGNORES.md` table with columns: ID, Package, Reason,
|
|
48
|
+
Reviewer, Expires.
|
|
49
|
+
- Expire ignores no later than the next major dependency bump or 90 days, whichever comes sooner.
|
|
50
|
+
|
|
51
|
+
## Ownership
|
|
52
|
+
|
|
53
|
+
- First reviewer: PR author who introduced the dependency or code path.
|
|
54
|
+
- Escalation: CODEOWNERS for the affected module. See `.github/CODEOWNERS`.
|
|
55
|
+
- Security questions: use GitHub Security Advisories for private reports, or email the maintainer listed in
|
|
56
|
+
`SECURITY.md` when the advisory form is unavailable.
|
|
57
|
+
|
|
58
|
+
## Re-Validation Cadence
|
|
59
|
+
|
|
60
|
+
- Suppressions and accepted-risk entries are reviewed quarterly on the first Monday of each quarter.
|
|
61
|
+
- A scheduled GitHub Action runs CI weekly to catch newly disclosed dependency and SAST findings in already-deployed dependencies.
|
|
62
|
+
- Failed scheduled scans open an issue automatically in a future sprint.
|
|
63
|
+
|
|
64
|
+
## Reporting
|
|
65
|
+
|
|
66
|
+
- Externally reported vulnerabilities through GitHub Security Advisories, email, or similar channels follow the
|
|
67
|
+
standard GitHub coordinated-disclosure flow.
|
|
68
|
+
- Public `SECURITY.md`, if present, defines disclosure expectations.
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
# Branch Protection Policy for RouteMQ Sprint 02
|
|
2
|
+
# ==============================================
|
|
3
|
+
# This file documents the required branch protection settings.
|
|
4
|
+
#
|
|
5
|
+
# IMPORTANT: This is a REFERENCE configuration. GitHub branch protection
|
|
6
|
+
# rules must be applied via GitHub UI or API. This file is not
|
|
7
|
+
# automatically enforced by GitHub.
|
|
8
|
+
#
|
|
9
|
+
# To apply these settings:
|
|
10
|
+
# 1. Use GitHub UI: Settings > Branches > Add rule
|
|
11
|
+
# 2. Or use GitHub CLI: gh api repos/{owner}/{repo}/branches/{branch}/protection
|
|
12
|
+
# 3. Or use Probot Settings app (if configured)
|
|
13
|
+
|
|
14
|
+
# Target branches for protection
|
|
15
|
+
branches:
|
|
16
|
+
- master
|
|
17
|
+
- develop
|
|
18
|
+
|
|
19
|
+
# Protection rules
|
|
20
|
+
protection:
|
|
21
|
+
# Require pull request reviews before merging
|
|
22
|
+
required_pull_request_reviews:
|
|
23
|
+
# 0 = solo-dev mode; status checks still required
|
|
24
|
+
required_approving_review_count: 0
|
|
25
|
+
dismiss_stale_reviews: true
|
|
26
|
+
require_code_owner_reviews: false
|
|
27
|
+
# Require review from code owners (optional, set to true if CODEOWNERS exists)
|
|
28
|
+
require_last_push_approval: false
|
|
29
|
+
|
|
30
|
+
# Require status checks to pass before merging
|
|
31
|
+
required_status_checks:
|
|
32
|
+
# Require branches to be up to date before merging
|
|
33
|
+
strict: true
|
|
34
|
+
# Status checks that are required (must match exact job names in .github/workflows/ci.yml)
|
|
35
|
+
contexts:
|
|
36
|
+
- test
|
|
37
|
+
- lint
|
|
38
|
+
- type-check
|
|
39
|
+
- security
|
|
40
|
+
- coverage
|
|
41
|
+
- build
|
|
42
|
+
# Note: All jobs depend on 'test', so requiring all ensures full CI passes
|
|
43
|
+
|
|
44
|
+
# Require conversation resolution before merging
|
|
45
|
+
required_conversation_resolution: true
|
|
46
|
+
|
|
47
|
+
# Require signed commits (optional - enable for high-security requirements)
|
|
48
|
+
required_signatures: false
|
|
49
|
+
|
|
50
|
+
# Include administrators (apply rules to admins too)
|
|
51
|
+
enforce_admins: true
|
|
52
|
+
|
|
53
|
+
# Restrict who can push to matching branches
|
|
54
|
+
restrictions: null # null = no restrictions beyond the rules above
|
|
55
|
+
|
|
56
|
+
# Require linear history (no merge commits)
|
|
57
|
+
required_linear_history: true
|
|
58
|
+
|
|
59
|
+
# Allow force pushes (MUST be false for protection)
|
|
60
|
+
allow_force_pushes: false
|
|
61
|
+
|
|
62
|
+
# Allow deletions
|
|
63
|
+
allow_deletions: false
|
|
64
|
+
|
|
65
|
+
# Require deployments to succeed before merging (optional)
|
|
66
|
+
required_deployments: null
|
|
67
|
+
|
|
68
|
+
# Sprint 02 Additional Requirements
|
|
69
|
+
# ---------------------------------
|
|
70
|
+
sprint_02:
|
|
71
|
+
effective_date: "2026-05-25"
|
|
72
|
+
rationale: |
|
|
73
|
+
Branch protection ensures code quality and prevents accidental
|
|
74
|
+
changes to protected branches. Required checks enforce:
|
|
75
|
+
- All tests pass (test)
|
|
76
|
+
- Code style compliance (lint)
|
|
77
|
+
- Type safety (type-check)
|
|
78
|
+
- Security scanning (security)
|
|
79
|
+
- Coverage thresholds (coverage)
|
|
80
|
+
- Package build success (build)
|
|
81
|
+
|
|
82
|
+
notes: |
|
|
83
|
+
- The 'test' job is the base dependency for all other CI jobs
|
|
84
|
+
- 'lint' includes both ruff lint and format checks
|
|
85
|
+
- 'security' includes Bandit SAST and pip-audit dependency scan
|
|
86
|
+
- 'coverage' generates test coverage reports
|
|
87
|
+
- 'build' verifies the package builds correctly
|
|
88
|
+
|
|
89
|
+
exemptions: |
|
|
90
|
+
Emergency hotfixes may bypass review requirements via admin override,
|
|
91
|
+
but this should be documented and reviewed post-merge.
|
|
92
|
+
|
|
93
|
+
# GitHub CLI Commands for Reference
|
|
94
|
+
# ---------------------------------
|
|
95
|
+
# To apply these settings via GitHub CLI, run:
|
|
96
|
+
#
|
|
97
|
+
# gh api repos/{owner}/{repo}/branches/master/protection \
|
|
98
|
+
# --method PUT \
|
|
99
|
+
# --input - <<EOF
|
|
100
|
+
# {
|
|
101
|
+
# "required_status_checks": {
|
|
102
|
+
# "strict": true,
|
|
103
|
+
# "contexts": ["test", "lint", "type-check", "security", "coverage", "build"]
|
|
104
|
+
# },
|
|
105
|
+
# "enforce_admins": true,
|
|
106
|
+
# "required_pull_request_reviews": {
|
|
107
|
+
# "required_approving_review_count": 1,
|
|
108
|
+
# "dismiss_stale_reviews": true
|
|
109
|
+
# },
|
|
110
|
+
# "restrictions": null,
|
|
111
|
+
# "required_linear_history": true,
|
|
112
|
+
# "allow_force_pushes": false,
|
|
113
|
+
# "allow_deletions": false,
|
|
114
|
+
# "required_conversation_resolution": true
|
|
115
|
+
# }
|
|
116
|
+
# EOF
|
|
117
|
+
#
|
|
118
|
+
# Repeat for 'develop' branch.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
version: 2
|
|
2
|
+
updates:
|
|
3
|
+
- package-ecosystem: "github-actions"
|
|
4
|
+
directory: "/"
|
|
5
|
+
schedule:
|
|
6
|
+
interval: "weekly"
|
|
7
|
+
day: "monday"
|
|
8
|
+
time: "09:00"
|
|
9
|
+
timezone: "Asia/Jakarta"
|
|
10
|
+
open-pull-requests-limit: 5
|
|
11
|
+
commit-message:
|
|
12
|
+
prefix: "ci"
|
|
13
|
+
include: "scope"
|
|
14
|
+
labels:
|
|
15
|
+
- "dependencies"
|
|
16
|
+
- "github-actions"
|
|
17
|
+
|
|
18
|
+
- package-ecosystem: "pip"
|
|
19
|
+
directory: "/"
|
|
20
|
+
schedule:
|
|
21
|
+
interval: "monthly"
|
|
22
|
+
commit-message:
|
|
23
|
+
prefix: "build"
|
|
24
|
+
include: "scope"
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
name-template: 'v$RESOLVED_VERSION'
|
|
2
|
+
tag-template: 'v$RESOLVED_VERSION'
|
|
3
|
+
version-resolver:
|
|
4
|
+
major:
|
|
5
|
+
labels:
|
|
6
|
+
- 'major'
|
|
7
|
+
minor:
|
|
8
|
+
labels:
|
|
9
|
+
- 'minor'
|
|
10
|
+
patch:
|
|
11
|
+
labels:
|
|
12
|
+
- 'patch'
|
|
13
|
+
default: patch
|
|
14
|
+
categories:
|
|
15
|
+
- title: '⚠️ Breaking changes'
|
|
16
|
+
labels:
|
|
17
|
+
- 'breaking change'
|
|
18
|
+
- title: '🚀 Features'
|
|
19
|
+
labels:
|
|
20
|
+
- 'feature'
|
|
21
|
+
- title: '🐛 Bug Fixes'
|
|
22
|
+
labels:
|
|
23
|
+
- 'bug'
|
|
24
|
+
- title: '📃 Documents'
|
|
25
|
+
labels:
|
|
26
|
+
- 'docs'
|
|
27
|
+
- title: '🧩 Dependency Updates'
|
|
28
|
+
labels:
|
|
29
|
+
- 'deps'
|
|
30
|
+
- 'dependencies'
|
|
31
|
+
- 'bump'
|
|
32
|
+
- 'chore'
|
|
33
|
+
collapse-after: 5
|
|
34
|
+
- title: '🔬 Others'
|
|
35
|
+
labels:
|
|
36
|
+
- 'style'
|
|
37
|
+
- 'refactor'
|
|
38
|
+
- 'test'
|
|
39
|
+
- 'ci'
|
|
40
|
+
collapse-after: 5
|
|
41
|
+
autolabeler:
|
|
42
|
+
- label: 'breaking change'
|
|
43
|
+
title:
|
|
44
|
+
- '/!:/i'
|
|
45
|
+
- label: 'feature'
|
|
46
|
+
title:
|
|
47
|
+
- '/feat:/i'
|
|
48
|
+
- label: 'bug'
|
|
49
|
+
title:
|
|
50
|
+
- '/fix:/i'
|
|
51
|
+
- label: 'style'
|
|
52
|
+
title:
|
|
53
|
+
- '/style:/i'
|
|
54
|
+
- label: 'refactor'
|
|
55
|
+
title:
|
|
56
|
+
- '/refactor:/i'
|
|
57
|
+
- label: 'test'
|
|
58
|
+
title:
|
|
59
|
+
- '/test:/i'
|
|
60
|
+
- label: 'chore'
|
|
61
|
+
title:
|
|
62
|
+
- '/chore:/i'
|
|
63
|
+
- label: 'docs'
|
|
64
|
+
title:
|
|
65
|
+
- '/docs:/i'
|
|
66
|
+
- label: 'ci'
|
|
67
|
+
title:
|
|
68
|
+
- '/ci:/i'
|
|
69
|
+
- label: 'dependencies'
|
|
70
|
+
title:
|
|
71
|
+
- '/deps:/i'
|
|
72
|
+
- '/dependencies:/i'
|
|
73
|
+
- '/bump:/i'
|
|
74
|
+
commitish: master
|
|
75
|
+
change-template: '- $TITLE @$AUTHOR (#$NUMBER)'
|
|
76
|
+
change-title-escapes: '\<_*&'
|
|
77
|
+
template: |
|
|
78
|
+
$CHANGES
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# RELEASE_TOKEN Rotation Procedure
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
`RELEASE_TOKEN` is a fine-grained GitHub PAT used by `.github/workflows/release.yml`
|
|
5
|
+
specifically for the `gh pr create`/`gh pr merge` step. This is necessary because
|
|
6
|
+
GitHub deliberately suppresses CI triggering on PRs created by `GITHUB_TOKEN`.
|
|
7
|
+
|
|
8
|
+
## Current Token (do not commit value here)
|
|
9
|
+
- Owner: ardzz (personal account)
|
|
10
|
+
- Created: 2026-05-27 (approx)
|
|
11
|
+
- Expires: 2026-08-25 (90 days from creation)
|
|
12
|
+
- Repository access: Only ardzz/RouteMQ
|
|
13
|
+
- Permissions:
|
|
14
|
+
- Contents: Read and write
|
|
15
|
+
- Pull requests: Read and write
|
|
16
|
+
- Workflows: Read and write
|
|
17
|
+
|
|
18
|
+
## Rotation Schedule
|
|
19
|
+
- **Calendar reminder:** 7 days before expiration
|
|
20
|
+
- **Hard deadline:** Day of expiration
|
|
21
|
+
- **GitHub auto-emails the owner** ~7 days before; do not ignore
|
|
22
|
+
|
|
23
|
+
## Rotation Steps
|
|
24
|
+
1. Open https://github.com/settings/personal-access-tokens/new
|
|
25
|
+
2. Generate new fine-grained PAT with identical scopes (see above)
|
|
26
|
+
3. Open https://github.com/ardzz/RouteMQ/settings/secrets/actions
|
|
27
|
+
4. Click `RELEASE_TOKEN` → Update → paste new value → Update secret
|
|
28
|
+
5. Go back to https://github.com/settings/personal-access-tokens
|
|
29
|
+
6. Find the previous token → Revoke
|
|
30
|
+
7. Verify by triggering a small `fix:` commit and confirming the bump PR has CI checks
|
|
31
|
+
|
|
32
|
+
## Security Reminders
|
|
33
|
+
- **NEVER paste this token into chat, screenshots, commits, or external tools.**
|
|
34
|
+
- GitGuardian (CI check) will catch accidental commit-time exposure.
|
|
35
|
+
- If you suspect leakage: revoke immediately, generate new, update secret.
|
|
36
|
+
- This token grants write access to RouteMQ only (fine-grained), but a compromise
|
|
37
|
+
could push commits, create PRs, and modify workflows. Treat as production credential.
|
|
38
|
+
|
|
39
|
+
## Why PAT and Not GitHub App
|
|
40
|
+
PAT was chosen for setup simplicity (Sprint 18). A GitHub App would be more secure
|
|
41
|
+
(short-lived tokens, no user dependency). Migration to App is a future micro-sprint
|
|
42
|
+
(`SPRINT-18b` candidate) when warranted.
|