We would like to share some changes we will make soon to our development setup.
Our current master branch is more or less a copy of the staging branch, but can be some commits behind. We are using a Jenkins server which runs tests on the last changes of the staging branch and integrates them into the master branch.
Although it sounds like a good idea it causes a lot of problems. This is because the master branch is protected from changes and it only integrates the changes when all PRs (Pull Request) are successfully tested. In a perfect world this would work. In reality some tests on a PR are not in the right state because of circumstances that are not related to the PR. Some of the tests on the jenkins server are running on older environments and when tests are failing it is because of the environment, not necessarily any coding errors. This leads to the tests taking a very long time to complete.
The upshot of all this is that the Jenkins server which tries to keep the master branch in sync with the staging branch is less than optimal and creates a lot of problems. So we plan to switch off the master/staging branch sync very soon, ideally this Sunday, 9th July.
If you use the master branch for whatever reason you need to switch to the staging branch to be up to date with the Joomla! Codebase.
We will delete the master branch 7 days after switching off the sync. We checked if we can rename the staging branch to master, but GitHub does not allow renaming. We would need to move all PRs (more than 400) to master manually and delete the staging Branch. This is a lot of work and will cause more problems, so we decided not to rename it.
Some weeks ago we ran a Testing Infrastructure Code Sprint. The problem with our current setup is that we are using too many different tools to test our codebase. Jenkins, Drone, Docker, Travis, AppVeyor, and Selenium being just the main ones . Each of these tools requires knowledge of their setup and usage from our team members. This requirement is a heavy burden on the teams. The goal for the sprint was to reduce our tool set and create a setup that fulfils our needs for testing. We decided to use Jenkins in combination with Docker as the basic tool. All went well and we are now running Jenkins in parallel to our current setup. Our NEW Jenkins Server (it is not the same as the one mentioned in the Master Branch part of this document) will then replace Drone and Travis as a first step. If we get a Windows Server we can also replace AppVeyor but this is not a priority at the moment.
The results so far are great, very encouraging. We are now running all the tests we had on Drone, Travis and we have integrated System Testing. Runtime for this setup is less than 4 Minutes. Our old setup took much longer to complete the testing.
Removing Drone and Travis from our setup will be done over the next few weeks, when we are sure that our new setup runs without problems.