...
git checkout ${RELEASE_BRANCH}
- Run mvn version to set the proper rc number in all artifacts
mvn versions:set -DnewVersion=${RELEASE_VERSION}-rc${RC_NUM}
- Run Unit tests and ensure they succeed
mvn test -DskipITs=true
- Run Integration Tests and ensure they succeed
mvn verify -DskipUTs=true
- Commit and push this change to RELEASE branch
git commit -am "Bumping release candidate number ${RC_NUM}"
There will be some backup files created which needs to be removed. You could do "git clean -fdx" before doing the commit.
git push origin ${RELEASE_BRANCH}
- Generate Source Release: This will create the tarball under hudi/src_release directory
If you already have a remote tag with same name as your branch, you can try below command.
git push origin refs/heads/
git checkout${RELEASE_BRANCH}
"refs/heads/" refers to a branch.
"refs/tags/" refers to tag.
- Generate Source Release: This will create the tarball under hudi/src_release directory
git checkout ${RELEASE_BRANCH}
cd cd scripts && ./release/create_source_release.sh
Verify Source release is signed and buildable- cd hudi/src_release
- Verify Source release is signed and buildable
- cd hudi/src_release
- gpg --verify hudi-${RELEASE_VERSION}-rc${RC_NUM}.src.tgz.asc hudi-${RELEASE_VERSION}-rc${RC_NUM}.src.tgz
- tar -zxvf hudi-${RELEASE_VERSION}-rc${RC_NUM}.src.tgz && cd hudi-${RELEASE_VERSION}-rc${RC_NUM} && mvn clean package -DskipTests
- If they pass, delete the repository we got from the tar-ball
- cd ../ && rm -rf hudi-
- ${RELEASE_VERSION}-rc${RC_NUM}
- Create tag
git tag -s release-${RELEASE_VERSION}-rc${RC_NUM}
.src.tgztar -zxvf hudi -m "${RELEASE_VERSION}"
If you run into some issues, and if want to re-run the same candidate again from start, ensure you delete existing tags before retrying again.
// to remove local
git tag -d release-${RELEASE_VERSION}-rc${RC_NUM}
.src.tgz && cd hudi-${RELEASE_VERSION}-rc${RC_NUM} && mvn clean package -DskipTestsIf they pass, delete the repository we got from the tar-ball// to remove remote
git push --delete origin release
cd ../ && rm -rf hudi-${RELEASE_VERSION}-rc${RC_NUM}
- if apache repo is origin.
git
push
origin release-${RELEASE_VERSION}-rc${RC_NUM}
If a branch with the same name already exists in origin, this command might fail as below.
error: src refspec release-0.5.3 matches more than one
error: failed to push some refs to 'https://github.com/apache/hudi.git'
In such a case, try below command
git push origin refs/tags/release
- git push origin release
-${RELEASE_VERSION}
-rc${RC_NUM}
- Deploy maven artifacts and verify
- This will deploy jar artifacts to the Apache Nexus Repository, which is the staging area for deploying jars to Maven Central.
- Review all staged artifacts (https://repository.apache.org/). They should contain all relevant parts for each module, including pom.xml, jar, test jar, source, test source, javadoc, etc. Carefully review any new artifacts.
git checkout ${RELEASE_BRANCH}
- This will deploy 2.11 artifacts to repository.apache.org
cd scripts && ./release/deploy_staging_jars.sh --scala_version=2.11
- This will deploy 2.12 artifacts to repository.apache.org.
./release/deploy_staging_jars.sh --scala_version=2.12
- Review all staged artifacts to ensure it contains both 2.11 and 2.12 artifacts, mainly hudi-spark-bundle-2.11/2.12, hudi-spark-2.11/2.12, hudi-utilities-bundle_2.11/2.12 and hudi-utilities_2.11/2.12.11/2.12 and hudi-utilities_2.11/2.12.
- Once you have ensured everything is good and validation of step 7 succeeds, you can close the staging repo. Closing is kind of commit. Until you close, you can re-run deploying to staging multiple times. But once closed, it will create a new staging repo. So, once everything is good, close Close the staging repository on Apache Nexus. When prompted for a description, enter “Apache Hudi, version ${RELEASE_VERSION}, release candidate ${RC_NUM}”.
- Stage source releases on dist.apache.org
- If you have not already, check out the Hudi section of the dev repository on dist.apache.org via Subversion. In a fresh directory
- if you would not checkout, please try svn checkout https://dist.apache.org/repos/dist/dev/hudi again.
svn checkout https://dist.apache.org/repos/dist/dev/hudi --depth=immediates
- Make a directory for the new release:
mkdir hudi/hudi-${RELEASE_VERSION}-rc${RC_NUM}
- Copy Hudi source distributions, hashes, and GPG signature:
mv <hudi-dir>/src_release/* hudi/hudi-${RELEASE_VERSION}-rc${RC_NUM}
- Add and commit all the files.
cd hudi
svn add hudi-${RELEASE_VERSION}-rc${RC_NUM}
svn commit
- Verify that files are present
- Run Verification Script to ensure the source release is sane
cd scripts && ./release/validate_staged_release.sh --release=${RELEASE_VERSION} --rc_num=${RC_NUM} --verbose
If you have multiple gpg keys(gpg --list-keys), then the signing command will take in the first key most likely. You will release this when it asks for a passphrase in a pop up. When asked for passphrase, ensure the intended key is the one asked for.
Command used in script:
gpg --armor --detach-sig ${RELEASE_DIR}/hudi-${RELEASE_VERSION}.src.tgz
To use a specific key: update as follows: // replace FINGERPRINT
gpg --local-user [FINGERPRINT] --armor --detach-sig ${RELEASE_DIR}/hudi-${RELEASE_VERSION}.src.tgz
...
- change the version from ${RELEASE_VERSION}-rc${RC_NUM} to ${RELEASE_VERSION} against release branch, use command `mvn versions:set -DnewVersion=${RELEASE_VERSION}`, e.g. change 0.5.1-rc1 to 0.5.1.
- Repeat the steps from Generate Source Release(f) to Stage source releases on dist.apache.org(i). Note that make sure remove the -rc${RC_NUM} suffix when repeat the above steps. and please also verify the steps.
- One more step is to deploy source code to release dist. https://dist.apache.org/repos/dist/release/hudi. Only PMC will have access to this repo. So, if you are not a PMC, do get help from somone who is.
- svn checkout https://dist.apache.org/repos/dist/release/hudi --depth=immediates, if you would not checkout, please try svn checkout https://dist.apache.org/repos/dist/release/hudi again.
- Make a directory for the new release:
- mkdir hudi/hudi-${RELEASE_VERSION}
- Copy Hudi source distributions, hashes, and GPG signature:
- mv <hudi-dir>/src_release/* hudi/hudi-${RELEASE_VERSION}
- Add and commit all the files.
- cd hudi
- svn add hudi-${RELEASE_VERSION}
- svn commit
- Verify that files are present
- Use the Apache Nexus repository to release the staged binary artifacts to the Maven Central repository. In the
Staging Repositories
section, find the relevant release candidateorgapachehudi-XXX
entry and clickRelease
. Drop all other release candidates that are not being released. - In Jira, go to Releases → <Release Version> and ensure that all Jiras for the release are 'Closed' state, if not transition all 'Resolved' jiras to 'Closed'.
- Finalize the Release in Jira by providing the release date.
- Update DOAP file in the root of the project via sending a PR like this one.
...