⚠️ Action Required
func deploy's--git-url,--git-dirand--git-branchare renamed--source,--source-dirand--revision, andbuild.gitin func.yaml becomesbuild.source(existing files are migrated on load) by @gauron99 - #4048func deploy --remote --source <url>deploys the func.yaml committed in the repository and rejects function flags other than--builder,--registry,--registry-insecureand--namespaceby @gauron99 - #4064func logsprints the available logs and exits; usefunc logs -forFUNC_FOLLOW=trueto stream by @Ankitsinghsisodya - #4016- func needs func-operator v0.4.0 or later by @gauron99 - #4104
- The keda deployer needs RBAC for
scaledobjects.keda.shandtriggerauthentications.keda.sh; add both to afunc-deployerRole you set up by hand by @aliok - #4077 - func runs
ghcr.io/knative/func-utils:1.24in the cluster instead of the floatingv2tag; if you mirror images, mirror the new tag by @gauron99 - #3994 - Switching a deployed function to another deployer is refused; delete the function first by @gauron99 - #3991
✨ Features / Enhancements
- Kafka: functions in any runtime consume from Apache Kafka through a runtime sidecar (
run.kafka, keda or raw deployer) by @aliok - #4060 - Kafka: TLS and SASL authentication for Kafka functions by @aliok - #3975
- Kafka: KEDA autoscaling on consumer lag (
scale.keda) by @aliok - #4069 - Kafka: the runtime sidecar defaults to the released
fkafka-runtime:v0.1.0image; override it withFUNC_KAFKA_RUNTIME_IMAGEby @aliok - #4095 - Kafka: the default runtime image can be set at build time with
-ldflagsby @maschmid - #4113 - Top-level
scalefield in func.yaml replacesdeploy.options.scale; existing files are migrated by @aliok - #4063 - Expose raw and keda functions through an OpenShift Route with
func deploy --expose=routeby @gauron99 - #3991 - Deploy a function from a git repository without a local copy by @gauron99 - #4064
func listshows a REPLICAS column by @pmeida - #4011- Show API server warnings when syncing the Function CR by @gauron99 - #4092
func cluster createruns the registry inside the cluster by @lkingland - #3856func cluster createinstalls act for local GitHub Actions workflow runs by @lkingland - #3968func cluster create --serving=falseinstalls Contour; drop the unusedfunc cluster delete --container-engineby @lkingland - #3985- MCP: add
config_git_setandconfig_git_removetools by @Ankitsinghsisodya - #3818 - MCP: add
logstool by @Ankitsinghsisodya - #3819 - MCP: add repository list, add, rename and remove tools by @Ankitsinghsisodya - #3823
- MCP: add
invoketool by @Ankitsinghsisodya - #3986 - MCP: add
describetool returning structured JSON by @Ankitsinghsisodya - #3995 - MCP: add
versiontool by @Ankitsinghsisodya - #3996 - MCP: add
config_citool for CI/CD workflow generation by @Ankitsinghsisodya - #3997 - MCP: add
runandrun_stoptools by @Ankitsinghsisodya - #3998 - MCP:
listtool returns structured JSON by @Ankitsinghsisodya - #4001 - MCP: add
onboardprompt by @Ankitsinghsisodya - #4021
🔐 Security
- MCP: block
buildwith push in read-only mode by @Ankitsinghsisodya - #3828 - MCP: add read-only guard to config add and remove handlers by @Elvand-Lie - #3708
🐛 Bug Fixes
- Use one dockerconfigjson registry Secret,
<function>-registry-auth, for remote builds and func-operator; remote builds no longer overwrite the Pipelines as Code Secret by @gauron99 - #4082 - ACR login uses the Azure SDK instead of the Azure CLI's deprecated
accessToken.jsonby @dbalseiro - #3398 - A failed remote deploy no longer changes func.yaml in the working tree by @gauron99 - #3919
func subscribe --filterrejects malformed filters and keeps values that contain=by @axhatggg - #4036func listfills the RUNTIME column by @pmeida - #4010func config ciuses the builder set in func.yaml by @pmeida - #4033func config citakes the func version from the binary instead of a hardcoded string by @pmeida - #4029- Python host builder: fix file permissions on OpenShift by @matejvasek - #4037
func cluster createwaits for the CoreDNS rollout by @gauron99 - #4038- Local run removes all stale
.func/runs/<port>directories by @Elvand-Lie - #3989 - Remove the temporary clone directory after writing a repository by @gauron99 - #4053
🧹 Code Cleanup
- Inject k8s.Client into the listers by @pmeida - #4003
- Remove leftover unused files by @gauron99 - #4018
- Use
build.sourcein the on-cluster build guide by @gauron99 - #4059 - Update go-git/v5 to the latest release by @dsimansk - #4050
- Fix stale prometheus/common version by @dsimansk - #4114
- Use the steering-committee alias in OWNERS by @dsimansk - #4079
🧪 CI / Build / Testing
- Run CI in release branches by @gauron99 - #3982
- Skip the Functions workflow on doc-only changes by @Ankitsinghsisodya - #3833
- Detect Podman 5 v2 registries.conf in the test registry setup by @gauron99 - #3993
- Move GitHub Actions off the deprecated node20 runtime by @aliok - #4085
- Run the e2e suite with any default deployer by @gauron99 - #4109
- Deflake TestFingerprint_FuncIgnoreComments by @aliok - #4084
- Test MCP read-only enforcement, delete validation and help resources by @Ankitsinghsisodya - #3831
- Test that env vars reach the generated Knative Service by @matzew - #4012
- Test that redeploys record the deployer by @gauron99 - #4008
- Pin the func version in the config CI workflow test by @pmeida - #4034