Open agalbachicar opened 3 years ago
As I work on updating our downstream project to the latest version of Maliput/Dragway/Multilane/Malidrve, I just realized that having sets of SHAs that are known to work together would be very helpful. By having these sets of SHAs, I could incrementally bump our downstream project such that any failure is less likely due to the combination of SHAs I happen to choose.
This previously did not occur to me because our downstream project has never been this far behind (it's stuck on SHAs from early Novmber 2020), meaning I would simply update our downstream project to the latest versions of everything. While I could still do that, I am somewhat hesitant given the massive (but good) changes that have occurred since November of last year.
Let's do it then.
Proposal
Repos Files
maliput-stable.repos
to this repository. Don't worry about ignition-stable.repos
or delphyne-stable.repos
until we feel need to test the stable release separately (it's too volatile anyway). Likewise, don't worry about customising it to just the tri-used repos (the less that is custom, the better)
Branching & Tagging
package.xml
s in each repositoryrelease/major.minor.x
, e.g. release/1.1.x
for each repository (use this in the .repos files)This avoids churn on the repos files constant even as patches come in.
There is some fine print here - it assumes that all packages in a repository have the same version number for it to really make sense, which ends up not making sense if your packages are evolving at different rates, or your packages don't follow this convention. I think we can be ok with this pragmatism though, we don't have large multi-package repositories.
Alternatives
pink-elephants-0
, pink-elephants-1
(first patch on pink-elephants), green-flamingoes-0
. 20210305
→ more churn on branches this way though. You could add the -N
suffix for tags and just the initial creation date for the branch though.Sounds good! From a brief meeting with @agalbachicar and @francocipollone this morning, I agreed that having named releases rather than sets of SHAs is preferable. I just happen to fixate on SHAs since that is what our downstream project uses when pulling in these Maliput-related repos.
Question: What if only one of the N repos contains changes that warrant a new release? Would that trigger new releases for all of the other N-1 repos even though they did not have significant changes? The example I can think of is the removal of proj4
from Malidrive (https://github.com/ToyotaResearchInstitute/malidrive/commit/792ccf883a6ac93b68cd7e9e99ffa069eb8d4ea1). That only impacted Malidrive, not all of the other repos.
I suppose there is no need to keep the various repos in sync w.r.t. releases since there is an overall maliput-stable.repos
file that ties everything together. For my task of updating the downstream project, I would just refer to the evolution of this file.
I made an example of exporting a .repos
file from a GitHub workflow in https://github.com/ToyotaResearchInstitute/maliput_infrastructure/commit/f06813569387e3634a3ea6382e98e512fdde42b3 (branch scpeters/archive_exact_repos_file)
I can make a pull request for this if people are interested
I think we can start from there as a step towards the completion of this task. Thanks @scpeters !
I would like to ask a few questions that will help to make proper docs and then try to automate this process.
Add a maliput-stable.repos to this repository.
- @stonier did you mean https://github.com/ToyotaResearchInstitute/repos_index ?
it assumes that all packages in a repository have the same version number for it to really make sense, which ends up not making sense if your packages are evolving at different rates, or your packages don't follow this convention. I think we can be ok with this pragmatism though, we don't have large multi-package repositories.
- Agreed! For the record, we just have
maliput
repository which contains:maliput
andmaliput_py
packages. And thendelphyne_gui
repository which contains:delphyne_demos
anddelphyne_gui
packages. We could have another two repositories for them if you think it'll standardize the workspace and simplify the development lifecycle. Impact in CI should not be that big if we are careful with tests.
I've created https://github.com/ToyotaResearchInstitute/maliput-documentation/pull/30 to discuss the details of the releasing process.
Next steps:
delphyne-gui
into delphyne_gui
and delphyne_demos
. -> @agalbachicar
delphyne_demos
package must be migrated to delphyne_demos
repository. https://github.com/ToyotaResearchInstitute/delphyne-gui/pull/397 https://github.com/ToyotaResearchInstitute/delphyne_demos/pull/1maliput_infrastructure
CI. https://github.com/ToyotaResearchInstitute/maliput_infrastructure/pull/193delphyne.repos
in repos_index
. https://github.com/ToyotaResearchInstitute/repos_index/pull/3maliput
into maliput
and maliput_py
. -> @agalbachicar
maliput_py
package must be migrated to maliput_py
repository. https://github.com/ToyotaResearchInstitute/maliput/pull/408 https://github.com/ToyotaResearchInstitute/maliput_py/pull/1maliput_dragway
and others. https://github.com/ToyotaResearchInstitute/maliput-dragway/pull/41 https://github.com/ToyotaResearchInstitute/delphyne/pull/773 https://github.com/ToyotaResearchInstitute/delphyne-gui/pull/394maliput_infrastructure
CI. https://github.com/ToyotaResearchInstitute/maliput_infrastructure/pull/190maliput.repos
in repos-index
. https://github.com/ToyotaResearchInstitute/repos_index/pull/2main
instead of master
everywhere https://github.com/ToyotaResearchInstitute/maliput_infrastructure/issues/191maliput-integration
, maliput-dragway
, maliput-multilane
, maliput-integration-tests
, maliput-documentation
and repositories and packages to use _
instead of -
.maliput_infrastructure
CIrepos_index
#191 0.1.0
.@stonier / @andrewbest-tri / @liangfok would you create two new repositories?
delphyne_demos
maliput_py
Done.
https://github.com/ToyotaResearchInstitute/maliput_py https://github.com/ToyotaResearchInstitute/delphyne_demos
Do I also need to set the MALIPUT_TOKEN
secret?
Yes, please!
Done!
- Define initial release number in all packages. Mature packages should adopt version 1.0.0. Immature packages should use
0.1.0
.
I recommend that we follow semantic versioning for these releases, such that incompatible changes to the API require an increment to the major version once we have reached 1.0. We can also decide on a policy for ABI changes, but that is not critical until we are providing binary packages
There is a tool we use in the ignition buildfarm to check for API and ABI breakage:
In favor of a clearer development life cycle and towards open sourcing / sharing the workspace to partners we need to think again our development workflow. There are a few use cases that would need to be covered by this change in development:
Out of the scope for now, but desirable at some point in the future:
Victory condition
A new development workflow is proposed that easily allows to: