This is an automated email from the ASF dual-hosted git repository.
agrove pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-datafusion-python.git
The following commit(s) were added to refs/heads/main by this push:
new e263eb7 Implement new release process (#149)
e263eb7 is described below
commit e263eb7c68fc258f59ce5e34439a3f80ecda3587
Author: Andy Grove <[email protected]>
AuthorDate: Sat Feb 25 07:58:22 2023 -0700
Implement new release process (#149)
* document the new release process
* Update release notes
---
.github/workflows/build.yml | 2 +-
dev/release/README.md | 75 +++++++++++++++++++++++++++++----------------
2 files changed, 50 insertions(+), 27 deletions(-)
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 54fdcfe..b9b382f 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -21,7 +21,7 @@ on:
branches: ["main"]
push:
tags: ["*-rc*"]
- branches: ["main"]
+ branches: ["branch-*"]
jobs:
generate-license:
diff --git a/dev/release/README.md b/dev/release/README.md
index aa2a10e..aed0e29 100644
--- a/dev/release/README.md
+++ b/dev/release/README.md
@@ -19,22 +19,51 @@
# DataFusion Python Release Process
-## Update Version
+Development happens on the `main` branch, and most of the time, we depend on
DataFusion using GitHub dependencies
+rather than using an official release from crates.io. This allows us to pick
up new features and bug fixes frequently
+by creating PRs to move to a later revision of the code. It also means we can
incrementally make updates that are
+required due to changes in DataFusion rather than having a large amount of
work to do when the next official release
+is available.
-The version number in Cargo.toml should be increased, according to semver.
+When there is a new official release of DataFusion, we update the `main`
branch to point to that, update the version
+number, and create a new release branch, such as `branch-0.8`. Once this
branch is created, we switch the `main` branch
+back to using GitHub dependencies. The release activity (such as generating
the changelog) can then happen on the
+release branch without blocking ongoing development in the `main` branch.
-## Update CHANGELOG.md
+We can cherry-pick commits from the `main` branch into `branch-0.8` as needed
and then create new patch releases
+from that branch.
-Define release branch (e.g. `main`), base version tag (e.g. `0.6.0`) and
future version tag (e.g. `0.7.0`). Commits
-between the base version tag and the release branch will be used to populate
the changelog content.
+## Detailed Guide
+
+### Pre-requisites
-You will need a GitHub Personal Access Token for the following steps. Follow
+Releases can currently only be created by PMC members due to the permissions
needed.
+
+You will need a GitHub Personal Access Token. Follow
[these
instructions](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token)
to generate one if you do not already have one.
+You will need a PyPI API token. Create one at
https://test.pypi.org/manage/account/#api-tokens, setting the “Scope” to
+“Entire account”.
+
+You will also need access to the
[datafusion](https://test.pypi.org/project/datafusion/) project on testpypi.
+
+### Preparing the `main` Branch
+
+Before creating a new release:
+
+- We need to ensure that the main branch does not have any GitHub dependencies
+- a PR should be created and merged to update the major version number of the
project
+- A new release branch should be created, such as `branch-0.8`
+
+### Update CHANGELOG.md
+
+Define release branch (e.g. `branch-0.8`), base version tag (e.g. `0.7.0`) and
future version tag (e.g. `0.9.0`). Commits
+between the base version tag and the release branch will be used to populate
the changelog content.
+
```bash
# create the changelog
-CHANGELOG_GITHUB_TOKEN=<TOKEN>
./dev/release/update_change_log-datafusion-python.sh main 0.7.0 0.6.0
+CHANGELOG_GITHUB_TOKEN=<TOKEN>
./dev/release/update_change_log-datafusion-python.sh main 0.8.0 0.7.0
# review change log / edit issues and labels if needed, rerun until you are
happy with the result
git commit -a -m 'Create changelog for release'
```
@@ -46,24 +75,23 @@ value of the `--cpus` argument in the
`update_change_log.sh` script._
You can add `invalid` or `development-process` label to exclude items from
release notes.
-Send a PR to get these changes merged into `main` branch. If new commits that
-could change the change log content landed in the `main` branch before you
-could merge the PR, you need to rerun the changelog update script to regenerate
-the changelog and update the PR accordingly.
+Send a PR to get these changes merged into the release branch (e.g.
`branch-0.8`). If new commits that could change the
+change log content landed in the release branch before you could merge the PR,
you need to rerun the changelog update
+script to regenerate the changelog and update the PR accordingly.
-## Preparing a Release Candidate
+### Preparing a Release Candidate
### Tag the Repository
```bash
-git tag 0.7.0-rc1
-git push apache 0.7.0-rc1
+git tag 0.8.0-rc1
+git push apache 0.8.0-rc1
```
### Create a source release
```bash
-./dev/release/create_tarball 0.7.0 1
+./dev/release/create_tarball 0.8.0 1
```
This will also create the email template to send to the mailing list. Here is
an example:
@@ -107,17 +135,12 @@ Create a draft email using this content, but do not send
until after completing
### Publish Python Artifacts to testpypi
-To securely upload your project, you’ll need a PyPI API token. Create one at
-https://test.pypi.org/manage/account/#api-tokens, setting the “Scope” to
“Entire account”.
-
-You will also need access to the
[datafusion](https://test.pypi.org/project/datafusion/) project on testpypi.
-
-This section assumes some familiary with publishing Python packages to PyPi.
For more information, refer to \
+This section assumes some familiarity with publishing Python packages to PyPi.
For more information, refer to \
[this
tutorial](https://packaging.python.org/en/latest/tutorials/packaging-projects/#uploading-the-distribution-archives).
#### Publish Python Wheels to testpypi
-Pushing an `rc` tag to main will cause a GitHub Workflow to run that will
build the Python wheels.
+Pushing an `rc` tag to the release branch will cause a GitHub Workflow to run
that will build the Python wheels.
Go to https://github.com/apache/arrow-datafusion-python/actions and look for
an action named "Python Release Build"
that has run against the pushed tag.
@@ -195,7 +218,7 @@ Once the vote passes, we can publish the release.
Create the source release tarball:
```bash
-./dev/release/release-tarball.sh 0.7.0 1
+./dev/release/release-tarball.sh 0.8.0 1
```
### Publishing Python Artifacts
@@ -211,7 +234,7 @@ twine upload --repository pypi dist-release/*
### Push the Release Tag
```bash
-git checkout 0.7.0-rc1
-git tag 0.7.0
-git push apache 0.7.0
+git checkout 0.8.0-rc1
+git tag 0.8.0
+git push apache 0.8.0
```