Files
LocalAI/pkg/addons/packaging/run.go
T
Ettore Di Giacinto d537695895 feat(addons): write one add-on package as a zip
Add the zip format of a package (a digest manifest plus the files of the
OCI package for one platform) and an addonpkg zip subcommand that writes
it from a verified layout, with a sha256 file. The zip comes from the
same layout the registry package comes from, so there is one build path.

Version comparison moves to contract.CompareVersions so the installer
can use it for upgrades and downgrades.

Assisted-by: Claude:claude-sonnet-5-5 go gofmt
2026-11-03 22:52:50 +00:00

51 lines
1.4 KiB
Go

// SPDX-License-Identifier: MIT
// Package packaging builds, checks, merges and publishes first-party add-on
// OCI packages. It is the code behind scripts/addons/package.sh,
// scripts/addons/channel.sh and the add-on package workflow, so the rules
// that workflow relies on are code that a test can run.
//
// Every operation fails closed: a missing input is an error, never a default.
package packaging
import (
"fmt"
"io"
"os"
)
// stdout receives the key=value result lines of the subcommands.
var stdout io.Writer = os.Stdout
var commands = map[string]func(args []string) error{
"matrix": cmdMatrix,
"channel": cmdChannel,
"build": cmdBuild,
"verify": cmdVerify,
"extract": cmdExtract,
"zip": cmdZip,
"native-check": cmdNativeCheck,
"merge": cmdMerge,
"publish": cmdPublish,
"promote": cmdPromote,
"target": cmdTarget,
"catalog": cmdCatalog,
"catalog-tools": cmdCatalogTools,
"policy": cmdPolicy,
}
// Run executes one subcommand of the addonpkg command line.
func Run(args []string, out io.Writer) error {
if len(args) == 0 {
return fmt.Errorf("usage: addonpkg <subcommand> [flags]")
}
cmd, ok := commands[args[0]]
if !ok {
return fmt.Errorf("unknown subcommand %q", args[0])
}
previous := stdout
stdout = out
defer func() { stdout = previous }()
return cmd(args[1:])
}