Each server will automatically synchronize with one another, so it would be okay to choose any one, a backup keys servers
is `gpg --keyserver hkp://keyserver.ubuntu.com --send-key <YOUR_KEY_ID>`
## Apache Maven Central Repository Release
### Configure Apache Maven Central Repository
### Set `settings-security.xml` and `settings.xml`
#### Set `settings-security.xml` and `settings.xml`
In this section, we add Apache server maven configuration to prepare the release, we have to add `settings-security.xml` according
to [here](http://maven.apache.org/guides/mini/guide-encryption.html) firstly and then change your `~/.m2/settings.xml` like below
@ -132,6 +137,16 @@ to [here](http://maven.apache.org/guides/mini/guide-encryption.html) firstly and
</settings>
```
## Releasing
### Check release-docs
Compared with the last release, the `release-docs` of the current release needs to be updated to the latest, if there are dependencies and versions changes
- `dolphinscheduler-dist/release-docs/LICENSE`
- `dolphinscheduler-dist/release-docs/NOTICE`
- `dolphinscheduler-dist/release-docs/licenses`
### Set Release in Environment
We will use the release version, your github name and your Apache username below several times, so it is better to store
@ -139,8 +154,13 @@ it to bash variable for easier use.
```shell
VERSION=<THE-VERSION-YOU-RELEASE>
SOURCE_CODE_DIR=<YOUR-SOURCE-CODE-ROOT-DIR> # the directory of your source code hold, the location of parent pom.xml instead of binary package
GH_USERNAME=<YOUR-GITHUB-USERNAME>
GH_REMOTE=<GITHUB-REMOTE> # we use `upstream` or `origin` mostly base on your release environment
A_USERNAME=<YOUR-APACHE-USERNAME>
SVN_DIR=<PATH-TO-SVN-ROOT> # to keep binary package checkout from SVN, the sub path end with `/dolphinscheduler/dev` and `/dolphinscheduler/release` will be create
```
> Note: We can use the variable directly in you bash after we set environment, without changing anything. For example, we
> Note: If you release in remote host without source code, you should run `git clone -b "${VERSION}"-prepare https://github.com/apache/dolphinscheduler.git`
> first to clone the source code. And then make sure you set `GH_REMOTE="origin"` to make all command work fine.
Import KEYS from SVN repository to local. (The releaser does not need to import again; the checking assistant needs to import it, with the user name filled as the releaser's. )
issue template have **Version** selection bottom. So after released we should and the new `<VERSION>` to
issue template have **Version** selection bottom. So after released we should add the new `<VERSION>` to
bug-report.yml
### Find DolphinScheduler in [apache staging repositories](https://repository.apache.org/#stagingRepositories) and click `Release`
### Publish Docker Image
we already have the exists CI to publish the latest Docker image to GitHub container register with [config](https://github.com/apache/dolphinscheduler/blob/d80cf21456265c9d84e642bdb4db4067c7577fc6/.github/workflows/publish-docker.yaml#L55-L63).
We could reuse the main command the CI run and publish our Docker images to Docker Hub by single command.
It is highly recommended to build and test docker images locally first before push to docker hub
```shell
# Checkout and create to target tag
git checkout -b "${VERSION}" "${VERSION}"
# Build docker images locally
./mvnw -B clean package \
-Dmaven.test.skip \
-Dmaven.javadoc.skip \
-Dmaven.checkstyle.skip \
-Dmaven.deploy.skip \
-Ddocker.tag="${VERSION}" \
-Pdocker,release
# You should test whether the standalone-server images work or not
docker run --name dolphinscheduler-standalone-server -p 12345:12345 -p 25333:25333 -d apache/dolphinscheduler-standalone-server:"${DOLPHINSCHEDULER_VERSION}"
We still have some publish task to do after we send the announcement mail, currently we have to publish Docker images to
Docker Hub.
## Publish Docker Image
we already have the exists CI to publish the latest Docker image to GitHub container register with [config](https://github.com/apache/dolphinscheduler/blob/d80cf21456265c9d84e642bdb4db4067c7577fc6/.github/workflows/publish-docker.yaml#L55-L63).
We could reuse the main command the CI run and publish our Docker images to Docker Hub by single command.
```bash
# Please change the <VERSION> place hold to the version you release
./mvnw -B clean deploy \
-Dmaven.test.skip \
-Dmaven.javadoc.skip \
-Dmaven.checkstyle.skip \
-Dmaven.deploy.skip \
-Ddocker.tag=<VERSION> \
-Ddocker.hub=apache \
-Pdocker,release
```
## Get All Contributors
You might need all contributors in current release when you want to publish the release news or announcement, you could
use command `python release.py contributor` in directory `tools/release` to auto generate contributor GitHub id.
Compared with the last release, the `release-docs` of the current release needs to be updated to the latest, if there are dependencies and versions changes
- `dolphinscheduler-dist/release-docs/LICENSE`
- `dolphinscheduler-dist/release-docs/NOTICE`
- `dolphinscheduler-dist/release-docs/licenses`
## Update Version
For example, to release `x.y.z`, the following updates are required:
- Version in the code:
- `sql`:
- `dolphinscheduler_mysql.sql`: `t_ds_version` needs to be updated to x.y.z
- `dolphinscheduler_postgre.sql`: `t_ds_version` needs to be updated to x.y.z
- `dolphinscheduler_h2.sql`: `t_ds_version` needs to be updated to x.y.z
- `upgrade`: whether to add`x.y.z_schema`
- `soft_version`: need to be updated to x.y.z
- `deploy/docker/.env`: `HUB` change to `apache`,`TAG` change to `x.y.z`
- `deploy/kubernetes/dolphinscheduler`:
- `Chart.yaml`: `appVersion` and `version` needs to be updated to x.y.z
- `values.yaml`: `image.tag` needs to be updated to x.y.z
- Version in the docs:
- Change the placeholder `<version>`(except `pom`) to the `x.y.z` in directory `docs`
- Add new history version
- `docs/docs/en/history-versions.md` and `docs/docs/zh/history-versions.md`: Add the new version and link for `x.y.z`
- `docs/configs/docsdev.js`: change `/dev/` to `/x.y.z/`, **DO NOT** change this filename, is will be auto change by website tools.
SOURCE_CODE_DIR=<YOUR-SOURCE-CODE-ROOT-DIR> # the directory of your source code hold, the location of parent pom.xml instead of binary package
GH_USERNAME=<YOUR-GITHUB-USERNAME>
GH_REMOTE=<GITHUB-REMOTE> # we use `upstream` or `origin` mostly base on your release environment
A_USERNAME=<YOUR-APACHE-USERNAME>
SVN_DIR=<PATH-TO-SVN-ROOT> # to keep binary package checkout from SVN, the sub path end with `/dolphinscheduler/dev` and `/dolphinscheduler/release` will be create