Skip to content

Commit

Permalink
Merge pull request #151 from baloise/feat/env-credentials
Browse files Browse the repository at this point in the history
feat(cli): allow passing credentials via environment variables
  • Loading branch information
christiansiegel committed Feb 8, 2021
2 parents c800fb8 + d3ce72c commit 90fb672
Show file tree
Hide file tree
Showing 9 changed files with 112 additions and 30 deletions.
6 changes: 4 additions & 2 deletions docs/commands/add-pr-comment.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,10 @@ usage: gitopscli add-pr-comment [-h] --username USERNAME --password PASSWORD
optional arguments:
-h, --help show this help message and exit
--username USERNAME Git username
--password PASSWORD Git password or token
--username USERNAME Git username (alternative: GITOPSCLI_USERNAME env
variable)
--password PASSWORD Git password or token (alternative: GITOPSCLI_PASSWORD
env variable)
--organisation ORGANISATION
Apps Git organisation/projectKey
--repository-name REPOSITORY_NAME
Expand Down
6 changes: 4 additions & 2 deletions docs/commands/create-pr-preview.md
Original file line number Diff line number Diff line change
Expand Up @@ -84,8 +84,10 @@ usage: gitopscli create-pr-preview [-h] --username USERNAME --password PASSWORD
optional arguments:
-h, --help show this help message and exit
--username USERNAME Git username
--password PASSWORD Git password or token
--username USERNAME Git username (alternative: GITOPSCLI_USERNAME env
variable)
--password PASSWORD Git password or token (alternative: GITOPSCLI_PASSWORD
env variable)
--git-user GIT_USER Git Username
--git-email GIT_EMAIL
Git User Email
Expand Down
6 changes: 4 additions & 2 deletions docs/commands/create-preview.md
Original file line number Diff line number Diff line change
Expand Up @@ -96,8 +96,10 @@ usage: gitopscli create-preview [-h] --username USERNAME --password PASSWORD

optional arguments:
-h, --help show this help message and exit
--username USERNAME Git username
--password PASSWORD Git password or token
--username USERNAME Git username (alternative: GITOPSCLI_USERNAME env
variable)
--password PASSWORD Git password or token (alternative: GITOPSCLI_PASSWORD
env variable)
--git-user GIT_USER Git Username
--git-email GIT_EMAIL
Git User Email
Expand Down
6 changes: 4 additions & 2 deletions docs/commands/delete-pr-preview.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,10 @@ usage: gitopscli delete-pr-preview [-h] --username USERNAME --password
optional arguments:
-h, --help show this help message and exit
--username USERNAME Git username
--password PASSWORD Git password or token
--username USERNAME Git username (alternative: GITOPSCLI_USERNAME env
variable)
--password PASSWORD Git password or token (alternative: GITOPSCLI_PASSWORD
env variable)
--git-user GIT_USER Git Username
--git-email GIT_EMAIL
Git User Email
Expand Down
6 changes: 4 additions & 2 deletions docs/commands/delete-preview.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,10 @@ usage: gitopscli delete-preview [-h] --username USERNAME --password PASSWORD
optional arguments:
-h, --help show this help message and exit
--username USERNAME Git username
--password PASSWORD Git password or token
--username USERNAME Git username (alternative: GITOPSCLI_USERNAME env
variable)
--password PASSWORD Git password or token (alternative: GITOPSCLI_PASSWORD
env variable)
--git-user GIT_USER Git Username
--git-email GIT_EMAIL
Git User Email
Expand Down
6 changes: 4 additions & 2 deletions docs/commands/deploy.md
Original file line number Diff line number Diff line change
Expand Up @@ -136,8 +136,10 @@ optional arguments:
desired value as value
--single-commit [SINGLE_COMMIT]
Create only single commit for all updates
--username USERNAME Git username
--password PASSWORD Git password or token
--username USERNAME Git username (alternative: GITOPSCLI_USERNAME env
variable)
--password PASSWORD Git password or token (alternative: GITOPSCLI_PASSWORD
env variable)
--git-user GIT_USER Git Username
--git-email GIT_EMAIL
Git User Email
Expand Down
6 changes: 4 additions & 2 deletions docs/commands/sync-apps.md
Original file line number Diff line number Diff line change
Expand Up @@ -75,8 +75,10 @@ usage: gitopscli sync-apps [-h] --username USERNAME --password PASSWORD
optional arguments:
-h, --help show this help message and exit
--username USERNAME Git username
--password PASSWORD Git password or token
--username USERNAME Git username (alternative: GITOPSCLI_USERNAME env
variable)
--password PASSWORD Git password or token (alternative: GITOPSCLI_PASSWORD
env variable)
--git-user GIT_USER Git Username
--git-email GIT_EMAIL
Git User Email
Expand Down
15 changes: 13 additions & 2 deletions gitopscli/cliparser.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
from argparse import ArgumentParser, ArgumentTypeError
import os
import sys
from typing import List, Tuple, Dict, Any, NoReturn, Callable
from gitopscli.commands import (
Expand Down Expand Up @@ -179,8 +180,18 @@ def __create_version_parser() -> ArgumentParser:


def __add_git_credentials_args(deploy_p: ArgumentParser) -> None:
deploy_p.add_argument("--username", help="Git username", required=True)
deploy_p.add_argument("--password", help="Git password or token", required=True)
deploy_p.add_argument(
"--username",
help="Git username (alternative: GITOPSCLI_USERNAME env variable)",
required="GITOPSCLI_USERNAME" not in os.environ,
default=os.environ.get("GITOPSCLI_USERNAME"),
)
deploy_p.add_argument(
"--password",
help="Git password or token (alternative: GITOPSCLI_PASSWORD env variable)",
required="GITOPSCLI_PASSWORD" not in os.environ,
default=os.environ.get("GITOPSCLI_PASSWORD"),
)


def __add_git_commit_user_args(deploy_p: ArgumentParser) -> None:
Expand Down
85 changes: 71 additions & 14 deletions tests/test_cliparser.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,8 +61,10 @@
optional arguments:
-h, --help show this help message and exit
--username USERNAME Git username
--password PASSWORD Git password or token
--username USERNAME Git username (alternative: GITOPSCLI_USERNAME env
variable)
--password PASSWORD Git password or token (alternative: GITOPSCLI_PASSWORD
env variable)
--organisation ORGANISATION
Apps Git organisation/projectKey
--repository-name REPOSITORY_NAME
Expand Down Expand Up @@ -114,8 +116,10 @@
optional arguments:
-h, --help show this help message and exit
--username USERNAME Git username
--password PASSWORD Git password or token
--username USERNAME Git username (alternative: GITOPSCLI_USERNAME env
variable)
--password PASSWORD Git password or token (alternative: GITOPSCLI_PASSWORD
env variable)
--git-user GIT_USER Git Username
--git-email GIT_EMAIL
Git User Email
Expand Down Expand Up @@ -148,8 +152,10 @@
optional arguments:
-h, --help show this help message and exit
--username USERNAME Git username
--password PASSWORD Git password or token
--username USERNAME Git username (alternative: GITOPSCLI_USERNAME env
variable)
--password PASSWORD Git password or token (alternative: GITOPSCLI_PASSWORD
env variable)
--git-user GIT_USER Git Username
--git-email GIT_EMAIL
Git User Email
Expand Down Expand Up @@ -207,8 +213,10 @@
optional arguments:
-h, --help show this help message and exit
--username USERNAME Git username
--password PASSWORD Git password or token
--username USERNAME Git username (alternative: GITOPSCLI_USERNAME env
variable)
--password PASSWORD Git password or token (alternative: GITOPSCLI_PASSWORD
env variable)
--git-user GIT_USER Git Username
--git-email GIT_EMAIL
Git User Email
Expand Down Expand Up @@ -243,8 +251,10 @@
optional arguments:
-h, --help show this help message and exit
--username USERNAME Git username
--password PASSWORD Git password or token
--username USERNAME Git username (alternative: GITOPSCLI_USERNAME env
variable)
--password PASSWORD Git password or token (alternative: GITOPSCLI_PASSWORD
env variable)
--git-user GIT_USER Git Username
--git-email GIT_EMAIL
Git User Email
Expand Down Expand Up @@ -299,8 +309,10 @@
Create only single commit for all updates
--commit-message COMMIT_MESSAGE
Specify exact commit message of deployment commit
--username USERNAME Git username
--password PASSWORD Git password or token
--username USERNAME Git username (alternative: GITOPSCLI_USERNAME env
variable)
--password PASSWORD Git password or token (alternative: GITOPSCLI_PASSWORD
env variable)
--git-user GIT_USER Git Username
--git-email GIT_EMAIL
Git User Email
Expand Down Expand Up @@ -346,8 +358,10 @@
optional arguments:
-h, --help show this help message and exit
--username USERNAME Git username
--password PASSWORD Git password or token
--username USERNAME Git username (alternative: GITOPSCLI_USERNAME env
variable)
--password PASSWORD Git password or token (alternative: GITOPSCLI_PASSWORD
env variable)
--git-user GIT_USER Git Username
--git-email GIT_EMAIL
Git User Email
Expand Down Expand Up @@ -396,6 +410,17 @@ class CliParserTest(unittest.TestCase):
def setUpClass(cls):
cls.maxDiff = None

def setUp(self):
self.environ_backup = dict(os.environ)
if "GITOPSCLI_USERNAME" in os.environ:
os.environ.pop("GITOPSCLI_USERNAME")
if "GITOPSCLI_PASSWORD" in os.environ:
os.environ.pop("GITOPSCLI_PASSWORD")

def tearDown(self):
os.environ.clear()
os.environ.update(self.environ_backup)

@staticmethod
def _capture_parse_args(args):
with captured_output() as (stdout, stderr), pytest.raises(SystemExit) as ex:
Expand Down Expand Up @@ -475,6 +500,38 @@ def test_add_pr_comment_required_args(self):
self.assertIsNone(args.git_provider_url)
self.assertFalse(verbose)

def test_add_pr_comment_required_args_and_credentials_env_vars(self):
os.environ["GITOPSCLI_USERNAME"] = "ENV_USER"
os.environ["GITOPSCLI_PASSWORD"] = "ENV_PASS"
verbose, args = parse_args(
[
"add-pr-comment",
"--git-provider",
"GitHub",
"--organisation",
"ORG",
"--repository-name",
"REPO",
"--pr-id",
"4711",
"--text",
"TEXT",
]
)
self.assertType(args, AddPrCommentCommand.Args)

self.assertEqual(args.username, "ENV_USER")
self.assertEqual(args.password, "ENV_PASS")
self.assertEqual(args.git_provider, GitProvider.GITHUB)
self.assertEqual(args.organisation, "ORG")
self.assertEqual(args.repository_name, "REPO")
self.assertEqual(args.pr_id, 4711)
self.assertEqual(args.text, "TEXT")

self.assertIsNone(args.parent_id)
self.assertIsNone(args.git_provider_url)
self.assertFalse(verbose)

def test_add_pr_comment_all_args(self):
verbose, args = parse_args(
[
Expand Down

0 comments on commit 90fb672

Please sign in to comment.