From 5820cd1de48f1958c4c9915023366096b4e36148 Mon Sep 17 00:00:00 2001 From: Ameya Deshmukh Date: Tue, 11 Nov 2025 01:09:49 +0530 Subject: [PATCH 1/5] format with uv --- yocto/cloud/base_parser.py | 3 +-- yocto/cloud/cloud_parser.py | 3 +-- yocto/cloud/gcp/api.py | 3 +-- yocto/deployment/validators.py | 4 +--- yocto/utils/artifact.py | 4 +--- 5 files changed, 5 insertions(+), 12 deletions(-) diff --git a/yocto/cloud/base_parser.py b/yocto/cloud/base_parser.py index c930fc8b..183c052c 100644 --- a/yocto/cloud/base_parser.py +++ b/yocto/cloud/base_parser.py @@ -125,8 +125,7 @@ def create_base_parser(description: str) -> argparse.ArgumentParser: type=str, default=AZURE_DOMAIN_RG, help=( - "Domain resource group for Azure DNS " - f"(default: {AZURE_DOMAIN_RG})" + f"Domain resource group for Azure DNS (default: {AZURE_DOMAIN_RG})" ), ) parser.add_argument( diff --git a/yocto/cloud/cloud_parser.py b/yocto/cloud/cloud_parser.py index 800e168c..a9dd9078 100644 --- a/yocto/cloud/cloud_parser.py +++ b/yocto/cloud/cloud_parser.py @@ -96,8 +96,7 @@ def create_cloud_parser(description: str) -> argparse.ArgumentParser: type=str, default=DEFAULT_DOMAIN_RESOURCE_GROUP, help=( - "Domain resource group " - f"(default: {DEFAULT_DOMAIN_RESOURCE_GROUP})" + f"Domain resource group (default: {DEFAULT_DOMAIN_RESOURCE_GROUP})" ), ) parser.add_argument( diff --git a/yocto/cloud/gcp/api.py b/yocto/cloud/gcp/api.py index 049e741a..422b5a1f 100644 --- a/yocto/cloud/gcp/api.py +++ b/yocto/cloud/gcp/api.py @@ -997,8 +997,7 @@ def create_vm( logger.info(f"Using reserved IP: {reserved_ip}") else: logger.warning( - f"Reserved IP {ip_name} not found, " - "using ephemeral IP" + f"Reserved IP {ip_name} not found, using ephemeral IP" ) network_interface.access_configs = [access_config] diff --git a/yocto/deployment/validators.py b/yocto/deployment/validators.py index f2e3e78c..88ba0e84 100644 --- a/yocto/deployment/validators.py +++ b/yocto/deployment/validators.py @@ -20,9 +20,7 @@ def _genesis_vm_name(node: int, cloud: CloudProvider) -> str: def _genesis_client(node: int, cloud: CloudProvider) -> SummitClient: """Create a genesis client for the given node and cloud provider.""" prefix = get_domain_record_prefix(cloud) - return SummitClient( - f"https://{prefix}-{node}.seismictest.net/summit" - ) + return SummitClient(f"https://{prefix}-{node}.seismictest.net/summit") def _parse_args() -> argparse.Namespace: diff --git a/yocto/utils/artifact.py b/yocto/utils/artifact.py index bd6cfbc7..7744092b 100644 --- a/yocto/utils/artifact.py +++ b/yocto/utils/artifact.py @@ -21,9 +21,7 @@ def _extract_timestamp(artifact: str): match = re.search(pattern, artifact) if not match: example = "cvm-image-azure-tdx.rootfs-20241202202935.wic.vhd" - msg = ( - f"Invalid artifact name: {artifact}. " f'Should be like "{example}"' - ) + msg = f'Invalid artifact name: {artifact}. Should be like "{example}"' raise ValueError(msg) return match.group(1) From 7ef555012ea9cb7d606117fa3e059ba06c2df836 Mon Sep 17 00:00:00 2001 From: Ameya Deshmukh Date: Tue, 11 Nov 2025 01:16:26 +0530 Subject: [PATCH 2/5] basic ci --- .github/workflows/ci.yml | 36 ++++++++++++++++++++++++++++++++++++ yocto/cloud/azure/api.py | 2 +- 2 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/ci.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..bc1b41b0 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,36 @@ +name: CI + +on: + push: + branches: [main] + pull_request: + branches: [main] + +jobs: + lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Install uv + uses: astral-sh/setup-uv@v4 + + - name: Set up Python + run: uv python install 3.13 + + - name: Run ruff lint check + run: uv run ruff check . + + typecheck: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Install uv + uses: astral-sh/setup-uv@v4 + + - name: Set up Python + run: uv python install 3.13 + + - name: Run pyright + run: uv run pyright diff --git a/yocto/cloud/azure/api.py b/yocto/cloud/azure/api.py index 7b934b9a..21bc4488 100644 --- a/yocto/cloud/azure/api.py +++ b/yocto/cloud/azure/api.py @@ -18,7 +18,7 @@ from yocto.cloud.cloud_api import CloudApi from yocto.cloud.cloud_config import CloudProvider from yocto.cloud.cloud_parser import confirm -from yocto.config import DeployConfigs, VmConfigs +from yocto.config import DeployConfigs logger = logging.getLogger(__name__) From f2ce13e6b13be3a71f5c0c91b1b0390fa2b5dd92 Mon Sep 17 00:00:00 2001 From: Ameya Deshmukh Date: Tue, 11 Nov 2025 01:21:15 +0530 Subject: [PATCH 3/5] nice --- yocto/deployment/deploy.py | 4 +--- yocto/genesis_deploy.py | 5 ++++- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/yocto/deployment/deploy.py b/yocto/deployment/deploy.py index 08a20660..eccc6ef9 100644 --- a/yocto/deployment/deploy.py +++ b/yocto/deployment/deploy.py @@ -26,11 +26,9 @@ def delete_vm(vm_name: str, home: str) -> bool: # Search for VM in all clouds meta = None - cloud_str = None - for cloud_key, cloud_resources in resources.items(): + for _cloud_key, cloud_resources in resources.items(): if vm_name in cloud_resources: meta = cloud_resources[vm_name] - cloud_str = cloud_key break if not meta: diff --git a/yocto/genesis_deploy.py b/yocto/genesis_deploy.py index 7812d529..741fc0dc 100755 --- a/yocto/genesis_deploy.py +++ b/yocto/genesis_deploy.py @@ -133,7 +133,10 @@ def parse_genesis_args(): parser.add_argument( "--name", type=str, - help="Manual VM name override (default: cloud-specific prefix + node number)", + help=( + "Manual VM name override " + "(default: cloud-specific prefix + node number)" + ), ) return parser.parse_args() From 50829fbbc59756b5b15d5b126862eef9874a5ba3 Mon Sep 17 00:00:00 2001 From: Ameya Deshmukh Date: Tue, 11 Nov 2025 01:31:15 +0530 Subject: [PATCH 4/5] update pyright --- pyproject.toml | 12 +++++++++++- uv.lock | 8 ++++---- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 74a57220..b298a210 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -13,7 +13,7 @@ dependencies = [ "packaging>=25.0", "pathspec>=0.12.1", "platformdirs>=4.5.0", - "pyright>=1.1.406", + "pyright>=1.1.407", "requests>=2.32.5", "urllib3>=2.5.0", "google-cloud-compute>=1.22.0", @@ -21,6 +21,16 @@ dependencies = [ "google-cloud-resource-manager>=1.12.0", ] +[tool.pyright] +pythonVersion = "3.13" +typeCheckingMode = "basic" + +exclude = [ + "**/__pycache__", + "**/.venv", + ".venv", +] + [tool.ruff] line-length = 88 target-version = "py313" diff --git a/uv.lock b/uv.lock index 74ae8b28..6c764aa6 100644 --- a/uv.lock +++ b/uv.lock @@ -121,7 +121,7 @@ requires-dist = [ { name = "packaging", specifier = ">=25.0" }, { name = "pathspec", specifier = ">=0.12.1" }, { name = "platformdirs", specifier = ">=4.5.0" }, - { name = "pyright", specifier = ">=1.1.406" }, + { name = "pyright", specifier = ">=1.1.407" }, { name = "requests", specifier = ">=2.32.5" }, { name = "ruff", specifier = ">=0.8.0" }, { name = "urllib3", specifier = ">=2.5.0" }, @@ -433,15 +433,15 @@ wheels = [ [[package]] name = "pyright" -version = "1.1.406" +version = "1.1.407" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "nodeenv" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/f7/16/6b4fbdd1fef59a0292cbb99f790b44983e390321eccbc5921b4d161da5d1/pyright-1.1.406.tar.gz", hash = "sha256:c4872bc58c9643dac09e8a2e74d472c62036910b3bd37a32813989ef7576ea2c", size = 4113151, upload-time = "2025-10-02T01:04:45.488Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a6/1b/0aa08ee42948b61745ac5b5b5ccaec4669e8884b53d31c8ec20b2fcd6b6f/pyright-1.1.407.tar.gz", hash = "sha256:099674dba5c10489832d4a4b2d302636152a9a42d317986c38474c76fe562262", size = 4122872, upload-time = "2025-10-24T23:17:15.145Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f6/a2/e309afbb459f50507103793aaef85ca4348b66814c86bc73908bdeb66d12/pyright-1.1.406-py3-none-any.whl", hash = "sha256:1d81fb43c2407bf566e97e57abb01c811973fdb21b2df8df59f870f688bdca71", size = 5980982, upload-time = "2025-10-02T01:04:43.137Z" }, + { url = "https://files.pythonhosted.org/packages/dc/93/b69052907d032b00c40cb656d21438ec00b3a471733de137a3f65a49a0a0/pyright-1.1.407-py3-none-any.whl", hash = "sha256:6dd419f54fcc13f03b52285796d65e639786373f433e243f8b94cf93a7444d21", size = 5997008, upload-time = "2025-10-24T23:17:13.159Z" }, ] [[package]] From 16a1f715d74457e2415a9181e9cf67f560ceaea3 Mon Sep 17 00:00:00 2001 From: Ameya Deshmukh Date: Tue, 11 Nov 2025 02:25:48 +0530 Subject: [PATCH 5/5] .py files same as main, for clean diff for pr#2 --- yocto/cloud/azure/api.py | 2 +- yocto/cloud/base_parser.py | 3 ++- yocto/cloud/cloud_parser.py | 3 ++- yocto/cloud/gcp/api.py | 3 ++- yocto/deployment/deploy.py | 4 +++- yocto/deployment/validators.py | 4 +++- yocto/genesis_deploy.py | 5 +---- yocto/utils/artifact.py | 4 +++- 8 files changed, 17 insertions(+), 11 deletions(-) diff --git a/yocto/cloud/azure/api.py b/yocto/cloud/azure/api.py index 21bc4488..7b934b9a 100644 --- a/yocto/cloud/azure/api.py +++ b/yocto/cloud/azure/api.py @@ -18,7 +18,7 @@ from yocto.cloud.cloud_api import CloudApi from yocto.cloud.cloud_config import CloudProvider from yocto.cloud.cloud_parser import confirm -from yocto.config import DeployConfigs +from yocto.config import DeployConfigs, VmConfigs logger = logging.getLogger(__name__) diff --git a/yocto/cloud/base_parser.py b/yocto/cloud/base_parser.py index 183c052c..c930fc8b 100644 --- a/yocto/cloud/base_parser.py +++ b/yocto/cloud/base_parser.py @@ -125,7 +125,8 @@ def create_base_parser(description: str) -> argparse.ArgumentParser: type=str, default=AZURE_DOMAIN_RG, help=( - f"Domain resource group for Azure DNS (default: {AZURE_DOMAIN_RG})" + "Domain resource group for Azure DNS " + f"(default: {AZURE_DOMAIN_RG})" ), ) parser.add_argument( diff --git a/yocto/cloud/cloud_parser.py b/yocto/cloud/cloud_parser.py index a9dd9078..800e168c 100644 --- a/yocto/cloud/cloud_parser.py +++ b/yocto/cloud/cloud_parser.py @@ -96,7 +96,8 @@ def create_cloud_parser(description: str) -> argparse.ArgumentParser: type=str, default=DEFAULT_DOMAIN_RESOURCE_GROUP, help=( - f"Domain resource group (default: {DEFAULT_DOMAIN_RESOURCE_GROUP})" + "Domain resource group " + f"(default: {DEFAULT_DOMAIN_RESOURCE_GROUP})" ), ) parser.add_argument( diff --git a/yocto/cloud/gcp/api.py b/yocto/cloud/gcp/api.py index 422b5a1f..049e741a 100644 --- a/yocto/cloud/gcp/api.py +++ b/yocto/cloud/gcp/api.py @@ -997,7 +997,8 @@ def create_vm( logger.info(f"Using reserved IP: {reserved_ip}") else: logger.warning( - f"Reserved IP {ip_name} not found, using ephemeral IP" + f"Reserved IP {ip_name} not found, " + "using ephemeral IP" ) network_interface.access_configs = [access_config] diff --git a/yocto/deployment/deploy.py b/yocto/deployment/deploy.py index eccc6ef9..08a20660 100644 --- a/yocto/deployment/deploy.py +++ b/yocto/deployment/deploy.py @@ -26,9 +26,11 @@ def delete_vm(vm_name: str, home: str) -> bool: # Search for VM in all clouds meta = None - for _cloud_key, cloud_resources in resources.items(): + cloud_str = None + for cloud_key, cloud_resources in resources.items(): if vm_name in cloud_resources: meta = cloud_resources[vm_name] + cloud_str = cloud_key break if not meta: diff --git a/yocto/deployment/validators.py b/yocto/deployment/validators.py index 88ba0e84..f2e3e78c 100644 --- a/yocto/deployment/validators.py +++ b/yocto/deployment/validators.py @@ -20,7 +20,9 @@ def _genesis_vm_name(node: int, cloud: CloudProvider) -> str: def _genesis_client(node: int, cloud: CloudProvider) -> SummitClient: """Create a genesis client for the given node and cloud provider.""" prefix = get_domain_record_prefix(cloud) - return SummitClient(f"https://{prefix}-{node}.seismictest.net/summit") + return SummitClient( + f"https://{prefix}-{node}.seismictest.net/summit" + ) def _parse_args() -> argparse.Namespace: diff --git a/yocto/genesis_deploy.py b/yocto/genesis_deploy.py index 741fc0dc..7812d529 100755 --- a/yocto/genesis_deploy.py +++ b/yocto/genesis_deploy.py @@ -133,10 +133,7 @@ def parse_genesis_args(): parser.add_argument( "--name", type=str, - help=( - "Manual VM name override " - "(default: cloud-specific prefix + node number)" - ), + help="Manual VM name override (default: cloud-specific prefix + node number)", ) return parser.parse_args() diff --git a/yocto/utils/artifact.py b/yocto/utils/artifact.py index 7744092b..bd6cfbc7 100644 --- a/yocto/utils/artifact.py +++ b/yocto/utils/artifact.py @@ -21,7 +21,9 @@ def _extract_timestamp(artifact: str): match = re.search(pattern, artifact) if not match: example = "cvm-image-azure-tdx.rootfs-20241202202935.wic.vhd" - msg = f'Invalid artifact name: {artifact}. Should be like "{example}"' + msg = ( + f"Invalid artifact name: {artifact}. " f'Should be like "{example}"' + ) raise ValueError(msg) return match.group(1)