From e9591844f470acc21ee7447e35a3af9d83c175b8 Mon Sep 17 00:00:00 2001 From: Samuel Corsi-House Date: Fri, 14 Jan 2022 11:46:35 -0500 Subject: [PATCH 1/5] fix: fallback when there is no packageManager field --- cli/internal/backends/nodejs/nodejs.go | 54 ++++++++++++++++++++++++-- cli/internal/util/backends.go | 24 +++++++++++- 2 files changed, 72 insertions(+), 6 deletions(-) diff --git a/cli/internal/backends/nodejs/nodejs.go b/cli/internal/backends/nodejs/nodejs.go index 7f2f1d9291adc..327e57c2404f1 100644 --- a/cli/internal/backends/nodejs/nodejs.go +++ b/cli/internal/backends/nodejs/nodejs.go @@ -3,6 +3,7 @@ package nodejs import ( "fmt" "io/ioutil" + "path/filepath" "turbo/internal/api" "turbo/internal/fs" "turbo/internal/util" @@ -42,7 +43,7 @@ var NodejsYarnBackend = api.LanguageBackend{ return false, nil } - isBerry, err := util.IsBerry(cwd, version) + isBerry, err := util.IsBerry(cwd, version, true) if err != nil { return false, fmt.Errorf("could not determine yarn version (v1 or berry): %w", err) } @@ -50,6 +51,18 @@ var NodejsYarnBackend = api.LanguageBackend{ if !isBerry { return true, nil } + } else { + specfileExists := fs.FileExists(filepath.Join(cwd, backend.Specfile)) + lockfileExists := fs.FileExists(filepath.Join(cwd, backend.Lockfile)) + + isBerry, err := util.IsBerry(cwd, "", false) + if err != nil { + return false, fmt.Errorf("could not check if yarn is berry: %w", err) + } + + if specfileExists && lockfileExists && !isBerry { + return true, nil + } } return false, nil @@ -85,7 +98,7 @@ var NodejsBerryBackend = api.LanguageBackend{ return false, nil } - isBerry, err := util.IsBerry(cwd, version) + isBerry, err := util.IsBerry(cwd, version, true) if err != nil { return false, fmt.Errorf("could not determine yarn version (v1 or berry): %w", err) } @@ -98,6 +111,25 @@ var NodejsBerryBackend = api.LanguageBackend{ return false, fmt.Errorf("only yarn v2/v3 with `nodeLinker: node-modules` is supported at this time") } + return true, nil + } + } else { + specfileExists := fs.FileExists(filepath.Join(cwd, backend.Specfile)) + lockfileExists := fs.FileExists(filepath.Join(cwd, backend.Lockfile)) + + isBerry, err := util.IsBerry(cwd, "", false) + if err != nil { + return false, fmt.Errorf("could not check if yarn is berry: %w", err) + } + + if specfileExists && lockfileExists && isBerry { + isNMLinker, err := util.IsNMLinker(cwd) + if err != nil { + return false, fmt.Errorf("could not check if yarn is using nm-linker: %w", err) + } else if !isNMLinker { + return false, fmt.Errorf("only yarn nm-linker is supported") + } + return true, nil } } @@ -139,13 +171,20 @@ var NodejsPnpmBackend = api.LanguageBackend{ GetRunCommand: func() []string { return []string{"pnpm", "run"} }, - Detect: func(_ string, pkg *fs.PackageJSON, backend *api.LanguageBackend) (bool, error) { + Detect: func(cwd string, pkg *fs.PackageJSON, backend *api.LanguageBackend) (bool, error) { if pkg.PackageManager != "" { packageManager, _ := util.GetPackageManagerAndVersion(pkg.PackageManager) if packageManager == "pnpm" { return true, nil } + } else { + specfileExists := fs.FileExists(filepath.Join(cwd, backend.Specfile)) + lockfileExists := fs.FileExists(filepath.Join(cwd, backend.Lockfile)) + + if specfileExists && lockfileExists { + return true, nil + } } return false, nil @@ -173,13 +212,20 @@ var NodejsNpmBackend = api.LanguageBackend{ GetRunCommand: func() []string { return []string{"npm", "run"} }, - Detect: func(_ string, pkg *fs.PackageJSON, backend *api.LanguageBackend) (bool, error) { + Detect: func(cwd string, pkg *fs.PackageJSON, backend *api.LanguageBackend) (bool, error) { if pkg.PackageManager != "" { packageManager, _ := util.GetPackageManagerAndVersion(pkg.PackageManager) if packageManager == "npm" { return true, nil } + } else { + specfileExists := fs.FileExists(filepath.Join(cwd, backend.Specfile)) + lockfileExists := fs.FileExists(filepath.Join(cwd, backend.Lockfile)) + + if specfileExists && lockfileExists { + return true, nil + } } return false, nil diff --git a/cli/internal/util/backends.go b/cli/internal/util/backends.go index 8dfa362a19410..1f4b6241bf97a 100644 --- a/cli/internal/util/backends.go +++ b/cli/internal/util/backends.go @@ -3,6 +3,7 @@ package util import ( "fmt" "io/ioutil" + "os/exec" "path/filepath" "regexp" "strings" @@ -19,7 +20,8 @@ func IsYarn(backendName string) bool { return backendName == "nodejs-yarn" || backendName == "nodejs-berry" } -func IsBerry(cwd string, version string) (bool, error) { +func IsBerry(cwd string, version string, pkgManager bool) (bool, error) { + if pkgManager { v, err := semver.NewVersion(version) if err != nil { return false, fmt.Errorf("could not parse yarn version: %w", err) @@ -30,6 +32,25 @@ func IsBerry(cwd string, version string) (bool, error) { } return c.Check(v), nil + } else { + cmd := exec.Command("yarn", "--version") + cmd.Dir = cwd + out, err := cmd.Output() + if err != nil { + return false, fmt.Errorf("could not detect yarn version: %w", err) + } + + v, err := semver.NewVersion(strings.TrimSpace(string(out))) + if err != nil { + return false, fmt.Errorf("could not parse yarn version: %w", err) + } + c, err := semver.NewConstraint(">=2.0.0") + if err != nil { + return false, fmt.Errorf("could not create constraint: %w", err) + } + + return c.Check(v), nil + } } func IsNMLinker(cwd string) (bool, error) { @@ -53,4 +74,3 @@ func GetPackageManagerAndVersion(packageManager string) (string, string) { return strings.Split(match, "@")[0], strings.Split(match, "@")[1] } - From 9762e7fc6cff3090558b9d047191ce3171ed1101 Mon Sep 17 00:00:00 2001 From: Samuel Corsi-House Date: Fri, 21 Jan 2022 10:29:08 -0500 Subject: [PATCH 2/5] fix: warn when no packageManager --- cli/internal/backends/nodejs/nodejs.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/cli/internal/backends/nodejs/nodejs.go b/cli/internal/backends/nodejs/nodejs.go index 327e57c2404f1..df053c73e02aa 100644 --- a/cli/internal/backends/nodejs/nodejs.go +++ b/cli/internal/backends/nodejs/nodejs.go @@ -3,6 +3,7 @@ package nodejs import ( "fmt" "io/ioutil" + "log" "path/filepath" "turbo/internal/api" "turbo/internal/fs" @@ -52,6 +53,8 @@ var NodejsYarnBackend = api.LanguageBackend{ return true, nil } } else { + log.Println("[WARNING] Did not find \"packageManager\" in your package.json. Please run \"npx @turbo/migrate add-package-manager\"") + specfileExists := fs.FileExists(filepath.Join(cwd, backend.Specfile)) lockfileExists := fs.FileExists(filepath.Join(cwd, backend.Lockfile)) @@ -114,6 +117,8 @@ var NodejsBerryBackend = api.LanguageBackend{ return true, nil } } else { + log.Println("[WARNING] Did not find \"packageManager\" in your package.json. Please set the \"packageManager\" field to your package.json") + specfileExists := fs.FileExists(filepath.Join(cwd, backend.Specfile)) lockfileExists := fs.FileExists(filepath.Join(cwd, backend.Lockfile)) @@ -179,6 +184,8 @@ var NodejsPnpmBackend = api.LanguageBackend{ return true, nil } } else { + log.Println("[WARNING] Did not find \"packageManager\" in your package.json. Please run \"npx @turbo/migrate add-package-manager\"") + specfileExists := fs.FileExists(filepath.Join(cwd, backend.Specfile)) lockfileExists := fs.FileExists(filepath.Join(cwd, backend.Lockfile)) @@ -220,6 +227,8 @@ var NodejsNpmBackend = api.LanguageBackend{ return true, nil } } else { + log.Println("[WARNING] Did not find \"packageManager\" in your package.json. Please run \"npx @turbo/migrate add-package-manager\"") + specfileExists := fs.FileExists(filepath.Join(cwd, backend.Specfile)) lockfileExists := fs.FileExists(filepath.Join(cwd, backend.Lockfile)) From 065d8818459206b3ca42eac8f2d2808ccb9d7a64 Mon Sep 17 00:00:00 2001 From: Samuel Corsi-House Date: Fri, 21 Jan 2022 10:54:08 -0500 Subject: [PATCH 3/5] Update cli/internal/backends/nodejs/nodejs.go Co-authored-by: Jared Palmer --- cli/internal/backends/nodejs/nodejs.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cli/internal/backends/nodejs/nodejs.go b/cli/internal/backends/nodejs/nodejs.go index df053c73e02aa..8669a58e5cf76 100644 --- a/cli/internal/backends/nodejs/nodejs.go +++ b/cli/internal/backends/nodejs/nodejs.go @@ -184,7 +184,7 @@ var NodejsPnpmBackend = api.LanguageBackend{ return true, nil } } else { - log.Println("[WARNING] Did not find \"packageManager\" in your package.json. Please run \"npx @turbo/migrate add-package-manager\"") + log.Println("[WARNING] Did not find \"packageManager\" in your package.json. Please run \"npx @turbo/codemod add-package-manager\"") specfileExists := fs.FileExists(filepath.Join(cwd, backend.Specfile)) lockfileExists := fs.FileExists(filepath.Join(cwd, backend.Lockfile)) From dd2b0990c6c2ab30ceac6050f1b535d0f9e40070 Mon Sep 17 00:00:00 2001 From: Samuel Corsi-House Date: Fri, 21 Jan 2022 10:54:15 -0500 Subject: [PATCH 4/5] Update cli/internal/backends/nodejs/nodejs.go Co-authored-by: Jared Palmer --- cli/internal/backends/nodejs/nodejs.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cli/internal/backends/nodejs/nodejs.go b/cli/internal/backends/nodejs/nodejs.go index 8669a58e5cf76..09d3d626ede3a 100644 --- a/cli/internal/backends/nodejs/nodejs.go +++ b/cli/internal/backends/nodejs/nodejs.go @@ -227,7 +227,7 @@ var NodejsNpmBackend = api.LanguageBackend{ return true, nil } } else { - log.Println("[WARNING] Did not find \"packageManager\" in your package.json. Please run \"npx @turbo/migrate add-package-manager\"") + log.Println("[WARNING] Did not find \"packageManager\" in your package.json. Please run \"npx @turbo/codemod add-package-manager\"") specfileExists := fs.FileExists(filepath.Join(cwd, backend.Specfile)) lockfileExists := fs.FileExists(filepath.Join(cwd, backend.Lockfile)) From a2ad08589751bc31ee7f14eae52d5593770c60a2 Mon Sep 17 00:00:00 2001 From: Samuel Corsi-House Date: Fri, 21 Jan 2022 10:55:06 -0500 Subject: [PATCH 5/5] fix: typo --- cli/internal/backends/nodejs/nodejs.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cli/internal/backends/nodejs/nodejs.go b/cli/internal/backends/nodejs/nodejs.go index 09d3d626ede3a..92cc67b5ec483 100644 --- a/cli/internal/backends/nodejs/nodejs.go +++ b/cli/internal/backends/nodejs/nodejs.go @@ -53,7 +53,7 @@ var NodejsYarnBackend = api.LanguageBackend{ return true, nil } } else { - log.Println("[WARNING] Did not find \"packageManager\" in your package.json. Please run \"npx @turbo/migrate add-package-manager\"") + log.Println("[WARNING] Did not find \"packageManager\" in your package.json. Please run \"npx @turbo/codemod add-package-manager\"") specfileExists := fs.FileExists(filepath.Join(cwd, backend.Specfile)) lockfileExists := fs.FileExists(filepath.Join(cwd, backend.Lockfile))