mirror of https://github.com/grafana/grafana.git
				
				
				
			Grunt: Removes grunt dependency and replaces some of its usage (#29461)
* Grunt: Removes grunt dependency and replaces some of it usage with alternatives * Removed precommit toolkit task * Fixed toolkit import * Some cleanup of unused / not working stuff in build.go * Removed sass errors
This commit is contained in:
		
							parent
							
								
									754aca25c5
								
							
						
					
					
						commit
						dc93749287
					
				|  | @ -1,6 +1,9 @@ | |||
| { | ||||
|   "extends": ["@grafana/eslint-config"], | ||||
|   "root": true, | ||||
|   "plugins": [ | ||||
|     "no-only-tests" | ||||
|   ], | ||||
|   "overrides": [ | ||||
|     { | ||||
|       "files": [ | ||||
|  | @ -15,10 +18,11 @@ | |||
|         "react/no-unescaped-entities": "off", | ||||
|         "react/display-name": "off", | ||||
|         "react/no-deprecated": "off", | ||||
|         "react/no-unknown-property": "off",  | ||||
|         "react/no-unknown-property": "off", | ||||
|         "react/no-children-prop": "off", | ||||
|         "react/no-find-dom-node": "off", | ||||
|         "react/no-render-return-value": "off" | ||||
|         "react/no-render-return-value": "off", | ||||
|         "no-only-tests/no-only-tests": "error" | ||||
|       } | ||||
|     } | ||||
|   ] | ||||
|  |  | |||
							
								
								
									
										66
									
								
								Gruntfile.js
								
								
								
								
							
							
						
						
									
										66
									
								
								Gruntfile.js
								
								
								
								
							|  | @ -1,66 +0,0 @@ | |||
| 'use strict'; | ||||
| module.exports = function(grunt) { | ||||
|   var os = require('os'); | ||||
|   var config = { | ||||
|     pkg: grunt.file.readJSON('package.json'), | ||||
|     baseDir: '.', | ||||
|     srcDir: 'public', | ||||
|     genDir: 'public_gen', | ||||
|     destDir: 'dist', | ||||
|     tempDir: 'tmp', | ||||
|     platform: process.platform.replace('win32', 'windows'), | ||||
|     enterprise: false, | ||||
|     libc: null, | ||||
|   }; | ||||
| 
 | ||||
|   if (grunt.option('platform')) { | ||||
|     config.platform = grunt.option('platform'); | ||||
|   } | ||||
| 
 | ||||
|   if (grunt.option('enterprise')) { | ||||
|     config.enterprise = true; | ||||
|   } | ||||
| 
 | ||||
|   if (grunt.option('arch')) { | ||||
|     config.arch = grunt.option('arch'); | ||||
|   } else { | ||||
|     config.arch = os.arch(); | ||||
| 
 | ||||
|     if (process.platform.match(/^win/)) { | ||||
|       config.arch = process.env.hasOwnProperty('ProgramFiles(x86)') ? 'x64' : 'x86'; | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   if (grunt.option('libc')) { | ||||
|     config.libc = grunt.option('libc'); | ||||
|   } | ||||
| 
 | ||||
|   config.pkg.version = grunt.option('pkgVer') || config.pkg.version; | ||||
| 
 | ||||
|   console.log('Version', config.pkg.version); | ||||
| 
 | ||||
|   // load plugins
 | ||||
|   require('load-grunt-tasks')(grunt); | ||||
| 
 | ||||
|   // load task definitions
 | ||||
|   grunt.loadTasks('./scripts/grunt'); | ||||
| 
 | ||||
|   // Utility function to load plugin settings into config
 | ||||
|   function loadConfig(config, path) { | ||||
|     require('glob') | ||||
|       .sync('*', { cwd: path }) | ||||
|       .forEach(function(option) { | ||||
|         var key = option.replace(/\.js$/, ''); | ||||
|         // If key already exists, extend it. It is your responsibility to avoid naming collisions
 | ||||
|         config[key] = config[key] || {}; | ||||
|         grunt.util._.extend(config[key], require(path + option)(config, grunt)); | ||||
|       }); | ||||
|     // technically not required
 | ||||
|     return config; | ||||
|   } | ||||
| 
 | ||||
|   // Merge that object with what with whatever we have here
 | ||||
|   loadConfig(config, './scripts/grunt/options/'); | ||||
|   // pass the config to grunt
 | ||||
|   grunt.initConfig(config); | ||||
| }; | ||||
							
								
								
									
										259
									
								
								build.go
								
								
								
								
							
							
						
						
									
										259
									
								
								build.go
								
								
								
								
							|  | @ -30,13 +30,13 @@ const ( | |||
| 
 | ||||
| var ( | ||||
| 	//versionRe = regexp.MustCompile(`-[0-9]{1,3}-g[0-9a-f]{5,10}`)
 | ||||
| 	goarch  string | ||||
| 	goos    string | ||||
| 	gocc    string | ||||
| 	cgo     bool | ||||
| 	libc    string | ||||
| 	pkgArch string | ||||
| 	version string = "v1" | ||||
| 	goarch    string | ||||
| 	goos      string | ||||
| 	gocc      string | ||||
| 	cgo       bool | ||||
| 	libc      string | ||||
| 	pkgArch   string | ||||
| 	version   string = "v1" | ||||
| 	buildTags []string | ||||
| 	// deb & rpm does not support semver so have to handle their version a little differently
 | ||||
| 	linuxPackageVersion   string = "v1" | ||||
|  | @ -125,34 +125,7 @@ func main() { | |||
| 			} | ||||
| 
 | ||||
| 		case "build-frontend": | ||||
| 			grunt(gruntBuildArg("build")...) | ||||
| 
 | ||||
| 		case "test": | ||||
| 			test("./pkg/...") | ||||
| 			grunt("test") | ||||
| 
 | ||||
| 		case "package": | ||||
| 			grunt(gruntBuildArg("build")...) | ||||
| 			grunt(gruntBuildArg("package")...) | ||||
| 			if goos == linux { | ||||
| 				createLinuxPackages() | ||||
| 			} | ||||
| 
 | ||||
| 		case "package-only": | ||||
| 			grunt(gruntBuildArg("package")...) | ||||
| 			if goos == linux { | ||||
| 				createLinuxPackages() | ||||
| 			} | ||||
| 		case "pkg-archive": | ||||
| 			grunt(gruntBuildArg("package")...) | ||||
| 
 | ||||
| 		case "pkg-rpm": | ||||
| 			grunt(gruntBuildArg("release")...) | ||||
| 			createRpmPackages() | ||||
| 
 | ||||
| 		case "pkg-deb": | ||||
| 			grunt(gruntBuildArg("release")...) | ||||
| 			createDebPackages() | ||||
| 			yarn("build") | ||||
| 
 | ||||
| 		case "sha-dist": | ||||
| 			shaFilesInDist() | ||||
|  | @ -233,202 +206,8 @@ func readVersionFromPackageJson() { | |||
| 	} | ||||
| } | ||||
| 
 | ||||
| type linuxPackageOptions struct { | ||||
| 	packageType            string | ||||
| 	packageArch            string | ||||
| 	homeDir                string | ||||
| 	homeBinDir             string | ||||
| 	binPath                string | ||||
| 	serverBinPath          string | ||||
| 	cliBinPath             string | ||||
| 	configDir              string | ||||
| 	ldapFilePath           string | ||||
| 	etcDefaultPath         string | ||||
| 	etcDefaultFilePath     string | ||||
| 	initdScriptFilePath    string | ||||
| 	systemdServiceFilePath string | ||||
| 
 | ||||
| 	postinstSrc         string | ||||
| 	initdScriptSrc      string | ||||
| 	defaultFileSrc      string | ||||
| 	systemdFileSrc      string | ||||
| 	cliBinaryWrapperSrc string | ||||
| 
 | ||||
| 	depends []string | ||||
| } | ||||
| 
 | ||||
| func createDebPackages() { | ||||
| 	debPkgArch := pkgArch | ||||
| 	if pkgArch == "armv7" || pkgArch == "armv6" { | ||||
| 		debPkgArch = "armhf" | ||||
| 	} | ||||
| 
 | ||||
| 	createPackage(linuxPackageOptions{ | ||||
| 		packageType:            "deb", | ||||
| 		packageArch:            debPkgArch, | ||||
| 		homeDir:                "/usr/share/grafana", | ||||
| 		homeBinDir:             "/usr/share/grafana/bin", | ||||
| 		binPath:                "/usr/sbin", | ||||
| 		configDir:              "/etc/grafana", | ||||
| 		etcDefaultPath:         "/etc/default", | ||||
| 		etcDefaultFilePath:     "/etc/default/grafana-server", | ||||
| 		initdScriptFilePath:    "/etc/init.d/grafana-server", | ||||
| 		systemdServiceFilePath: "/usr/lib/systemd/system/grafana-server.service", | ||||
| 
 | ||||
| 		postinstSrc:         "packaging/deb/control/postinst", | ||||
| 		initdScriptSrc:      "packaging/deb/init.d/grafana-server", | ||||
| 		defaultFileSrc:      "packaging/deb/default/grafana-server", | ||||
| 		systemdFileSrc:      "packaging/deb/systemd/grafana-server.service", | ||||
| 		cliBinaryWrapperSrc: "packaging/wrappers/grafana-cli", | ||||
| 
 | ||||
| 		depends: []string{"adduser", "libfontconfig1"}, | ||||
| 	}) | ||||
| } | ||||
| 
 | ||||
| func createRpmPackages() { | ||||
| 	rpmPkgArch := pkgArch | ||||
| 	switch { | ||||
| 	case pkgArch == "armv7": | ||||
| 		rpmPkgArch = "armhfp" | ||||
| 	case pkgArch == "arm64": | ||||
| 		rpmPkgArch = "aarch64" | ||||
| 	} | ||||
| 	createPackage(linuxPackageOptions{ | ||||
| 		packageType:            "rpm", | ||||
| 		packageArch:            rpmPkgArch, | ||||
| 		homeDir:                "/usr/share/grafana", | ||||
| 		homeBinDir:             "/usr/share/grafana/bin", | ||||
| 		binPath:                "/usr/sbin", | ||||
| 		configDir:              "/etc/grafana", | ||||
| 		etcDefaultPath:         "/etc/sysconfig", | ||||
| 		etcDefaultFilePath:     "/etc/sysconfig/grafana-server", | ||||
| 		initdScriptFilePath:    "/etc/init.d/grafana-server", | ||||
| 		systemdServiceFilePath: "/usr/lib/systemd/system/grafana-server.service", | ||||
| 
 | ||||
| 		postinstSrc:         "packaging/rpm/control/postinst", | ||||
| 		initdScriptSrc:      "packaging/rpm/init.d/grafana-server", | ||||
| 		defaultFileSrc:      "packaging/rpm/sysconfig/grafana-server", | ||||
| 		systemdFileSrc:      "packaging/rpm/systemd/grafana-server.service", | ||||
| 		cliBinaryWrapperSrc: "packaging/wrappers/grafana-cli", | ||||
| 
 | ||||
| 		depends: []string{"/sbin/service", "fontconfig", "freetype", "urw-fonts"}, | ||||
| 	}) | ||||
| } | ||||
| 
 | ||||
| func createLinuxPackages() { | ||||
| 	if !skipDebGen { | ||||
| 		createDebPackages() | ||||
| 	} | ||||
| 
 | ||||
| 	if !skipRpmGen { | ||||
| 		createRpmPackages() | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func createPackage(options linuxPackageOptions) { | ||||
| 	packageRoot, _ := ioutil.TempDir("", "grafana-linux-pack") | ||||
| 
 | ||||
| 	// create directories
 | ||||
| 	runPrint("mkdir", "-p", filepath.Join(packageRoot, options.homeDir)) | ||||
| 	runPrint("mkdir", "-p", filepath.Join(packageRoot, options.configDir)) | ||||
| 	runPrint("mkdir", "-p", filepath.Join(packageRoot, "/etc/init.d")) | ||||
| 	runPrint("mkdir", "-p", filepath.Join(packageRoot, options.etcDefaultPath)) | ||||
| 	runPrint("mkdir", "-p", filepath.Join(packageRoot, "/usr/lib/systemd/system")) | ||||
| 	runPrint("mkdir", "-p", filepath.Join(packageRoot, "/usr/sbin")) | ||||
| 
 | ||||
| 	// copy grafana-cli wrapper
 | ||||
| 	runPrint("cp", "-p", options.cliBinaryWrapperSrc, filepath.Join(packageRoot, "/usr/sbin/"+cliBinary)) | ||||
| 
 | ||||
| 	// copy grafana-server binary
 | ||||
| 	runPrint("cp", "-p", filepath.Join(workingDir, "tmp/bin/"+serverBinary), filepath.Join(packageRoot, "/usr/sbin/"+serverBinary)) | ||||
| 
 | ||||
| 	// copy init.d script
 | ||||
| 	runPrint("cp", "-p", options.initdScriptSrc, filepath.Join(packageRoot, options.initdScriptFilePath)) | ||||
| 	// copy environment var file
 | ||||
| 	runPrint("cp", "-p", options.defaultFileSrc, filepath.Join(packageRoot, options.etcDefaultFilePath)) | ||||
| 	// copy systemd file
 | ||||
| 	runPrint("cp", "-p", options.systemdFileSrc, filepath.Join(packageRoot, options.systemdServiceFilePath)) | ||||
| 	// copy release files
 | ||||
| 	runPrint("cp", "-a", filepath.Join(workingDir, "tmp")+"/.", filepath.Join(packageRoot, options.homeDir)) | ||||
| 	// remove bin path
 | ||||
| 	runPrint("rm", "-rf", filepath.Join(packageRoot, options.homeDir, "bin")) | ||||
| 
 | ||||
| 	// create /bin within home
 | ||||
| 	runPrint("mkdir", "-p", filepath.Join(packageRoot, options.homeBinDir)) | ||||
| 	// The grafana-cli binary is exposed through a wrapper to ensure a proper
 | ||||
| 	// configuration is in place. To enable that, we need to store the original
 | ||||
| 	// binary in a separate location to avoid conflicts.
 | ||||
| 	runPrint("cp", "-p", filepath.Join(workingDir, "tmp/bin/"+cliBinary), filepath.Join(packageRoot, options.homeBinDir, cliBinary)) | ||||
| 
 | ||||
| 	args := []string{ | ||||
| 		"-s", "dir", | ||||
| 		"--description", "Grafana", | ||||
| 		"-C", packageRoot, | ||||
| 		"--url", "https://grafana.com", | ||||
| 		"--maintainer", "contact@grafana.com", | ||||
| 		"--config-files", options.initdScriptFilePath, | ||||
| 		"--config-files", options.etcDefaultFilePath, | ||||
| 		"--config-files", options.systemdServiceFilePath, | ||||
| 		"--after-install", options.postinstSrc, | ||||
| 
 | ||||
| 		"--version", linuxPackageVersion, | ||||
| 		"-p", "./dist", | ||||
| 	} | ||||
| 
 | ||||
| 	name := "grafana" | ||||
| 	if enterprise { | ||||
| 		name += "-enterprise" | ||||
| 		args = append(args, "--replaces", "grafana") | ||||
| 	} | ||||
| 	fmt.Printf("pkgArch is set to '%s', generated arch is '%s'\n", pkgArch, options.packageArch) | ||||
| 	if pkgArch == "armv6" { | ||||
| 		name += "-rpi" | ||||
| 		args = append(args, "--replaces", "grafana") | ||||
| 	} | ||||
| 	args = append(args, "--name", name) | ||||
| 
 | ||||
| 	description := "Grafana" | ||||
| 	if enterprise { | ||||
| 		description += " Enterprise" | ||||
| 	} | ||||
| 
 | ||||
| 	if !enterprise { | ||||
| 		args = append(args, "--license", "\"Apache 2.0\"") | ||||
| 	} | ||||
| 
 | ||||
| 	if options.packageType == "rpm" { | ||||
| 		args = append(args, "--rpm-posttrans", "packaging/rpm/control/posttrans") | ||||
| 	} | ||||
| 
 | ||||
| 	if options.packageType == "deb" { | ||||
| 		args = append(args, "--deb-no-default-config-files") | ||||
| 	} | ||||
| 
 | ||||
| 	if options.packageArch != "" { | ||||
| 		args = append(args, "-a", options.packageArch) | ||||
| 	} | ||||
| 
 | ||||
| 	if linuxPackageIteration != "" { | ||||
| 		args = append(args, "--iteration", linuxPackageIteration) | ||||
| 	} | ||||
| 
 | ||||
| 	// add dependencies
 | ||||
| 	for _, dep := range options.depends { | ||||
| 		args = append(args, "--depends", dep) | ||||
| 	} | ||||
| 
 | ||||
| 	args = append(args, ".") | ||||
| 
 | ||||
| 	fmt.Println("Creating package: ", options.packageType) | ||||
| 	runPrint("fpm", append([]string{"-t", options.packageType}, args...)...) | ||||
| } | ||||
| 
 | ||||
| func grunt(params ...string) { | ||||
| 	if runtime.GOOS == windows { | ||||
| 		runPrint(`.\node_modules\.bin\grunt`, params...) | ||||
| 	} else { | ||||
| 		runPrint("./node_modules/.bin/grunt", params...) | ||||
| 	} | ||||
| func yarn(params ...string) { | ||||
| 	runPrint(`yarn run`, params...) | ||||
| } | ||||
| 
 | ||||
| func genPackageVersion() string { | ||||
|  | @ -439,24 +218,6 @@ func genPackageVersion() string { | |||
| 	} | ||||
| } | ||||
| 
 | ||||
| func gruntBuildArg(task string) []string { | ||||
| 	args := []string{task} | ||||
| 	args = append(args, fmt.Sprintf("--pkgVer=%v", genPackageVersion())) | ||||
| 	if pkgArch != "" { | ||||
| 		args = append(args, fmt.Sprintf("--arch=%v", pkgArch)) | ||||
| 	} | ||||
| 	if libc != "" { | ||||
| 		args = append(args, fmt.Sprintf("--libc=%s", libc)) | ||||
| 	} | ||||
| 	if enterprise { | ||||
| 		args = append(args, "--enterprise") | ||||
| 	} | ||||
| 
 | ||||
| 	args = append(args, fmt.Sprintf("--platform=%v", goos)) | ||||
| 
 | ||||
| 	return args | ||||
| } | ||||
| 
 | ||||
| func setup() { | ||||
| 	args := []string{"install", "-v"} | ||||
| 	if goos == windows { | ||||
|  |  | |||
							
								
								
									
										29
									
								
								package.json
								
								
								
								
							
							
						
						
									
										29
									
								
								package.json
								
								
								
								
							|  | @ -7,13 +7,15 @@ | |||
|   "repository": "github:grafana/grafana", | ||||
|   "scripts": { | ||||
|     "api-tests": "jest --notify --watch --config=devenv/e2e-api-tests/jest.js", | ||||
|     "build": "grunt build", | ||||
|     "build": "node ./node_modules/webpack/bin/webpack.js --config scripts/webpack/webpack.prod.js", | ||||
|     "dev": "webpack --progress --colors --config scripts/webpack/webpack.dev.js", | ||||
|     "e2e": "./e2e/start-and-run-suite", | ||||
|     "e2e:debug": "./e2e/start-and-run-suite debug", | ||||
|     "e2e:dev": "./e2e/start-and-run-suite dev", | ||||
|     "test": "jest --notify --watch", | ||||
|     "lint": "eslint . --ext .js,.tsx,.ts --cache", | ||||
|     "lint": "yarn run lint:ts && yarn run lint:sass", | ||||
|     "lint:ts": "eslint . --ext .js,.tsx,.ts --cache", | ||||
|     "lint:sass": "yarn run sass-lint -c public/sass/.sass-lint.yml 'public/sass/**/*.scss, packages/**/*.scss' -v -i '**/node_modules/**/*.scss'", | ||||
|     "test:ci": "mkdir -p reports/junit && export JEST_JUNIT_OUTPUT_DIR=reports/junit && jest --ci --reporters=default --reporters=jest-junit -w ${TEST_MAX_WORKERS:-100%}", | ||||
|     "lint:fix": "yarn lint --fix", | ||||
|     "packages:build": "lerna run clean && lerna run build --ignore @grafana-plugins/input-datasource", | ||||
|  | @ -27,7 +29,7 @@ | |||
|     "packages:publishDev": "lerna publish from-package --contents dist --dist-tag dev --yes --registry http://grafana-npm.local:4873 --force-publish=*", | ||||
|     "packages:typecheck": "lerna run typecheck", | ||||
|     "packages:clean": "lerna run clean", | ||||
|     "precommit": "grafana-toolkit precommit", | ||||
|     "precommit": "yarn run lint-staged", | ||||
|     "prettier:check": "prettier --list-different \"**/*.{ts,tsx,scss}\"", | ||||
|     "prettier:write": "prettier --list-different \"**/*.{ts,tsx,scss}\" --write", | ||||
|     "start": "grafana-toolkit core:start --watchTheme", | ||||
|  | @ -38,10 +40,10 @@ | |||
|     "storybook": "yarn workspace @grafana/ui storybook --ci", | ||||
|     "storybook:build": "yarn workspace @grafana/ui storybook:build", | ||||
|     "themes:generate": "ts-node --project ./scripts/cli/tsconfig.json ./scripts/cli/generateSassVariableFiles.ts", | ||||
|     "typecheck": "tsc --noEmit", | ||||
|     "typecheck": "tsc --noEmit && yarn run packages:typecheck", | ||||
|     "plugins:build-bundled": "grafana-toolkit plugin:bundle-managed", | ||||
|     "watch": "yarn start -d watch,start core:start --watchTheme", | ||||
|     "ci:test-frontend": "yarn run prettier:check && yarn run packages:typecheck && yarn run typecheck && yarn grunt no-only-tests && yarn run test:ci" | ||||
|     "ci:test-frontend": "yarn run prettier:check && yarn run typecheck && yarn run lint && yarn run test:ci && yarn grafana-toolkit node-version-check" | ||||
|   }, | ||||
|   "grafana": { | ||||
|     "whatsNewUrl": "https://grafana.com/docs/grafana/latest/guides/whats-new-in-v7-3/", | ||||
|  | @ -49,7 +51,7 @@ | |||
|   }, | ||||
|   "husky": { | ||||
|     "hooks": { | ||||
|       "pre-commit": "lint-staged && npm run precommit" | ||||
|       "pre-commit": "yarn run precommit" | ||||
|     } | ||||
|   }, | ||||
|   "lint-staged": { | ||||
|  | @ -134,9 +136,10 @@ | |||
|     "es-abstract": "1.18.0-next.1", | ||||
|     "es6-promise": "4.2.8", | ||||
|     "es6-shim": "0.35.5", | ||||
|     "eslint": "7.4.0", | ||||
|     "eslint": "^7.14.0", | ||||
|     "eslint-config-prettier": "6.11.0", | ||||
|     "eslint-plugin-jsdoc": "28.6.1", | ||||
|     "eslint-plugin-no-only-tests": "^2.4.0", | ||||
|     "eslint-plugin-prettier": "3.1.4", | ||||
|     "eslint-plugin-react": "7.21.5", | ||||
|     "eslint-plugin-react-hooks": "4.1.2", | ||||
|  | @ -146,18 +149,6 @@ | |||
|     "fork-ts-checker-webpack-plugin": "5.0.0", | ||||
|     "gaze": "1.1.3", | ||||
|     "glob": "7.1.6", | ||||
|     "grunt": "1.0.4", | ||||
|     "grunt-angular-templates": "1.1.0", | ||||
|     "grunt-cli": "1.3.2", | ||||
|     "grunt-contrib-clean": "2.0.0", | ||||
|     "grunt-contrib-copy": "1.0.0", | ||||
|     "grunt-exec": "3.0.0", | ||||
|     "grunt-newer": "1.3.0", | ||||
|     "grunt-notify": "0.4.5", | ||||
|     "grunt-postcss": "0.9.0", | ||||
|     "grunt-sass-lint": "0.2.4", | ||||
|     "grunt-usemin": "3.1.1", | ||||
|     "grunt-webpack": "3.1.3", | ||||
|     "html-loader": "0.5.5", | ||||
|     "html-webpack-harddisk-plugin": "1.0.1", | ||||
|     "html-webpack-plugin": "3.2.0", | ||||
|  |  | |||
|  | @ -5,7 +5,6 @@ import chalk from 'chalk'; | |||
| import { startTask } from './tasks/core.start'; | ||||
| import { changelogTask } from './tasks/changelog'; | ||||
| import { cherryPickTask } from './tasks/cherrypick'; | ||||
| import { precommitTask } from './tasks/precommit'; | ||||
| import { templateTask } from './tasks/template'; | ||||
| import { pluginBuildTask } from './tasks/plugin.build'; | ||||
| import { toolkitBuildTask } from './tasks/toolkit.build'; | ||||
|  | @ -21,6 +20,7 @@ import { pluginCreateTask } from './tasks/plugin.create'; | |||
| import { pluginSignTask } from './tasks/plugin.sign'; | ||||
| import { bundleManagedTask } from './tasks/plugin/bundle.managed'; | ||||
| import { componentCreateTask } from './tasks/component.create'; | ||||
| import { nodeVersionCheckerTask } from './tasks/nodeVersionChecker'; | ||||
| 
 | ||||
| export const run = (includeInternalScripts = false) => { | ||||
|   if (includeInternalScripts) { | ||||
|  | @ -74,10 +74,10 @@ export const run = (includeInternalScripts = false) => { | |||
|       }); | ||||
| 
 | ||||
|     program | ||||
|       .command('precommit') | ||||
|       .description('Executes checks') | ||||
|       .command('node-version-check') | ||||
|       .description('Verify node version') | ||||
|       .action(async cmd => { | ||||
|         await execTask(precommitTask)({}); | ||||
|         await execTask(nodeVersionCheckerTask)({}); | ||||
|       }); | ||||
| 
 | ||||
|     program | ||||
|  |  | |||
|  | @ -15,7 +15,7 @@ const packageJsonFile = 'package.json'; | |||
| 
 | ||||
| const failures: FailedVersionCheck[] = []; | ||||
| 
 | ||||
| export const nodeVersionFiles = [packageJsonFile, 'Dockerfile', '.circleci/config.yml']; | ||||
| export const nodeVersionFiles = [packageJsonFile, 'Dockerfile']; | ||||
| 
 | ||||
| const nodeVersionCheckerRunner: TaskRunner<NodeVersionCheckerOptions> = async () => { | ||||
|   // Read version from package json and treat that as the expected version in all other locations
 | ||||
|  |  | |||
|  | @ -1,67 +0,0 @@ | |||
| import { Task, TaskRunner } from './task'; | ||||
| import chalk from 'chalk'; | ||||
| // @ts-ignore
 | ||||
| import get from 'lodash/get'; | ||||
| // @ts-ignore
 | ||||
| import flatten from 'lodash/flatten'; | ||||
| import execa = require('execa'); | ||||
| import { nodeVersionCheckerTask, nodeVersionFiles } from './nodeVersionChecker'; | ||||
| import { execTask } from '../utils/execTask'; | ||||
| const simpleGit = require('simple-git/promise')(process.cwd()); | ||||
| 
 | ||||
| interface PrecommitOptions {} | ||||
| 
 | ||||
| interface GitStatus { | ||||
|   files: GitFile[]; | ||||
| } | ||||
| 
 | ||||
| interface GitFile { | ||||
|   path: string; | ||||
| } | ||||
| 
 | ||||
| const precommitRunner: TaskRunner<PrecommitOptions> = async () => { | ||||
|   const status: GitStatus = await simpleGit.status(); | ||||
|   const sassFiles = status.files.filter( | ||||
|     file => file.path.match(/^[a-zA-Z0-9\_\-\/]+(\.scss)$/g) || file.path.indexOf('.sass-lint.yml') > -1 | ||||
|   ); | ||||
| 
 | ||||
|   const testFiles = status.files.filter(file => file.path.match(/^[a-zA-Z0-9\_\-\/]+(\.test.(ts|tsx))$/g)); | ||||
|   const goTestFiles = status.files.filter(file => file.path.match(/^[a-zA-Z0-9\_\-\/]+(\_test.go)$/g)); | ||||
|   const affectedNodeVersionFiles = status.files | ||||
|     .filter(file => nodeVersionFiles.indexOf(file.path) !== -1) | ||||
|     .map(f => f.path); | ||||
| 
 | ||||
|   const gruntTasks = []; | ||||
| 
 | ||||
|   if (affectedNodeVersionFiles.length > 0) { | ||||
|     await execTask(nodeVersionCheckerTask)({}); | ||||
|   } | ||||
| 
 | ||||
|   if (sassFiles.length > 0) { | ||||
|     gruntTasks.push('sasslint'); | ||||
|   } | ||||
| 
 | ||||
|   if (testFiles.length) { | ||||
|     gruntTasks.push('no-only-tests'); | ||||
|   } | ||||
| 
 | ||||
|   if (goTestFiles.length) { | ||||
|     gruntTasks.push('no-focus-convey-tests'); | ||||
|   } | ||||
| 
 | ||||
|   if (gruntTasks.length > 0) { | ||||
|     console.log(chalk.yellow(`Precommit checks: ${gruntTasks.join(', ')}`)); | ||||
|     const task = execa('grunt', gruntTasks); | ||||
|     // @ts-ignore
 | ||||
|     const stream = task.stdout; | ||||
|     if (stream) { | ||||
|       stream.pipe(process.stdout); | ||||
|     } | ||||
|     return task; | ||||
|   } | ||||
| 
 | ||||
|   console.log(chalk.yellow('Skipping precommit checks, no front-end changes detected')); | ||||
|   return undefined; | ||||
| }; | ||||
| 
 | ||||
| export const precommitTask = new Task<PrecommitOptions>('Precommit task', precommitRunner); | ||||
|  | @ -1,6 +0,0 @@ | |||
| module.exports = function(grunt) { | ||||
|   'use strict'; | ||||
| 
 | ||||
|   // Concat and Minify the src directory into dist
 | ||||
|   grunt.registerTask('build', ['clean:release', 'clean:build', 'exec:webpack']); | ||||
| }; | ||||
|  | @ -1,56 +0,0 @@ | |||
| // Lint and build CSS
 | ||||
| module.exports = function(grunt) { | ||||
|   'use strict'; | ||||
| 
 | ||||
|   // prettier-ignore
 | ||||
|   grunt.registerTask('default', [ | ||||
|     'clean:build', | ||||
|   ]); | ||||
| 
 | ||||
|   // prettier-ignore
 | ||||
|   grunt.registerTask('test', [ | ||||
|     'sasslint', | ||||
|     'eslint', | ||||
|     'typecheck', | ||||
|     'exec:jest', | ||||
|     'no-only-tests', | ||||
|     'no-focus-convey-tests' | ||||
|   ]); | ||||
| 
 | ||||
|   // prettier-ignore
 | ||||
|   grunt.registerTask('eslint', [ | ||||
|     'newer:exec:eslint' | ||||
|   ]); | ||||
| 
 | ||||
|   // prettier-ignore
 | ||||
|   grunt.registerTask('typecheck', [ | ||||
|     'newer:exec:typecheckPackages', | ||||
|     'newer:exec:typecheckRoot' | ||||
|   ]); | ||||
| 
 | ||||
|   grunt.registerTask('no-only-tests', function() { | ||||
|     var files = grunt.file.expand( | ||||
|       'public/**/*@(_specs|.test).@(ts|js|tsx|jsx)', | ||||
|       'packages/grafana-data/**/*@(_specs|.test).@(ts|js|tsx|jsx)', | ||||
|       'packages/**/*@(_specs|.test).@(ts|js|tsx|jsx)' | ||||
|     ); | ||||
|     grepFiles(files, '.only(', 'found only statement in test: '); | ||||
|   }); | ||||
| 
 | ||||
|   grunt.registerTask('no-focus-convey-tests', function() { | ||||
|     var files = grunt.file.expand('pkg/**/*_test.go'); | ||||
|     grepFiles(files, 'FocusConvey(', 'found FocusConvey statement in test: '); | ||||
|   }); | ||||
| 
 | ||||
|   function grepFiles(files, pattern, errorMessage) { | ||||
|     files.forEach(function(spec) { | ||||
|       var rows = grunt.file.read(spec).split('\n'); | ||||
|       rows.forEach(function(row) { | ||||
|         if (row.indexOf(pattern) > 0) { | ||||
|           grunt.log.errorlns(row); | ||||
|           grunt.fail.warn(errorMessage + spec); | ||||
|         } | ||||
|       }); | ||||
|     }); | ||||
|   } | ||||
| }; | ||||
|  | @ -1,10 +0,0 @@ | |||
| module.exports = function(config) { | ||||
|   'use strict'; | ||||
| 
 | ||||
|   return { | ||||
|     release: ['<%= destDir %>', '<%= tempDir %>', '<%= genDir %>'], | ||||
|     build: ['<%= srcDir %>/build'], | ||||
|     temp: ['<%= tempDir %>'], | ||||
|     packaging: [], | ||||
|   }; | ||||
| }; | ||||
|  | @ -1,32 +0,0 @@ | |||
| module.exports = function(config) { | ||||
|   'use strict'; | ||||
| 
 | ||||
|   var task = { | ||||
|     release: { | ||||
|       options: { | ||||
|         archive: | ||||
|           '<%= destDir %>/<%= pkg.name %><%= enterprise ? "-enterprise" : ""  %>-<%= pkg.version %>.<%= platform %>-<%= arch %><%= libc ? "-" + libc : "" %>.tar.gz', | ||||
|       }, | ||||
|       files: [ | ||||
|         { | ||||
|           expand: true, | ||||
|           cwd: '<%= tempDir %>', | ||||
|           src: ['**/*'], | ||||
|           dest: '<%= pkg.name %>-<%= pkg.version %>/', | ||||
|         }, | ||||
|         { | ||||
|           expand: true, | ||||
|           src: ['LICENSE', 'README.md', 'NOTICE.md'], | ||||
|           dest: '<%= pkg.name %>-<%= pkg.version %>/', | ||||
|         }, | ||||
|       ], | ||||
|     }, | ||||
|   }; | ||||
| 
 | ||||
|   if (config.platform === 'windows') { | ||||
|     task.release.options.archive = | ||||
|       '<%= destDir %>/<%= pkg.name %><%= enterprise ? "-enterprise" : ""  %>-<%= pkg.version %>.<%= platform %>-<%= arch %>.zip'; | ||||
|   } | ||||
| 
 | ||||
|   return task; | ||||
| }; | ||||
|  | @ -1,16 +0,0 @@ | |||
| module.exports = function(config, grunt) { | ||||
|   'use strict'; | ||||
| 
 | ||||
|   return { | ||||
|     eslint: { | ||||
|       command: 'yarn lint', | ||||
|     }, | ||||
|     typecheckPackages: { | ||||
|       command: 'yarn packages:typecheck', | ||||
|     }, | ||||
|     typecheckRoot: { | ||||
|       command: 'yarn typecheck', | ||||
|     }, | ||||
|     webpack: 'node ./node_modules/webpack/bin/webpack.js --config scripts/webpack/webpack.prod.js', | ||||
|   }; | ||||
| }; | ||||
|  | @ -1,9 +0,0 @@ | |||
| module.exports = function(config) { | ||||
|   'use strict'; | ||||
|   return { | ||||
|     options: { | ||||
|       configFile: 'public/sass/.sass-lint.yml', | ||||
|     }, | ||||
|     src: ['public/sass/**/*.scss', 'packages/**/*.scss', '!**/node_modules/**/*.scss'], | ||||
|   }; | ||||
| }; | ||||
|  | @ -1,13 +0,0 @@ | |||
| const dev = require('../../webpack/webpack.dev.js'); | ||||
| const prod = require('../../webpack/webpack.prod.js'); | ||||
| 
 | ||||
| module.exports = function() { | ||||
|   'use strict'; | ||||
|   return { | ||||
|     options: { | ||||
|       stats: false, | ||||
|     }, | ||||
|     dev: dev, | ||||
|     prod: prod, | ||||
|   }; | ||||
| }; | ||||
|  | @ -1,40 +0,0 @@ | |||
| var path = require('path'); | ||||
| 
 | ||||
| module.exports = function(grunt) { | ||||
|   'use strict'; | ||||
| 
 | ||||
|   // build then zip
 | ||||
|   grunt.registerTask('release', ['build', 'build-post-process']); | ||||
| 
 | ||||
|   // package into archives
 | ||||
|   grunt.registerTask('package', ['clean:temp', 'build-post-process']); | ||||
| 
 | ||||
|   grunt.registerTask('build-post-process', function() { | ||||
|     grunt.config('copy.public_to_temp', { | ||||
|       expand: true, | ||||
|       cwd: '<%= srcDir %>', | ||||
|       src: '**/*', | ||||
|       dest: '<%= tempDir %>/public/', | ||||
|     }); | ||||
|     grunt.config('copy.backend_bin', { | ||||
|       cwd: 'bin/<%= platform %>-<%= arch %><%= libc ? "-" + libc : "" %>', | ||||
|       expand: true, | ||||
|       src: ['*'], | ||||
|       options: { mode: true }, | ||||
|       dest: '<%= tempDir %>/bin/', | ||||
|     }); | ||||
|     grunt.config('copy.backend_files', { | ||||
|       expand: true, | ||||
|       src: ['conf/**', 'tools/**', 'scripts/*'], | ||||
|       options: { mode: true }, | ||||
|       dest: '<%= tempDir %>', | ||||
|     }); | ||||
| 
 | ||||
|     grunt.task.run('copy:public_to_temp'); | ||||
|     grunt.task.run('copy:backend_bin'); | ||||
|     grunt.task.run('copy:backend_files'); | ||||
|     grunt.task.run('clean:packaging'); | ||||
| 
 | ||||
|     grunt.file.write(path.join(grunt.config('tempDir'), 'VERSION'), grunt.config('pkg.version')); | ||||
|   }); | ||||
| }; | ||||
|  | @ -1,46 +0,0 @@ | |||
| module.exports = function(grunt) { | ||||
|   'use strict'; | ||||
| 
 | ||||
|   function escapeRegExp(str) { | ||||
|     return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, '\\$&'); | ||||
|   } | ||||
| 
 | ||||
|   function extractColour(line) { | ||||
|     var regex = /\s*:\s*(#[a-fA-F0-9]{3,6})\s*(!default|!default;)?/; | ||||
|     var matches = line.match(regex); | ||||
|     return matches ? matches[1] : matches; | ||||
|   } | ||||
| 
 | ||||
|   function extractVariable(line) { | ||||
|     var matches = line.match(/(\$[0-9a-zA-Z_-]+)\s*(!default|!default;)?/); | ||||
|     return matches ? matches[1] : matches; | ||||
|   } | ||||
| 
 | ||||
|   function readVars(file, obj) { | ||||
|     var content = grunt.file.read(file); | ||||
|     var lines = content.split('\n'); | ||||
| 
 | ||||
|     lines.forEach(function(line) { | ||||
|       var variable = extractVariable(line); | ||||
|       if (variable) { | ||||
|         var color = extractColour(line, variable); | ||||
|         if (color) { | ||||
|           obj[variable] = color; | ||||
|         } | ||||
|       } | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   grunt.registerTask('styleguide', function() { | ||||
|     var data = { | ||||
|       dark: {}, | ||||
|       light: {}, | ||||
|     }; | ||||
| 
 | ||||
|     readVars('public/sass/_variables.dark.scss', data.dark); | ||||
|     readVars('public/sass/_variables.light.scss', data.light); | ||||
| 
 | ||||
|     var styleGuideJson = grunt.config().srcDir + '/build/styleguide.json'; | ||||
|     grunt.file.write(styleGuideJson, JSON.stringify(data, null, 4)); | ||||
|   }); | ||||
| }; | ||||
		Loading…
	
		Reference in New Issue