feat: generate schema

This commit is contained in:
Kevin Franklin Kim 2025-09-19 16:29:28 +02:00
parent f515240819
commit 06d0caa03a
No known key found for this signature in database
119 changed files with 1359 additions and 563 deletions

3
.gitignore vendored
View File

@ -29,3 +29,6 @@ go.work.sum
## Posh
!.posh/
!.posh.yml
## Mise
!.mise.toml

View File

@ -1,10 +1,11 @@
# https://golangci-lint.run/usage/configuration/
# yaml-language-server: $schema=https://golangci-lint.run/jsonschema/golangci.jsonschema.json
version: "2"
run:
go: 1.24.1
build-tags: [safe]
modules-download-mode: readonly
linters:
default: none
enable:

View File

@ -1,5 +1,7 @@
version: 2
project_name: posh-providers
builds:
- skip: true

8
.mise.toml Normal file
View File

@ -0,0 +1,8 @@
[tools]
# https://github.com/sourcemeta/jsonschema/releases
jsonschema = "11.8.1"
# https://github.com/golangci/golangci-lint/releases
golangci-lint = "2.4.0"
# https://github.com/go-courier/husky/releases
"github:go-courier/husky" = "1.8.1"
yq = "4.47.2"

154
Makefile
View File

@ -1,22 +1,39 @@
.DEFAULT_GOAL:=help
-include .makerc
# --- Config -----------------------------------------------------------------
# Newline hack for error output
define br
endef
# --- Targets -----------------------------------------------------------------
# This allows us to accept extra arguments
%: .husky
%: .mise .husky
@:
.PHONY: .mise
# Install dependencies
.mise: msg := $(br)$(br)Please ensure you have 'mise' installed and activated!$(br)$(br)$$ brew update$(br)$$ brew install mise$(br)$(br)See the documentation: https://mise.jdx.dev/getting-started.html$(br)$(br)
.mise:
ifeq (, $(shell command -v mise))
$(error ${msg})
endif
@mise install
.PHONY: .husky
# Configure git hooks for husky
.husky:
@if ! command -v husky &> /dev/null; then \
echo "ERROR: missing executeable 'husky', please run:"; \
echo "\n$ go install github.com/go-courier/husky/cmd/husky@latest\n"; \
fi
@git config core.hooksPath .husky
## === Tasks ===
### Tasks
.PHONY: check
## Run tests and linters
check: tidy schema lint test
.PHONY: tidy
## Run go mod tidy
@ -28,94 +45,55 @@ tidy:
lint:
@golangci-lint run
.PHONY: schema
## Run linter
schema:
@jsonschema bundle config.schema.base.json \
--resolve ./arbitrary/open/config.schema.json \
--resolve ./arbitrary/task/config.schema.json \
--resolve ./arbitrary/zip/config.schema.json \
--resolve ./azure/az/config.schema.json \
--resolve ./cloudflare/cloudflared/config.schema.json \
--resolve ./digitalocean/doctl/config.schema.json \
--resolve ./etcd-io/etcd/config.schema.json \
--resolve ./facebook/docusaurus/config.schema.json \
--resolve ./filosottile/mkcert/config.schema.json \
--resolve ./foomo/beam/config.schema.json \
--resolve ./foomo/gocontentful/config.schema.json \
--resolve ./foomo/sesamy/config.schema.json \
--resolve ./foomo/squadron/config.schema.json \
--resolve ./goharbor/harbor/config.schema.json \
--resolve ./golang-migrate/migrate/config.schema.json \
--resolve ./google/gcloud/config.schema.json \
--resolve ./grafana/k6/config.schema.json \
--resolve ./gravitational/teleport/config.schema.json \
--resolve ./gruntwork-io/terragrunt/config.schema.json \
--resolve ./hashicorp/cdktf/config.schema.json \
--resolve ./jondot/hygen/config.schema.json \
--resolve ./k3d-io/k3d/config.schema.json \
--resolve ./kubernets/kubectl/config.schema.json \
--resolve ./kubernets/kubeforward/config.schema.json \
--resolve ./onepassword/config.schema.json \
--resolve ./pivotal/licensefinder/config.schema.json \
--resolve ./pulumi/pulumi/azure/config.schema.json \
--resolve ./pulumi/pulumi/gcloud/config.schema.json \
--resolve ./rclone/rclone/config.schema.json \
--resolve ./slack-go/slack/config.schema.json \
--resolve ./sqlc-dev/sqlc/config.schema.json \
--resolve ./stackitcloud/stackit/config.schema.json \
--resolve ./stern/stern/config.schema.json \
--resolve ./usebruno/bruno/config.schema.json \
--resolve ./webdriverio/webdriverio/config.schema.json \
--without-id \
> config.schema.json
.PHONY: outdated
## Show outdated direct dependencies
outdated:
@go list -u -m -json all | go-mod-outdated -update -direct
.PHONY: test
## Run tests
test:
@GO_TEST_TAGS=-skip go test -coverprofile=coverage.out --tags=safe -race ./...
#@GO_TEST_TAGS=-skip go test -coverprofile=coverage.out --tags=safe -race -json ./... 2>&1 | tee /tmp/gotest.log | gotestfmt
.PHONY: lint.fix
## Fix lint violations
lint.fix:
@golangci-lint run --fix
## === Utils ===
.PHONY: test
## Run tests
test:
@GO_TEST_TAGS=-skip go test -coverprofile=coverage.out --tags=safe -race ./...
.PHONY: schema
## Run linter
schema:
@jsonschema bundle config.schema.base.json \
$(shell find . -name config.schema.json -printf '--resolve %p ') \
--without-id \
> posh.schema.json
.PHONY: foo
## Run linter
foo:
@yq eval-all '. as $$item ireduce ({}; . *+ $$item)' base.schema.json \
$(shell find . -name config.base.json -print | tr '\n' ' ') \
> merged.schema.json
@jsonschema bundle merged.schema.json \
$(shell find . -name config.schema.json -print | sed 's/^/--resolve /' | tr '\n' ' ') \
--without-id \
--http \
> posh.schema.json
@rm merged.schema.json
### Utils
.PHONY: help
## Show help text
help:
@echo "Project Oriented SHELL (posh)\n"
@echo "Usage:\n make [task]"
@awk '{ \
if ($$0 ~ /^.PHONY: [a-zA-Z\-\_0-9]+$$/) { \
helpCommand = substr($$0, index($$0, ":") + 2); \
if (helpMessage) { \
printf "\033[36m%-23s\033[0m %s\n", \
helpCommand, helpMessage; \
helpMessage = ""; \
} \
} else if ($$0 ~ /^[a-zA-Z\-\_0-9.]+:/) { \
helpCommand = substr($$0, 0, index($$0, ":")); \
if (helpMessage) { \
printf "\033[36m%-23s\033[0m %s\n", \
helpCommand, helpMessage"\n"; \
helpMessage = ""; \
} \
} else if ($$0 ~ /^##/) { \
if (helpMessage) { \
helpMessage = helpMessage"\n "substr($$0, 3); \
} else { \
helpMessage = substr($$0, 3); \
} \
} else { \
if (helpMessage) { \
print "\n "helpMessage"\n" \
} \
helpMessage = ""; \
} \
}' \
$(MAKEFILE_LIST)
if($$0 ~ /^### /){ \
if(help) printf "%-23s %s\n\n", cmd, help; help=""; \
printf "\n%s:\n", substr($$0,5); \
} else if($$0 ~ /^[a-zA-Z0-9._-]+:/){ \
cmd = substr($$0, 1, index($$0, ":")-1); \
if(help) printf " %-23s %s\n", cmd, help; help=""; \
} else if($$0 ~ /^##/){ \
help = help ? help "\n " substr($$0,3) : substr($$0,3); \
} else if(help){ \
print "\n " help "\n"; help=""; \
} \
}' $(MAKEFILE_LIST)

View File

@ -0,0 +1,12 @@
{
"allOf": [
{
"type": "object",
"properties": {
"open": {
"$ref": "https://github.com/foomo/posh-providers/arbitrary/open"
}
}
}
]
}

View File

@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://github.com/foomo/posh-providers/arbitrary/open/config",
"$id": "https://github.com/foomo/posh-providers/arbitrary/open",
"$ref": "#/$defs/Config",
"$defs": {
"Config": {

View File

@ -25,6 +25,7 @@ func TestConfig(t *testing.T) {
reflector := new(jsonschema.Reflector)
require.NoError(t, reflector.AddGoComments("github.com/foomo/posh-providers/arbitrary/open", "./"))
schema := reflector.Reflect(&open.Config{})
schema.ID = "https://github.com/foomo/posh-providers/arbitrary/open"
actual, err := json.MarshalIndent(schema, "", " ")
require.NoError(t, err)

View File

@ -10,7 +10,6 @@ import (
"github.com/foomo/posh/pkg/log"
"github.com/foomo/posh/pkg/prompt/goprompt"
"github.com/foomo/posh/pkg/readline"
"github.com/foomo/posh/pkg/util/suggests"
"github.com/pkg/errors"
"github.com/pterm/pterm"
"github.com/spf13/viper"
@ -69,7 +68,12 @@ func NewCommand(l log.Logger, opts ...CommandOption) (*Command, error) {
{
Name: "task",
Suggest: func(ctx context.Context, t tree.Root, r *readline.Readline) []goprompt.Suggest {
return suggests.List(inst.cfg.Names())
var ret []goprompt.Suggest
for _, name := range inst.cfg.Names() {
task := inst.cfg[name]
ret = append(ret, goprompt.Suggest{Text: name, Description: task.Description})
}
return ret
},
},
},
@ -124,6 +128,24 @@ func (c *Command) executeTask(ctx context.Context, taskID string) error {
return errors.Errorf("task not found: %s", taskID)
}
for i, cmd := range task.Precondition {
if ctx.Err() != nil {
return ctx.Err()
}
cmd = os.ExpandEnv(cmd)
var sh *exec.Cmd
if strings.HasPrefix(cmd, "sudo ") {
sh = exec.CommandContext(ctx, "sudo", "sh", "-c", strings.TrimPrefix(cmd, "sudo "))
} else {
sh = exec.CommandContext(ctx, "sh", "-c", cmd)
}
sh.Env = append(os.Environ(), task.Env...)
c.l.Infof("☑︎ | [%d|%d] %s: %s", i+1, len(task.Cmds), taskID, cmd)
if err := sh.Run(); err != nil {
return err
}
}
if task.Prompt != "" {
if result, err := pterm.DefaultInteractiveConfirm.WithOnInterruptFunc(func() {
cancel()
@ -149,6 +171,7 @@ func (c *Command) executeTask(ctx context.Context, taskID string) error {
if ctx.Err() != nil {
return ctx.Err()
}
cmd = os.ExpandEnv(cmd)
var sh *exec.Cmd
if strings.HasPrefix(cmd, "sudo ") {
sh = exec.CommandContext(ctx, "sudo", "sh", "-c", strings.TrimPrefix(cmd, "sudo "))
@ -158,7 +181,7 @@ func (c *Command) executeTask(ctx context.Context, taskID string) error {
sh.Stdin = os.Stdin
sh.Stdout = os.Stdout
sh.Stderr = os.Stderr
sh.Env = os.Environ()
sh.Env = append(os.Environ(), task.Env...)
c.l.Infof("🔧 | [%d|%d] %s: %s", i+1, len(task.Cmds), taskID, cmd)
if err := sh.Run(); err != nil {
return err

View File

@ -0,0 +1,12 @@
{
"allOf": [
{
"type": "object",
"properties": {
"task": {
"$ref": "https://github.com/foomo/posh-providers/arbitrary/task"
}
}
}
]
}

View File

@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://github.com/foomo/posh-providers/arbitrary/task/config",
"$id": "https://github.com/foomo/posh-providers/arbitrary/task",
"$ref": "#/$defs/Config",
"$defs": {
"Config": {
@ -15,6 +15,24 @@
"type": "string",
"description": "Prompt string to confirm execution"
},
"env": {
"items": {
"type": "string"
},
"type": "array",
"description": "Task environment variables"
},
"description": {
"type": "string",
"description": "Description of the task"
},
"precondition": {
"items": {
"type": "string"
},
"type": "array",
"description": "Precondition to cancel the execution of a task and its dependencies"
},
"deps": {
"items": {
"type": "string"
@ -38,6 +56,9 @@
"type": "object",
"required": [
"prompt",
"env",
"description",
"precondition",
"deps",
"cmds",
"hidden"

View File

@ -25,6 +25,7 @@ func TestConfig(t *testing.T) {
reflector := new(jsonschema.Reflector)
require.NoError(t, reflector.AddGoComments("github.com/foomo/posh-providers/arbitrary/task", "./"))
schema := reflector.Reflect(&task.Config{})
schema.ID = "https://github.com/foomo/posh-providers/arbitrary/task"
actual, err := json.MarshalIndent(schema, "", " ")
require.NoError(t, err)

View File

@ -3,6 +3,12 @@ package task
type Task struct {
// Prompt string to confirm execution
Prompt string `json:"prompt" yaml:"prompt"`
// Task environment variables
Env []string `json:"env" yaml:"env"`
// Description of the task
Description string `json:"description" yaml:"description"`
// Precondition to cancel the execution of a task and its dependencies
Precondition []string `json:"precondition" yaml:"precondition"`
// Dependencies to run
Deps []string `json:"deps" yaml:"deps"`
// Commands to execute

View File

@ -0,0 +1,12 @@
{
"allOf": [
{
"type": "object",
"properties": {
"zip": {
"$ref": "https://github.com/foomo/posh-providers/arbitrary/zip"
}
}
}
]
}

View File

@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://github.com/foomo/posh-providers/arbitrary/zip/config",
"$id": "https://github.com/foomo/posh-providers/arbitrary/zip",
"$ref": "#/$defs/Config",
"$defs": {
"Config": {

View File

@ -25,6 +25,7 @@ func TestConfig(t *testing.T) {
reflector := new(jsonschema.Reflector)
require.NoError(t, reflector.AddGoComments("github.com/foomo/posh-providers/arbitrary/zip", "./"))
schema := reflector.Reflect(&zip.Config{})
schema.ID = "https://github.com/foomo/posh-providers/arbitrary/zip"
actual, err := json.MarshalIndent(schema, "", " ")
require.NoError(t, err)

12
azure/az/config.base.json Normal file
View File

@ -0,0 +1,12 @@
{
"allOf": [
{
"type": "object",
"properties": {
"az": {
"$ref": "https://github.com/foomo/posh-providers/azure/az"
}
}
}
]
}

View File

@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://github.com/foomo/posh-providers/azure/az/config",
"$id": "https://github.com/foomo/posh-providers/azure/az",
"$ref": "#/$defs/Config",
"$defs": {
"Artifactory": {

View File

@ -25,6 +25,7 @@ func TestConfig(t *testing.T) {
reflector := new(jsonschema.Reflector)
require.NoError(t, reflector.AddGoComments("github.com/foomo/posh-providers/azure/az", "./"))
schema := reflector.Reflect(&az.Config{})
schema.ID = "https://github.com/foomo/posh-providers/azure/az"
actual, err := json.MarshalIndent(schema, "", " ")
require.NoError(t, err)

7
base.schema.json Normal file
View File

@ -0,0 +1,7 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://example.com/schemas/extended-schema.json",
"allOf": [
{ "$ref": "https://raw.githubusercontent.com/foomo/posh/refs/heads/main/posh.schema.json" }
]
}

View File

@ -0,0 +1,12 @@
{
"allOf": [
{
"type": "object",
"properties": {
"cloudflared": {
"$ref": "https://github.com/foomo/posh-providers/cloudflare/cloudflared"
}
}
}
]
}

View File

@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://github.com/foomo/posh-providers/cloudflare/cloudflared/config",
"$id": "https://github.com/foomo/posh-providers/cloudflare/cloudflared",
"$ref": "#/$defs/Config",
"$defs": {
"Access": {

View File

@ -25,6 +25,7 @@ func TestConfig(t *testing.T) {
reflector := new(jsonschema.Reflector)
require.NoError(t, reflector.AddGoComments("github.com/foomo/posh-providers/cloudflare/cloudflared", "./"))
schema := reflector.Reflect(&cloudflared.Config{})
schema.ID = "https://github.com/foomo/posh-providers/cloudflare/cloudflared"
actual, err := json.MarshalIndent(schema, "", " ")
require.NoError(t, err)

View File

@ -1,126 +0,0 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://github.com/foomo/posh-provider",
"$ref": "#/$defs/Config",
"$defs": {
"Config": {
"properties": {
"version": {
"type": "string",
"pattern": "^[0-9]\\.[0-9]$",
"description": "Version of the schema"
},
"rclone": {
"$ref": "https://github.com/foomo/posh-providers/rclone/rclone/config"
},
"cdktf": {
"$ref": "https://github.com/foomo/posh-providers/hashicorp/cdktf/config"
},
"az": {
"$ref": "https://github.com/foomo/posh-providers/azure/az/config"
},
"gcloud": {
"$ref": "https://github.com/foomo/posh-providers/google/gcloud/config"
},
"terragrunt": {
"$ref": "https://github.com/foomo/posh-providers/gruntwork-io/terragrunt/config"
},
"doctl": {
"$ref": "https://github.com/foomo/posh-providers/digitalocean/doctl/config"
},
"onepassword": {
"$ref": "https://github.com/foomo/posh-providers/onepassword/config"
},
"cloudflared": {
"$ref": "https://github.com/foomo/posh-providers/cloudflare/cloudflared/config"
},
"zip": {
"$ref": "https://github.com/foomo/posh-providers/arbitrary/zip/config"
},
"open": {
"$ref": "https://github.com/foomo/posh-providers/arbitrary/open/config"
},
"stern": {
"$ref": "https://github.com/foomo/posh-providers/stern/stern/config"
},
"k6": {
"$ref": "https://github.com/foomo/posh-providers/grafana/k6/config"
},
"k3d": {
"$ref": "https://github.com/foomo/posh-providers/k3d-io/k3d/config"
},
"etcd": {
"$ref": "https://github.com/foomo/posh-providers/etcd-io/etcd/config"
},
"hygen": {
"$ref": "https://github.com/foomo/posh-providers/jondot/hygen/config"
},
"sqlc": {
"$ref": "https://github.com/foomo/posh-providers/sqlc-dev/sqlc/config"
},
"mkcert": {
"$ref": "https://github.com/foomo/posh-providers/filosottile/mkcert/config"
},
"licensefinder": {
"$ref": "https://github.com/foomo/posh-providers/pivotal/licensefinder/config"
},
"docusaurus": {
"$ref": "https://github.com/foomo/posh-providers/facebook/docusaurus/config"
},
"stackit": {
"$ref": "https://github.com/foomo/posh-providers/stackitcloud/stackit/config"
},
"slack": {
"$ref": "https://github.com/foomo/posh-providers/slack-go/slack/config"
},
"teleport": {
"$ref": "https://github.com/foomo/posh-providers/gravitational/teleport/config"
},
"kubectl": {
"$ref": "https://github.com/foomo/posh-providers/kubernets/kubectl/config"
},
"pulumi-gcloud": {
"$ref": "https://github.com/foomo/posh-providers/pulumi/pulumi/gcloud/config"
},
"pulumi-azure": {
"$ref": "https://github.com/foomo/posh-providers/pulumi/pulumi/azure/config"
},
"gocontentful": {
"$ref": "https://github.com/foomo/posh-providers/foomo/gocontentful/config"
},
"beam": {
"$ref": "https://github.com/foomo/posh-providers/foomo/beam/config"
},
"sesamy": {
"$ref": "https://github.com/foomo/posh-providers/foomo/sesamy/config"
},
"squadron": {
"$ref": "https://github.com/foomo/posh-providers/foomo/squadron/config"
},
"webdriverio": {
"$ref": "https://github.com/foomo/posh-providers/webdriverio/webdriverio/config"
},
"migrate": {
"$ref": "https://github.com/foomo/posh-providers/golang-migrate/migrate/config"
},
"bruno": {
"$ref": "https://github.com/foomo/posh-providers/usebruno/bruno/config"
},
"harbor": {
"$ref": "https://github.com/foomo/posh-providers/goharbor/harbor/config"
},
"kubeforward": {
"$ref": "https://github.com/foomo/posh-providers/kubernets/kubeforward/config"
},
"task": {
"$ref": "https://github.com/foomo/posh-providers/arbitrary/task/config"
}
},
"additionalProperties": false,
"type": "object",
"required": [
"version"
]
}
}
}

View File

@ -1,2 +0,0 @@
# yaml-language-server: $schema=config.schema.json
version: '1.0'

View File

@ -0,0 +1,12 @@
{
"allOf": [
{
"type": "object",
"properties": {
"doctl": {
"$ref": "https://github.com/foomo/posh-providers/digitalocean/doctl"
}
}
}
]
}

View File

@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://github.com/foomo/posh-providers/digitalocean/doctl/config",
"$id": "https://github.com/foomo/posh-providers/digitalocean/doctl",
"$ref": "#/$defs/Config",
"$defs": {
"Cluster": {

View File

@ -25,6 +25,7 @@ func TestConfig(t *testing.T) {
reflector := new(jsonschema.Reflector)
require.NoError(t, reflector.AddGoComments("github.com/foomo/posh-providers/digitalocean/doctl", "./"))
schema := reflector.Reflect(&doctl.Config{})
schema.ID = "https://github.com/foomo/posh-providers/digitalocean/doctl"
actual, err := json.MarshalIndent(schema, "", " ")
require.NoError(t, err)

View File

@ -0,0 +1,12 @@
{
"allOf": [
{
"type": "object",
"properties": {
"etcd": {
"$ref": "https://github.com/foomo/posh-providers/etcd-io/etcd"
}
}
}
]
}

View File

@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://github.com/foomo/posh-providers/etcd-io/etcd/config",
"$id": "https://github.com/foomo/posh-providers/etcd-io/etcd",
"$ref": "#/$defs/Config",
"$defs": {
"Cluster": {

View File

@ -25,6 +25,7 @@ func TestConfig(t *testing.T) {
reflector := new(jsonschema.Reflector)
require.NoError(t, reflector.AddGoComments("github.com/foomo/posh-providers/etcd-io/etcd", "./"))
schema := reflector.Reflect(&etcd.Config{})
schema.ID = "https://github.com/foomo/posh-providers/etcd-io/etcd"
actual, err := json.MarshalIndent(schema, "", " ")
require.NoError(t, err)

View File

@ -0,0 +1,12 @@
{
"allOf": [
{
"type": "object",
"properties": {
"docusaurus": {
"$ref": "https://github.com/foomo/posh-providers/facebook/docusaurus"
}
}
}
]
}

View File

@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://github.com/foomo/posh-providers/facebook/docusaurus/config",
"$id": "https://github.com/foomo/posh-providers/facebook/docusaurus",
"$ref": "#/$defs/Config",
"$defs": {
"Config": {

View File

@ -25,6 +25,7 @@ func TestConfig(t *testing.T) {
reflector := new(jsonschema.Reflector)
require.NoError(t, reflector.AddGoComments("github.com/foomo/posh-providers/facebook/docusaurus", "./"))
schema := reflector.Reflect(&docusaurus.Config{})
schema.ID = "https://github.com/foomo/posh-providers/facebook/docusaurus"
actual, err := json.MarshalIndent(schema, "", " ")
require.NoError(t, err)

View File

@ -0,0 +1,12 @@
{
"allOf": [
{
"type": "object",
"properties": {
"mkcert": {
"$ref": "https://github.com/foomo/posh-providers/filosottile/mkcert"
}
}
}
]
}

View File

@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://github.com/foomo/posh-providers/filosottile/mkcert/config",
"$id": "https://github.com/foomo/posh-providers/filosottile/mkcert",
"$ref": "#/$defs/Config",
"$defs": {
"Certificate": {

View File

@ -25,6 +25,7 @@ func TestConfig(t *testing.T) {
reflector := new(jsonschema.Reflector)
require.NoError(t, reflector.AddGoComments("github.com/foomo/posh-providers/filosottile/mkcert", "./"))
schema := reflector.Reflect(&mkcert.Config{})
schema.ID = "https://github.com/foomo/posh-providers/filosottile/mkcert"
actual, err := json.MarshalIndent(schema, "", " ")
require.NoError(t, err)

View File

@ -0,0 +1,12 @@
{
"allOf": [
{
"type": "object",
"properties": {
"beam": {
"$ref": "https://github.com/foomo/posh-providers/foomo/beam"
}
}
}
]
}

View File

@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://github.com/foomo/posh-providers/foomo/beam/config",
"$id": "https://github.com/foomo/posh-providers/foomo/beam",
"$ref": "#/$defs/Config",
"$defs": {
"Cluster": {

View File

@ -25,6 +25,7 @@ func TestConfig(t *testing.T) {
reflector := new(jsonschema.Reflector)
require.NoError(t, reflector.AddGoComments("github.com/foomo/posh-providers/foomo/beam", "./"))
schema := reflector.Reflect(&beam.Config{})
schema.ID = "https://github.com/foomo/posh-providers/foomo/beam"
actual, err := json.MarshalIndent(schema, "", " ")
require.NoError(t, err)

View File

@ -0,0 +1,12 @@
{
"allOf": [
{
"type": "object",
"properties": {
"gocontentful": {
"$ref": "https://github.com/foomo/posh-providers/foomo/gocontentful"
}
}
}
]
}

View File

@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://github.com/foomo/posh-providers/foomo/gocontentful/config",
"$id": "https://github.com/foomo/posh-providers/foomo/gocontentful",
"$ref": "#/$defs/Config",
"$defs": {
"Config": {

View File

@ -25,6 +25,7 @@ func TestConfig(t *testing.T) {
reflector := new(jsonschema.Reflector)
require.NoError(t, reflector.AddGoComments("github.com/foomo/posh-providers/foomo/gocontentful", "./"))
schema := reflector.Reflect(&gocontentful.Config{})
schema.ID = "https://github.com/foomo/posh-providers/foomo/gocontentful"
actual, err := json.MarshalIndent(schema, "", " ")
require.NoError(t, err)

View File

@ -0,0 +1,12 @@
{
"allOf": [
{
"type": "object",
"properties": {
"sesamy": {
"$ref": "https://github.com/foomo/posh-providers/foomo/sesamy"
}
}
}
]
}

View File

@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://github.com/foomo/posh-providers/foomo/sesamy/config",
"$id": "https://github.com/foomo/posh-providers/foomo/sesamy",
"$ref": "#/$defs/Config",
"$defs": {
"Config": {

View File

@ -25,6 +25,7 @@ func TestConfig(t *testing.T) {
reflector := new(jsonschema.Reflector)
require.NoError(t, reflector.AddGoComments("github.com/foomo/posh-providers/foomo/sesamy", "./"))
schema := reflector.Reflect(&sesamy.Config{})
schema.ID = "https://github.com/foomo/posh-providers/foomo/sesamy"
actual, err := json.MarshalIndent(schema, "", " ")
require.NoError(t, err)

View File

@ -0,0 +1,12 @@
{
"allOf": [
{
"type": "object",
"properties": {
"squadron": {
"$ref": "https://github.com/foomo/posh-providers/foomo/squadron"
}
}
}
]
}

View File

@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://github.com/foomo/posh-providers/foomo/squadron/config",
"$id": "https://github.com/foomo/posh-providers/foomo/squadron",
"$ref": "#/$defs/Config",
"$defs": {
"Cluster": {

View File

@ -25,6 +25,7 @@ func TestConfig(t *testing.T) {
reflector := new(jsonschema.Reflector)
require.NoError(t, reflector.AddGoComments("github.com/foomo/posh-providers/foomo/squadron", "./"))
schema := reflector.Reflect(&squadron.Config{})
schema.ID = "https://github.com/foomo/posh-providers/foomo/squadron"
actual, err := json.MarshalIndent(schema, "", " ")
require.NoError(t, err)

50
go.mod
View File

@ -1,6 +1,6 @@
module github.com/foomo/posh-providers
go 1.24.1
go 1.25
replace github.com/c-bata/go-prompt v0.2.6 => github.com/franklinkim/go-prompt v0.2.7-0.20210427061716-a8f4995d7aa5
@ -11,18 +11,18 @@ require (
github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d
github.com/c-bata/go-prompt v0.2.6
github.com/cloudrecipes/packagejson v1.0.0
github.com/digitalocean/godo v1.162.0
github.com/digitalocean/godo v1.165.0
github.com/foomo/go v0.0.3
github.com/foomo/gokazi v0.1.5
github.com/foomo/posh v0.13.0
github.com/foomo/gokazi v0.1.6
github.com/foomo/posh v0.14.2
github.com/goccy/go-json v0.10.5
github.com/golang-migrate/migrate/v4 v4.18.3
github.com/golang-migrate/migrate/v4 v4.19.0
github.com/google/go-github/v47 v47.1.0
github.com/invopop/jsonschema v0.13.0
github.com/joho/godotenv v1.5.1
github.com/knadh/koanf/parsers/yaml v1.1.0
github.com/knadh/koanf/providers/file v1.2.0
github.com/knadh/koanf/v2 v2.2.2
github.com/knadh/koanf/v2 v2.3.0
github.com/mitchellh/mapstructure v1.5.0
github.com/muesli/go-app-paths v0.2.2
github.com/pkg/errors v0.9.1
@ -30,13 +30,13 @@ require (
github.com/samber/lo v1.51.0
github.com/shirou/gopsutil/v3 v3.24.5
github.com/slack-go/slack v0.17.3
github.com/spf13/viper v1.20.1
github.com/stretchr/testify v1.10.0
github.com/spf13/viper v1.21.0
github.com/stretchr/testify v1.11.1
go.uber.org/zap v1.27.0
golang.org/x/oauth2 v0.30.0
golang.org/x/sync v0.16.0
golang.org/x/oauth2 v0.31.0
golang.org/x/sync v0.17.0
gopkg.in/yaml.v3 v3.0.1
k8s.io/utils v0.0.0-20250604170112-4c0f3b243397
k8s.io/utils v0.0.0-20250820121507-0af2bda4dd1d
)
require (
@ -46,7 +46,7 @@ require (
github.com/alecthomas/chroma v0.10.0 // indirect
github.com/bahlo/generic-list-go v0.2.0 // indirect
github.com/buger/jsonparser v1.1.1 // indirect
github.com/charlievieth/fastwalk v1.0.12 // indirect
github.com/charlievieth/fastwalk v1.0.14 // indirect
github.com/containerd/console v1.0.5 // indirect
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
github.com/dlclark/regexp2 v1.11.5 // indirect
@ -55,7 +55,7 @@ require (
github.com/go-ole/go-ole v1.3.0 // indirect
github.com/go-viper/mapstructure/v2 v2.4.0 // indirect
github.com/google/go-querystring v1.1.0 // indirect
github.com/gookit/color v1.5.4 // indirect
github.com/gookit/color v1.6.0 // indirect
github.com/gorilla/websocket v1.5.3 // indirect
github.com/hashicorp/errwrap v1.1.0 // indirect
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
@ -63,8 +63,8 @@ require (
github.com/hashicorp/go-retryablehttp v0.7.8 // indirect
github.com/knadh/koanf/maps v0.1.2 // indirect
github.com/lithammer/fuzzysearch v1.1.8 // indirect
github.com/lufia/plan9stats v0.0.0-20250317134145-8bc96cf8fc35 // indirect
github.com/mailru/easyjson v0.9.0 // indirect
github.com/lufia/plan9stats v0.0.0-20250827001030-24949be3fa54 // indirect
github.com/mailru/easyjson v0.9.1 // indirect
github.com/mattn/go-colorable v0.1.14 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/mattn/go-runewidth v0.0.16 // indirect
@ -80,13 +80,13 @@ require (
github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 // indirect
github.com/rivo/uniseg v0.4.7 // indirect
github.com/rogpeppe/go-internal v1.14.1 // indirect
github.com/sagikazarmark/locafero v0.10.0 // indirect
github.com/shirou/gopsutil/v4 v4.25.7 // indirect
github.com/sagikazarmark/locafero v0.11.0 // indirect
github.com/shirou/gopsutil/v4 v4.25.8 // indirect
github.com/shoenig/go-m1cpu v0.1.6 // indirect
github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 // indirect
github.com/spf13/afero v1.14.0 // indirect
github.com/spf13/cast v1.9.2 // indirect
github.com/spf13/pflag v1.0.7 // indirect
github.com/spf13/afero v1.15.0 // indirect
github.com/spf13/cast v1.10.0 // indirect
github.com/spf13/pflag v1.0.10 // indirect
github.com/subosito/gotenv v1.6.0 // indirect
github.com/tklauser/go-sysconf v0.3.15 // indirect
github.com/tklauser/numcpus v0.10.0 // indirect
@ -98,10 +98,10 @@ require (
go.uber.org/atomic v1.11.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
go.yaml.in/yaml/v3 v3.0.4 // indirect
golang.org/x/crypto v0.40.0 // indirect
golang.org/x/sys v0.34.0 // indirect
golang.org/x/term v0.33.0 // indirect
golang.org/x/text v0.27.0 // indirect
golang.org/x/time v0.12.0 // indirect
golang.org/x/crypto v0.42.0 // indirect
golang.org/x/sys v0.36.0 // indirect
golang.org/x/term v0.35.0 // indirect
golang.org/x/text v0.29.0 // indirect
golang.org/x/time v0.13.0 // indirect
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
)

106
go.sum
View File

@ -28,8 +28,8 @@ github.com/bahlo/generic-list-go v0.2.0 h1:5sz/EEAK+ls5wF+NeqDpk5+iNdMDXrh3z3nPn
github.com/bahlo/generic-list-go v0.2.0/go.mod h1:2KvAjgMlE5NNynlg/5iLrrCCZ2+5xWbdbCW3pNTGyYg=
github.com/buger/jsonparser v1.1.1 h1:2PnMjfWD7wBILjqQbt530v576A/cAbQvEW9gGIpYMUs=
github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0=
github.com/charlievieth/fastwalk v1.0.12 h1:pwfxe1LajixViQqo7EFLXU2+mQxb6OaO0CeNdVwRKTg=
github.com/charlievieth/fastwalk v1.0.12/go.mod h1:yGy1zbxog41ZVMcKA/i8ojXLFsuayX5VvwhQVoj9PBI=
github.com/charlievieth/fastwalk v1.0.14 h1:3Eh5uaFGwHZd8EGwTjJnSpBkfwfsak9h6ICgnWlhAyg=
github.com/charlievieth/fastwalk v1.0.14/go.mod h1:diVcUreiU1aQ4/Wu3NbxxH4/KYdKpLDojrQ1Bb2KgNY=
github.com/cloudrecipes/packagejson v1.0.0 h1:f6InIxXWQ9/u1XNk7pX2BeUIw7IOYZS5B26o685XbZk=
github.com/cloudrecipes/packagejson v1.0.0/go.mod h1:ZENm9DGj5m+2WMImPunZuW3Qn2Ljw/0kHOP4BcWhrrA=
github.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkXar0TQ1gf3U=
@ -39,8 +39,8 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/digitalocean/godo v1.162.0 h1:7dtS9H8xsUuYtPf9w4eDsiRl0UlgzyCCSPWpMFOZKhg=
github.com/digitalocean/godo v1.162.0/go.mod h1:NJ1VlXmFMSnG1GEe2rWyDZVrhR69c3nHmL0s1cSSQ6M=
github.com/digitalocean/godo v1.165.0 h1:OG/E4/pUDCoySjKYeW1WKaON2airpWu7TdKwpZllz8I=
github.com/digitalocean/godo v1.165.0/go.mod h1:NJ1VlXmFMSnG1GEe2rWyDZVrhR69c3nHmL0s1cSSQ6M=
github.com/dlclark/regexp2 v1.4.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc=
github.com/dlclark/regexp2 v1.11.5 h1:Q/sSnsKerHeCkc/jSTNq1oCm7KiVgUMZRDUoRu0JQZQ=
github.com/dlclark/regexp2 v1.11.5/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8=
@ -50,10 +50,10 @@ github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM=
github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE=
github.com/foomo/go v0.0.3 h1:5pGzcPC78dImuBTT7nsZZnH+GIQUylbCtMkFEH26uZk=
github.com/foomo/go v0.0.3/go.mod h1:x6g64wiQusqaFElnh5rlk9unCgLKmfUWy0YFLejJxio=
github.com/foomo/gokazi v0.1.5 h1:cqEB3o7TM3IzLkXgVtIx97V46zhOY2iL9HPfBgfKS/4=
github.com/foomo/gokazi v0.1.5/go.mod h1:2aLwoCPC2ecwtqU/67qGWoYn7UcZwgCbSdrimVbF7Zc=
github.com/foomo/posh v0.13.0 h1:1KCnsrM3byb5tcjHuImKPg/vAVEYJmtKgrwWMwV1zrw=
github.com/foomo/posh v0.13.0/go.mod h1:BZsBvewZc9qHa/9Ukwyru375DR8ZvidHzi+24Qa31Mo=
github.com/foomo/gokazi v0.1.6 h1:6OPtVTt4enPDG04kChGWJyq3MaiXZ9fnehAAS+XSOHM=
github.com/foomo/gokazi v0.1.6/go.mod h1:Z8t3AmrBe47xN+FKEerakbA4bX1y4CTFRC9G7fmKskA=
github.com/foomo/posh v0.14.2 h1:r77DU5LMcDDTRSdT3w++fVSBtXRyssTMhqxNPNMFpJM=
github.com/foomo/posh v0.14.2/go.mod h1:osZmLlS3qy6Ay6r5DFUow876yh0DJdCwp6QnVPXI8pY=
github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
github.com/franklinkim/go-prompt v0.2.7-0.20210427061716-a8f4995d7aa5 h1:kXNtle4AoQnngdm+gwt4ku6Llbzw3EFHgZYpL618JaI=
@ -69,8 +69,8 @@ github.com/go-viper/mapstructure/v2 v2.4.0 h1:EBsztssimR/CONLSZZ04E8qAkxNYq4Qp9L
github.com/go-viper/mapstructure/v2 v2.4.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
github.com/goccy/go-json v0.10.5 h1:Fq85nIqj+gXn/S5ahsiTlK3TmC85qgirsdTP/+DeaC4=
github.com/goccy/go-json v0.10.5/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M=
github.com/golang-migrate/migrate/v4 v4.18.3 h1:EYGkoOsvgHHfm5U/naS1RP/6PL/Xv3S4B/swMiAmDLs=
github.com/golang-migrate/migrate/v4 v4.18.3/go.mod h1:99BKpIi6ruaaXRM1A77eqZ+FWPQ3cfRa+ZVy5bmWMaY=
github.com/golang-migrate/migrate/v4 v4.19.0 h1:RcjOnCGz3Or6HQYEJ/EEVLfWnmw9KnoigPSjzhCuaSE=
github.com/golang-migrate/migrate/v4 v4.19.0/go.mod h1:9dyEcu+hO+G9hPSw8AIg50yg622pXJsoHItQnDGZkI0=
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
@ -80,10 +80,12 @@ github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD
github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU=
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/gookit/assert v0.1.1 h1:lh3GcawXe/p+cU7ESTZ5Ui3Sm/x8JWpIis4/1aF0mY0=
github.com/gookit/assert v0.1.1/go.mod h1:jS5bmIVQZTIwk42uXl4lyj4iaaxx32tqH16CFj0VX2E=
github.com/gookit/color v1.4.2/go.mod h1:fqRyamkC1W8uxl+lxCQxOT09l/vYfZ+QeiX3rKQHCoQ=
github.com/gookit/color v1.5.0/go.mod h1:43aQb+Zerm/BWh2GnrgOQm7ffz7tvQXEKV6BFMl7wAo=
github.com/gookit/color v1.5.4 h1:FZmqs7XOyGgCAxmWyPslpiok1k05wmY3SJTytgvYFs0=
github.com/gookit/color v1.5.4/go.mod h1:pZJOeOS8DM43rXbp4AZo1n9zCU2qjpcRko0b6/QJi9w=
github.com/gookit/color v1.6.0 h1:JjJXBTk1ETNyqyilJhkTXJYYigHG24TM9Xa2M1xAhRA=
github.com/gookit/color v1.6.0/go.mod h1:9ACFc7/1IpHGBW8RwuDm/0YEnhg3dwwXpoMsmtyHfjs=
github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg=
github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
@ -104,16 +106,16 @@ github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwA
github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
github.com/klauspost/cpuid/v2 v2.0.10/go.mod h1:g2LTdtYhdyuGPqyWyv7qRAmj1WBqxuObKfj5c0PQa7c=
github.com/klauspost/cpuid/v2 v2.0.12/go.mod h1:g2LTdtYhdyuGPqyWyv7qRAmj1WBqxuObKfj5c0PQa7c=
github.com/klauspost/cpuid/v2 v2.2.3 h1:sxCkb+qR91z4vsqw4vGGZlDgPz3G7gjaLyK3V8y70BU=
github.com/klauspost/cpuid/v2 v2.2.3/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY=
github.com/klauspost/cpuid/v2 v2.3.0 h1:S4CRMLnYUhGeDFDqkGriYKdfoFlDnMtqTiI/sFzhA9Y=
github.com/klauspost/cpuid/v2 v2.3.0/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0=
github.com/knadh/koanf/maps v0.1.2 h1:RBfmAW5CnZT+PJ1CVc1QSJKf4Xu9kxfQgYVQSu8hpbo=
github.com/knadh/koanf/maps v0.1.2/go.mod h1:npD/QZY3V6ghQDdcQzl1W4ICNVTkohC8E73eI2xW4yI=
github.com/knadh/koanf/parsers/yaml v1.1.0 h1:3ltfm9ljprAHt4jxgeYLlFPmUaunuCgu1yILuTXRdM4=
github.com/knadh/koanf/parsers/yaml v1.1.0/go.mod h1:HHmcHXUrp9cOPcuC+2wrr44GTUB0EC+PyfN3HZD9tFg=
github.com/knadh/koanf/providers/file v1.2.0 h1:hrUJ6Y9YOA49aNu/RSYzOTFlqzXSCpmYIDXI7OJU6+U=
github.com/knadh/koanf/providers/file v1.2.0/go.mod h1:bp1PM5f83Q+TOUu10J/0ApLBd9uIzg+n9UgthfY+nRA=
github.com/knadh/koanf/v2 v2.2.2 h1:ghbduIkpFui3L587wavneC9e3WIliCgiCgdxYO/wd7A=
github.com/knadh/koanf/v2 v2.2.2/go.mod h1:abWQc0cBXLSF/PSOMCB/SK+T13NXDsPvOksbpi5e/9Q=
github.com/knadh/koanf/v2 v2.3.0 h1:Qg076dDRFHvqnKG97ZEsi9TAg2/nFTa9hCdcSa1lvlM=
github.com/knadh/koanf/v2 v2.3.0/go.mod h1:gRb40VRAbd4iJMYYD5IxZ6hfuopFcXBpc9bbQpZwo28=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
@ -124,10 +126,10 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/lithammer/fuzzysearch v1.1.8 h1:/HIuJnjHuXS8bKaiTMeeDlW2/AyIWk2brx1V8LFgLN4=
github.com/lithammer/fuzzysearch v1.1.8/go.mod h1:IdqeyBClc3FFqSzYq/MXESsS4S0FsZ5ajtkr5xPLts4=
github.com/lufia/plan9stats v0.0.0-20250317134145-8bc96cf8fc35 h1:PpXWgLPs+Fqr325bN2FD2ISlRRztXibcX6e8f5FR5Dc=
github.com/lufia/plan9stats v0.0.0-20250317134145-8bc96cf8fc35/go.mod h1:autxFIvghDt3jPTLoqZ9OZ7s9qTGNAWmYCjVFWPX/zg=
github.com/mailru/easyjson v0.9.0 h1:PrnmzHw7262yW8sTBwxi1PdJA3Iw/EKBa8psRf7d9a4=
github.com/mailru/easyjson v0.9.0/go.mod h1:1+xMtQp2MRNVL/V1bOzuP3aP8VNwRW55fQUto+XFtTU=
github.com/lufia/plan9stats v0.0.0-20250827001030-24949be3fa54 h1:mFWunSatvkQQDhpdyuFAYwyAan3hzCuma+Pz8sqvOfg=
github.com/lufia/plan9stats v0.0.0-20250827001030-24949be3fa54/go.mod h1:autxFIvghDt3jPTLoqZ9OZ7s9qTGNAWmYCjVFWPX/zg=
github.com/mailru/easyjson v0.9.1 h1:LbtsOm5WAswyWbvTEOqhypdPeZzHavpZx96/n553mR8=
github.com/mailru/easyjson v0.9.1/go.mod h1:1+xMtQp2MRNVL/V1bOzuP3aP8VNwRW55fQUto+XFtTU=
github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE=
@ -184,8 +186,8 @@ github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ=
github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
github.com/sagikazarmark/locafero v0.10.0 h1:FM8Cv6j2KqIhM2ZK7HZjm4mpj9NBktLgowT1aN9q5Cc=
github.com/sagikazarmark/locafero v0.10.0/go.mod h1:Ieo3EUsjifvQu4NZwV5sPd4dwvu0OCgEQV7vjc9yDjw=
github.com/sagikazarmark/locafero v0.11.0 h1:1iurJgmM9G3PA/I+wWYIOw/5SyBtxapeHDcg+AAIFXc=
github.com/sagikazarmark/locafero v0.11.0/go.mod h1:nVIGvgyzw595SUSUE6tvCp3YYTeHs15MvlmU87WwIik=
github.com/samber/lo v1.51.0 h1:kysRYLbHy/MB7kQZf5DSN50JHmMsNEdeY24VzJFu7wI=
github.com/samber/lo v1.51.0/go.mod h1:4+MXEGsJzbKGaUEQFKBq2xtfuznW9oz/WrgyzMzRoM0=
github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM=
@ -193,8 +195,8 @@ github.com/sergi/go-diff v1.4.0 h1:n/SP9D5ad1fORl+llWyN+D6qoUETXNZARKjyY2/KVCw=
github.com/sergi/go-diff v1.4.0/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4=
github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI=
github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk=
github.com/shirou/gopsutil/v4 v4.25.7 h1:bNb2JuqKuAu3tRlPv5piSmBZyMfecwQ+t/ILq+1JqVM=
github.com/shirou/gopsutil/v4 v4.25.7/go.mod h1:XV/egmwJtd3ZQjBpJVY5kndsiOO4IRqy9TQnmm6VP7U=
github.com/shirou/gopsutil/v4 v4.25.8 h1:NnAsw9lN7587WHxjJA9ryDnqhJpFH6A+wagYWTOH970=
github.com/shirou/gopsutil/v4 v4.25.8/go.mod h1:q9QdMmfAOVIw7a+eF86P7ISEU6ka+NLgkUxlopV4RwI=
github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM=
github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ=
github.com/shoenig/test v0.6.4 h1:kVTaSd7WLz5WZ2IaoM0RSzRsUD+m8wRR+5qvntpn4LU=
@ -203,14 +205,14 @@ github.com/slack-go/slack v0.17.3 h1:zV5qO3Q+WJAQ/XwbGfNFrRMaJ5T/naqaonyPV/1TP4g
github.com/slack-go/slack v0.17.3/go.mod h1:X+UqOufi3LYQHDnMG1vxf0J8asC6+WllXrVrhl8/Prk=
github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 h1:+jumHNA0Wrelhe64i8F6HNlS8pkoyMv5sreGx2Ry5Rw=
github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8/go.mod h1:3n1Cwaq1E1/1lhQhtRK2ts/ZwZEhjcQeJQ1RuC6Q/8U=
github.com/spf13/afero v1.14.0 h1:9tH6MapGnn/j0eb0yIXiLjERO8RB6xIVZRDCX7PtqWA=
github.com/spf13/afero v1.14.0/go.mod h1:acJQ8t0ohCGuMN3O+Pv0V0hgMxNYDlvdk+VTfyZmbYo=
github.com/spf13/cast v1.9.2 h1:SsGfm7M8QOFtEzumm7UZrZdLLquNdzFYfIbEXntcFbE=
github.com/spf13/cast v1.9.2/go.mod h1:jNfB8QC9IA6ZuY2ZjDp0KtFO2LZZlg4S/7bzP6qqeHo=
github.com/spf13/pflag v1.0.7 h1:vN6T9TfwStFPFM5XzjsvmzZkLuaLX+HS+0SeFLRgU6M=
github.com/spf13/pflag v1.0.7/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/spf13/viper v1.20.1 h1:ZMi+z/lvLyPSCoNtFCpqjy0S4kPbirhpTMwl8BkW9X4=
github.com/spf13/viper v1.20.1/go.mod h1:P9Mdzt1zoHIG8m2eZQinpiBjo6kCmZSKBClNNqjJvu4=
github.com/spf13/afero v1.15.0 h1:b/YBCLWAJdFWJTN9cLhiXXcD7mzKn9Dm86dNnfyQw1I=
github.com/spf13/afero v1.15.0/go.mod h1:NC2ByUVxtQs4b3sIUphxK0NioZnmxgyCrfzeuq8lxMg=
github.com/spf13/cast v1.10.0 h1:h2x0u2shc1QuLHfxi+cTJvs30+ZAHOGRic8uyGTDWxY=
github.com/spf13/cast v1.10.0/go.mod h1:jNfB8QC9IA6ZuY2ZjDp0KtFO2LZZlg4S/7bzP6qqeHo=
github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk=
github.com/spf13/pflag v1.0.10/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/spf13/viper v1.21.0 h1:x5S+0EU27Lbphp4UKm1C+1oQO+rKx36vfCoaVebLFSU=
github.com/spf13/viper v1.21.0/go.mod h1:P0lhsswPGWD/1lZJ9ny3fYnVqxiegrlNrEmgLjbTCAY=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
@ -218,8 +220,8 @@ github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UV
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8=
github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU=
github.com/tklauser/go-sysconf v0.3.15 h1:VE89k0criAymJ/Os65CSn1IXaol+1wrsFHEB8Ol49K4=
@ -250,24 +252,24 @@ go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc=
go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.40.0 h1:r4x+VvoG5Fm+eJcxMaY8CQM7Lb0l1lsmjGBQ6s8BfKM=
golang.org/x/crypto v0.40.0/go.mod h1:Qr1vMER5WyS2dfPHAlsOj01wgLbsyWtFn/aY+5+ZdxY=
golang.org/x/exp v0.0.0-20250718183923-645b1fa84792 h1:R9PFI6EUdfVKgwKjZef7QIwGcBKu86OEFpJ9nUEP2l4=
golang.org/x/exp v0.0.0-20250718183923-645b1fa84792/go.mod h1:A+z0yzpGtvnG90cToK5n2tu8UJVP2XUATh+r+sfOOOc=
golang.org/x/crypto v0.42.0 h1:chiH31gIWm57EkTXpwnqf8qeuMUi0yekh6mT2AvFlqI=
golang.org/x/crypto v0.42.0/go.mod h1:4+rDnOTJhQCx2q7/j6rAN5XDw8kPjeaXEUR2eL94ix8=
golang.org/x/exp v0.0.0-20250911091902-df9299821621 h1:2id6c1/gto0kaHYyrixvknJ8tUK/Qs5IsmBtrc+FtgU=
golang.org/x/exp v0.0.0-20250911091902-df9299821621/go.mod h1:TwQYMMnGpvZyc+JpB/UAuTNIsVJifOlSkrZkhcvpVUk=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI=
golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU=
golang.org/x/oauth2 v0.31.0 h1:8Fq0yVZLh4j4YA47vHKFTa9Ew5XIrCP8LC6UeNZnLxo=
golang.org/x/oauth2 v0.31.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw=
golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug=
golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@ -289,24 +291,24 @@ golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.34.0 h1:H5Y5sJ2L2JRdyv7ROF1he/lPdvFsd0mJHFw2ThKHxLA=
golang.org/x/sys v0.34.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k=
golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
golang.org/x/term v0.33.0 h1:NuFncQrRcaRvVmgRkvM3j/F00gWIAlcmlB8ACEKmGIg=
golang.org/x/term v0.33.0/go.mod h1:s18+ql9tYWp1IfpV9DmCtQDDSRBUjKaw9M1eAv5UeF0=
golang.org/x/term v0.35.0 h1:bZBVKBudEyhRcajGcNc3jIfWPqV4y/Kt2XcoigOWtDQ=
golang.org/x/term v0.35.0/go.mod h1:TPGtkTLesOwf2DE8CgVYiZinHAOuy5AYUYT1lENIZnA=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
golang.org/x/text v0.27.0 h1:4fGWRpyh641NLlecmyl4LOe6yDdfaYNrGb2zdfo4JV4=
golang.org/x/text v0.27.0/go.mod h1:1D28KMCvyooCX9hBiosv5Tz/+YLxj0j7XhWjpSUF7CU=
golang.org/x/time v0.12.0 h1:ScB/8o8olJvc+CQPWrK3fPZNfh7qgwCrY0zJmoEQLSE=
golang.org/x/time v0.12.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg=
golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk=
golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4=
golang.org/x/time v0.13.0 h1:eUlYslOIt32DgYD6utsuUeHs4d7AsEYLuIAdg7FlYgI=
golang.org/x/time v0.13.0/go.mod h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
@ -323,5 +325,5 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
k8s.io/utils v0.0.0-20250604170112-4c0f3b243397 h1:hwvWFiBzdWw1FhfY1FooPn3kzWuJ8tmbZBHi4zVsl1Y=
k8s.io/utils v0.0.0-20250604170112-4c0f3b243397/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
k8s.io/utils v0.0.0-20250820121507-0af2bda4dd1d h1:wAhiDyZ4Tdtt7e46e9M5ZSAJ/MnPGPs+Ki1gHw4w1R0=
k8s.io/utils v0.0.0-20250820121507-0af2bda4dd1d/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=

View File

@ -0,0 +1,12 @@
{
"allOf": [
{
"type": "object",
"properties": {
"harbor": {
"$ref": "https://github.com/foomo/posh-providers/goharbor/harbor"
}
}
}
]
}

View File

@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://github.com/foomo/posh-providers/goharbor/harbor/config",
"$id": "https://github.com/foomo/posh-providers/goharbor/harbor",
"$ref": "#/$defs/Config",
"$defs": {
"Config": {

View File

@ -25,6 +25,7 @@ func TestConfig(t *testing.T) {
reflector := new(jsonschema.Reflector)
require.NoError(t, reflector.AddGoComments("github.com/foomo/posh-providers/goharbor/harbor", "./"))
schema := reflector.Reflect(&harbor.Config{})
schema.ID = "https://github.com/foomo/posh-providers/goharbor/harbor"
actual, err := json.MarshalIndent(schema, "", " ")
require.NoError(t, err)

View File

@ -0,0 +1,12 @@
{
"allOf": [
{
"type": "object",
"properties": {
"migrate": {
"$ref": "https://github.com/foomo/posh-providers/golang-migrate/migrate"
}
}
}
]
}

View File

@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://github.com/foomo/posh-providers/golang-migrate/migrate/config",
"$id": "https://github.com/foomo/posh-providers/golang-migrate/migrate",
"$ref": "#/$defs/Config",
"$defs": {
"Config": {

View File

@ -25,6 +25,7 @@ func TestConfig(t *testing.T) {
reflector := new(jsonschema.Reflector)
require.NoError(t, reflector.AddGoComments("github.com/foomo/posh-providers/golang-migrate/migrate", "./"))
schema := reflector.Reflect(&migrate.Config{})
schema.ID = "https://github.com/foomo/posh-providers/golang-migrate/migrate"
actual, err := json.MarshalIndent(schema, "", " ")
require.NoError(t, err)

View File

@ -0,0 +1,12 @@
{
"allOf": [
{
"type": "object",
"properties": {
"gcloud": {
"$ref": "https://github.com/foomo/posh-providers/google/gcloud"
}
}
}
]
}

View File

@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://github.com/foomo/posh-providers/google/gcloud/config",
"$id": "https://github.com/foomo/posh-providers/google/gcloud",
"$ref": "#/$defs/Config",
"$defs": {
"Account": {

View File

@ -25,6 +25,7 @@ func TestConfig(t *testing.T) {
reflector := new(jsonschema.Reflector)
require.NoError(t, reflector.AddGoComments("github.com/foomo/posh-providers/google/gcloud", "./"))
schema := reflector.Reflect(&gcloud.Config{})
schema.ID = "https://github.com/foomo/posh-providers/google/gcloud"
actual, err := json.MarshalIndent(schema, "", " ")
require.NoError(t, err)

View File

@ -0,0 +1,12 @@
{
"allOf": [
{
"type": "object",
"properties": {
"k6": {
"$ref": "https://github.com/foomo/posh-providers/grafana/k6"
}
}
}
]
}

View File

@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://github.com/foomo/posh-providers/grafana/k6/config",
"$id": "https://github.com/foomo/posh-providers/grafana/k6",
"$ref": "#/$defs/Config",
"$defs": {
"Config": {

View File

@ -25,6 +25,7 @@ func TestConfig(t *testing.T) {
reflector := new(jsonschema.Reflector)
require.NoError(t, reflector.AddGoComments("github.com/foomo/posh-providers/grafana/k6", "./"))
schema := reflector.Reflect(&k6.Config{})
schema.ID = "https://github.com/foomo/posh-providers/grafana/k6"
actual, err := json.MarshalIndent(schema, "", " ")
require.NoError(t, err)

View File

@ -0,0 +1,12 @@
{
"allOf": [
{
"type": "object",
"properties": {
"teleport": {
"$ref": "https://github.com/foomo/posh-providers/gravitational/teleport"
}
}
}
]
}

View File

@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://github.com/foomo/posh-providers/gravitational/teleport/config",
"$id": "https://github.com/foomo/posh-providers/gravitational/teleport",
"$ref": "#/$defs/Config",
"$defs": {
"Config": {

View File

@ -25,6 +25,7 @@ func TestConfig(t *testing.T) {
reflector := new(jsonschema.Reflector)
require.NoError(t, reflector.AddGoComments("github.com/foomo/posh-providers/gravitational/teleport", "./"))
schema := reflector.Reflect(&teleport.Config{})
schema.ID = "https://github.com/foomo/posh-providers/gravitational/teleport"
actual, err := json.MarshalIndent(schema, "", " ")
require.NoError(t, err)

View File

@ -0,0 +1,12 @@
{
"allOf": [
{
"type": "object",
"properties": {
"terragrunt": {
"$ref": "https://github.com/foomo/posh-providers/gruntwork-io/terragrunt"
}
}
}
]
}

View File

@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://github.com/foomo/posh-providers/gruntwork-io/terragrunt/config",
"$id": "https://github.com/foomo/posh-providers/gruntwork-io/terragrunt",
"$ref": "#/$defs/Config",
"$defs": {
"Config": {

View File

@ -25,6 +25,7 @@ func TestConfig(t *testing.T) {
reflector := new(jsonschema.Reflector)
require.NoError(t, reflector.AddGoComments("github.com/foomo/posh-providers/gruntwork-io/terragrunt", "./"))
schema := reflector.Reflect(&terragrunt.Config{})
schema.ID = "https://github.com/foomo/posh-providers/gruntwork-io/terragrunt"
actual, err := json.MarshalIndent(schema, "", " ")
require.NoError(t, err)

View File

@ -0,0 +1,12 @@
{
"allOf": [
{
"type": "object",
"properties": {
"cdktf": {
"$ref": "https://github.com/foomo/posh-providers/hashicorp/cdktf"
}
}
}
]
}

View File

@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://github.com/foomo/posh-providers/hashicorp/cdktf/config",
"$id": "https://github.com/foomo/posh-providers/hashicorp/cdktf",
"$ref": "#/$defs/Config",
"$defs": {
"Config": {

View File

@ -25,6 +25,7 @@ func TestConfig(t *testing.T) {
reflector := new(jsonschema.Reflector)
require.NoError(t, reflector.AddGoComments("github.com/foomo/posh-providers/hashicorp/cdktf", "./"))
schema := reflector.Reflect(&cdktf.Config{})
schema.ID = "https://github.com/foomo/posh-providers/hashicorp/cdktf"
actual, err := json.MarshalIndent(schema, "", " ")
require.NoError(t, err)

View File

@ -0,0 +1,12 @@
{
"allOf": [
{
"type": "object",
"properties": {
"hygen": {
"$ref": "https://github.com/foomo/posh-providers/jondot/hygen"
}
}
}
]
}

View File

@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://github.com/foomo/posh-providers/jondot/hygen/config",
"$id": "https://github.com/foomo/posh-providers/jondot/hygen",
"$ref": "#/$defs/Config",
"$defs": {
"Config": {

View File

@ -25,6 +25,7 @@ func TestConfig(t *testing.T) {
reflector := new(jsonschema.Reflector)
require.NoError(t, reflector.AddGoComments("github.com/foomo/posh-providers/jondot/hygen", "./"))
schema := reflector.Reflect(&hygen.Config{})
schema.ID = "https://github.com/foomo/posh-providers/jondot/hygen"
actual, err := json.MarshalIndent(schema, "", " ")
require.NoError(t, err)

View File

@ -0,0 +1,12 @@
{
"allOf": [
{
"type": "object",
"properties": {
"k3d": {
"$ref": "https://github.com/foomo/posh-providers/k3d-io/k3d"
}
}
}
]
}

View File

@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://github.com/foomo/posh-providers/k3d-io/k3d/config",
"$id": "https://github.com/foomo/posh-providers/k3d-io/k3d",
"$ref": "#/$defs/Config",
"$defs": {
"Config": {

View File

@ -25,6 +25,7 @@ func TestConfig(t *testing.T) {
reflector := new(jsonschema.Reflector)
require.NoError(t, reflector.AddGoComments("github.com/foomo/posh-providers/k3d-io/k3d", "./"))
schema := reflector.Reflect(&k3d.Config{})
schema.ID = "https://github.com/foomo/posh-providers/k3d-io/k3d"
actual, err := json.MarshalIndent(schema, "", " ")
require.NoError(t, err)

View File

@ -0,0 +1,12 @@
{
"allOf": [
{
"type": "object",
"properties": {
"kubectl": {
"$ref": "https://github.com/foomo/posh-providers/kubernetes/kubectl"
}
}
}
]
}

View File

@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://github.com/foomo/posh-providers/kubernets/kubectl/config",
"$id": "https://github.com/foomo/posh-providers/kubernetes/kubectl",
"$ref": "#/$defs/Config",
"$defs": {
"Config": {

View File

@ -25,6 +25,7 @@ func TestConfig(t *testing.T) {
reflector := new(jsonschema.Reflector)
require.NoError(t, reflector.AddGoComments("github.com/foomo/posh-providers/kubernets/kubectl", "./"))
schema := reflector.Reflect(&kubectl.Config{})
schema.ID = "https://github.com/foomo/posh-providers/kubernetes/kubectl"
actual, err := json.MarshalIndent(schema, "", " ")
require.NoError(t, err)

View File

@ -0,0 +1,12 @@
{
"allOf": [
{
"type": "object",
"properties": {
"kubeforward": {
"$ref": "https://github.com/foomo/posh-providers/kubernetes/kubeforward"
}
}
}
]
}

View File

@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://github.com/foomo/posh-providers/kubernets/kubeforward/config",
"$id": "https://github.com/foomo/posh-providers/kubernetes/kubeforward",
"$ref": "#/$defs/Config",
"$defs": {
"Config": {

View File

@ -25,6 +25,7 @@ func TestConfig(t *testing.T) {
reflector := new(jsonschema.Reflector)
require.NoError(t, reflector.AddGoComments("github.com/foomo/posh-providers/kubernets/kubeforward", "./"))
schema := reflector.Reflect(&kubeforward.Config{})
schema.ID = "https://github.com/foomo/posh-providers/kubernetes/kubeforward"
actual, err := json.MarshalIndent(schema, "", " ")
require.NoError(t, err)

View File

@ -0,0 +1,12 @@
{
"allOf": [
{
"type": "object",
"properties": {
"op": {
"$ref": "https://github.com/foomo/posh-providers/onepassword/op"
}
}
}
]
}

View File

@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://github.com/foomo/posh-providers/onepassword/config",
"$id": "https://github.com/foomo/posh-providers/onepassword/op",
"$ref": "#/$defs/Config",
"$defs": {
"Config": {

View File

@ -25,6 +25,7 @@ func TestConfig(t *testing.T) {
reflector := new(jsonschema.Reflector)
require.NoError(t, reflector.AddGoComments("github.com/foomo/posh-providers/onepassword", "./"))
schema := reflector.Reflect(&onepassword.Config{})
schema.ID = "https://github.com/foomo/posh-providers/onepassword/op"
actual, err := json.MarshalIndent(schema, "", " ")
require.NoError(t, err)

View File

@ -0,0 +1,12 @@
{
"allOf": [
{
"type": "object",
"properties": {
"licensefinder": {
"$ref": "https://github.com/foomo/posh-providers/pivotal/licensefinder"
}
}
}
]
}

View File

@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://github.com/foomo/posh-providers/pivotal/licensefinder/config",
"$id": "https://github.com/foomo/posh-providers/pivotal/licensefinder",
"$ref": "#/$defs/Config",
"$defs": {
"Config": {

View File

@ -25,6 +25,7 @@ func TestConfig(t *testing.T) {
reflector := new(jsonschema.Reflector)
require.NoError(t, reflector.AddGoComments("github.com/foomo/posh-providers/pivotal/licensefinder", "./"))
schema := reflector.Reflect(&licensefinder.Config{})
schema.ID = "https://github.com/foomo/posh-providers/pivotal/licensefinder"
actual, err := json.MarshalIndent(schema, "", " ")
require.NoError(t, err)

3
posh.example.yaml Normal file
View File

@ -0,0 +1,3 @@
# yaml-language-server: $schema=posh.schema.json
version: 'v1.0'

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://github.com/foomo/posh-providers/pulumi/pulumi/azure/config",
"$id": "https://github.com/foomo/posh-providers/pulumi/pulumi/azure",
"$ref": "#/$defs/Config",
"$defs": {
"Backend": {

View File

@ -25,6 +25,7 @@ func TestConfig(t *testing.T) {
reflector := new(jsonschema.Reflector)
require.NoError(t, reflector.AddGoComments("github.com/foomo/posh-providers/pulumi/pulumi/azure", "./"))
schema := reflector.Reflect(&pulumi.Config{})
schema.ID = "https://github.com/foomo/posh-providers/pulumi/pulumi/azure"
actual, err := json.MarshalIndent(schema, "", " ")
require.NoError(t, err)

View File

@ -0,0 +1,19 @@
{
"allOf": [
{
"type": "object",
"properties": {
"az": {
"oneOf": [
{
"$ref": "https://github.com/foomo/posh-providers/pulumi/pulumi/azure"
},
{
"$ref": "https://github.com/foomo/posh-providers/pulumi/pulumi/gcloud"
}
]
}
}
}
]
}

View File

@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://github.com/foomo/posh-providers/pulumi/pulumi/gcloud/config",
"$id": "https://github.com/foomo/posh-providers/pulumi/pulumi/gcloud",
"$ref": "#/$defs/Config",
"$defs": {
"Backend": {

View File

@ -25,6 +25,7 @@ func TestConfig(t *testing.T) {
reflector := new(jsonschema.Reflector)
require.NoError(t, reflector.AddGoComments("github.com/foomo/posh-providers/pulumi/pulumi/gcloud", "./"))
schema := reflector.Reflect(&pulumi.Config{})
schema.ID = "https://github.com/foomo/posh-providers/pulumi/pulumi/gcloud"
actual, err := json.MarshalIndent(schema, "", " ")
require.NoError(t, err)

View File

@ -0,0 +1,12 @@
{
"allOf": [
{
"type": "object",
"properties": {
"rclone": {
"$ref": "https://github.com/foomo/posh-providers/rclone/rclone"
}
}
}
]
}

View File

@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://github.com/foomo/posh-providers/rclone/rclone/config",
"$id": "https://github.com/foomo/posh-providers/rclone/rclone",
"$ref": "#/$defs/Config",
"$defs": {
"Config": {

View File

@ -25,6 +25,7 @@ func TestConfig(t *testing.T) {
reflector := new(jsonschema.Reflector)
require.NoError(t, reflector.AddGoComments("github.com/foomo/posh-providers/rclone/rclone", "./"))
schema := reflector.Reflect(&rclone.Config{})
schema.ID = "https://github.com/foomo/posh-providers/rclone/rclone"
actual, err := json.MarshalIndent(schema, "", " ")
require.NoError(t, err)

Some files were not shown because too many files have changed in this diff Show More