steve-cli 0.2.0__tar.gz → 0.3.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {steve_cli-0.2.0 → steve_cli-0.3.1}/PKG-INFO +8 -1
- {steve_cli-0.2.0 → steve_cli-0.3.1}/README.md +6 -0
- {steve_cli-0.2.0 → steve_cli-0.3.1}/pyproject.toml +6 -1
- {steve_cli-0.2.0 → steve_cli-0.3.1}/steve_cli/cli.py +25 -5
- {steve_cli-0.2.0 → steve_cli-0.3.1}/steve_cli/storage.py +27 -19
- {steve_cli-0.2.0 → steve_cli-0.3.1}/steve_cli.egg-info/PKG-INFO +8 -1
- {steve_cli-0.2.0 → steve_cli-0.3.1}/steve_cli.egg-info/requires.txt +1 -0
- {steve_cli-0.2.0 → steve_cli-0.3.1}/setup.cfg +0 -0
- {steve_cli-0.2.0 → steve_cli-0.3.1}/steve_cli/__init__.py +0 -0
- {steve_cli-0.2.0 → steve_cli-0.3.1}/steve_cli.egg-info/SOURCES.txt +0 -0
- {steve_cli-0.2.0 → steve_cli-0.3.1}/steve_cli.egg-info/dependency_links.txt +0 -0
- {steve_cli-0.2.0 → steve_cli-0.3.1}/steve_cli.egg-info/entry_points.txt +0 -0
- {steve_cli-0.2.0 → steve_cli-0.3.1}/steve_cli.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: steve-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.3.1
|
|
4
4
|
Summary: A simple CLI tool to run jobs from jobs.yaml with proper environment setup
|
|
5
5
|
Author: Frank
|
|
6
6
|
License: MIT
|
|
@@ -20,6 +20,7 @@ Description-Content-Type: text/markdown
|
|
|
20
20
|
Requires-Dist: boto3>=1.37.38
|
|
21
21
|
Requires-Dist: click>=8.0.0
|
|
22
22
|
Requires-Dist: pyyaml>=6.0
|
|
23
|
+
Requires-Dist: questionary>=2.0.0
|
|
23
24
|
Provides-Extra: dev
|
|
24
25
|
Requires-Dist: pytest>=7.0; extra == "dev"
|
|
25
26
|
Requires-Dist: black>=22.0; extra == "dev"
|
|
@@ -157,6 +158,12 @@ black steve_cli/
|
|
|
157
158
|
isort steve_cli/
|
|
158
159
|
```
|
|
159
160
|
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
# use cli
|
|
164
|
+
source .venv/bin/activate
|
|
165
|
+
steve
|
|
166
|
+
|
|
160
167
|
#
|
|
161
168
|
|
|
162
169
|
uv build
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
|
|
2
|
+
[build-system]
|
|
3
|
+
requires = ["setuptools>=61.0", "wheel"]
|
|
4
|
+
build-backend = "setuptools.build_meta"
|
|
5
|
+
|
|
2
6
|
[project]
|
|
3
7
|
name = "steve-cli"
|
|
4
|
-
version = "0.
|
|
8
|
+
version = "0.3.1"
|
|
5
9
|
description = "A simple CLI tool to run jobs from jobs.yaml with proper environment setup"
|
|
6
10
|
readme = "README.md"
|
|
7
11
|
license = {text = "MIT"}
|
|
@@ -22,6 +26,7 @@ dependencies = [
|
|
|
22
26
|
"boto3>=1.37.38",
|
|
23
27
|
"click>=8.0.0",
|
|
24
28
|
"pyyaml>=6.0",
|
|
29
|
+
"questionary>=2.0.0",
|
|
25
30
|
]
|
|
26
31
|
|
|
27
32
|
[project.optional-dependencies]
|
|
@@ -15,6 +15,7 @@ from pathlib import Path
|
|
|
15
15
|
from typing import Dict, List, Any, Optional
|
|
16
16
|
|
|
17
17
|
import click
|
|
18
|
+
import questionary
|
|
18
19
|
import yaml
|
|
19
20
|
|
|
20
21
|
|
|
@@ -96,10 +97,29 @@ def main():
|
|
|
96
97
|
pass
|
|
97
98
|
|
|
98
99
|
|
|
99
|
-
@main.group()
|
|
100
|
-
|
|
100
|
+
@main.group(invoke_without_command=True)
|
|
101
|
+
@click.option('--jobs-file', '-f', type=click.Path(exists=True, path_type=Path),
|
|
102
|
+
help='Path to jobs.yaml file (default: ./jobs.yaml)')
|
|
103
|
+
@click.pass_context
|
|
104
|
+
def jobs(ctx: click.Context, jobs_file: Optional[Path]):
|
|
101
105
|
"""Manage and run jobs from jobs.yaml."""
|
|
102
|
-
|
|
106
|
+
if ctx.invoked_subcommand is not None:
|
|
107
|
+
return
|
|
108
|
+
config = JobsConfig(jobs_file)
|
|
109
|
+
job_names = config.list_jobs()
|
|
110
|
+
if not job_names:
|
|
111
|
+
click.echo("❌ No jobs found in jobs.yaml")
|
|
112
|
+
return
|
|
113
|
+
click.echo(ctx.get_help())
|
|
114
|
+
click.echo()
|
|
115
|
+
choice = questionary.select(
|
|
116
|
+
"Select a job to run:",
|
|
117
|
+
choices=job_names,
|
|
118
|
+
).ask()
|
|
119
|
+
if choice is None:
|
|
120
|
+
sys.exit(0)
|
|
121
|
+
job = config.get_job(choice)
|
|
122
|
+
sys.exit(run_job_command(job))
|
|
103
123
|
|
|
104
124
|
|
|
105
125
|
@jobs.command('ls')
|
|
@@ -164,8 +184,8 @@ def setup():
|
|
|
164
184
|
pass
|
|
165
185
|
|
|
166
186
|
|
|
167
|
-
@setup.command("
|
|
168
|
-
def
|
|
187
|
+
@setup.command("env")
|
|
188
|
+
def setup_env():
|
|
169
189
|
"""Decrypt SOPS-encoded .env files in current directory and write plaintext .env files."""
|
|
170
190
|
cwd = Path.cwd()
|
|
171
191
|
found: List[Path] = []
|
|
@@ -16,24 +16,34 @@ class Storage(Protocol):
|
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
class S3Storage:
|
|
19
|
-
def __init__(self, tier: str = "bronze"):
|
|
19
|
+
def __init__(self, tier: str = "bronze", workspace: str | None = None):
|
|
20
20
|
self.tier = tier.lower()
|
|
21
21
|
|
|
22
|
-
if
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
self.bucket = os.getenv("SILVER_BUCKET")
|
|
31
|
-
required_vars = ["SILVER_ACCESS_KEY", "SILVER_SECRET_KEY", "SILVER_BUCKET"]
|
|
22
|
+
if workspace is not None:
|
|
23
|
+
prefix = workspace.upper().replace("-", "_")
|
|
24
|
+
tier_suffix = f"BUCKET_{tier.upper()}"
|
|
25
|
+
access_key = os.getenv(f"{prefix}_ACCESS_KEY")
|
|
26
|
+
secret_key = os.getenv(f"{prefix}_SECRET_KEY")
|
|
27
|
+
self.bucket = os.getenv(f"{prefix}_{tier_suffix}")
|
|
28
|
+
required_vars = [f"{prefix}_ACCESS_KEY", f"{prefix}_SECRET_KEY", f"{prefix}_{tier_suffix}"]
|
|
29
|
+
endpoint = os.getenv(f"{prefix}_S3_ENDPOINT", os.getenv("S3_ENDPOINT", "http://localhost:9000"))
|
|
32
30
|
else:
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
31
|
+
if self.tier == "bronze":
|
|
32
|
+
access_key = os.getenv("BRONZE_ACCESS_KEY")
|
|
33
|
+
secret_key = os.getenv("BRONZE_SECRET_KEY")
|
|
34
|
+
self.bucket = os.getenv("BRONZE_BUCKET")
|
|
35
|
+
required_vars = ["BRONZE_ACCESS_KEY", "BRONZE_SECRET_KEY", "BRONZE_BUCKET"]
|
|
36
|
+
elif self.tier == "silver":
|
|
37
|
+
access_key = os.getenv("SILVER_ACCESS_KEY")
|
|
38
|
+
secret_key = os.getenv("SILVER_SECRET_KEY")
|
|
39
|
+
self.bucket = os.getenv("SILVER_BUCKET")
|
|
40
|
+
required_vars = ["SILVER_ACCESS_KEY", "SILVER_SECRET_KEY", "SILVER_BUCKET"]
|
|
41
|
+
else:
|
|
42
|
+
access_key = os.getenv("GOLD_ACCESS_KEY")
|
|
43
|
+
secret_key = os.getenv("GOLD_SECRET_KEY")
|
|
44
|
+
self.bucket = os.getenv("GOLD_BUCKET")
|
|
45
|
+
required_vars = ["GOLD_ACCESS_KEY", "GOLD_SECRET_KEY", "GOLD_BUCKET"]
|
|
46
|
+
endpoint = os.getenv("S3_ENDPOINT", "http://localhost:9000")
|
|
37
47
|
|
|
38
48
|
missing_vars = [var for var in required_vars if not os.getenv(var)]
|
|
39
49
|
if missing_vars:
|
|
@@ -41,8 +51,6 @@ class S3Storage:
|
|
|
41
51
|
f"Missing required environment variables for {self.tier} tier: {', '.join(missing_vars)}"
|
|
42
52
|
)
|
|
43
53
|
|
|
44
|
-
endpoint = os.getenv("S3_ENDPOINT", "http://localhost:9000")
|
|
45
|
-
|
|
46
54
|
self.client = boto3.client(
|
|
47
55
|
"s3",
|
|
48
56
|
endpoint_url=endpoint,
|
|
@@ -154,5 +162,5 @@ class S3Storage:
|
|
|
154
162
|
]
|
|
155
163
|
|
|
156
164
|
|
|
157
|
-
def get_storage(tier: str = "bronze") -> Storage:
|
|
158
|
-
return S3Storage(tier=tier)
|
|
165
|
+
def get_storage(tier: str = "bronze", workspace: str | None = None) -> Storage:
|
|
166
|
+
return S3Storage(tier=tier, workspace=workspace)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: steve-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.3.1
|
|
4
4
|
Summary: A simple CLI tool to run jobs from jobs.yaml with proper environment setup
|
|
5
5
|
Author: Frank
|
|
6
6
|
License: MIT
|
|
@@ -20,6 +20,7 @@ Description-Content-Type: text/markdown
|
|
|
20
20
|
Requires-Dist: boto3>=1.37.38
|
|
21
21
|
Requires-Dist: click>=8.0.0
|
|
22
22
|
Requires-Dist: pyyaml>=6.0
|
|
23
|
+
Requires-Dist: questionary>=2.0.0
|
|
23
24
|
Provides-Extra: dev
|
|
24
25
|
Requires-Dist: pytest>=7.0; extra == "dev"
|
|
25
26
|
Requires-Dist: black>=22.0; extra == "dev"
|
|
@@ -157,6 +158,12 @@ black steve_cli/
|
|
|
157
158
|
isort steve_cli/
|
|
158
159
|
```
|
|
159
160
|
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
# use cli
|
|
164
|
+
source .venv/bin/activate
|
|
165
|
+
steve
|
|
166
|
+
|
|
160
167
|
#
|
|
161
168
|
|
|
162
169
|
uv build
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|