-
Notifications
You must be signed in to change notification settings - Fork 3.1k
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
Maduong/bugfix/282569 the cli should look for a compose file anywhere in the folder (not just at the root) #1183
Changes from 6 commits
9087499
7a7107f
6897136
c33ae1c
0404596
90174da
9c1a09c
61f2534
ed07c52
3bebc9d
d5c9b3c
a45eeb2
b14a4ab
f5a1835
f0be2a7
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 |
---|---|---|
|
@@ -28,6 +28,11 @@ | |
RP_URL = BASE_URL + CONTAINER_SERVICE_RESOURCE_URL + "/providers/Microsoft.Mindaro" | ||
API_VERSION = "2016-11-01-preview" | ||
|
||
DOCKERFILE_FILE = 'Dockerfile' | ||
DOCKER_COMPOSE_FILE = 'docker-compose.yml' | ||
DOCKER_COMPOSE_TEST_FILE = 'docker-compose.test.yml' | ||
DOCKER_COMPOSE_EXPECTED_VERSION = '2' | ||
|
||
def add_release( | ||
name, | ||
resource_group_name, | ||
|
@@ -192,49 +197,73 @@ def list_releases(name, resource_group_name): | |
json_request = req.json() | ||
return json_request | ||
|
||
def _gitroot(): | ||
""" | ||
returns the absolute path of the repository root | ||
""" | ||
try: | ||
base = check_output(['git', 'rev-parse', '--show-toplevel']) | ||
except: | ||
raise IOError('Current working directory is not a git repository') | ||
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. All exceptions are being caught but exceptions could be raised for different reasons. Just as a suggestion, you could: https://docs.python.org/2/library/subprocess.html#subprocess.check_output 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. Resolved. I've thrown CLIErrors for both types of caught exceptions now |
||
return base.decode('utf-8').strip() | ||
|
||
def _get_filepath_in_current_git_repo(filename): | ||
""" | ||
retrieves the full path of the first file in the git repo that matches filename | ||
""" | ||
FILE_NAMES = 2 | ||
CWD = 0 | ||
for walk in os.walk(_gitroot()): | ||
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. Since
I use underscore 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.
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. Yeah it was failing the pylinter. I guess this is the proper way to do it. |
||
for file_name in walk[FILE_NAMES]: | ||
if file_name == filename: | ||
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 should probably be case-insensitive ( |
||
return walk[CWD] + '/' + file_name | ||
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.
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. os.path.join(dirpath, name) instead to be platform independent. 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. Resolved |
||
return False | ||
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. Return |
||
|
||
def _ensure_docker_compose(): | ||
""" | ||
1. Raises an error if there is no docker_compose_file present. | ||
2. Raises an error if the version specified in the docker_compose_file is not | ||
docker_compose_version. | ||
3. Raises an error if docker_compose_test_file has a version other than docker_compose_version. | ||
""" | ||
docker_compose_file = 'docker-compose.yml' | ||
docker_compose_test_file = 'docker-compose.test.yml' | ||
docker_compose_expected_version = '2' | ||
if not os.path.isfile(docker_compose_file): | ||
raise CLIError('Docker compose file "{}" was not found.'.format(docker_compose_file)) | ||
docker_compose_file = _get_filepath_in_current_git_repo(DOCKER_COMPOSE_FILE) | ||
docker_compose_test_file = _get_filepath_in_current_git_repo(DOCKER_COMPOSE_TEST_FILE) | ||
|
||
if not docker_compose_file: | ||
raise CLIError('Docker compose file "{}" was not found.'.format(DOCKER_COMPOSE_FILE)) | ||
with open(docker_compose_file, 'r') as f: | ||
compose_data = yaml.load(f) | ||
if 'version' not in compose_data.keys(): | ||
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. checking for version and is exactly the same for both files - consider refactoring (e.g. |
||
raise CLIError( | ||
'Docker compose file "{}" is missing version information.'.format( | ||
docker_compose_file)) | ||
if not docker_compose_expected_version in compose_data['version']: | ||
DOCKER_COMPOSE_FILE)) | ||
if not DOCKER_COMPOSE_EXPECTED_VERSION in compose_data['version']: | ||
raise CLIError( | ||
'Docker compose file "{}" has incorrect version. \ | ||
Only version "{}" is supported.'.format( | ||
docker_compose_file, | ||
docker_compose_expected_version)) | ||
if os.path.isfile(docker_compose_test_file): | ||
DOCKER_COMPOSE_FILE, | ||
DOCKER_COMPOSE_EXPECTED_VERSION)) | ||
|
||
if docker_compose_test_file: | ||
with open(docker_compose_test_file, 'r') as f: | ||
compose_data = yaml.load(f) | ||
if 'version' not in compose_data.keys(): | ||
raise CLIError('Docker compose file "{}" is missing version information.'.format( | ||
docker_compose_test_file)) | ||
if not docker_compose_expected_version in compose_data['version']: | ||
if not DOCKER_COMPOSE_EXPECTED_VERSION in compose_data['version']: | ||
raise CLIError( | ||
'Docker compose file "{}" has incorrect version. \ | ||
Only version "{}" is supported.'.format( | ||
docker_compose_test_file, | ||
docker_compose_expected_version)) | ||
DOCKER_COMPOSE_EXPECTED_VERSION)) | ||
|
||
def _ensure_dockerfile(): | ||
""" | ||
1. Raises an error if there is no dockerfile present. | ||
""" | ||
dockerfile_file = 'Dockerfile' | ||
if not os.path.isfile(dockerfile_file): | ||
dockerfile_file = _get_filepath_in_current_git_repo(DOCKERFILE_FILE) | ||
|
||
if not dockerfile_file: | ||
raise CLIError('Docker file "{}" was not found.'.format(dockerfile_file)) | ||
|
||
def _get_remote_url(): | ||
|
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.
nit:
Gets the abs....