-
Notifications
You must be signed in to change notification settings - Fork 66
Configure CI/CD for the whole UI #888
Comments
@jstrachan were you ever able to build the thing that would do this? |
From @jstrachan on July 25, 2017 7:41 its on my TODO list once I've finished a few other things... hopefully I'll get to it soon |
@joshuawilson is the main issue that we need to consolidate version change PRs together? I guess there's
For 2 I wonder if we should always combine; or if sometimes we should keep them separate? e.g. a change to, say, planner could break the tests and a change to login might not - but if we combine them together how do we know what really broke things? I guess if a PR fails we could try split them up again? Maybe for 2 we could define what dependencies to group together using dependency name includes/exclues? e.g. group all changes in fabric8-ui/* projects together; or list all the permutations of stuff you want to group together; otherwise leave them seperate. e.g. anything angular? |
Yeah, this currently happens in the pipeline today https://github.com/fabric8io/fabric8-pipeline-library/blob/master/vars/npmUpdateOrganisationDependencies.groovy#L61 so if updatebot did the same thing it shouldn't change any current expected behaviour.
This is the main issue we have with the auto version updates provided by our pipelines.
The initial example used was if a change to ngx-base is made we currently update all other repos in the fabric8-ui org with individual PRs containing just the ngx-base version update. But the PR that updates fabric8-ui will always fail because it must include the update to fabric8-planner which in turn has the new ngx-base else there are version mismatches and will cause failure. This is a diagram from @joshuawilson, ok runtime console has gone but it shows the repo dependencies. I wondered if we knew that a PR requires multiple package updates if we could open up a branch and commit the version update but only make a PR when the branch contains all required updates? Then when we go to update a downstream repo we check if there's a branch already open for the version update? Not sure this is a good approach or not yet. |
You have it mostly figured out. Here is updated diagram. Here is what I have to do manually. Change ngx-base. Update the version of ngx-base in all the other components but since they are also added I do it in order. Update ngx-login-client and ngx-fabric8-wit. Once those pass, update fabric8-planner and farbric8-stack-analysis. The update to those will be an update of ngx-base and the version of ngx-login-client and ngx-fabric8-wit that now has ngx-base in it. Once all the children are updated I update fabric8-ui. That will include a new version everything that was just changed. If you just change ngx-widgets then the updates aren't as wide spread but work in a similar fashion following the diagram. Update fabric8-planner and farbric8-stack-analysis. Then update all 3 versions in fabric8-ui. |
I just thought of another layer of complexity. What happens when I need to update a package that is used by all the components? When I update Angular, I still need to start from the bottom and work my way up. But now, Angular has to be updated along with the ngx-base at the next layer up. |
for most common stuff (e.g. angular) I'm hoping we can configure a single project to be the I'm about to add a project specific set of includes/excludes patterns so that we can define owners of sets of dependencies at different points in the tree; the simplest possible thing is to let |
am still pondering on how best to tackle the fabric8-ui tree problem in updatebot. I guess the main issue is we want to delay updating, say, Are we sure its a huge issue to not be able to upgrade, say, Am just balancing up complexity versus expedience really. In terms of simplicity, the easiest thing to do would be something like:
how's that sound as a first stab? |
@joshuawilson btw do you really want to manually curate by hand dependencies in, say, |
Ideally, I only want to hand control the library versions in https://github.com/fabric8-ui/fabric8-npm-dependencies. Ranges on dependencies have bit me before, since this is production I want to keep it locked down. So it only gets updated when I change it. There are 2 issues with not having the same version in all the projects.
If you change ngx-base and add it to planner but there is a failure in ngx-login-client then it may be weeks before it gets fixed and then you have ngx-base updated in planner but not in sub-components. This could get messy very fast. I really doing that kind of thing for an emergency. Doing all of manually, I will continue to follow the roll-up path of components to ensure there are no failures and no duplicates of the library. |
here's an overview of how we're planning on using updatebot to solve this: |
@joshuawilson more detailed docs here: https://github.com/fabric8io/updatebot#pushing-other-dependency-versions but here's an example of updatebot generating PRs from an 'exemplar' project in this case we're using so that changing, say, the angular version in ngx-base then generates PRs on downstream projects: we then define the versions to push from each repo in the updatebot YAML like this (using includes/excludes): |
I comment on the issue for updatebot, nice idea. Why not use https://github.com/fabric8-ui/fabric8-npm-dependencies to store/track/update the dependencies? I don't want to have to define every library I use in a project that is not meant for that. The ngx-base project has a specific task. Or did I misunderstand your intent. |
use any git repos you like to own the exemplar versions of any sets of dependencies - you just associate the dependency sets that a repo ‘owns’. Feel free to do whatever works best. I mostly picked ‘ngx-base’ as an example due to its name and it having quite a lot of dependencies ;) |
Nice. Thanks. |
@joshuawilson I am closing this issue as it seems to apply to the old GKE jobs. Please reopen if the issue is still valid. |
From @joshuawilson on June 23, 2017 13:43
Currently the UI repos build independently but they need to role up into the components that use them.
Additionally we need to have every push to master update prod automatically for CD.
Copied from original issue: fabric8-ui/fabric8-ui#1591
The text was updated successfully, but these errors were encountered: