This is an automated email from the ASF dual-hosted git repository.
dpgaspar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-superset.git
The following commit(s) were added to refs/heads/master by this push:
new 3b13fb4 [docs] Improve and automate apache source releases (#8584)
3b13fb4 is described below
commit 3b13fb4143fedc172eded10eb20f1cedb52c7217
Author: Daniel Vaz Gaspar <[email protected]>
AuthorDate: Tue Nov 19 15:44:38 2019 +0000
[docs] Improve and automate apache source releases (#8584)
---
....from_tarball => Dockerfile.from_local_tarball} | 14 ++-
...le.from_tarball => Dockerfile.from_svn_tarball} | 5 +-
RELEASING/Dockerfile.make_tarball | 6 +-
RELEASING/README.md | 104 ++++++++++-----------
RELEASING/make_tarball.sh | 65 ++++++++++---
RELEASING/make_tarball_entrypoint.sh | 53 +++++++++++
RELEASING/{make_tarball.sh => set_release_env.sh} | 38 ++++----
RELEASING/test_run_tarball.sh | 27 +++++-
8 files changed, 208 insertions(+), 104 deletions(-)
diff --git a/RELEASING/Dockerfile.from_tarball
b/RELEASING/Dockerfile.from_local_tarball
similarity index 88%
copy from RELEASING/Dockerfile.from_tarball
copy to RELEASING/Dockerfile.from_local_tarball
index c7a9c1c..6ca3a3b 100644
--- a/RELEASING/Dockerfile.from_tarball
+++ b/RELEASING/Dockerfile.from_local_tarball
@@ -43,26 +43,24 @@ RUN chown superset /home/superset
WORKDIR /home/superset
ARG VERSION
+ARG SUPERSET_RELEASE_RC_TARBALL
-RUN svn co https://dist.apache.org/repos/dist/dev/incubator/superset/$VERSION
./
+# Can fetch source from svn or copy tarball from local mounted directory
+COPY $SUPERSET_RELEASE_RC_TARBALL ./
RUN tar -xvf *.tar.gz
-WORKDIR apache-superset-incubating-$VERSION
+WORKDIR /home/superset/apache-superset-incubating-$VERSION/superset/assets
-RUN cd superset/assets \
- && npm ci \
+RUN npm ci \
&& npm run build \
&& rm -rf node_modules
-
WORKDIR /home/superset/apache-superset-incubating-$VERSION
RUN pip install --upgrade setuptools pip \
+ && pip install -r requirements.txt \
&& pip install --no-cache-dir .
RUN flask fab babel-compile --target superset/translations
-RUN pip install -e . \
- && rm -rf /root/.cache/pip
-
ENV PATH=/home/superset/superset/bin:$PATH \
PYTHONPATH=/home/superset/superset/:$PYTHONPATH
COPY from_tarball_entrypoint.sh /entrypoint.sh
diff --git a/RELEASING/Dockerfile.from_tarball
b/RELEASING/Dockerfile.from_svn_tarball
similarity index 95%
rename from RELEASING/Dockerfile.from_tarball
rename to RELEASING/Dockerfile.from_svn_tarball
index c7a9c1c..f3acd77 100644
--- a/RELEASING/Dockerfile.from_tarball
+++ b/RELEASING/Dockerfile.from_svn_tarball
@@ -44,6 +44,7 @@ RUN chown superset /home/superset
WORKDIR /home/superset
ARG VERSION
+# Can fetch source from svn or copy tarball from local mounted directory
RUN svn co https://dist.apache.org/repos/dist/dev/incubator/superset/$VERSION
./
RUN tar -xvf *.tar.gz
WORKDIR apache-superset-incubating-$VERSION
@@ -56,13 +57,11 @@ RUN cd superset/assets \
WORKDIR /home/superset/apache-superset-incubating-$VERSION
RUN pip install --upgrade setuptools pip \
+ && pip install -r requirements.txt \
&& pip install --no-cache-dir .
RUN flask fab babel-compile --target superset/translations
-RUN pip install -e . \
- && rm -rf /root/.cache/pip
-
ENV PATH=/home/superset/superset/bin:$PATH \
PYTHONPATH=/home/superset/superset/:$PYTHONPATH
COPY from_tarball_entrypoint.sh /entrypoint.sh
diff --git a/RELEASING/Dockerfile.make_tarball
b/RELEASING/Dockerfile.make_tarball
index c7d516c..d4c4347 100644
--- a/RELEASING/Dockerfile.make_tarball
+++ b/RELEASING/Dockerfile.make_tarball
@@ -15,5 +15,9 @@
# limitations under the License.
#
FROM python:3.6-jessie
-COPY make_tarball.sh /entrypoint.sh
+
+RUN apt-get update -y
+RUN apt-get install -y jq
+
+COPY make_tarball_entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
diff --git a/RELEASING/README.md b/RELEASING/README.md
index ed87431..21ef756 100644
--- a/RELEASING/README.md
+++ b/RELEASING/README.md
@@ -64,13 +64,21 @@ that belong to the MAJOR.MINOR version.
The MAJOR.MINOR branch is normally a "cut" from a specific point in time from
the master branch.
Then (if needed) apply all cherries that will make the PATCH
+Next update the `CHANGELOG.md` with all the changes that are included in the
release. Make sure you have
+set your GITHUB_TOKEN environment variable.
+
+```bash
+# will overwrites the local CHANGELOG.md, somehow you need to merge it in
+github-changes -o apache -r incubator-superset --token $GITHUB_TOKEN
--between-tags <PREVIOUS_RELEASE_TAG>...<CURRENT_RELEASE_TAG>
+```
+
Finally bump the version number on `superset/static/assets/package.json`:
```json
"version": "0.34.1"
```
-Commit the change with the version number, then git tag the version with the
release candidate and push
+Commit the change with the version number, then git tag the version with the
release candidate and push to the branch
## Setting up the release environment (do every time)
@@ -79,74 +87,58 @@ often stretching over several weeks calendar time if votes
don't pass, chances a
the same terminal session won't be used for crafting the release candidate and
the
final release. Therefore, it's a good idea to do the following every time you
work on a new phase of the release process to make sure you aren't releasing
-the wrong files/using wrong names:
+the wrong files/using wrong names. There's a script to help you set correctly
all the
+necessary environment variables. Change you current directory to
`superset/RELEASING`
```bash
- # Set SUPERSET_VERSION to the release being prepared, e.g. 0.34.1.
- export SUPERSET_VERSION=XX.YY.ZZ
- # Set RC to the release candindate number. Replacing QQ below with 1
- # indicates rc1 i.e. first vote on version above (0.34.1rc1)
- export SUPERSET_RC=QQ
+ # usage: set_release_env.sh <SUPERSET_VERSION> <SUPERSET_VERSION_RC>
"<PGP_KEY_FULLNAME>"
+ . ./set_release_env.sh XX.YY.ZZ QQ "YOUR PGP KEY NAME"
```
-Then you can generate other derived environment variables that are used
-throughout the release process:
+The script will output the exported variables, for example for 0.34.1 RC1:
-```bash
- # Replace SUPERSET_PGP_FULLNAME with your PGP key name for Apache
- export SUPERSET_PGP_FULLNAME="YOURFULLNAMEHERE"
- export SUPERSET_VERSION_RC=${SUPERSET_VERSION}rc${SUPERSET_RC}
- export SUPERSET_RELEASE=apache-superset-incubating-${SUPERSET_VERSION}
- export
SUPERSET_RELEASE_RC=apache-superset-incubating-${SUPERSET_VERSION_RC}
- export SUPERSET_RELEASE_TARBALL=${SUPERSET_RELEASE}-source.tar.gz
- export SUPERSET_RELEASE_RC_TARBALL=${SUPERSET_RELEASE_RC}-source.tar.gz
+```
+ -------------------------------
+ Set Release env variables
+ SUPERSET_VERSION=0.34.1
+ SUPERSET_RC=1
+ SUPERSET_PGP_FULLNAME=You PGP Key Name
+ SUPERSET_VERSION_RC=0.34.1rc1
+ SUPERSET_RELEASE=apache-superset-incubating-0.34.1
+ SUPERSET_RELEASE_RC=apache-superset-incubating-0.34.1rc1
+ SUPERSET_RELEASE_TARBALL=apache-superset-incubating-0.34.1-source.tar.gz
+
SUPERSET_RELEASE_RC_TARBALL=apache-superset-incubating-0.34.1rc1-source.tar.gz
+ -------------------------------
```
## Preparing the release candidate
The first step of preparing an Apache Release is packaging a release candidate
-to be voted on. Start by going to the root of the repo and making sure the
-prerequisites are in order:
+to be voted on. Make sure you have correctly prepared and tagged the ready to
ship
+release on Superset's repo (MAJOR.MINOR branch), the following script will
clone
+the tag and create a signed source tarball from it:
```bash
- # Go to the root directory of the repo, e.g. `~/src/incubator-superset`
- cd ~/src/incubator-superset/
- export SUPERSET_REPO_DIR=$(pwd)
- # make sure you're on the correct branch (e.g. 0.34)
- git branch
+ # make_tarball you use the previouly set environment variables
+ # you can override by passing arguments: make_tarball.sh
<SUPERSET_VERSION> <SUPERSET_VERSION_RC> "<PGP_KEY_FULLNAME>"
+ ./make_tarball.sh
```
-Make sure the version number under `superset/assets/package.json` corresponds
-to `SUPERSET_VERSION` above (`0.34.1` in example above), and has been
committed to the
-branch.
-
-```bash
- grep ${SUPERSET_VERSION} superset/assets/package.json
-```
+Note that `make_tarball.sh`:
-If nothing shows up, either the version isn't correctly set in `package.json`,
-or the environment variable is misconfigured.
+- By default assumes you have already executed an SVN checkout to
`$HOME/svn/superset_dev`.
+This can be overriden by setting `SUPERSET_SVN_DEV_PATH` environment var to a
different svn dev directory
+- Will refuse to craft a new release candidate if a release already exists on
your local svn dev directory
+- Will check `package.json` version number and fails if it's not correctly set
-### Crafting tarball and signatures
+### Build and test the created source tarball
-Now let's craft a source release
+To build and run the just created tarball
```bash
- # Let's create a git tag
- git tag -f ${SUPERSET_VERSION_RC}
-
- # Create the target folder
- mkdir -p ~/svn/superset_dev/${SUPERSET_VERSION_RC}/
- git archive \
- --format=tar.gz ${SUPERSET_VERSION_RC} \
- --prefix="${SUPERSET_RELEASE_RC}/" \
- -o
~/svn/superset_dev/${SUPERSET_VERSION_RC}/${SUPERSET_RELEASE_RC_TARBALL}
-
- cd ~/svn/superset_dev/${SUPERSET_VERSION_RC}/
- ${SUPERSET_REPO_DIR}/scripts/sign.sh "${SUPERSET_RELEASE_RC_TARBALL}"
"${SUPERSET_PGP_FULLNAME}"
-
- # To verify to signature
- gpg --verify "${SUPERSET_RELEASE_RC_TARBALL}".asc
"${SUPERSET_RELEASE_RC_TARBALL}"
-
+ # Build and run a release candidate tarball
+ ./test_run_tarball.sh local
+ # you should be able to access localhost:5001 on your browser
+ # login using admin/admin
```
### Shipping to SVN
@@ -159,14 +151,14 @@ Now let's ship this RC into svn's dev folder
svn commit -m "Release ${SUPERSET_VERSION_RC}"
```
-### Build and test from source tarball
+### Build and test from SVN source tarball
To make a working build given a tarball
```bash
-# Build and run a release candidate tarball
-./test_run_tarball.sh
-# you should be able to access localhost:5001 on your browser
-# login using admin/admin
+ # Build and run a release candidate tarball
+ ./test_run_tarball.sh
+ # you should be able to access localhost:5001 on your browser
+ # login using admin/admin
```
### Voting
diff --git a/RELEASING/make_tarball.sh b/RELEASING/make_tarball.sh
index 5959d0f..3d0c180 100755
--- a/RELEASING/make_tarball.sh
+++ b/RELEASING/make_tarball.sh
@@ -15,24 +15,59 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
-set -ex
+set -e
-if [ -z "$VERSION" ]; then
- echo "VERSION is required to run this container"
+usage() {
+ echo "usage: make_tarball.sh <SUPERSET_VERSION> <SUPERSET_RC>
<PGP_KEY_FULLBANE>"
+}
+
+if [ -z "$1" ] || [ -z "$2" ] || [ -z "$3" ]; then
+ if [ -z "${SUPERSET_VERSION}" ] || [ -z "${SUPERSET_RC}" ] || [ -z
"${SUPERSET_PGP_FULLNAME}" ]; then
+ echo "No parameters found an no required environment variables set"
+ echo "usage: make_tarball.sh <SUPERSET_VERSION> <SUPERSET_RC>
<PGP_KEY_FULLBANE>"
+ usage;
+ exit 1
+ fi
+else
+ SUPERSET_VERSION="${1}"
+ SUPERSET_RC="${2}"
+ SUPERSET_PGP_FULLNAME="${3}"
+fi
+
+SUPERSET_VERSION_RC="${SUPERSET_VERSION}rc${SUPERSET_RC}"
+
+if [ -z "${SUPERSET_SVN_DEV_PATH}" ]; then
+ SUPERSET_SVN_DEV_PATH="$HOME/svn/superset_dev"
+fi
+
+if [[ ! -d "${SUPERSET_SVN_DEV_PATH}" ]]; then
+ echo "${SUPERSET_SVN_DEV_PATH} does not exist, you need to: svn checkout"
exit 1
fi
+if [ -d "${SUPERSET_SVN_DEV_PATH}/${SUPERSET_VERSION_RC}" ]; then
+ echo "${SUPERSET_VERSION_RC} Already exists on svn, refusing to overwrite"
+ exit 1
+fi
+
+SUPERSET_RELEASE_RC_TARBALL_PATH="${SUPERSET_SVN_DEV_PATH}"/"${SUPERSET_VERSION_RC}"/"${SUPERSET_RELEASE_RC_TARBALL}"
+DOCKER_SVN_PATH="/docker_svn"
+
+# Building docker that will produce a tarball
+docker build -t apache-builder -f Dockerfile.make_tarball .
+
+# Running docker to produce a tarball
+docker run \
+ -e SUPERSET_SVN_DEV_PATH="${DOCKER_SVN_PATH}" \
+ -e SUPERSET_VERSION="${SUPERSET_VERSION}" \
+ -e SUPERSET_VERSION_RC="${SUPERSET_VERSION_RC}" \
+ -e HOST_UID=${UID} \
+ -v "${SUPERSET_SVN_DEV_PATH}":"${DOCKER_SVN_PATH}":rw \
+ -ti apache-builder
-echo "version: $VERSION"
-cd /tmp
-git clone --depth 1 --branch $VERSION
https://github.com/apache/incubator-superset.git
-mkdir ~/$VERSION
-cd incubator-superset && \
-git archive \
- --format=tar.gz \
- --prefix=apache-superset-incubating-$VERSION/ \
- HEAD \
- -o ~/$VERSION/apache-superset-incubating.tar.gz
+gpg --armor --local-user "${SUPERSET_PGP_FULLNAME}" --output
"${SUPERSET_RELEASE_RC_TARBALL_PATH}".asc --detach-sig
"${SUPERSET_RELEASE_RC_TARBALL_PATH}"
+gpg --print-md --local-user "${SUPERSET_PGP_FULLNAME}" SHA512
"${SUPERSET_RELEASE_RC_TARBALL_PATH}" >
"${SUPERSET_RELEASE_RC_TARBALL_PATH}".sha512
-gpg --armor --output apache-superset-incubating.tar.gz.asc --detach-sig
apache-superset-incubating.tar.gz
-gpg --print-md SHA512 apache-superset-incubating.tar.gz >
apache-superset-incubating.tar.gz.sha512
+echo ---------------------------------------
+echo Release candidate tarball is ready
+echo ---------------------------------------
diff --git a/RELEASING/make_tarball_entrypoint.sh
b/RELEASING/make_tarball_entrypoint.sh
new file mode 100755
index 0000000..dde0118
--- /dev/null
+++ b/RELEASING/make_tarball_entrypoint.sh
@@ -0,0 +1,53 @@
+#!/bin/bash
+#
+# 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.
+#
+set -e
+
+if [ -z "${SUPERSET_VERSION_RC}" ] || [ -z "${SUPERSET_SVN_DEV_PATH}" ] || [
-z "${SUPERSET_VERSION}" ]; then
+ echo "SUPERSET_VERSION_RC, SUPERSET_SVN_DEV_PATH and SUPERSET_VERSION are
required to run this container"
+ exit 1
+fi
+
+SUPERSET_RELEASE_RC=apache-superset-incubating-"${SUPERSET_VERSION_RC}"
+SUPERSET_RELEASE_RC_TARBALL="${SUPERSET_RELEASE_RC}"-source.tar.gz
+SUPERSET_RELEASE_RC_BASE_PATH="${SUPERSET_SVN_DEV_PATH}"/"${SUPERSET_VERSION_RC}"
+SUPERSET_RELEASE_RC_TARBALL_PATH="${SUPERSET_RELEASE_RC_BASE_PATH}"/"${SUPERSET_RELEASE_RC_TARBALL}"
+
+# Create directory release version
+mkdir -p "${SUPERSET_SVN_DEV_PATH}"/"${SUPERSET_VERSION_RC}"
+
+# Clone superset from tag to /tmp
+cd /tmp
+git clone --depth 1 --branch ${SUPERSET_VERSION_RC}
https://github.com/apache/incubator-superset.git
+mkdir -p "${HOME}/${SUPERSET_VERSION_RC}"
+cd incubator-superset && \
+
+# Check RC version
+if ! jq -e --arg SUPERSET_VERSION $SUPERSET_VERSION '.version ==
$SUPERSET_VERSION' superset/assets/package.json
+then
+ SOURCE_VERSION=$(jq '.version' superset/assets/package.json)
+ echo "Source package.json version is wrong, found: ${SOURCE_VERSION} should
be: ${SUPERSET_VERSION}"
+ exit 1
+fi
+
+# Create source tarball
+git archive \
+ --format=tar.gz "${SUPERSET_VERSION_RC}" \
+ --prefix="${SUPERSET_RELEASE_RC}/" \
+ -o "${SUPERSET_RELEASE_RC_TARBALL_PATH}"
+
+chown -R ${HOST_UID}:${HOST_UID} "${SUPERSET_RELEASE_RC_BASE_PATH}"
diff --git a/RELEASING/make_tarball.sh b/RELEASING/set_release_env.sh
similarity index 51%
copy from RELEASING/make_tarball.sh
copy to RELEASING/set_release_env.sh
index 5959d0f..4e4423b 100755
--- a/RELEASING/make_tarball.sh
+++ b/RELEASING/set_release_env.sh
@@ -15,24 +15,24 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
-set -ex
-
-if [ -z "$VERSION" ]; then
- echo "VERSION is required to run this container"
- exit 1
-fi
+usage() {
+ echo "usage: . set_release_env.sh <SUPERSET_VERSION> <SUPERSET_RC>
<PGP_KEY_FULLBANE>"
+}
+if [ -z "$1" ] || [ -z "$2" ] || [ -z "$3" ]; then
+ usage;
+else
+ export SUPERSET_VERSION="${1}"
+ export SUPERSET_RC="${2}"
+ export SUPERSET_PGP_FULLNAME="${3}"
+ export SUPERSET_VERSION_RC="${SUPERSET_VERSION}rc${SUPERSET_RC}"
+ export SUPERSET_RELEASE=apache-superset-incubating-"${SUPERSET_VERSION}"
+ export
SUPERSET_RELEASE_RC=apache-superset-incubating-"${SUPERSET_VERSION_RC}"
+ export SUPERSET_RELEASE_TARBALL="${SUPERSET_RELEASE}"-source.tar.gz
+ export SUPERSET_RELEASE_RC_TARBALL="${SUPERSET_RELEASE_RC}"-source.tar.gz
-echo "version: $VERSION"
-cd /tmp
-git clone --depth 1 --branch $VERSION
https://github.com/apache/incubator-superset.git
-mkdir ~/$VERSION
-cd incubator-superset && \
-git archive \
- --format=tar.gz \
- --prefix=apache-superset-incubating-$VERSION/ \
- HEAD \
- -o ~/$VERSION/apache-superset-incubating.tar.gz
-
-gpg --armor --output apache-superset-incubating.tar.gz.asc --detach-sig
apache-superset-incubating.tar.gz
-gpg --print-md SHA512 apache-superset-incubating.tar.gz >
apache-superset-incubating.tar.gz.sha512
+ echo -------------------------------
+ echo Set Release env variables
+ env | grep SUPERSET
+ echo -------------------------------
+fi
diff --git a/RELEASING/test_run_tarball.sh b/RELEASING/test_run_tarball.sh
index 6521ac0..74ef747 100755
--- a/RELEASING/test_run_tarball.sh
+++ b/RELEASING/test_run_tarball.sh
@@ -22,8 +22,31 @@ if [ -z "${SUPERSET_VERSION_RC}" ]; then
exit 1
fi
-# Building a docker from a tarball
-docker build --no-cache -t apache-superset:${SUPERSET_VERSION_RC} -f
Dockerfile.from_tarball . --build-arg VERSION=${SUPERSET_VERSION_RC}
+if [ -z "${SUPERSET_SVN_DEV_PATH}" ]; then
+ SUPERSET_SVN_DEV_PATH="$HOME/svn/superset_dev"
+fi
+
+if [ ${1} == "local" ]; then
+ SUPERSET_RELEASE_RC=apache-superset-incubating-"${SUPERSET_VERSION_RC}"
+ SUPERSET_RELEASE_RC_TARBALL="${SUPERSET_RELEASE_RC}"-source.tar.gz
+
SUPERSET_TARBALL_PATH="${SUPERSET_SVN_DEV_PATH}"/${SUPERSET_VERSION_RC}/${SUPERSET_RELEASE_RC_TARBALL}
+ SUPERSET_TMP_TARBALL_FILENAME=_tmp_"${SUPERSET_VERSION_RC}".tar.gz
+ cp "${SUPERSET_TARBALL_PATH}" "${SUPERSET_TMP_TARBALL_FILENAME}"
+ docker build --no-cache \
+ -t apache-superset:${SUPERSET_VERSION_RC} \
+ -f Dockerfile.from_local_tarball . \
+ --build-arg VERSION=${SUPERSET_VERSION_RC} \
+ --build-arg SUPERSET_BUILD_FROM=local \
+ --build-arg
SUPERSET_RELEASE_RC_TARBALL="${SUPERSET_TMP_TARBALL_FILENAME}"
+ rm "${SUPERSET_TMP_TARBALL_FILENAME}"
+else
+ # Building a docker from a tarball
+ docker build --no-cache \
+ -t apache-superset:${SUPERSET_VERSION_RC} \
+ -f Dockerfile.from_svn_tarball . \
+ --build-arg VERSION=${SUPERSET_VERSION_RC} \
+ --build-arg SUPERSET_BUILD_FROM=svn
+fi
echo "---------------------------------------------------"
echo "After docker build and run, you should be able to access localhost:5001
on your browser"