63 lines
1.3 KiB
Go
63 lines
1.3 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"os"
|
|
"os/exec"
|
|
"path/filepath"
|
|
|
|
"go.einride.tech/sage/sg"
|
|
"go.einride.tech/sage/sgtool"
|
|
)
|
|
|
|
const (
|
|
name = "eslint"
|
|
packageJSONContent = `{
|
|
"dependencies": {
|
|
"@einride/eslint-plugin": "4.2.0",
|
|
"eslint": "8.5.0"
|
|
}
|
|
}`
|
|
)
|
|
|
|
func eslintCommand(ctx context.Context, args ...string) *exec.Cmd {
|
|
sg.Deps(ctx, prepareEslintCommand)
|
|
// eslint plugins should be resolved from the tool dir
|
|
defaultArgs := []string{
|
|
"--resolve-plugins-relative-to",
|
|
sg.FromToolsDir(name),
|
|
}
|
|
cmd := sg.Command(ctx, sg.FromBinDir(name), append(defaultArgs, args...)...)
|
|
return cmd
|
|
}
|
|
|
|
func prepareEslintCommand(ctx context.Context) error {
|
|
toolDir := sg.FromToolsDir(name)
|
|
binary := filepath.Join(toolDir, "node_modules", ".bin", name)
|
|
packageJSON := filepath.Join(toolDir, "package.json")
|
|
if err := os.MkdirAll(toolDir, 0o755); err != nil {
|
|
return err
|
|
}
|
|
if err := os.WriteFile(packageJSON, []byte(packageJSONContent), 0o600); err != nil {
|
|
return err
|
|
}
|
|
sg.Logger(ctx).Println("installing packages...")
|
|
if err := sg.Command(
|
|
ctx,
|
|
"npm",
|
|
"--silent",
|
|
"install",
|
|
"--prefix",
|
|
toolDir,
|
|
"--no-save",
|
|
"--no-audit",
|
|
"--ignore-script",
|
|
).Run(); err != nil {
|
|
return err
|
|
}
|
|
if _, err := sgtool.CreateSymlink(binary); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|