feat: enhance target handling and improve release/install workflows

- Add file target support to heuristics with automatic TargetSpace derivation and comprehensive unit tests for file path parsing
- Display target space folder location during workflow execution for both module and flow runs
- Fix IP address handling in URL parsing to correctly identify and extract root domain for IP targets
- Add goreleaser --mark-latest flag to manual release workflow for consistent release tagging
- Improve install binary help text and add progress feedback for silent mode installations
- Replace deprecated --list-registry-binaries with --list-registry-direct-fetch and --list-registry-nix-build examples
This commit is contained in:
j3ssie
2026-01-21 17:20:52 +08:00
parent d21acbaf1a
commit 344e6117ca
6 changed files with 170 additions and 11 deletions
+18
View File
@@ -859,6 +859,15 @@ func (e *Executor) ExecuteModule(ctx context.Context, module *core.Workflow, par
e.printer.WorkflowInfo(module.Name, module.Description, module.Tags, string(module.Runner), len(module.Steps))
}
// Show target space folder location
if !e.dryRun && e.progressBar == nil {
if targetSpace, ok := execCtx.GetVariable("TargetSpace"); ok {
if tsStr, ok := targetSpace.(string); ok && tsStr != "" {
e.printer.Info("Reserving target space folder at: %s", terminal.Cyan(tsStr))
}
}
}
// Execute steps
e.logger.Debug("Starting step execution loop",
zap.Int("total_steps", len(module.Steps)),
@@ -1414,6 +1423,15 @@ func (e *Executor) ExecuteFlow(ctx context.Context, flow *core.Workflow, params
printDryRunHeader(flow.Name, string(core.KindFlow), params["target"], tactic, len(flow.Modules), execCtx)
}
// Show target space folder location
if !e.dryRun && e.progressBar == nil {
if targetSpace, ok := execCtx.GetVariable("TargetSpace"); ok {
if tsStr, ok := targetSpace.(string); ok && tsStr != "" {
e.printer.Info("Reserving target space folder at: %s", terminal.Cyan(tsStr))
}
}
}
// Export flow workflow state (write workflow YAML to output)
if !e.disableWorkflowState && !e.dryRun {
if stateWorkflowFile, ok := execCtx.GetVariable("StateWorkflowFile"); ok {