From 848af625f3545f034d15cdb286714d4375104af8 Mon Sep 17 00:00:00 2001 From: James B Date: Fri, 17 Mar 2023 12:39:33 +0000 Subject: [PATCH] Dokku app names are cleaned up https://github.com/OpenDataServices/dokkusd-client/issues/3 https://github.com/OpenDataServices/dokkusd-client/issues/5 --- CHANGELOG.md | 1 + docs/reference/dokku-app-names.rst | 14 ++++++++++++++ docs/reference/index.rst | 3 ++- dokkusd/util.py | 11 ++++++++++- test/test_clean_dokku_app_name.py | 29 +++++++++++++++++++++++++++++ 5 files changed, 56 insertions(+), 2 deletions(-) create mode 100644 docs/reference/dokku-app-names.rst create mode 100644 test/test_clean_dokku_app_name.py diff --git a/CHANGELOG.md b/CHANGELOG.md index 211fe14..b99a198 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - nginx / client_max_body_size option - set by command line option or environmental variable. - nginx / proxy-read-timeout option - set by command line option or environmental variable. +- Dokku app names are cleaned up. Invalid characters are changed to "-". Lower case is enforced. ## Changed diff --git a/docs/reference/dokku-app-names.rst b/docs/reference/dokku-app-names.rst new file mode 100644 index 0000000..b0b1391 --- /dev/null +++ b/docs/reference/dokku-app-names.rst @@ -0,0 +1,14 @@ +Dokku App Names +=============== + +Any app names that are not allowed in Dokku will be cleaned up automatically. + +Names will be made lower case. + +Characters that are not allowed will be changed to a dash (`-`). This includes: + +* slashes +* underscores +* colons +* spaces + diff --git a/docs/reference/index.rst b/docs/reference/index.rst index e319e96..7357610 100644 --- a/docs/reference/index.rst +++ b/docs/reference/index.rst @@ -6,4 +6,5 @@ Reference deploy-command.rst destroy-command.rst - app-resources.rst \ No newline at end of file + app-resources.rst + dokku-app-names.rst diff --git a/dokkusd/util.py b/dokkusd/util.py index ef8625d..40860f6 100644 --- a/dokkusd/util.py +++ b/dokkusd/util.py @@ -18,6 +18,15 @@ def get_remote_names_configured(git_remote_verbose_output): return out +def clean_dokku_app_name(app_name: str) -> str: + app_name = app_name.replace(" ", "-") + app_name = app_name.replace("_", "-") + app_name = app_name.replace(":", "-") + app_name = app_name.replace("/", "-") + app_name = app_name.replace("\\", "-") + return app_name.lower() + + class Task: def __init__( self, @@ -31,7 +40,7 @@ def __init__( self.remote_user = remote_user self.remote_host = remote_host self.remote_port = remote_port - self.app_name = app_name + self.app_name = clean_dokku_app_name(app_name) def _dokku_command(self, command): full_command = [ diff --git a/test/test_clean_dokku_app_name.py b/test/test_clean_dokku_app_name.py new file mode 100644 index 0000000..2b0e571 --- /dev/null +++ b/test/test_clean_dokku_app_name.py @@ -0,0 +1,29 @@ +from dokkusd.util import clean_dokku_app_name + + +def test_fine_1(): + assert "cat" == clean_dokku_app_name("cat") + + +def test_bad_1(): + assert "cat-" == clean_dokku_app_name("cat_") + + +def test_bad_2(): + assert "cat-" == clean_dokku_app_name("cat:") + + +def test_bad_3(): + assert "cat-" == clean_dokku_app_name("cat/") + + +def test_bad_4(): + assert "cat-" == clean_dokku_app_name("cat\\") + + +def test_bad_5(): + assert "cat" == clean_dokku_app_name("CAT") + + +def test_bad_6(): + assert "cat-" == clean_dokku_app_name("cat ")