-
Notifications
You must be signed in to change notification settings - Fork 99
Ssh key handling #136
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Ssh key handling #136
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -15,8 +15,8 @@ | |
| from queue import Queue | ||
| import os | ||
| import subprocess | ||
| from .git_helper import SSH_KEY_FILE | ||
| import shlex | ||
| import tempfile | ||
| import sys | ||
|
|
||
| STATUS_TO_PRIORITY = { | ||
|
|
@@ -454,11 +454,6 @@ def create_merge(state, repo_cfg, branch, git_cfg): | |
| fpath = 'cache/{}/{}'.format(repo_cfg['owner'], repo_cfg['name']) | ||
| url = 'git@github.com:{}/{}.git'.format(repo_cfg['owner'], repo_cfg['name']) | ||
|
|
||
| os.makedirs(os.path.dirname(SSH_KEY_FILE), exist_ok=True) | ||
| with open(SSH_KEY_FILE, 'w') as fp: | ||
| fp.write(git_cfg['ssh_key']) | ||
| os.chmod(SSH_KEY_FILE, 0o600) | ||
|
|
||
| if not os.path.exists(fpath): | ||
| utils.logged_call(['git', 'init', fpath]) | ||
| utils.logged_call(['git', '-C', fpath, 'remote', 'add', 'origin', url]) | ||
|
|
@@ -744,7 +739,8 @@ def fetch_mergeability(mergeable_que): | |
| finally: | ||
| mergeable_que.task_done() | ||
|
|
||
| def check_timeout(states, queue_handler): | ||
| def check_timeout(states, queue_handler, tmp_ssh_key): | ||
| # This function holds a reference to tmp_ssh_key to keep it alive | ||
| while True: | ||
| try: | ||
| for repo_label, repo_states in states.items(): | ||
|
|
@@ -1007,11 +1003,18 @@ def queue_handler(): | |
| os.environ['GIT_SSH'] = os.path.join(os.path.dirname(__file__), 'git_helper.py') | ||
| os.environ['GIT_EDITOR'] = 'cat' | ||
|
|
||
| tmp_ssh_key = None | ||
| if git_cfg['local_git']: | ||
| tmp_ssh_key = tempfile.NamedTemporaryFile(prefix='homu-sshkey') | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I didn't see any explicit Example: import os
import tempfile
def make_temp_file():
n = tempfile.NamedTemporaryFile()
n.write(b'ok')
n.flush()
return n.name
name = make_temp_file()
# Garbage collection has already closed the file.
print(os.stat(name))
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This commit was intentionally tying the tmpfile lifecycle to Python GC, so that it goes away if the process exits etc. That's why I had to do the hack of passing it as an argument to the "mainloop" just so it was kept alive. |
||
| tmp_ssh_key.write(git_cfg['ssh_key'].encode('utf-8')) | ||
| tmp_ssh_key.flush() | ||
| os.environ['HOMU_GIT_KEY_PATH'] = tmp_ssh_key.name | ||
|
|
||
| from . import server | ||
| Thread(target=server.start, args=[cfg, states, queue_handler, repo_cfgs, repos, logger, buildbot_slots, my_username, db, repo_labels, mergeable_que, gh]).start() | ||
|
|
||
| Thread(target=fetch_mergeability, args=[mergeable_que]).start() | ||
| Thread(target=check_timeout, args=[states, queue_handler]).start() | ||
| Thread(target=check_timeout, args=[states, queue_handler, tmp_ssh_key]).start() | ||
|
|
||
| queue_handler() | ||
|
|
||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍 for the use of
tempfile!