Files
ent/examples/entcpkg

entcpkg example

An example of using entc (ent codegen) as package rather than an executable.

In this example, we have a file named entc.go under the ./ent directory, that holds the configuration for the codegen:

// +build ignore

package main

import (
	"log"
	"strings"
	"text/template"

	"entgo.io/ent/entc"
	"entgo.io/ent/entc/gen"
)

func main() {
	// A usage for custom templates with external functions.
	// One template is defined in the option below, and the
	// second template is provided with the `Templates` field.
	opts := []entc.Option{}
	err := entc.Generate("./schema", &gen.Config{
		// Target: "./gen", If you want generated files placed under custom path
		Header: `
			// Copyright 2019-present Facebook Inc. All rights reserved.
			// This source code is licensed under the Apache 2.0 license found
			// in the LICENSE file in the root directory of this source tree.

			// Code generated by ent, DO NOT EDIT.
		`,
		Templates: []*gen.Template{
			// Custom templates can be provided by entc.Extension (see below),
			// or by setting templates on the gen.Config object.
			//
			gen.MustParse(gen.NewTemplate("static").
				Funcs(template.FuncMap{"title": strings.ToTitle}).
				ParseFiles("./template/t1.tmpl")), // create template files under ent/template
		},
	}, opts...)
	if err != nil {
		log.Fatal("running ent codegen:", err)
	}
}

As you can see, the file is tagged with // +build ignore in order to not include it in the ent package. In order to run the codegen, run the file itself (using go run) or run go generate ./ent. The generate.go file holds the go run command:

package ent

//go:generate go run entc.go

The generate.go file is preferred if you have many generate pragmas in your project.