blob: cfddeff1fe7b56803529fe72ea0464df3b90936e [file] [log] [blame] [view]
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
-->
# Release Process
Typically, releases are done coinciding with major and minor releases to Airflow. Therefore, a release of (for example)
2.3.0 of this client would correspond with 2.3.X of Airflow.
The go client is generated using Airflow's [openapi spec](https://github.com/apache/airflow/blob/master/clients/gen/go.sh).
To update the client for new APIs do the following steps:
```bash
# clone this repo
git clone git@github.com:apache/airflow-client-go.git
cd airflow-client-go
export CLIENT_REPO_ROOT=$(pwd)
cd ..
# clone Airflow repo (if not already)
git clone git@github.com:apache/airflow.git
cd airflow
export AIRFLOW_REPO_ROOT=$(pwd)
```
Edit the file `airflow/airflow/api_connexion/openapi/v1.yaml`
Make sure it has the following `securitySchema`s listed under security `section`
```yaml
security:
- Basic: []
- GoogleOpenId: []
- Kerberos: []
```
If your deployment of Airflow uses any different authentication mechanism than the three listed above, you might need to make further changes to the `v1.yaml` and generate your own client, see [OpenAPI Schema specification](https://swagger.io/docs/specification/authentication/) for details.
(*These changes should not be commited to the upstream `v1.yaml` [as it will generate misleading openapi documentation](https://github.com/apache/airflow/pull/17174)*)
```bash
# bump up the version in go.sh & run the following command
${AIRFLOW_REPO_ROOT}/clients/gen/go.sh airflow/api_connexion/openapi/v1.yaml ${CLIENT_REPO_ROOT}/airflow
cd ${CLIENT_REPO_ROOT}
```
- Get a diff between the last airflow version and the current airflow version
which this release is based on:
```shell script
git log 2.3.0..2.5.0 --pretty=oneline
```
- Update CHANGELOG.md with the details.
- Raise a PR in airflow-client-go. **Don't merge the PR as this would act as a prod release**.
# Prepare the Apache Airflow Go RC
## RC Sources
Go client is released as source. The generated source we vote upon should be the exact ones we vote against, without any modification than
renaming – i.e. the contents of the files must be the same between voted release candidate and final release.
- Checkout the branch of your PR. (with the newly generated source for the Go client)
- Set environment variables
```shell script
# Set Version
export VERSION=2.0.0rc1
export VERSION_WITHOUT_RC=${VERSION%rc?}
# Set the airflow version that this release is based
export AIRFLOW_VERSION=2.1.4
# Example after cloning
git clone https://github.com/apache/airflow-client-go.git
cd airflow-client-go
export CLIENT_REPO_ROOT=$(pwd)
```
- Tag your RC and push it
```shell script
git tag -s ${VERSION}
git push origin ${VERSION}
```
- Clean the checkout
```shell script
git clean -fxd
```
- Tarball the repo
```shell script
git archive --format=tar.gz ${VERSION} --prefix=apache-airflow-client-${VERSION_WITHOUT_RC}/ -o apache-airflow-client-${VERSION_WITHOUT_RC}-source.tar.gz
mkdir dist
mv apache-airflow-client-${VERSION_WITHOUT_RC}-source.tar.gz dist
```
- Generate SHA512/ASC (If you have not generated a key yet, generate it by following instructions on
http://www.apache.org/dev/openpgp.html#key-gen-generate-key)
```shell script
pushd dist
${CLIENT_REPO_ROOT}/dev/sign.sh *
popd
```
- Push the artifacts to ASF dev dist repo
```shell script
# First clone the repo
svn checkout https://dist.apache.org/repos/dist/dev/airflow airflow-dev
# Create new folder for the release
cd airflow-dev/clients/go
svn mkdir ${VERSION}
# Move the artifacts to svn folder & commit
mv ${CLIENT_REPO_ROOT}/dist/apache{-,_}*client-${VERSION_WITHOUT_RC}* ${VERSION}/
cd ${VERSION}
svn add *
svn commit -m "Add artifacts for Apache Airflow Go Client ${VERSION}"
cd ${CLIENT_REPO_ROOT}
rm -rf airflow-dev
```
## Prepare Vote email on the Airflow Client release candidate
Subject:
```shell script
cat <<EOF
[VOTE] Release Airflow Go Client ${VERSION_WITHOUT_RC} from ${VERSION}
EOF
```
Body:
```shell script
cat <<EOF
Hey fellow Airflowers,
I have cut the first release candidate for the Airflow Go Client ${VERSION}.
The client consists of APIs corresponding to REST APIs available in
*Apache Airflow ${AIRFLOW_VERSION}*. This email is calling for a vote on
the release, which will last for 72 hours. Consider this my (binding) +1.
Airflow Client ${VERSION} is available at:
https://dist.apache.org/repos/dist/dev/airflow/clients/go/${VERSION}/
Or also available on github:
https://github.com/apache/airflow-client-go/tree/${VERSION}/
*apache-airflow-client-${VERSION}-source.tar.gz* is a source release that comes with
INSTALL instructions.
Public keys are available at:
https://dist.apache.org/repos/dist/release/airflow/KEYS
Only votes from PMC members are binding, but the release manager should
encourage members of the community to test the release and vote with
"(non-binding)".
*Changelog:*
*Major changes:*
...
*Major fixes:*
...
*New API supported:*
...
Cheers,
<your name>
EOF
```
# Verify the release candidate by PMCs
See Airflow process documented [here](https://github.com/apache/airflow/blob/master/dev/README_RELEASE_AIRFLOW.md#verify-the-release-candidate-by-pmcs).
## SVN check
See Airflow process documented [here](https://github.com/apache/airflow/blob/master/dev/README_RELEASE_AIRFLOW.md#svn-check) (just replace Airflow with Airflow Client).
## Licence check
See Airflow process documented [here](https://github.com/apache/airflow/blob/master/dev/README_RELEASE_AIRFLOW.md#licence-check).
## Signature check
See Airflow process documented [here](https://github.com/apache/airflow/blob/master/dev/README_RELEASE_AIRFLOW.md#signature-check).
# Verify release candidates by Contributors
This can be done (and we encourage to) by any of the Contributors. In fact, it's best if the
actual users of Airflow Client test it in their own staging/test installations. Each release candidate
is available on github apart from SVN packages, so everyone should be able to install
the release candidate version of Airflow Client via simply (<VERSION> is 2.0.0 for example, and <X> is
release candidate number 1,2,3,....).
```shell script
go get -v github.com/apache/airflow-client-go@<VERSION>rc<X>
```
Once you install and run Airflow Client, you should perform any verification you see as necessary to check
that the client works as you expected.
# Publish the final Apache Airflow client release
## Summarize the voting for the Apache Airflow client release
```shell script
Hello,
Apache Airflow go Client 2.5.0 (based on RC1) has been accepted.
3 "+1" binding votes received:
- Ephraim Anierobi
- Jarek Potiuk
- Jed Cunningham
1 "+1" non-binding votes received:
- Pierre Jeambrun
Vote thread:
https://lists.apache.org/thread/1qcj0r67dff3zg0w2vyfhr30fx9xtp3y
I'll continue with the release process, and the release announcement will follow shortly.
Cheers,
<your name>
```
## Publish release to SVN
```shell script
# Go to Airflow go client sources first
cd <YOUR_AIRFLOW_CLIENT_REPO_ROOT>
export CLIENT_REPO_ROOT="$(pwd)"
cd ..
# Clone the AS
[ -d asf-dist ] || svn checkout --depth=immediates https://dist.apache.org/repos/dist asf-dist
svn update --set-depth=infinity asf-dist/{release,dev}/airflow
CLIENT_DEV_SVN="${PWD}/asf-dist/dev/airflow/clients/go"
CLIENT_RELEASE_SVN="${PWD}/asf-dist/release/airflow/clients/go"
cd "${CLIENT_RELEASE_SVN}"
export RC=2.0.0rc1
export VERSION=${RC/rc?/}
# Create new folder for the release
svn mkdir ${VERSION}
cd ${VERSION}
# Move the artifacts to svn folder & commit
for f in ${CLIENT_DEV_SVN}/$RC/*; do
svn cp $f . ;
done
svn commit -m "Release Apache Airflow Go Client ${VERSION} from ${RC}"
# Remove old release
# http://www.apache.org/legal/release-policy.html#when-to-archive
cd ..
export PREVIOUS_VERSION=1.0.0
svn rm ${PREVIOUS_VERSION}
svn commit -m "Remove old release: ${PREVIOUS_VERSION}"
```
Verify that the packages appear in [airflow](https://dist.apache.org/repos/dist/release/airflow/clients/go)
- Checkout your PR
- Push Tag for the final version
```shell script
git tag ${VERSION}
git push origin ${VERSION}
```
- Merge the PR
## Notify developers of release
See Airflow process documented [here](https://github.com/apache/airflow/blob/master/dev/README_RELEASE_AIRFLOW.md#notify-developers-of-release) (just replace Airflow with Airflow Client)
## Add release data to Apache Committee Report Helper
Add the release data (version and date) at: https://reporter.apache.org/addrelease.html?airflow