1+ name : release
2+ # TODO(adchia): update DockerHub + Maven repo paths so version can match existing Feast versions.
3+ on :
4+ push :
5+ tags :
6+ - ' v*.*.*'
7+
8+ jobs :
9+ get-version :
10+ runs-on : ubuntu-latest
11+ outputs :
12+ release_version : ${{ steps.get_release_version.outputs.release_version }}
13+ version_without_prefix : ${{ steps.get_release_version_without_prefix.outputs.version_without_prefix }}
14+ highest_semver_tag : ${{ steps.get_highest_semver.outputs.highest_semver_tag }}
15+ steps :
16+ - uses : actions/checkout@v2
17+ - name : Get release version
18+ id : get_release_version
19+ run : echo ::set-output name=release_version::${GITHUB_REF#refs/*/}
20+ - name : Get release version without prefix
21+ id : get_release_version_without_prefix
22+ env :
23+ RELEASE_VERSION : ${{ steps.get_release_version.outputs.release_version }}
24+ run : |
25+ echo ::set-output name=version_without_prefix::${RELEASE_VERSION:1}
26+ - name : Get highest semver
27+ id : get_highest_semver
28+ env :
29+ RELEASE_VERSION : ${{ steps.get_release_version.outputs.release_version }}
30+ run : |
31+ source infra/scripts/setup-common-functions.sh
32+ SEMVER_REGEX='^v[0-9]+\.[0-9]+\.[0-9]+(-([0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*))?$'
33+ if echo "${RELEASE_VERSION}" | grep -P "$SEMVER_REGEX" &>/dev/null ; then
34+ echo ::set-output name=highest_semver_tag::$(get_tag_release -m)
35+ fi
36+ - name : Check output
37+ env :
38+ RELEASE_VERSION : ${{ steps.get_release_version.outputs.release_version }}
39+ VERSION_WITHOUT_PREFIX : ${{ steps.get_release_version_without_prefix.outputs.version_without_prefix }}
40+ HIGHEST_SEMVER_TAG : ${{ steps.get_highest_semver.outputs.highest_semver_tag }}
41+ run : |
42+ echo $RELEASE_VERSION
43+ echo $VERSION_WITHOUT_PREFIX
44+ echo $HIGHEST_SEMVER_TAG
45+
46+ build-publish-docker-images :
47+ runs-on : [ubuntu-latest]
48+ needs : get-version
49+ strategy :
50+ matrix :
51+ component : [core, serving]
52+ env :
53+ MAVEN_CACHE : gs://feast-templocation-kf-feast/.m2.2020-08-19.tar
54+ steps :
55+ - uses : actions/checkout@v2
56+ with :
57+ submodules : ' true'
58+ - name : Set up QEMU
59+ uses : docker/setup-qemu-action@v1
60+ - name : Set up Docker Buildx
61+ uses : docker/setup-buildx-action@v1
62+ - name : Login to DockerHub
63+ uses : docker/login-action@v1
64+ with :
65+ username : ${{ secrets.DOCKERHUB_USERNAME }}
66+ password : ${{ secrets.DOCKERHUB_TOKEN }}
67+ - uses : GoogleCloudPlatform/github-actions/setup-gcloud@master
68+ with :
69+ version : ' 290.0.1'
70+ export_default_credentials : true
71+ project_id : ${{ secrets.GCP_PROJECT_ID }}
72+ service_account_key : ${{ secrets.GCP_SA_KEY }}
73+ - run : gcloud auth configure-docker --quiet
74+ - name : Get m2 cache
75+ run : |
76+ infra/scripts/download-maven-cache.sh \
77+ --archive-uri ${MAVEN_CACHE} \
78+ --output-dir .
79+ - name : Build and push versioned images
80+ env :
81+ RELEASE_VERSION : ${{ needs.get-version.outputs.release_version }}
82+ VERSION_WITHOUT_PREFIX : ${{ needs.get-version.outputs.version_without_prefix }}
83+ HIGHEST_SEMVER_TAG : ${{ needs.get-version.outputs.highest_semver_tag }}
84+ run : |
85+ docker build --build-arg VERSION=$RELEASE_VERSION \
86+ -t gcr.io/kf-feast/feast-${{ matrix.component }}:${GITHUB_SHA} \
87+ -t gcr.io/kf-feast/feast-${{ matrix.component }}:${VERSION_WITHOUT_PREFIX} \
88+ -t feastdev/feast-${{ matrix.component }}:${VERSION_WITHOUT_PREFIX} \
89+ -f infra/docker/${{ matrix.component }}/Dockerfile .
90+ docker push gcr.io/kf-feast/feast-${{ matrix.component }}:${VERSION_WITHOUT_PREFIX}
91+ docker push feastdev/feast-${{ matrix.component }}:${VERSION_WITHOUT_PREFIX}
92+
93+ echo "Only push to latest tag if tag is the highest semver version $HIGHEST_SEMVER_TAG"
94+ if [ "${VERSION_WITHOUT_PREFIX}" = "${HIGHEST_SEMVER_TAG:1}" ]
95+ then
96+ docker tag feastdev/feast-${{ matrix.component }}:${VERSION_WITHOUT_PREFIX} feastdev/feast-${{ matrix.component }}:latest
97+ docker tag gcr.io/kf-feast/feast-${{ matrix.component }}:${VERSION_WITHOUT_PREFIX} gcr.io/kf-feast/feast-${{ matrix.component }}:latest
98+ docker push feastdev/feast-${{ matrix.component }}:latest
99+ docker push gcr.io/kf-feast/feast-${{ matrix.component }}:latest
100+ fi
101+
102+ publish-java-sdk :
103+ container : maven:3.6-jdk-11
104+ runs-on : [ubuntu-latest]
105+ needs : get-version
106+ steps :
107+ - uses : actions/checkout@v2
108+ with :
109+ submodules : ' true'
110+ - name : Set up JDK 11
111+ uses : actions/setup-java@v1
112+ with :
113+ java-version : ' 11'
114+ java-package : jdk
115+ architecture : x64
116+ - uses : actions/setup-python@v2
117+ with :
118+ python-version : ' 3.6'
119+ architecture : ' x64'
120+ - uses : actions/cache@v2
121+ with :
122+ path : ~/.m2/repository
123+ key : ${{ runner.os }}-it-maven-${{ hashFiles('**/pom.xml') }}
124+ restore-keys : |
125+ ${{ runner.os }}-it-maven-
126+ - name : Publish java sdk
127+ env :
128+ VERSION_WITHOUT_PREFIX : ${{ needs.get-version.outputs.version_without_prefix }}
129+ GPG_PUBLIC_KEY : ${{ secrets.GPG_PUBLIC_KEY }}
130+ GPG_PRIVATE_KEY : ${{ secrets.GPG_PRIVATE_KEY }}
131+ MAVEN_SETTINGS : ${{ secrets.MAVEN_SETTINGS }}
132+ run : |
133+ echo -n "$GPG_PUBLIC_KEY" > /root/public-key
134+ echo -n "$GPG_PRIVATE_KEY" > /root/private-key
135+ mkdir -p /root/.m2/
136+ echo -n "$MAVEN_SETTINGS" > /root/.m2/settings.xml
137+ infra/scripts/publish-java-sdk.sh --revision ${VERSION_WITHOUT_PREFIX} --gpg-key-import-dir /root
138+
139+ publish-helm-charts :
140+ runs-on : ubuntu-latest
141+ needs : get-version
142+ env :
143+ HELM_VERSION : v2.17.0
144+ VERSION_WITHOUT_PREFIX : ${{ needs.get-version.outputs.version_without_prefix }}
145+ steps :
146+ - uses : actions/checkout@v2
147+ - uses : GoogleCloudPlatform/github-actions/setup-gcloud@master
148+ with :
149+ version : ' 290.0.1'
150+ export_default_credentials : true
151+ project_id : ${{ secrets.GCP_PROJECT_ID }}
152+ service_account_key : ${{ secrets.GCP_SA_KEY }}
153+ - run : gcloud auth configure-docker --quiet
154+ - name : Remove previous Helm
155+ run : sudo rm -rf $(which helm)
156+ - name : Install Helm
157+ run : ./infra/scripts/install-helm.sh
158+ - name : Validate all version consistency
159+ run : ./infra/scripts/validate-helm-chart-versions.sh $VERSION_WITHOUT_PREFIX
160+ - name : Publish Helm charts
161+ run : ./infra/scripts/push-helm-charts.sh $VERSION_WITHOUT_PREFIX
0 commit comments