Skip to content

Commit b939040

Browse files
authored
Merge branch 'master' into docs/registry-deletion-lifecycle-5360
2 parents a3ce5bb + 8a0f23c commit b939040

264 files changed

Lines changed: 40699 additions & 11374 deletions

File tree

Some content is hidden

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

.github/actions/get-semantic-release-version/action.yml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,18 @@ name: Get semantic release version
22
description: ""
33
inputs:
44
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"
5+
description: "Custom version to publish (e.g., v1.2.3 or v1.2.3.dev4) -- only edit if you know what you are doing"
66
required: false
77
token:
88
description: "Personal Access Token"
99
required: true
1010
default: ""
1111
outputs:
1212
release_version:
13-
description: "The release version to use (e.g., v1.2.3)"
13+
description: "The release version to use (e.g., v1.2.3 or v1.2.3.dev4)"
1414
value: ${{ steps.get_release_version.outputs.release_version }}
1515
version_without_prefix:
16-
description: "The release version to use without 'v' (e.g., 1.2.3)"
16+
description: "The release version to use without 'v' (e.g., 1.2.3 or 1.2.3.dev4)"
1717
value: ${{ steps.get_release_version_without_prefix.outputs.version_without_prefix }}
1818
highest_semver_tag:
1919
description: "The highest semantic version tag without the 'v' prefix (e.g., 1.2.3)"
@@ -32,10 +32,10 @@ runs:
3232
GIT_COMMITTER_EMAIL: feast-ci-bot@willem.co
3333
run: |
3434
if [[ -n "${{ inputs.custom_version }}" ]]; then
35-
VERSION_REGEX="^v[0-9]+\.[0-9]+\.[0-9]+$"
35+
VERSION_REGEX="^v[0-9]+\.[0-9]+\.[0-9]+(\.dev[0-9]+)?$"
3636
echo "Using custom version: ${{ inputs.custom_version }}"
3737
if [[ ! "${{ inputs.custom_version }}" =~ $VERSION_REGEX ]]; then
38-
echo "Error: custom_version must match semantic versioning (e.g., v1.2.3)."
38+
echo "Error: custom_version must match semantic versioning (e.g., v1.2.3 or v1.2.3.dev4)."
3939
exit 1
4040
fi
4141
echo "::set-output name=release_version::${{ inputs.custom_version }}"
@@ -84,4 +84,4 @@ runs:
8484
run: |
8585
echo $RELEASE_VERSION
8686
echo $VERSION_WITHOUT_PREFIX
87-
echo $HIGHEST_SEMVER_TAG
87+
echo $HIGHEST_SEMVER_TAG

.github/workflows/build_wheels.yml

Lines changed: 35 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,18 @@ on:
77
workflow_dispatch: # Allows manual trigger of the workflow
88
inputs:
99
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'
10+
description: 'Custom version to publish (e.g., v1.2.3 or v1.2.3.dev4) -- only edit if you know what you are doing'
1111
required: false
1212
type: string
13+
checkout_ref:
14+
description: 'Git ref to checkout before building wheels. Defaults to the release version.'
15+
required: false
16+
type: string
17+
build_docker_images:
18+
description: 'Build Docker images as part of release verification.'
19+
required: true
20+
default: true
21+
type: boolean
1322
token:
1423
description: 'Personal Access Token'
1524
required: true
@@ -18,9 +27,18 @@ on:
1827
workflow_call:
1928
inputs:
2029
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'
30+
description: 'Custom version to publish (e.g., v1.2.3 or v1.2.3.dev4) -- only edit if you know what you are doing'
2231
required: false
2332
type: string
33+
checkout_ref:
34+
description: 'Git ref to checkout before building wheels. Defaults to the release version.'
35+
required: false
36+
type: string
37+
build_docker_images:
38+
description: 'Build Docker images as part of release verification.'
39+
required: false
40+
default: true
41+
type: boolean
2442
token:
2543
description: 'Personal Access Token'
2644
required: true
@@ -48,17 +66,20 @@ jobs:
4866
- id: get-version
4967
uses: ./.github/actions/get-semantic-release-version
5068
with:
51-
custom_version: ${{ github.event.inputs.custom_version }}
52-
token: ${{ github.event.inputs.token }}
69+
custom_version: ${{ inputs.custom_version }}
70+
token: ${{ inputs.token }}
5371
- name: Checkout version and install dependencies
5472
env:
5573
VERSION: ${{ steps.get-version.outputs.release_version }}
74+
CHECKOUT_REF: ${{ inputs.checkout_ref }}
5675
PYPI_PASSWORD: ${{ secrets.PYPI_PASSWORD }}
5776
run: |
5877
git fetch --tags
59-
git checkout ${VERSION}
78+
git checkout "${CHECKOUT_REF:-$VERSION}"
6079
python -m pip install build
6180
- name: Build feast
81+
env:
82+
SETUPTOOLS_SCM_PRETEND_VERSION: ${{ steps.get-version.outputs.version_without_prefix }}
6283
run: python -m build
6384
- uses: actions/upload-artifact@v4
6485
with:
@@ -68,6 +89,7 @@ jobs:
6889
# We add this step so the docker images can be built as part of the pre-release verification steps.
6990
build-docker-images:
7091
name: Build Docker images
92+
if: ${{ inputs.build_docker_images }}
7193
runs-on: ubuntu-latest
7294
needs: [ build-python-wheel ]
7395
strategy:
@@ -96,8 +118,8 @@ jobs:
96118
- id: get-version
97119
uses: ./.github/actions/get-semantic-release-version
98120
with:
99-
custom_version: ${{ github.event.inputs.custom_version }}
100-
token: ${{ github.event.inputs.token }}
121+
custom_version: ${{ inputs.custom_version }}
122+
token: ${{ inputs.token }}
101123
- name: Build image
102124
env:
103125
VERSION_WITHOUT_PREFIX: ${{ steps.get-version.outputs.version_without_prefix }}
@@ -162,8 +184,8 @@ jobs:
162184
- id: get-version
163185
uses: ./.github/actions/get-semantic-release-version
164186
with:
165-
custom_version: ${{ github.event.inputs.custom_version }}
166-
token: ${{ github.event.inputs.token }}
187+
custom_version: ${{ inputs.custom_version }}
188+
token: ${{ inputs.token }}
167189
- name: Validate Feast Version
168190
env:
169191
VERSION_WITHOUT_PREFIX: ${{ steps.get-version.outputs.version_without_prefix }}
@@ -173,10 +195,10 @@ jobs:
173195
echo "Error: Failed to get Feast version."
174196
exit 1
175197
fi
176-
VERSION_REGEX='[0-9]+\.[0-9]+\.[0-9]+'
177-
OUTPUT_REGEX='^Feast SDK Version: "$VERSION_REGEX"$'
178-
VERSION=$(echo $VERSION_OUTPUT | grep -oE "$VERSION_REGEX")
179-
OUTPUT=$(echo $VERSION_OUTPUT | grep -E "$REGEX")
198+
VERSION_REGEX='[0-9]+\.[0-9]+\.[0-9]+(\.dev[0-9]+)?'
199+
OUTPUT_REGEX="^Feast SDK Version: \"${VERSION_REGEX}\"$"
200+
VERSION=$(echo "$VERSION_OUTPUT" | grep -oE "$VERSION_REGEX")
201+
OUTPUT=$(echo "$VERSION_OUTPUT" | grep -E "$OUTPUT_REGEX")
180202
echo "Installed Feast Version: $VERSION and using Feast Version: $VERSION_WITHOUT_PREFIX"
181203
if [ -n "$OUTPUT" ] && [ "$VERSION" = "$VERSION_WITHOUT_PREFIX" ]; then
182204
echo "Correct Feast Version Installed"

.github/workflows/linter.yml

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,16 @@
11
name: linter
22

3-
on: [push, pull_request]
3+
on:
4+
pull_request:
5+
paths-ignore:
6+
- 'docs/**'
7+
- 'community/**'
8+
- 'examples/**'
9+
push:
10+
paths-ignore:
11+
- 'docs/**'
12+
- 'community/**'
13+
- 'examples/**'
414

515
concurrency:
616
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}

.github/workflows/master_only.yml

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,16 +71,18 @@ jobs:
7171
SNOWFLAKE_CI_ROLE: ${{ secrets.SNOWFLAKE_CI_ROLE }}
7272
SNOWFLAKE_CI_WAREHOUSE: ${{ secrets.SNOWFLAKE_CI_WAREHOUSE }}
7373
run: make test-python-integration
74-
- name: Benchmark python
75-
env:
74+
- name: Benchmark python
75+
if: matrix.python-version == '3.11'
76+
env:
7677
SNOWFLAKE_CI_DEPLOYMENT: ${{ secrets.SNOWFLAKE_CI_DEPLOYMENT }}
7778
SNOWFLAKE_CI_USER: ${{ secrets.SNOWFLAKE_CI_USER }}
7879
SNOWFLAKE_CI_PASSWORD: ${{ secrets.SNOWFLAKE_CI_PASSWORD }}
7980
SNOWFLAKE_CI_ROLE: ${{ secrets.SNOWFLAKE_CI_ROLE }}
8081
SNOWFLAKE_CI_WAREHOUSE: ${{ secrets.SNOWFLAKE_CI_WAREHOUSE }}
8182
run: uv run pytest --verbose --color=yes sdk/python/tests --integration --benchmark --benchmark-autosave --benchmark-save-data --durations=5
82-
- name: Upload Benchmark Artifact to S3
83-
run: aws s3 cp --recursive .benchmarks s3://feast-ci-pytest-benchmark
83+
- name: Upload Benchmark Artifact to S3
84+
if: matrix.python-version == '3.11'
85+
run: aws s3 cp --recursive .benchmarks s3://feast-ci-pytest-benchmark
8486
- name: Minimize uv cache
8587
run: uv cache prune --ci
8688

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
name: nightly python sdk release
2+
3+
on:
4+
schedule:
5+
- cron: "0 8 * * *"
6+
workflow_dispatch:
7+
inputs:
8+
base_version:
9+
description: "Optional base version without the .dev suffix (e.g., 1.2.3). Defaults to the next semantic-release version."
10+
required: false
11+
type: string
12+
dev_number:
13+
description: "Optional dev release number. Defaults to the workflow run number."
14+
required: false
15+
type: string
16+
17+
permissions:
18+
contents: read
19+
20+
concurrency:
21+
group: nightly-python-sdk-release
22+
cancel-in-progress: false
23+
24+
jobs:
25+
get-nightly-version:
26+
if: github.repository == 'feast-dev/feast'
27+
runs-on: ubuntu-latest
28+
outputs:
29+
nightly_version: ${{ steps.version.outputs.nightly_version }}
30+
env:
31+
GITHUB_TOKEN: ${{ github.token }}
32+
INPUT_BASE_VERSION: ${{ inputs.base_version }}
33+
INPUT_DEV_NUMBER: ${{ inputs.dev_number }}
34+
DEFAULT_DEV_NUMBER: ${{ github.run_number }}
35+
steps:
36+
- name: Checkout
37+
uses: actions/checkout@v4
38+
with:
39+
fetch-depth: 0
40+
- name: Setup Node.js
41+
uses: actions/setup-node@v4
42+
with:
43+
node-version: "lts/*"
44+
- name: Get nightly version
45+
id: version
46+
run: |
47+
set -euo pipefail
48+
49+
if [[ -n "$INPUT_BASE_VERSION" ]]; then
50+
BASE_VERSION="${INPUT_BASE_VERSION#v}"
51+
else
52+
set +e
53+
SEMANTIC_OUTPUT=$(npx -p @semantic-release/changelog -p @semantic-release/git -p @semantic-release/exec -p semantic-release semantic-release --dry-run 2>&1)
54+
SEMANTIC_STATUS=$?
55+
set -e
56+
echo "$SEMANTIC_OUTPUT"
57+
58+
BASE_VERSION=$(echo "$SEMANTIC_OUTPUT" | grep 'The next release version is' | sed -E 's/.* ([[:digit:].]+)$/\1/' | tail -n 1)
59+
if [[ -z "$BASE_VERSION" ]]; then
60+
echo "Could not determine a semantic-release next version (exit code: ${SEMANTIC_STATUS}); falling back to next patch after latest stable tag."
61+
source infra/scripts/setup-common-functions.sh
62+
LATEST_TAG=$(get_tag_release -s)
63+
LATEST_VERSION="${LATEST_TAG#v}"
64+
IFS=. read -r MAJOR MINOR PATCH <<< "$LATEST_VERSION"
65+
BASE_VERSION="${MAJOR}.${MINOR}.$((PATCH + 1))"
66+
fi
67+
fi
68+
69+
if [[ ! "$BASE_VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
70+
echo "Base version must match X.Y.Z, got: ${BASE_VERSION}"
71+
exit 1
72+
fi
73+
74+
DEV_NUMBER="${INPUT_DEV_NUMBER:-$DEFAULT_DEV_NUMBER}"
75+
if [[ ! "$DEV_NUMBER" =~ ^[0-9]+$ ]]; then
76+
echo "Dev number must be numeric, got: ${DEV_NUMBER}"
77+
exit 1
78+
fi
79+
80+
NIGHTLY_VERSION="v${BASE_VERSION}.dev${DEV_NUMBER}"
81+
echo "Nightly version is ${NIGHTLY_VERSION}"
82+
echo "nightly_version=${NIGHTLY_VERSION}" >> "$GITHUB_OUTPUT"
83+
84+
publish-nightly-python-sdk:
85+
needs: get-nightly-version
86+
uses: ./.github/workflows/publish_python_sdk.yml
87+
secrets: inherit # pragma: allowlist secret
88+
with:
89+
custom_version: ${{ needs.get-nightly-version.outputs.nightly_version }}
90+
checkout_ref: ${{ github.sha }}
91+
build_docker_images: false
92+
token: ${{ github.token }}

.github/workflows/publish_python_sdk.yml

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,18 @@ on:
44
workflow_dispatch: # Allows manual trigger of the workflow
55
inputs:
66
custom_version: # Optional input for a custom version
7-
description: 'Custom version to publish (e.g., v1.2.3) -- only edit if you know what you are doing'
7+
description: 'Custom version to publish (e.g., v1.2.3 or v1.2.3.dev4) -- only edit if you know what you are doing'
88
required: false
99
type: string
10+
checkout_ref:
11+
description: 'Git ref to checkout before building wheels. Defaults to the release version.'
12+
required: false
13+
type: string
14+
build_docker_images:
15+
description: 'Build Docker images as part of release verification.'
16+
required: true
17+
default: true
18+
type: boolean
1019
token:
1120
description: 'Personal Access Token'
1221
required: true
@@ -16,9 +25,18 @@ on:
1625
workflow_call: # Allows trigger of the workflow from another workflow
1726
inputs:
1827
custom_version: # Optional input for a custom version
19-
description: 'Custom version to publish (e.g., v1.2.3) -- only edit if you know what you are doing'
28+
description: 'Custom version to publish (e.g., v1.2.3 or v1.2.3.dev4) -- only edit if you know what you are doing'
2029
required: false
2130
type: string
31+
checkout_ref:
32+
description: 'Git ref to checkout before building wheels. Defaults to the release version.'
33+
required: false
34+
type: string
35+
build_docker_images:
36+
description: 'Build Docker images as part of release verification.'
37+
required: false
38+
default: true
39+
type: boolean
2240
token:
2341
description: 'Personal Access Token'
2442
required: true
@@ -30,8 +48,10 @@ jobs:
3048
uses: ./.github/workflows/build_wheels.yml
3149
secrets: inherit
3250
with:
33-
custom_version: ${{ github.event.inputs.custom_version }}
34-
token: ${{ github.event.inputs.token }}
51+
custom_version: ${{ inputs.custom_version }}
52+
checkout_ref: ${{ inputs.checkout_ref }}
53+
build_docker_images: ${{ inputs.build_docker_images }}
54+
token: ${{ inputs.token }}
3555

3656
publish-python-sdk:
3757
if: github.repository == 'feast-dev/feast'
@@ -46,4 +66,4 @@ jobs:
4666
uses: pypa/gh-action-pypi-publish@v1.4.2
4767
with:
4868
user: __token__
49-
password: ${{ secrets.PYPI_PASSWORD }}
69+
password: ${{ secrets.PYPI_PASSWORD }}

.github/workflows/smoke_tests.yml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@ name: smoke-tests
22

33
on:
44
pull_request:
5+
paths-ignore:
6+
- 'docs/**'
7+
- 'community/**'
8+
- 'examples/**'
59

610
concurrency:
711
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
@@ -13,7 +17,7 @@ jobs:
1317
strategy:
1418
fail-fast: false
1519
matrix:
16-
python-version: ["3.10", "3.11", "3.12"]
20+
python-version: ["3.11"]
1721
os: [ ubuntu-latest ]
1822
env:
1923
OS: ${{ matrix.os }}

.github/workflows/unit_tests.yml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,17 @@ name: unit-tests
22

33
on:
44
pull_request:
5+
paths-ignore:
6+
- 'docs/**'
7+
- 'community/**'
8+
- 'examples/**'
59
push:
610
branches:
711
- master
12+
paths-ignore:
13+
- 'docs/**'
14+
- 'community/**'
15+
- 'examples/**'
816

917
concurrency:
1018
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}

0 commit comments

Comments
 (0)