You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by mi...@apache.org on 2022/06/02 13:08:04 UTC

[superset] branch master updated: docs: Updates release scripts and docs (#20231)

This is an automated email from the ASF dual-hosted git repository.

michaelsmolina pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/superset.git


The following commit(s) were added to refs/heads/master by this push:
     new 90459495ff docs: Updates release scripts and docs (#20231)
90459495ff is described below

commit 90459495ff5ca2303985fee31093c6092db1716e
Author: Michael S. Molina <70...@users.noreply.github.com>
AuthorDate: Thu Jun 2 10:07:57 2022 -0300

    docs: Updates release scripts and docs (#20231)
    
    * chore: Updates release scripts and docs
    
    * Adds default receiver
---
 RELEASING/README.md                            |  43 ++++----
 RELEASING/email_templates/announce.j2          |   2 +-
 RELEASING/email_templates/result_pmc.j2        |   2 +-
 RELEASING/email_templates/vote_pmc.j2          |   2 +-
 RELEASING/{send_email.py => generate_email.py} | 137 ++-----------------------
 5 files changed, 36 insertions(+), 150 deletions(-)

diff --git a/RELEASING/README.md b/RELEASING/README.md
index e48728d1b8..470c890ba9 100644
--- a/RELEASING/README.md
+++ b/RELEASING/README.md
@@ -85,7 +85,6 @@ virtualenv venv
 source venv/bin/activate
 ```
 
-
 In addition, we recommend using the [`cherrytree`](https://pypi.org/project/cherrytree/) tool for
 automating cherry picking, as it will help speed up the release process. To install `cherrytree`
 and other dependencies that are required for the release process, run the following commands:
@@ -105,19 +104,21 @@ the wrong files/using wrong names. There's a script to help you set correctly al
 necessary environment variables. Change your current directory to `superset/RELEASING`
 and execute the `set_release_env.sh` script with the relevant parameters:
 
-
 Usage (MacOS/ZSH):
+
 ```bash
 cd RELEASING
 source set_release_env.sh <SUPERSET_RC_VERSION> <PGP_KEY_FULLNAME>
 ```
 
 Usage (BASH):
+
 ```bash
 . set_release_env.sh <SUPERSET_RC_VERSION> <PGP_KEY_FULLNAME>
 ```
 
 Example:
+
 ```bash
 source set_release_env.sh 1.5.1rc1 myid@apache.org
 ```
@@ -151,6 +152,7 @@ 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.
 When creating the initial minor release (e.g. 1.5.0), create a new branch:
+
 ```bash
 git checkout master
 git pull
@@ -195,7 +197,6 @@ by adding the `--no-dry-run` flag (`-nd` for short):
 cherrytree bake -r apache/superset -m master -l v${SUPERSET_GITHUB_BRANCH} -nd ${SUPERSET_GITHUB_BRANCH}
 ```
 
-
 #### Resolving conflicts
 
 If there are conflicts, you can issue the following command to apply all cherries up until the conflict automatically, and then
@@ -246,6 +247,7 @@ python changelog.py --previous_version 1.4 --current_version ${SUPERSET_GITHUB_B
 
 You can get a list of pull requests with labels started with blocking, risk, hold, revert and security by using the parameter `--risk`.
 Example:
+
 ```bash
 python changelog.py --previous_version 0.37 --current_version 0.38 changelog --access_token {GITHUB_TOKEN} --risk
 ```
@@ -287,6 +289,10 @@ git tag ${SUPERSET_VERSION_RC}
 git push origin ${SUPERSET_VERSION_RC}
 ```
 
+### Create a release on Github
+
+After submitting the tag, follow the steps [here](https://docs.github.com/en/repositories/releasing-projects-on-github/managing-releases-in-a-repository) to create the release. Use the vote email text as the content for the release description. Make sure to check the "This is a pre-release" checkbox for release canditates. You can check previous releases if you need an example.
+
 ## Preparing the release candidate
 
 The first step of preparing an Apache Release is packaging a release candidate
@@ -303,13 +309,14 @@ the tag and create a signed source tarball from it:
 Note that `make_tarball.sh`:
 
 - By default, the script assumes you have already executed an SVN checkout to `$HOME/svn/superset_dev`.
-This can be overridden by setting `SUPERSET_SVN_DEV_PATH` environment var to a different svn dev directory
+  This can be overridden 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
 
 ### Build and test the created source tarball
 
 To build and run the **local copy** of the recently created tarball:
+
 ```bash
 # Build and run a release candidate tarball
 ./test_run_tarball.sh local
@@ -331,6 +338,7 @@ svn update
 ### Build and test from SVN source tarball
 
 To build and run the recently created tarball **from SVN**:
+
 ```bash
 # Build and run a release candidate tarball
 ./test_run_tarball.sh
@@ -339,6 +347,7 @@ To build and run the recently created tarball **from SVN**:
 ```
 
 ### Voting
+
 Now you're ready to start the [VOTE] thread. Here's an example of a
 previous release vote thread:
 https://lists.apache.org/thread.html/e60f080ebdda26896214f7d3d5be1ccadfab95d48fbe813252762879@<dev.superset.apache.org>
@@ -347,17 +356,10 @@ To easily send a voting request to Superset community, still on the `superset/RE
 
 ```bash
 # Note: use Superset's virtualenv
-(venv)$ python send_email.py vote_pmc
+(venv)$ python generate_email.py vote_pmc
 ```
 
-The script will interactively ask for extra information so it can authenticate on the Apache Email Relay.
-The release version and release candidate number are fetched from the previously set environment variables.
-
-```
-Sender email (ex: user@apache.org): your_apache_email@apache.org
-Apache username: your_apache_user
-Apache password: your_apache_password
-```
+The script will generate the email text that should be sent to dev@superset.apache.org using an email client. The release version and release candidate number are fetched from the previously set environment variables.
 
 Once 3+ binding votes (by PMC members) have been cast and at
 least 72 hours have past, you can post a [RESULT] thread:
@@ -367,23 +369,20 @@ To easily send the result email, still on the `superset/RELEASING` directory:
 
 ```bash
 # Note: use Superset's virtualenv
-python send_email.py result_pmc
+python generate_email.py result_pmc
 ```
 
 The script will interactively ask for extra information needed to fill out the email template. Based on the
 voting description, it will generate a passing, non passing or non conclusive email.
-here's an example:
+Here's an example:
 
 ```
-Sender email (ex: user@apache.org): your_apache_email@apache.org
-Apache username: your_apache_user
-Apache password: your_apache_password
 A List of people with +1 binding vote (ex: Max,Grace,Krist): Daniel,Alan,Max,Grace
 A List of people with +1 non binding vote (ex: Ville): Ville
 A List of people with -1 vote (ex: John):
 ```
 
-Following the result thread, yet another [VOTE] thread should be
+The script will generate the email text that should be sent to dev@superset.apache.org using an email client. The release version and release candidate number are fetched from the previously set environment variables.
 
 ### Validating a release
 
@@ -392,6 +391,7 @@ https://www.apache.org/info/verification.html
 ## Publishing a successful release
 
 Upon a successful vote, you'll have to copy the folder into the non-"dev/" folder.
+
 ```bash
 cp -r ~/svn/superset_dev/${SUPERSET_VERSION_RC}/ ~/svn/superset/${SUPERSET_VERSION}/
 cd ~/svn/superset/
@@ -403,6 +403,7 @@ svn update
 ```
 
 Then tag the final release:
+
 ```bash
 # Go to the root directory of the repo, e.g. `~/src/superset`
 cd ~/src/superset/
@@ -434,9 +435,11 @@ Once it's all done, an [ANNOUNCE] thread announcing the release to the dev@ mail
 
 ```bash
 # Note use Superset's virtualenv
-python send_email.py announce
+python generate_email.py announce
 ```
 
+The script will generate the email text that should be sent to dev@superset.apache.org using an email client. The release version is fetched from the previously set environment variables.
+
 ### GitHub Release
 
 Finally, so the GitHub UI reflects the latest release, you should create a release from the
diff --git a/RELEASING/email_templates/announce.j2 b/RELEASING/email_templates/announce.j2
index 80038630d5..5d5b2f67af 100644
--- a/RELEASING/email_templates/announce.j2
+++ b/RELEASING/email_templates/announce.j2
@@ -17,7 +17,7 @@
   under the License.
 -#}
 To: {{ receiver_email }}
-From: {{ sender_email }}
+
 Subject: [ANNOUNCE] Apache {{ project_name }} version {{ version }} Released
 
 Hello Community,
diff --git a/RELEASING/email_templates/result_pmc.j2 b/RELEASING/email_templates/result_pmc.j2
index be88047524..37b7eeda53 100644
--- a/RELEASING/email_templates/result_pmc.j2
+++ b/RELEASING/email_templates/result_pmc.j2
@@ -17,7 +17,7 @@
   under the License.
 -#}
 To: {{ receiver_email }}
-From: {{ sender_email }}
+
 Subject: [RESULT] [VOTE] Release Apache {{ project_name }} {{ version }} based on Superset {{ version_rc }}
 
 Thanks to everyone that participated. The vote to release
diff --git a/RELEASING/email_templates/vote_pmc.j2 b/RELEASING/email_templates/vote_pmc.j2
index 3b2cc1363e..a6ebda72c2 100644
--- a/RELEASING/email_templates/vote_pmc.j2
+++ b/RELEASING/email_templates/vote_pmc.j2
@@ -17,7 +17,7 @@
   under the License.
 -#}
 To: {{ receiver_email }}
-From: {{ sender_email }}
+
 Subject: [VOTE] Release Apache {{ project_name }} {{ version }} based on Superset {{ version_rc }}
 
 Hello {{ project_name }} Community,
diff --git a/RELEASING/send_email.py b/RELEASING/generate_email.py
similarity index 53%
rename from RELEASING/send_email.py
rename to RELEASING/generate_email.py
index a4b4a44966..92536670cd 100755
--- a/RELEASING/send_email.py
+++ b/RELEASING/generate_email.py
@@ -15,9 +15,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 #
-import smtplib
-import ssl
-from typing import Any, Dict, List, Optional
+from typing import Any, Dict, List
 
 from click.core import Context
 
@@ -30,9 +28,7 @@ try:
 except ModuleNotFoundError:
     exit("Click is a required dependency for this script")
 
-
-SMTP_PORT = 587
-SMTP_SERVER = "mail-relay.apache.org"
+RECEIVER_EMAIL = "dev@superset.apache.org"
 PROJECT_NAME = "Superset"
 PROJECT_MODULE = "superset"
 PROJECT_DESCRIPTION = "Apache Superset is a modern, enterprise-ready business intelligence web application"
@@ -44,25 +40,6 @@ def string_comma_to_list(message: str) -> List[str]:
     return [element.strip() for element in message.split(",")]
 
 
-def send_email(
-    smtp_server: str,
-    smpt_port: int,
-    username: str,
-    password: str,
-    sender_email: str,
-    receiver_email: str,
-    message: str,
-) -> None:
-    """
-    Send a simple text email (SMTP)
-    """
-    context = ssl.create_default_context()
-    with smtplib.SMTP(smtp_server, smpt_port) as server:
-        server.starttls(context=context)
-        server.login(username, password)
-        server.sendmail(sender_email, receiver_email, message)
-
-
 def render_template(template_file: str, **kwargs: Any) -> str:
     """
     Simple render template based on named parameters
@@ -75,122 +52,49 @@ def render_template(template_file: str, **kwargs: Any) -> str:
     return template.render(kwargs)
 
 
-def inter_send_email(
-    username: str, password: str, sender_email: str, receiver_email: str, message: str
-) -> None:
-    print("--------------------------")
-    print("SMTP Message")
-    print("--------------------------")
-    print(message)
-    print("--------------------------")
-    confirm = input("Is the Email message ok? (yes/no): ")
-    if confirm not in ("Yes", "yes", "y"):
-        exit("Exit by user request")
-
-    try:
-        send_email(
-            SMTP_SERVER,
-            SMTP_PORT,
-            username,
-            password,
-            sender_email,
-            receiver_email,
-            message,
-        )
-        print("Email sent successfully")
-    except smtplib.SMTPAuthenticationError:
-        exit("SMTP User authentication error, Email not sent!")
-    except Exception as e:
-        exit(f"SMTP exception {e}")
-
-
 class BaseParameters(object):
     def __init__(
         self,
-        email: str,
-        username: str,
-        password: str,
         version: str,
         version_rc: str,
     ) -> None:
-        self.email = email
-        self.username = username
-        self.password = password
         self.version = version
         self.version_rc = version_rc
         self.template_arguments: Dict[str, Any] = {}
 
     def __repr__(self) -> str:
-        return f"Apache Credentials: {self.email}/{self.username}/{self.version}/{self.version_rc}"
+        return f"Apache Credentials: {self.version}/{self.version_rc}"
 
 
 @click.group()
 @click.pass_context
-@click.option(
-    "--apache_email",
-    prompt="Apache Email",
-    help="Your Apache email this will be used for SMTP From",
-)
-@click.option(
-    "--apache_username", prompt="Apache username", help="Your LDAP Apache username"
-)
-@click.option(
-    "--apache_password",
-    prompt="Apache password",
-    hide_input=True,
-    help="Your LDAP Apache password",
-)
 @click.option("--version", envvar="SUPERSET_VERSION")
 @click.option("--version_rc", envvar="SUPERSET_VERSION_RC")
 def cli(
     ctx: Context,
-    apache_email: str,
-    apache_username: str,
-    apache_password: str,
     version: str,
     version_rc: str,
 ) -> None:
     """Welcome to releasing send email CLI interface!"""
-    base_parameters = BaseParameters(
-        apache_email, apache_username, apache_password, version, version_rc
-    )
+    base_parameters = BaseParameters(version, version_rc)
+    base_parameters.template_arguments["receiver_email"] = RECEIVER_EMAIL
     base_parameters.template_arguments["project_name"] = PROJECT_NAME
     base_parameters.template_arguments["project_module"] = PROJECT_MODULE
     base_parameters.template_arguments["project_description"] = PROJECT_DESCRIPTION
     base_parameters.template_arguments["version"] = base_parameters.version
     base_parameters.template_arguments["version_rc"] = base_parameters.version_rc
-    base_parameters.template_arguments["sender_email"] = base_parameters.email
     ctx.obj = base_parameters
 
 
 @cli.command("vote_pmc")
-@click.option(
-    "--receiver_email",
-    default="dev@superset.apache.org",
-    type=str,
-    prompt="The receiver email (To:)",
-)
 @click.pass_obj
-def vote_pmc(base_parameters: BaseParameters, receiver_email: str) -> None:
+def vote_pmc(base_parameters: BaseParameters) -> None:
     template_file = "email_templates/vote_pmc.j2"
-    base_parameters.template_arguments["receiver_email"] = receiver_email
     message = render_template(template_file, **base_parameters.template_arguments)
-    inter_send_email(
-        base_parameters.username,
-        base_parameters.password,
-        base_parameters.template_arguments["sender_email"],
-        base_parameters.template_arguments["receiver_email"],
-        message,
-    )
+    print(message)
 
 
 @cli.command("result_pmc")
-@click.option(
-    "--receiver_email",
-    default="dev@superset.apache.org",
-    type=str,
-    prompt="The receiver email (To:)",
-)
 @click.option(
     "--vote_bindings",
     default="",
@@ -219,14 +123,12 @@ def vote_pmc(base_parameters: BaseParameters, receiver_email: str) -> None:
 @click.pass_obj
 def result_pmc(
     base_parameters: BaseParameters,
-    receiver_email: str,
     vote_bindings: str,
     vote_nonbindings: str,
     vote_negatives: str,
     vote_thread: str,
 ) -> None:
     template_file = "email_templates/result_pmc.j2"
-    base_parameters.template_arguments["receiver_email"] = receiver_email
     base_parameters.template_arguments["vote_bindings"] = string_comma_to_list(
         vote_bindings
     )
@@ -238,34 +140,15 @@ def result_pmc(
     )
     base_parameters.template_arguments["vote_thread"] = vote_thread
     message = render_template(template_file, **base_parameters.template_arguments)
-    inter_send_email(
-        base_parameters.username,
-        base_parameters.password,
-        base_parameters.template_arguments["sender_email"],
-        base_parameters.template_arguments["receiver_email"],
-        message,
-    )
+    print(message)
 
 
 @cli.command("announce")
-@click.option(
-    "--receiver_email",
-    default="dev@superset.apache.org",
-    type=str,
-    prompt="The receiver email (To:)",
-)
 @click.pass_obj
-def announce(base_parameters: BaseParameters, receiver_email: str) -> None:
+def announce(base_parameters: BaseParameters) -> None:
     template_file = "email_templates/announce.j2"
-    base_parameters.template_arguments["receiver_email"] = receiver_email
     message = render_template(template_file, **base_parameters.template_arguments)
-    inter_send_email(
-        base_parameters.username,
-        base_parameters.password,
-        base_parameters.template_arguments["sender_email"],
-        base_parameters.template_arguments["receiver_email"],
-        message,
-    )
+    print(message)
 
 
 cli()