| Index: build.py | 
| diff --git a/build.py b/build.py | 
| index e16dfde1b47d6baf490f11fecb046716b2f9ce78..ed14acbcf8494cd780b664a4c43c4ae85617affe 100644 | 
| --- a/build.py | 
| +++ b/build.py | 
| @@ -424,11 +424,11 @@ def generateDocs(baseDir, scriptName, opts, args, type): | 
|  | 
|  | 
| def runReleaseAutomation(baseDir, scriptName, opts, args, type): | 
| -    keyFiles = [] | 
| +    keyFile = None | 
| downloadsRepo = os.path.join(baseDir, '..', 'downloads') | 
| for option, value in opts: | 
| if option in ('-k', '--key'): | 
| -            keyFiles.append(value) | 
| +            keyFile = value | 
| elif option in ('-d', '--downloads'): | 
| downloadsRepo = value | 
|  | 
| @@ -442,13 +442,13 @@ def runReleaseAutomation(baseDir, scriptName, opts, args, type): | 
| usage(scriptName, type, 'release') | 
| return | 
|  | 
| -    if type == 'chrome' and len(keyFiles) != 2: | 
| -        print >>sys.stderr, 'Error: wrong number of key files specified, two keys (Chrome and Safari) required for the release' | 
| +    if type in {'chrome', 'safari'} and keyFile is None: | 
| +        print >>sys.stderr, 'Error: you must specify a key file for this release' | 
| usage(scriptName, type, 'release') | 
| return | 
|  | 
| import buildtools.releaseAutomation as releaseAutomation | 
| -    releaseAutomation.run(baseDir, type, version, keyFiles, downloadsRepo) | 
| +    releaseAutomation.run(baseDir, type, version, keyFile, downloadsRepo) | 
|  | 
|  | 
| def updatePSL(baseDir, scriptName, opts, args, type): | 
| @@ -522,10 +522,10 @@ with addCommand(generateDocs, 'docs') as command: | 
| with addCommand(runReleaseAutomation, 'release') as command: | 
| command.shortDescription = 'Run release automation' | 
| command.description = 'Note: If you are not the project owner then you '        "probably don't want to run this!\n\n"        'Runs release automation: creates downloads for the new version, tags '        'source code repository as well as downloads and buildtools repository.' | 
| -    command.addOption('File containing private key and certificates required to sign the release. Note that for Chrome releases this option needs to be specified twice: first a key to sign Chrome builds, then another to sign the Safari build.', short='k', long='key', value='file', types=('chrome',)) | 
| +    command.addOption('File containing private key and certificates required to sign the release.', short='k', long='key', value='file', types=('chrome', 'safari', 'edge')) | 
| command.addOption('Directory containing downloads repository (if omitted ../downloads is assumed)', short='d', long='downloads', value='dir') | 
| command.params = '[options] <version>' | 
| -    command.supportedTypes = ('gecko', 'chrome') | 
| +    command.supportedTypes = ('gecko', 'chrome', 'safari', 'edge') | 
|  | 
| with addCommand(updatePSL, 'updatepsl') as command: | 
| command.shortDescription = 'Updates Public Suffix List' | 
|  |