{#
  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: [VOTE] Release Apache {{ project_name }} {{ version }} based on Superset {{ version_rc }}

Hello {{ project_name }} Community,

This is a call for the vote to release Apache {{ project_name }} version {{ version }}.

The release candidate:
https://dist.apache.org/repos/dist/dev/{{ project_module }}/{{ version_rc }}/

Git tag for the release:
https://github.com/apache/{{ project_module }}/tree/{{ version_rc }}

The Change Log for the release:
https://github.com/apache/{{ project_module }}/blob/{{ version_rc }}/CHANGELOG.md

The Updating instructions for the release:
https://github.com/apache/{{ project_module }}/blob/{{ version_rc }}/UPDATING.md

public keys are available at:

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

The vote will be open for at least 72 hours or until the necessary number
of votes are reached.

Please vote accordingly:

[ ] +1 approve
[ ] +0 no opinion
[ ] -1 disapprove with the reason

Thanks,
The Apache {{ project_name }} Team
