{ "id": "174628", "key": "DAEMON-311", "fields": { "issuetype": { "id": "2", "description": "A new feature of the product, which has yet to be developed.", "name": "New Feature", "subtask": false }, "project": { "id": "12519", "key": "DAEMON", "name": "Appcelerator Daemon" }, "fixVersions": [ { "id": "20871", "description": "", "name": "Appc Daemon 4.0.0", "archived": false, "released": true, "releaseDate": "2021-01-20" } ], "resolution": { "id": "1", "description": "A fix for this issue is checked into the tree and tested.", "name": "Fixed" }, "resolutiondate": "2020-04-14T21:25:39.000+0000", "created": "2020-01-14T21:40:30.000+0000", "priority": { "name": "High", "id": "2" }, "labels": [ "cb-next" ], "versions": [], "issuelinks": [ { "id": "58191", "type": { "id": "10003", "name": "Relates", "inward": "relates to", "outward": "relates to" }, "inwardIssue": { "id": "174729", "key": "DAEMON-323", "fields": { "summary": "Plugin not found error when running exec to fetch android or ios info", "status": { "description": "A resolution has been taken, and it is awaiting verification by reporter. From here issues are either reopened, or are closed.", "name": "Resolved", "id": "5", "statusCategory": { "id": 3, "key": "done", "colorName": "green", "name": "Done" } }, "priority": { "name": "High", "id": "2" }, "issuetype": { "id": "1", "description": "A problem which impairs or prevents the functions of the product.", "name": "Bug", "subtask": false } } } }, { "id": "58235", "type": { "id": "10003", "name": "Relates", "inward": "relates to", "outward": "relates to" }, "inwardIssue": { "id": "174767", "key": "DAEMON-329", "fields": { "summary": "node_winreglib.node is not a valid Win32 application", "status": { "description": "The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.", "name": "Closed", "id": "6", "statusCategory": { "id": 3, "key": "done", "colorName": "green", "name": "Done" } }, "priority": { "name": "High", "id": "2" }, "issuetype": { "id": "1", "description": "A problem which impairs or prevents the functions of the product.", "name": "Bug", "subtask": false } } } }, { "id": "58236", "type": { "id": "10003", "name": "Relates", "inward": "relates to", "outward": "relates to" }, "inwardIssue": { "id": "174768", "key": "DAEMON-330", "fields": { "summary": "Lerna cannot find Yarn when installing default plugins on Windows", "status": { "description": "The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.", "name": "Closed", "id": "6", "statusCategory": { "id": 3, "key": "done", "colorName": "green", "name": "Done" } }, "priority": { "name": "High", "id": "2" }, "issuetype": { "id": "1", "description": "A problem which impairs or prevents the functions of the product.", "name": "Bug", "subtask": false } } } } ], "assignee": { "name": "cbarber", "key": "cbarber", "displayName": "Chris Barber", "active": true, "timeZone": "America/Chicago" }, "updated": "2020-04-14T21:25:39.000+0000", "status": { "description": "A resolution has been taken, and it is awaiting verification by reporter. From here issues are either reopened, or are closed.", "name": "Resolved", "id": "5", "statusCategory": { "id": 3, "key": "done", "colorName": "green", "name": "Done" } }, "components": [ { "id": "15049", "name": "appcd", "description": "Bootstrap, appcd CLI commands (start, stop, restart, exec, logcat, config, status)" }, { "id": "15050", "name": "appcd-core", "description": "Core daemon logic: config, plugin loader, logging, dispatcher" } ], "description": "Appc Daemon needs a better way to install and manage appcd plugins.\r\n\r\nh4. Problem\r\n\r\nCurrently, {{appcd}} plugins are installed via the {{appcd-default-plugins}} package. When the {{appcd-default-plugins}} package is installed (via {{appcd-core}}, via {{appcd}}), it will attempt to download and install the packages in an npm script. However, npm runs scripts as \"nobody\" which generally does not have access to the user's home directory on macOS and Linux and thus no plugins are installed. Plugins cannot be marked as traditional dependencies since we need to support multiple major versions installed side-by-side.\r\n\r\nWhenever the Appc Daemon is started, it will attempt to reconcile and install the default plugins. This solves the permission issue, but now requires you to start the daemon while online to download the plugins.\r\n\r\nh4. Proposal\r\n\r\n1. Migrate plugin install logic from {{appcd-default-plugins}} to {{appcd-core}}.\r\n\r\n2. Add a {{appcd pm}} command that would allow users to install the default plugins, setup local dev plugins, install 3rd party plugins, uninstall plugins, and view installed plugins. Subcommands include {{list}}, {{install}}, {{uninstall}}, {{search}}, {{update}}, and {{view}}.\r\n\r\n3. Add a file to {{appcd}} containing the prescribed default plugin list based on the list currently in {{appcd-default-plugins}}.\r\n\r\na. We could elect to lockdown plugin versions instead of using semver ranges.\r\nb. We could check online to download an updated list so that we don't have to ship a new {{appcd}} whenever we want to update plugins.\r\n\r\n4. Add a {{appcd setup}} command that leverages the plugin command's logic (from #1) to reconcile and install the default appcd plugins defined in the list (from \\#2). Note that {{appcd setup}} is generic in nature and can be used to configure specific behavior such as telemetry opt-in and proxy settings.\r\n\r\n5. After {{appcd}} is installed, an npm script would print a message instructing the user to run {{\"appcd setup\"}}. Note that no appcd plugins would be installed at install time via an npm script.\r\n\r\n6. Remove {{appcd-default-plugins}}. At runtime, instead of attempting to reconcile and install the default plugins, print the \"{{Run: appcd setup}}\" message.", "attachment": [], "flagged": false, "summary": "Improve appcd plugin management", "creator": { "name": "cbarber", "key": "cbarber", "displayName": "Chris Barber", "active": true, "timeZone": "America/Chicago" }, "subtasks": [], "reporter": { "name": "cbarber", "key": "cbarber", "displayName": "Chris Barber", "active": true, "timeZone": "America/Chicago" }, "environment": null, "closedSprints": [ { "id": 43, "state": "closed", "name": "2020 Sprint 7", "startDate": "2020-04-13T17:48:00.000Z", "endDate": "2020-04-24T17:48:00.000Z", "completeDate": "2020-04-23T18:07:57.225Z", "originBoardId": 93 }, { "id": 1181, "state": "closed", "name": "2020 Sprint 5", "startDate": "2020-03-02T18:45:02.513Z", "endDate": "2020-03-13T18:45:00.000Z", "completeDate": "2020-03-13T16:42:04.632Z", "originBoardId": 114 } ], "comment": { "comments": [ { "id": "455134", "author": { "name": "cbarber", "key": "cbarber", "displayName": "Chris Barber", "active": true, "timeZone": "America/Chicago" }, "body": "PR: https://github.com/appcelerator/appc-daemon/pull/468", "updateAuthor": { "name": "cbarber", "key": "cbarber", "displayName": "Chris Barber", "active": true, "timeZone": "America/Chicago" }, "created": "2020-04-14T21:24:30.000+0000", "updated": "2020-04-14T21:24:30.000+0000" } ], "maxResults": 1, "total": 1, "startAt": 0 } } }