Implement auto-loading of SSH keys
Signed-off-by: Knut Ahlers <knut@ahlers.me>
This commit is contained in:
parent
af54670666
commit
20e7c554fc
3 changed files with 57 additions and 1 deletions
50
bin/git-loadkey
Executable file
50
bin/git-loadkey
Executable file
|
@ -0,0 +1,50 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
# Usage: git loadkey
|
||||||
|
#
|
||||||
|
# Configuration format:
|
||||||
|
# [
|
||||||
|
# {
|
||||||
|
# "match": ".*",
|
||||||
|
# "keyname": "...",
|
||||||
|
# }
|
||||||
|
# ]
|
||||||
|
|
||||||
|
import sys
|
||||||
|
import re
|
||||||
|
import subprocess
|
||||||
|
import os.path
|
||||||
|
import json
|
||||||
|
|
||||||
|
CONFIG = os.path.expanduser('~/.config/git-setmail.json')
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
try:
|
||||||
|
repos = [x.split()[1] for x in subprocess.check_output(['git', 'remote', '-v']).split('\n') if len(x.strip()) > 0]
|
||||||
|
except:
|
||||||
|
print 'Could not find origin, not loading key.'
|
||||||
|
return 0
|
||||||
|
|
||||||
|
if os.path.isfile(CONFIG):
|
||||||
|
combinations = json.loads(open(CONFIG).read())
|
||||||
|
else:
|
||||||
|
print 'Config ({}) found.'.format(CONFIG)
|
||||||
|
return 1
|
||||||
|
|
||||||
|
required_keys = []
|
||||||
|
|
||||||
|
for repo in sorted(set(repos)):
|
||||||
|
for combi in combinations:
|
||||||
|
if re.search(combi['match'], repo):
|
||||||
|
required_keys.append(combi['keyname'])
|
||||||
|
break
|
||||||
|
|
||||||
|
for key in sorted(set(required_keys)):
|
||||||
|
print 'Loading key "{}"...'.format(key)
|
||||||
|
subprocess.check_call(['vault-sshadd', key])
|
||||||
|
|
||||||
|
return 0
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
exit(main())
|
|
@ -12,10 +12,13 @@ function step {
|
||||||
|
|
||||||
### Determine what to push
|
### Determine what to push
|
||||||
|
|
||||||
step "Collect refs to push to origin"
|
step "Getting current branch"
|
||||||
|
|
||||||
CURRENT_BRANCH=$(git branch --list | awk '/^\*/{print $2}')
|
CURRENT_BRANCH=$(git branch --list | awk '/^\*/{print $2}')
|
||||||
|
|
||||||
|
step "Loading required key to push"
|
||||||
|
git loadkey
|
||||||
|
|
||||||
step "Execute pre-push auto-hook"
|
step "Execute pre-push auto-hook"
|
||||||
git autohook pre-push
|
git autohook pre-push
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,9 @@ function step {
|
||||||
echo -e ${STEP_COLOR}[$(date +%H:%M:%S)] $1${NO_COLOR}
|
echo -e ${STEP_COLOR}[$(date +%H:%M:%S)] $1${NO_COLOR}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
step "Loading required keys to pull"
|
||||||
|
git loadkey
|
||||||
|
|
||||||
step "Fetching data from remote..."
|
step "Fetching data from remote..."
|
||||||
for remote in $(git remote -v | awk '{print $1}' | sort | uniq); do
|
for remote in $(git remote -v | awk '{print $1}' | sort | uniq); do
|
||||||
step "+++ Remote: '${remote}'"
|
step "+++ Remote: '${remote}'"
|
||||||
|
|
Loading…
Reference in a new issue