Solution to automatically merge upstream changes #22
Description
I recently worked on a solution to automatize merge of upstream changes and I think I have arrived at something that should make it possible to limit manual interventions as much as possible.
I based my work on a clean fork of docker-library/php
repository, applied some patches on Dockerfile-linux.template
template and declare -dev
versions in versions.json
file, in order to be able to automatically update -dev
images files using apply-templates.sh
script when upstream changes are merged.
Job has been done on the master
branch of my cedric-anne/docker-library-php
fork that does not yet contains latest upstram commits. It should trigger an automatic merge on midnight and an automatic build of images one hour later.
I did not create a pull request as it would not be easy to read due to a complete rebase on docker-library/php
repository.
I splitted my job in 5 commits.
-
https://github.com/cedric-anne/docker-library-php/commit/c7fc99ac9d99311d41d64d79344eddbd4758d05a
This commit just disable the initial CI workflow of thedocker-library/php
repository. Indeed, we cannot reuse it. -
https://github.com/cedric-anne/docker-library-php/commit/c2def05326644602330ceface5aa136897b948c1
This commit containsDockerfile-linux.template
patch, declaration of-dev
versions inversions.json
file, and the daily build workflow.
I tried to made as less changes as possible onDockerfile-linux.template
file to prevent conflicts that would require a manual intervention.
Onversions.json
file, I had to put versions at the beginning of the file to prevent conflicts. Indeed,*-rc
versions are constantly changing fromnull
to a json object (see docker-library/php@b8abf7a and docker-library/php@67c242c), so putting something on previous or on next line will result in conflicts everytime this kind of change will be done. Conversely, putting-dev
versions right before the8.0
version line should not result in any conflict, except when this8.0
version will be removed.
I tried to put-dev
versions in a dedicated files, but it required too many changes and it finally did not seem like a good solution to me. -
https://github.com/cedric-anne/docker-library-php/commit/6ec502c300194ecf4e721838dac812944c85768e
This commit contains the workflow used to automatically merge upstream changes.
In order to be able to push on the master branch, that is a protected branch, I had to generate a Personnal Access Token on my account to be identified as an administrator account. The only other solution would be to generate a PR everytime there is something to merge. It is easy to do, but it would result in something less automated. -
https://github.com/cedric-anne/docker-library-php/commit/a3085731c75a76e40d25b92b9f37e5b116149f8f
This commit contains the README file update and corresponding git attributes to prevent any conflict on this file during merge of upstream changes. -
https://github.com/cedric-anne/docker-library-php/commit/4c7c5c5571eb4700650e766d07b015829b151d1a
This commit contains only changes made automatically byapply-templates.sh
script.