### Summary: Generates a json schema for valid GitOps yaml files, to be used with [yaml-language-server](https://github.com/redhat-developer/yaml-language-server) for IDE integration. This PR includes the actual generated file, so it can be used without running the tool. All files are in `/tools/gitops-autto-complete`, so nothing else gets affected. #### What it adds: - Complete json schema that defines valid GitOps yaml files and can be integrated with [yaml-language-server](https://github.com/redhat-developer/yaml-language-server). - Auto-completion, error checking, type checking, descriptions. - Defines all keys for osquery options/flags (based on `server/fleet/agent_options_generated.go`). - Additional validation: required keys, strings that must be enclosed in quotation marks, path support. - Additional data: descriptions from code comments, notices for fields that don't reset if null or empty. #### Limitations: - Some structs and data are duplicated into the tool and will inevitebly mismatch over time, because the structs used for gitops are not sufficient for the schema generation: - Some fields use an interface/any type that so can't be used for the schema generation. - Some important details are not encoded in the type or struct tags for gitops fields at all. - Some details (like required fields) are encoded in the Validate() interface, but the IDE integration cannot run Go code. - Doesn't work with all yaml file types used for gitops (like a yaml file that specifies multiple software packages), only the default/fleet level files. This will require having a subsection of the schema for each type of file, and some way to detect what it actually is (maybe specifying the schema in the file itself). - Requires manual setup to integrate with IDE, it's not an easy to use extension currently. #### Dependencies: - `invopop/jsonschema` reflects Fleet's GitOps structs into the schema. - `santhosh-tekuri/jsonschema/v6` validates the test fixtures against that schema. - `ghodss/yaml` decodes the fixture YAML the way fleetctl does. https://github.com/user-attachments/assets/b6ffacd0-e602-41a2-b46a-7d10300c6ea5 ## Testing - [x] QA'd all new/changed functionality manually - I have been using and working on this for the past week so it's in a pretty good state, but some descriptions or keys are probably still missing. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Added GitOps YAML auto-completion powered by a comprehensive JSON Schema. * Added validation for GitOps configuration structure, supported fields, data types, required combinations, and unknown keys. * Added support for external file references using `path` and `paths` in supported sections. * Added clearer guidance for deprecated fields and special field behaviors. * **Bug Fixes** * Improved detection of incorrectly typed values and invalid configuration shapes. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
154 lines
7.4 KiB
AMPL
154 lines
7.4 KiB
AMPL
module fleetdm.local/gitops-auto-complete
|
|
|
|
go 1.26.5
|
|
|
|
require (
|
|
github.com/fleetdm/fleet/v4 v4.0.0
|
|
github.com/ghodss/yaml v1.0.0
|
|
github.com/invopop/jsonschema v0.14.0
|
|
github.com/santhosh-tekuri/jsonschema/v6 v6.0.2
|
|
)
|
|
|
|
require (
|
|
cloud.google.com/go v0.123.0 // indirect
|
|
cloud.google.com/go/auth v0.18.2 // indirect
|
|
cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect
|
|
cloud.google.com/go/compute/metadata v0.9.0 // indirect
|
|
cloud.google.com/go/iam v1.5.3 // indirect
|
|
cloud.google.com/go/pubsub v1.50.1 // indirect
|
|
cloud.google.com/go/pubsub/v2 v2.0.0 // indirect
|
|
filippo.io/edwards25519 v1.2.0 // indirect
|
|
github.com/Azure/go-ntlmssp v0.1.1 // indirect
|
|
github.com/Masterminds/semver/v3 v3.5.0 // indirect
|
|
github.com/agnivade/levenshtein v1.2.1 // indirect
|
|
github.com/andygrunwald/go-jira v1.16.0 // indirect
|
|
github.com/armon/go-radix v1.0.0 // indirect
|
|
github.com/aws/aws-sdk-go-v2 v1.41.5 // indirect
|
|
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.8 // indirect
|
|
github.com/aws/aws-sdk-go-v2/config v1.32.12 // indirect
|
|
github.com/aws/aws-sdk-go-v2/credentials v1.19.12 // indirect
|
|
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.20 // indirect
|
|
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.21 // indirect
|
|
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.21 // indirect
|
|
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.6 // indirect
|
|
github.com/aws/aws-sdk-go-v2/service/firehose v1.37.7 // indirect
|
|
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.7 // indirect
|
|
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.21 // indirect
|
|
github.com/aws/aws-sdk-go-v2/service/kinesis v1.43.5 // indirect
|
|
github.com/aws/aws-sdk-go-v2/service/lambda v1.88.5 // indirect
|
|
github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.35.8 // indirect
|
|
github.com/aws/aws-sdk-go-v2/service/signin v1.0.8 // indirect
|
|
github.com/aws/aws-sdk-go-v2/service/sso v1.30.13 // indirect
|
|
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.17 // indirect
|
|
github.com/aws/aws-sdk-go-v2/service/sts v1.41.9 // indirect
|
|
github.com/aws/smithy-go v1.24.2 // indirect
|
|
github.com/bahlo/generic-list-go v0.2.0 // indirect
|
|
github.com/bmatcuk/doublestar/v4 v4.10.0 // indirect
|
|
github.com/buger/jsonparser v1.1.2 // indirect
|
|
github.com/cenkalti/backoff v2.2.1+incompatible // indirect
|
|
github.com/cenkalti/backoff/v4 v4.3.0 // indirect
|
|
github.com/cespare/xxhash/v2 v2.3.0 // indirect
|
|
github.com/docker/go-units v0.5.0 // indirect
|
|
github.com/elastic/go-sysinfo v1.11.2 // indirect
|
|
github.com/elastic/go-windows v1.0.1 // indirect
|
|
github.com/expr-lang/expr v1.17.7 // indirect
|
|
github.com/fatih/color v1.16.0 // indirect
|
|
github.com/fatih/structs v1.1.0 // indirect
|
|
github.com/felixge/httpsnoop v1.0.4 // indirect
|
|
github.com/fsnotify/fsnotify v1.9.0 // indirect
|
|
github.com/getsentry/sentry-go v0.18.0 // indirect
|
|
github.com/go-json-experiment/json v0.0.0-20260214004413-d219187c3433 // indirect
|
|
github.com/go-kit/kit v0.12.0 // indirect
|
|
github.com/go-kit/log v0.2.1 // indirect
|
|
github.com/go-logfmt/logfmt v0.5.1 // indirect
|
|
github.com/go-logr/logr v1.4.3 // indirect
|
|
github.com/go-logr/stdr v1.2.2 // indirect
|
|
github.com/go-sql-driver/mysql v1.9.3 // indirect
|
|
github.com/go-viper/mapstructure/v2 v2.4.0 // indirect
|
|
github.com/golang-jwt/jwt/v4 v4.5.2 // indirect
|
|
github.com/golang/snappy v0.0.4 // indirect
|
|
github.com/gomodule/oauth1 v0.2.0 // indirect
|
|
github.com/gomodule/redigo v1.8.9 // indirect
|
|
github.com/google/go-querystring v1.1.0 // indirect
|
|
github.com/google/s2a-go v0.1.9 // indirect
|
|
github.com/google/uuid v1.6.0 // indirect
|
|
github.com/googleapis/enterprise-certificate-proxy v0.3.12 // indirect
|
|
github.com/googleapis/gax-go/v2 v2.17.0 // indirect
|
|
github.com/gorilla/mux v1.8.1 // indirect
|
|
github.com/gorilla/websocket v1.5.1 // indirect
|
|
github.com/groob/finalizer v0.0.0-20170707115354-4c2ed49aabda // indirect
|
|
github.com/hashicorp/errwrap v1.1.0 // indirect
|
|
github.com/hashicorp/go-multierror v1.1.1 // indirect
|
|
github.com/igm/sockjs-go/v3 v3.0.2 // indirect
|
|
github.com/inconshreveable/mousetrap v1.1.0 // indirect
|
|
github.com/jmoiron/sqlx v1.3.5 // indirect
|
|
github.com/joeshaw/multierror v0.0.0-20140124173710-69b34d4ec901 // indirect
|
|
github.com/klauspost/compress v1.18.6 // indirect
|
|
github.com/mattn/go-colorable v0.1.13 // indirect
|
|
github.com/mattn/go-isatty v0.0.20 // indirect
|
|
github.com/micromdm/micromdm v1.9.0 // indirect
|
|
github.com/micromdm/nanolib v0.2.0 // indirect
|
|
github.com/micromdm/plist v0.2.3-0.20260123201933-667adaf87d87 // indirect
|
|
github.com/mna/redisc v1.3.2 // indirect
|
|
github.com/nats-io/nats.go v1.49.0 // indirect
|
|
github.com/nats-io/nkeys v0.4.15 // indirect
|
|
github.com/nats-io/nuid v1.0.1 // indirect
|
|
github.com/nukosuke/go-zendesk v0.13.1 // indirect
|
|
github.com/oschwald/geoip2-golang v1.8.0 // indirect
|
|
github.com/oschwald/maxminddb-golang v1.10.0 // indirect
|
|
github.com/pb33f/ordered-map/v2 v2.3.1 // indirect
|
|
github.com/pelletier/go-toml/v2 v2.2.4 // indirect
|
|
github.com/pkg/errors v0.9.1 // indirect
|
|
github.com/prometheus/procfs v0.15.1 // indirect
|
|
github.com/realclientip/realclientip-go v1.0.0 // indirect
|
|
github.com/rs/zerolog v1.32.0 // indirect
|
|
github.com/sagikazarmark/locafero v0.11.0 // indirect
|
|
github.com/smallstep/pkcs7 v0.0.0-20240723090913-5e2c6a136dfa // indirect
|
|
github.com/smallstep/scep v0.0.0-20240214080410-892e41795b99 // indirect
|
|
github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 // indirect
|
|
github.com/spf13/afero v1.15.0 // indirect
|
|
github.com/spf13/cast v1.10.0 // indirect
|
|
github.com/spf13/cobra v1.10.2 // indirect
|
|
github.com/spf13/pflag v1.0.10 // indirect
|
|
github.com/spf13/viper v1.21.0 // indirect
|
|
github.com/subosito/gotenv v1.6.0 // indirect
|
|
github.com/throttled/throttled/v2 v2.8.0 // indirect
|
|
github.com/trivago/tgo v1.0.7 // indirect
|
|
go.elastic.co/apm/v2 v2.7.0 // indirect
|
|
go.elastic.co/fastjson v1.1.0 // indirect
|
|
go.mozilla.org/pkcs7 v0.9.0 // indirect
|
|
go.opencensus.io v0.24.0 // indirect
|
|
go.opentelemetry.io/auto/sdk v1.2.1 // indirect
|
|
go.opentelemetry.io/contrib/bridges/otelslog v0.15.0 // indirect
|
|
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0 // indirect
|
|
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 // indirect
|
|
go.opentelemetry.io/otel v1.43.0 // indirect
|
|
go.opentelemetry.io/otel/log v0.16.0 // indirect
|
|
go.opentelemetry.io/otel/metric v1.43.0 // indirect
|
|
go.opentelemetry.io/otel/sdk v1.43.0 // indirect
|
|
go.opentelemetry.io/otel/trace v1.43.0 // indirect
|
|
go.yaml.in/yaml/v3 v3.0.4 // indirect
|
|
go.yaml.in/yaml/v4 v4.0.0-rc.2 // indirect
|
|
golang.org/x/crypto v0.52.0 // indirect
|
|
golang.org/x/image v0.42.0 // indirect
|
|
golang.org/x/net v0.55.0 // indirect
|
|
golang.org/x/oauth2 v0.35.0 // indirect
|
|
golang.org/x/sync v0.21.0 // indirect
|
|
golang.org/x/sys v0.45.0 // indirect
|
|
golang.org/x/text v0.38.0 // indirect
|
|
golang.org/x/time v0.15.0 // indirect
|
|
google.golang.org/api v0.269.0 // indirect
|
|
google.golang.org/genproto v0.0.0-20260128011058-8636f8732409 // indirect
|
|
google.golang.org/genproto/googleapis/api v0.0.0-20260203192932-546029d2fa20 // indirect
|
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20260319201613-d00831a3d3e7 // indirect
|
|
google.golang.org/grpc v1.79.3 // indirect
|
|
google.golang.org/protobuf v1.36.11 // indirect
|
|
gopkg.in/guregu/null.v3 v3.5.0 // indirect
|
|
gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect
|
|
gopkg.in/yaml.v2 v2.4.0 // indirect
|
|
howett.net/plist v1.0.1 // indirect
|
|
software.sslmate.com/src/go-pkcs12 v0.7.1 // indirect
|
|
)
|
|
|
|
replace github.com/fleetdm/fleet/v4 => ../..
|