Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions examples/ftk.full.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ commands:
build: true
info: true
analyze: true
codegen: true
test: true
unused: true
translations: true
Expand Down
1 change: 1 addition & 0 deletions examples/ftk.noflavor.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ commands:
build: true
info: true
analyze: true
codegen: false
test: true
unused: true
translations: true
Expand Down
34 changes: 32 additions & 2 deletions ftk/commands/info.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
DEFAULT_ENV_CHECKS = {
"Flutter", "Dart", "Python", "pip", "Git",
"Java", "Kotlin", "Android SDK", "Gradle", "ADB",
"Xcode", "CocoaPods", "Ruby",
"Xcode", "CocoaPods", "Swift", "Ruby",
"Node.js", "npm", "Homebrew", "Firebase CLI", "FlutterFire CLI", "Chrome", "Cordova", "Grunt",
"PHP", "Pillow", "Rust",
_ANDROID_STUDIO, "MySQL", "VS Code", "SonarScanner",
Expand Down Expand Up @@ -261,6 +261,35 @@ def _composer_version() -> str:
return _version_oneliner([bat, "--version"])
return ""

def _ruby_version() -> str:
v = _version_oneliner(["ruby", "--version"])
if v:
return v
if sys.platform == "darwin":
for path in (
"/opt/homebrew/opt/ruby/bin/ruby",
"/usr/local/opt/ruby/bin/ruby",
"/usr/bin/ruby",
):
if os.path.isfile(path):
v = _version_oneliner([path, "--version"])
if v:
return v
elif sys.platform == "win32":
sys_drive = os.environ.get("SYSTEMDRIVE", "C:") + "\\"
if os.path.isdir(sys_drive):
try:
entries = sorted(os.listdir(sys_drive), reverse=True)
except OSError:
entries = []
for entry in entries:
if entry.lower().startswith("ruby"):
exe = os.path.join(sys_drive, entry, "bin", "ruby.exe")
if os.path.isfile(exe):
v = _version_oneliner([exe, "--version"])
if v:
return v
return ""

def _get_android_sdk_root() -> str:
sdk = os.environ.get("ANDROID_HOME") or os.environ.get("ANDROID_SDK_ROOT") or ""
Expand Down Expand Up @@ -483,7 +512,8 @@ def show_environment(enabled: set[str], flutter_exe: str | None, project_root: s
("ADB", _adb_version),
("Xcode", lambda: _version_oneliner(["xcodebuild", "-version"]) if sys.platform == "darwin" else None),
("CocoaPods", lambda: _version_oneliner(["pod", "--version"]) if sys.platform == "darwin" else None),
("Ruby", lambda: _version_oneliner(["ruby", "--version"]) if sys.platform == "darwin" else None),
("Swift", lambda: _version_oneliner(["swift", "--version"]) if sys.platform == "darwin" else None),
("Ruby", _ruby_version),
("Node.js", lambda: _version_oneliner(["node", "--version"])),
("Homebrew", lambda: _version_oneliner(["brew", "--version"]) if sys.platform == "darwin" else None),
("npm", lambda: _win_cmd_fallback("npm", ["--version"])),
Expand Down
1 change: 1 addition & 0 deletions ftk/ftk.default.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ commands:
build: true
info: true
analyze: true
codegen: false
test: true
unused: true
translations: true
Expand Down
31 changes: 29 additions & 2 deletions ftk/server/commands_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,33 @@ def _flavor_group(cfg: ProjectConfig, hint: str = _HINT_DEFAULT_FLAVOR) -> dict
return {"label": "Flavor", "type": "checkboxes", "hint": hint,
"options": _flavor_options(cfg)}

def _deploy_flavor_options(cfg: ProjectConfig) -> list[dict]:
out = []
for f in cfg.flavors:
has_target = cfg.deploy_target(f.name) is not None
out.append({
"flag": f"-f {f.name}", "label": f.name, "disabled": not has_target,
"tip": (f"Deploy the {f.display_name or f.name} flavor." if has_target
else "No deploy target configured for this flavor in ftk.yaml."),
})
return out


def _deploy_flavor_group(cfg: ProjectConfig) -> dict | None:
if not cfg.has_flavors:
return None
return {"label": "Flavor", "type": "checkboxes", "hint": _HINT_DEFAULT_FLAVOR,
"options": _deploy_flavor_options(cfg)}


def _deploy_flavor_presets(cfg: ProjectConfig, base_flags: list[str]) -> list[dict]:
if not cfg.has_flavors:
return []
out = [{"label": f.name, "flags": [f"-f {f.name}", *base_flags],
"disabled": cfg.deploy_target(f.name) is None}
for f in cfg.flavors]
out.append({"label": "All", "flags": base_flags, "default": True, "disabled": False})
return out

def _flavor_presets(cfg: ProjectConfig, base_flags: list[str]) -> list[dict]:
if not cfg.has_flavors:
Expand Down Expand Up @@ -436,7 +463,7 @@ def _deploy(cfg: ProjectConfig) -> dict:
missing_builds.append(fname or "default")

groups = []
fg = _flavor_group(cfg)
fg = _deploy_flavor_group(cfg)
if fg:
groups.append(fg)

Expand Down Expand Up @@ -468,7 +495,7 @@ def _deploy(cfg: ProjectConfig) -> dict:
"description": "Upload web build to remote server.",
"script": "deploy", "inject_flags": [],
"groups": groups,
"presets": _flavor_presets(cfg, ["--yes"]) + [
"presets": _deploy_flavor_presets(cfg, ["--yes"]) + [
{"label": "List targets", "flags": ["--list-targets"]},
],
"disabled": not cfg.command_enabled("deploy"),
Expand Down
Loading