maliput / maliput_infrastructure

Driving simulation repository for workspace .repo indexes, Makefiles, etc.
BSD 3-Clause "New" or "Revised" License
0 stars 2 forks source link

Pegging workspace to SHAs / tags / branches #180

Open agalbachicar opened 3 years ago

agalbachicar commented 3 years ago

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:

liangfok commented 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.

stonier commented 3 years ago

Let's do it then.

Proposal

Repos Files

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

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

liangfok commented 3 years ago

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.

liangfok commented 3 years ago

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.

scpeters commented 3 years ago

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

agalbachicar commented 3 years ago

I think we can start from there as a step towards the completion of this task. Thanks @scpeters !

agalbachicar commented 3 years ago

I would like to ask a few questions that will help to make proper docs and then try to automate this process.

agalbachicar commented 3 years ago

I've created https://github.com/ToyotaResearchInstitute/maliput-documentation/pull/30 to discuss the details of the releasing process.

agalbachicar commented 3 years ago

Next steps:

agalbachicar commented 3 years ago

@stonier / @andrewbest-tri / @liangfok would you create two new repositories?

liangfok commented 3 years ago

Done.

https://github.com/ToyotaResearchInstitute/maliput_py https://github.com/ToyotaResearchInstitute/delphyne_demos

Do I also need to set the MALIPUT_TOKEN secret?

agalbachicar commented 3 years ago

Yes, please!

liangfok commented 3 years ago

Done!

scpeters commented 3 years ago
  • 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: