Help us shape the future of Go! Take the 2026 Go Developer Survey

v1

package
v0.1.4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 19, 2026 License: MIT Imports: 12 Imported by: 0

Documentation

Overview

Package v1 实现导出文件格式 v1(exportcodec.VersionV1)的 Codec 策略。

v1 的格式约定:

  • script.json = version + script_id + script + container_template_specs
  • container_template_definitions + container_images;
  • workflow.json = version + workflow_id + workflow + scripts + container_template_specs
  • container_template_definitions + container_images; (三个容器资产列表均按主键去重:绑定行通过 spec_id 引用运行配置、通过 image_id 引用镜像, 绑定行主键就是脚本 container_template_id 引用的值)
  • workflow 目录同时把引用的脚本目录快照到 <workflowDir>/script/<scriptID>, 且排除脚本目录自身的 .git(否则会把脚本仓库塞进 workflow 仓库)。

本包同时负责落盘后的 git 提交:WriteXxxFiles 写完文件(以及 workflow 的脚本快照)后 调 utils.CommitDirChanges 把目录改动提交为一个 commit,提交身份由装配时注入。 Codec 自身无状态(只持有无状态的 service 依赖与不变的提交身份),可并发使用。

Index

Constants

View Source
const ScriptSnapshotDirName = "script"

ScriptSnapshotDirName 是 v1 布局下 workflow 目录内快照脚本的子目录名: <workflowDir>/script/<scriptID>。安装侧(InstallWorkflow)从同一位置还原脚本目录, 因此两边必须用本常量而不是各自写字面量。

Variables

This section is empty.

Functions

func ScriptIDFromExportScript

func ScriptIDFromExportScript(item map[string]any) string

ScriptIDFromExportScript 从导出 payload 的脚本条目里取脚本 ID。

v1 落库列是 component_id(types.Script.ScriptID 的 JSON tag), 同时兼容 script_id 是为了让后续格式演进时读侧不必立刻改。

func ScriptSnapshotDir

func ScriptSnapshotDir(workflowDir, scriptID string) string

ScriptSnapshotDir 返回 v1 布局下 workflow 目录内承载某个脚本快照的目录。

Types

type Codec

type Codec struct {
	// contains filtered or unexported fields
}

Codec 是 v1 格式的策略实现。

直接持有 WorkflowService:写侧用它按主键生成导出 payload,安装侧用它 upsert workflow / script 行(读侧的 DecodeXxx 不会用到)。 containerService 只在安装侧使用:按主键 upsert 容器镜像 / 运行配置 / 绑定行。 gitIdentity 是落盘后提交使用的身份,装配时由 config.ResolveGitIdentity 解析后注入。

func NewCodec

func NewCodec(workflowService interfaces.WorkflowService, containerService interfaces.ContainerService, gitIdentity utils.GitIdentity) *Codec

NewCodec 构造 v1 Codec。gitIdentity 用于 WriteXxxFiles 落盘后的 git 提交; containerService 用于 InstallXxx 落库容器资产(不需要时可为 nil)。

func (*Codec) DecodeScript

func (c *Codec) DecodeScript(raw []byte) (*types.ScriptJSONExportResponse, error)

DecodeScript 解析 v1 格式的 script.json。

func (*Codec) DecodeWorkflow

func (c *Codec) DecodeWorkflow(raw []byte) (*types.WorkflowJSONExportResponse, error)

DecodeWorkflow 解析 v1 格式的 workflow.json。

v1 在此把 workflow.dag_definition 从对象规整成字符串:导出侧会把它展开成对象, 而落库列是字符串,直接反序列化到 types.Workflow 会失败。

func (*Codec) InstallScript

InstallScript 解析 req.Raw(内部调用 DecodeScript)并把导出内容持久化到数据库。

迁移自 handler.InstallScript 的落库部分,职责边界与 DecodeScript 一致: DecodeScript 只解析,本方法负责安装特有的校验(script_id 非空)与 upsert。 返回的 payload 只用于取字段,不再回传给调用方做二次解析。

func (*Codec) InstallWorkflow

InstallWorkflow 解析 req.Raw(内部调用 DecodeWorkflow)并把导出内容持久化到数据库与文件系统。

迁移自 handler.InstallWorkflow 的落库与脚本还原部分:

  1. 先按主键 upsert 容器资产(镜像 → 运行配置 → 绑定行,见 installContainerAssets);
  2. upsert workflow 行;
  3. 逐条 upsert workflow.json 里的 script 行;
  4. 把 workflow 目录内的脚本快照还原到本地脚本目录。

workflow_id 缺失(导出文件损坏)返回 ErrWorkflowIDRequired,由调用方转 400。

func (*Codec) ScriptIDFromExportScript

func (c *Codec) ScriptIDFromExportScript(item map[string]any) string

ScriptIDFromExportScript 让 v1 的脚本条目字段含义可以通过 Codec 接口访问。

func (*Codec) ScriptSnapshotDir

func (c *Codec) ScriptSnapshotDir(workflowDir, scriptID string) string

ScriptSnapshotDir 让 v1 的目录布局可以通过 Codec 接口访问 (安装侧从 Registry 取到 Codec 后据此还原脚本目录)。

func (*Codec) Version

func (c *Codec) Version() string

Version 返回 v1 的格式版本号。

func (*Codec) WriteScriptFiles

WriteScriptFiles 生成 v1 格式的 script.json 落盘到 req.ScriptDir,并把目录改动提交为一个 commit。

func (*Codec) WriteWorkflowFiles

WriteWorkflowFiles 生成 v1 格式的 workflow.json 落盘到 req.WorkflowDir, 把 workflow 引用的脚本目录快照到 <workflowDir>/script/<scriptID>(排除脚本自身的 .git), 最后把目录改动提交为一个 commit。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL