This project conforms to 12-factor methodology. We want to make this project more accessible to students and learners as an instructional tool while not adding undue code review workloads to anyone with merge authority for this project. To this end we've added several pre-commit code linting and code style tools as well as a quasi-standardized set of GitHub Actions CI/CD automations that manage pull requests and semantic releases.
-
- Codebase: [✅] One codebase tracked in revision control, many deploys
-
- Dependencies: [✅] Explicitly declare and isolate dependencies. We're using setup.py, requirements.txt, and package.json to identify dependencies.
-
- Config: [✅] Store config in the environment. This release implements config.Settings, which stores all configuration information for the package.
-
- Backing services: [-] Treat backing services as attached resources. Not applicable to this project.
-
- Build, release, run: [✅] Strictly separate build and run stages.
Build
is implemented in Makefile,release
is implemented as a GitHub Action, andrun
is deferred to the projects that include this package.
- Build, release, run: [✅] Strictly separate build and run stages.
-
- Processes: [✅] Execute the app as one or more stateless processes
-
- Port binding: [-] Export services via port binding. Not Applicable. This package does not implement any services.
-
- Concurrency: Scale out via the process model
-
- Disposability: [✅] Maximize robustness with fast startup and graceful shutdown
-
- Dev/prod parity: [✅] Keep development, staging, and production as similar as possible. The GitHub Action pushMain.yml executes a forced merge from main to dev branches. This ensure that all dev branches are synced to main immediately after pull requests are merged to main.
-
- Logs: [✅] Treat logs as event streams. Obviously 😉
-
- Admin processes: [✅] Run admin/management tasks as one-off processes. All admin processes are implemented with GitHub Actions and other GitHub management features.