You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by fr...@apache.org on 2019/12/01 22:03:30 UTC
[calcite-avatica] branch master updated: [CALCITE-3493] Update
docker script to use gradle
This is an automated email from the ASF dual-hosted git repository.
francischuang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/calcite-avatica.git
The following commit(s) were added to refs/heads/master by this push:
new 3141a14 [CALCITE-3493] Update docker script to use gradle
3141a14 is described below
commit 3141a1487ccf4a07ba327b8472785b5399adaffd
Author: Francis Chuang <fr...@apache.org>
AuthorDate: Fri Nov 29 15:14:51 2019 +1100
[CALCITE-3493] Update docker script to use gradle
---
docker-compose.yml | 33 +++----
docker.sh | 251 +++++-----------------------------------------------
site/_docs/howto.md | 12 ++-
3 files changed, 45 insertions(+), 251 deletions(-)
diff --git a/docker-compose.yml b/docker-compose.yml
index e5a1013..ef95550 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -16,52 +16,47 @@
version: '3'
services:
dry-run:
- image: maven
+ image: gradle:5.6-jdk
working_dir: /src
command: sh -c "./docker.sh dry-run"
+ network_mode: "host"
volumes:
- .:/src
- - maven-repo:/root/.m2
+ - gradle-cache:/home/gradle/.gradle
- release:
- image: maven
+ publish-release-for-voting:
+ image: gradle:5.6-jdk
working_dir: /src
- command: sh -c "./docker.sh release"
+ command: sh -c "./docker.sh publish-release-for-voting"
volumes:
- .:/src
- - maven-repo:/root/.m2
+ - gradle-cache:/home/gradle/.gradle
clean:
- image: maven
+ image: gradle:5.6-jdk
working_dir: /src
command: sh -c "./docker.sh clean"
volumes:
- .:/src
- - maven-repo:/root/.m2
-
- publish-release-for-voting:
- image: maven
- working_dir: /src
- command: sh -c "./docker.sh publish-release-for-voting"
- volumes:
- - .:/src
+ - gradle-cache:/home/gradle/.gradle
promote-release:
- image: maven
+ image: gradle:5.6-jdk
working_dir: /src
command: sh -c "./docker.sh promote-release"
volumes:
- .:/src
+ - gradle-cache:/home/gradle/.gradle
test:
- image: maven
+ image: gradle:5.6-jdk
working_dir: /src
command: sh -c "./docker.sh test"
volumes:
- .:/src
- - maven-repo:/root/.m2
+ - gradle-cache:/home/gradle/.gradle
volumes:
- maven-repo:
+ gradle-cache:
# End docker-compose.yml
diff --git a/docker.sh b/docker.sh
index fa1f97e..be033b7 100755
--- a/docker.sh
+++ b/docker.sh
@@ -17,11 +17,6 @@
set -e
-GITBOX_URL=https://gitbox.apache.org/repos/asf/calcite-avatica.git
-RELEASE_REPO=https://dist.apache.org/repos/dist/release/calcite/
-DEV_REPO=https://dist.apache.org/repos/dist/dev/calcite/
-PRODUCT=apache-calcite-avatica
-
function terminate() {
printf "\n\nUser terminated build. Exiting...\n"
exit 1
@@ -29,10 +24,19 @@ function terminate() {
trap terminate SIGINT
+PRODUCT=apache-calcite-avatica
+RELEASE_REPO=https://dist.apache.org/repos/dist/release/calcite/
+DEV_REPO=https://dist.apache.org/repos/dist/dev/calcite/
+
KEYS=()
GPG_COMMAND="gpg"
+install_gnupg2(){
+ apt update
+ apt install gnupg2 -y
+}
+
get_gpg_keys(){
GPG_KEYS=$($GPG_COMMAND --list-keys --with-colons --keyid-format LONG)
@@ -148,9 +152,7 @@ select_gpg_key(){
done
}
-RELEASE_VERSION=""
RC_NUMBER=""
-DEV_VERSION=""
ASF_USERNAME=""
ASF_PASSWORD=""
NAME=""
@@ -158,14 +160,11 @@ NAME=""
get_dry_run_build_configuration(){
while $DRY_RUN_NOT_CONFIRMED; do
- read -p "Enter the version number to be released (example: 1.12.0): " RELEASE_VERSION
read -p "Enter the release candidate number (example: if you are releasing rc0, enter 0): " RC_NUMBER
- read -p "Enter the development version number (example: if your release version is 1.12.0, enter 1.13.0): " DEV_VERSION
read -p "Enter your ASF username: " ASF_USERNAME
read -p "Enter your name (this will be used for git commits): " NAME
echo "Build configured as follows:"
- echo "Release: $RELEASE_VERSION-rc$RC_NUMBER"
- echo "Next development version: $DEV_VERSION-SNAPSHOT"
+ echo "RC: $RC_NUMBER"
echo "ASF Username: $ASF_USERNAME"
echo "Name: $NAME"
@@ -187,13 +186,10 @@ get_dry_run_build_configuration(){
get_build_configuration(){
while $BUILD_NOT_CONFIRMED; do
- read -p "Enter the version number to be released (example: 1.12.0): " RELEASE_VERSION
read -p "Enter the release candidate number (example: if you are releasing rc0, enter 0): " RC_NUMBER
- read -p "Enter the development version number (example: if your release version is 1.12.0, enter 1.13.0): " DEV_VERSION
read -p "Enter your name (this will be used for git commits): " NAME
echo "Build configured as follows:"
- echo "Release: $RELEASE_VERSION-rc$RC_NUMBER"
- echo "Next development version: $DEV_VERSION-SNAPSHOT"
+ echo "RC: $RC_NUMBER"
echo "Name: $NAME"
INVALID_CONFIRMATION=true
@@ -233,184 +229,6 @@ get_asf_credentials(){
done
}
-set_git_credentials(){
- echo https://$ASF_USERNAME:$ASF_PASSWORD@gitbox.apache.org >> /root/.git-credentials
- git config --global credential.helper 'store --file=/root/.git-credentials'
-
- git config --global user.name "$NAME"
-}
-
-set_maven_credentials(){
- mkdir -p /root/.m2
- rm -f /root/.m2/settings.xml
- rm -f /root/.m2/settings-security.xml
-
- ENCRYPTED_MAVEN_PASSWORD="$(mvn --encrypt-master-password $ASF_PASSWORD)"
-
- cat <<EOF >> /root/.m2/settings-security.xml
-<settingsSecurity>
- <master>$ENCRYPTED_MAVEN_PASSWORD</master>
-</settingsSecurity>
-EOF
-
- ENCRYPTED_ASF_PASSWORD="$(mvn --encrypt-password $ASF_PASSWORD)"
-
- cat <<EOF >> /root/.m2/settings.xml
-<settings>
- <servers>
- <server>
- <id>apache.snapshots.https</id>
- <username>${ASF_USERNAME}</username>
- <password>${ENCRYPTED_ASF_PASSWORD}</password>
- </server>
- <server>
- <id>apache.releases.https</id>
- <username>${ASF_USERNAME}</username>
- <password>${ENCRYPTED_ASF_PASSWORD}</password>
- </server>
- </servers>
-</settings>
-EOF
-}
-
-publish_release_for_voting(){
-
- LATEST_TAG=$(git describe --tags `git rev-list --tags --max-count=1`)
-
- if [[ ! $LATEST_TAG =~ .+-rc[[:digit:]]+$ ]]; then
- echo "The latest tag ($LATEST_TAG) is not a RC release and should not be published for voting."
- exit 1
- fi
-
- TAG_WITHOUT_PRODUCT=$(echo $LATEST_TAG | sed -e 's/avatica-//')
- TAG_WITHOUT_RC=$(echo $TAG_WITHOUT_PRODUCT | sed -e 's/-rc[0-9][0-9]*//')
- SOURCE_RELEASE=$PRODUCT-$TAG_WITHOUT_RC-src.tar.gz
- GPG_SIGNATURE=$PRODUCT-$TAG_WITHOUT_RC-src.tar.gz.asc
- SHA512=$PRODUCT-$TAG_WITHOUT_RC-src.tar.gz.sha512
- GPG_SHA512=$PRODUCT-$TAG_WITHOUT_RC-src.tar.gz.asc.sha512
- COMMIT=$(git rev-list -n 1 $LATEST_TAG)
-
- # Check to see a release is built
- MISSING_FILES=false
-
- if [ ! -f "target/$SOURCE_RELEASE" ]; then
- echo "Did not find source release ($SOURCE_RELEASE) in target folder."
- MISSING_FILES=true
- fi
-
- if [ ! -f "target/$GPG_SIGNATURE" ]; then
- echo "Did not find GPG signature ($GPG_SIGNATURE) in target folder."
- MISSING_FILES=true
- fi
-
- if [ ! -f "target/$SHA512" ]; then
- echo "Did not find SHA512 ($SHA512) in target folder."
- MISSING_FILES=true
- fi
-
- if [ ! -f "target/$GPG_SHA512" ]; then
- echo "Did not find GPG SHA512 ($GPG_SHA512) in target folder."
- MISSING_FILES=true
- fi
-
- if $MISSING_FILES == true; then
- exit 1
- fi
-
- while $NOT_CONFIRMED; do
- echo "Publish configured as follows:"
- echo "Release: $LATEST_TAG"
-
- INVALID_CONFIRMATION=true
-
- while $INVALID_CONFIRMATION; do
- read -p "Is this correct? (y/n) " CONFIRM
-
- if [[ ($CONFIRM == "Y") || ($CONFIRM == "y") ]]; then
- NOT_CONFIRMED=false
- INVALID_CONFIRMATION=false
- elif [[ ($CONFIRM == "N") || ($CONFIRM == "n") ]]; then
- INVALID_CONFIRMATION=false
- fi
- done
- done
-
- HASH=$(cat "target/$SHA512" | tr -d '\n')
-
- get_asf_credentials
-
- svn checkout $DEV_REPO /tmp/calcite --depth empty
- mkdir -p /tmp/calcite/$PRODUCT-$TAG_WITHOUT_PRODUCT
- cp -R target/$PRODUCT-* /tmp/calcite/$PRODUCT-$TAG_WITHOUT_PRODUCT
-
- cd /tmp/calcite
- svn add $PRODUCT-$TAG_WITHOUT_PRODUCT
- chmod -x $PRODUCT-$TAG_WITHOUT_PRODUCT/*
-
- svn commit -m "$PRODUCT-$TAG_WITHOUT_PRODUCT" --force-log --username $ASF_USERNAME --password $ASF_PASSWORD
-
- [[ $LATEST_TAG =~ -rc([[:digit:]]+)$ ]]
- RC_NUMBER=${BASH_REMATCH[1]}
-
- [[ $TAG_WITHOUT_RC =~ ([[:digit:]]+\.[[:digit:]]+)\.[[:digit:]]+$ ]]
- BRANCH_VERSION=${BASH_REMATCH[1]}
-
- read -p "Please enter your first name for the voting email: " FIRST_NAME
- read -p "Enter the ID at the end of the staged repository (for orgapachecalcite-1000, enter 1000): " STAGED_REPO_ID
-
- echo "The release $PRODUCT-$TAG_WITHOUT_PRODUCT has been uploaded to the development repository."
- printf "\n"
- printf "\n"
- echo "Email the following message to dev@calcite.apache.org. Please check the message before sending."
- printf "\n"
- echo "To: dev@calcite.apache.org"
- echo "Subject: [VOTE] Release $PRODUCT-$TAG_WITHOUT_RC (release candidate $RC_NUMBER)"
- echo "Message:
-Hi all,
-
-I have created a build for Apache Calcite Avatica $TAG_WITHOUT_RC, release candidate $RC_NUMBER.
-
-Thanks to everyone who has contributed to this release.
-
-You can read the release notes here:
-https://github.com/apache/calcite-avatica/blob/branch-avatica-$BRANCH_VERSION/site/_docs/history.md
-
-The commit to be voted upon:
-https://gitbox.apache.org/repos/asf?p=calcite-avatica.git;a=commit;h=$COMMIT
-
-Its hash is $COMMIT
-
-The artifacts to be voted on are located here:
-$DEV_REPO$PRODUCT-$TAG_WITHOUT_PRODUCT/
-
-The hashes of the artifacts are as follows:
-src.tar.gz.sha512 $HASH
-
-A staged Maven repository is available for review at:
-https://repository.apache.org/content/repositories/orgapachecalcite-$STAGED_REPO_ID
-
-Release artifacts are signed with the following key:
-https://people.apache.org/keys/committer/$ASF_USERNAME.asc
-
-If you do not have a Java environment available, you can run the tests using docker. To do so, install docker and docker-compose, then run \"docker-compose run test\" from the root of the directory.
-
-Please vote on releasing this package as Apache Calcite Avatica $TAG_WITHOUT_RC.
-
-The vote is open for the next 72 hours and passes if a majority of at least three +1 PMC votes are cast.
-
-[ ] +1 Release this package as Apache Calcite 1.14.0
-[ ] 0 I don't feel strongly about it, but I'm okay with the release
-[ ] -1 Do not release this package because...
-
-
-Here is my vote:
-
-+1 (binding)
-
-$FIRST_NAME
-"
-}
-
promote_release(){
LATEST_TAG=$(git describe --tags `git rev-list --tags --max-count=1`)
@@ -422,6 +240,7 @@ promote_release(){
TAG_WITHOUT_PRODUCT=$(echo $LATEST_TAG | sed -e 's/avatica-//')
TAG_WITHOUT_RC=$(echo $TAG_WITHOUT_PRODUCT | sed -e 's/-rc[0-9][0-9]*//')
+ RC_NUMBER=$(echo $TAG_WITHOUT_PRODUCT | sed -e 's/^[0-9\.]*-rc//')
if ! svn ls $DEV_REPO/$PRODUCT-$TAG_WITHOUT_PRODUCT; then
echo "The release $PRODUCT-$TAG_WITHOUT_PRODUCT was not found in the dev repository. Was it uploaded for voting?"
@@ -429,30 +248,7 @@ promote_release(){
fi
get_asf_credentials
-
- set_git_credentials
-
- # Tag release and push it
- git tag rel/avatica-$TAG_WITHOUT_RC $LATEST_TAG
- git push $GITBOX_URL rel/avatica-$TAG_WITHOUT_RC
-
- # Merge release branch back to master and push
- [[ $TAG_WITHOUT_RC =~ ([[:digit:]]+\.[[:digit:]]+)\.[[:digit:]]+$ ]]
- BRANCH_VERSION=${BASH_REMATCH[1]}
- git checkout master
- git merge branch-avatica-$BRANCH_VERSION --ff-only
- git push $GITBOX_URL master
-
- svn checkout $RELEASE_REPO /tmp/release
- rm -rf /tmp/release/$PRODUCT-$TAG_WITHOUT_RC
- mkdir -p /tmp/release/$PRODUCT-$TAG_WITHOUT_RC
-
- svn checkout $DEV_REPO/$PRODUCT-$TAG_WITHOUT_PRODUCT /tmp/rc
- cp -rp /tmp/rc/* /tmp/release/$PRODUCT-$TAG_WITHOUT_RC
-
- cd /tmp/release
-
- svn add $PRODUCT-$TAG_WITHOUT_RC
+ gradle publishDist -Pasf -PasfSvnUsername=$ASF_USERNAME -PasfSvnPassword=$ASF_PASSWORD -PasfNexusUsername=$ASF_USERNAME -PasfNexusPassword=$ASF_PASSWORD -PasfGitSourceUsername=$ASF_USERNAME -PasfGitSourcePassword=$ASF_PASSWORD -Prc=$RC_NUMBER
# If there is more than 1 release, delete all of them, except for the newest one
# To do this, we do the following:
@@ -481,31 +277,26 @@ promote_release(){
case $1 in
dry-run)
+ install_gnupg2
mount_gpg_keys
select_gpg_key
get_dry_run_build_configuration
- mvn -Dmaven.artifact.threads=20 -DdryRun=true -DreleaseVersion=$RELEASE_VERSION -DdevelopmentVersion=$DEV_VERSION-SNAPSHOT -Dtag="avatica-$RELEASE_VERSION-rc$RC_NUMBER" -Papache-release -Duser.name=$ASF_USERNAME release:prepare -Darguments=-Dgpg.keyname=$SELECTED_GPG_KEY
+ gradle prepareVote -PasfTestSvnUsername=test -PasfTestSvnPassword=test -PasfTestNexusUsername=test -PasfTestNexusPassword=test -PasfTestGitSourceUsername=test -PasfTestGitSourcePassword=test -Prc=$RC_NUMBER -PuseGpgCmd -Psigning.gnupg.keyName=$SELECTED_GPG_KEY
;;
- release)
+ publish-release-for-voting)
+ install_gnupg2
mount_gpg_keys
select_gpg_key
get_build_configuration
get_asf_credentials
- set_git_credentials
- set_maven_credentials
- mvn -Dmaven.artifact.threads=20 -DreleaseVersion=$RELEASE_VERSION -DdevelopmentVersion=$DEV_VERSION-SNAPSHOT -Dtag="avatica-$RELEASE_VERSION-rc$RC_NUMBER" -Papache-release -Duser.name=$ASF_USERNAME release:prepare -Darguments=-Dgpg.keyname=$SELECTED_GPG_KEY
- mvn -Dmaven.artifact.threads=20 -Papache-release -Duser.name=$ASF_USERNAME release:perform -Darguments="-DskipTests -Dgpg.keyname=$SELECTED_GPG_KEY"
+ gradle prepareVote -Pasf -PasfCommitterId=$ASF_USERNAME -PasfSvnUsername=$ASF_USERNAME -PasfSvnPassword=$ASF_PASSWORD -PasfNexusUsername=$ASF_USERNAME -PasfNexusPassword=$ASF_PASSWORD -PasfGitSourceUsername=$ASF_USERNAME -PasfGitSourcePassword=$ASF_PASSWORD -Prc=$RC_NUMBER -PuseGpgCmd -Psigning.gnupg.keyName=$SELECTED_GPG_KEY
;;
clean)
- mvn release:clean
- ;;
-
- publish-release-for-voting)
- publish_release_for_voting
+ gradle clean
;;
promote-release)
@@ -513,11 +304,11 @@ case $1 in
;;
test)
- mvn clean verify -Dcheckstyle.skip
+ gradle test
;;
*)
- echo $"Usage: $0 {dry-run|release|clean|publish-release-for-voting|promote-release|test}"
+ echo $"Usage: $0 {dry-run|publish-release-for-voting|clean|promote-release|test}"
;;
esac
diff --git a/site/_docs/howto.md b/site/_docs/howto.md
index c987662..4867c57 100644
--- a/site/_docs/howto.md
+++ b/site/_docs/howto.md
@@ -240,12 +240,20 @@ git clean -xn
the script will make a copy of the contents and move it to a different location, so that it will not modify the contents of your original
`~/.gnupg` directory during the build.
+* Start the [asflike-release-environment](https://github.com/vlsi/asflike-release-environment) to prepare a staging environment for a dry-run.
+
{% highlight bash %}
-# On Linux:
+# On Linux (dry-run):
docker-compose run -v ~/.gnupg:/.gnupg dry-run
-# On Windows
+# On Windows (dry-run):
docker-compose run -v /c/Users/username/AppData/Roaming/gnupg:/.gnupg dry-run
+
+# On Linux (push to ASF servers):
+docker-compose run -v ~/.gnupg:/.gnupg publish-release-for-voting
+
+# On Windows (push to ASF servers):
+docker-compose run -v /c/Users/username/AppData/Roaming/gnupg:/.gnupg publish-release-for-voting
{% endhighlight %}
## Checking the artifacts