Skip to content

Add work_item_epics feature flag

What does this MR do and why?

In order to prepare for work item epics GA we need to combine all its functionality under a single feature flag. As a first step, this MR introduces the new flag work_item_epics and updates the checks for displaying namespace-level work items to be available when the new flag is enabled.

This will allow us to access work item epics even if namespace_level_work_items feature flag is disabled.

Also, in this MR we introduce the feature flag create_namespace_level_work_items so we can guard the creation of work items at group level (any type except Epic) separately from namespace_level_work_items and work_item_epics. The creation of WI with type Epic is guarded by the feature flag work_item_epics and a license check for the epics feature.

To summarise:

  • The method Group#work_item_epics_enabled? guards displaying work items at the group level, this is enabled when either the namespace_level_work_items OR work_item_epics flag is enabled.
  • The ff create_group_level_work_items guards creating group-level work items that are not Epic type
  • The work_item_epics also guards creating group-level work items that are type Epic (creation also requires the licensed feature epics to be available)

Follow-ups:

  • Update WorkItems::WorkItemsFinder to exclude types that are not enabled: exclude Epic when work_item_epics is disabled and exclude every other type if create_group_level_work_items is disabled. These types should be excluded from the filtering options too.
  • Replace other epic work items-related feature flags with the flag work_item_epics

MR acceptance checklist

Please evaluate this MR against the MR acceptance checklist. It helps you analyze changes to reduce risks in quality, performance, reliability, security, and maintainability.

How to set up and validate locally

Example below:

  1. In rails console enable the new flag work_item_epics and disable namespace_level_work_items and create_group_level_work_items
    Feature.enable(:work_item_epics)
    Feature.disable(:namespace_level_work_items)
    Feature.disable(:create_group_level_work_items)
  2. Visit any group's epic and verify that clicking the New epic button opens a pop-up dialogue that creates a work item epic.
  3. Verify that the new epic can be viewed with the work item path, e.g http://127.0.0.1:3000/groups/GROUP-PATH/-/work_items/EPIC_IID
  4. Visit http://127.0.0.1:3000/-/graphql-explorer and verify that work items can be created only with the type Epic
Click to expand
# Get work item type IDs for EPIC and ISSUE
query getGroupTypes {
  group(fullPath: "flightjs") {
    id
    name
    webUrl
    workItemTypes(name: EPIC) {
      edges {
        node {
          id
          name
        }
      }
    }
  }
}

mutation createEpic {
  workItemCreate(input: {
    namespacePath: "group-a", title: "Epic WI",
    workItemTypeId: "gid://gitlab/WorkItems::Type/8"
  }) {
    errors
    workItem {
      id
      webUrl
      workItemType {
        name
      }
    }
  }
} # Should succeed

mutation createIssue {
  workItemCreate(input: {
    namespacePath: "group-a", title: "Issue WI",
    workItemTypeId: "gid://gitlab/WorkItems::Type/1"
  }) {
    errors
    workItem {
      id
      webUrl
      workItemType {
        name
      }
    }
  }
} # Should return error "create_group_level_work_items feature flag is disabled. Only project paths allowed."
  1. Change the feature flags to test the opposite scenario where all types are allowed except Epic.
      Feature.disable(:work_item_epics)
      Feature.enable(:create_group_level_work_items)
  2. Use the same queries as step 4 and verify that issue creation succeeds while the epic type returns the "Epic type is not available for the given group" error message.
      Feature.disable(:work_item_epics)
      Feature.enable(:create_group_level_work_items)

Related to #467686

Edited by Eugenia Grieff

Merge request reports

Loading