Skip to content

Commit 20eb6bd

Browse files
committed
Merge remote-tracking branch 'upstream/stable' into stable
2 parents 44b761b + 3e3afa9 commit 20eb6bd

File tree

198 files changed

+11272
-2273
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

198 files changed

+11272
-2273
lines changed

.github/workflows/build_wheels.yml

+11-53
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ on:
2929

3030
jobs:
3131
build-python-wheel:
32-
name: Build wheels
32+
name: Build wheels and source
3333
runs-on: ubuntu-latest
3434
steps:
3535
- uses: actions/checkout@v4
@@ -50,77 +50,39 @@ jobs:
5050
with:
5151
custom_version: ${{ github.event.inputs.custom_version }}
5252
token: ${{ github.event.inputs.token }}
53-
- name: Build wheels
53+
- name: Checkout version and install dependencies
5454
env:
5555
VERSION: ${{ steps.get-version.outputs.release_version }}
5656
PYPI_PASSWORD: ${{ secrets.PYPI_PASSWORD }}
5757
run: |
5858
git fetch --tags
5959
git checkout ${VERSION}
6060
python -m pip install build
61-
python -m build --wheel --outdir wheelhouse/
61+
- name: Build feast
62+
run: python -m build
6263
- uses: actions/upload-artifact@v4
6364
with:
6465
name: python-wheels
65-
path: ./wheelhouse/*.whl
66-
67-
build-source-distribution:
68-
name: Build source distribution
69-
runs-on: macos-13
70-
steps:
71-
- uses: actions/checkout@v4
72-
- name: Setup Python
73-
id: setup-python
74-
uses: actions/setup-python@v5
75-
with:
76-
python-version: "3.11"
77-
architecture: x64
78-
- name: Setup Node
79-
uses: actions/setup-node@v3
80-
with:
81-
node-version-file: './ui/.nvmrc'
82-
registry-url: 'https://registry.npmjs.org'
83-
- id: get-version
84-
uses: ./.github/actions/get-semantic-release-version
85-
with:
86-
custom_version: ${{ github.event.inputs.custom_version }}
87-
token: ${{ github.event.inputs.token }}
88-
- name: Build and install dependencies
89-
env:
90-
VERSION: ${{ steps.get-version.outputs.release_version }}
91-
# There's a `git restore` in here because `make install-go-ci-dependencies` is actually messing up go.mod & go.sum.
92-
run: |
93-
git fetch --tags
94-
git checkout ${VERSION}
95-
pip install -U pip setuptools wheel twine
96-
make build-ui
97-
git status
98-
git restore go.mod go.sum
99-
git restore sdk/python/feast/ui/yarn.lock
100-
- name: Build
101-
run: |
102-
python3 setup.py sdist
103-
- uses: actions/upload-artifact@v4
104-
with:
105-
name: source-distribution
10666
path: dist/*
10767

10868
# We add this step so the docker images can be built as part of the pre-release verification steps.
10969
build-docker-images:
11070
name: Build Docker images
11171
runs-on: ubuntu-latest
112-
needs: [ build-python-wheel, build-source-distribution ]
72+
needs: [ build-python-wheel ]
11373
strategy:
11474
matrix:
11575
component: [ feature-server-dev, feature-server-java, feature-transformation-server, feast-operator ]
11676
env:
117-
REGISTRY: feastdev
77+
REGISTRY: quay.io/feastdev
11878
steps:
11979
- uses: actions/checkout@v4
12080
- name: Set up QEMU
121-
uses: docker/setup-qemu-action@v1
81+
uses: docker/setup-qemu-action@v3
12282
- name: Set up Docker Buildx
123-
uses: docker/setup-buildx-action@v1
83+
uses: docker/setup-buildx-action@v3
84+
with:
85+
install: true
12486
- id: get-version
12587
uses: ./.github/actions/get-semantic-release-version
12688
with:
@@ -137,7 +99,7 @@ jobs:
13799
verify-python-wheels:
138100
name: Verify Python wheels
139101
runs-on: ${{ matrix.os }}
140-
needs: [ build-python-wheel, build-source-distribution ]
102+
needs: [ build-python-wheel ]
141103
strategy:
142104
matrix:
143105
os: [ ubuntu-latest, macos-13 ]
@@ -168,10 +130,6 @@ jobs:
168130
with:
169131
name: python-wheels
170132
path: dist
171-
- uses: actions/[email protected]
172-
with:
173-
name: source-distribution
174-
path: dist
175133
- name: Install OS X dependencies
176134
if: matrix.os == 'macos-13'
177135
run: brew install coreutils

.github/workflows/operator-e2e-integration-tests.yml

+39-4
Original file line numberDiff line numberDiff line change
@@ -36,14 +36,33 @@ jobs:
3636
- name: Checkout code
3737
uses: actions/checkout@v4
3838

39+
- name: Free Disk Space (Ubuntu)
40+
uses: jlumbroso/[email protected]
41+
with:
42+
android: true
43+
dotnet: true
44+
haskell: true
45+
large-packages: false
46+
docker-images: false
47+
swap-storage: false
48+
tool-cache: false
49+
3950
- name: Set up Go
4051
uses: actions/setup-go@v5
4152
with:
4253
go-version: 1.22.9
4354

4455
- name: Create KIND cluster
4556
run: |
46-
kind create cluster --name $KIND_CLUSTER --wait 10m
57+
cat <<EOF | kind create cluster --name $KIND_CLUSTER --wait 10m --config=-
58+
kind: Cluster
59+
apiVersion: kind.x-k8s.io/v1alpha4
60+
nodes:
61+
- role: control-plane
62+
extraMounts:
63+
- hostPath: /mnt/kind
64+
containerPath: /var/lib/containerd
65+
EOF
4766
4867
- name: Set up kubernetes context
4968
run: |
@@ -56,6 +75,24 @@ jobs:
5675
cd infra/feast-operator/
5776
make test-e2e
5877
78+
- name: Run Previous version tests
79+
run: |
80+
# Run the previous version tests
81+
cd infra/feast-operator/
82+
make test-previous-version
83+
84+
- name: Clean up docker images
85+
if: always()
86+
run: |
87+
docker images --format '{{.Repository}}:{{.Tag}}' | grep 'feast' | xargs -r docker rmi -f
88+
docker system prune -a -f
89+
90+
- name: Run Upgrade tests
91+
run: |
92+
# Run the upgrade tests
93+
cd infra/feast-operator/
94+
make test-upgrade
95+
5996
- name: Debug KIND Cluster when there is a failure
6097
if: failure()
6198
run: |
@@ -66,6 +103,4 @@ jobs:
66103
if: always()
67104
run: |
68105
# Delete the KIND cluster after tests
69-
kind delete cluster --name kind-$KIND_CLUSTER
70-
71-
106+
kind delete cluster --name kind-$KIND_CLUSTER

.github/workflows/publish_images.yml

+12-9
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ jobs:
3232
component: [ feature-server, feature-server-java, feature-transformation-server, feast-helm-operator, feast-operator ]
3333
env:
3434
MAVEN_CACHE: gs://feast-templocation-kf-feast/.m2.2020-08-19.tar
35-
REGISTRY: feastdev
35+
REGISTRY: quay.io/feastdev
3636
steps:
3737
- uses: actions/checkout@v4
3838
with:
@@ -43,14 +43,17 @@ jobs:
4343
custom_version: ${{ github.event.inputs.custom_version }}
4444
token: ${{ github.event.inputs.token }}
4545
- name: Set up QEMU
46-
uses: docker/setup-qemu-action@v1
46+
uses: docker/setup-qemu-action@v3
4747
- name: Set up Docker Buildx
48-
uses: docker/setup-buildx-action@v1
49-
- name: Login to DockerHub
50-
uses: docker/login-action@v1
48+
uses: docker/setup-buildx-action@v3
5149
with:
52-
username: ${{ secrets.DOCKERHUB_USERNAME }}
53-
password: ${{ secrets.DOCKERHUB_TOKEN }}
50+
install: true
51+
- name: Login to Quay.io
52+
uses: docker/login-action@v3
53+
with:
54+
registry: quay.io
55+
username: ${{ secrets.QUAYIO_USERNAME }}
56+
password: ${{ secrets.QUAYIO_TOKEN }}
5457
- name: Authenticate to Google Cloud
5558
uses: 'google-github-actions/auth@v1'
5659
with:
@@ -77,6 +80,6 @@ jobs:
7780
echo "Only push to latest tag if tag is the highest semver version $HIGHEST_SEMVER_TAG"
7881
if [ "${VERSION_WITHOUT_PREFIX}" = "${HIGHEST_SEMVER_TAG:1}" ]
7982
then
80-
docker tag feastdev/${{ matrix.component }}:${VERSION_WITHOUT_PREFIX} feastdev/${{ matrix.component }}:latest
81-
docker push feastdev/${{ matrix.component }}:latest
83+
docker tag ${REGISTRY}/${{ matrix.component }}:${VERSION_WITHOUT_PREFIX} ${REGISTRY}/${{ matrix.component }}:latest
84+
docker push ${REGISTRY}/${{ matrix.component }}:latest
8285
fi

CHANGELOG.md

+71
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,76 @@
11
# Changelog
22

3+
# [0.47.0](https://github.com/feast-dev/feast/compare/v0.46.0...v0.47.0) (2025-03-10)
4+
5+
6+
* feat!: Include PUBLIC_URL in defaultProjectListPromise URL in /ui ([2f0f7b3](https://github.com/feast-dev/feast/commit/2f0f7b386c7297ea8393ad4e3d73b198581f341b))
7+
8+
9+
### Bug Fixes
10+
11+
* Add transformation_service_endpoit to support Go feature server. ([#5071](https://github.com/feast-dev/feast/issues/5071)) ([5627d7c](https://github.com/feast-dev/feast/commit/5627d7cd3676d61290cd716b74feb9212227b5fa))
12+
* Adding extra space on the VM to kind cluster to see if this solves the issue with memory not available with operator e2e tests. ([#5102](https://github.com/feast-dev/feast/issues/5102)) ([e6e928c](https://github.com/feast-dev/feast/commit/e6e928c1f53fe323359275d9ab05b235ace04026))
13+
* Allow unencrypted Snowflake key ([#5097](https://github.com/feast-dev/feast/issues/5097)) ([87a7c23](https://github.com/feast-dev/feast/commit/87a7c23dac7e5b99471b90ee9f2bf375c5705210))
14+
* Cant add different type of list types ([#5118](https://github.com/feast-dev/feast/issues/5118)) ([bebd7be](https://github.com/feast-dev/feast/commit/bebd7be16aeabc2c7f2e0f570393c0fabe219d8b))
15+
* Fixing transformations on writes ([#5127](https://github.com/feast-dev/feast/issues/5127)) ([95ac34a](https://github.com/feast-dev/feast/commit/95ac34a63ce99186be003ba28a21f93fc9d81fce))
16+
* Identify s3/remote uri path correctly ([#5076](https://github.com/feast-dev/feast/issues/5076)) ([93becff](https://github.com/feast-dev/feast/commit/93becff68a3552c0cfa6dbcd2b9e778083328472))
17+
* Increase available action VM storage and reduce dev feature-server image size ([#5112](https://github.com/feast-dev/feast/issues/5112)) ([75f5a90](https://github.com/feast-dev/feast/commit/75f5a90536f7caa566b38b9c368ec33a90d2bfa5))
18+
* Move Feast to pyproject.toml instead of setup.py ([#5067](https://github.com/feast-dev/feast/issues/5067)) ([4231274](https://github.com/feast-dev/feast/commit/4231274800873c1421ffa95602d7ee36a9265eb5))
19+
* Skip refresh if already in progress or if lock is already held ([#5068](https://github.com/feast-dev/feast/issues/5068)) ([f3a24de](https://github.com/feast-dev/feast/commit/f3a24dea078ca5ecaace9fe100b7190972e6617d))
20+
21+
22+
### Features
23+
24+
* Add an OOTB Chat uI to the Feature Server to support RAG demo ([#5106](https://github.com/feast-dev/feast/issues/5106)) ([40ea7a9](https://github.com/feast-dev/feast/commit/40ea7a924bcfa6b9ca55125c1ba7ac9c82f6d280))
25+
* Add Couchbase Columnar as an Offline Store ([#5025](https://github.com/feast-dev/feast/issues/5025)) ([4373cbf](https://github.com/feast-dev/feast/commit/4373cbf9974eff7f8913a1d0ade14c0a1f385295))
26+
* Add Feast Operator RBAC example with Kubernetes Authentication … ([#5077](https://github.com/feast-dev/feast/issues/5077)) ([2179fbe](https://github.com/feast-dev/feast/commit/2179fbe41b53e1c10bf83f142fcc7fba43e83bdf))
27+
* Added docling and pytorch as add on ([#5089](https://github.com/feast-dev/feast/issues/5089)) ([135342b](https://github.com/feast-dev/feast/commit/135342bb1665dbed58912c61ee7c00e2f61b6ef2))
28+
* Feast Operator example with Postgres in TLS mode. ([#5028](https://github.com/feast-dev/feast/issues/5028)) ([2c46f6a](https://github.com/feast-dev/feast/commit/2c46f6a283294fc4c7d90c792d560f01ae0f1b64))
29+
* Operator - Add feastProjectDir section to CR with git & init options ([#5079](https://github.com/feast-dev/feast/issues/5079)) ([d64f01e](https://github.com/feast-dev/feast/commit/d64f01ecf406f9d429196ae0bd08a84ec90f0c15))
30+
* Override the udf name when provided as input to an on demand transformation ([#5094](https://github.com/feast-dev/feast/issues/5094)) ([8a714bb](https://github.com/feast-dev/feast/commit/8a714bb57093a1a77057748ad9eb1f529d34f41e))
31+
* Set value_type of entity directly in from_proto ([#5092](https://github.com/feast-dev/feast/issues/5092)) ([90e7498](https://github.com/feast-dev/feast/commit/90e7498c8a65eac685d35b83d709f647b03f1445))
32+
* Updating retrieve online documents v2 to work for other fields for sq… ([#5082](https://github.com/feast-dev/feast/issues/5082)) ([fc121c3](https://github.com/feast-dev/feast/commit/fc121c3fb96ffb6e8dcaf096ccdda3933492972d))
33+
34+
35+
### BREAKING CHANGES
36+
37+
* The PUBLIC_URL environment variable is now taken into account by default
38+
when fetching the projects list. This is a breaking change only if all
39+
these points apply:
40+
41+
1. You're using Feast UI as a module
42+
43+
2. You're serving the UI files from a non-root path via the PUBLIC_URL
44+
environment variable
45+
46+
3. You're serving the project list from the root path
47+
48+
4. You're not passing the `feastUIConfigs.projectListPromise` prop to
49+
the FeastUI component
50+
51+
In this case, you need to explicitly fetch the project list from the
52+
root path via the `feastUIConfigs.projectListPromise` prop:
53+
54+
```diff
55+
const root = createRoot(document.getElementById("root")!);
56+
root.render(
57+
<React.StrictMode>
58+
- <FeastUI />
59+
+ <FeastUI
60+
+ feastUIConfigs={{
61+
+ projectListPromise: fetch("/projects-list.json", {
62+
+ headers: {
63+
+ "Content-Type": "application/json",
64+
+ },
65+
+ }).then((res) => res.json())
66+
+ }}
67+
+ />
68+
</React.StrictMode>
69+
);
70+
```
71+
72+
Signed-off-by: Harri Lehtola <[email protected]>
73+
374
# [0.46.0](https://github.com/feast-dev/feast/compare/v0.45.0...v0.46.0) (2025-02-17)
475

576

MANIFEST.in

+1
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,4 @@ prune examples
77

88
graft sdk/python/feast/ui/build
99
graft sdk/python/feast/embedded_go/lib
10+
recursive-include sdk/python/feast/static *

Makefile

+28-1
Original file line numberDiff line numberDiff line change
@@ -402,9 +402,36 @@ test-python-universal-qdrant-online:
402402
-k "test_retrieve_online_documents" \
403403
sdk/python/tests/integration/online_store/test_universal_online.py
404404

405+
# To use Couchbase as an offline store, you need to create an Couchbase Capella Columnar cluster on cloud.couchbase.com.
406+
# Modify environment variables COUCHBASE_COLUMNAR_CONNECTION_STRING, COUCHBASE_COLUMNAR_USER, and COUCHBASE_COLUMNAR_PASSWORD
407+
# with the details from your Couchbase Columnar Cluster.
408+
test-python-universal-couchbase-offline:
409+
PYTHONPATH='.' \
410+
FULL_REPO_CONFIGS_MODULE=sdk.python.feast.infra.offline_stores.contrib.couchbase_columnar_repo_configuration \
411+
PYTEST_PLUGINS=feast.infra.offline_stores.contrib.couchbase_offline_store.tests \
412+
COUCHBASE_COLUMNAR_CONNECTION_STRING=couchbases://<connection_string> \
413+
COUCHBASE_COLUMNAR_USER=username \
414+
COUCHBASE_COLUMNAR_PASSWORD=password \
415+
python -m pytest -n 8 --integration \
416+
-k "not test_historical_retrieval_with_validation and \
417+
not test_historical_features_persisting and \
418+
not test_universal_cli and \
419+
not test_go_feature_server and \
420+
not test_feature_logging and \
421+
not test_reorder_columns and \
422+
not test_logged_features_validation and \
423+
not test_lambda_materialization_consistency and \
424+
not test_offline_write and \
425+
not test_push_features_to_offline_store and \
426+
not gcs_registry and \
427+
not s3_registry and \
428+
not test_snowflake and \
429+
not test_universal_types" \
430+
sdk/python/tests
431+
405432
test-python-universal-couchbase-online:
406433
PYTHONPATH='.' \
407-
FULL_REPO_CONFIGS_MODULE=sdk.python.feast.infra.online_stores.contrib.couchbase_repo_configuration \
434+
FULL_REPO_CONFIGS_MODULE=sdk.python.feast.infra.online_stores.couchbase_online_store.couchbase_repo_configuration \
408435
PYTEST_PLUGINS=sdk.python.tests.integration.feature_repos.universal.online_store.couchbase \
409436
python -m pytest -n 8 --integration \
410437
-k "not test_universal_cli and \

README.md

+8-4
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,9 @@ The list below contains the functionality that contributors are planning to deve
151151

152152
* We welcome contribution to all items in the roadmap!
153153

154+
* **Natural Language Processing**
155+
* [x] Vector Search (Alpha release. See [RFC](https://docs.google.com/document/d/18IWzLEA9i2lDWnbfbwXnMCg3StlqaLVI-uRpQjr_Vos/edit#heading=h.9gaqqtox9jg6))
156+
* [ ] [Enhanced Feature Server and SDK for native support for NLP](https://github.com/feast-dev/feast/issues/4964)
154157
* **Data Sources**
155158
* [x] [Snowflake source](https://docs.feast.dev/reference/data-sources/snowflake)
156159
* [x] [Redshift source](https://docs.feast.dev/reference/data-sources/redshift)
@@ -160,6 +163,7 @@ The list below contains the functionality that contributors are planning to deve
160163
* [x] [Hive (community plugin)](https://github.com/baineng/feast-hive)
161164
* [x] [Postgres (contrib plugin)](https://docs.feast.dev/reference/data-sources/postgres)
162165
* [x] [Spark (contrib plugin)](https://docs.feast.dev/reference/data-sources/spark)
166+
* [x] [Couchbase (contrib plugin)](https://docs.feast.dev/reference/data-sources/couchbase)
163167
* [x] Kafka / Kinesis sources (via [push support into the online store](https://docs.feast.dev/reference/data-sources/push))
164168
* **Offline Stores**
165169
* [x] [Snowflake](https://docs.feast.dev/reference/offline-stores/snowflake)
@@ -170,6 +174,7 @@ The list below contains the functionality that contributors are planning to deve
170174
* [x] [Postgres (contrib plugin)](https://docs.feast.dev/reference/offline-stores/postgres)
171175
* [x] [Trino (contrib plugin)](https://github.com/Shopify/feast-trino)
172176
* [x] [Spark (contrib plugin)](https://docs.feast.dev/reference/offline-stores/spark)
177+
* [x] [Couchbase (contrib plugin)](https://docs.feast.dev/reference/offline-stores/couchbase)
173178
* [x] [In-memory / Pandas](https://docs.feast.dev/reference/offline-stores/file)
174179
* [x] [Custom offline store support](https://docs.feast.dev/how-to-guides/customizing-feast/adding-a-new-offline-store)
175180
* **Online Stores**
@@ -185,12 +190,13 @@ The list below contains the functionality that contributors are planning to deve
185190
* [x] [Postgres (contrib plugin)](https://docs.feast.dev/reference/online-stores/postgres)
186191
* [x] [Cassandra / AstraDB (contrib plugin)](https://docs.feast.dev/reference/online-stores/cassandra)
187192
* [x] [ScyllaDB (contrib plugin)](https://docs.feast.dev/reference/online-stores/scylladb)
193+
* [x] [Couchbase (contrib plugin)](https://docs.feast.dev/reference/online-stores/couchbase)
188194
* [x] [Custom online store support](https://docs.feast.dev/how-to-guides/customizing-feast/adding-support-for-a-new-online-store)
189195
* **Feature Engineering**
190-
* [x] On-demand Transformations (Beta release. See [RFC](https://docs.google.com/document/d/1lgfIw0Drc65LpaxbUu49RCeJgMew547meSJttnUqz7c/edit#))
196+
* [x] On-demand Transformations (On Read) (Beta release. See [RFC](https://docs.google.com/document/d/1lgfIw0Drc65LpaxbUu49RCeJgMew547meSJttnUqz7c/edit#))
191197
* [x] Streaming Transformations (Alpha release. See [RFC](https://docs.google.com/document/d/1UzEyETHUaGpn0ap4G82DHluiCj7zEbrQLkJJkKSv4e8/edit))
192198
* [ ] Batch transformation (In progress. See [RFC](https://docs.google.com/document/d/1964OkzuBljifDvkV-0fakp2uaijnVzdwWNGdz7Vz50A/edit))
193-
* [ ] Persistent On-demand Transformations (Beta release. See [GitHub Issue](https://github.com/feast-dev/feast/issues/4376))
199+
* [x] On-demand Transformations (On Write) (Beta release. See [GitHub Issue](https://github.com/feast-dev/feast/issues/4376))
194200
* **Streaming**
195201
* [x] [Custom streaming ingestion job support](https://docs.feast.dev/how-to-guides/customizing-feast/creating-a-custom-provider)
196202
* [x] [Push based streaming data ingestion to online store](https://docs.feast.dev/reference/data-sources/push)
@@ -213,8 +219,6 @@ The list below contains the functionality that contributors are planning to deve
213219
* [x] DataHub integration (see [DataHub Feast docs](https://datahubproject.io/docs/generated/ingestion/sources/feast/))
214220
* [x] Feast Web UI (Beta release. See [docs](https://docs.feast.dev/reference/alpha-web-ui))
215221
* [ ] Feast Lineage Explorer
216-
* **Natural Language Processing**
217-
* [x] Vector Search (Alpha release. See [RFC](https://docs.google.com/document/d/18IWzLEA9i2lDWnbfbwXnMCg3StlqaLVI-uRpQjr_Vos/edit#heading=h.9gaqqtox9jg6))
218222

219223

220224
## 🎓 Important Resources

0 commit comments

Comments
 (0)