diff --git a/docs/commands/add-pr-comment.md b/docs/commands/add-pr-comment.md index 3530348d..6fea1fe3 100644 --- a/docs/commands/add-pr-comment.md +++ b/docs/commands/add-pr-comment.md @@ -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 diff --git a/docs/commands/create-pr-preview.md b/docs/commands/create-pr-preview.md index 4aa235c7..e23117a4 100644 --- a/docs/commands/create-pr-preview.md +++ b/docs/commands/create-pr-preview.md @@ -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 diff --git a/docs/commands/create-preview.md b/docs/commands/create-preview.md index fbb6c534..45b56f0a 100644 --- a/docs/commands/create-preview.md +++ b/docs/commands/create-preview.md @@ -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 diff --git a/docs/commands/delete-pr-preview.md b/docs/commands/delete-pr-preview.md index 6b105604..d941f3ba 100644 --- a/docs/commands/delete-pr-preview.md +++ b/docs/commands/delete-pr-preview.md @@ -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 diff --git a/docs/commands/delete-preview.md b/docs/commands/delete-preview.md index 2ecee6e5..e9b33da0 100644 --- a/docs/commands/delete-preview.md +++ b/docs/commands/delete-preview.md @@ -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 diff --git a/docs/commands/deploy.md b/docs/commands/deploy.md index 0639939f..5242bda0 100644 --- a/docs/commands/deploy.md +++ b/docs/commands/deploy.md @@ -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 diff --git a/docs/commands/sync-apps.md b/docs/commands/sync-apps.md index 8d3d7825..31c52746 100644 --- a/docs/commands/sync-apps.md +++ b/docs/commands/sync-apps.md @@ -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 diff --git a/gitopscli/cliparser.py b/gitopscli/cliparser.py index 58eb64e7..5907ad9b 100644 --- a/gitopscli/cliparser.py +++ b/gitopscli/cliparser.py @@ -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 ( @@ -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: diff --git a/tests/test_cliparser.py b/tests/test_cliparser.py index 533d5bb3..5b254ee8 100644 --- a/tests/test_cliparser.py +++ b/tests/test_cliparser.py @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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: @@ -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( [