mirror of
https://github.com/apache/datafusion-sqlparser-rs.git
synced 2025-07-07 17:04:59 +00:00
187 lines
5.7 KiB
Markdown
187 lines
5.7 KiB
Markdown
<!---
|
|
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.
|
|
-->
|
|
|
|
|
|
## Process Overview
|
|
|
|
As part of the Apache governance model, official releases consist of signed
|
|
source tarballs approved by the DataFusion PMC.
|
|
|
|
We then use the code in the approved artifacts to release to crates.io.
|
|
|
|
### Change Log
|
|
|
|
We maintain a `CHANGELOG.md` so our users know what has been changed between releases.
|
|
|
|
You will need a GitHub Personal Access Token for the following steps. 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.
|
|
|
|
The changelog is generated using a Python script which needs `PyGitHub`, installed using pip:
|
|
|
|
```shell
|
|
pip3 install PyGitHub
|
|
```
|
|
|
|
To generate the changelog, set the `GITHUB_TOKEN` environment variable to a valid token and then run the script
|
|
providing two commit ids or tags followed by the version number of the release being created. The following
|
|
example generates a change log of all changes between the first commit and the current HEAD revision.
|
|
|
|
```shell
|
|
export GITHUB_TOKEN=<your-token-here>
|
|
python ./dev/release/generate-changelog.py v0.51.0 HEAD 0.52.0 > changelog/0.52.0.md
|
|
```
|
|
|
|
This script creates a changelog from GitHub PRs based on the labels associated with them as well as looking for
|
|
titles starting with `feat:`, `fix:`, or `docs:`.
|
|
|
|
Add an entry to CHANGELOG.md for the new version
|
|
|
|
## Prepare release commits and PR
|
|
|
|
### Update Version
|
|
|
|
Checkout the main commit to be released
|
|
|
|
```shell
|
|
git fetch apache
|
|
git checkout apache/main
|
|
```
|
|
|
|
Manually update the version in the root `Cargo.toml` to the release version (e.g. `0.52.0`).
|
|
|
|
Lastly commit the version change:
|
|
|
|
```shell
|
|
git commit -a -m 'Update version'
|
|
```
|
|
|
|
## Prepare release candidate artifacts
|
|
|
|
After the PR gets merged, you are ready to create release artifacts from the
|
|
merged commit.
|
|
|
|
(Note you need to be a committer to run these scripts as they upload to the apache svn distribution servers)
|
|
|
|
### Pick a Release Candidate (RC) number
|
|
|
|
Pick numbers in sequential order, with `0` for `rc0`, `1` for `rc1`, etc.
|
|
|
|
### Create git tag for the release:
|
|
|
|
While the official release artifacts are signed tarballs and zip files, we also
|
|
tag the commit it was created for convenience and code archaeology.
|
|
|
|
Using a string such as `v0.52.0` as the `<version>`, create and push the tag by running these commands:
|
|
|
|
For example to tag version `0.52.0`
|
|
|
|
```shell
|
|
git fetch apache
|
|
git tag v0.52.0-rc1 apache/main
|
|
# push tag to Github remote
|
|
git push apache v0.52.0-rc1
|
|
```
|
|
|
|
### Create, sign, and upload artifacts
|
|
|
|
Run `create-tarball.sh` with the `<version>` tag and `<rc>` and you found in previous steps:
|
|
|
|
```shell
|
|
GITHUB_TOKEN=<TOKEN> ./dev/release/create-tarball.sh 0.52.0 1
|
|
```
|
|
|
|
The `create-tarball.sh` script
|
|
|
|
1. creates and uploads all release candidate artifacts to the [datafusion
|
|
dev](https://dist.apache.org/repos/dist/dev/datafusion) location on the
|
|
apache distribution svn server
|
|
|
|
2. provide you an email template to
|
|
send to dev@datafusion.apache.org for release voting.
|
|
|
|
### Vote on Release Candidate artifacts
|
|
|
|
Send the email output from the script to dev@datafusion.apache.org.
|
|
|
|
For the release to become "official" it needs at least three PMC members to vote +1 on it.
|
|
|
|
### Verifying Release Candidates
|
|
|
|
The `dev/release/verify-release-candidate.sh` is a script in this repository that can assist in the verification process. Run it like:
|
|
|
|
```shell
|
|
./dev/release/verify-release-candidate.sh 0.52.0 1
|
|
```
|
|
|
|
#### If the release is not approved
|
|
|
|
If the release is not approved, fix whatever the problem is, merge changelog
|
|
changes into main if there is any and try again with the next RC number.
|
|
|
|
## Finalize the release
|
|
|
|
NOTE: steps in this section can only be done by PMC members.
|
|
|
|
### After the release is approved
|
|
|
|
Move artifacts to the release location in SVN, using the `release-tarball.sh` script:
|
|
|
|
```shell
|
|
./dev/release/release-tarball.sh 0.52.0 1
|
|
```
|
|
|
|
Promote the rc tag to the release tag
|
|
```shell
|
|
git tag v0.52.0 v0.52.0-rc3
|
|
git push apache v0.52.0
|
|
```
|
|
|
|
Congratulations! The release is now official!
|
|
|
|
### Publish on Crates.io
|
|
|
|
Only approved releases of the tarball should be published to
|
|
crates.io, in order to conform to Apache Software Foundation
|
|
governance standards.
|
|
|
|
A DataFusion committer can publish this crate after an official project release has
|
|
been made to crates.io using the following instructions.
|
|
|
|
Follow [these
|
|
instructions](https://doc.rust-lang.org/cargo/reference/publishing.html) to
|
|
create an account and login to crates.io before asking to be added as an owner
|
|
to the sqlparser DataFusion crates.
|
|
|
|
Download and unpack the official release tarball
|
|
|
|
Verify that the Cargo.toml in the tarball contains the correct version
|
|
(e.g. `version = "0.52.0"`) and then publish the crates by running the following commands
|
|
|
|
```shell
|
|
cargo publish
|
|
```
|
|
|
|
If necessary, also publish the `sqlparser_derive` crate:
|
|
|
|
crates.io homepage: https://crates.io/crates/sqlparser_derive
|
|
|
|
```shell
|
|
(cd derive && cargo publish
|
|
```
|