feat: extract build/, release/, sdk/ from go-devops
Build system (8 builders, signing, archiving), release pipeline
(7 publishers, versioning, changelog), and SDK generation
(OpenAPI diff, code gen). 18K LOC, all tests pass except Go
builder workspace isolation (pre-existing).
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-09 12:37:36 +00:00
|
|
|
package ci
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"context"
|
|
|
|
|
|
2026-03-26 17:41:53 +00:00
|
|
|
"dappco.re/go/core"
|
|
|
|
|
"dappco.re/go/core/build/internal/ax"
|
2026-03-22 01:53:16 +00:00
|
|
|
"dappco.re/go/core/build/pkg/release"
|
|
|
|
|
"dappco.re/go/core/i18n"
|
|
|
|
|
coreerr "dappco.re/go/core/log"
|
feat: extract build/, release/, sdk/ from go-devops
Build system (8 builders, signing, archiving), release pipeline
(7 publishers, versioning, changelog), and SDK generation
(OpenAPI diff, code gen). 18K LOC, all tests pass except Go
builder workspace isolation (pre-existing).
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-09 12:37:36 +00:00
|
|
|
"forge.lthn.ai/core/cli/pkg/cli"
|
|
|
|
|
)
|
|
|
|
|
|
2026-03-31 18:37:59 +00:00
|
|
|
// Style aliases used by CI command output.
|
feat: extract build/, release/, sdk/ from go-devops
Build system (8 builders, signing, archiving), release pipeline
(7 publishers, versioning, changelog), and SDK generation
(OpenAPI diff, code gen). 18K LOC, all tests pass except Go
builder workspace isolation (pre-existing).
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-09 12:37:36 +00:00
|
|
|
var (
|
|
|
|
|
headerStyle = cli.RepoStyle
|
|
|
|
|
successStyle = cli.SuccessStyle
|
|
|
|
|
errorStyle = cli.ErrorStyle
|
|
|
|
|
dimStyle = cli.DimStyle
|
|
|
|
|
valueStyle = cli.ValueStyle
|
|
|
|
|
)
|
|
|
|
|
|
2026-03-31 18:37:59 +00:00
|
|
|
// Flag variables for ci command.
|
feat: extract build/, release/, sdk/ from go-devops
Build system (8 builders, signing, archiving), release pipeline
(7 publishers, versioning, changelog), and SDK generation
(OpenAPI diff, code gen). 18K LOC, all tests pass except Go
builder workspace isolation (pre-existing).
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-09 12:37:36 +00:00
|
|
|
var (
|
2026-03-31 18:37:59 +00:00
|
|
|
ciLaunchMode bool
|
|
|
|
|
ciVersion string
|
|
|
|
|
ciDraft bool
|
|
|
|
|
ciPrerelease bool
|
feat: extract build/, release/, sdk/ from go-devops
Build system (8 builders, signing, archiving), release pipeline
(7 publishers, versioning, changelog), and SDK generation
(OpenAPI diff, code gen). 18K LOC, all tests pass except Go
builder workspace isolation (pre-existing).
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-09 12:37:36 +00:00
|
|
|
)
|
|
|
|
|
|
2026-03-31 18:37:59 +00:00
|
|
|
// Flag variables for changelog subcommand.
|
feat: extract build/, release/, sdk/ from go-devops
Build system (8 builders, signing, archiving), release pipeline
(7 publishers, versioning, changelog), and SDK generation
(OpenAPI diff, code gen). 18K LOC, all tests pass except Go
builder workspace isolation (pre-existing).
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-09 12:37:36 +00:00
|
|
|
var (
|
|
|
|
|
changelogFromRef string
|
|
|
|
|
changelogToRef string
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
var ciCmd = &cli.Command{
|
2026-03-17 02:31:47 +00:00
|
|
|
Use: "ci",
|
feat: extract build/, release/, sdk/ from go-devops
Build system (8 builders, signing, archiving), release pipeline
(7 publishers, versioning, changelog), and SDK generation
(OpenAPI diff, code gen). 18K LOC, all tests pass except Go
builder workspace isolation (pre-existing).
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-09 12:37:36 +00:00
|
|
|
RunE: func(cmd *cli.Command, args []string) error {
|
2026-03-31 18:37:59 +00:00
|
|
|
dryRun := !ciLaunchMode
|
2026-03-30 05:46:27 +00:00
|
|
|
return runCIPublish(cmd.Context(), dryRun, ciVersion, ciDraft, ciPrerelease)
|
feat: extract build/, release/, sdk/ from go-devops
Build system (8 builders, signing, archiving), release pipeline
(7 publishers, versioning, changelog), and SDK generation
(OpenAPI diff, code gen). 18K LOC, all tests pass except Go
builder workspace isolation (pre-existing).
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-09 12:37:36 +00:00
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var ciInitCmd = &cli.Command{
|
2026-03-17 02:31:47 +00:00
|
|
|
Use: "init",
|
feat: extract build/, release/, sdk/ from go-devops
Build system (8 builders, signing, archiving), release pipeline
(7 publishers, versioning, changelog), and SDK generation
(OpenAPI diff, code gen). 18K LOC, all tests pass except Go
builder workspace isolation (pre-existing).
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-09 12:37:36 +00:00
|
|
|
RunE: func(cmd *cli.Command, args []string) error {
|
|
|
|
|
return runCIReleaseInit()
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var ciChangelogCmd = &cli.Command{
|
2026-03-17 02:31:47 +00:00
|
|
|
Use: "changelog",
|
feat: extract build/, release/, sdk/ from go-devops
Build system (8 builders, signing, archiving), release pipeline
(7 publishers, versioning, changelog), and SDK generation
(OpenAPI diff, code gen). 18K LOC, all tests pass except Go
builder workspace isolation (pre-existing).
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-09 12:37:36 +00:00
|
|
|
RunE: func(cmd *cli.Command, args []string) error {
|
2026-03-30 05:46:27 +00:00
|
|
|
return runChangelog(cmd.Context(), changelogFromRef, changelogToRef)
|
feat: extract build/, release/, sdk/ from go-devops
Build system (8 builders, signing, archiving), release pipeline
(7 publishers, versioning, changelog), and SDK generation
(OpenAPI diff, code gen). 18K LOC, all tests pass except Go
builder workspace isolation (pre-existing).
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-09 12:37:36 +00:00
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var ciVersionCmd = &cli.Command{
|
2026-03-17 02:31:47 +00:00
|
|
|
Use: "version",
|
feat: extract build/, release/, sdk/ from go-devops
Build system (8 builders, signing, archiving), release pipeline
(7 publishers, versioning, changelog), and SDK generation
(OpenAPI diff, code gen). 18K LOC, all tests pass except Go
builder workspace isolation (pre-existing).
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-09 12:37:36 +00:00
|
|
|
RunE: func(cmd *cli.Command, args []string) error {
|
2026-03-30 05:46:27 +00:00
|
|
|
return runCIReleaseVersion(cmd.Context())
|
feat: extract build/, release/, sdk/ from go-devops
Build system (8 builders, signing, archiving), release pipeline
(7 publishers, versioning, changelog), and SDK generation
(OpenAPI diff, code gen). 18K LOC, all tests pass except Go
builder workspace isolation (pre-existing).
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-09 12:37:36 +00:00
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
|
2026-03-17 02:31:47 +00:00
|
|
|
func setCII18n() {
|
|
|
|
|
ciCmd.Short = i18n.T("cmd.ci.short")
|
|
|
|
|
ciCmd.Long = i18n.T("cmd.ci.long")
|
|
|
|
|
ciInitCmd.Short = i18n.T("cmd.ci.init.short")
|
|
|
|
|
ciInitCmd.Long = i18n.T("cmd.ci.init.long")
|
|
|
|
|
ciChangelogCmd.Short = i18n.T("cmd.ci.changelog.short")
|
|
|
|
|
ciChangelogCmd.Long = i18n.T("cmd.ci.changelog.long")
|
|
|
|
|
ciVersionCmd.Short = i18n.T("cmd.ci.version.short")
|
|
|
|
|
ciVersionCmd.Long = i18n.T("cmd.ci.version.long")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func initCIFlags() {
|
feat: extract build/, release/, sdk/ from go-devops
Build system (8 builders, signing, archiving), release pipeline
(7 publishers, versioning, changelog), and SDK generation
(OpenAPI diff, code gen). 18K LOC, all tests pass except Go
builder workspace isolation (pre-existing).
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-09 12:37:36 +00:00
|
|
|
// Main ci command flags
|
2026-03-31 18:37:59 +00:00
|
|
|
ciCmd.Flags().BoolVar(&ciLaunchMode, "we-are-go-for-launch", false, i18n.T("cmd.ci.flag.go_for_launch"))
|
feat: extract build/, release/, sdk/ from go-devops
Build system (8 builders, signing, archiving), release pipeline
(7 publishers, versioning, changelog), and SDK generation
(OpenAPI diff, code gen). 18K LOC, all tests pass except Go
builder workspace isolation (pre-existing).
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-09 12:37:36 +00:00
|
|
|
ciCmd.Flags().StringVar(&ciVersion, "version", "", i18n.T("cmd.ci.flag.version"))
|
|
|
|
|
ciCmd.Flags().BoolVar(&ciDraft, "draft", false, i18n.T("cmd.ci.flag.draft"))
|
|
|
|
|
ciCmd.Flags().BoolVar(&ciPrerelease, "prerelease", false, i18n.T("cmd.ci.flag.prerelease"))
|
|
|
|
|
|
|
|
|
|
// Changelog subcommand flags
|
|
|
|
|
ciChangelogCmd.Flags().StringVar(&changelogFromRef, "from", "", i18n.T("cmd.ci.changelog.flag.from"))
|
|
|
|
|
ciChangelogCmd.Flags().StringVar(&changelogToRef, "to", "", i18n.T("cmd.ci.changelog.flag.to"))
|
|
|
|
|
|
|
|
|
|
// Add subcommands
|
|
|
|
|
ciCmd.AddCommand(ciInitCmd)
|
|
|
|
|
ciCmd.AddCommand(ciChangelogCmd)
|
|
|
|
|
ciCmd.AddCommand(ciVersionCmd)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// runCIPublish publishes pre-built artifacts from dist/.
|
2026-03-30 05:46:27 +00:00
|
|
|
func runCIPublish(ctx context.Context, dryRun bool, version string, draft, prerelease bool) error {
|
2026-03-26 17:41:53 +00:00
|
|
|
projectDir, err := ax.Getwd()
|
feat: extract build/, release/, sdk/ from go-devops
Build system (8 builders, signing, archiving), release pipeline
(7 publishers, versioning, changelog), and SDK generation
(OpenAPI diff, code gen). 18K LOC, all tests pass except Go
builder workspace isolation (pre-existing).
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-09 12:37:36 +00:00
|
|
|
if err != nil {
|
|
|
|
|
return cli.WrapVerb(err, "get", "working directory")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
cfg, err := release.LoadConfig(projectDir)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return cli.WrapVerb(err, "load", "config")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if version != "" {
|
|
|
|
|
cfg.SetVersion(version)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if draft || prerelease {
|
|
|
|
|
for i := range cfg.Publishers {
|
|
|
|
|
if draft {
|
|
|
|
|
cfg.Publishers[i].Draft = true
|
|
|
|
|
}
|
|
|
|
|
if prerelease {
|
|
|
|
|
cfg.Publishers[i].Prerelease = true
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
cli.Print("%s %s\n", headerStyle.Render(i18n.T("cmd.ci.label.ci")), i18n.T("cmd.ci.publishing"))
|
|
|
|
|
if dryRun {
|
|
|
|
|
cli.Print(" %s\n", dimStyle.Render(i18n.T("cmd.ci.dry_run_hint")))
|
|
|
|
|
} else {
|
|
|
|
|
cli.Print(" %s\n", successStyle.Render(i18n.T("cmd.ci.go_for_launch")))
|
|
|
|
|
}
|
|
|
|
|
cli.Blank()
|
|
|
|
|
|
|
|
|
|
if len(cfg.Publishers) == 0 {
|
2026-03-16 21:03:21 +00:00
|
|
|
return coreerr.E("ci.Publish", i18n.T("cmd.ci.error.no_publishers"), nil)
|
feat: extract build/, release/, sdk/ from go-devops
Build system (8 builders, signing, archiving), release pipeline
(7 publishers, versioning, changelog), and SDK generation
(OpenAPI diff, code gen). 18K LOC, all tests pass except Go
builder workspace isolation (pre-existing).
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-09 12:37:36 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
rel, err := release.Publish(ctx, cfg, dryRun)
|
|
|
|
|
if err != nil {
|
|
|
|
|
cli.Print("%s %v\n", errorStyle.Render(i18n.Label("error")), err)
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
cli.Blank()
|
|
|
|
|
cli.Print("%s %s\n", successStyle.Render(i18n.T("i18n.done.pass")), i18n.T("cmd.ci.publish_completed"))
|
|
|
|
|
cli.Print(" %s %s\n", i18n.Label("version"), valueStyle.Render(rel.Version))
|
|
|
|
|
cli.Print(" %s %d\n", i18n.T("cmd.ci.label.artifacts"), len(rel.Artifacts))
|
|
|
|
|
|
|
|
|
|
if !dryRun {
|
|
|
|
|
for _, pub := range cfg.Publishers {
|
|
|
|
|
cli.Print(" %s %s\n", i18n.T("cmd.ci.label.published"), valueStyle.Render(pub.Type))
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// runCIReleaseInit scaffolds a release config.
|
|
|
|
|
func runCIReleaseInit() error {
|
2026-03-26 17:41:53 +00:00
|
|
|
cwd, err := ax.Getwd()
|
feat: extract build/, release/, sdk/ from go-devops
Build system (8 builders, signing, archiving), release pipeline
(7 publishers, versioning, changelog), and SDK generation
(OpenAPI diff, code gen). 18K LOC, all tests pass except Go
builder workspace isolation (pre-existing).
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-09 12:37:36 +00:00
|
|
|
if err != nil {
|
|
|
|
|
return cli.Err("%s: %w", i18n.T("i18n.fail.get", "working directory"), err)
|
|
|
|
|
}
|
|
|
|
|
|
2026-04-01 19:49:09 +00:00
|
|
|
return runCIReleaseInitInDir(cwd)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func runCIReleaseInitInDir(cwd string) error {
|
feat: extract build/, release/, sdk/ from go-devops
Build system (8 builders, signing, archiving), release pipeline
(7 publishers, versioning, changelog), and SDK generation
(OpenAPI diff, code gen). 18K LOC, all tests pass except Go
builder workspace isolation (pre-existing).
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-09 12:37:36 +00:00
|
|
|
cli.Print("%s %s\n\n", dimStyle.Render(i18n.Label("init")), i18n.T("cmd.ci.init.initializing"))
|
|
|
|
|
|
|
|
|
|
if release.ConfigExists(cwd) {
|
2026-03-15 17:38:31 +00:00
|
|
|
cli.Text(i18n.T("cmd.ci.init.already_initialised"))
|
feat: extract build/, release/, sdk/ from go-devops
Build system (8 builders, signing, archiving), release pipeline
(7 publishers, versioning, changelog), and SDK generation
(OpenAPI diff, code gen). 18K LOC, all tests pass except Go
builder workspace isolation (pre-existing).
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-09 12:37:36 +00:00
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
2026-04-01 19:49:09 +00:00
|
|
|
cfg := release.ScaffoldConfig()
|
feat: extract build/, release/, sdk/ from go-devops
Build system (8 builders, signing, archiving), release pipeline
(7 publishers, versioning, changelog), and SDK generation
(OpenAPI diff, code gen). 18K LOC, all tests pass except Go
builder workspace isolation (pre-existing).
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-09 12:37:36 +00:00
|
|
|
if err := release.WriteConfig(cfg, cwd); err != nil {
|
|
|
|
|
return cli.Err("%s: %w", i18n.T("i18n.fail.create", "config"), err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
cli.Blank()
|
|
|
|
|
cli.Print("%s %s\n", successStyle.Render("v"), i18n.T("cmd.ci.init.created_config"))
|
|
|
|
|
cli.Blank()
|
|
|
|
|
cli.Text(i18n.T("cmd.ci.init.next_steps"))
|
|
|
|
|
cli.Print(" %s\n", i18n.T("cmd.ci.init.edit_config"))
|
|
|
|
|
cli.Print(" %s\n", i18n.T("cmd.ci.init.run_ci"))
|
|
|
|
|
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// runChangelog generates a changelog between two git refs.
|
2026-03-30 05:46:27 +00:00
|
|
|
func runChangelog(ctx context.Context, fromRef, toRef string) error {
|
2026-03-26 17:41:53 +00:00
|
|
|
cwd, err := ax.Getwd()
|
feat: extract build/, release/, sdk/ from go-devops
Build system (8 builders, signing, archiving), release pipeline
(7 publishers, versioning, changelog), and SDK generation
(OpenAPI diff, code gen). 18K LOC, all tests pass except Go
builder workspace isolation (pre-existing).
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-09 12:37:36 +00:00
|
|
|
if err != nil {
|
|
|
|
|
return cli.Err("%s: %w", i18n.T("i18n.fail.get", "working directory"), err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if fromRef == "" || toRef == "" {
|
2026-03-30 05:46:27 +00:00
|
|
|
tag, err := latestTagWithContext(ctx, cwd)
|
feat: extract build/, release/, sdk/ from go-devops
Build system (8 builders, signing, archiving), release pipeline
(7 publishers, versioning, changelog), and SDK generation
(OpenAPI diff, code gen). 18K LOC, all tests pass except Go
builder workspace isolation (pre-existing).
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-09 12:37:36 +00:00
|
|
|
if err == nil {
|
|
|
|
|
if fromRef == "" {
|
|
|
|
|
fromRef = tag
|
|
|
|
|
}
|
|
|
|
|
if toRef == "" {
|
|
|
|
|
toRef = "HEAD"
|
|
|
|
|
}
|
|
|
|
|
} else {
|
2026-03-30 05:46:27 +00:00
|
|
|
if ctx.Err() != nil {
|
|
|
|
|
return ctx.Err()
|
|
|
|
|
}
|
feat: extract build/, release/, sdk/ from go-devops
Build system (8 builders, signing, archiving), release pipeline
(7 publishers, versioning, changelog), and SDK generation
(OpenAPI diff, code gen). 18K LOC, all tests pass except Go
builder workspace isolation (pre-existing).
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-09 12:37:36 +00:00
|
|
|
cli.Text(i18n.T("cmd.ci.changelog.no_tags"))
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
cli.Print("%s %s..%s\n\n", dimStyle.Render(i18n.T("cmd.ci.changelog.generating")), fromRef, toRef)
|
|
|
|
|
|
2026-03-30 05:46:27 +00:00
|
|
|
changelog, err := release.GenerateWithContext(ctx, cwd, fromRef, toRef)
|
feat: extract build/, release/, sdk/ from go-devops
Build system (8 builders, signing, archiving), release pipeline
(7 publishers, versioning, changelog), and SDK generation
(OpenAPI diff, code gen). 18K LOC, all tests pass except Go
builder workspace isolation (pre-existing).
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-09 12:37:36 +00:00
|
|
|
if err != nil {
|
|
|
|
|
return cli.Err("%s: %w", i18n.T("i18n.fail.generate", "changelog"), err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
cli.Text(changelog)
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// runCIReleaseVersion shows the determined version.
|
2026-03-30 05:46:27 +00:00
|
|
|
func runCIReleaseVersion(ctx context.Context) error {
|
2026-03-26 17:41:53 +00:00
|
|
|
projectDir, err := ax.Getwd()
|
feat: extract build/, release/, sdk/ from go-devops
Build system (8 builders, signing, archiving), release pipeline
(7 publishers, versioning, changelog), and SDK generation
(OpenAPI diff, code gen). 18K LOC, all tests pass except Go
builder workspace isolation (pre-existing).
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-09 12:37:36 +00:00
|
|
|
if err != nil {
|
|
|
|
|
return cli.WrapVerb(err, "get", "working directory")
|
|
|
|
|
}
|
|
|
|
|
|
2026-03-30 05:46:27 +00:00
|
|
|
version, err := release.DetermineVersionWithContext(ctx, projectDir)
|
feat: extract build/, release/, sdk/ from go-devops
Build system (8 builders, signing, archiving), release pipeline
(7 publishers, versioning, changelog), and SDK generation
(OpenAPI diff, code gen). 18K LOC, all tests pass except Go
builder workspace isolation (pre-existing).
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-09 12:37:36 +00:00
|
|
|
if err != nil {
|
|
|
|
|
return cli.WrapVerb(err, "determine", "version")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
cli.Print("%s %s\n", i18n.Label("version"), valueStyle.Render(version))
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
2026-03-30 05:46:27 +00:00
|
|
|
func latestTagWithContext(ctx context.Context, dir string) (string, error) {
|
|
|
|
|
out, err := ax.RunDir(ctx, dir, "git", "describe", "--tags", "--abbrev=0")
|
feat: extract build/, release/, sdk/ from go-devops
Build system (8 builders, signing, archiving), release pipeline
(7 publishers, versioning, changelog), and SDK generation
(OpenAPI diff, code gen). 18K LOC, all tests pass except Go
builder workspace isolation (pre-existing).
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-09 12:37:36 +00:00
|
|
|
if err != nil {
|
|
|
|
|
return "", err
|
|
|
|
|
}
|
2026-03-26 17:41:53 +00:00
|
|
|
return core.Trim(out), nil
|
feat: extract build/, release/, sdk/ from go-devops
Build system (8 builders, signing, archiving), release pipeline
(7 publishers, versioning, changelog), and SDK generation
(OpenAPI diff, code gen). 18K LOC, all tests pass except Go
builder workspace isolation (pre-existing).
Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-09 12:37:36 +00:00
|
|
|
}
|