UniversityOfHelsinkiCS / prkl

Projektiryhmäytymistyökalu
MIT License
6 stars 4 forks source link

Assembler

Assembler is a tool for automating division of students into project groups. It goes by the nickname "prkl" which is shorthand for Projektiryhmäytymistyökalu. More comprehensive description here.

Branch CI Status
master CI/CD Pipeline
trunk CI/CD Pipeline

Documentation:

Basic documentation is listed here. If you are member of development group in Ohjelmistotuotantoprojekti-course, you might be interested in more "beginner-friendly" explanation in wiki (in Finnish).

Structure

A descriptive graph of the frontend structure can be found here

A similar graph for the backend structure can be found here

Setup

A little Getting started -guide can be found here

Development

Docker-compose is used the run the app in development mode on your computer. First make sure docker and docker-compose are installed on your computer. Then the development environment can be started using

docker-compose up

This starts the client, graphQl server, database and adminer service in their own containers. Use docker ps to list all running containers and docker-compose down to stop them.

A graphQl endpoint can be found at http://localhost:3001/grapgql.

The server restarts automatically after changes to the source code. The server also contains a production version of the client but it's not hot-loadable so it is more convenient to use the hot-loadable development front end at http://localhost:3000.

The local Postgres database starts in it's own container and it can easily be accessed using Adminer at http://localhost:3003 (System: PostgreSQL, Server: db, Username: postgres, Password: postgres, Database: postgres).

Note to Windows users: Hot loading changes in the front end and back end may not work as intended on a Windows machine while using docker-compose. One solution is to run the project on WSL (Windows Subsystem for Linux). Another way is to use docker-compose only to start the database and adminer (docker-compose up adminer db) while starting the client and server manually. In this case start the client in the client folder with npm start and the server in the server folder with npm run start:dev. Another possible solution is to use Docker Desktop. Make sure the program is running before using docker-compose up, shut down prkl_frontend_1 and start the client with npm start dev

Installing dependencies

The node_modules folders in both the frontend and backend are shared between the Docker container and development computer using Docker volumes. To ensure a consistent development environment it is adviced to install dependencies from inside the container and then mirror them to the outside. The reason is, that things like the npm version or the operating system can affect what actual node_modules are installed. Installing dependencies from inside the container can be achieved using the following steps:

  1. When in the /client or /server folder, install the dependency using npm install on your development computer like you normally would.
  2. Delete the node_modules folder
  3. Start the development environment using docker-compose up --build

When the container starts up, it checks if a node_modules folder is present. If it's missing it installs the modules. After the install, the new node_modules folder will appear on the development computer as well.

If someone else has installed new dependencies (for example you see changes in package.json or package.lock.json after pulling a new version): Delete the node_modules folder and have the new dependencies installed automatically by using docker-compose up --build.

End to end tests

Cypress is used for end-to-end tests. It is recommended to have Cypress installed globally (npm i -g cypress). To use cypress, first launch Assembler in development mode as outlined above. Then do:

cd e2e
npm install
npm run test:dev

To run all tests in headless mode like they are run in CI

docker-compose -f docker-compose.ci.yml run tests

The development app needs to be close for this in order to avoid port conflicts. Also if docker-compose runs as root you may need sudo chown -R $USER:$USER pg_data.

Backend unit tests

The server has unit tests written with Jest. You can run them with

cd server
npm run start:test`

Product backlog

The product backlog can be found here.

Previous teams have composed these lists of unfinished tasks and known issues.

Working hours log spring 2022

Working hours log

Metrics spring 2022

See the separate metrics document for metrics and charts.