diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 70f6ff88570..b9e0ee5c1fb 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -677,6 +677,8 @@ embed.go @grafana/grafana-as-code /.github/workflows/create-security-patch-from-security-mirror.yml @grafana/grafana-release-guild /.github/workflows/core-plugins-build-and-release.yml @grafana/plugins-platform-frontend @grafana/plugins-platform-backend /.github/workflows/i18n-crowdin-fix-files.yml @grafana/grafana-frontend-platform +/.github/workflows/feature-toggle-cleanup.yml @tolzhabayev +/.github/workflows/scripts/feature-toggle-cleanup/feature-toggle-cleanup.js @tolzhabayev # Generated files not requiring owner approval /packages/grafana-data/src/types/featureToggles.gen.ts @grafanabot diff --git a/.github/workflows/feature-toggle-cleanup.yml b/.github/workflows/feature-toggle-cleanup.yml new file mode 100644 index 00000000000..f157dfcb614 --- /dev/null +++ b/.github/workflows/feature-toggle-cleanup.yml @@ -0,0 +1,28 @@ +name: Feature Toggle Cleanup + +on: + workflow_dispatch: + schedule: + # * is a special character in YAML so you have to quote this string + - cron: '30 10 * * *' +jobs: + feature-toggle-cleanup: + runs-on: ubuntu-latest + # This check is here to prevent this workflow from running on forks. + if: github.repository == 'grafana/grafana' + steps: + - name: Check out the code + uses: actions/checkout@v3 + - uses: actions/setup-node@v4 + with: + node-version: "20.x" + - run: npm install csv-parse + - name: Parse CVS file to see which Feature Toggles should be notified about + id: parse-csv-file + uses: actions/github-script@v7 + env: + FEATURE_TOGGLES_CSV_FILE_PATH: "pkg/services/featuremgmt/toggles_gen.csv" + with: + script: | + const { default: cleanupFeatureFlags } = await import('${{ github.workspace }}/.github/workflows/scripts/feature-toggle-cleanup/feature-toggle-cleanup.mjs') + await cleanupFeatureFlags({github, context, core}) \ No newline at end of file diff --git a/.github/workflows/scripts/feature-toggle-cleanup/feature-toggle-cleanup.js b/.github/workflows/scripts/feature-toggle-cleanup/feature-toggle-cleanup.js new file mode 100644 index 00000000000..35bc2938c10 --- /dev/null +++ b/.github/workflows/scripts/feature-toggle-cleanup/feature-toggle-cleanup.js @@ -0,0 +1,38 @@ +import { parse } from 'csv-parse/sync'; +import fs from 'fs'; + +/*** + * Feauture Flag Structure example + * Name: 'disableEnvelopeEncryption', + Stage: 'GA', + Owner: '@grafana/grafana-as-code', + Created: '2022-05-24', + requiresDevMode: 'false', + RequiresLicense: 'false', + RequiresRestart: 'false', + FrontendOnly: 'false' + * + */ + + +export default function cleanupFeatureFlags() { + const today = new Date(); + const sixMonthAgo = today.setMonth(today.getMonth() - 6); + const inputFileContents = fs.readFileSync(process.env.FEATURE_TOGGLES_CSV_FILE_PATH); + const parsedFeatureFlags = parse(inputFileContents, { + columns: true, + skip_empty_lines: true, + cast: true, + cast_date: true, + }); + + // Here we can have the custom logic of how to handle what type of feature flag - e.g. GA can be treated differently than experimental and so on. + for (const flag of parsedFeatureFlags) { + if (flag.Created < sixMonthAgo) { + console.log(`The flag ${flag.Name} was created more than 6 months ago. It should be checked.`); + console.log(flag); + } + } + + +}