When a pull request is created, GitHub runs the tests. If they fail, the branch won't be mergeable on develop. If the pipeline passes the pull request needs to be approved by someone who's an owner of the repository and then if approved the pull request can be merged.
The backend and the frontend have automatic deployment on a VM. After merge on develop, everything gets deployed on the dev environment.
We're using a very basic branching strategy. Our default branch in all the repositories is develop. We create feature branches from develop and once finished, we create pull requests to the default branch. We merge develop on master when we have everything done and tested.