* Add Python templates for gunicorn and uwsgi + Flask
These templates represents the most common and simple ways
how to implement FAAS in Python either directly via gunicorn
or using Flask and uwsgi.
* feat: runtime envvar definition in templates
Signed-off-by: Matej Vasek <mvasek@redhat.com>
* fixup: use APP_MODULE not app.sh
Signed-off-by: Matej Vasek <mvasek@redhat.com>
* fixup: update docs
Signed-off-by: Matej Vasek <mvasek@redhat.com>
* test: better diffing in tests
Signed-off-by: Matej Vasek <mvasek@redhat.com>
* fixup: update tests
Signed-off-by: Matej Vasek <mvasek@redhat.com>
* fixup: style
Signed-off-by: Matej Vasek <mvasek@redhat.com>
---------
Signed-off-by: Matej Vasek <mvasek@redhat.com>
Co-authored-by: Matej Vasek <mvasek@redhat.com>
* feat: add pvc-size flag to deploy command (#851)
* feat: move pvc-size from deploy to build func configuration section (#851)
* feat: add setting default value for pvc-size in func.yaml (#851)
* feat: change pvc-size to camel case (#851)
* feat: add omitempty to pvcSize (#851)
* feat: regenerate func yaml schema (#851)
* feat: update docs for deploy command (#851)
* feat: update usage help for the pvc-size flag (#851)
* cli help text and flags cleanup
- verbose flag uses global setting throughout
- confirm flag added using shared visitor throughout
- path flag added using shared visitor throughout
- removes --version flag on root as redundant with subcommand
- splits main help's 'Main Commands' into 'Primary Commands' and 'Development
Commands' groups
- Moves RunE definition into flag struct literals
* remove commented code
Ensures commands which have subcommands to operate on individual members
(list, add, remove etc) have singular and plural as aliases.
Ensures consistent usage of linux-command-style aliases for list,remove
and rename operations: "ls", "rm", "mv"
Ensures all tests which apply to both build and deploy commands are
invoked. Test implementations are kept on deploy command, as it is the
primary command and build is a derivitave. Slight logical and
alphabetical reordering.
* add option 'branch' to command 'repository add'
* Format go code (#1407)
Signed-off-by: Knative Automation <automation@knative.team>
* chore: refactor repository layout (#1554)
Signed-off-by: Zbynek Roubalik <zroubalik@gmail.com>
* fixup: removes --branch tag from repo commands
Removes the currently in-flight work on the `--branch` tag, simply
supporting a `refspec` on the repository URI. For example,
https://github.com/knative-sandbox/func-tastic#metacontroller will pull
the `func-tastic` repo, and set the currently active HEAD to the
`metacontroller` branch. Adds support for displaying this with the
command `func repo list -v`.
Signed-off-by: Lance Ball <lball@redhat.com>
* fixup: add example to `func repo add` documentation
Signed-off-by: Lance Ball <lball@redhat.com>
* fixup: adjust test output expectations
Signed-off-by: Lance Ball <lball@redhat.com>
---------
Signed-off-by: Knative Automation <automation@knative.team>
Signed-off-by: Zbynek Roubalik <zroubalik@gmail.com>
Signed-off-by: Lance Ball <lball@redhat.com>
Co-authored-by: Yingchun Guo <yingchun.guo@intel.com>
Co-authored-by: knative-automation <automation@knative.team>
Co-authored-by: Zbynek Roubalik <zroubalik@gmail.com>
* feat: deploy command global config function context
* fix static check errors
* fix test
* fix remote persists test
* env opaque box test
* use keyed fields (govet)
* mock deployer expansion
* ClearEnvs now in shared testing pkg
* effectivePath now uses plfags
* list directly uses config for default namespace
* Improved Namespace calculation and Caching
- Built() now a client package function
- Namespace evaluation delegeate to implementations
This enables the func.yaml to avert dirtiness checks on rebuilds
(caching)
- Build and Deploy update build stamp on completion
Enables dirtiness checks to be unaffects, leading to better caching.
- CLI Namespace checks no longer require k8s env evaluation for default
- Fixed missing condition check in TestDeploy_Namespace
- Fixes some minor linter and spelling errors
- Global config does not directly set namespace - it is corrected to be
deferred evaluation used by implementations.
- Skips writing func.yaml on f.Write if there were no modifications,
which leads to better caching (no timestamp update means Built ==
true)
- HasImage removed in favor of a corrected fn.Built
* linting, misspellings and docs rebuild
* warn user if git settings exist on a non-remote build
* lint error fix
* test flag unsetting persists
* allow unknown flags in preparsing of flags
* pre-submit cleanup
* update cmd to use client.Init
Adds two meta-commands, 'Apply' and 'Update', to the client.
Renames 'Create' to 'Init' to avoid confusion with 'Update' (and to be more
linguistically similar to git commands), and adds it as an alias to the
create CLI command.
* feat: global config function context
The function with context is considered when determining flag defaults
such that:
- No special logic is required to determine "if changed"
- help text correctly reflects the actual values which will be used
- Global config can be a direct parent of command-specific config via
embed
Also included:
- CLI tests clear environment of FUNC_* variables
- Command's bindEnv helper also sets up environment variable auto-binding
and prefix.
- Verbosisty flag default now globally configurable
* Update cmd/build.go
Co-authored-by: Lance Ball <lball@redhat.com>
* Update cmd/build.go
Co-authored-by: Lance Ball <lball@redhat.com>
* Update cmd/build.go
Co-authored-by: Lance Ball <lball@redhat.com>
* move clearEnvs test function to test file
* docs regen
Co-authored-by: Lance Ball <lball@redhat.com>
* effective path
* function context for build builder
* code review suggestions
- fix misspelled 'precedence' throughout
- remove superfluous command execution from test
- remove debug statements
- add FUNC_PATH precedence check with short-flag in effectivePath test
* rebase and update to NewTestClient
Resetting KUBECONFIG envvar is not sufficient if test runs in cluster.
We also must unset KUBERNETES_SERVICE_HOST envvar,
so in-cluster-config wont kick in.
Signed-off-by: Matej Vasek <mvasek@redhat.com>
Signed-off-by: Matej Vasek <mvasek@redhat.com>
* chore: list command namespace
- Adds namespace test to list command
- Moves namespace flag into list command for
- Better help text
- Easier testing
- Sets static default namespace for flag to "default"
* regen docs
* list test default from kubeconfig
* chore: deploy namespace simplification
Separates namespace redeploy warnings from namespace value derivation
logic. Simplifies derivation by integration more closely with flag init
flow.
* cleanup
* chore: delete command namespace
- Fixes bug where deleting by name fails if current path has no
initialized function.
- Adds namespace test to delete command
- Moves namespace flag into delete command for
- Better help text
- Easier testing
- Sets static default namespace for flag to "default"
* fix comments/docs
* delete tests with nonexistent kubeconfig
* fix help text
* fix: describe function
- Fixes error describing by name
- Adds ability to specify namespace
- Fixes inconsistency between Describe and Info
* fix misspelling
* clear test cmd args
* remove old doc file
* docs cleanup
* test describe with no kubeconfig
Updates the mock deployer to have the correct method signature
(match interface it is mocking). Usage is illustrated using a
refactored implementation of mock.NewDeployerWithResult.
* feat: config members and paths
- Adds Builder, Namespace, Registry and Verbose as globally
configurable.
- Fixes problems where file paths were being created or required when
not necessary.
- Relocates environment variable usage to main's use of config
- Adds FUNC_CONFIG_PATH
- Only creates paths on disk when necessary
- Makes non-existent config paths nonfatal
* postpone adding some members
* refactor: attach() and podReady() more general
Signed-off-by: Matej Vasek <mvasek@redhat.com>
* feat: added function for upload to a volume
Signed-off-by: Matej Vasek <mvasek@redhat.com>
* refactor: extract defaultSecurityContext
Signed-off-by: Matej Vasek <mvasek@redhat.com>
* fix: added runtime type check
Signed-off-by: Matej Vasek <mvasek@redhat.com>
* feat: allow on-cluster-build without VCS
Signed-off-by: Matej Vasek <mvasek@redhat.com>
* fix: reword error message
Co-authored-by: Lance Ball <lball@redhat.com>
* fix: runtime type check
Signed-off-by: Matej Vasek <mvasek@redhat.com>
* test: e2e test for direct upload on-cluster-build
Signed-off-by: Matej Vasek <mvasek@redhat.com>
Signed-off-by: Matej Vasek <mvasek@redhat.com>
Co-authored-by: Lance Ball <lball@redhat.com>
* chore: update all references to kn-plugin-func
I did not change references in CHANGELOG.md but otherwise, I believe
this should cover all configuration settings, image names, package
names, etc.
Signed-off-by: Lance Ball <lball@redhat.com>
* fixup: fix instances_test.go
Signed-off-by: Lance Ball <lball@redhat.com>
* fixup: still some stray kn-plugin-func
Signed-off-by: Lance Ball <lball@redhat.com>
Signed-off-by: Lance Ball <lball@redhat.com>
All tests which are directory-sensitive now also:
- reset viper
- use t.Cleanup
- use t.TempDir
- use a clean XDG_CONFIG_HOME
- specify explict name when creating
- moves helpers to root_test
* fix: always use function's namespace when invoking remote
* test
* Apply suggestions from code review
Co-authored-by: Matej Vasek <matejvasek@gmail.com>
* rebased and updated func struct
* fixing migration to 1.0.0 struct
* fixing on cluster tests
* updaating migration version to 0.34.0
* adding tests for marshalling and migration errors
* adding EOF new line
* updating migrations
* fixing wrong name
* fixing marshalling test
* adding EOF line
* fixing assertion
This is causing trouble with new PRs that potentially change CLI flags
or other user-facing UX. Another option besides completely removing the
version information is to modify Version.StringVerbose() so that it uses
the value of the most recent semver tag (or Knative tag).
```
❯ git describe --match "v*"
v0.34.0-6-g6d26e64c
❯ git describe --match "knative*"
knative-v1.7.0-6-g6d26e64c
```
This is nice, but could be misleading if the UX has changed since that
release.
Signed-off-by: Lance Ball <lball@redhat.com>
Signed-off-by: Lance Ball <lball@redhat.com>
* fix: registry prompt result being ignored
Signed-off-by: Matej Vasek <mvasek@redhat.com>
* fixup
Signed-off-by: Matej Vasek <mvasek@redhat.com>
* fixup
Signed-off-by: Matej Vasek <mvasek@redhat.com>
Signed-off-by: Matej Vasek <mvasek@redhat.com>
* feat: deploy autobuild and flag persistence
* cleanup
* help text, comments and test cleanup
* removing usurped commands.txt
* add platform to deploy synopsis help
* feat: add initial version of command groups and template engine (#215)
* feat: add relevant dependencies and vendor files (#215)
* feat: extend TestUsageFlags for hidden flags and flags with no shorthand (#215)
* feat: refactor root.go to use command groups (#215)
* feat: move the long help of root cmd to the usage templates section (#215)
* feat: updates after rebase (#215)
* feat: update after review (#215)
* feat: rename 'options' into 'flags' to align with the old help (#215)
* feat: remove support for help options, add template for global flags help section (#215)
* feat: update handling of root command help to support proper use of templates and docs generation (#215)
* feat: generate new docs (#215)
* Better error message I docker/podman not present.
* Auto detect podman machine's socket on mac/win.
Signed-off-by: Matej Vasek <mvasek@redhat.com>
Signed-off-by: Matej Vasek <mvasek@redhat.com>
* fix: image name derivation and flag precidence
* cleanup
* fix image prompt, reorganize and cleanup
* client deploy image test
* be explicit about registry treatment in tests
* ineffassign
* fix: k8s env not required
* misspell
* minor cleanup
* recombine build and deploy configs
* test namesace choosing logic
* fix: check for `--image` flag in build command
If the user provides an `--image` flag on the command line, it should be
used. This commit modifies the image resolving code to check whether or
not the image name was provided on the command line.
Fixes: https://github.com/knative-sandbox/kn-plugin-func/issues/1125
Signed-off-by: Lance Ball <lball@redhat.com>
* fixup: review feedback
Signed-off-by: Lance Ball <lball@redhat.com>
Signed-off-by: Lance Ball <lball@redhat.com>
* Added ability to add env non-interactively
* Added ability to list envs as JSON
Signed-off-by: Matej Vasek <mvasek@redhat.com>
Signed-off-by: Matej Vasek <mvasek@redhat.com>
This commit removes the docs/reference/commands.txt file and instead
uses the Cobra built-in documentation generator to create markdown
documents for every command.
Signed-off-by: Lance Ball <lball@redhat.com>
Signed-off-by: Lance Ball <lball@redhat.com>
* chore: shared builder constants etc
* pretty-print the shared unknown builder error
* update builder impls to use shared defs and validators
* error and docs text formatting
* include static default short names
* comment updates and typos
* docs paths
* use the constants for the in-package builder defaults
* use builders.All but with caviat
* use '.' in flags to indicate default function path
* regen commands.txt with '.' as default path
* centralize dot expansion
* minor cleanup
* update all references to path flag
* exits should be panics
* fix: ensure registry in func.yaml is respected
If the user has a value specified in func.yaml for the image registry,
that value should be used by the build command, if not otherwise
specified as a flag or via the environment.
Fixes: https://github.com/knative-sandbox/kn-plugin-func/issues/1159
Signed-off-by: Lance Ball <lball@redhat.com>
* fixup: lint
Signed-off-by: Lance Ball <lball@redhat.com>
Signed-off-by: Lance Ball <lball@redhat.com>
* first run, F -> f
* fix
* fix
* misspells
* client*.go files
* add client*.go: misspells
* cmd dir test files
* docker dir
* function* files
* i*.go and job.go
* job.go,mock dir,repos*,s2i dir,schema dir,templates*
* test dir
* testing dir
* root dir *.go second round
* docs: replace commands.md with generated text file
This commit removes commands.md document which tends to get out of date
pretty easily and replaces it with a generated commands.txt file. The
help text generation is fairly naive, but should be sufficient for the
time being.
Signed-off-by: Lance Ball <lball@redhat.com>
* fixup: tweak title formatting
Signed-off-by: Lance Ball <lball@redhat.com>
* fixup: run build-docs.sh again after recent change
Signed-off-by: Lance Ball <lball@redhat.com>
* fixup: add docs generation to make build target
Also removes the random UUID as the default for `invoke` since it's a
little misleading. That value will not be the one that's used, since
it's random. And because it's random, it changes the docs every time.
Signed-off-by: Lance Ball <lball@redhat.com>
* check namespace; add to func.yaml on first deploy; added tests and mock kubeconfig for testing
* change func args because only f.Namespace is used instead of the whole struct
* func comment
* misspell
* fix tests
* warning in stderr
* use context.Background
* add fake kubeconfig for new test
* --image can be given with digest, created parser and edited some help text to reflect this
* fixed small stuff
* tests for deploy with --image
* move parser to file, static test should be kept active
* updated some error mesgs; now prints a warning if flags not set explicitly, if set to a wrong value, return an error; updated tests to fit new error messages
* --image flag message edit
* removed warning; instead print info about disabled push a build unconditionally
* Better input handling for non-tty
Signed-off-by: Matej Vasek <mvasek@redhat.com>
* Make cred-helper 'not implemented' non fatal error
Signed-off-by: Matej Vasek <mvasek@redhat.com>
* spelling
* feat: full build options on deploy
* increase e2e lifecycle test timeout to 45m
* remove redundant flag shorthand b
* map flags for parsing
* feat: detect built image staleness and utilize on run command
* write directly to sha256 rather than buffer
* client test cleanup
* remove superfluous test println
* ensure runtime dir
* close file opened when testing
* fix typos
* typos and missing test case
* update root and version structure and help text
* fix: limit openshift int test with tag
* refactor: commands to use simplifed, unified constructor
* fix ineffectual assignment lint error
* cleanup
* add repository to run command
* callout for forthcoming s2i builder impl
* lint errors
* re-add the deferred client factory
* remove setNamespaceFlag now that it is persistent
* avoid side-effect of global-mutating deploy tests
* reduce line-by-line difference for PR ease
* simplificaiton of tests and comment lines for further PR ease purposes
* reduce inconsequential differences for ease of PR
* tests to RootCommandConfig
* review comment updates
* fix lint errors
* replace stdlib Setenv in tests
Using t.Setenv will require an update to go1.17, which is out of scope
for this PR.
* pass ClientFactory throughout
* explicitly empty test command args
See https://github.com/spf13/cobra/pull/155
Errors can still be encountered when, for example, using precomiled
tests. Explicitly setting constructed command args to the empty slice
ensures we avoid hitting any futher edge cases.
* update root and version structure and help text
* fix: limit openshift int test with tag
* src: verbosity to constructor param
* fix misspelling
* fix merge error
* added git related flags for remote builds
* fix dependency issues
* remove context cancel
* add # split for git url
* account for the use of git args with local build type
* fix error message for build type
* src: refactor commands
Commands are constructed from root,
not by using init() blocks.
Signed-off-by: Matej Vasek <mvasek@redhat.com>
* fixup the prefix issue
Signed-off-by: Matej Vasek <mvasek@redhat.com>
* fixup style
Signed-off-by: Matej Vasek <mvasek@redhat.com>
* fixup nolint:misspell
Signed-off-by: Matej Vasek <mvasek@redhat.com>
* feat: completion --build flag of deploy sub-cmd
Signed-off-by: Matej Vasek <mvasek@redhat.com>
* src: refactor
Moved functionality.
Signed-off-by: Matej Vasek <mvasek@redhat.com>
* feat!: rename 'emit' to 'invoke' and default to local
This commit renames 'func emit' command to 'func invoke' and makes the
default behavior to send an event to localhost. The special '--sink'
value 'local' is changed to 'cluster' to indicate that the function
should be invoked on the cluster instead of locally. All other behavior
has remained the same.
BREAKING CHANGE
Signed-off-by: Lance Ball <lball@redhat.com>
* fixup: update commands.md doc
Signed-off-by: Lance Ball <lball@redhat.com>
* squash: change Emitter interface to Invoker
Changes Emit() to Send() in the (now named) Invoker interface, and changes
Emit() to Invoke() in the client.
BREAKING CHANGE
Signed-off-by: Lance Ball <lball@redhat.com>
* squash: use a common Invoker interface for HTTP and events
Signed-off-by: Lance Ball <lball@redhat.com>
* checkpoint
Signed-off-by: Lance Ball <lball@redhat.com>
* fixup: change Emitter to EventInvoker
Signed-off-by: Lance Ball <lball@redhat.com>
* Invoke v2 Draft
* feat: client invoke function
* static invoke defaults and methods
* remove assimilated invoker package
* includes an ignored .func directory on create
* Instances manager with local and remote defaults
Funciton Info is now Instance, representing a Function in a given
environment.
Describing a Function instance is now Instances().Get(f, environment)
Moves Runner to be async with a Stop method to enable returning runtime pid
and port for persisting.
Instances now have a place for primary Route in addition to all routes slice
Running Functions write PID and Port to .func
* cascading targets: local vs remote vs ad-hoc endpoint
* runner start signals and cancel cleanup
* return run on context done or err on channel
* async runner
Refactors the image runner to start the container asynchronously,
reporting back the port on which it started. Errors are communicated
back via a provided channel and stop is signaled using context
cancelation.
* pid neither required nor available
* add withTransport option
Incorporates addition of custom transport of the emitter into the
renamed version invoker. Flag and help text cleanup. Re-additionof the
Info accessor.
* schema now includes invocation data
* loop build msg
* run jobs
Externally exposed port is now chosen based on availability, with 8080
preferred and falling back to an os-chosen open port.
The Client Run method is now async, returning the port assigned to the
running Function, a stop/cleanup function and a runtime errors channel.
The Runner is internally divided into the runner and its started Jobs.
* job metadata
Extracts job metadata tracking to a Job object in the core,
Handles multiple instances of the same Function by creating a single
file for each instances in .func/instances/<port>
* remove superfluous error types and flag bindings
* feat: enable invoke target remote
* feat: preferentially invoke local, remote if running
* feat: read --file for invoke
* feat: invoke confirm prompts
* fixup cli tests
- Updates to handle asynchronous Runner
- Standardize on the naming convention for selective running
* docker runner tests and lint errors
* test refactor
* feat: invoke format override
* comments, spelling and other cleanup
* invoke command doc
* feat: invoke format interactive option
* rename runjob.go to job.go
* e2e test flag update
* test naming homoginization
* silence build activity messages when verbose
* test debugging
* code review updates
- return Job from Client.Run rather than constituent members
- Treat .gitignore as contentious, punting on feature to mutate if
extant.
- docs wording changes
- add invocation format to pertinent manifest.yaml files
* help text spelling etc.
Co-authored-by: Lance Ball <lball@redhat.com>
* Use common functionality for docker cred retrieval
Signed-off-by: Matej Vasek <mvasek@redhat.com>
* fixup: docker auth secret for tekton pipeline
Signed-off-by: Matej Vasek <mvasek@redhat.com>
* fixup: style
Signed-off-by: Matej Vasek <mvasek@redhat.com>
* allow build to be triggered from run when fn.Image is missing
* add build check when run by the run command
* added unit test for run command
* remove log output
* rename run test
* change build trigger to be managed by a flag and not a prompt
* tlet users know about the --build flag in the error message
* fix code check issue
* add some debug info to the run_test
* Update cmd/run.go
Co-authored-by: Luke Kingland <58986931+lkingland@users.noreply.github.com>
* add build field to runConfig
* fix issue with cmd args for testing
* refactor run tests to use mocks
* update imageless function run error message
* add check for build error test case
* run unit test cleanup
* empty commit
Co-authored-by: Luke Kingland <58986931+lkingland@users.noreply.github.com>
* src: dialer pod auto-exit
The pod should exit (be Completed) when func exits.
Signed-off-by: Matej Vasek <mvasek@redhat.com>
* feat: use in cluster dialer by default
This sets http.DefaultTransport to our specialized RoundTripper.
The RoundTripper first tries dial in standard way.
If dial operation fails due to hostname resolution error
in cluster dialer will be used.
Signed-off-by: Matej Vasek <mvasek@redhat.com>
These flags are used by multiple commands, and explicitly setting them for
each command risks errors that may not be easily detected (see the deleted
flag text for `namespace` in deploy.go). The downside to this is that wording
is not sligtly tweaked for the command - see again some of the removed text
for `namespace` that was slightly different for each command, but usefully so.
I'm not 100% convinced this change is needed, since it does reduce the flexibility
of the user facing text. But if it had existed before we wouldn't have had
incorrect text for `deploy`.
Fixes: https://github.com/knative-sandbox/kn-plugin-func/issues/221
Signed-off-by: Lance Ball <lball@redhat.com>
* feat: config and repository path creation
Removes need to use a client to trigger creation of paths
Adds back static path accessors
Enables creation of paths when configured repos is outside config
Cleans up instantiation logic, including removal of some setters
* fix spelling mistakes per review
* add flag to push image at the end of a successful build
* ensure that push flag is binded to viper
* add unit test to build command
* change build test name
* add registry to build test
* fix e2e test problem
* fix compile error
* add push fail test case
* avoid pusher instanciation in absence of push flag
* fix: make registry validation work again
In ccf00152be
the behavior of `NewFunction()` changed slightly, such that it no longer actually
works without a provided and valid path. This was not caught in any of the
tests, because it's the CLI code that was making this call, and the end to end
tests that exercise the build command, use the `--repository` flag, causing
the repository validation code path to be slightly different.
This commit just adds the path so that `func build` without a `--repository` flag will work again.
Signed-off-by: Lance Ball <lball@redhat.com>
* fixup: add validation for registry flag and a test
Signed-off-by: Lance Ball <lball@redhat.com>
* making language as required flag
* create tests fixed
* gofmt
* more tests fixed
* more tests added for invalid runtime and template
* changes removed from client library
Co-authored-by: Luke Kingland <58986931+lkingland@users.noreply.github.com>
* src: directly serialize Function metadata as func.yaml
Functions now save directly to func.yaml using .Write().
Fixes a serialization error where defaults were not respected on load.
Moves runtime and template defaults into function constructor.
Extracts Function validation (was config validation) into separate functions.
Extracts associated test files (validation) into separate unit test files.
Updates schema generator to use Function
* comment spelling and re-enabling tests