162 lines
5.6 KiB
Markdown
162 lines
5.6 KiB
Markdown
# 任务18:脚本处理器
|
||
|
||
## 任务描述
|
||
实现脚本处理器,用于处理安装前后脚本、卸载前后脚本等。脚本处理器将确保用户定义的脚本能够在安装包的适当阶段被正确执行,并处理脚本的权限、变量替换、错误处理等功能。
|
||
|
||
## 实现步骤
|
||
|
||
1. 定义脚本处理器接口:
|
||
- 在`internal/builder/scripts`包中创建`processor.go`文件
|
||
- 定义ScriptProcessor接口:
|
||
```go
|
||
type ScriptProcessor interface {
|
||
// Process 处理脚本
|
||
Process(config *config.Config, target config.Target, outputDir string) error
|
||
|
||
// GetProcessedScripts 获取处理后的脚本列表
|
||
GetProcessedScripts() []ProcessedScript
|
||
|
||
// GetErrors 获取处理过程中的错误
|
||
GetErrors() []error
|
||
}
|
||
```
|
||
- 定义ProcessedScript结构体:
|
||
```go
|
||
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接口:
|
||
```go
|
||
type DefaultScriptProcessor struct {
|
||
platformAdapter platform.PlatformAdapter
|
||
resourceMgr resource.ResourceManager
|
||
logger log.Logger
|
||
processedScripts []ProcessedScript
|
||
errors []error
|
||
}
|
||
```
|
||
- 实现构造函数:
|
||
```go
|
||
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(平台适配接口定义)
|
||
- 依赖任务10(Windows平台适配器)和任务11(Linux平台适配器)
|
||
- 被任务12(MSI包构建器)、任务13(DEB包构建器)、任务14(RPM包构建器)和任务15(ZIP包构建器)依赖
|
||
|
||
## 完成标准
|
||
|
||
1. ScriptProcessor接口已定义并文档完善
|
||
2. DefaultScriptProcessor实现了所有接口方法
|
||
3. 脚本处理功能正常工作
|
||
4. 脚本内容处理功能正常工作
|
||
5. 脚本解释器处理功能正常工作
|
||
6. 脚本权限处理功能正常工作
|
||
7. 脚本包装器生成功能正常工作
|
||
8. 平台特定脚本处理功能正常工作
|
||
9. 所有单元测试通过
|
||
10. 代码符合项目的Go语言开发规范
|
||
11. 处理器能够处理各种脚本场景
|
||
12. 支持所有需求文档中的脚本处理相关功能 |