protoc-gen-ts/.sage/einrideeslint.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
}