func createPackageInDir()

in internal/packages/archetype/package.go [32:113]


func createPackageInDir(packageDescriptor PackageDescriptor, cwd string) error {
	baseDir := filepath.Join(cwd, packageDescriptor.Manifest.Name)
	_, err := os.Stat(baseDir)
	if err == nil {
		return fmt.Errorf(`package "%s" already exists`, baseDir)
	}

	logger.Debugf("Write package manifest")
	err = renderResourceFile(packageManifestTemplate, packageDescriptor, filepath.Join(baseDir, "manifest.yml"))
	if err != nil {
		return fmt.Errorf("can't render package manifest: %w", err)
	}

	logger.Debugf("Write package changelog")
	err = renderResourceFile(packageChangelogTemplate, &packageDescriptor, filepath.Join(baseDir, "changelog.yml"))
	if err != nil {
		return fmt.Errorf("can't render package changelog: %w", err)
	}

	logger.Debugf("Write docs readme")
	err = renderResourceFile(packageDocsReadme, &packageDescriptor, filepath.Join(baseDir, "docs", "README.md"))
	if err != nil {
		return fmt.Errorf("can't render package README: %w", err)
	}

	if license := packageDescriptor.Manifest.Source.License; license != "" {
		logger.Debugf("Write license file")
		err = licenses.WriteTextToFile(license, filepath.Join(baseDir, "LICENSE.txt"))
		if err != nil {
			return fmt.Errorf("can't write license file: %w", err)
		}
	}

	logger.Debugf("Write sample icon")
	err = writeRawResourceFile(packageImgSampleIcon, filepath.Join(baseDir, "img", "sample-logo.svg"))
	if err != nil {
		return fmt.Errorf("can't render sample icon: %w", err)
	}

	logger.Debugf("Write sample screenshot")
	decodedSampleScreenshot, err := decodeBase64Resource(packageImgSampleScreenshot)
	if err != nil {
		return fmt.Errorf("can't decode sample screenshot: %w", err)
	}
	err = writeRawResourceFile(decodedSampleScreenshot, filepath.Join(baseDir, "img", "sample-screenshot.png"))
	if err != nil {
		return fmt.Errorf("can't render sample screenshot: %w", err)
	}

	if packageDescriptor.Manifest.Type == "input" {
		logger.Debugf("Write base fields")
		err = renderResourceFile(fieldsBaseTemplate, &packageDescriptor, filepath.Join(baseDir, "fields", "base-fields.yml"))
		if err != nil {
			return fmt.Errorf("can't render base fields: %w", err)
		}

		// agent input configuration
		logger.Debugf("Write agent input configuration")
		err = renderResourceFile(inputAgentConfigTemplate, &packageDescriptor, filepath.Join(baseDir, "agent", "input", "input.yml.hbs"))
		if err != nil {
			return fmt.Errorf("can't render agent stream: %w", err)
		}

	}

	if len(packageDescriptor.ExcludeChecks) > 0 {
		logger.Debugf("Write validation file")
		err = renderResourceFile(validationBaseTemplate, &packageDescriptor, filepath.Join(baseDir, "validation.yml"))
		if err != nil {
			return fmt.Errorf("can't render validation file")
		}
	}

	logger.Debugf("Format the entire package")
	err = formatter.Format(baseDir, false)
	if err != nil {
		return fmt.Errorf("can't format the new package: %w", err)
	}

	fmt.Printf("New package has been created: %s\n", baseDir)
	return nil
}