mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-14 22:05:44 +00:00
Bug 1250904 - Start a wizard upon initiating an interactive shell, r=armenzg
To make things as easy as possible, run a little wizard to help developers choose what to do. This way they don't need to memorize any commands or read any wiki pages. MozReview-Commit-ID: DzBlVUs9R8I --HG-- extra : rebase_source : 36166f7642f6fb297adedf4176f1088cb91c2435
This commit is contained in:
parent
29a1e194bd
commit
4981a013ad
@ -63,5 +63,10 @@ ADD apport /etc/default/apport
|
||||
# Disable font antialiasing for now to match releng's setup
|
||||
ADD fonts.conf /home/worker/.fonts.conf
|
||||
|
||||
# Set up first-run experience for interactive mode
|
||||
ADD motd /etc/taskcluster-motd
|
||||
ADD taskcluster-interactive-shell /bin/taskcluster-interactive-shell
|
||||
RUN chmod +x /bin/taskcluster-interactive-shell
|
||||
|
||||
# Set a default command useful for debugging
|
||||
CMD ["/bin/bash", "--login"]
|
||||
|
108
testing/docker/desktop-test/bin/run-wizard
Executable file
108
testing/docker/desktop-test/bin/run-wizard
Executable file
@ -0,0 +1,108 @@
|
||||
#!/usr/bin/env python
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this,
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
from __future__ import print_function, unicode_literals
|
||||
|
||||
import os
|
||||
import subprocess
|
||||
import sys
|
||||
from textwrap import wrap
|
||||
|
||||
|
||||
def call(cmd, **kwargs):
|
||||
print(" ".join(cmd))
|
||||
return subprocess.call(cmd, **kwargs)
|
||||
|
||||
|
||||
def resume():
|
||||
call(['run-mozharness'])
|
||||
|
||||
|
||||
def setup():
|
||||
call(['run-mozharness', '--no-run-tests'])
|
||||
print("Mozharness has finished downloading the build and "
|
||||
"tests to {}.".format(os.path.join(os.getcwd(), 'build')))
|
||||
|
||||
|
||||
def clone():
|
||||
repo = os.environ['GECKO_HEAD_REPOSITORY']
|
||||
rev = os.environ['GECKO_HEAD_REV']
|
||||
clone_path = os.path.expanduser(os.path.join('~', 'gecko'))
|
||||
|
||||
# try is too large to clone, instead clone central and pull
|
||||
# in changes from try
|
||||
if "hg.mozilla.org/try" in repo:
|
||||
central = 'http://hg.mozilla.org/mozilla-central'
|
||||
call(['hg', 'clone', '-U', central, clone_path])
|
||||
call(['hg', 'pull', '-u', '-r', rev, repo], cwd=clone_path)
|
||||
else:
|
||||
call(['hg', 'clone', '-u', rev, repo, clone_path])
|
||||
print("Finished cloning to {} at revision {}.".format(
|
||||
clone_path, rev))
|
||||
|
||||
|
||||
def exit():
|
||||
pass
|
||||
|
||||
|
||||
OPTIONS = [
|
||||
('Resume task', resume,
|
||||
"Resume the original task without modification. This can be useful for "
|
||||
"passively monitoring it from another shell."),
|
||||
('Setup task', setup,
|
||||
"Setup the task (download the application and tests) but don't run the "
|
||||
"tests just yet. The tests can be run with a custom configuration later "
|
||||
"(experimental)."),
|
||||
('Clone gecko', clone,
|
||||
"Perform a clone of gecko using the task's repo and update it to the "
|
||||
"task's revision."),
|
||||
('Exit', exit, "Exit this wizard and return to the shell.")
|
||||
]
|
||||
|
||||
|
||||
def _fmt_options():
|
||||
max_line_len = 60
|
||||
max_name_len = max(len(o[0]) for o in OPTIONS)
|
||||
|
||||
# TODO Pad will be off if there are more than 9 options.
|
||||
pad = ' ' * (max_name_len+6)
|
||||
|
||||
msg = []
|
||||
for i, (name, _, desc) in enumerate(OPTIONS):
|
||||
desc = wrap(desc, width=max_line_len)
|
||||
desc = [desc[0]] + [pad + l for l in desc[1:]]
|
||||
|
||||
optstr = '{}) {} - {}\n'.format(
|
||||
i+1, name.ljust(max_name_len), '\n'.join(desc))
|
||||
msg.append(optstr)
|
||||
msg.append("Select one of the above options: ")
|
||||
return '\n'.join(msg)
|
||||
|
||||
|
||||
def wizard():
|
||||
print("This wizard can help you get started with some common debugging "
|
||||
"workflows.\nWhat would you like to do?\n")
|
||||
print(_fmt_options(), end="")
|
||||
choice = None
|
||||
while True:
|
||||
choice = raw_input().decode('utf8')
|
||||
try:
|
||||
choice = int(choice)-1
|
||||
if 0 <= choice < len(OPTIONS):
|
||||
break
|
||||
except ValueError:
|
||||
pass
|
||||
|
||||
print("Must provide an integer from 1-{}:".format(len(OPTIONS)))
|
||||
|
||||
func = OPTIONS[choice][1]
|
||||
ret = func()
|
||||
|
||||
print("Use the 'run-wizard' command to start this wizard again.")
|
||||
return ret
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
sys.exit(wizard())
|
6
testing/docker/desktop-test/motd
Normal file
6
testing/docker/desktop-test/motd
Normal file
@ -0,0 +1,6 @@
|
||||
Welcome to your taskcluster interactive shell! The regularly scheduled task
|
||||
has been paused to give you a chance to set up your debugging environment.
|
||||
|
||||
For your convenience, the exact mozharness command needed for this task can
|
||||
be invoked using the 'run-mozharness' command.
|
||||
|
10
testing/docker/desktop-test/taskcluster-interactive-shell
Normal file
10
testing/docker/desktop-test/taskcluster-interactive-shell
Normal file
@ -0,0 +1,10 @@
|
||||
#!/usr/bin/env bash
|
||||
/home/worker/bin/run-wizard;
|
||||
|
||||
SPAWN="$SHELL";
|
||||
|
||||
if [ "$SHELL" = "bash" ]; then
|
||||
SPAWN="bash -li";
|
||||
fi;
|
||||
|
||||
exec $SPAWN;
|
Loading…
Reference in New Issue
Block a user