From f87f9b72e75bbc71639df0a24c85ab52e067c490 Mon Sep 17 00:00:00 2001 From: Aaron Ogata Date: Fri, 23 Jul 2021 06:38:45 -0700 Subject: [PATCH] report feature flag changes for approval refs DE-777 Change-Id: I4bfa74ec75894eb93660e2e8ef0e1d75ec51d927 Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/269865 Tested-by: Service Cloud Jenkins Reviewed-by: Andrea Cirulli Reviewed-by: Ryan Norton Product-Review: Ryan Norton QA-Review: Aaron Ogata --- Jenkinsfile | 1 + .../library/vars/filesChangedStage.groovy | 5 +++++ .../library/vars/lintersStage.groovy | 22 ++++++++++++++++++- 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index 1693d0aabcd..e277f168092 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -440,6 +440,7 @@ pipeline { def nestedStages = [:] callableWithDelegate(lintersStage.codeStage(nestedStages))() + callableWithDelegate(lintersStage.featureFlagStage(nestedStages, buildConfig))() callableWithDelegate(lintersStage.groovyStage(nestedStages, buildConfig))() callableWithDelegate(lintersStage.masterBouncerStage(nestedStages))() callableWithDelegate(lintersStage.webpackStage(nestedStages))() diff --git a/build/new-jenkins/library/vars/filesChangedStage.groovy b/build/new-jenkins/library/vars/filesChangedStage.groovy index 9c1e136a564..b117b03599e 100644 --- a/build/new-jenkins/library/vars/filesChangedStage.groovy +++ b/build/new-jenkins/library/vars/filesChangedStage.groovy @@ -24,6 +24,10 @@ def hasDockerDevFiles(buildConfig) { return buildConfig[STAGE_NAME].value('dockerDevFiles') } +def hasFeatureFlagFiles(buildConfig) { + return buildConfig[STAGE_NAME].value('featureFlagFiles') +} + def hasGroovyFiles(buildConfig) { return buildConfig[STAGE_NAME].value('groovyFiles') } @@ -52,6 +56,7 @@ def call(stageConfig) { ] stageConfig.value('dockerDevFiles', git.changedFiles(dockerDevFiles, 'HEAD^')) + stageConfig.value('featureFlagFiles', git.changedFiles(['config/feature_flags'], 'HEAD^')) stageConfig.value('groovyFiles', git.changedFiles(['.*.groovy', 'Jenkinsfile.*'], 'HEAD^')) stageConfig.value('yarnFiles', git.changedFiles(['package.json', 'yarn.lock'], 'HEAD^')) stageConfig.value('migrationFiles', sh(script: 'build/new-jenkins/check-for-migrations.sh', returnStatus: true) == 0) diff --git a/build/new-jenkins/library/vars/lintersStage.groovy b/build/new-jenkins/library/vars/lintersStage.groovy index 07b785de81f..78c7ec66c27 100644 --- a/build/new-jenkins/library/vars/lintersStage.groovy +++ b/build/new-jenkins/library/vars/lintersStage.groovy @@ -26,7 +26,7 @@ def nodeRequirementsTemplate() { ] ] - def containers = ['code', 'groovy', 'master-bouncer', 'webpack', 'yarn'].collect { containerName -> + def containers = ['code', 'feature-flag', 'groovy', 'master-bouncer', 'webpack', 'yarn'].collect { containerName -> baseTestContainer + [name: containerName] } @@ -87,6 +87,26 @@ def webpackStage(stages) { } } +def featureFlagStage(stages, buildConfig) { + { -> + extendedStage('Linters - feature-flag') + .nodeRequirements(container: 'feature-flag') + .obeysAllowStages(false) + .required(filesChangedStage.hasFeatureFlagFiles(buildConfig)) + .queue(stages) { + slackSend( + channel: configuration.getString('feature-flag-report-channel'), + color: 'warning', + message: "${env.GERRIT_CHANGE_URL} is changing a feature flag." + ) + + node('master') { + gerrit.addReviewers(Arrays.asList(configuration.getString('feature-flag-report-emails').split(','))) + } + } + } +} + def yarnStage(stages, buildConfig) { { -> def yarnEnvVars = [