feat: remove NWScript compiler support
This commit is contained in:
+2
-129
@@ -355,9 +355,8 @@ func runBuildModule(ctx context) error {
|
||||
}
|
||||
|
||||
type buildModulePreflightResult struct {
|
||||
ManifestStatus string
|
||||
ManifestPath string
|
||||
ScriptCompilationStatus string
|
||||
ManifestStatus string
|
||||
ManifestPath string
|
||||
}
|
||||
|
||||
func runBuildModulePreflight(ctx context, p *project.Project, progress func(string)) (buildModulePreflightResult, error) {
|
||||
@@ -371,11 +370,6 @@ func runBuildModulePreflight(ctx context, p *project.Project, progress func(stri
|
||||
}
|
||||
result.ManifestStatus = manifestStatus
|
||||
result.ManifestPath = manifestPath
|
||||
scriptStatus, err := prepareBuildModuleCompiler(ctx, p, progress)
|
||||
if err != nil {
|
||||
return result, err
|
||||
}
|
||||
result.ScriptCompilationStatus = scriptStatus
|
||||
return result, nil
|
||||
}
|
||||
|
||||
@@ -406,117 +400,6 @@ func refreshBuildModuleManifest(ctx context, p *project.Project, progress func(s
|
||||
return "refreshed", manifestPath, nil
|
||||
}
|
||||
|
||||
func prepareBuildModuleCompiler(ctx context, p *project.Project, progress func(string)) (string, error) {
|
||||
if envEnabled("SOW_MODULE_SKIP_NSS_COMPILATION") {
|
||||
progress("SOW_MODULE_SKIP_NSS_COMPILATION is set; skipping NWScript compiler resolution and NSS compilation for this run.")
|
||||
return "skipped", nil
|
||||
}
|
||||
if !projectHasScriptSources(p) {
|
||||
return "not-needed", nil
|
||||
}
|
||||
|
||||
compilerPathEnv := p.ScriptCompilerPathEnv()
|
||||
explicitCompiler := strings.TrimSpace(os.Getenv(compilerPathEnv))
|
||||
if explicitCompiler != "" {
|
||||
if scriptCompilerRunnable(explicitCompiler) {
|
||||
return "enabled", nil
|
||||
}
|
||||
if fileExists(explicitCompiler) {
|
||||
return disableBuildModuleCompiler(compilerPathEnv, progress, fmt.Sprintf("Configured NWScript compiler is present but cannot start: %s", explicitCompiler))
|
||||
}
|
||||
}
|
||||
|
||||
if _, ok := findUsableBuildModuleCompiler(p); ok {
|
||||
return "enabled", nil
|
||||
}
|
||||
|
||||
installScript := projectScriptPath(p.Root, "scripts", "install-script-compiler")
|
||||
if !fileExists(installScript) {
|
||||
return disableBuildModuleCompiler(compilerPathEnv, progress, "NWScript compiler not found locally and automatic installer script is unavailable.")
|
||||
}
|
||||
|
||||
progress("NWScript compiler not found locally. Installing it now...")
|
||||
if err := runProjectScript(ctx, p, []string{"scripts", "install-script-compiler"}); err != nil {
|
||||
return disableBuildModuleCompiler(compilerPathEnv, progress, "Automatic NWScript compiler install failed.")
|
||||
}
|
||||
if _, ok := findUsableBuildModuleCompiler(p); ok {
|
||||
return "installed", nil
|
||||
}
|
||||
|
||||
return disableBuildModuleCompiler(compilerPathEnv, progress, "Installed NWScript compiler but it still cannot start.")
|
||||
}
|
||||
|
||||
func disableBuildModuleCompiler(compilerPathEnv string, progress func(string), reason string) (string, error) {
|
||||
if err := os.Setenv("SOW_MODULE_SKIP_NSS_COMPILATION", "1"); err != nil {
|
||||
return "", fmt.Errorf("set SOW_MODULE_SKIP_NSS_COMPILATION: %w", err)
|
||||
}
|
||||
progress("Skipping NWScript compilation for this build. " + reason)
|
||||
if compilerPathEnv != "" {
|
||||
_ = os.Unsetenv(compilerPathEnv)
|
||||
}
|
||||
return "skipped", nil
|
||||
}
|
||||
|
||||
func projectHasScriptSources(p *project.Project) bool {
|
||||
for _, rel := range p.Inventory.ScriptFiles {
|
||||
if strings.EqualFold(filepath.Ext(rel), ".nss") {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func findUsableBuildModuleCompiler(p *project.Project) (string, bool) {
|
||||
candidates := make([]string, 0, 2+len(p.ScriptCompilerSearchPaths()))
|
||||
if configured := p.ScriptCompilerPath(); configured != "" {
|
||||
candidates = append(candidates, configured)
|
||||
}
|
||||
if configured := strings.TrimSpace(os.Getenv(p.ScriptCompilerPathEnv())); configured != "" {
|
||||
candidates = append(candidates, configured)
|
||||
}
|
||||
candidates = append(candidates, p.ScriptCompilerSearchPaths()...)
|
||||
|
||||
for _, candidate := range candidates {
|
||||
if compiler, ok := resolveRunnableCompilerCandidate(candidate); ok {
|
||||
return compiler, true
|
||||
}
|
||||
}
|
||||
return "", false
|
||||
}
|
||||
|
||||
func resolveRunnableCompilerCandidate(candidate string) (string, bool) {
|
||||
if candidate == "" {
|
||||
return "", false
|
||||
}
|
||||
if binary, ok := strings.CutPrefix(candidate, "PATH:"); ok {
|
||||
compiler, err := exec.LookPath(binary)
|
||||
if err != nil {
|
||||
return "", false
|
||||
}
|
||||
if scriptCompilerRunnable(compiler) {
|
||||
return compiler, true
|
||||
}
|
||||
return "", false
|
||||
}
|
||||
if !fileExists(candidate) {
|
||||
return "", false
|
||||
}
|
||||
if scriptCompilerRunnable(candidate) {
|
||||
return candidate, true
|
||||
}
|
||||
return "", false
|
||||
}
|
||||
|
||||
func scriptCompilerRunnable(path string) bool {
|
||||
if !fileExists(path) {
|
||||
return false
|
||||
}
|
||||
cmd := exec.Command(path, "--help")
|
||||
cmd.Stdout = io.Discard
|
||||
cmd.Stderr = io.Discard
|
||||
return cmd.Run() == nil
|
||||
}
|
||||
|
||||
func runProjectScript(ctx context, p *project.Project, scriptParts []string, args ...string) error {
|
||||
if len(scriptParts) == 0 {
|
||||
return errors.New("project script path is required")
|
||||
@@ -659,10 +542,6 @@ func (c *projectConsole) phaseLabel(message string) string {
|
||||
return "refreshing HAK manifest"
|
||||
case strings.HasPrefix(message, "Using existing hak manifest at "):
|
||||
return "reusing HAK manifest"
|
||||
case strings.HasPrefix(message, "NWScript compiler not found locally. Installing it now"):
|
||||
return "installing script compiler"
|
||||
case strings.HasPrefix(message, "Skipping NWScript compilation for this build."):
|
||||
return "skipping script compilation"
|
||||
case strings.HasPrefix(message, "Validating project"):
|
||||
return "validating project"
|
||||
case strings.HasPrefix(message, "Resolving module HAK order"):
|
||||
@@ -689,9 +568,6 @@ func (c *projectConsole) emitBuildResult(result pipeline.BuildResult, preflight
|
||||
}
|
||||
fmt.Fprintln(c.stdout)
|
||||
}
|
||||
if preflight.ScriptCompilationStatus != "" && preflight.ScriptCompilationStatus != "not-needed" {
|
||||
fmt.Fprintf(c.stdout, "script compilation: %s\n", preflight.ScriptCompilationStatus)
|
||||
}
|
||||
if result.TopPackageHAK != "" {
|
||||
fmt.Fprintf(c.stdout, "top package hak: %s\n", c.relPath(result.TopPackageHAK))
|
||||
fmt.Fprintf(c.stdout, "top package tlk: %s\n", c.relPath(result.TopPackageTLK))
|
||||
@@ -716,9 +592,6 @@ func (c *projectConsole) emitBuildModuleResult(result pipeline.BuildResult, pref
|
||||
}
|
||||
fmt.Fprintln(c.stdout)
|
||||
}
|
||||
if preflight.ScriptCompilationStatus != "" && preflight.ScriptCompilationStatus != "not-needed" {
|
||||
fmt.Fprintf(c.stdout, "script compilation: %s\n", preflight.ScriptCompilationStatus)
|
||||
}
|
||||
}
|
||||
|
||||
func (c *projectConsole) emitExtractResult(result pipeline.ExtractResult) {
|
||||
|
||||
Reference in New Issue
Block a user