Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
57995df
Add credential, role, schedule, and capability construct schemas with…
marblom007 Mar 17, 2026
965fd1d
Address PR review feedback
marblom007 Mar 17, 2026
06a8abf
Merge branch 'master' into add-credential-role-schedule-models
leecalcote Mar 17, 2026
3e6a8ce
refactor of code generator
leecalcote Mar 18, 2026
4031549
enhance helpers
leecalcote Mar 18, 2026
fc39486
enhance helpers
leecalcote Mar 18, 2026
d875206
refactor
leecalcote Mar 18, 2026
cf896e0
Merge branch 'add-credential-role-schedule-models' of https://github.…
leecalcote Mar 18, 2026
c13a2b4
Create validation-package.md for schema validation design
leecalcote Mar 14, 2026
288e9ef
Add credential, role, schedule, and capability construct schemas with…
marblom007 Mar 17, 2026
9d5a844
Address PR review feedback
marblom007 Mar 17, 2026
f64ba70
refactor of code generator
leecalcote Mar 18, 2026
82ccc3c
enhance helpers
leecalcote Mar 18, 2026
1419357
enhance helpers
leecalcote Mar 18, 2026
55d22c7
refactor
leecalcote Mar 18, 2026
400dc5b
Bump minimatch from 10.1.1 to 10.2.4
dependabot[bot] Mar 12, 2026
b8db6a9
Generate build artifacts from schemas
fitzergerald Mar 15, 2026
35671ec
Update OpenAPI docs path in workflow configuration
CodexRaunak Mar 15, 2026
f661456
Update OpenAPI schemas to include versioning, descriptions, and conta…
fitzergerald Mar 16, 2026
16f5cee
Generate build artifacts from schemas
leecalcote Mar 16, 2026
bc01ad6
Update schema
fitzergerald Mar 16, 2026
52a1400
Merge branch 'add-credential-role-schedule-models' of https://github.…
marblom007 Mar 18, 2026
4c8d99b
incorporate review feedback
marblom007 Mar 18, 2026
80765c5
generated build
marblom007 Mar 18, 2026
ca79cc2
ensure db: persistence
marblom007 Mar 18, 2026
b52964e
generate-golang enhancement
marblom007 Mar 18, 2026
672017a
regenerate models
marblom007 Mar 18, 2026
b1b124f
Potential fix for pull request finding
fitzergerald Mar 18, 2026
d6dabb1
avoiding pointer-to-copy pattern
fitzergerald Mar 18, 2026
698031f
Merge branch 'add-credential-role-schedule-models' of https://github.…
fitzergerald Mar 18, 2026
c2d3e37
add skills; regenerate code
fitzergerald Mar 18, 2026
8443a2d
Fix generator regressions from PR review
fitzergerald Mar 18, 2026
8bb054c
Handle composed schema tag inheritance in Go generator
fitzergerald Mar 18, 2026
a5056df
Remove coding agent and skill-related files from this PR
fitzergerald Mar 18, 2026
ed6dc8d
Address remaining PR review feedback
fitzergerald Mar 18, 2026
f1040c7
Add relationship compatibility aliases
fitzergerald Mar 18, 2026
397e333
Restore explicit Go type aliases for generated schemas
fitzergerald Mar 18, 2026
1271434
Move OpenAPI schema skill into separate PR
fitzergerald Mar 18, 2026
bc489e4
Simplify model version schema ref
fitzergerald Mar 18, 2026
7b717ec
Refactor and generate helper methods for various models; remove depre…
fitzergerald Mar 18, 2026
1de84b9
Fix remaining PR review issues
fitzergerald Mar 18, 2026
bb77ef4
Fix Go generator schema tag overrides for component modelId
miacycle Mar 18, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1,011 changes: 988 additions & 23 deletions build/generate-golang.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion build/generate-typescript.js
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ async function generateTypescriptTypes(pkg) {
` */\n\n` +
`const ${pascalName}Schema = ` +
jsonContent +
` as const;\n\nexport default ${pascalName}Schema;\n`;
` as const satisfies Record<string, unknown>;\n\nexport default ${pascalName}Schema;\n`;
fs.writeFileSync(jsonOutputPath, tsContent, "utf-8");
logger.success(`Generated: ${jsonOutputPath}`);
} catch (err) {
Expand Down
192 changes: 192 additions & 0 deletions build/lib/generated-go-helpers.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,192 @@
const fs = require("fs");
const path = require("path");

const GENERATED_HELPER_SPECS = {
"v1beta1/academy": {
mapStructTypes: ["Quiz", "QuizSubmission", "QuizEvaluationResult"],
},
"v1beta1/connection": {
eventCategories: {
Connection: "connection",
MesheryInstance: "connection",
},
},
"v1beta1/credential": {
eventCategories: {
Credential: "credential",
},
},
"v1beta1/environment": {
eventCategories: {
Environment: "environment",
},
},
"v1beta1/key": {
eventCategories: {
Key: "key",
},
},
"v1beta1/keychain": {
eventCategories: {
Keychain: "keychain",
},
},
"v1beta1/organization": {
eventCategories: {
Organization: "organization",
},
jsonTypes: ["OrgMetadata"],
},
"v1beta1/plan": {
eventCategories: {
Plan: "plan",
},
},
"v1beta1/role": {
eventCategories: {
Role: "role",
},
},
"v1beta1/schedule": {
eventCategories: {
Schedule: "schedule",
},
},
"v1beta1/subscription": {
eventCategories: {
Subscription: "subscription",
},
},
"v1beta1/team": {
eventCategories: {
Team: "team",
},
},
"v1beta1/user": {
eventCategories: {
User: "user",
},
mapStructTypes: ["Preference"],
},
};

function renderEventCategoryMethods(eventCategories) {
return Object.entries(eventCategories)
.map(
([typeName, eventCategory]) => `func (*${typeName}) EventCategory() string {
\treturn ${JSON.stringify(eventCategory)}
}`,
)
.join("\n\n");
}

function renderMapStructMethods(typeName) {
return `func (value *${typeName}) Scan(src interface{}) error {
\tif src == nil {
\t\t*value = ${typeName}{}
\t\treturn nil
\t}

\tmapVal := core.Map{}
\tif err := mapVal.Scan(src); err != nil {
\t\treturn err
\t}

\treturn core.MapToStruct(mapVal, value)
}

func (value ${typeName}) Value() (driver.Value, error) {
\tmapVal, err := core.StructToMap(value)
\tif err != nil {
\t\treturn nil, err
\t}

\treturn core.Map(mapVal).Value()
}`;
}

function renderJsonMethods(typeName) {
return `func (value *${typeName}) Scan(src interface{}) error {
\tif src == nil {
\t\t*value = ${typeName}{}
\t\treturn nil
\t}

\tdata, err := utils.Cast[[]byte](src)
\tif err != nil {
\t\treturn err
\t}

\tif err := json.Unmarshal(data, value); err != nil {
\t\treturn utils.ErrUnmarshal(err)
\t}

\treturn nil
}

func (value ${typeName}) Value() (driver.Value, error) {
\tmarshaledValue, err := json.Marshal(value)
\tif err != nil {
\t\treturn nil, utils.ErrMarshal(err)
\t}

\treturn marshaledValue, nil
}`;
}

function renderGeneratedHelperFile(pkg, spec) {
const imports = new Map();
const sections = [];

if (spec.mapStructTypes?.length) {
imports.set("database/sql/driver", null);
imports.set("github.com/meshery/schemas/models/core", "core");
sections.push(spec.mapStructTypes.map(renderMapStructMethods).join("\n\n"));
}

if (spec.jsonTypes?.length) {
imports.set("database/sql/driver", null);
imports.set("encoding/json", null);
imports.set("github.com/meshery/meshkit/utils", null);
sections.push(spec.jsonTypes.map(renderJsonMethods).join("\n\n"));
}

if (spec.eventCategories && Object.keys(spec.eventCategories).length > 0) {
sections.push(renderEventCategoryMethods(spec.eventCategories));
}

if (sections.length === 0) {
return null;
}

const importBlock = imports.size
? `import (\n${[...imports.entries()]
.sort(([left], [right]) => left.localeCompare(right))
.map(([importPath, alias]) =>
alias ? `\t${alias} ${JSON.stringify(importPath)}` : `\t${JSON.stringify(importPath)}`,
)
.join("\n")}\n)\n\n`
: "";

return `// Code generated by build/generate-golang.js; DO NOT EDIT.\npackage ${pkg.name}\n\n${importBlock}${sections.join("\n\n")}\n`;
}

function writeGeneratedHelperFile(pkg, outputDir) {
const spec = GENERATED_HELPER_SPECS[`${pkg.version}/${pkg.dirName}`];
if (!spec) {
return null;
}

const filePath = path.join(outputDir, "zz_generated.helpers.go");
const content = renderGeneratedHelperFile(pkg, spec);
if (!content) {
return null;
}

fs.writeFileSync(filePath, content, "utf-8");
return filePath;
}

module.exports = {
writeGeneratedHelperFile,
};
26 changes: 4 additions & 22 deletions build/openapi.config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,9 @@
# oapi-codegen --config build/openapi.config.yml --package <pkg> -o <output> <input>
#
# IMPORT MAPPINGS:
# Maps schema $ref paths to Go import paths, enabling proper cross-package
# references when schemas reference other schemas.
# The automated Go generator augments this config with per-package import
# mappings derived from reachable external $ref targets. Keep this base
# mapping block empty unless a global fallback is required.
#
# NOTE:
# This file is used by generate-golang.sh. For schema-specific overrides,
Expand All @@ -26,26 +27,7 @@
# yaml-language-server: $schema=https://raw.githubusercontent.com/oapi-codegen/oapi-codegen/HEAD/configuration-schema.json
package: v1beta1

import-mapping:
"./core.yml": "github.com/meshery/schemas/models/core"
"./common/core.yml": "github.com/meshery/schemas/models/core"
"../../core.json": "github.com/meshery/schemas/models/core"
"./common/parameters.yml": "github.com/meshery/schemas/models/core"

# v1alpha1
"../v1alpha1/capability/capability.json": "github.com/meshery/schemas/models/v1alpha1/capability"
"../v1alpha1/catalog_data.json": "github.com/meshery/schemas/models/v1alpha1/catalog_data"

# v1alpha3
"../v1alpha3/relationship/relationship.json": "github.com/meshery/schemas/models/v1alpha3/relationship"
"../v1alpha3/selector/selector.json": "github.com/meshery/schemas/models/v1alpha3/selector"

# v1beta1
"../v1beta1/model.json": "github.com/meshery/schemas/models/v1beta1/model"
"../v1beta1/component.json": "github.com/meshery/schemas/models/v1beta1/component"
"../v1beta1/connection.json": "github.com/meshery/schemas/models/v1beta1/connection"
"../v1beta1/design.json": "github.com/meshery/schemas/models/v1beta1/design"
# "../v1beta1/credential.json": "github.com/meshery/schemas/models/v1beta1/credential"
import-mapping: {}
generate:
models: true
output-options:
Expand Down
39 changes: 17 additions & 22 deletions models/v1alpha1/capability/capability.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading