blob: a4f12615170fa7fea592b44772473088ae741b97 [file] [log] [blame]
#!/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.
# This script helps new Apache committers set up their GPG keys for releases.
# It guides you through creating a new key, exports the public key, and
# provides instructions on how to add it to your project's KEYS file.
echo "========================================================"
echo " Apache GPG Key Setup Script"
echo "========================================================"
echo " "
echo "Step 1: Generating a new GPG key."
echo " "
echo "Please be aware of Apache's best practices for GPG keys:"
echo "- **Key Type:** Select **(1) RSA and RSA**."
echo "- **Key Size:** Enter **4096**."
echo "- **Email Address:** Use your official **@apache.org** email address."
echo "- **Passphrase:** Use a strong, secure passphrase."
echo " "
read -p "Press [Enter] to start the GPG key generation..."
# Generate a new GPG key
# The --batch and --passphrase-fd 0 options are used for automation,
# but the script will still require interactive input.
gpg --full-gen-key
if [ $? -ne 0 ]; then
echo "Error: GPG key generation failed. Please check your GPG installation."
exit 1
fi
echo " "
echo "Step 2: Listing your GPG keys to find the new key ID."
echo "Your new key is listed under 'pub' with a string of 8 or 16 characters after the '/'."
# List all GPG keys
gpg --list-keys
echo " "
read -p "Please copy and paste your new key ID here (e.g., A1B2C3D4 or 1234ABCD5678EF01): " KEY_ID
if [ -z "$KEY_ID" ]; then
echo "Error: Key ID cannot be empty. Exiting."
exit 1
fi
echo " "
echo "Step 3: Exporting your public key to a file."
# Export the public key in ASCII armored format
gpg --armor --export "$KEY_ID" > "$KEY_ID.asc"
if [ $? -ne 0 ]; then
echo "Error: Public key export failed. Please ensure the Key ID is correct."
rm -f "$KEY_ID.asc"
exit 1
fi
echo "Checking out dist repository to update KEYS file"
svn checkout --depth immediates https://dist.apache.org/repos/dist dist
cd dist/release
svn checkout https://dist.apache.org/repos/dist/release/incubator/burr incubator/burr
cd ../../
gpg --list-keys "$KEY_ID" >> dist/release/incubator/burr/KEYS
cat "$KEY_ID.asc" >> dist/release/incubator/burr/KEYS
cd dist/release/incubator/burr
echo " "
echo "========================================================"
echo " Setup Complete!"
echo "========================================================"
echo "Your public key has been saved to: $KEY_ID.asc"
echo " "
echo "NEXT STEPS (VERY IMPORTANT):"
echo "1. Please inspect the KEYS file to ensure the new key is added correctly. It should be in the current directory."
echo "2. If all good run: svn update KEYS && svn commit -m \"Adds new key $KEY_ID for YOUR NAME\""
echo "3. Inform the mailing list that you've updated the KEYS file."
echo " The updated KEYS file is essential for others to verify your release signatures."
echo " "