Skip to content
Jason Freeberg edited this page Dec 26, 2020 · 1 revision

The project is structured as two Maven modules, frontend and backend. These modules can be built and individually or together.

Full Build

Running mvn install from the root directory will test and build both the frontend and backend projects into a single, executable JAR file. If any test cases fail, the build will also fail. The frontend project is built first, and static JavaScript and CSS assets are copied to Spring's resources directory.

Maven profiles

Maven's profile feature allows us to specify different configuration for local, staging, or production builds. Under backend/src/main/resources/ there are configuration files for each of the Maven profiles. For more information how this is configured, see this section.

CI/CD

The CI/CD (continuous integration, continuous deployment) is done with GitHub Actions. All the workflows are under .github/workflows/. See the official Actions docs for more information about the feature.

Continuous Integration

Every Pull Request opened to the master branch will run the frontend and backend tests, and do a full build. If the tests fail or the project does not build, the Pull Request will not be allowed to merge. We suggest opening a Pull Request early, and commit and push often. This will find breaking changes earlier.

Continuous Delivery

The production and staging sites are hosted on Azure App Service. When a Pull Request is merged into master, the built .jar is deployed to a staging slot on App Service. When we are ready to do a release, we do one last manual test of application on staging, then swap the production and staging slots. This effectively releases the new build to production, and we can swap back if anything breaks in prod.

Relevant Links

Clone this wiki locally