mirror of https://github.com/knative/func.git
42 lines
1.8 KiB
Markdown
42 lines
1.8 KiB
Markdown
# Templates
|
|
|
|
Contains all example source code, scaffolding, certificates and metadata used
|
|
by func when creating and building function instances.
|
|
|
|
To rebuild run `make templates` (which caches). To force a full rebuild run
|
|
`make clean && make`
|
|
|
|
## Layout
|
|
|
|
Each directory within `templates` corresponds to a known language runtime.
|
|
The `certs` directory is a reserved word containing root SSL certificates.
|
|
Each directory within a runtime directory corresponds to a named templaate.
|
|
The `scaffolding` directory within the runtime directory is a reserved word
|
|
containing the adapter code that converts a function with a given method
|
|
signature into a service by way of the external function runtime libraries.
|
|
|
|
## Packaging
|
|
|
|
When updates are made to these templates, they must be packaged (serialized as
|
|
a Go byte array) by running `make templates` (which rebuilds
|
|
`generate/zz_filesystem_generated.go`, and checking in the resultant
|
|
`./generate/zz_filesystem_generated.go` file.
|
|
|
|
## How it works
|
|
|
|
The `./generate/templates` directory contains Go program that generates `./generate/zz_filesystem_generated.go`.
|
|
The file defines byte array variable named `TemplatesZip`.
|
|
The variable contains ZIP representation of the templates directory.
|
|
The byte array variable is then used to instantiate exported global variable `function.EmbeddedTemplatesFS`,
|
|
which implements standard Go interfaces `fs.ReadDirFS` and `fs.StatFS`.
|
|
|
|
## Rationale
|
|
|
|
Until such time as embedding static assets in binaries is included in the
|
|
base `go build` functionality (see https://github.com/golang/go/issues/35950)
|
|
we need to use our custom serialization script (`./generate/templates/main.go`).
|
|
|
|
Native Go embedding introduced in Go 1.16 could be used for executable binary,
|
|
however it cannot be used for library.
|
|
For a library we need to generate a Go source code containing the templates.
|