diff --git a/dagfactory/__init__.py b/dagfactory/__init__.py
index 13fa2081..1b3e2f22 100644
--- a/dagfactory/__init__.py
+++ b/dagfactory/__init__.py
@@ -2,7 +2,7 @@
 
 from .dagfactory import DagFactory, load_yaml_dags
 
-__version__ = "0.22.0a1"
+__version__ = "0.22.0a2"
 __all__ = [
     "DagFactory",
     "load_yaml_dags",
diff --git a/pyproject.toml b/pyproject.toml
index fc1fde49..f02a1a3b 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -117,8 +117,8 @@ dependencies = [
 
 [tool.hatch.envs.docs.scripts]
 dev = "mkdocs build && mkdocs serve" # For local development and preventing publishing
-gh-deploy = "mike deploy --push dev"
-gh-release = "version=$(python -W ignore -c 'import dagfactory; print(dagfactory.__version__)') && mike deploy --push --update-aliases $version latest"
+gh-deploy = "python scripts/docs_deploy.py dev"
+gh-release = "python scripts/docs_deploy.py release"
 
 ######################################
 # THIRD PARTY TOOLS
diff --git a/scripts/docs_deploy.py b/scripts/docs_deploy.py
new file mode 100644
index 00000000..640cd5a6
--- /dev/null
+++ b/scripts/docs_deploy.py
@@ -0,0 +1,48 @@
+import subprocess
+import sys
+
+from packaging import version
+
+import dagfactory
+
+
+def deploy_docs(deploy_type: str):
+    _version = version.parse(dagfactory.__version__)
+
+    if deploy_type == "release":
+        if _version.pre is not None:
+            command = ["mike", "deploy", "--push", "dev"]
+            # TODO: Remove L13-L18
+            default_command = ["mike", "set-default", str(_version)]
+            try:
+                subprocess.run(default_command, capture_output=True, text=True, check=True)
+            except subprocess.CalledProcessError as e:
+                raise Exception(f"Error setting mike default: {e.stderr}")
+        else:
+            command = ["mike", "deploy", "--push", "--update-aliases", str(_version), "latest"]
+            default_command = ["mike", "set-default", str(_version)]
+
+            try:
+                subprocess.run(default_command, capture_output=True, text=True, check=True)
+            except subprocess.CalledProcessError as e:
+                raise Exception(f"Error setting mike default: {e.stderr}")
+
+    else:
+        command = ["mike", "deploy", "--push", "dev"]
+
+    try:
+        subprocess.run(command, capture_output=True, text=True, check=True)
+    except subprocess.CalledProcessError as e:
+        raise Exception(f"Error deploying: {e.stderr}")
+
+
+if __name__ == "__main__":
+    if len(sys.argv) < 2:
+        raise Exception("Argument deploy type is required: 'dev' or 'release'")
+
+    deploy_type = sys.argv[1]
+
+    if deploy_type not in ["dev", "release"]:
+        raise Exception("Invalid argument provided. Valid deploy types are 'dev' or 'release'.")
+
+    deploy_docs(deploy_type)