{#
  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 }}

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 issues with 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
