diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc index aec16a1de..51e5b56d7 100644 --- a/CHANGELOG.adoc +++ b/CHANGELOG.adoc @@ -29,6 +29,7 @@ Release with new features and bugfixes: * https://github.com/devonfw/IDEasy/issues/1456[#1456]: Uninstall via Windows settings not working * https://github.com/devonfw/IDEasy/issues/1688[#1688]: Remove unnecessary message in the CLI when installing a new tool * https://github.com/devonfw/IDEasy/issues/1685[#1685]: Add Nest CLI to IDEasy commandlets +* https://github.com/devonfw/IDEasy/issues/1748[#1748]: Improve IDEasy status documentation * https://github.com/devonfw/IDEasy/issues/1882[#1882]: Add AWS CDK to IDEasy commandlets * https://github.com/devonfw/IDEasy/issues/800[#800]: Fix infinite recursion in Sonar start/stop on macOS * https://github.com/devonfw/IDEasy/issues/1886[#1886]: Fix NpmBasedCommandlet shows wrong tool version after install diff --git a/README.adoc b/README.adoc index bb8957585..5d35a3203 100644 --- a/README.adoc +++ b/README.adoc @@ -31,9 +31,9 @@ See link:documentation/features.adoc[features]. == Status -Currently we focused on support for Windows while official Linux and Mac support are still a little bit work in progress (see e.g. bug https://github.com/devonfw/IDEasy/issues/451[#451]). -Further, we still recommend that you should contact us if you plan to use IDEasy in your project with a larger developer team. -We surely try to fix bugs as soon as possible but we do not work extra shifts or prioritize your issues if you are blocked and we never promised any help before. +IDEasy is stable and ready for production usage. +However, there may be some know issues. +For a detailed overview of the quality and support status of IDEasy tools across operating systems, see link:../quality-status.adoc[Quality Status]. == Setup diff --git a/documentation/generate_quality_status.py b/documentation/generate_quality_status.py new file mode 100644 index 000000000..0aac7dbeb --- /dev/null +++ b/documentation/generate_quality_status.py @@ -0,0 +1,882 @@ +#!/usr/bin/env python3 +"""Generates quality-status.adoc for the devonfw/IDEasy GitHub repository. + +The script fetches open issues via the GitHub REST API and maps them to known +tools and commandlets by matching issue labels against the registries defined +in this module. The output document follows standard QA reporting structure: + +1. Overview — metadata, severity legend, issue statistics +2. Bugs & Blockers — deduplicated table of all bugs/blockers with OS columns +3. Commandlets — one cross-OS table grouped by functional category +4. Windows Tools — per-OS tool status table +5. Linux Tools — per-OS tool status table +6. macOS Tools — per-OS tool status table +7. Unassigned — issues that matched no known label +8. How to Contribute + +OS label behaviour: + Issues labelled with a specific OS (windows / linux / macOS) appear only + in that OS section. Issues without any OS label are treated as + cross-platform and appear in every OS section. + +Severity model: + Blocker — labelled "blocker"; fully prevents users from working + Bug — GitHub issue type "Bug", legacy "bug" label, or "blocker" + Enhancement — everything else (feature request, improvement, task) + +Usage:: + + python generate_quality_status.py [--token TOKEN] [--output PATH] + export GITHUB_TOKEN=ghp_... && python generate_quality_status.py +""" + +import argparse +import json +import logging +import os +import sys +import urllib.error +import urllib.parse +import urllib.request +from collections import defaultdict +from datetime import datetime, timezone +from typing import Any, NamedTuple + +log = logging.getLogger(__name__) + +# --- Repository configuration --- + +REPO = "devonfw/IDEasy" +API_BASE = "https://api.github.com" +TOOL_FOLDER_PATH = "cli/src/main/java/com/devonfw/tools/ide/tool" + +GITHUB_ACCEPT_HEADER = "application/vnd.github+json" +GITHUB_API_VERSION = "2022-11-28" +GITHUB_PAGE_SIZE = 100 + +OS_LABELS = {"windows": "windows", "linux": "linux", "mac": "macOS"} +OS_ORDER = ["windows", "linux", "mac"] +OS_DISPLAY = {"windows": "Windows", "linux": "Linux", "mac": "macOS"} +OS_SHORT = {"windows": "Win", "linux": "Linux", "mac": "macOS"} + +BUG_TYPE_NAMES = {"Bug", "bug"} +BLOCKER_LABEL = "blocker" + +# Number of columns in the status tables, used for AsciiDoc column spanning. +TABLE_COLSPAN = 3 + +# --- Tool registry --- +# Each key is the canonical tool folder name under TOOL_FOLDER_PATH, which is +# also the default GitHub label. "display" is the human-readable table name. +# "labels" lists any additional GitHub label names that map to this entry. + +TOOLS: dict[str, dict] = { + # IDEs & Editors + "androidstudio": {"display": "Android Studio", "labels": ["android-studio"]}, + "eclipse": {"display": "Eclipse"}, + "intellij": {"display": "IntelliJ IDEA", "labels": ["intellij-idea"]}, + "pycharm": {"display": "PyCharm"}, + "vscode": {"display": "VS Code", "labels": ["vsc"]}, + # JVM & Build + "java": {"display": "Java (JDK)", "labels": ["jdk"]}, + "graalvm": {"display": "GraalVM"}, + "kotlinc": {"display": "Kotlin Compiler"}, + "mvn": {"display": "Maven", "labels": ["maven"]}, + "gradle": {"display": "Gradle"}, + "spring": {"display": "Spring Boot CLI"}, + "quarkus": {"display": "Quarkus CLI"}, + "tomcat": {"display": "Apache Tomcat"}, + "jasypt": {"display": "Jasypt"}, + "jmc": {"display": "JDK Mission Control"}, + "gcviewer": {"display": "GCViewer"}, + # Python + "python": {"display": "Python"}, + "pip": {"display": "pip"}, + "uv": {"display": "uv"}, + # JavaScript / Node.js + "node": {"display": "Node.js", "labels": ["nodejs"]}, + "npm": {"display": "npm"}, + "ng": {"display": "Angular CLI"}, + "yarn": {"display": "Yarn"}, + "corepack": {"display": "Corepack"}, + # Go + "go": {"display": "Go"}, + # Cloud & DevOps + "docker": {"display": "Docker"}, + "lazydocker": {"display": "Lazydocker"}, + "kubectl": {"display": "kubectl"}, + "oc": {"display": "OpenShift CLI"}, + "helm": {"display": "Helm"}, + "terraform": {"display": "Terraform"}, + "aws": {"display": "AWS CLI"}, + "az": {"display": "Azure CLI", "labels": ["azure-cli"]}, + "dotnet": {"display": "dotnet"}, + # Developer Tools + "gh": {"display": "GitHub CLI"}, + "copilot": {"display": "GitHub Copilot", "labels": ["github-copilot"]}, + "sonar": {"display": "SonarQube", "labels": ["sonarqube"]}, + # Database + "pgadmin": {"display": "pgAdmin"}, + "squirrelsql": {"display": "SQuirreL SQL"}, + # IDEasy extensions / manually maintained entries without a tool folder + "custom": {"display": "Custom tool support"}, + "extra": {"display": "Extra tools"}, + "gui": {"display": "GUI / IDE launcher", "labels": ["GUI"]}, + "git": {"display": "git"}, + "rancher": {"display": "Rancher Desktop"}, +} + +# --- Commandlet / core-feature registry --- +# Same structure as TOOLS. The key is the GitHub label for that functional area. + +COMMANDLETS: dict[str, dict] = { + # Core commands + "ide": {"display": "IDEasy (general)", "labels": ["CLI", "commandlet", "integration"]}, + "core": {"display": "Core / Runtime", "labels": ["progressbar"]}, + "install": {"display": "ide install"}, + "uninstall": {"display": "ide uninstall"}, + "update": {"display": "ide update"}, + "create-project": {"display": "ide create-project", "labels": ["create"]}, + "build": {"display": "ide build"}, + "status": {"display": "ide status"}, + "version": {"display": "Version management"}, + # Configuration + "settings": {"display": "Settings / Properties", "labels": ["configuration", "json", "upgrade-settings"]}, + "icd": {"display": "IDE Configuration Doc"}, + "merger": {"display": "Settings merger"}, + "env": {"display": "Environment variables"}, + # Download & install + "download": {"display": "Download & Extraction", "labels": ["unpack", "urls"]}, + # Shell & terminal + "shell": {"display": "Shell integration", "labels": ["PowerShell"]}, + "completion": {"display": "Shell completion"}, + # Infrastructure + "proxy": {"display": "Proxy / Network"}, + "security": {"display": "Security / Credentials"}, + # Repository & workspace + "repository": {"display": "Repository management", "labels": ["SCM"]}, + "workspace": {"display": "Workspace management"}, + # Plugin management + "plugin": {"display": "Plugin management", "labels": ["plugins"]}, + # Observability + "logging": {"display": "Logging / Debug output"}, + # Migration + "migration": {"display": "Migration (devonfw-ide to IDEasy)"}, +} + +# --- Category groupings --- +# Ordered list of (category_label, [canonical_keys]). Controls the spanning +# header rows and row order in the rendered status tables. + +TOOL_CATEGORIES: list[tuple[str, list[str]]] = [ + ("IDEs and Editors", ["androidstudio", "eclipse", "intellij", "pycharm", "vscode"]), + ("JVM and Build Tools", ["java", "graalvm", "kotlinc", "mvn", "gradle", + "spring", "quarkus", "tomcat", "jasypt", "jmc", "gcviewer"]), + ("Python", ["python", "pip", "uv"]), + ("JavaScript / Node.js", ["node", "npm", "ng", "yarn", "corepack"]), + ("Go", ["go"]), + ("Cloud and DevOps", ["docker", "lazydocker", "kubectl", "oc", "helm", + "terraform", "aws", "az", "dotnet"]), + ("Developer Tools", ["gh", "copilot", "sonar"]), + ("Database", ["pgadmin", "squirrelsql"]), + ("IDEasy Extensions", ["custom", "extra", "gui", "git", "rancher"]), +] + +COMMANDLET_CATEGORIES: list[tuple[str, list[str]]] = [ + ("Core Commands", ["ide", "core", "install", "uninstall", "update", + "create-project", "build", "status", "version"]), + ("Configuration", ["settings", "icd", "merger", "env"]), + ("Download and Install", ["download"]), + ("Shell and Terminal", ["shell", "completion"]), + ("Infrastructure", ["proxy", "security"]), + ("Repository and Workspace", ["repository", "workspace"]), + ("Plugin Management", ["plugin"]), + ("Observability", ["logging"]), + ("Migration", ["migration"]), +] + +# --- Derived lookups --- +# Computed from the registries above — do not edit directly. + +TOOL_DISPLAY: dict[str, str] = {name: cfg["display"] for name, cfg in TOOLS.items()} +CMD_DISPLAY: dict[str, str] = {name: cfg["display"] for name, cfg in COMMANDLETS.items()} + +LABEL_ALIASES: dict[str, str] = { + alias: name + for registry in (TOOLS, COMMANDLETS) + for name, cfg in registry.items() + for alias in cfg.get("labels", []) +} + +SKIP_LABELS: frozenset[str] = frozenset({ + BLOCKER_LABEL, "bug", "bugfix", "enhancement", "feature", "task", + "Epic", "ready-to-implement", "waiting for feedback", "release", + "AI", "ARM", "claude", "internal", "process", "rewrite", "software", "workflow", + "test", "integration-tests", "testing", + "question", "duplicate", "wontfix", "invalid", "help wanted", + "good first issue", "documentation", "dependencies", "refactoring", + *OS_LABELS.values(), +}) + + +# --- Data model --- + +class IssueRef(NamedTuple): + """Classified issue record used throughout the rendering pipeline.""" + number: int + title: str + url: str + bug: bool + blocker: bool + os_keys: list[str] + + +# --- GitHub API helpers --- + +def _get(path: str, token: str | None, params: dict | None = None) -> Any: + """Send an authenticated GET to the GitHub REST API and return parsed JSON. + + Raises urllib.error.HTTPError on 4xx/5xx responses. + """ + url = f"{API_BASE}{path}" + if params: + url += "?" + urllib.parse.urlencode(params) + req = urllib.request.Request(url) + req.add_header("Accept", GITHUB_ACCEPT_HEADER) + req.add_header("X-GitHub-Api-Version", GITHUB_API_VERSION) + if token: + req.add_header("Authorization", f"Bearer {token}") + with urllib.request.urlopen(req) as resp: + return json.loads(resp.read().decode()) + + +def fetch_tool_names(token: str | None) -> list[str]: + """Return sorted tool folder names from the source tree. + + Queries the GitHub Contents API for sub-directories of TOOL_FOLDER_PATH. + Each directory name is also its default issue label. Returns an empty list + if the request fails so the rest of the pipeline can still run. + """ + try: + entries = _get(f"/repos/{REPO}/contents/{TOOL_FOLDER_PATH}", token) + return sorted( + entry["name"] for entry in entries + if isinstance(entry, dict) and entry.get("type") == "dir" + ) + except urllib.error.HTTPError as exc: + hint = "" if token else " Set GITHUB_TOKEN to avoid rate limiting." + log.warning( + "Could not fetch tool list from %s (%s %s). " + "Only commandlet sections will be generated.%s", + TOOL_FOLDER_PATH, exc.code, exc.reason, hint, + ) + return [] + except (urllib.error.URLError, json.JSONDecodeError) as exc: + log.warning("Could not fetch tool list from %s: %s", TOOL_FOLDER_PATH, exc, exc_info=True) + return [] + + +def fetch_all_issues(token: str | None, state: str = "open") -> list[dict]: + """Fetch all non-pull-request issues from the repository, handling pagination.""" + issues: list[dict] = [] + page = 1 + while True: + batch = _get( + f"/repos/{REPO}/issues", token, + {"state": state, "per_page": GITHUB_PAGE_SIZE, "page": page}, + ) + if not isinstance(batch, list) or not batch: + break + issues.extend(item for item in batch if "pull_request" not in item) + if len(batch) < GITHUB_PAGE_SIZE: + break + page += 1 + return issues + + +# --- Issue classification --- + +def label_names(issue: dict) -> set[str]: + return {label["name"] for label in issue.get("labels", [])} + + +def is_bug(issue: dict, labels: set[str]) -> bool: + """Check whether the issue counts as a bug. + + Detection: GitHub issue type field first, then legacy "bug" label, + then "blocker" (which implies a severe bug by definition). + """ + issue_type = issue.get("type") + if isinstance(issue_type, dict) and issue_type.get("name") in BUG_TYPE_NAMES: + return True + return "bug" in labels or BLOCKER_LABEL in labels + + +def is_blocker(labels: set[str]) -> bool: + return BLOCKER_LABEL in labels + + +def os_keys_for_issue(labels: set[str]) -> list[str]: + """Determine which OS keys apply. No OS label means cross-platform.""" + found = [key for key, label in OS_LABELS.items() if label in labels] + return found if found else list(OS_ORDER) + + +def topic_matches(labels: set[str], known: set[str]) -> list[str]: + """Return canonical topic keys matched by the given label set. + + Checks both direct matches against ``known`` and indirect matches via + LABEL_ALIASES so that non-standard label names resolve to canonical keys. + """ + matched: set[str] = set() + for label in labels: + if label in known: + matched.add(label) + elif label in LABEL_ALIASES and LABEL_ALIASES[label] in known: + matched.add(LABEL_ALIASES[label]) + return sorted(matched) + + +def classify_issues( + issues: list[dict], + tool_keys: set[str], + cmd_keys: set[str], +) -> tuple[ + dict[str, dict[str, list[IssueRef]]], + dict[str, dict[str, list[IssueRef]]], + list[dict], +]: + """Classify every issue into tool data, commandlet data, or unassigned. + + An issue may match multiple topics and multiple OS sections simultaneously. + Issues without an OS label are inserted into every OS bucket. + + Returns a three-tuple of: + - tool_data[os_key][topic] — IssueRef lists for tool rows + - cmd_data[os_key][topic] — IssueRef lists for commandlet rows + - unassigned — issues that matched no known topic + """ + tool_data: dict = defaultdict(lambda: defaultdict(list)) + cmd_data: dict = defaultdict(lambda: defaultdict(list)) + unassigned: list[dict] = [] + + for issue in issues: + labels = label_names(issue) + bug = is_bug(issue, labels) + blocker = is_blocker(labels) + os_keys = os_keys_for_issue(labels) + ref = IssueRef( + number=issue["number"], + title=issue["title"], + url=issue["html_url"], + bug=bug, + blocker=blocker, + os_keys=os_keys, + ) + tool_matches = topic_matches(labels, tool_keys) + cmd_matches = topic_matches(labels, cmd_keys) + + if not tool_matches and not cmd_matches: + unassigned.append(issue) + continue + + for os_key in os_keys: + for tool_key in tool_matches: + tool_data[os_key][tool_key].append(ref) + for cmd_key in cmd_matches: + cmd_data[os_key][cmd_key].append(ref) + + return dict(tool_data), dict(cmd_data), unassigned + + +# --- AsciiDoc rendering helpers --- + +def _safe(text: str, max_len: int = 72) -> str: + """Sanitise text for AsciiDoc table cells — escapes pipes, truncates.""" + sanitised = text.replace("|", "-").replace("\n", " ") + if len(sanitised) > max_len: + return sanitised[:max_len] + " \u2026" + return sanitised + + +def _severity_sort_key(ref: IssueRef) -> tuple: + """Sort key: blockers first, then bugs, then enhancements, then by number.""" + return (0 if ref.blocker else 1 if ref.bug else 2, ref.number) + + +def _severity_label(bug: bool, blocker: bool) -> str: + if blocker: + return "Blocker" + if bug: + return "Bug" + return "Enhancement" + + +def _severity_icon(bug: bool, blocker: bool) -> str: + if blocker: + return "🚨" + if bug: + return "🔴" + return "🟡" + + +def _status_cell(refs: list[IssueRef]) -> str: + """Return the worst-case status string for a list of issue refs.""" + if not refs: + return "🟢 OK" + if any(ref.blocker for ref in refs): + return "🚨 Blocker" + if any(ref.bug for ref in refs): + return "🔴 Bug" + return "🟡 Enhancement" + + +def _issue_cell(refs: list[IssueRef]) -> str: + """Format issue refs as an AsciiDoc line-break-separated cell. + + Sorted by severity descending, then issue number ascending. + """ + if not refs: + return "—" + parts = [ + f"{_severity_icon(ref.bug, ref.blocker)} link:{ref.url}[#{ref.number}] {_safe(ref.title)}" + for ref in sorted(refs, key=_severity_sort_key) + ] + return " +\n".join(parts) + + +# --- Section renderers --- + +def _bugs_all_platforms_section( + tool_data: dict, + cmd_data: dict, + tool_display: dict[str, str], + cmd_display: dict[str, str], + unassigned: list[dict], +) -> str: + """Render the global Bugs and Blockers section. + + Collects every bug/blocker from tool and commandlet data across all OS + buckets, deduplicates by issue number, and includes unassigned bugs/blockers. + Enhancements are excluded — they belong in the per-OS and commandlet tables. + """ + seen: dict[int, tuple[str, str, IssueRef]] = {} + + for label, display_name in tool_display.items(): + for os_key in OS_ORDER: + os_bucket = tool_data.get(os_key, {}) + for ref in os_bucket.get(label, []): + if (ref.bug or ref.blocker) and ref.number not in seen: + seen[ref.number] = ("Tool", display_name, ref) + + for label, display_name in cmd_display.items(): + for os_key in OS_ORDER: + os_bucket = cmd_data.get(os_key, {}) + for ref in os_bucket.get(label, []): + if (ref.bug or ref.blocker) and ref.number not in seen: + seen[ref.number] = ("Commandlet", display_name, ref) + + for issue in unassigned: + labels = {label["name"] for label in issue.get("labels", [])} + bug = is_bug(issue, labels) + blocker = is_blocker(labels) + if not (bug or blocker): + continue + issue_number = issue["number"] + if issue_number in seen: + continue + os_keys = os_keys_for_issue(labels) + ref = IssueRef( + number=issue_number, + title=issue["title"], + url=issue["html_url"], + bug=bug, + blocker=blocker, + os_keys=os_keys, + ) + seen[issue_number] = ("\u2014", "Unassigned", ref) + + blocker_count = sum(1 for _, _, ref in seen.values() if ref.blocker) + bug_count = len(seen) - blocker_count + + lines: list[str] = [ + "== Bugs and Blockers\n", + f"All open bugs and blockers across all platforms — " + f"{blocker_count} blocker(s), {bug_count} bug(s).\n", + "NOTE: Issues without an OS label are cross-platform and marked with a " + "checkmark in every OS column.\n", + ] + + if not seen: + lines.append("_No open bugs or blockers._ \U0001f389\n") + return "\n".join(lines) + + lines += [ + '[%header, cols="^1,^2,3,4,^1,^1,^1"]', + "|===", + "| # | Severity | Component | Summary | Win | Linux | macOS", + ] + + def _row_sort(item: tuple) -> tuple: + _, _, ref = item + return (0 if ref.blocker else 1, ref.number) + + for _, (_, display_name, ref) in sorted(seen.items(), key=lambda x: _row_sort(x[1])): + severity = f"{_severity_icon(ref.bug, ref.blocker)} {_severity_label(ref.bug, ref.blocker)}" + os_checks = ["✓" if os_key in ref.os_keys else "—" for os_key in OS_ORDER] + lines += [ + f"| link:{ref.url}[#{ref.number}]", + f"| {severity}", + f"| {display_name}", + f"| {_safe(ref.title)}", + *[f"| {check}" for check in os_checks], + "", + ] + + lines.append("|===\n") + return "\n".join(lines) + + +def _commandlets_global_table(cmd_data: dict) -> str: + """Render the cross-OS Commandlets and Core Features section. + + Issue refs from all OS buckets are merged and deduplicated per commandlet. + OS-specific issues carry a platform tag in brackets; cross-platform ones don't. + Components with no open issues are omitted. + """ + all_os = set(OS_ORDER) + line_break = " +\n" + + lines = [ + "== Commandlets and Core Features", + "", + "NOTE: Components with no open issues are omitted. " + "OS-specific issues are tagged with their platform in brackets.", + "", + '[%header, cols="3,^2,7"]', + "|===", + "| Commandlet / Feature | Status | Issues", + ] + + for cat_name, keys in COMMANDLET_CATEGORIES: + cat_rows = [] + for key in keys: + if key not in CMD_DISPLAY: + continue + merged: dict[int, IssueRef] = {} + for os_key in OS_ORDER: + os_bucket = cmd_data.get(os_key, {}) + for ref in os_bucket.get(key, []): + if ref.number not in merged: + merged[ref.number] = ref + if merged: + cat_rows.append((key, list(merged.values()))) + + if not cat_rows: + continue + + lines += ["", f"{TABLE_COLSPAN}+^h| {cat_name}"] + for key, refs in cat_rows: + parts = [] + for ref in sorted(refs, key=_severity_sort_key): + icon = _severity_icon(ref.bug, ref.blocker) + os_tag = ( + "" if set(ref.os_keys) == all_os + else " [" + "/".join(OS_SHORT[k] for k in ref.os_keys) + "]" + ) + parts.append(f"{icon} link:{ref.url}[#{ref.number}]{os_tag} {_safe(ref.title)}") + + issue_cell = line_break.join(parts) + lines += [ + f"| {CMD_DISPLAY[key]}", + f"| {_status_cell(refs)}", + f"| {issue_cell}", + "", + ] + + lines += ["|===", ""] + return "\n".join(lines) + + +def _os_status_table( + section_heading: str, + categories: list[tuple[str, list[str]]], + display_map: dict[str, str], + os_data: dict[str, list[IssueRef]], + col_header: str, + grouped: bool = True, +) -> list[str]: + """Render a status table for one OS section. + + When grouped is False, rows are flattened and sorted alphabetically + (used for tools). When True, category spanning headers are emitted + (used for commandlets). Components with no open issues are omitted. + """ + lines: list[str] = [ + f"=== {section_heading}\n", + "NOTE: Components with no open issues are omitted from this table.\n", + '[%header, cols="3,^2,7"]', + "|===", + f"| {col_header} | Status | Issues", + ] + + if not grouped: + flat = sorted( + ( + (key, display_map[key]) + for cat_keys in (keys for _, keys in categories) + for key in cat_keys + if key in display_map + ), + key=lambda pair: pair[1].lower(), + ) + for key, display_name in flat: + refs = os_data.get(key, []) + if refs: + lines += [f"| {display_name}", f"| {_status_cell(refs)}", f"| {_issue_cell(refs)}", ""] + else: + for cat_name, keys in categories: + cat_rows = [ + (key, os_data.get(key, [])) + for key in keys + if key in display_map and os_data.get(key) + ] + if not cat_rows: + continue + lines.append(f"\n{TABLE_COLSPAN}+^h| {cat_name}") + for key, refs in cat_rows: + lines += [f"| {display_map[key]}", f"| {_status_cell(refs)}", f"| {_issue_cell(refs)}", ""] + + lines.append("|===\n") + return lines + + +def _os_section(os_key: str, tool_data_for_os: dict[str, list[IssueRef]]) -> str: + """Render the Tools status section for one operating system.""" + os_name = OS_DISPLAY[os_key] + os_label = OS_LABELS[os_key] + + all_refs = {ref.number: ref for refs in tool_data_for_os.values() for ref in refs} + blocker_count = sum(1 for ref in all_refs.values() if ref.blocker) + bug_count = sum(1 for ref in all_refs.values() if ref.bug and not ref.blocker) + enhancement_count = sum(1 for ref in all_refs.values() if not ref.bug and not ref.blocker) + + if all_refs: + stat_str = f"{blocker_count} blocker(s), {bug_count} bug(s), {enhancement_count} enhancement(s)" + else: + stat_str = "no open issues" + + lines: list[str] = [ + f"== {os_name} Tools \u2014 {stat_str}\n", + f"Open issues labelled `{os_label}` or without any OS label " + f"(cross-platform issues appear in every OS section).\n", + ] + lines += _os_status_table( + "Tools", TOOL_CATEGORIES, TOOL_DISPLAY, tool_data_for_os, "Tool", + grouped=False, + ) + return "\n".join(lines) + + +def _unassigned_section(unassigned: list[dict]) -> str: + """Render the Unassigned Issues section. + + Lists every issue that matched no tool or commandlet label so maintainers + can either fix labels on GitHub or extend the registries in this script. + """ + lines: list[str] = [ + "== Unassigned Issues\n", + f"{len(unassigned)} issue(s) matched no known tool or commandlet label. " + "Apply the appropriate label on GitHub, or add an entry to ``TOOLS``, " + "``COMMANDLETS``, or their ``labels`` list in this script.\n", + ] + if not unassigned: + lines.append("_All issues are assigned._\n") + return "\n".join(lines) + + lines += ['[%header, cols="^1,4,3"]', "|===", "| Issue | Summary | Labels"] + for issue in sorted(unassigned, key=lambda item: item["number"]): + label_str = ", ".join(label["name"] for label in issue.get("labels", [])) + lines += [ + f"| link:{issue['html_url']}[#{issue['number']}]", + f"| {_safe(issue['title'])}", + f"| {label_str or '\u2014'}", + "", + ] + lines.append("|===\n") + return "\n".join(lines) + + +# --- Document header template --- + +HEADER_TEMPLATE = """\ += IDEasy Quality Status +:toc: left +:toclevels: 3 +:icons: font +:source-highlighter: rouge +:nofooter: + +== Overview + +Automatically generated quality and support status for +https://github.com/{repo}[{repo}]. +The tool list is discovered from the source tree at +`{tool_path}`. + +NOTE: Issues without an OS label are treated as cross-platform and appear in +every OS section. Issues with a specific OS label appear only in that +OS section. + +.Severity Legend +[%header, cols="^1,^2,5"] +|=== +| Icon | Severity | Description + +| 🚨 | Blocker | Fully prevents users from working; must be fixed immediately +| 🔴 | Bug | Confirmed defect with functional impact +| 🟡 | Enhancement | Feature request, improvement, or task (no functional breakage) +| 🟢 | OK | No open issues +|=== + +.Issue Statistics +[%header, cols="2,^1,^1,^1,^1"] +|=== +| Scope | Total | Blockers | Bugs | Enhancements + +| All platforms (deduplicated) | {total} | {n_blockers} | {n_bugs} | {n_enhs} +| Unassigned (no label match) | {unassigned} | — | — | — +|=== + +_Generated: {date}_ + +""" + + +# --- Document assembly --- + +def generate_adoc(issues: list[dict], tool_names: list[str]) -> str: + """Assemble the complete AsciiDoc quality-status document. + + Merges dynamically fetched tool folder names with the static TOOLS registry + so that tools present in the registry but absent from the source tree + (e.g. git, rancher) are still recognised. + """ + tool_keys = set(tool_names) | set(TOOLS.keys()) + cmd_keys = set(COMMANDLETS.keys()) + + tool_data, cmd_data, unassigned = classify_issues(issues, tool_keys, cmd_keys) + + # Deduplicate across all OS buckets for global statistics + seen_refs: dict[int, IssueRef] = {} + for os_key in OS_ORDER: + tool_bucket = tool_data.get(os_key, {}) + cmd_bucket = cmd_data.get(os_key, {}) + for refs in (*tool_bucket.values(), *cmd_bucket.values()): + for ref in refs: + if ref.number not in seen_refs: + seen_refs[ref.number] = ref + + blocker_count = sum(1 for ref in seen_refs.values() if ref.blocker) + bug_count = sum(1 for ref in seen_refs.values() if ref.bug and not ref.blocker) + enhancement_count = sum(1 for ref in seen_refs.values() if not ref.bug and not ref.blocker) + + header = HEADER_TEMPLATE.format( + repo=REPO, + tool_path=TOOL_FOLDER_PATH, + date=datetime.now(timezone.utc).strftime("%Y-%m-%d %H:%M UTC"), + total=len(seen_refs), + n_blockers=blocker_count, + n_bugs=bug_count, + n_enhs=enhancement_count, + unassigned=len(unassigned), + ) + + parts = [ + header, + _bugs_all_platforms_section(tool_data, cmd_data, TOOL_DISPLAY, CMD_DISPLAY, unassigned), + _commandlets_global_table(cmd_data), + *[_os_section(os_key, tool_data.get(os_key, {})) for os_key in OS_ORDER], + _unassigned_section(unassigned), + f"""\ +== How to update this document + +=== Adding a new tool +Once a folder is added under `{TOOL_FOLDER_PATH}` and issues use that folder +name as a label, the tool appears automatically in the next generated document. +Override the display name by adding an entry to ``TOOLS`` in this script. + +=== Adding a new commandlet or core feature +Add an entry to ``COMMANDLETS``: key = GitHub label, ``display`` = name, +``labels`` = list of alternative label names. Add the key to the appropriate +category in ``COMMANDLET_CATEGORIES``. + +=== Mapping a non-standard label +Add the label to the ``labels`` list of the matching ``TOOLS`` or +``COMMANDLETS`` entry. Issues that still match nothing appear in the +*Unassigned Issues* section. +""", + ] + return "\n".join(parts) + + +def main() -> None: + """Entry point: parse arguments, fetch data, write the output file.""" + logging.basicConfig(level=logging.INFO, format="%(levelname)s: %(message)s") + + parser = argparse.ArgumentParser( + description=f"Generate quality-status.adoc for {REPO}", + ) + parser.add_argument( + "--token", default=os.environ.get("GITHUB_TOKEN"), + help="GitHub personal access token (or set the GITHUB_TOKEN env var)", + ) + parser.add_argument("--output", default="quality-status.adoc") + parser.add_argument("--state", default="open", choices=["open", "all"]) + args = parser.parse_args() + + if not args.token: + log.warning("No GITHUB_TOKEN set — requests will be rate-limited to 60/hour.") + + log.info("Fetching tool list from source tree ...") + tool_names = fetch_tool_names(args.token) + if tool_names: + log.info(" %d tools found: %s", len(tool_names), ", ".join(tool_names)) + else: + log.warning(" No tools found — check token permissions and network connectivity.") + + log.info("Fetching %s issues from %s ...", args.state, REPO) + try: + issues = fetch_all_issues(args.token, state=args.state) + except urllib.error.HTTPError as exc: + log.error("GitHub API request failed: HTTP %s %s", exc.code, exc.reason) + sys.exit(1) + log.info(" %d issues loaded.", len(issues)) + + # Classify once here for stats, then pass issues to generate_adoc which + # classifies again internally. The duplication is minor compared to the + # API calls above, and keeps generate_adoc self-contained. + tool_keys = set(tool_names) | set(TOOLS.keys()) + cmd_keys = set(COMMANDLETS.keys()) + _, _, unassigned = classify_issues(issues, tool_keys, cmd_keys) + matched = len(issues) - len(unassigned) + pct = f" ({matched / len(issues) * 100:.1f}%)" if issues else "" + log.info(" %d assigned%s, %d unassigned.", matched, pct, len(unassigned)) + + all_known = tool_keys | cmd_keys | set(LABEL_ALIASES) + all_labels = {label["name"] for issue in issues for label in issue.get("labels", [])} + unmatched = all_labels - all_known - SKIP_LABELS + if unmatched: + log.info( + " Labels with no mapping (consider adding to TOOLS/COMMANDLETS): %s", + ", ".join(sorted(unmatched)), + ) + + adoc = generate_adoc(issues, tool_names) + with open(args.output, "w", encoding="utf-8") as output_file: + output_file.write(adoc) + log.info("Written to %s", args.output) + + +if __name__ == "__main__": + main() diff --git a/documentation/quality-status.adoc b/documentation/quality-status.adoc new file mode 100644 index 000000000..8025c6f54 --- /dev/null +++ b/documentation/quality-status.adoc @@ -0,0 +1,1468 @@ += IDEasy Quality Status +:toc: left +:toclevels: 3 +:icons: font +:source-highlighter: rouge +:nofooter: + +== Overview + +Automatically generated quality and support status for +https://github.com/devonfw/IDEasy[devonfw/IDEasy]. +The tool list is discovered from the source tree at +`cli/src/main/java/com/devonfw/tools/ide/tool`. + +NOTE: Issues without an OS label are treated as cross-platform and appear in +every OS section. Issues with a specific OS label appear only in that +OS section. + +.Severity Legend +[%header, cols="^1,^2,5"] +|=== +| Icon | Severity | Description + +| 🚨 | Blocker | Fully prevents users from working; must be fixed immediately +| 🔴 | Bug | Confirmed defect with functional impact +| 🟡 | Enhancement | Feature request, improvement, or task (no functional breakage) +| 🟢 | OK | No open issues +|=== + +.Issue Statistics +[%header, cols="2,^1,^1,^1,^1"] +|=== +| Scope | Total | Blockers | Bugs | Enhancements + +| All platforms (deduplicated) | 138 | 1 | 58 | 79 +| Unassigned (no label match) | 52 | — | — | — +|=== + +_Generated: 2026-05-08 06:27 UTC_ + + +== Bugs and Blockers + +All open bugs and blockers across all platforms — 1 blocker(s), 68 bug(s). + +NOTE: Issues without an OS label are cross-platform and marked with a checkmark in every OS column. + +[%header, cols="^1,^2,3,4,^1,^1,^1"] +|=== +| # | Severity | Component | Summary | Win | Linux | macOS +| link:https://github.com/devonfw/IDEasy/issues/1134[#1134] +| 🚨 Blocker +| Shell completion +| IDEasy autocompletion gets stuck if license agreement file was not found +| ✓ +| ✓ +| ✓ + +| link:https://github.com/devonfw/IDEasy/issues/44[#44] +| 🔴 Bug +| Docker +| DockerUrlUpdater not finding/adding specific versions +| ✓ +| ✓ +| ✓ + +| link:https://github.com/devonfw/IDEasy/issues/120[#120] +| 🔴 Bug +| IntelliJ IDEA +| intellij does not use our settings when we create a new project within i … +| ✓ +| ✓ +| ✓ + +| link:https://github.com/devonfw/IDEasy/issues/378[#378] +| 🔴 Bug +| Unassigned +| Missing comprehensive "Getting started guide" causing fail in getting st … +| ✓ +| ✓ +| ✓ + +| link:https://github.com/devonfw/IDEasy/issues/551[#551] +| 🔴 Bug +| Shell completion +| Autocompletion and list-versions make OS-agnostic suggestions +| ✓ +| ✓ +| ✓ + +| link:https://github.com/devonfw/IDEasy/issues/594[#594] +| 🔴 Bug +| Maven +| Still windows file locking problems +| ✓ +| — +| — + +| link:https://github.com/devonfw/IDEasy/issues/611[#611] +| 🔴 Bug +| Unassigned +| Git pull on settings with local branch and without remote throws excepti … +| ✓ +| ✓ +| ✓ + +| link:https://github.com/devonfw/IDEasy/issues/690[#690] +| 🔴 Bug +| Download & Extraction +| UpdateUrls workflow timeout not working +| ✓ +| ✓ +| ✓ + +| link:https://github.com/devonfw/IDEasy/issues/717[#717] +| 🔴 Bug +| IntelliJ IDEA +| IDEasy does not start Intellij if license was not accepted +| ✓ +| ✓ +| ✓ + +| link:https://github.com/devonfw/IDEasy/issues/771[#771] +| 🔴 Bug +| Download & Extraction +| Check URL Updater issues +| ✓ +| ✓ +| ✓ + +| link:https://github.com/devonfw/IDEasy/issues/772[#772] +| 🔴 Bug +| Security / Credentials +| CVE-2023-7272 in org.eclipse.parsson 1.1.7 +| ✓ +| ✓ +| ✓ + +| link:https://github.com/devonfw/IDEasy/issues/795[#795] +| 🔴 Bug +| Unassigned +| Setup not working properly on Mac (and zsh) +| — +| — +| ✓ + +| link:https://github.com/devonfw/IDEasy/issues/796[#796] +| 🔴 Bug +| AWS CLI +| cannot install aws on Mac +| — +| — +| ✓ + +| link:https://github.com/devonfw/IDEasy/issues/798[#798] +| 🔴 Bug +| pgAdmin +| pgadmin not working on Mac +| — +| — +| ✓ + +| link:https://github.com/devonfw/IDEasy/issues/800[#800] +| 🔴 Bug +| SonarQube +| sonar not working on Mac +| — +| — +| ✓ + +| link:https://github.com/devonfw/IDEasy/issues/801[#801] +| 🔴 Bug +| npm +| npm not working on Mac +| — +| — +| ✓ + +| link:https://github.com/devonfw/IDEasy/issues/802[#802] +| 🔴 Bug +| Azure CLI +| az not working on Mac +| — +| ✓ +| ✓ + +| link:https://github.com/devonfw/IDEasy/issues/836[#836] +| 🔴 Bug +| Shell integration +| Exit is completed in wrong places +| ✓ +| ✓ +| ✓ + +| link:https://github.com/devonfw/IDEasy/issues/840[#840] +| 🔴 Bug +| Unassigned +| git fetch does not work with multiple remotes +| ✓ +| ✓ +| ✓ + +| link:https://github.com/devonfw/IDEasy/issues/854[#854] +| 🔴 Bug +| Unassigned +| Kubectl not working on linux +| — +| ✓ +| — + +| link:https://github.com/devonfw/IDEasy/issues/855[#855] +| 🔴 Bug +| Azure CLI +| ide az config not working +| ✓ +| ✓ +| ✓ + +| link:https://github.com/devonfw/IDEasy/issues/857[#857] +| 🔴 Bug +| Kotlin Compiler +| kotlinc bash does not get keyboard inputs +| ✓ +| ✓ +| ✓ + +| link:https://github.com/devonfw/IDEasy/issues/859[#859] +| 🔴 Bug +| Node.js +| node shell not starting +| ✓ +| ✓ +| ✓ + +| link:https://github.com/devonfw/IDEasy/issues/861[#861] +| 🔴 Bug +| pgAdmin +| install of pgadmin throws an IllegalStateException when the install wizz … +| ✓ +| ✓ +| ✓ + +| link:https://github.com/devonfw/IDEasy/issues/862[#862] +| 🔴 Bug +| VS Code +| vscode does not work on Mac +| — +| — +| ✓ + +| link:https://github.com/devonfw/IDEasy/issues/864[#864] +| 🔴 Bug +| AWS CLI +| AWS is not working on Mac x64 +| — +| — +| ✓ + +| link:https://github.com/devonfw/IDEasy/issues/865[#865] +| 🔴 Bug +| Azure CLI +| Az is not working on Mac x64 +| — +| — +| ✓ + +| link:https://github.com/devonfw/IDEasy/issues/867[#867] +| 🔴 Bug +| Rancher Desktop +| Docker (Rancher Desktop) not working on Linux +| — +| ✓ +| — + +| link:https://github.com/devonfw/IDEasy/issues/868[#868] +| 🔴 Bug +| Eclipse +| Eclipse does not work on Mac x64 +| — +| — +| ✓ + +| link:https://github.com/devonfw/IDEasy/issues/869[#869] +| 🔴 Bug +| GCViewer +| gcviewer logs errors on Mac X64 +| — +| — +| ✓ + +| link:https://github.com/devonfw/IDEasy/issues/878[#878] +| 🔴 Bug +| pgAdmin +| pgadmin does not work on Mac x64 +| — +| — +| ✓ + +| link:https://github.com/devonfw/IDEasy/issues/892[#892] +| 🔴 Bug +| Unassigned +| Improve GitContextTest tests to actually test something +| ✓ +| ✓ +| ✓ + +| link:https://github.com/devonfw/IDEasy/issues/897[#897] +| 🔴 Bug +| Download & Extraction +| HTTP Proxy with TLS termination causing errors +| ✓ +| ✓ +| ✓ + +| link:https://github.com/devonfw/IDEasy/issues/943[#943] +| 🔴 Bug +| Settings merger +| XmlMerger: Rework Combine Text Nodes +| ✓ +| ✓ +| ✓ + +| link:https://github.com/devonfw/IDEasy/issues/1041[#1041] +| 🔴 Bug +| IDEasy (general) +| native image has globbing active +| ✓ +| ✓ +| ✓ + +| link:https://github.com/devonfw/IDEasy/issues/1054[#1054] +| 🔴 Bug +| Core / Runtime +| Incorrect interpretation of trailling and leading spaces in version rang … +| ✓ +| ✓ +| ✓ + +| link:https://github.com/devonfw/IDEasy/issues/1063[#1063] +| 🔴 Bug +| Settings / Properties +| User specific configurations are not working as described +| ✓ +| ✓ +| ✓ + +| link:https://github.com/devonfw/IDEasy/issues/1124[#1124] +| 🔴 Bug +| Python +| Ensure latest version of Python is installed +| ✓ +| ✓ +| ✓ + +| link:https://github.com/devonfw/IDEasy/issues/1185[#1185] +| 🔴 Bug +| IDE Configuration Doc +| icd on mac does not work in zshell +| — +| — +| ✓ + +| link:https://github.com/devonfw/IDEasy/issues/1187[#1187] +| 🔴 Bug +| Eclipse +| Eclipse plugin installation on mac is not working +| — +| — +| ✓ + +| link:https://github.com/devonfw/IDEasy/issues/1206[#1206] +| 🔴 Bug +| Unassigned +| java.util.zip.ZipException when opening Android Studio archives from ver … +| ✓ +| ✓ +| ✓ + +| link:https://github.com/devonfw/IDEasy/issues/1227[#1227] +| 🔴 Bug +| ide install +| Guide windows user after installation +| ✓ +| — +| — + +| link:https://github.com/devonfw/IDEasy/issues/1232[#1232] +| 🔴 Bug +| ide install +| MSI Repair broken +| ✓ +| — +| — + +| link:https://github.com/devonfw/IDEasy/issues/1255[#1255] +| 🔴 Bug +| ide status +| ide status does not recognize snapshot version correctly +| ✓ +| ✓ +| ✓ + +| link:https://github.com/devonfw/IDEasy/issues/1263[#1263] +| 🔴 Bug +| Android Studio +| Fix android-studio workspace templates +| ✓ +| ✓ +| ✓ + +| link:https://github.com/devonfw/IDEasy/issues/1333[#1333] +| 🔴 Bug +| ide update +| Step 'Install or update software' already ended with false and now ended … +| ✓ +| ✓ +| ✓ + +| link:https://github.com/devonfw/IDEasy/issues/1352[#1352] +| 🔴 Bug +| VS Code +| VSCode WSL warning prompt blocking VSCode plugin installation +| — +| ✓ +| — + +| link:https://github.com/devonfw/IDEasy/issues/1391[#1391] +| 🔴 Bug +| Terraform +| bashrc messed with terraform completions +| ✓ +| ✓ +| ✓ + +| link:https://github.com/devonfw/IDEasy/issues/1456[#1456] +| 🔴 Bug +| ide uninstall +| Uninstall via Windows settings not working +| ✓ +| — +| — + +| link:https://github.com/devonfw/IDEasy/issues/1501[#1501] +| 🔴 Bug +| IntelliJ IDEA +| Starting intellij leads to error popup +| ✓ +| ✓ +| ✓ + +| link:https://github.com/devonfw/IDEasy/issues/1512[#1512] +| 🔴 Bug +| IntelliJ IDEA +| Cannot run Intellij on Mac due to file permission error +| — +| — +| ✓ + +| link:https://github.com/devonfw/IDEasy/issues/1517[#1517] +| 🔴 Bug +| ide install +| IDEasy setup does not install Windows Terminal +| ✓ +| ✓ +| ✓ + +| link:https://github.com/devonfw/IDEasy/issues/1518[#1518] +| 🔴 Bug +| uv +| uv tools are installed globally +| ✓ +| ✓ +| ✓ + +| link:https://github.com/devonfw/IDEasy/issues/1548[#1548] +| 🔴 Bug +| ide update +| Windows file locking error on update with plugins +| ✓ +| — +| — + +| link:https://github.com/devonfw/IDEasy/issues/1579[#1579] +| 🔴 Bug +| git +| IDEasy uninstall after a failed MSI installation does not work +| ✓ +| — +| — + +| link:https://github.com/devonfw/IDEasy/issues/1634[#1634] +| 🔴 Bug +| Download & Extraction +| UrlUpdater creates error entries for HTTP status 200 +| ✓ +| ✓ +| ✓ + +| link:https://github.com/devonfw/IDEasy/issues/1659[#1659] +| 🔴 Bug +| Docker +| Global tools run tool while installation is running in background +| ✓ +| ✓ +| ✓ + +| link:https://github.com/devonfw/IDEasy/issues/1746[#1746] +| 🔴 Bug +| Shell integration +| ide shell broken +| ✓ +| ✓ +| ✓ + +| link:https://github.com/devonfw/IDEasy/issues/1775[#1775] +| 🔴 Bug +| Security / Credentials +| Validate and Fix CPE Vendor/Product Identifiers for All Tools +| ✓ +| ✓ +| ✓ + +| link:https://github.com/devonfw/IDEasy/issues/1787[#1787] +| 🔴 Bug +| Yarn +| tracking yarn versions broken +| ✓ +| ✓ +| ✓ + +| link:https://github.com/devonfw/IDEasy/issues/1808[#1808] +| 🔴 Bug +| IDE Configuration Doc +| icd is not navigating into single available workspace on icd -p project +| ✓ +| ✓ +| ✓ + +| link:https://github.com/devonfw/IDEasy/issues/1814[#1814] +| 🔴 Bug +| Settings / Properties +| IDEasy still reports updates for settings are available after any number … +| ✓ +| ✓ +| ✓ + +| link:https://github.com/devonfw/IDEasy/issues/1842[#1842] +| 🔴 Bug +| Shell integration +| Infinite completion of exit subcommand +| ✓ +| ✓ +| ✓ + +| link:https://github.com/devonfw/IDEasy/issues/1844[#1844] +| 🔴 Bug +| VS Code +| `ide install vscode` or `ide vscode` freezes at "installing plugins" ste … +| — +| ✓ +| — + +| link:https://github.com/devonfw/IDEasy/issues/1846[#1846] +| 🔴 Bug +| Unassigned +| Mac Gatekeeper workaround causing errors +| — +| — +| ✓ + +| link:https://github.com/devonfw/IDEasy/issues/1886[#1886] +| 🔴 Bug +| npm +| NpmBasedCommandlet shows wrong tool version after install +| ✓ +| ✓ +| ✓ + +| link:https://github.com/devonfw/IDEasy/issues/1892[#1892] +| 🔴 Bug +| GUI / IDE launcher +| pom.xml required for launching gui not included in release/native builds +| ✓ +| ✓ +| ✓ + +| link:https://github.com/devonfw/IDEasy/issues/1893[#1893] +| 🔴 Bug +| Unassigned +| Fix Failing Integration Tests workflow +| ✓ +| ✓ +| ✓ + +| link:https://github.com/devonfw/IDEasy/issues/1901[#1901] +| 🔴 Bug +| Unassigned +| HelpCommandletTest.testIcdHelp fails on german systems +| ✓ +| ✓ +| ✓ + +|=== + +== Commandlets and Core Features + +NOTE: Components with no open issues are omitted. OS-specific issues are tagged with their platform in brackets. + +[%header, cols="3,^2,7"] +|=== +| Commandlet / Feature | Status | Issues + +3+^h| Core Commands +| IDEasy (general) +| 🔴 Bug +| 🔴 link:https://github.com/devonfw/IDEasy/issues/1041[#1041] native image has globbing active + +🔴 link:https://github.com/devonfw/IDEasy/issues/1844[#1844] [Linux] `ide install vscode` or `ide vscode` freezes at "installing plugins" ste … + +🟡 link:https://github.com/devonfw/IDEasy/issues/19[#19] Implement ToolCommandlet for Google Cloud CLI + +🟡 link:https://github.com/devonfw/IDEasy/issues/703[#703] Support AWS CDK + +🟡 link:https://github.com/devonfw/IDEasy/issues/780[#780] Create IDEasy service + +🟡 link:https://github.com/devonfw/IDEasy/issues/825[#825] Consider adding GC Log Analyzer + +🟡 link:https://github.com/devonfw/IDEasy/issues/1457[#1457] Improve CLI error messages on invalid args or commandlets not available … + +🟡 link:https://github.com/devonfw/IDEasy/issues/1580[#1580] Implement cleanup + +🟡 link:https://github.com/devonfw/IDEasy/issues/1594[#1594] implement ReleaseCommandlet + +🟡 link:https://github.com/devonfw/IDEasy/issues/1821[#1821] Back up and restore user state before/after integration tests + +🟡 link:https://github.com/devonfw/IDEasy/issues/1867[#1867] Create Claude commandlet + +🟡 link:https://github.com/devonfw/IDEasy/issues/1868[#1868] Revision of the functionality of global tool commandlets + +🟡 link:https://github.com/devonfw/IDEasy/issues/1902[#1902] Create InsoUrlUpdater + +🟡 link:https://github.com/devonfw/IDEasy/issues/1903[#1903] Create Inso Commandlet + +| Core / Runtime +| 🔴 Bug +| 🔴 link:https://github.com/devonfw/IDEasy/issues/1041[#1041] native image has globbing active + +🔴 link:https://github.com/devonfw/IDEasy/issues/1054[#1054] Incorrect interpretation of trailling and leading spaces in version rang … + +🔴 link:https://github.com/devonfw/IDEasy/issues/1512[#1512] [macOS] Cannot run Intellij on Mac due to file permission error + +🟡 link:https://github.com/devonfw/IDEasy/issues/871[#871] [macOS] Add progressbar to *.dmg extract process + +| ide install +| 🔴 Bug +| 🔴 link:https://github.com/devonfw/IDEasy/issues/594[#594] [Win] Still windows file locking problems + +🔴 link:https://github.com/devonfw/IDEasy/issues/861[#861] install of pgadmin throws an IllegalStateException when the install wizz … + +🔴 link:https://github.com/devonfw/IDEasy/issues/1227[#1227] [Win] Guide windows user after installation + +🔴 link:https://github.com/devonfw/IDEasy/issues/1232[#1232] [Win] MSI Repair broken + +🔴 link:https://github.com/devonfw/IDEasy/issues/1517[#1517] IDEasy setup does not install Windows Terminal + +🔴 link:https://github.com/devonfw/IDEasy/issues/1518[#1518] uv tools are installed globally + +🔴 link:https://github.com/devonfw/IDEasy/issues/1579[#1579] [Win] IDEasy uninstall after a failed MSI installation does not work + +🔴 link:https://github.com/devonfw/IDEasy/issues/1659[#1659] Global tools run tool while installation is running in background + +🟡 link:https://github.com/devonfw/IDEasy/issues/377[#377] [macOS] Support Homebrew for installation on macOS + +🟡 link:https://github.com/devonfw/IDEasy/issues/421[#421] [Win] Allow installation of IDEasy via winget + +🟡 link:https://github.com/devonfw/IDEasy/issues/422[#422] [Win] Allow installation of IDEasy via Windows Store + +🟡 link:https://github.com/devonfw/IDEasy/issues/423[#423] [macOS] Create installer for MacOS + +🟡 link:https://github.com/devonfw/IDEasy/issues/703[#703] Support AWS CDK + +🟡 link:https://github.com/devonfw/IDEasy/issues/714[#714] Improve UX for settings repository + +🟡 link:https://github.com/devonfw/IDEasy/issues/1056[#1056] [Win] Add Conversion of LICENSE.adoc to RTF Format + +🟡 link:https://github.com/devonfw/IDEasy/issues/1102[#1102] [Win] IDEasy MSI installer not working (unsigned) + +🟡 link:https://github.com/devonfw/IDEasy/issues/1558[#1558] [Win] Add install.log path to msi installer window + +🟡 link:https://github.com/devonfw/IDEasy/issues/1694[#1694] Fix behavior when providing a wrong git URL + +🟡 link:https://github.com/devonfw/IDEasy/issues/1763[#1763] Improve installation/testing of SNAPSHOT releases + +🟡 link:https://github.com/devonfw/IDEasy/issues/1868[#1868] Revision of the functionality of global tool commandlets + +| ide uninstall +| 🔴 Bug +| 🔴 link:https://github.com/devonfw/IDEasy/issues/1456[#1456] [Win] Uninstall via Windows settings not working + +🟡 link:https://github.com/devonfw/IDEasy/issues/399[#399] Handle uninstall of global tool commandlets + +🟡 link:https://github.com/devonfw/IDEasy/issues/785[#785] Re-introduce workspace reverse options from devonfw-ide + +🟡 link:https://github.com/devonfw/IDEasy/issues/1868[#1868] Revision of the functionality of global tool commandlets + +🟡 link:https://github.com/devonfw/IDEasy/issues/1872[#1872] [Win] Implement generic uninstall implementation for global tools under window … + +| ide update +| 🔴 Bug +| 🔴 link:https://github.com/devonfw/IDEasy/issues/594[#594] [Win] Still windows file locking problems + +🔴 link:https://github.com/devonfw/IDEasy/issues/1333[#1333] Step 'Install or update software' already ended with false and now ended … + +🔴 link:https://github.com/devonfw/IDEasy/issues/1548[#1548] [Win] Windows file locking error on update with plugins + +🟡 link:https://github.com/devonfw/IDEasy/issues/639[#639] Improve step success logic for sub steps + +🟡 link:https://github.com/devonfw/IDEasy/issues/714[#714] Improve UX for settings repository + +🟡 link:https://github.com/devonfw/IDEasy/issues/945[#945] Improve ide update with smart dependency handling + +🟡 link:https://github.com/devonfw/IDEasy/issues/1694[#1694] Fix behavior when providing a wrong git URL + +| ide create-project +| 🟡 Enhancement +| 🟡 link:https://github.com/devonfw/IDEasy/issues/714[#714] Improve UX for settings repository + +🟡 link:https://github.com/devonfw/IDEasy/issues/1695[#1695] Clone settings to temporary directory, analyse, and then move + +| ide status +| 🔴 Bug +| 🔴 link:https://github.com/devonfw/IDEasy/issues/1255[#1255] ide status does not recognize snapshot version correctly + +🟡 link:https://github.com/devonfw/IDEasy/issues/1209[#1209] migration version message is confusing + +| Version management +| 🟡 Enhancement +| 🟡 link:https://github.com/devonfw/IDEasy/issues/1178[#1178] Revisit VersionPhase detection + +🟡 link:https://github.com/devonfw/IDEasy/issues/1868[#1868] Revision of the functionality of global tool commandlets + + +3+^h| Configuration +| Settings / Properties +| 🔴 Bug +| 🔴 link:https://github.com/devonfw/IDEasy/issues/1063[#1063] User specific configurations are not working as described + +🔴 link:https://github.com/devonfw/IDEasy/issues/1518[#1518] uv tools are installed globally + +🔴 link:https://github.com/devonfw/IDEasy/issues/1814[#1814] IDEasy still reports updates for settings are available after any number … + +🟡 link:https://github.com/devonfw/IDEasy/issues/449[#449] Consider integration of continue GenAI coding assistant + +🟡 link:https://github.com/devonfw/IDEasy/issues/714[#714] Improve UX for settings repository + +🟡 link:https://github.com/devonfw/IDEasy/issues/735[#735] Enhance workspace configuration with generic overlay from settings/works … + +🟡 link:https://github.com/devonfw/IDEasy/issues/785[#785] Re-introduce workspace reverse options from devonfw-ide + +🟡 link:https://github.com/devonfw/IDEasy/issues/930[#930] Refactor `JsonPrettyPrinter` to be usable in CustomToolJson + +🟡 link:https://github.com/devonfw/IDEasy/issues/987[#987] conditional templates + +🟡 link:https://github.com/devonfw/IDEasy/issues/989[#989] allow expressions in template variable definitions + +🟡 link:https://github.com/devonfw/IDEasy/issues/992[#992] Support multiple attributes for merge:id + +🟡 link:https://github.com/devonfw/IDEasy/issues/1214[#1214] preserve EOL style in upgrade-settings + +🟡 link:https://github.com/devonfw/IDEasy/issues/1676[#1676] Import extra SDKs automatically into IDE + +🟡 link:https://github.com/devonfw/IDEasy/issues/1694[#1694] Fix behavior when providing a wrong git URL + +🟡 link:https://github.com/devonfw/IDEasy/issues/1695[#1695] Clone settings to temporary directory, analyse, and then move + +🟡 link:https://github.com/devonfw/IDEasy/issues/1715[#1715] Adapt settings to inject java runtime future proove into vscode + +🟡 link:https://github.com/devonfw/IDEasy/issues/1880[#1880] Reinstall all plugins for IDE in force mode + +| IDE Configuration Doc +| 🔴 Bug +| 🔴 link:https://github.com/devonfw/IDEasy/issues/1185[#1185] [macOS] icd on mac does not work in zshell + +🔴 link:https://github.com/devonfw/IDEasy/issues/1808[#1808] icd is not navigating into single available workspace on icd -p project + +| Settings merger +| 🔴 Bug +| 🔴 link:https://github.com/devonfw/IDEasy/issues/943[#943] XmlMerger: Rework Combine Text Nodes + +🟡 link:https://github.com/devonfw/IDEasy/issues/735[#735] Enhance workspace configuration with generic overlay from settings/works … + +🟡 link:https://github.com/devonfw/IDEasy/issues/987[#987] conditional templates + +🟡 link:https://github.com/devonfw/IDEasy/issues/989[#989] allow expressions in template variable definitions + +🟡 link:https://github.com/devonfw/IDEasy/issues/992[#992] Support multiple attributes for merge:id + + +3+^h| Download and Install +| Download & Extraction +| 🔴 Bug +| 🔴 link:https://github.com/devonfw/IDEasy/issues/690[#690] UpdateUrls workflow timeout not working + +🔴 link:https://github.com/devonfw/IDEasy/issues/771[#771] Check URL Updater issues + +🔴 link:https://github.com/devonfw/IDEasy/issues/897[#897] HTTP Proxy with TLS termination causing errors + +🔴 link:https://github.com/devonfw/IDEasy/issues/1124[#1124] Ensure latest version of Python is installed + +🔴 link:https://github.com/devonfw/IDEasy/issues/1634[#1634] UrlUpdater creates error entries for HTTP status 200 + +🔴 link:https://github.com/devonfw/IDEasy/issues/1787[#1787] tracking yarn versions broken + +🟡 link:https://github.com/devonfw/IDEasy/issues/891[#891] Improve Url Updater Report Overview + +🟡 link:https://github.com/devonfw/IDEasy/issues/1447[#1447] Cover checksum verification in JUnit + +🟡 link:https://github.com/devonfw/IDEasy/issues/1651[#1651] Move status.json files out of ide-urls to own repo + +🟡 link:https://github.com/devonfw/IDEasy/issues/1849[#1849] Support VSCodium + +🟡 link:https://github.com/devonfw/IDEasy/issues/1884[#1884] Implement proper ZIP extraction + + +3+^h| Shell and Terminal +| Shell integration +| 🔴 Bug +| 🔴 link:https://github.com/devonfw/IDEasy/issues/836[#836] Exit is completed in wrong places + +🔴 link:https://github.com/devonfw/IDEasy/issues/1746[#1746] ide shell broken + +🔴 link:https://github.com/devonfw/IDEasy/issues/1842[#1842] Infinite completion of exit subcommand + +🟡 link:https://github.com/devonfw/IDEasy/issues/821[#821] Allow User to remove "ide " prefix in ide shell for non-IDEasy command + +🟡 link:https://github.com/devonfw/IDEasy/issues/822[#822] Handle long CWD paths in shell prompt + +🟡 link:https://github.com/devonfw/IDEasy/issues/1135[#1135] IDEasy does not set env variables on Windows PowerShell + +| Shell completion +| 🚨 Blocker +| 🚨 link:https://github.com/devonfw/IDEasy/issues/1134[#1134] IDEasy autocompletion gets stuck if license agreement file was not found + +🔴 link:https://github.com/devonfw/IDEasy/issues/551[#551] Autocompletion and list-versions make OS-agnostic suggestions + +🔴 link:https://github.com/devonfw/IDEasy/issues/1842[#1842] Infinite completion of exit subcommand + +🟡 link:https://github.com/devonfw/IDEasy/issues/169[#169] Check if we want to utilize TailTipWidgets for the autocompleter + +🟡 link:https://github.com/devonfw/IDEasy/issues/1392[#1392] Smart completion + + +3+^h| Infrastructure +| Proxy / Network +| 🔴 Bug +| 🔴 link:https://github.com/devonfw/IDEasy/issues/897[#897] HTTP Proxy with TLS termination causing errors + +| Security / Credentials +| 🔴 Bug +| 🔴 link:https://github.com/devonfw/IDEasy/issues/772[#772] CVE-2023-7272 in org.eclipse.parsson 1.1.7 + +🔴 link:https://github.com/devonfw/IDEasy/issues/1775[#1775] Validate and Fix CPE Vendor/Product Identifiers for All Tools + +🟡 link:https://github.com/devonfw/IDEasy/issues/98[#98] Ability to secure downloads from custom repository + +🟡 link:https://github.com/devonfw/IDEasy/issues/190[#190] Improve #103: security warning for CVEs in file tool/edition/security + +🟡 link:https://github.com/devonfw/IDEasy/issues/1628[#1628] Support for OS specific CVEs + + +3+^h| Repository and Workspace +| Repository management +| 🔴 Bug +| 🔴 link:https://github.com/devonfw/IDEasy/issues/690[#690] UpdateUrls workflow timeout not working + +🟡 link:https://github.com/devonfw/IDEasy/issues/492[#492] Use Maven dependency cache to optimize workflow running times + +🟡 link:https://github.com/devonfw/IDEasy/issues/1164[#1164] Automatic project import + +🟡 link:https://github.com/devonfw/IDEasy/issues/1165[#1165] Automatic project import for Eclipse + +🟡 link:https://github.com/devonfw/IDEasy/issues/1167[#1167] Automatic project import for VSCode + +🟡 link:https://github.com/devonfw/IDEasy/issues/1216[#1216] Release workflow should only deploy artifacts after all tests passed + +| Workspace management +| 🟡 Enhancement +| 🟡 link:https://github.com/devonfw/IDEasy/issues/735[#735] Enhance workspace configuration with generic overlay from settings/works … + + +3+^h| Plugin Management +| Plugin management +| 🔴 Bug +| 🔴 link:https://github.com/devonfw/IDEasy/issues/1263[#1263] Fix android-studio workspace templates + +🔴 link:https://github.com/devonfw/IDEasy/issues/1352[#1352] [Linux] VSCode WSL warning prompt blocking VSCode plugin installation + +🔴 link:https://github.com/devonfw/IDEasy/issues/1548[#1548] [Win] Windows file locking error on update with plugins + +🔴 link:https://github.com/devonfw/IDEasy/issues/1844[#1844] [Linux] `ide install vscode` or `ide vscode` freezes at "installing plugins" ste … + +🟡 link:https://github.com/devonfw/IDEasy/issues/449[#449] Consider integration of continue GenAI coding assistant + +🟡 link:https://github.com/devonfw/IDEasy/issues/1525[#1525] lombok not correctly installed in eclipse + +🟡 link:https://github.com/devonfw/IDEasy/issues/1754[#1754] Add version support to vscode settings .plugin files + +🟡 link:https://github.com/devonfw/IDEasy/issues/1880[#1880] Reinstall all plugins for IDE in force mode + + +3+^h| Observability +| Logging / Debug output +| 🟡 Enhancement +| 🟡 link:https://github.com/devonfw/IDEasy/issues/1689[#1689] Fix user commnication when switching the Java version from the default t … + +|=== + +== Windows Tools — 0 blocker(s), 21 bug(s), 41 enhancement(s) + +Open issues labelled `windows` or without any OS label (cross-platform issues appear in every OS section). + +=== Tools + +NOTE: Components with no open issues are omitted from this table. + +[%header, cols="3,^2,7"] +|=== +| Tool | Status | Issues +| Android Studio +| 🔴 Bug +| 🔴 link:https://github.com/devonfw/IDEasy/issues/1263[#1263] Fix android-studio workspace templates + +| AWS CLI +| 🟡 Enhancement +| 🟡 link:https://github.com/devonfw/IDEasy/issues/703[#703] Support AWS CDK + +| Azure CLI +| 🔴 Bug +| 🔴 link:https://github.com/devonfw/IDEasy/issues/855[#855] ide az config not working + +| Custom tool support +| 🟡 Enhancement +| 🟡 link:https://github.com/devonfw/IDEasy/issues/756[#756] Implement CustomToolRepositoryTest + +🟡 link:https://github.com/devonfw/IDEasy/issues/930[#930] Refactor `JsonPrettyPrinter` to be usable in CustomToolJson + +| Docker +| 🔴 Bug +| 🔴 link:https://github.com/devonfw/IDEasy/issues/44[#44] DockerUrlUpdater not finding/adding specific versions + +🔴 link:https://github.com/devonfw/IDEasy/issues/1659[#1659] Global tools run tool while installation is running in background + +🟡 link:https://github.com/devonfw/IDEasy/issues/1181[#1181] Improve url updater for docker desktop to pull all necessary versions + +🟡 link:https://github.com/devonfw/IDEasy/issues/1868[#1868] Revision of the functionality of global tool commandlets + +| dotnet +| 🟡 Enhancement +| 🟡 link:https://github.com/devonfw/IDEasy/issues/701[#701] Fix Dotnet tests on our CI + +| Eclipse +| 🟡 Enhancement +| 🟡 link:https://github.com/devonfw/IDEasy/issues/1165[#1165] Automatic project import for Eclipse + +🟡 link:https://github.com/devonfw/IDEasy/issues/1525[#1525] lombok not correctly installed in eclipse + +| GCViewer +| 🟡 Enhancement +| 🟡 link:https://github.com/devonfw/IDEasy/issues/825[#825] Consider adding GC Log Analyzer + +| git +| 🔴 Bug +| 🔴 link:https://github.com/devonfw/IDEasy/issues/1579[#1579] IDEasy uninstall after a failed MSI installation does not work + +🟡 link:https://github.com/devonfw/IDEasy/issues/714[#714] Improve UX for settings repository + +🟡 link:https://github.com/devonfw/IDEasy/issues/1694[#1694] Fix behavior when providing a wrong git URL + +🟡 link:https://github.com/devonfw/IDEasy/issues/1695[#1695] Clone settings to temporary directory, analyse, and then move + +| GitHub Copilot +| 🟡 Enhancement +| 🟡 link:https://github.com/devonfw/IDEasy/issues/1717[#1717] Add github-copliot-cli as software package + +| GUI / IDE launcher +| 🔴 Bug +| 🔴 link:https://github.com/devonfw/IDEasy/issues/1892[#1892] pom.xml required for launching gui not included in release/native builds + +🟡 link:https://github.com/devonfw/IDEasy/issues/1295[#1295] IDEasy Dashboard Epic + +🟡 link:https://github.com/devonfw/IDEasy/issues/1296[#1296] Implement IdeContext properly for Dashboard + +🟡 link:https://github.com/devonfw/IDEasy/issues/1784[#1784] Implement JavaFX based progress bars for the GUI + +🟡 link:https://github.com/devonfw/IDEasy/issues/1785[#1785] Implemenent confirmation modals using JavaFX + +🟡 link:https://github.com/devonfw/IDEasy/issues/1802[#1802] Enable state management for the IdeContext in the GUI. + +🟡 link:https://github.com/devonfw/IDEasy/issues/1840[#1840] Management of tool installations in the GUI + +| IntelliJ IDEA +| 🔴 Bug +| 🔴 link:https://github.com/devonfw/IDEasy/issues/120[#120] intellij does not use our settings when we create a new project within i … + +🔴 link:https://github.com/devonfw/IDEasy/issues/717[#717] IDEasy does not start Intellij if license was not accepted + +🔴 link:https://github.com/devonfw/IDEasy/issues/1501[#1501] Starting intellij leads to error popup + +🟡 link:https://github.com/devonfw/IDEasy/issues/992[#992] Support multiple attributes for merge:id + +| Java (JDK) +| 🟡 Enhancement +| 🟡 link:https://github.com/devonfw/IDEasy/issues/72[#72] Add further editions of java + +| Kotlin Compiler +| 🔴 Bug +| 🔴 link:https://github.com/devonfw/IDEasy/issues/857[#857] kotlinc bash does not get keyboard inputs + +| kubectl +| 🔴 Bug +| 🔴 link:https://github.com/devonfw/IDEasy/issues/1659[#1659] Global tools run tool while installation is running in background + +| Maven +| 🔴 Bug +| 🔴 link:https://github.com/devonfw/IDEasy/issues/594[#594] Still windows file locking problems + +| Node.js +| 🔴 Bug +| 🔴 link:https://github.com/devonfw/IDEasy/issues/859[#859] node shell not starting + +| npm +| 🔴 Bug +| 🔴 link:https://github.com/devonfw/IDEasy/issues/1886[#1886] NpmBasedCommandlet shows wrong tool version after install + +🟡 link:https://github.com/devonfw/IDEasy/issues/700[#700] Add Npm run test + +| pgAdmin +| 🔴 Bug +| 🔴 link:https://github.com/devonfw/IDEasy/issues/861[#861] install of pgadmin throws an IllegalStateException when the install wizz … + +🟡 link:https://github.com/devonfw/IDEasy/issues/1868[#1868] Revision of the functionality of global tool commandlets + +| Python +| 🔴 Bug +| 🔴 link:https://github.com/devonfw/IDEasy/issues/1124[#1124] Ensure latest version of Python is installed + +| Rancher Desktop +| 🟡 Enhancement +| 🟡 link:https://github.com/devonfw/IDEasy/issues/1868[#1868] Revision of the functionality of global tool commandlets + +| Terraform +| 🔴 Bug +| 🔴 link:https://github.com/devonfw/IDEasy/issues/1391[#1391] bashrc messed with terraform completions + +| uv +| 🔴 Bug +| 🔴 link:https://github.com/devonfw/IDEasy/issues/1518[#1518] uv tools are installed globally + +| VS Code +| 🟡 Enhancement +| 🟡 link:https://github.com/devonfw/IDEasy/issues/787[#787] Provide variable to disable open new workspace + +🟡 link:https://github.com/devonfw/IDEasy/issues/1167[#1167] Automatic project import for VSCode + +🟡 link:https://github.com/devonfw/IDEasy/issues/1715[#1715] Adapt settings to inject java runtime future proove into vscode + +🟡 link:https://github.com/devonfw/IDEasy/issues/1754[#1754] Add version support to vscode settings .plugin files + +🟡 link:https://github.com/devonfw/IDEasy/issues/1849[#1849] Support VSCodium + +| Yarn +| 🔴 Bug +| 🔴 link:https://github.com/devonfw/IDEasy/issues/1787[#1787] tracking yarn versions broken + +|=== + +== Linux Tools — 0 blocker(s), 22 bug(s), 44 enhancement(s) + +Open issues labelled `linux` or without any OS label (cross-platform issues appear in every OS section). + +=== Tools + +NOTE: Components with no open issues are omitted from this table. + +[%header, cols="3,^2,7"] +|=== +| Tool | Status | Issues +| Android Studio +| 🔴 Bug +| 🔴 link:https://github.com/devonfw/IDEasy/issues/1263[#1263] Fix android-studio workspace templates + +| AWS CLI +| 🟡 Enhancement +| 🟡 link:https://github.com/devonfw/IDEasy/issues/703[#703] Support AWS CDK + +| Azure CLI +| 🔴 Bug +| 🔴 link:https://github.com/devonfw/IDEasy/issues/802[#802] az not working on Mac + +🔴 link:https://github.com/devonfw/IDEasy/issues/855[#855] ide az config not working + +| Custom tool support +| 🟡 Enhancement +| 🟡 link:https://github.com/devonfw/IDEasy/issues/756[#756] Implement CustomToolRepositoryTest + +🟡 link:https://github.com/devonfw/IDEasy/issues/930[#930] Refactor `JsonPrettyPrinter` to be usable in CustomToolJson + +| Docker +| 🔴 Bug +| 🔴 link:https://github.com/devonfw/IDEasy/issues/44[#44] DockerUrlUpdater not finding/adding specific versions + +🔴 link:https://github.com/devonfw/IDEasy/issues/1659[#1659] Global tools run tool while installation is running in background + +🟡 link:https://github.com/devonfw/IDEasy/issues/950[#950] avoid --no-gpg-checks for docker installation on SUSE Linux + +🟡 link:https://github.com/devonfw/IDEasy/issues/1181[#1181] Improve url updater for docker desktop to pull all necessary versions + +🟡 link:https://github.com/devonfw/IDEasy/issues/1868[#1868] Revision of the functionality of global tool commandlets + +| dotnet +| 🟡 Enhancement +| 🟡 link:https://github.com/devonfw/IDEasy/issues/694[#694] Add linux support to dotnet tool + +🟡 link:https://github.com/devonfw/IDEasy/issues/701[#701] Fix Dotnet tests on our CI + +| Eclipse +| 🟡 Enhancement +| 🟡 link:https://github.com/devonfw/IDEasy/issues/1165[#1165] Automatic project import for Eclipse + +🟡 link:https://github.com/devonfw/IDEasy/issues/1525[#1525] lombok not correctly installed in eclipse + +| GCViewer +| 🟡 Enhancement +| 🟡 link:https://github.com/devonfw/IDEasy/issues/825[#825] Consider adding GC Log Analyzer + +| git +| 🟡 Enhancement +| 🟡 link:https://github.com/devonfw/IDEasy/issues/714[#714] Improve UX for settings repository + +🟡 link:https://github.com/devonfw/IDEasy/issues/1694[#1694] Fix behavior when providing a wrong git URL + +🟡 link:https://github.com/devonfw/IDEasy/issues/1695[#1695] Clone settings to temporary directory, analyse, and then move + +| GitHub Copilot +| 🟡 Enhancement +| 🟡 link:https://github.com/devonfw/IDEasy/issues/1717[#1717] Add github-copliot-cli as software package + +| GUI / IDE launcher +| 🔴 Bug +| 🔴 link:https://github.com/devonfw/IDEasy/issues/1892[#1892] pom.xml required for launching gui not included in release/native builds + +🟡 link:https://github.com/devonfw/IDEasy/issues/1295[#1295] IDEasy Dashboard Epic + +🟡 link:https://github.com/devonfw/IDEasy/issues/1296[#1296] Implement IdeContext properly for Dashboard + +🟡 link:https://github.com/devonfw/IDEasy/issues/1784[#1784] Implement JavaFX based progress bars for the GUI + +🟡 link:https://github.com/devonfw/IDEasy/issues/1785[#1785] Implemenent confirmation modals using JavaFX + +🟡 link:https://github.com/devonfw/IDEasy/issues/1802[#1802] Enable state management for the IdeContext in the GUI. + +🟡 link:https://github.com/devonfw/IDEasy/issues/1840[#1840] Management of tool installations in the GUI + +| IntelliJ IDEA +| 🔴 Bug +| 🔴 link:https://github.com/devonfw/IDEasy/issues/120[#120] intellij does not use our settings when we create a new project within i … + +🔴 link:https://github.com/devonfw/IDEasy/issues/717[#717] IDEasy does not start Intellij if license was not accepted + +🔴 link:https://github.com/devonfw/IDEasy/issues/1501[#1501] Starting intellij leads to error popup + +🟡 link:https://github.com/devonfw/IDEasy/issues/992[#992] Support multiple attributes for merge:id + +| Java (JDK) +| 🟡 Enhancement +| 🟡 link:https://github.com/devonfw/IDEasy/issues/72[#72] Add further editions of java + +| Kotlin Compiler +| 🔴 Bug +| 🔴 link:https://github.com/devonfw/IDEasy/issues/857[#857] kotlinc bash does not get keyboard inputs + +| kubectl +| 🔴 Bug +| 🔴 link:https://github.com/devonfw/IDEasy/issues/1659[#1659] Global tools run tool while installation is running in background + +| Node.js +| 🔴 Bug +| 🔴 link:https://github.com/devonfw/IDEasy/issues/859[#859] node shell not starting + +| npm +| 🔴 Bug +| 🔴 link:https://github.com/devonfw/IDEasy/issues/1886[#1886] NpmBasedCommandlet shows wrong tool version after install + +🟡 link:https://github.com/devonfw/IDEasy/issues/700[#700] Add Npm run test + +| pgAdmin +| 🔴 Bug +| 🔴 link:https://github.com/devonfw/IDEasy/issues/861[#861] install of pgadmin throws an IllegalStateException when the install wizz … + +🟡 link:https://github.com/devonfw/IDEasy/issues/1868[#1868] Revision of the functionality of global tool commandlets + +| Python +| 🔴 Bug +| 🔴 link:https://github.com/devonfw/IDEasy/issues/1124[#1124] Ensure latest version of Python is installed + +🟡 link:https://github.com/devonfw/IDEasy/issues/1046[#1046] Add Support for Python on Linux + +| Rancher Desktop +| 🔴 Bug +| 🔴 link:https://github.com/devonfw/IDEasy/issues/867[#867] Docker (Rancher Desktop) not working on Linux + +🟡 link:https://github.com/devonfw/IDEasy/issues/1868[#1868] Revision of the functionality of global tool commandlets + +| Terraform +| 🔴 Bug +| 🔴 link:https://github.com/devonfw/IDEasy/issues/1391[#1391] bashrc messed with terraform completions + +| uv +| 🔴 Bug +| 🔴 link:https://github.com/devonfw/IDEasy/issues/1518[#1518] uv tools are installed globally + +| VS Code +| 🔴 Bug +| 🔴 link:https://github.com/devonfw/IDEasy/issues/1352[#1352] VSCode WSL warning prompt blocking VSCode plugin installation + +🔴 link:https://github.com/devonfw/IDEasy/issues/1844[#1844] `ide install vscode` or `ide vscode` freezes at "installing plugins" ste … + +🟡 link:https://github.com/devonfw/IDEasy/issues/787[#787] Provide variable to disable open new workspace + +🟡 link:https://github.com/devonfw/IDEasy/issues/1167[#1167] Automatic project import for VSCode + +🟡 link:https://github.com/devonfw/IDEasy/issues/1715[#1715] Adapt settings to inject java runtime future proove into vscode + +🟡 link:https://github.com/devonfw/IDEasy/issues/1754[#1754] Add version support to vscode settings .plugin files + +🟡 link:https://github.com/devonfw/IDEasy/issues/1849[#1849] Support VSCodium + +| Yarn +| 🔴 Bug +| 🔴 link:https://github.com/devonfw/IDEasy/issues/1787[#1787] tracking yarn versions broken + +|=== + +== macOS Tools — 0 blocker(s), 31 bug(s), 42 enhancement(s) + +Open issues labelled `macOS` or without any OS label (cross-platform issues appear in every OS section). + +=== Tools + +NOTE: Components with no open issues are omitted from this table. + +[%header, cols="3,^2,7"] +|=== +| Tool | Status | Issues +| Android Studio +| 🔴 Bug +| 🔴 link:https://github.com/devonfw/IDEasy/issues/1263[#1263] Fix android-studio workspace templates + +🟡 link:https://github.com/devonfw/IDEasy/issues/863[#863] Mac x64 android-studio 2024 releases missing + +| AWS CLI +| 🔴 Bug +| 🔴 link:https://github.com/devonfw/IDEasy/issues/796[#796] cannot install aws on Mac + +🔴 link:https://github.com/devonfw/IDEasy/issues/864[#864] AWS is not working on Mac x64 + +🟡 link:https://github.com/devonfw/IDEasy/issues/703[#703] Support AWS CDK + +| Azure CLI +| 🔴 Bug +| 🔴 link:https://github.com/devonfw/IDEasy/issues/802[#802] az not working on Mac + +🔴 link:https://github.com/devonfw/IDEasy/issues/855[#855] ide az config not working + +🔴 link:https://github.com/devonfw/IDEasy/issues/865[#865] Az is not working on Mac x64 + +| Custom tool support +| 🟡 Enhancement +| 🟡 link:https://github.com/devonfw/IDEasy/issues/756[#756] Implement CustomToolRepositoryTest + +🟡 link:https://github.com/devonfw/IDEasy/issues/930[#930] Refactor `JsonPrettyPrinter` to be usable in CustomToolJson + +| Docker +| 🔴 Bug +| 🔴 link:https://github.com/devonfw/IDEasy/issues/44[#44] DockerUrlUpdater not finding/adding specific versions + +🔴 link:https://github.com/devonfw/IDEasy/issues/1659[#1659] Global tools run tool while installation is running in background + +🟡 link:https://github.com/devonfw/IDEasy/issues/1181[#1181] Improve url updater for docker desktop to pull all necessary versions + +🟡 link:https://github.com/devonfw/IDEasy/issues/1868[#1868] Revision of the functionality of global tool commandlets + +| dotnet +| 🟡 Enhancement +| 🟡 link:https://github.com/devonfw/IDEasy/issues/701[#701] Fix Dotnet tests on our CI + +| Eclipse +| 🔴 Bug +| 🔴 link:https://github.com/devonfw/IDEasy/issues/868[#868] Eclipse does not work on Mac x64 + +🔴 link:https://github.com/devonfw/IDEasy/issues/1187[#1187] Eclipse plugin installation on mac is not working + +🟡 link:https://github.com/devonfw/IDEasy/issues/1165[#1165] Automatic project import for Eclipse + +🟡 link:https://github.com/devonfw/IDEasy/issues/1525[#1525] lombok not correctly installed in eclipse + +| GCViewer +| 🔴 Bug +| 🔴 link:https://github.com/devonfw/IDEasy/issues/869[#869] gcviewer logs errors on Mac X64 + +🟡 link:https://github.com/devonfw/IDEasy/issues/825[#825] Consider adding GC Log Analyzer + +| git +| 🟡 Enhancement +| 🟡 link:https://github.com/devonfw/IDEasy/issues/714[#714] Improve UX for settings repository + +🟡 link:https://github.com/devonfw/IDEasy/issues/1694[#1694] Fix behavior when providing a wrong git URL + +🟡 link:https://github.com/devonfw/IDEasy/issues/1695[#1695] Clone settings to temporary directory, analyse, and then move + +| GitHub Copilot +| 🟡 Enhancement +| 🟡 link:https://github.com/devonfw/IDEasy/issues/1717[#1717] Add github-copliot-cli as software package + +| GUI / IDE launcher +| 🔴 Bug +| 🔴 link:https://github.com/devonfw/IDEasy/issues/1892[#1892] pom.xml required for launching gui not included in release/native builds + +🟡 link:https://github.com/devonfw/IDEasy/issues/1295[#1295] IDEasy Dashboard Epic + +🟡 link:https://github.com/devonfw/IDEasy/issues/1296[#1296] Implement IdeContext properly for Dashboard + +🟡 link:https://github.com/devonfw/IDEasy/issues/1784[#1784] Implement JavaFX based progress bars for the GUI + +🟡 link:https://github.com/devonfw/IDEasy/issues/1785[#1785] Implemenent confirmation modals using JavaFX + +🟡 link:https://github.com/devonfw/IDEasy/issues/1802[#1802] Enable state management for the IdeContext in the GUI. + +🟡 link:https://github.com/devonfw/IDEasy/issues/1840[#1840] Management of tool installations in the GUI + +| IntelliJ IDEA +| 🔴 Bug +| 🔴 link:https://github.com/devonfw/IDEasy/issues/120[#120] intellij does not use our settings when we create a new project within i … + +🔴 link:https://github.com/devonfw/IDEasy/issues/717[#717] IDEasy does not start Intellij if license was not accepted + +🔴 link:https://github.com/devonfw/IDEasy/issues/1501[#1501] Starting intellij leads to error popup + +🔴 link:https://github.com/devonfw/IDEasy/issues/1512[#1512] Cannot run Intellij on Mac due to file permission error + +🟡 link:https://github.com/devonfw/IDEasy/issues/992[#992] Support multiple attributes for merge:id + +| Java (JDK) +| 🟡 Enhancement +| 🟡 link:https://github.com/devonfw/IDEasy/issues/72[#72] Add further editions of java + +| Kotlin Compiler +| 🔴 Bug +| 🔴 link:https://github.com/devonfw/IDEasy/issues/857[#857] kotlinc bash does not get keyboard inputs + +| kubectl +| 🔴 Bug +| 🔴 link:https://github.com/devonfw/IDEasy/issues/1659[#1659] Global tools run tool while installation is running in background + +| Node.js +| 🔴 Bug +| 🔴 link:https://github.com/devonfw/IDEasy/issues/859[#859] node shell not starting + +| npm +| 🔴 Bug +| 🔴 link:https://github.com/devonfw/IDEasy/issues/801[#801] npm not working on Mac + +🔴 link:https://github.com/devonfw/IDEasy/issues/1886[#1886] NpmBasedCommandlet shows wrong tool version after install + +🟡 link:https://github.com/devonfw/IDEasy/issues/700[#700] Add Npm run test + +| pgAdmin +| 🔴 Bug +| 🔴 link:https://github.com/devonfw/IDEasy/issues/798[#798] pgadmin not working on Mac + +🔴 link:https://github.com/devonfw/IDEasy/issues/861[#861] install of pgadmin throws an IllegalStateException when the install wizz … + +🔴 link:https://github.com/devonfw/IDEasy/issues/878[#878] pgadmin does not work on Mac x64 + +🟡 link:https://github.com/devonfw/IDEasy/issues/1868[#1868] Revision of the functionality of global tool commandlets + +| Python +| 🔴 Bug +| 🔴 link:https://github.com/devonfw/IDEasy/issues/1124[#1124] Ensure latest version of Python is installed + +| Rancher Desktop +| 🟡 Enhancement +| 🟡 link:https://github.com/devonfw/IDEasy/issues/1868[#1868] Revision of the functionality of global tool commandlets + +| SonarQube +| 🔴 Bug +| 🔴 link:https://github.com/devonfw/IDEasy/issues/800[#800] sonar not working on Mac + +| Terraform +| 🔴 Bug +| 🔴 link:https://github.com/devonfw/IDEasy/issues/1391[#1391] bashrc messed with terraform completions + +| uv +| 🔴 Bug +| 🔴 link:https://github.com/devonfw/IDEasy/issues/1518[#1518] uv tools are installed globally + +| VS Code +| 🔴 Bug +| 🔴 link:https://github.com/devonfw/IDEasy/issues/862[#862] vscode does not work on Mac + +🟡 link:https://github.com/devonfw/IDEasy/issues/787[#787] Provide variable to disable open new workspace + +🟡 link:https://github.com/devonfw/IDEasy/issues/1167[#1167] Automatic project import for VSCode + +🟡 link:https://github.com/devonfw/IDEasy/issues/1715[#1715] Adapt settings to inject java runtime future proove into vscode + +🟡 link:https://github.com/devonfw/IDEasy/issues/1754[#1754] Add version support to vscode settings .plugin files + +🟡 link:https://github.com/devonfw/IDEasy/issues/1849[#1849] Support VSCodium + +| Yarn +| 🔴 Bug +| 🔴 link:https://github.com/devonfw/IDEasy/issues/1787[#1787] tracking yarn versions broken + +|=== + +== Unassigned Issues + +52 issue(s) matched no known tool or commandlet label. Apply the appropriate label on GitHub, or add an entry to ``TOOLS``, ``COMMANDLETS``, or their ``labels`` list in this script. + +[%header, cols="^1,4,3"] +|=== +| Issue | Summary | Labels +| link:https://github.com/devonfw/IDEasy/issues/45[#45] +| Add compression for native images +| enhancement + +| link:https://github.com/devonfw/IDEasy/issues/75[#75] +| Consider integration of oracle XE +| enhancement + +| link:https://github.com/devonfw/IDEasy/issues/162[#162] +| Difficulty to find the right spot in the documentation +| documentation, enhancement + +| link:https://github.com/devonfw/IDEasy/issues/218[#218] +| Add possibility to start a command in a new window with the process buil … +| enhancement + +| link:https://github.com/devonfw/IDEasy/issues/370[#370] +| Create local github actions for tests +| enhancement, test, integration-tests, workflow + +| link:https://github.com/devonfw/IDEasy/issues/378[#378] +| Missing comprehensive "Getting started guide" causing fail in getting st … +| documentation + +| link:https://github.com/devonfw/IDEasy/issues/379[#379] +| Rename default branch of repo ide-urls from master to main +| enhancement + +| link:https://github.com/devonfw/IDEasy/issues/412[#412] +| consider integration of lama +| enhancement, AI + +| link:https://github.com/devonfw/IDEasy/issues/516[#516] +| IdeToolCommandlet: add option and support for import of project(s) +| enhancement + +| link:https://github.com/devonfw/IDEasy/issues/599[#599] +| Add release for windows-arm architecture +| enhancement, windows, ARM + +| link:https://github.com/devonfw/IDEasy/issues/607[#607] +| Test for environment variables of process contexts +| enhancement, test, process + +| link:https://github.com/devonfw/IDEasy/issues/611[#611] +| Git pull on settings with local branch and without remote throws excepti … +| — + +| link:https://github.com/devonfw/IDEasy/issues/629[#629] +| Recycle devonfw-ide documentation +| enhancement + +| link:https://github.com/devonfw/IDEasy/issues/726[#726] +| Replace hardcoded dependencies with dependencies.json in ide-urls +| enhancement, Epic + +| link:https://github.com/devonfw/IDEasy/issues/741[#741] +| Add a warning message for legacy devonfw-ide settings users +| enhancement + +| link:https://github.com/devonfw/IDEasy/issues/768[#768] +| Improve IntelliJ configuration (annotation processing, auto-import, mave … +| enhancement + +| link:https://github.com/devonfw/IDEasy/issues/788[#788] +| Add more starting flags to IDE commandlets +| enhancement + +| link:https://github.com/devonfw/IDEasy/issues/795[#795] +| Setup not working properly on Mac (and zsh) +| duplicate, macOS + +| link:https://github.com/devonfw/IDEasy/issues/840[#840] +| git fetch does not work with multiple remotes +| — + +| link:https://github.com/devonfw/IDEasy/issues/854[#854] +| Kubectl not working on linux +| linux + +| link:https://github.com/devonfw/IDEasy/issues/882[#882] +| Skip step if no installation was required +| enhancement + +| link:https://github.com/devonfw/IDEasy/issues/892[#892] +| Improve GitContextTest tests to actually test something +| enhancement + +| link:https://github.com/devonfw/IDEasy/issues/1031[#1031] +| Integration of OpenRewrite +| enhancement, rewrite + +| link:https://github.com/devonfw/IDEasy/issues/1059[#1059] +| Improve and fix dependency mechanism +| enhancement, dependencies + +| link:https://github.com/devonfw/IDEasy/issues/1150[#1150] +| Full ARM support +| enhancement, Epic, ARM + +| link:https://github.com/devonfw/IDEasy/issues/1155[#1155] +| Improve IntelliJ layout +| enhancement + +| link:https://github.com/devonfw/IDEasy/issues/1206[#1206] +| java.util.zip.ZipException when opening Android Studio archives from ver … +| enhancement + +| link:https://github.com/devonfw/IDEasy/issues/1215[#1215] +| nightly build not executing tests anymore +| enhancement + +| link:https://github.com/devonfw/IDEasy/issues/1225[#1225] +| Create new IDEasy introduction videos +| enhancement + +| link:https://github.com/devonfw/IDEasy/issues/1311[#1311] +| improve IDE_MIN_VERSION support +| enhancement + +| link:https://github.com/devonfw/IDEasy/issues/1329[#1329] +| Add minikube tool commandlet +| enhancement + +| link:https://github.com/devonfw/IDEasy/issues/1422[#1422] +| Refactor tests to remove windowsJunctionsAreUsed +| test, internal, ready-to-implement + +| link:https://github.com/devonfw/IDEasy/issues/1453[#1453] +| Allow co-authored commits in cla assistant +| enhancement, waiting for feedback + +| link:https://github.com/devonfw/IDEasy/issues/1493[#1493] +| Analyze Scoop Windows CLI installer +| enhancement + +| link:https://github.com/devonfw/IDEasy/issues/1585[#1585] +| Add Insomnia CLI support to IDEasy +| enhancement + +| link:https://github.com/devonfw/IDEasy/issues/1701[#1701] +| Implement Mise-en-place +| enhancement + +| link:https://github.com/devonfw/IDEasy/issues/1716[#1716] +| Add claude-cli as software package +| enhancement, AI, ready-to-implement, claude + +| link:https://github.com/devonfw/IDEasy/issues/1719[#1719] +| Integrate rust +| enhancement, ready-to-implement, rust + +| link:https://github.com/devonfw/IDEasy/issues/1720[#1720] +| Integrate SoapUI +| enhancement + +| link:https://github.com/devonfw/IDEasy/issues/1721[#1721] +| Integrate ruby +| enhancement + +| link:https://github.com/devonfw/IDEasy/issues/1748[#1748] +| Improve IDEasy status documentation +| documentation, enhancement, ready-to-implement + +| link:https://github.com/devonfw/IDEasy/issues/1788[#1788] +| Add ln commandlet to create links +| enhancement, ready-to-implement + +| link:https://github.com/devonfw/IDEasy/issues/1846[#1846] +| Mac Gatekeeper workaround causing errors +| macOS, bugfix + +| link:https://github.com/devonfw/IDEasy/issues/1866[#1866] +| Create ClaudeUrlUpdater +| enhancement, claude + +| link:https://github.com/devonfw/IDEasy/issues/1869[#1869] +| Improve WindowsHelper to search in windows registry +| enhancement, windows, internal, ready-to-implement + +| link:https://github.com/devonfw/IDEasy/issues/1870[#1870] +| Implement generic get-version implementation for global tools under wind … +| enhancement, windows + +| link:https://github.com/devonfw/IDEasy/issues/1873[#1873] +| Implement generic get-edition implementation for global tools under wind … +| enhancement, windows + +| link:https://github.com/devonfw/IDEasy/issues/1882[#1882] +| Create AWS CDK commandlet +| enhancement + +| link:https://github.com/devonfw/IDEasy/issues/1893[#1893] +| Fix Failing Integration Tests workflow +| internal, integration-tests, ready-to-implement + +| link:https://github.com/devonfw/IDEasy/issues/1901[#1901] +| HelpCommandletTest.testIcdHelp fails on german systems +| test + +| link:https://github.com/devonfw/IDEasy/issues/1904[#1904] +| Create Inso commandlet +| enhancement + +| link:https://github.com/devonfw/IDEasy/issues/1905[#1905] +| Create InsoUrlUpdater +| enhancement + +|=== + +== How to Contribute + +=== Adding a new tool +Once a folder is added under `cli/src/main/java/com/devonfw/tools/ide/tool` and issues use that folder +name as a label, the tool appears automatically in the next generated document. +Override the display name by adding an entry to ``TOOLS`` in this script. + +=== Adding a new commandlet or core feature +Add an entry to ``COMMANDLETS``: key = GitHub label, ``display`` = name, +``labels`` = list of alternative label names. Add the key to the appropriate +category in ``COMMANDLET_CATEGORIES``. + +=== Mapping a non-standard label +Add the label to the ``labels`` list of the matching ``TOOLS`` or +``COMMANDLETS`` entry. Issues that still match nothing appear in the +*Unassigned Issues* section.