{#
  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.
-#}
To: {{ receiver_email }}
From: {{ sender_email }}
Subject: [ANNOUNCE] Apache {{ project_name }} version {{ version }} Released

Hello Community,

The Apache {{ project_name }} team is pleased to announce that {{ project_name }}
{{ version }} has just been released.

{{ project_description }}

The official source release:

https://www.apache.org/dist/{{ project_module }}/{{ version }}

The Pypi package:

https://pypi.org/project/apache-superset/

If you have any usage questions, or have problems when upgrading or
find any problems about enhancements included in this release, please
don't hesitate to let us know by sending feedback to this mailing
list.

---------------------------------------------------------------------
To unsubscribe, e-mail: general-unsubscribe@apache.org
For additional commands, e-mail: general-help@apache.org
