Skip to content

Add support for multiple timeboxes across the product

This is the first step in implementing multiple milestones for Issues, Merge Requests and Epics (#5135 (closed))

To keep changes to a minimum, I think we can start by preparing our backend storage to support multiple milestones while keeping everything else working the same way.

The idea is to create separate tables issue_milestones, merge_request_milestones, and epic_milestones and then reading / writing to that instead of milestone_id. Old data would have to be migrated too.

We would still support just 1 milestone for now and then we would need something like:

def milestone
  milestones.first
end

def milestone=(milestone)
  self.milestones = [milestone]
end

Though in reality it's not that simple and a lot of things may break. Here are some things mentioned previously that need to be considered:

  1. API
  2. Webhooks
  3. Quick actions
  4. Filters
  5. Epic milestone date calculation
  6. Any code that has where(milestone_id: ...) would break and would need to a JOIN now.
Edited by Gabe Weaver