in cmd/create_package.go [44:220]
func createPackageCommandAction(cmd *cobra.Command, args []string) error {
cmd.Println("Create a new package")
qs := []*survey.Question{
{
Name: "type",
Prompt: &survey.Select{
Message: "Package type:",
Options: []string{"input", "integration", "content"},
Default: "integration",
},
Validate: survey.Required,
},
}
var answers newPackageAnswers
err := survey.Ask(qs, &answers)
if err != nil {
return fmt.Errorf("prompt failed: %w", err)
}
qs = []*survey.Question{
{
Name: "name",
Prompt: &survey.Input{
Message: "Package name:",
Default: "new_package",
},
Validate: survey.ComposeValidators(survey.Required, surveyext.PackageDoesNotExistValidator, surveyext.PackageNameValidator),
},
{
Name: "version",
Prompt: &survey.Input{
Message: "Version:",
Default: "0.0.1",
},
Validate: survey.ComposeValidators(survey.Required, surveyext.SemverValidator),
},
{
Name: "source_license",
Prompt: &survey.Select{
Message: "License:",
Options: []string{
licenses.Elastic20,
licenses.Apache20,
noLicenseValue,
},
Description: func(value string, _ int) string {
if value == noLicenseValue {
return noLicenseOnCreationMessage
}
return ""
},
Default: licenses.Elastic20,
},
},
{
Name: "title",
Prompt: &survey.Input{
Message: "Package title:",
Default: "New Package",
},
Validate: survey.Required,
},
{
Name: "description",
Prompt: &survey.Input{
Message: "Description:",
Default: "This is a new package.",
},
Validate: survey.Required,
},
{
Name: "categories",
Prompt: &survey.MultiSelect{
Message: "Categories:",
Options: []string{"aws", "azure", "cloud", "config_management", "containers", "crm", "custom",
"datastore", "elastic_stack", "google_cloud", "kubernetes", "languages", "message_queue",
"monitoring", "network", "notification", "os_system", "productivity", "security", "support",
"ticketing", "version_control", "web"},
Default: []string{"custom"},
PageSize: 50,
},
Validate: survey.Required,
},
{
Name: "kibana_version",
Prompt: &survey.Input{
Message: "Kibana version constraint:",
Default: surveyext.DefaultKibanaVersionConditionValue(),
},
Validate: survey.ComposeValidators(survey.Required, surveyext.ConstraintValidator),
},
{
Name: "elastic_subscription",
Prompt: &survey.Select{
Message: "Required Elastic subscription:",
Options: []string{"basic", "gold", "platinum", "enterprise"},
Default: "basic",
},
Validate: survey.Required,
},
{
Name: "github_owner",
Prompt: &survey.Input{
Message: "Github owner:",
Default: "elastic/integrations",
},
Validate: survey.ComposeValidators(survey.Required, surveyext.GithubOwnerValidator),
},
{
Name: "owner_type",
Prompt: &survey.Select{
Message: "Owner type:",
Options: []string{"elastic", "partner", "community"},
Description: func(value string, _ int) string {
switch value {
case "elastic":
return "Owned and supported by Elastic"
case "partner":
return "Vendor-owned with support from Elastic"
case "community":
return "Supported by the community"
}
return ""
},
Default: "elastic",
},
Validate: survey.Required,
},
}
if answers.Type == "input" {
inputQs := []*survey.Question{
{
Name: "datastream_type",
Prompt: &survey.Select{
Message: "Input Data Stream type:",
Options: []string{"logs", "metrics"},
Default: "logs",
},
Validate: survey.Required,
},
{
Name: "subobjects",
Prompt: &survey.Confirm{
Message: "Enable creation of subobjects for fields with dots in their names?",
Default: false,
},
Validate: survey.Required,
},
}
qs = append(qs, inputQs...)
}
err = survey.Ask(qs, &answers)
if err != nil {
return fmt.Errorf("prompt failed: %w", err)
}
descriptor := createPackageDescriptorFromAnswers(answers)
specVersion, err := archetype.GetLatestStableSpecVersion()
if err != nil {
return fmt.Errorf("failed to get spec version: %w", err)
}
descriptor.Manifest.SpecVersion = specVersion.String()
err = archetype.CreatePackage(descriptor)
if err != nil {
return fmt.Errorf("can't create new package: %w", err)
}
cmd.Println("Done")
return nil
}