///|
fn starter_manifest_json() -> String {
let manifest =
#|{
#| "name": "starter-repo-kit",
#| "partials": {
#| "badges": "[](#)\n[](#)\n",
#| "footer": "\nGenerated by a starter repository pipeline powered by moon-mustache.\n"
#| },
#| "profiles": {
#| "template": {
#| "context": {
#| "project": {
#| "visibility": "template"
#| }
#| }
#| },
#| "app": {
#| "context": {
#| "project": {
#| "visibility": "application"
#| }
#| }
#| }
#| },
#| "files": [
#| {
#| "path": "starter/{{project.slug}}/README.md",
#| "template": "# {{project.name}}\n\n{{> badges}}\nA generated MoonBit starter repository for {{project.visibility}} workflows.\n\n## Modules\n{{#modules}}- {{.}}\n{{/modules}}{{> footer}}"
#| },
#| {
#| "path": "starter/{{project.slug}}/moon.mod",
#| "template": "name = \"{{project.owner}}/{{project.slug}}\"\n\nversion = \"0.1.0\"\n\nreadme = \"README.md\"\n\nrepository = \"{{project.repository}}\"\n\nlicense = \"MIT\"\n"
#| },
#| {
#| "path": "starter/{{project.slug}}/.gitignore",
#| "template": ".mooncakes/\n_build/\nnode_modules/\n"
#| },
#| {
#| "path": "starter/{{project.slug}}/src/main.mbt",
#| "template": "fn main {\n println(\"{{project.name}} is ready\")\n}\n"
#| }
#| ]
#|}
manifest
}
///|
fn starter_context() -> @src.Value {
@src.Value::object({
"project": @src.Value::object({
"name": @src.Value::string("moon-starter-kit"),
"slug": @src.Value::string("moon-starter-kit"),
"owner": @src.Value::string("moonbit-community"),
"repository": @src.Value::string(
"https://github.com/moonbit-community/moon-starter-kit",
),
}),
"modules": @src.Value::array([
@src.Value::string("CLI"),
@src.Value::string("CI workflow"),
@src.Value::string("Formatting and test gates"),
]),
})
}
///|
fn print_file(path : String, output : String) -> Unit {
println("== " + path + " ==")
println(output)
println("")
}
///|
fn main {
let manifest = @src.parse_bundle_manifest_json(starter_manifest_json()).unwrap()
let validation = @src.validate_bundle_manifest(manifest)
let prepared = @src.prepare_bundle_manifest_profile(
manifest,
starter_context(),
profile_name="template",
).unwrap()
let result = @src.render_prepared_bundle_manifest_checked(
prepared,
@src.RenderOptions::strict(),
)
let plan = @src.build_bundle_plan("starter-repo-kit", result, validation)
println(
@src.format_validation_report_markdown("starter-repo-kit", validation),
)
println("")
println(@src.format_bundle_plan_markdown(plan))
println("")
for file in result.files {
print_file(file.path, file.output)
}
}