DevOps
The project followed a mix of the Trunk-based Development and Git flow principles. Pull requests requirements for merging were only related to CI/CD pipeline success, not involving PR reviews.
For the subjekt library project, the project initially migrated from a JVM only project to a Kotlin Multiplatform one using Git flow, organizing the migration into separated, big branches that were merged into a long-lived branch called feat/multiplatform that was ultimately merged into the main branch introducing a breaking change and therefore a MAJOR release. Following up to that, the approach adopted was the Trunk-based one, introducing smaller, incremental changes with frequent releases, all backed by a relevant CI/CD pipeline.
For api-web, web-frontend and bootstrap, the projects started with Trunk-based approach since the beginning, with a simple CI/CD pipeline to automatize publication and check the building outcome of the project.
The whole project used Conventional commits when committing code as well as Semantic Release and Versioning for automatic release and versioning through a solid CI/CD pipeline triggered on default branches. Git Hooks were used in order to perform pre-commit checks on tests passing, code linting etc.
CI/CD
In all the repositories a CI/CD pipeline was set up in order to guarantee code consistency and stability.
Subjekt - library
Where:
check-secretschecks if the necessary secrets are available for the CI/CD pipeline to run.test-extensivelyruns the tests for the library on a matrix of different platforms.release-and-publishreleases the library to the public repository and publishes it on the target registries (Maven Central, NPM, GitHub Packages).successis the final step of the pipeline, where the pipeline is considered successful.
Subjekt - api-web
The api web project has to manage two subprojects contemporarily, the api and the auth one. The pipeline managed common steps with a matrix strategy.
Where:
check-secrets: checks if the necessary secrets are available for the CI/CD pipeline to run.precompute-next-versioncomputes the next version of the project based on the previous one and the commits since the last release.test-commonruns tests on the common project.test-and-checkruns tests and checks on theapiandauthmodules.releasereleases the project to the public repository.deploy-to-registrydeploys the project to the GitHub Packages Docker registry, ONLY if theprecompute-next-versionstep triggered a release.deploy-on-pagesdeploys the project API documentation to GitHub Pages, ONLY if theprecompute-next-versionstep triggered a release.successis the final step of the pipeline, where the pipeline is considered successful.
Subjekt - web-frontend
Where:
check-secretschecks if the necessary secrets are available for the CI/CD pipeline to run.precompute-next-versioncomputes the next version of the project based on the previous one and the commits since the last release.buildbuilds the project.checkruns format and lint checks on the project.releasereleases the project to the public repository.deploy-to-registrydeploys the project to the GitHub Packages Docker registry, ONLY if theprecompute-next-versionstep triggered a release.successis the final step of the pipeline, where the pipeline is considered successful.
Subjekt - bootstrap
The bootstrap project performs end-to-end tests on the project, building the project with docker-compose and running the tests with the playwright library.
check-secretschecks if the necessary secrets are available for the CI/CD pipeline to run.testruns the end-to-end tests on the project using theplaywrightlibrary.releasereleases the project to the public repository.successis the final step of the pipeline, where the pipeline is considered successful.