Add deprecation plan review gates. (#3659)
* Add deprecation plan review gates. * Incorporated feedback from stakeholders.
This commit is contained in:
Родитель
9c991272ae
Коммит
c7cc90a7d3
|
@ -872,13 +872,19 @@ export const GATE_QUESTIONNAIRES = {
|
|||
[enums.GATE_TYPES.API_ORIGIN_TRIAL]: BLINK_GENERIC_QUESTIONNAIRE,
|
||||
[enums.GATE_TYPES.API_EXTEND_ORIGIN_TRIAL]: BLINK_GENERIC_QUESTIONNAIRE,
|
||||
[enums.GATE_TYPES.API_SHIP]: BLINK_GENERIC_QUESTIONNAIRE,
|
||||
[enums.GATE_TYPES.API_PLAN]: BLINK_GENERIC_QUESTIONNAIRE,
|
||||
[enums.GATE_TYPES.PRIVACY_ORIGIN_TRIAL]: PRIVACY_GENERIC_QUESTIONNAIRE,
|
||||
[enums.GATE_TYPES.PRIVACY_SHIP]: PRIVACY_GENERIC_QUESTIONNAIRE,
|
||||
// Note: There is no privacy planning gate.
|
||||
[enums.GATE_TYPES.SECURITY_ORIGIN_TRIAL]: SECURITY_GENERIC_QUESTIONNAIRE,
|
||||
[enums.GATE_TYPES.SECURITY_SHIP]: SECURITY_GENERIC_QUESTIONNAIRE,
|
||||
// Note: There is no security planning gate.
|
||||
[enums.GATE_TYPES.ENTERPRISE_SHIP]: ENTERPRISE_SHIP_QUESTIONNAIRE,
|
||||
[enums.GATE_TYPES.ENTERPRISE_PLAN]: ENTERPRISE_SHIP_QUESTIONNAIRE,
|
||||
[enums.GATE_TYPES.DEBUGGABILITY_ORIGIN_TRIAL]:
|
||||
DEBUGGABILITY_ORIGIN_TRIAL_QUESTIONNAIRE,
|
||||
[enums.GATE_TYPES.DEBUGGABILITY_SHIP]: DEBUGGABILITY_SHIP_QUESTIONNAIRE,
|
||||
[enums.GATE_TYPES.DEBUGGABILITY_PLAN]: DEBUGGABILITY_SHIP_QUESTIONNAIRE,
|
||||
[enums.GATE_TYPES.TESTING_SHIP]: TESTING_SHIP_QUESTIONNAIRE,
|
||||
[enums.GATE_TYPES.TESTING_PLAN]: TESTING_SHIP_QUESTIONNAIRE,
|
||||
};
|
||||
|
|
|
@ -362,15 +362,20 @@ export const GATE_TYPES = {
|
|||
API_ORIGIN_TRIAL: 2,
|
||||
API_EXTEND_ORIGIN_TRIAL: 3,
|
||||
API_SHIP: 4,
|
||||
API_PLAN: 5,
|
||||
PRIVACY_ORIGIN_TRIAL: 32,
|
||||
PRIVACY_SHIP: 34,
|
||||
// Not needed: PRIVACY_PLAN: 35,
|
||||
SECURITY_ORIGIN_TRIAL: 42,
|
||||
SECURITY_SHIP: 44,
|
||||
|
||||
// Not needed: SECURITY_PLAN: 45,
|
||||
ENTERPRISE_SHIP: 54,
|
||||
ENTERPRISE_PLAN: 55,
|
||||
DEBUGGABILITY_ORIGIN_TRIAL: 62,
|
||||
DEBUGGABILITY_SHIP: 64,
|
||||
DEBUGGABILITY_PLAN: 65,
|
||||
TESTING_SHIP: 74,
|
||||
TESTING_PLAN: 75,
|
||||
};
|
||||
|
||||
export const GATE_PREPARING = 0;
|
||||
|
|
|
@ -92,6 +92,12 @@ ShipApproval = ApprovalFieldDef(
|
|||
core_enums.GATE_API_SHIP, THREE_LGTM,
|
||||
approvers=API_OWNERS_URL, team_name='API Owners')
|
||||
|
||||
PlanApproval = ApprovalFieldDef(
|
||||
'Intent to Deprecate and Remove',
|
||||
'Three API Owners must approve your intent',
|
||||
core_enums.GATE_API_PLAN, THREE_LGTM,
|
||||
approvers=API_OWNERS_URL, team_name='API Owners')
|
||||
|
||||
PrivacyOriginTrialApproval = ApprovalFieldDef(
|
||||
'Privacy OT Review',
|
||||
'Privacy OT Review',
|
||||
|
@ -108,6 +114,8 @@ PrivacyShipApproval = ApprovalFieldDef(
|
|||
escalation_email='chrome-privacy-owp-rotation@google.com',
|
||||
slo_initial_response=6)
|
||||
|
||||
# Note: There is no PrivacyPlanApproval
|
||||
|
||||
SecurityOriginTrialApproval = ApprovalFieldDef(
|
||||
'Security OT Review',
|
||||
'Security OT Review',
|
||||
|
@ -122,12 +130,20 @@ SecurityShipApproval = ApprovalFieldDef(
|
|||
approvers=SECURITY_APPROVERS, team_name='Security',
|
||||
slo_initial_response=6)
|
||||
|
||||
# Note: There is no SecurityPlanApproval
|
||||
|
||||
EnterpriseShipApproval = ApprovalFieldDef(
|
||||
'Enterprise Ship Review',
|
||||
'Enterprise Ship Review',
|
||||
core_enums.GATE_ENTERPRISE_SHIP, ONE_LGTM,
|
||||
approvers=ENTERPRISE_APPROVERS, team_name='Enterprise')
|
||||
|
||||
EnterprisePlanApproval = ApprovalFieldDef(
|
||||
'Enterprise Deprecation Plan Review',
|
||||
'Enterprise Deprecation Plan Review',
|
||||
core_enums.GATE_ENTERPRISE_PLAN, ONE_LGTM,
|
||||
approvers=ENTERPRISE_APPROVERS, team_name='Enterprise')
|
||||
|
||||
DebuggabilityOriginTrialApproval = ApprovalFieldDef(
|
||||
'Debuggability OT Review',
|
||||
'Debuggability OT Review',
|
||||
|
@ -142,22 +158,36 @@ DebuggabilityShipApproval = ApprovalFieldDef(
|
|||
approvers=DEBUGGABILITY_APPROVERS, team_name='Debuggability',
|
||||
escalation_email='devtools-dev@chromium.org')
|
||||
|
||||
DebuggabilityPlanApproval = ApprovalFieldDef(
|
||||
'Debuggability Deprecation Plan Review',
|
||||
'Debuggability Deprecation Plan Review',
|
||||
core_enums.GATE_DEBUGGABILITY_PLAN, ONE_LGTM,
|
||||
approvers=DEBUGGABILITY_APPROVERS, team_name='Debuggability',
|
||||
escalation_email='devtools-dev@chromium.org')
|
||||
|
||||
TestingShipApproval = ApprovalFieldDef(
|
||||
'Testing Ship Review',
|
||||
'Testing Ship Review',
|
||||
core_enums.GATE_TESTING_SHIP, ONE_LGTM,
|
||||
approvers=TESTING_APPROVERS, team_name='Testing')
|
||||
|
||||
TestingPlanApproval = ApprovalFieldDef(
|
||||
'Testing Deprecation Plan Review',
|
||||
'Testing Deprecation Plan Review',
|
||||
core_enums.GATE_TESTING_PLAN, ONE_LGTM,
|
||||
approvers=TESTING_APPROVERS, team_name='Testing')
|
||||
|
||||
APPROVAL_FIELDS_BY_ID = {
|
||||
afd.field_id: afd
|
||||
for afd in [
|
||||
PrototypeApproval, ExperimentApproval, ExtendExperimentApproval,
|
||||
ShipApproval,
|
||||
ShipApproval, PlanApproval,
|
||||
PrivacyOriginTrialApproval, PrivacyShipApproval,
|
||||
SecurityOriginTrialApproval, SecurityShipApproval,
|
||||
EnterpriseShipApproval,
|
||||
EnterpriseShipApproval, EnterprisePlanApproval,
|
||||
DebuggabilityOriginTrialApproval, DebuggabilityShipApproval,
|
||||
TestingShipApproval,
|
||||
DebuggabilityPlanApproval,
|
||||
TestingShipApproval, TestingPlanApproval,
|
||||
]
|
||||
}
|
||||
|
||||
|
|
|
@ -282,14 +282,20 @@ GATE_API_PROTOTYPE = 1
|
|||
GATE_API_ORIGIN_TRIAL = 2
|
||||
GATE_API_EXTEND_ORIGIN_TRIAL = 3
|
||||
GATE_API_SHIP = 4
|
||||
GATE_API_PLAN = 5
|
||||
GATE_PRIVACY_ORIGIN_TRIAL = 32
|
||||
GATE_PRIVACY_SHIP = 34
|
||||
# Not needed: GATE_PRIVACY_PLAN = 35
|
||||
GATE_SECURITY_ORIGIN_TRIAL = 42
|
||||
GATE_SECURITY_SHIP = 44
|
||||
# Not needed: GATE_SECURITY_PLAN = 45
|
||||
GATE_ENTERPRISE_SHIP = 54
|
||||
GATE_ENTERPRISE_PLAN = 55
|
||||
GATE_DEBUGGABILITY_ORIGIN_TRIAL = 62
|
||||
GATE_DEBUGGABILITY_SHIP = 64
|
||||
GATE_DEBUGGABILITY_PLAN = 65
|
||||
GATE_TESTING_SHIP = 74
|
||||
GATE_TESTING_PLAN = 75
|
||||
|
||||
# List of (stage type, gate type) for each feature type.
|
||||
STAGES_AND_GATES_BY_FEATURE_TYPE: dict[int, list[tuple[int, list[int]]]] = {
|
||||
|
@ -328,7 +334,11 @@ STAGES_AND_GATES_BY_FEATURE_TYPE: dict[int, list[tuple[int, list[int]]]] = {
|
|||
(STAGE_PSA_DEV_TRIAL, []),
|
||||
(STAGE_PSA_SHIPPING, [GATE_API_SHIP])],
|
||||
FEATURE_TYPE_DEPRECATION_ID: [
|
||||
(STAGE_DEP_PLAN, []),
|
||||
(STAGE_DEP_PLAN,
|
||||
[# Not needed: GATE_PRIVACY_PLAN, GATE_SECURITY_PLAN,
|
||||
GATE_ENTERPRISE_PLAN,
|
||||
GATE_DEBUGGABILITY_PLAN, GATE_TESTING_PLAN,
|
||||
GATE_API_PLAN]),
|
||||
(STAGE_DEP_DEV_TRIAL, []),
|
||||
(STAGE_DEP_DEPRECATION_TRIAL,
|
||||
[GATE_PRIVACY_ORIGIN_TRIAL, GATE_SECURITY_ORIGIN_TRIAL,
|
||||
|
|
|
@ -480,10 +480,10 @@ PSA_ONLY_PROCESS = Process(
|
|||
|
||||
DEPRECATION_STAGES = [
|
||||
ProcessStage(
|
||||
'Write up motivation',
|
||||
'Write up deprecation plan',
|
||||
'Create an initial WebStatus feature entry to deprecate '
|
||||
'an existing feature, including motivation and impact. '
|
||||
'Then, move existing Chromium code under a flag.',
|
||||
'Then, get approval for your deprecation plans.',
|
||||
[PI_EXISTING_FEATURE,
|
||||
PI_MOTIVATION,
|
||||
],
|
||||
|
@ -538,7 +538,8 @@ DEPRECATION_STAGES = [
|
|||
ProcessStage(
|
||||
'Prepare to ship',
|
||||
'Lock in shipping milestone. '
|
||||
'Finalize docs and announcements before disabling feature by default.',
|
||||
'Finalize docs and announcements before disabling feature by default. '
|
||||
'If there were changes since your plan approvals, get approvals again.',
|
||||
[PI_UPDATED_TARGET_MILESTONE,
|
||||
PI_I2S_EMAIL,
|
||||
PI_I2S_LGTMS,
|
||||
|
|
|
@ -75,11 +75,11 @@ class IntentEmailPreviewHandler(basehandlers.FlaskHandler):
|
|||
def compute_subject_prefix(self, feature, intent_stage):
|
||||
"""Return part of the subject line for an intent email."""
|
||||
|
||||
if intent_stage == core_enums.INTENT_INCUBATE:
|
||||
if intent_stage == core_enums.INTENT_IMPLEMENT:
|
||||
if feature.feature_type == core_enums.FEATURE_TYPE_DEPRECATION_ID:
|
||||
return 'Intent to Deprecate and Remove'
|
||||
elif intent_stage == core_enums.INTENT_IMPLEMENT:
|
||||
return 'Intent to Prototype'
|
||||
else:
|
||||
return 'Intent to Prototype'
|
||||
elif intent_stage == core_enums.INTENT_EXPERIMENT:
|
||||
return 'Ready for Developer Testing'
|
||||
elif intent_stage == core_enums.INTENT_ORIGIN_TRIAL:
|
||||
|
|
|
@ -198,7 +198,7 @@ class IntentEmailPreviewHandlerTest(testing_config.CustomTestCase):
|
|||
self.assertEqual(
|
||||
'Intent to Deprecate and Remove',
|
||||
self.handler.compute_subject_prefix(
|
||||
self.feature_1, core_enums.INTENT_INCUBATE))
|
||||
self.feature_1, core_enums.INTENT_IMPLEMENT))
|
||||
|
||||
self.assertEqual(
|
||||
'Request for Deprecation Trial',
|
||||
|
|
Загрузка…
Ссылка в новой задаче