Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
76 commits
Select commit Hold shift + click to select a range
c75dd14
Add kubernetes deployment deployer
creydr Oct 10, 2025
fbe9a08
Run update-codegen.sh
creydr Oct 10, 2025
aefa402
Remove unneeded function
creydr Oct 10, 2025
b2cb5ec
Address build issues
creydr Oct 10, 2025
07e763b
Run make schema-generate
creydr Oct 10, 2025
c45a57b
Get logs by selector in integration_test
creydr Oct 10, 2025
7b5e8de
Add implementations for Lister, Describer and Remover for raw deploym…
creydr Oct 10, 2025
d665b09
Use correct deploytype in integration test
creydr Oct 10, 2025
00aae0c
tmp: Use http scheme for url in describer
creydr Oct 10, 2025
96f7742
Fix receiving pod logs correctly in test
creydr Oct 20, 2025
c0e19d4
Fix deployer integration test
creydr Oct 20, 2025
d42c01a
Wait for pods of deployment to be ready too
creydr Oct 21, 2025
c106b21
Move Deployer, Describer, Lister and Remover int tests to correct pac…
creydr Oct 21, 2025
31f51c5
Log receiver also check existing pods
creydr Oct 21, 2025
0065567
Revert "Log receiver also check existing pods"
creydr Oct 21, 2025
71e275b
tmp: disable cleanup to get pod logs / status and add more logs
creydr Oct 21, 2025
62ee5e0
Revert "tmp: disable cleanup to get pod logs / status and add more logs"
creydr Oct 21, 2025
c97cef4
Give a bit more time to collect logs
creydr Oct 21, 2025
8c6b301
Add multi deployer, -lister, -remover
creydr Oct 21, 2025
60057a3
Move deployer, lister, describer and removers in separate packages
creydr Oct 22, 2025
72e5b64
Use integration tests in k8s packages too
creydr Oct 22, 2025
b7585ac
Fix import cycle issue
creydr Oct 22, 2025
5becb00
Fix integration tests
creydr Oct 23, 2025
2a005d7
Remove unneeded test
creydr Oct 23, 2025
bae127e
Run all deployer integration tests on both deployer implementations
creydr Oct 23, 2025
3c31e03
Add small delay in test
creydr Oct 23, 2025
0abe428
Revert "Add small delay in test"
creydr Oct 23, 2025
148030e
Wait for deployments to be up
creydr Oct 23, 2025
a116687
wait for ready pods instead of checking only if containers are running
creydr Oct 23, 2025
a35d7a1
tmp: collect pod status and logs
creydr Oct 23, 2025
fc98822
Revert "tmp: collect pod status and logs"
creydr Oct 24, 2025
4e8c50a
Add deploy-type information in description
creydr Oct 24, 2025
2dba689
Poll for pod logs instead of time.sleep
creydr Oct 24, 2025
d3c7585
Switch to PollUntilContextTimeout in wait functions
creydr Oct 24, 2025
163b15e
Make sure no pods of old replicas of the deployment are running anymo…
creydr Oct 24, 2025
89fd2bc
Change clients WithLister|Describer|Remover methods to variadic argum…
creydr Nov 3, 2025
8e38fc9
Move Deployers, Listers, Describers and Removers back into knative/k8…
creydr Nov 3, 2025
830a9d5
[WIP] Resolve some cyclic dependencies
creydr Nov 3, 2025
d7f9493
Remove subscribe functionality from raw deployer to remove dependencies
creydr Nov 3, 2025
20551ca
Some more cleanup and import alias fixes
creydr Nov 3, 2025
2978dde
Rename deploy-type arg to deployer to align with other arg names
creydr Nov 3, 2025
eb00082
Fix build issues in cmd unit tests
creydr Nov 3, 2025
e47509d
Adjust integration tests to not test func subscribe by default and sk…
creydr Nov 3, 2025
1bb826c
Add shell completion for deployer selection
creydr Nov 3, 2025
a30bc73
Undo unneeded changes in imports ordering
creydr Nov 3, 2025
165f7bb
Move SynchronizedBuffer to k8s package
creydr Nov 4, 2025
c28bc3d
Readd Test_processValue unit test
creydr Nov 4, 2025
3afe835
Use constants for waiting timeout
creydr Nov 4, 2025
e5698c9
Use onClusterFix for raw deployer too
creydr Nov 4, 2025
68f73e5
Remove unneeded build tags
creydr Nov 11, 2025
f8325f8
Use TestInt_ pattern for integration tests (and helper functions)
creydr Nov 11, 2025
4dfc903
Use dot import for pkg/testing
creydr Nov 11, 2025
b952d8d
Use dot import for pkg/testing/k8s
creydr Nov 11, 2025
fa5960b
Use fn alias for pkg/functions import for consistency
creydr Nov 11, 2025
4087199
Update outdated comment
creydr Nov 11, 2025
2b0f2a5
Some more TestInt_xyz replaces
creydr Nov 11, 2025
aad506c
Mark test helper functions with t.Helper()
creydr Nov 11, 2025
6f3d6cb
Removed build tags in other int_test_helpers.go
creydr Nov 11, 2025
0fa60ea
Merge remote-tracking branch 'knative/main' into kubernetes-deployer
creydr Nov 11, 2025
c3738c7
Use dot imports for some testing packages
creydr Nov 11, 2025
9782f41
Move testing/k8s to testing package
creydr Nov 11, 2025
0a8ddec
Revert "Move testing/k8s to testing package"
creydr Nov 11, 2025
2e8d385
Update describe to return a ErrNotHandled error
creydr Nov 12, 2025
eb1ae74
Update remover to return a ErrNotHandled error
creydr Nov 12, 2025
6620502
Update lister to only return resultlist and error (remove handled/boo…
creydr Nov 12, 2025
ac5b588
Move IsCRDNotFoundError() to knative package and make specific to Kna…
creydr Nov 12, 2025
99d0d3e
Add +build integration tag on integration test files
creydr Nov 12, 2025
43ce431
Remove misleading comment
creydr Nov 12, 2025
8103987
Fix build issues
creydr Nov 12, 2025
b92dae7
Add a few more comments to the Describe, Remove and List usage about …
creydr Nov 12, 2025
164de65
Remove outdated package comment
creydr Nov 12, 2025
fa0256a
Remove need to specify deployer in function programmatic declaration
creydr Nov 12, 2025
b4db989
create Trigger in test only for Knative Service as we don't support i…
creydr Nov 12, 2025
a598cd8
Use correct API version for triggers subscriber ref
creydr Nov 13, 2025
46604b0
Merge remote-tracking branch 'knative/main' into kubernetes-deployer
creydr Nov 13, 2025
70c7019
Ignore golang-lint dot import errors in testing helpers
creydr Nov 13, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 13 additions & 4 deletions cmd/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -58,16 +58,16 @@ func NewClient(cfg ClientConfig, options ...fn.Option) (*fn.Client, func()) {
var (
t = newTransport(cfg.InsecureSkipVerify) // may provide a custom impl which proxies
c = newCredentialsProvider(config.Dir(), t) // for accessing registries
d = newKnativeDeployer(cfg.Verbose)
d = newKnativeDeployer(cfg.Verbose) // default deployer (can be overridden via options)
pp = newTektonPipelinesProvider(c, cfg.Verbose)
o = []fn.Option{ // standard (shared) options for all commands
fn.WithVerbose(cfg.Verbose),
fn.WithTransport(t),
fn.WithRepositoriesPath(config.RepositoriesPath()),
fn.WithBuilder(buildpacks.NewBuilder(buildpacks.WithVerbose(cfg.Verbose))),
fn.WithRemover(knative.NewRemover(cfg.Verbose)),
fn.WithDescriber(knative.NewDescriber(cfg.Verbose)),
fn.WithLister(knative.NewLister(cfg.Verbose)),
fn.WithRemovers(knative.NewRemover(cfg.Verbose), k8s.NewRemover(cfg.Verbose)),
fn.WithDescribers(knative.NewDescriber(cfg.Verbose), k8s.NewDescriber(cfg.Verbose)),
fn.WithListers(knative.NewLister(cfg.Verbose), k8s.NewLister(cfg.Verbose)),
fn.WithDeployer(d),
fn.WithPipelinesProvider(pp),
fn.WithPusher(docker.NewPusher(
Expand Down Expand Up @@ -135,6 +135,15 @@ func newKnativeDeployer(verbose bool) fn.Deployer {
return knative.NewDeployer(options...)
}

func newK8sDeployer(verbose bool) fn.Deployer {
options := []k8s.DeployerOpt{
k8s.WithDeployerVerbose(verbose),
k8s.WithDeployerDecorator(deployDecorator{}),
}

return k8s.NewDeployer(options...)
}

type deployDecorator struct {
oshDec k8s.OpenshiftMetadataDecorator
}
Expand Down
4 changes: 2 additions & 2 deletions cmd/client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,10 @@ func Test_NewTestClient(t *testing.T) {
)

// Factory constructor options which should be used when invoking later
clientFn := NewTestClient(fn.WithRemover(remover))
clientFn := NewTestClient(fn.WithRemovers(remover))

// Factory should ignore options provided when invoking
client, _ := clientFn(ClientConfig{}, fn.WithDescriber(describer))
client, _ := clientFn(ClientConfig{}, fn.WithDescribers(describer))

// Trigger an invocation of the mocks by running the associated client
// methods which depend on them
Expand Down
44 changes: 37 additions & 7 deletions cmd/completion_util.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,21 +9,28 @@ import (
"strings"

"github.com/spf13/cobra"

fn "knative.dev/func/pkg/functions"
"knative.dev/func/pkg/k8s"
"knative.dev/func/pkg/knative"
)

func CompleteFunctionList(cmd *cobra.Command, args []string, toComplete string) (strings []string, directive cobra.ShellCompDirective) {
lister := knative.NewLister(false)
listers := []fn.Lister{
knative.NewLister(false),
k8s.NewLister(false),
}

list, err := lister.List(cmd.Context(), "")
if err != nil {
directive = cobra.ShellCompDirectiveError
return
items := []fn.ListItem{}
for _, lister := range listers {
list, err := lister.List(cmd.Context(), "")
if err != nil {
directive = cobra.ShellCompDirectiveError
return
}
items = append(items, list...)
}

for _, item := range list {
for _, item := range items {
strings = append(strings, item.Name)
}
directive = cobra.ShellCompDirectiveDefault
Expand Down Expand Up @@ -158,3 +165,26 @@ func CompleteBuilderList(cmd *cobra.Command, args []string, complete string) (ma

return
}

func CompleteDeployerList(cmd *cobra.Command, args []string, complete string) (matches []string, d cobra.ShellCompDirective) {
deployers := []string{
knative.KnativeDeployerName,
k8s.KubernetesDeployerName,
}

d = cobra.ShellCompDirectiveNoFileComp
matches = []string{}

if len(complete) == 0 {
matches = deployers
return
}

for _, b := range deployers {
if strings.HasPrefix(b, complete) {
matches = append(matches, b)
}
}

return
}
14 changes: 7 additions & 7 deletions cmd/delete_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ func TestDelete_Default(t *testing.T) {
t.Fatal(err)
}

cmd := NewDeleteCmd(NewTestClient(fn.WithRemover(remover)))
cmd := NewDeleteCmd(NewTestClient(fn.WithRemovers(remover)))
cmd.SetArgs([]string{})
if err := cmd.Execute(); err != nil {
t.Fatal(err)
Expand Down Expand Up @@ -104,7 +104,7 @@ func TestDelete_ByName(t *testing.T) {

// Create a command with a client constructor fn that instantiates a client
// with a mocked remover.
cmd := NewDeleteCmd(NewTestClient(fn.WithRemover(remover)))
cmd := NewDeleteCmd(NewTestClient(fn.WithRemovers(remover)))
cmd.SetArgs([]string{testname}) // run: func delete <name>
if err := cmd.Execute(); err != nil {
t.Fatal(err)
Expand Down Expand Up @@ -132,7 +132,7 @@ func TestDelete_Namespace(t *testing.T) {
return nil
}

cmd := NewDeleteCmd(NewTestClient(fn.WithRemover(remover)))
cmd := NewDeleteCmd(NewTestClient(fn.WithRemovers(remover)))
cmd.SetArgs([]string{testname, "--namespace", namespace})
if err := cmd.Execute(); err != nil {
t.Fatal(err)
Expand Down Expand Up @@ -177,7 +177,7 @@ func TestDelete_NamespaceFlagPriority(t *testing.T) {
t.Fatal(err)
}

cmd := NewDeleteCmd(NewTestClient(fn.WithRemover(remover)))
cmd := NewDeleteCmd(NewTestClient(fn.WithRemovers(remover)))
cmd.SetArgs([]string{testname, "--namespace", namespace2})
if err := cmd.Execute(); err != nil {
t.Fatal(err)
Expand Down Expand Up @@ -233,7 +233,7 @@ created: 2021-01-01T00:00:00+00:00

// Command with a Client constructor that returns client with the
// mocked remover.
cmd := NewDeleteCmd(NewTestClient(fn.WithRemover(remover)))
cmd := NewDeleteCmd(NewTestClient(fn.WithRemovers(remover)))
cmd.SetArgs([]string{}) // Do not use test command args

// Execute the command simulating no arguments.
Expand Down Expand Up @@ -277,7 +277,7 @@ func TestDelete_ByPath(t *testing.T) {
}

// Command with a Client constructor using the mock remover.
cmd := NewDeleteCmd(NewTestClient(fn.WithRemover(remover)))
cmd := NewDeleteCmd(NewTestClient(fn.WithRemovers(remover)))

// Execute the command only with the path argument
cmd.SetArgs([]string{"-p", root})
Expand All @@ -303,7 +303,7 @@ func TestDelete_NameAndPathExclusivity(t *testing.T) {
remover := mock.NewRemover()

// Command with a Client constructor using the mock remover.
cmd := NewDeleteCmd(NewTestClient(fn.WithRemover(remover)))
cmd := NewDeleteCmd(NewTestClient(fn.WithRemovers(remover)))

// Capture command output for inspection
buf := new(bytes.Buffer)
Expand Down
41 changes: 39 additions & 2 deletions cmd/deploy.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,11 @@ import (
"github.com/spf13/cobra"
"k8s.io/apimachinery/pkg/api/resource"
"knative.dev/client/pkg/util"

"knative.dev/func/pkg/builders"
"knative.dev/func/pkg/config"
fn "knative.dev/func/pkg/functions"
"knative.dev/func/pkg/k8s"
"knative.dev/func/pkg/knative"
"knative.dev/func/pkg/utils"
)

Expand Down Expand Up @@ -132,7 +132,7 @@ EXAMPLES
PreRunE: bindEnv("build", "build-timestamp", "builder", "builder-image",
"base-image", "confirm", "domain", "env", "git-branch", "git-dir",
"git-url", "image", "namespace", "path", "platform", "push", "pvc-size",
"service-account", "registry", "registry-insecure", "remote",
"service-account", "deployer", "registry", "registry-insecure", "remote",
"username", "password", "token", "verbose", "remote-storage-class"),
RunE: func(cmd *cobra.Command, args []string) error {
return runDeploy(cmd, newClient)
Expand Down Expand Up @@ -193,6 +193,8 @@ EXAMPLES
"When triggering a remote deployment, set a custom volume size to allocate for the build operation ($FUNC_PVC_SIZE)")
cmd.Flags().String("service-account", f.Deploy.ServiceAccountName,
"Service account to be used in the deployed function ($FUNC_SERVICE_ACCOUNT)")
cmd.Flags().String("deployer", f.Deploy.Deployer,
fmt.Sprintf("Type of deployment to use: '%s' for Knative Service (default) or '%s' for Kubernetes Deployment ($FUNC_DEPLOY_TYPE)", knative.KnativeDeployerName, k8s.KubernetesDeployerName))
// Static Flags:
// Options which have static defaults only (not globally configurable nor
// persisted with the function)
Expand Down Expand Up @@ -234,6 +236,10 @@ EXAMPLES
fmt.Println("internal: error while calling RegisterFlagCompletionFunc: ", err)
}

if err := cmd.RegisterFlagCompletionFunc("deployer", CompleteDeployerList); err != nil {
fmt.Println("internal: error while calling RegisterFlagCompletionFunc: ", err)
}

return cmd
}

Expand Down Expand Up @@ -660,6 +666,9 @@ type deployConfig struct {
//Service account to be used in deployed function
ServiceAccountName string

// Deployer specifies the type of deployment: "knative" or "raw"
Deployer string

// Remote indicates the deployment (and possibly build) process are to
// be triggered in a remote environment rather than run locally.
Remote bool
Expand Down Expand Up @@ -693,6 +702,7 @@ func newDeployConfig(cmd *cobra.Command) deployConfig {
PVCSize: viper.GetString("pvc-size"),
Timestamp: viper.GetBool("build-timestamp"),
ServiceAccountName: viper.GetString("service-account"),
Deployer: viper.GetString("deployer"),
}
// NOTE: .Env should be viper.GetStringSlice, but this returns unparsed
// results and appears to be an open issue since 2017:
Expand Down Expand Up @@ -727,6 +737,7 @@ func (c deployConfig) Configure(f fn.Function) (fn.Function, error) {
f.Build.Git.Revision = c.GitBranch // TODO: should match; perhaps "refSpec"
f.Build.RemoteStorageClass = c.RemoteStorageClass
f.Deploy.ServiceAccountName = c.ServiceAccountName
f.Deploy.Deployer = c.Deployer
f.Local.Remote = c.Remote

// PVCSize
Expand Down Expand Up @@ -899,6 +910,32 @@ func (c deployConfig) Validate(cmd *cobra.Command) (err error) {
return
}

// clientOptions returns client options specific to deploy, including the appropriate deployer
func (c deployConfig) clientOptions() ([]fn.Option, error) {
// Start with build config options
o, err := c.buildConfig.clientOptions()
if err != nil {
return o, err
}

// Add the appropriate deployer based on deploy type
deployer := c.Deployer
if deployer == "" {
deployer = knative.KnativeDeployerName // default to knative for backwards compatibility
}

switch deployer {
case knative.KnativeDeployerName:
o = append(o, fn.WithDeployer(newKnativeDeployer(c.Verbose)))
case k8s.KubernetesDeployerName:
o = append(o, fn.WithDeployer(newK8sDeployer(c.Verbose)))
default:
return o, fmt.Errorf("unsupported deploy type: %s (supported: %s, %s)", deployer, knative.KnativeDeployerName, k8s.KubernetesDeployerName)
}

return o, nil
}

// printDeployMessages to the output. Non-error deployment messages.
func printDeployMessages(out io.Writer, f fn.Function) {
digest, err := isDigested(f.Image)
Expand Down
2 changes: 1 addition & 1 deletion cmd/deploy_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1959,7 +1959,7 @@ func TestDeploy_NoErrorOnOldFunctionNotFound(t *testing.T) {
}
clientFn := NewTestClient(
fn.WithDeployer(mock.NewDeployer()),
fn.WithRemover(remover),
fn.WithRemovers(remover),
)

// Create a basic go Function
Expand Down
5 changes: 5 additions & 0 deletions cmd/describe.go
Original file line number Diff line number Diff line change
Expand Up @@ -179,6 +179,9 @@ func (i info) Human(w io.Writer) error {
fmt.Fprintf(w, " %v\n", route)
}

fmt.Fprintln(w, "Deployer:")
fmt.Fprintf(w, " %v\n", i.Deployer)

if len(i.Subscriptions) > 0 {
fmt.Fprintln(w, "Subscriptions (Source, Type, Broker):")
for _, s := range i.Subscriptions {
Expand All @@ -204,6 +207,8 @@ func (i info) Plain(w io.Writer) error {
fmt.Fprintf(w, "Route %v\n", route)
}

fmt.Fprintf(w, "Deployer %v\n", i.Deployer)

if len(i.Subscriptions) > 0 {
for _, s := range i.Subscriptions {
fmt.Fprintf(w, "Subscription %v %v %v\n", s.Source, s.Type, s.Broker)
Expand Down
12 changes: 6 additions & 6 deletions cmd/describe_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ func TestDescribe_Default(t *testing.T) {
_ = FromTempDirectory(t)
describer := mock.NewDescriber()

cmd := NewDescribeCmd(NewTestClient(fn.WithDescriber(describer)))
cmd := NewDescribeCmd(NewTestClient(fn.WithDescribers(describer)))
cmd.SetArgs([]string{})
err := cmd.Execute()

Expand Down Expand Up @@ -52,7 +52,7 @@ func TestDescribe_Undeployed(t *testing.T) {

describer := mock.NewDescriber()

cmd := NewDescribeCmd(NewTestClient(fn.WithDescriber(describer)))
cmd := NewDescribeCmd(NewTestClient(fn.WithDescribers(describer)))
cmd.SetArgs([]string{})
if err := cmd.Execute(); err != nil {
t.Fatal(err)
Expand All @@ -78,7 +78,7 @@ func TestDescribe_ByName(t *testing.T) {
return fn.Instance{}, nil
}

cmd := NewDescribeCmd(NewTestClient(fn.WithDescriber(describer)))
cmd := NewDescribeCmd(NewTestClient(fn.WithDescribers(describer)))
cmd.SetArgs([]string{testname})
if err := cmd.Execute(); err != nil {
t.Fatal(err)
Expand Down Expand Up @@ -111,9 +111,9 @@ func TestDescribe_ByProject(t *testing.T) {
if name != expected {
t.Fatalf("expected describer to receive name %q, got %q", expected, name)
}
return
return fn.Instance{}, nil
}
cmd := NewDescribeCmd(NewTestClient(fn.WithDescriber(describer)))
cmd := NewDescribeCmd(NewTestClient(fn.WithDescribers(describer)))
cmd.SetArgs([]string{})
if err := cmd.Execute(); err != nil {
t.Fatal(err)
Expand All @@ -124,7 +124,7 @@ func TestDescribe_ByProject(t *testing.T) {
// and a path will generate an error.
func TestDescribe_NameAndPathExclusivity(t *testing.T) {
d := mock.NewDescriber()
cmd := NewDescribeCmd(NewTestClient(fn.WithDescriber(d)))
cmd := NewDescribeCmd(NewTestClient(fn.WithDescribers(d)))
cmd.SetArgs([]string{"-p", "./testpath", "testname"})
if err := cmd.Execute(); err == nil {
t.Fatalf("expected error on conflicting flags not received")
Expand Down
4 changes: 2 additions & 2 deletions cmd/list.go
Original file line number Diff line number Diff line change
Expand Up @@ -187,9 +187,9 @@ func (items listItems) Plain(w io.Writer) error {
tabWriter := tabwriter.NewWriter(w, 0, 8, 2, ' ', 0)
defer tabWriter.Flush()

fmt.Fprintf(tabWriter, "%s\t%s\t%s\t%s\t%s\n", "NAME", "NAMESPACE", "RUNTIME", "URL", "READY")
fmt.Fprintf(tabWriter, "%s\t%s\t%s\t%s\t%s\t%s\n", "NAME", "NAMESPACE", "RUNTIME", "DEPLOYER", "URL", "READY")
for _, item := range items {
fmt.Fprintf(tabWriter, "%s\t%s\t%s\t%s\t%s\n", item.Name, item.Namespace, item.Runtime, item.URL, item.Ready)
fmt.Fprintf(tabWriter, "%s\t%s\t%s\t%s\t%s\t%s\n", item.Name, item.Namespace, item.Runtime, item.Deployer, item.URL, item.Ready)
}
return nil
}
Expand Down
2 changes: 1 addition & 1 deletion cmd/list_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ func TestList_Namespace(t *testing.T) {

// Create an instance of the command which sets the flags
// according to the test case
cmd := NewListCmd(NewTestClient(fn.WithLister(lister)))
cmd := NewListCmd(NewTestClient(fn.WithListers(lister)))
args := []string{}
if test.namespace != "" {
args = append(args, "--namespace", test.namespace)
Expand Down
1 change: 1 addition & 0 deletions docs/reference/func_deploy.md
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,7 @@ func deploy
-b, --builder string Builder to use when creating the function's container. Currently supported builders are "host", "pack" and "s2i". (default "pack")
--builder-image string Specify a custom builder image for use by the builder other than its default. ($FUNC_BUILDER_IMAGE)
-c, --confirm Prompt to confirm options interactively ($FUNC_CONFIRM)
--deployer string Type of deployment to use: 'knative' for Knative Service (default) or 'raw' for Kubernetes Deployment ($FUNC_DEPLOY_TYPE)
--domain string Domain to use for the function's route. Cluster must be configured with domain matching for the given domain (ignored if unrecognized) ($FUNC_DOMAIN)
-e, --env stringArray Environment variable to set in the form NAME=VALUE. You may provide this flag multiple times for setting multiple environment variables. To unset, specify the environment variable name followed by a "-" (e.g., NAME-).
-t, --git-branch string Git revision (branch) to be used when deploying via the Git repository ($FUNC_GIT_BRANCH)
Expand Down
Loading
Loading