Great idea, I agree that it’s a must to setup a CI server asap, as the devs will start contributing asap too…
I’d like to help/contribute…
How could we somehow distribute the responsibility of this? We definitely multiple people who could help out fixing the machines.
I think that for now, someone should lead the team, he’ll be responsable for pushing things to servers… The rest of the team will be push changes to a git repo with installation instructions (Ansible/Puppet/Chef/Salt???), etc…
Do you plan on reusing the existing automated tests ?
Such as smashbox for server/client, perl scripts for client, and so on.
The CI server is critical if you want to merge PR fast and still maintain code reliability.
I’m not sure for core, but afaik for client no automated tests were run on PR (only on daily builds).
Running those tests on PR would be ideal.
Now the task is to move from our previous setup to a dockerized one. I will soon open a PR in core to run the first tests (autotest.sh sqlite in our server repository) and then we can steadily extend this and play around with all the matrix stuff (multiple PHP versions, DBs, tests, …).
A quick preview:
I used this docker file to generate the php-7-owncloud image:
RUN apt-get update && apt-get install -y \
&& docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
&& docker-php-ext-install gd zip \
&& docker-php-ext-enable gd zip
RUN curl -O -L https://phar.phpunit.de/phpunit.phar \
&& chmod +x phpunit.phar \
&& mv phpunit.phar /usr/local/bin/phpunit
And following .drone.yml that is placed in the server repository:
If your goal is to only provide CI integration for the server component, then drone may be a good answer.
But isn’t there value in providing the same CI tool for server and client components ?
Aside from the obvious advantage of having a single pane of glass for every test, there may be some synergies to be had later down the line.
I saw that you quoted the ability to put everything CI in a git repo ; do you mean that what is being done with smashbox (which is hosted in a repo) and Jenkins at ownCloud is not enough ?