installerbuilder/tasks/task18-脚本处理器.md

5.6 KiB
Raw Permalink Blame History

任务18脚本处理器

任务描述

实现脚本处理器,用于处理安装前后脚本、卸载前后脚本等。脚本处理器将确保用户定义的脚本能够在安装包的适当阶段被正确执行,并处理脚本的权限、变量替换、错误处理等功能。

实现步骤

  1. 定义脚本处理器接口:

    • internal/builder/scripts包中创建processor.go文件
    • 定义ScriptProcessor接口
      type ScriptProcessor interface {
          // Process 处理脚本
          Process(config *config.Config, target config.Target, outputDir string) error
      
          // GetProcessedScripts 获取处理后的脚本列表
          GetProcessedScripts() []ProcessedScript
      
          // GetErrors 获取处理过程中的错误
          GetErrors() []error
      }
      
    • 定义ProcessedScript结构体
      type ProcessedScript struct {
          Name            string            // 脚本名称
          Type            string            // 脚本类型preInstall, postInstall, preUninstall, postUninstall
          SourcePath      string            // 源脚本路径
          DestinationPath string            // 目标脚本路径
          Content         string            // 脚本内容
          Interpreter     string            // 脚本解释器
          Permissions     string            // 脚本权限
          Variables       map[string]string // 脚本变量
          Timeout         int               // 执行超时(秒)
          FailOnError     bool              // 失败时是否终止安装
      }
      
  2. 创建默认脚本处理器:

    • 创建default_processor.go文件
    • 定义DefaultScriptProcessor结构体实现ScriptProcessor接口
      type DefaultScriptProcessor struct {
          platformAdapter platform.PlatformAdapter
          resourceMgr     resource.ResourceManager
          logger          log.Logger
          processedScripts []ProcessedScript
          errors          []error
      }
      
    • 实现构造函数:
      func NewDefaultScriptProcessor(platformAdapter platform.PlatformAdapter, resourceMgr resource.ResourceManager, logger log.Logger) *DefaultScriptProcessor {
          return &DefaultScriptProcessor{
              platformAdapter:  platformAdapter,
              resourceMgr:      resourceMgr,
              logger:           logger,
              processedScripts: make([]ProcessedScript, 0),
              errors:           make([]error, 0),
          }
      }
      
  3. 实现脚本处理:

    • 实现Process方法处理脚本
    • 遍历配置中的脚本定义
    • 处理不同类型的脚本
    • 验证脚本有效性
  4. 实现脚本内容处理:

    • 创建processScriptContent方法处理脚本内容
    • 读取脚本文件或内联脚本
    • 处理脚本变量替换
    • 添加错误处理和日志记录
  5. 实现脚本解释器处理:

    • 创建processScriptInterpreter方法处理脚本解释器
    • 根据脚本类型和平台确定解释器
    • 处理解释器路径和参数
    • 支持自定义解释器
  6. 实现脚本权限处理:

    • 创建processScriptPermissions方法处理脚本权限
    • 设置脚本执行权限
    • 处理不同平台的权限模型
    • 确保脚本可执行
  7. 实现脚本包装器生成:

    • 创建generateScriptWrapper方法生成脚本包装器
    • 添加错误处理和日志记录
    • 处理超时和失败行为
    • 返回执行状态
  8. 实现平台特定脚本处理:

    • 创建处理Windows脚本的方法
    • 创建处理Linux脚本的方法
    • 处理平台特定的脚本特性
    • 支持跨平台脚本

单元测试要求

  1. 测试脚本处理:

    • 验证Process方法
    • 测试脚本遍历
    • 测试不同类型脚本处理
    • 测试脚本有效性验证
  2. 测试脚本内容处理:

    • 验证脚本内容处理
    • 测试文件和内联脚本
    • 测试变量替换
    • 测试错误处理和日志记录
  3. 测试脚本解释器处理:

    • 验证解释器处理
    • 测试解释器确定
    • 测试解释器路径和参数
    • 测试自定义解释器
  4. 测试脚本权限处理:

    • 验证权限处理
    • 测试执行权限设置
    • 测试不同平台的权限模型
    • 测试可执行性确保
  5. 测试脚本包装器生成:

    • 验证包装器生成
    • 测试错误处理和日志记录
    • 测试超时和失败行为
    • 测试执行状态返回
  6. 测试平台特定脚本处理:

    • 验证Windows脚本处理
    • 测试Linux脚本处理
    • 测试平台特定特性
    • 测试跨平台脚本

依赖关系

  • 依赖任务01项目初始化
  • 依赖任务02日志系统实现
  • 依赖任务03错误处理框架
  • 依赖任务04资源管理器实现
  • 依赖任务05配置模型定义
  • 依赖任务09平台适配接口定义
  • 依赖任务10Windows平台适配器和任务11Linux平台适配器
  • 被任务12MSI包构建器、任务13DEB包构建器、任务14RPM包构建器和任务15ZIP包构建器依赖

完成标准

  1. ScriptProcessor接口已定义并文档完善
  2. DefaultScriptProcessor实现了所有接口方法
  3. 脚本处理功能正常工作
  4. 脚本内容处理功能正常工作
  5. 脚本解释器处理功能正常工作
  6. 脚本权限处理功能正常工作
  7. 脚本包装器生成功能正常工作
  8. 平台特定脚本处理功能正常工作
  9. 所有单元测试通过
  10. 代码符合项目的Go语言开发规范
  11. 处理器能够处理各种脚本场景
  12. 支持所有需求文档中的脚本处理相关功能