From 40ebe0088bc97f644889d915b0524b49d4a21e4c Mon Sep 17 00:00:00 2001 From: Kristóf Marussy Date: Fri, 19 Nov 2021 20:17:56 +0100 Subject: build: upgrade to yarn 3 Also upgrades various frontend dependencies. We can't upgrade to typescript 4.5 yet, because https://github.com/yarnpkg/berry/pull/3760 is not released yet. --- language-web/build.gradle | 40 +++++++++++++++++++++++++++++----------- 1 file changed, 29 insertions(+), 11 deletions(-) (limited to 'language-web/build.gradle') diff --git a/language-web/build.gradle b/language-web/build.gradle index 7306869b..b1ad86a7 100644 --- a/language-web/build.gradle +++ b/language-web/build.gradle @@ -4,7 +4,7 @@ plugins { id 'refinery-xtext-conventions' } -import org.siouan.frontendgradleplugin.infrastructure.gradle.RunNpmYarn +import org.siouan.frontendgradleplugin.infrastructure.gradle.RunYarn dependencies { implementation project(':refinery-language') @@ -34,17 +34,35 @@ def serverMainClass = 'tools.refinery.language.web.ServerLauncher' def nodeDirectory = "${rootDir}/.gradle/node" frontend { - nodeVersion = project.ext.nodeVersion - nodeInstallDirectory = file(nodeDirectory) + nodeVersion = project.ext['frontend.nodeVersion'] + nodeInstallDirectory = file('.node') yarnEnabled = true - yarnVersion = project.ext.yarnVersion - yarnInstallDirectory = file("${rootDir}/.gradle/yarn") + yarnVersion = project.ext['frontend.yarnVersion'] assembleScript = 'run assemble:webpack' } +tasks.named('installYarnGlobally') { + // Do not check for updates all the time, since we only use yarn 1 for calling yarn berry. + outputs.dir "${frontend.nodeInstallDirectory.get()}/lib/node_modules/yarn" +} + +tasks.named('enableYarnBerry') { + // Yarn berry is checked into the repository, so there's no need to install it. + enabled = false +} + +tasks.named('installYarn') { + // Yarn berry is checked into the repository, so there's no need to install it. + enabled = false +} + def installFrontend = tasks.named('installFrontend') +installFrontend.configure { + inputs.files('package.json', 'yarn.lock') + outputs.file '.pnp.cjs' +} -def generateLezerGrammar = tasks.register('generateLezerGrammar', RunNpmYarn) { +def generateLezerGrammar = tasks.register('generateLezerGrammar', RunYarn) { dependsOn installFrontend inputs.file('src/main/js/language/problem.grammar') inputs.files('package.json', 'yarn.lock') @@ -65,7 +83,7 @@ assembleFrontend.configure { outputs.dir productionResources } -def eslint = tasks.register('eslint', RunNpmYarn) { +def eslint = tasks.register('eslint', RunYarn) { dependsOn installFrontend inputs.dir 'src/main/js' inputs.files('.eslintrc.js', 'tsconfig.json') @@ -79,7 +97,7 @@ def eslint = tasks.register('eslint', RunNpmYarn) { description = 'Check for TypeScript errors.' } -def stylelint = tasks.register('stylelint', RunNpmYarn) { +def stylelint = tasks.register('stylelint', RunYarn) { dependsOn installFrontend inputs.dir 'src/main/css' inputs.file '.stylelintrc.js' @@ -127,10 +145,10 @@ def jettyRun = tasks.register('jettyRun', JavaExec) { standardInput = System.in environment BASE_RESOURCE: productionResources group = 'run' - description = 'Start a Jetty web server serving the Xtex API and assets (without rebuilding assets).' + description = 'Start a Jetty web server serving the Xtex API and assets.' } -tasks.register('webpackServe', RunNpmYarn) { +tasks.register('webpackServe', RunYarn) { dependsOn installFrontend dependsOn generateLezerGrammar outputs.dir "${webpackOutputDir}/development" @@ -145,7 +163,7 @@ sonarqube.properties { 'src/main/html', 'src/main/js', ] - property 'sonar.nodejs.executable', "${nodeDirectory}/bin/node" + property 'sonar.nodejs.executable', "${frontend.nodeInstallDirectory.get()}/bin/node" property 'sonar.eslint.reportPaths', "${buildDir}/eslint.json" property 'sonar.css.stylelint.reportPaths', "${buildDir}/stylelint.json" // SonarJS does not pick up typescript files with `exactOptionalPropertyTypes` -- cgit v1.2.3-70-g09d2