Skip to content

Commit e925038

Browse files
committed
squash to one commit on yourBranch
1 parent 702eebf commit e925038

File tree

527 files changed

+58841
-11566
lines changed

Some content is hidden

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

527 files changed

+58841
-11566
lines changed

.devcontainer/devcontainer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
// "forwardPorts": [],
2424

2525
// Uncomment the next line to run commands after the container is created.
26-
// "postCreateCommand": "make install-python-ci-dependencies-uv-venv"
26+
// "postCreateCommand": "make install-python-dependencies-dev"
2727

2828
// Configure tool-specific properties.
2929
// "customizations": {},
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
name: Get semantic release version
2+
description: ""
3+
inputs:
4+
custom_version: # Optional input for a custom version
5+
description: "Custom version to publish (e.g., v1.2.3) -- only edit if you know what you are doing"
6+
required: false
7+
token:
8+
description: "Personal Access Token"
9+
required: true
10+
default: ""
11+
outputs:
12+
release_version:
13+
description: "The release version to use (e.g., v1.2.3)"
14+
value: ${{ steps.get_release_version.outputs.release_version }}
15+
version_without_prefix:
16+
description: "The release version to use without 'v' (e.g., 1.2.3)"
17+
value: ${{ steps.get_release_version_without_prefix.outputs.version_without_prefix }}
18+
highest_semver_tag:
19+
description: "The highest semantic version tag without the 'v' prefix (e.g., 1.2.3)"
20+
value: ${{ steps.get_highest_semver.outputs.highest_semver_tag }}
21+
runs:
22+
using: composite
23+
steps:
24+
- name: Get release version
25+
id: get_release_version
26+
shell: bash
27+
env:
28+
GITHUB_TOKEN: ${{ inputs.token }}
29+
GIT_AUTHOR_NAME: feast-ci-bot
30+
GIT_AUTHOR_EMAIL: feast-ci-bot@willem.co
31+
GIT_COMMITTER_NAME: feast-ci-bot
32+
GIT_COMMITTER_EMAIL: feast-ci-bot@willem.co
33+
run: |
34+
if [[ -n "${{ inputs.custom_version }}" ]]; then
35+
VERSION_REGEX="^v[0-9]+\.[0-9]+\.[0-9]+$"
36+
echo "Using custom version: ${{ inputs.custom_version }}"
37+
if [[ ! "${{ inputs.custom_version }}" =~ $VERSION_REGEX ]]; then
38+
echo "Error: custom_version must match semantic versioning (e.g., v1.2.3)."
39+
exit 1
40+
fi
41+
echo "::set-output name=release_version::${{ inputs.custom_version }}"
42+
elif [[ "${GITHUB_REF}" == refs/tags/* ]]; then
43+
echo "Using tag reference: ${GITHUB_REF#refs/tags/}"
44+
echo "::set-output name=release_version::${GITHUB_REF#refs/tags/}"
45+
else
46+
echo "Defaulting to branch name: ${GITHUB_REF#refs/heads/}"
47+
echo "::set-output name=release_version::${GITHUB_REF#refs/heads/}"
48+
fi
49+
- name: Get release version without prefix
50+
id: get_release_version_without_prefix
51+
shell: bash
52+
env:
53+
RELEASE_VERSION: ${{ steps.get_release_version.outputs.release_version }}
54+
run: |
55+
if [[ "${RELEASE_VERSION}" == v* ]]; then
56+
echo "::set-output name=version_without_prefix::${RELEASE_VERSION:1}"
57+
else
58+
echo "::set-output name=version_without_prefix::${RELEASE_VERSION}"
59+
fi
60+
- name: Get highest semver
61+
id: get_highest_semver
62+
shell: bash
63+
env:
64+
RELEASE_VERSION: ${{ steps.get_release_version.outputs.release_version }}
65+
run: |
66+
if [[ -n "${{ inputs.custom_version }}" ]]; then
67+
HIGHEST_SEMVER_TAG="${{ inputs.custom_version }}"
68+
echo "::set-output name=highest_semver_tag::$HIGHEST_SEMVER_TAG"
69+
echo "Using custom version as highest semantic version: $HIGHEST_SEMVER_TAG"
70+
else
71+
source infra/scripts/setup-common-functions.sh
72+
SEMVER_REGEX='^v[0-9]+\.[0-9]+\.[0-9]+(-([0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*))?$'
73+
if echo "${RELEASE_VERSION}" | grep -P "$SEMVER_REGEX" &>/dev/null ; then
74+
echo ::set-output name=highest_semver_tag::$(get_tag_release -m)
75+
echo "Using infra/scripts/setup-common-functions.sh to generate highest semantic version: $HIGHEST_SEMVER_TAG"
76+
fi
77+
fi
78+
- name: Check output
79+
shell: bash
80+
env:
81+
RELEASE_VERSION: ${{ steps.get_release_version.outputs.release_version }}
82+
VERSION_WITHOUT_PREFIX: ${{ steps.get_release_version_without_prefix.outputs.version_without_prefix }}
83+
HIGHEST_SEMVER_TAG: ${{ steps.get_highest_semver.outputs.highest_semver_tag }}
84+
run: |
85+
echo $RELEASE_VERSION
86+
echo $VERSION_WITHOUT_PREFIX
87+
echo $HIGHEST_SEMVER_TAG

.github/fork_workflows/fork_pr_integration_tests_aws.yml

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ jobs:
7373
sudo apt update
7474
sudo apt install -y -V libarrow-dev
7575
- name: Install dependencies
76-
run: make install-python-ci-dependencies-uv
76+
run: make install-python-dependencies-ci
7777
- name: Setup Redis Cluster
7878
run: |
7979
docker pull vishnunair/docker-redis-cluster:latest
@@ -85,5 +85,3 @@ jobs:
8585
pytest -n 8 --cov=./ --cov-report=xml --color=yes sdk/python/tests --integration --durations=5 --timeout=1200 --timeout_method=thread -k "File and not Snowflake and not BigQuery and not minio_registry"
8686
pytest -n 8 --cov=./ --cov-report=xml --color=yes sdk/python/tests --integration --durations=5 --timeout=1200 --timeout_method=thread -k "dynamo and not Snowflake and not BigQuery and not minio_registry"
8787
pytest -n 8 --cov=./ --cov-report=xml --color=yes sdk/python/tests --integration --durations=5 --timeout=1200 --timeout_method=thread -k "Redshift and not Snowflake and not BigQuery and not minio_registry"
88-
89-

.github/fork_workflows/fork_pr_integration_tests_gcp.yml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ jobs:
7575
sudo apt update
7676
sudo apt install -y -V libarrow-dev
7777
- name: Install dependencies
78-
run: make install-python-ci-dependencies-uv
78+
run: make install-python-dependencies-ci
7979
- name: Setup Redis Cluster
8080
run: |
8181
docker pull vishnunair/docker-redis-cluster:latest
@@ -86,4 +86,3 @@ jobs:
8686
run: |
8787
pytest -n 8 --cov=./ --cov-report=xml --color=yes sdk/python/tests --integration --durations=5 --timeout=1200 --timeout_method=thread -k "BigQuery and not dynamo and not Redshift and not Snowflake and not minio_registry"
8888
pytest -n 8 --cov=./ --cov-report=xml --color=yes sdk/python/tests --integration --durations=5 --timeout=1200 --timeout_method=thread -k "File and not dynamo and not Redshift and not Snowflake and not minio_registry"
89-

.github/fork_workflows/fork_pr_integration_tests_snowflake.yml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ jobs:
6565
sudo apt update
6666
sudo apt install -y -V libarrow-dev
6767
- name: Install dependencies
68-
run: make install-python-ci-dependencies-uv
68+
run: make install-python-dependencies-ci
6969
- name: Setup Redis Cluster
7070
run: |
7171
docker pull vishnunair/docker-redis-cluster:latest
@@ -82,4 +82,3 @@ jobs:
8282
run: |
8383
pytest -n 8 --cov=./ --cov-report=xml --color=yes sdk/python/tests --integration --durations=5 --timeout=1200 --timeout_method=thread -k "Snowflake and not dynamo and not Redshift and not Bigquery and not gcp and not minio_registry"
8484
pytest -n 8 --cov=./ --cov-report=xml --color=yes sdk/python/tests --integration --durations=5 --timeout=1200 --timeout_method=thread -k "File and not dynamo and not Redshift and not Bigquery and not gcp and not minio_registry"
85-

.github/workflows/build_wheels.yml

Lines changed: 69 additions & 92 deletions
Original file line numberDiff line numberDiff line change
@@ -1,58 +1,35 @@
1-
name: build_wheels
1+
name: build wheels
22

33
# Call this workflow from other workflows in the repository by specifying "uses: ./.github/workflows/build_wheels.yml"
44
# Developers who are starting a new release should use this workflow to ensure wheels will be built correctly.
55
# Devs should check out their fork, add a tag to the last master commit on their fork, and run the release off of their fork on the added tag to ensure wheels will be built correctly.
66
on:
7-
workflow_dispatch:
8-
tags:
9-
- 'v*.*.*'
7+
workflow_dispatch: # Allows manual trigger of the workflow
8+
inputs:
9+
custom_version: # Optional input for a custom version
10+
description: 'Custom version to publish (e.g., v1.2.3) -- only edit if you know what you are doing'
11+
required: false
12+
type: string
13+
token:
14+
description: 'Personal Access Token'
15+
required: true
16+
default: ""
17+
type: string
1018
workflow_call:
19+
inputs:
20+
custom_version: # Optional input for a custom version
21+
description: 'Custom version to publish (e.g., v1.2.3) -- only edit if you know what you are doing'
22+
required: false
23+
type: string
24+
token:
25+
description: 'Personal Access Token'
26+
required: true
27+
default: ""
28+
type: string
1129

1230
jobs:
13-
get-version:
14-
runs-on: ubuntu-latest
15-
outputs:
16-
release_version: ${{ steps.get_release_version.outputs.release_version }}
17-
version_without_prefix: ${{ steps.get_release_version_without_prefix.outputs.version_without_prefix }}
18-
highest_semver_tag: ${{ steps.get_highest_semver.outputs.highest_semver_tag }}
19-
steps:
20-
- name: Checkout
21-
uses: actions/checkout@v4
22-
with:
23-
persist-credentials: false
24-
- name: Get release version
25-
id: get_release_version
26-
run: echo ::set-output name=release_version::${GITHUB_REF#refs/*/}
27-
- name: Get release version without prefix
28-
id: get_release_version_without_prefix
29-
env:
30-
RELEASE_VERSION: ${{ steps.get_release_version.outputs.release_version }}
31-
run: |
32-
echo ::set-output name=version_without_prefix::${RELEASE_VERSION:1}
33-
- name: Get highest semver
34-
id: get_highest_semver
35-
env:
36-
RELEASE_VERSION: ${{ steps.get_release_version.outputs.release_version }}
37-
run: |
38-
source infra/scripts/setup-common-functions.sh
39-
SEMVER_REGEX='^v[0-9]+\.[0-9]+\.[0-9]+(-([0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*))?$'
40-
if echo "${RELEASE_VERSION}" | grep -P "$SEMVER_REGEX" &>/dev/null ; then
41-
echo ::set-output name=highest_semver_tag::$(get_tag_release -m)
42-
fi
43-
- name: Check output
44-
id: check_output
45-
env:
46-
RELEASE_VERSION: ${{ steps.get_release_version.outputs.release_version }}
47-
VERSION_WITHOUT_PREFIX: ${{ steps.get_release_version_without_prefix.outputs.version_without_prefix }}
48-
HIGHEST_SEMVER_TAG: ${{ steps.get_highest_semver.outputs.highest_semver_tag }}
49-
run: |
50-
echo $RELEASE_VERSION
51-
echo $VERSION_WITHOUT_PREFIX
52-
echo $HIGHEST_SEMVER_TAG
53-
5431
build-python-wheel:
55-
name: Build wheels
32+
name: Build wheels and source
5633
runs-on: ubuntu-latest
5734
steps:
5835
- uses: actions/checkout@v4
@@ -68,54 +45,34 @@ jobs:
6845
registry-url: 'https://registry.npmjs.org'
6946
- name: Build UI
7047
run: make build-ui
71-
- name: Build wheels
72-
run: |
73-
python -m pip install build
74-
python -m build --wheel --outdir wheelhouse/
75-
- uses: actions/upload-artifact@v3
76-
with:
77-
name: wheels
78-
path: ./wheelhouse/*.whl
79-
80-
build-source-distribution:
81-
name: Build source distribution
82-
runs-on: macos-13
83-
steps:
84-
- uses: actions/checkout@v4
85-
- name: Setup Python
86-
id: setup-python
87-
uses: actions/setup-python@v5
48+
- id: get-version
49+
uses: ./.github/actions/get-semantic-release-version
8850
with:
89-
python-version: "3.11"
90-
architecture: x64
91-
- name: Setup Node
92-
uses: actions/setup-node@v3
93-
with:
94-
node-version-file: './ui/.nvmrc'
95-
registry-url: 'https://registry.npmjs.org'
96-
- name: Build and install dependencies
97-
# There's a `git restore` in here because `make install-go-ci-dependencies` is actually messing up go.mod & go.sum.
98-
run: |
99-
pip install -U pip setuptools wheel twine
100-
make build-ui
101-
git status
102-
git restore go.mod go.sum
103-
git restore sdk/python/feast/ui/yarn.lock
104-
- name: Build
51+
custom_version: ${{ github.event.inputs.custom_version }}
52+
token: ${{ github.event.inputs.token }}
53+
- name: Checkout version and install dependencies
54+
env:
55+
VERSION: ${{ steps.get-version.outputs.release_version }}
56+
PYPI_PASSWORD: ${{ secrets.PYPI_PASSWORD }}
10557
run: |
106-
python3 setup.py sdist
107-
- uses: actions/upload-artifact@v3
58+
git fetch --tags
59+
git checkout ${VERSION}
60+
python -m pip install build
61+
- name: Build feast
62+
run: python -m build
63+
- uses: actions/upload-artifact@v4
10864
with:
109-
name: wheels
65+
name: python-wheels
11066
path: dist/*
11167

11268
# We add this step so the docker images can be built as part of the pre-release verification steps.
11369
build-docker-images:
70+
name: Build Docker images
11471
runs-on: ubuntu-latest
115-
needs: get-version
72+
needs: [ build-python-wheel ]
11673
strategy:
11774
matrix:
118-
component: [feature-server, feature-server-java, feature-transformation-server]
75+
component: [ feature-server-dev, feature-server-java, feature-transformation-server, feast-operator ]
11976
env:
12077
REGISTRY: feastdev
12178
steps:
@@ -124,19 +81,27 @@ jobs:
12481
uses: docker/setup-qemu-action@v1
12582
- name: Set up Docker Buildx
12683
uses: docker/setup-buildx-action@v1
84+
- id: get-version
85+
uses: ./.github/actions/get-semantic-release-version
86+
with:
87+
custom_version: ${{ github.event.inputs.custom_version }}
88+
token: ${{ github.event.inputs.token }}
12789
- name: Build image
90+
env:
91+
VERSION_WITHOUT_PREFIX: ${{ steps.get-version.outputs.version_without_prefix }}
92+
RELEASE_VERSION: ${{ steps.get-version.outputs.release_version }}
12893
run: |
94+
echo "Building docker image for ${{ matrix.component }} with version $VERSION_WITHOUT_PREFIX and release version $RELEASE_VERSION"
12995
make build-${{ matrix.component }}-docker REGISTRY=${REGISTRY} VERSION=${VERSION_WITHOUT_PREFIX}
130-
env:
131-
VERSION_WITHOUT_PREFIX: ${{ needs.get-version.outputs.version_without_prefix }}
13296
13397
verify-python-wheels:
98+
name: Verify Python wheels
13499
runs-on: ${{ matrix.os }}
135-
needs: [build-python-wheel, build-source-distribution, get-version]
100+
needs: [ build-python-wheel ]
136101
strategy:
137102
matrix:
138-
os: [ubuntu-latest, macos-13 ]
139-
python-version: ["3.9", "3.10", "3.11"]
103+
os: [ ubuntu-latest, macos-13 ]
104+
python-version: [ "3.9", "3.10", "3.11" ]
140105
from-source: [ True, False ]
141106
env:
142107
# this script is for testing servers
@@ -151,8 +116,8 @@ jobs:
151116
else
152117
echo "Succeeded!"
153118
fi
154-
VERSION_WITHOUT_PREFIX: ${{ needs.get-version.outputs.version_without_prefix }}
155119
steps:
120+
- uses: actions/checkout@v4
156121
- name: Setup Python
157122
id: setup-python
158123
uses: actions/setup-python@v5
@@ -161,7 +126,7 @@ jobs:
161126
architecture: x64
162127
- uses: actions/download-artifact@v4.1.7
163128
with:
164-
name: wheels
129+
name: python-wheels
165130
path: dist
166131
- name: Install OS X dependencies
167132
if: matrix.os == 'macos-13'
@@ -178,13 +143,25 @@ jobs:
178143
if: ${{ matrix.from-source }}
179144
run: pip install dist/*tar.gz
180145
# Validate that the feast version installed is not development and is the correct version of the tag we ran it off of.
146+
- id: get-version
147+
uses: ./.github/actions/get-semantic-release-version
148+
with:
149+
custom_version: ${{ github.event.inputs.custom_version }}
150+
token: ${{ github.event.inputs.token }}
181151
- name: Validate Feast Version
152+
env:
153+
VERSION_WITHOUT_PREFIX: ${{ steps.get-version.outputs.version_without_prefix }}
182154
run: |
155+
feast version
156+
if ! VERSION_OUTPUT=$(feast version); then
157+
echo "Error: Failed to get Feast version."
158+
exit 1
159+
fi
183160
VERSION_REGEX='[0-9]+\.[0-9]+\.[0-9]+'
184161
OUTPUT_REGEX='^Feast SDK Version: "$VERSION_REGEX"$'
185-
VERSION_OUTPUT=$(feast version)
186162
VERSION=$(echo $VERSION_OUTPUT | grep -oE "$VERSION_REGEX")
187163
OUTPUT=$(echo $VERSION_OUTPUT | grep -E "$REGEX")
164+
echo "Installed Feast Version: $VERSION and using Feast Version: $VERSION_WITHOUT_PREFIX"
188165
if [ -n "$OUTPUT" ] && [ "$VERSION" = "$VERSION_WITHOUT_PREFIX" ]; then
189166
echo "Correct Feast Version Installed"
190167
else

0 commit comments

Comments
 (0)