| #!/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 " " |