{ "id": "173839", "key": "TIMOB-27208", "fields": { "issuetype": { "id": "1", "description": "A problem which impairs or prevents the functions of the product.", "name": "Bug", "subtask": false }, "project": { "id": "10153", "key": "TIMOB", "name": "Titanium SDK/CLI", "projectCategory": { "id": "10100", "description": "Titanium and related SDKs used in application development", "name": "Client" } }, "fixVersions": [], "resolution": null, "resolutiondate": null, "created": "2019-07-05T09:36:58.000+0000", "priority": { "name": "None", "id": "6" }, "labels": [ "cb-tooling", "engSchedule", "regression" ], "versions": [ { "id": "20412", "name": "Release 8.1.0", "archived": false, "released": true, "releaseDate": "2019-08-13" }, { "id": "20827", "name": "Release 8.2.0", "archived": false, "released": true, "releaseDate": "2019-09-19" } ], "issuelinks": [ { "id": "57727", "type": { "id": "10122", "name": "Gantt: start-finish", "inward": "is triggered by", "outward": "is triggering" }, "inwardIssue": { "id": "154836", "key": "TIMOB-20379", "fields": { "summary": "Support module distribution via NPM", "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": "None", "id": "6" }, "issuetype": { "id": "7", "description": "gh.issue.story.desc", "name": "Story", "subtask": false } } } }, { "id": "58132", "type": { "id": "10003", "name": "Relates", "inward": "relates to", "outward": "relates to" }, "inwardIssue": { "id": "174541", "key": "TIMOB-27654", "fields": { "summary": "Module names referenced in tiapp.xml are now case-sensitive", "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": "None", "id": "6" }, "issuetype": { "id": "1", "description": "A problem which impairs or prevents the functions of the product.", "name": "Bug", "subtask": false } } } } ], "assignee": { "name": "emerriman", "key": "emerriman", "displayName": "Eric Merriman ", "active": true, "timeZone": "America/Los_Angeles" }, "updated": "2020-01-31T19:20:41.000+0000", "status": { "description": "The issue is open and ready for the assignee to start work on it.", "name": "Open", "id": "1", "statusCategory": { "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do" } }, "components": [ { "id": "13103", "name": "CLI", "description": "Node-based command line interface" } ], "description": "h5.Description \r\n\r\nWhen detecting modules prior to 8.1.0 the folder name was used as the source of truth for the module id, with the changes in TIMOB-20379 we started to use the id field in the manifest as the source of truth. \r\n\r\nI guess it could be argued that this is down to to.imagcache having an error and our behaviour now is more correct, it *_is_* a change of behaviour from previous SDKs.\r\n\r\n\r\nh5.Steps to reproduce\r\n1. Clone https://github.com/ewanharris/test-module-detection\r\n2. Build the project with {{appc run -p ios --build-only}}\r\n3. Change the SDK to and 8.2.0 or 8.1.0 SDK \r\n4. Repeat step 2 \r\n\r\nh5.Actual\r\n\r\nWhen using 8.2.0/8.1.0 the build fails as it cant find the to.imagecache module\r\n\r\nh5.Expected\r\n\r\nUnsure, it could argued we're being more correct now but this has introduced a regression through a change in behaviour Build should find the to.imagecache module", "attachment": [], "flagged": false, "summary": "CLI: Build fails to find modules due to different naming in manifest and folder", "creator": { "name": "eharris", "key": "eharris", "displayName": "Ewan Harris", "active": true, "timeZone": "Europe/Dublin" }, "subtasks": [], "reporter": { "name": "eharris", "key": "eharris", "displayName": "Ewan Harris", "active": true, "timeZone": "Europe/Dublin" }, "environment": "SDK: 8.2.0.v20190703131453, 8.1.0.v20190701132634\r\n", "comment": { "comments": [ { "id": "449684", "author": { "name": "cwilliams", "key": "cwilliams", "displayName": "Christopher Williams", "active": true, "timeZone": "America/New_York" }, "body": "So the module in question actually has a fixed moduleid as of a year ago. I'm not certain how common this is for 3rd party modules, but I think we should consider opening a separate ticket for the module build process to check inconsistencies like this one (and others).\r\n\r\nPossible checks:\r\n- inconsistent module id versus folder name\r\n- inconsistent version versus folder version\r\n- mis-matching versions across different platforms? (try to encourage keeping them in sync?)\r\n\r\nIt was also raised that we should consider supporting package.json to replace the manifest file.", "updateAuthor": { "name": "cwilliams", "key": "cwilliams", "displayName": "Christopher Williams", "active": true, "timeZone": "America/New_York" }, "created": "2019-07-09T16:05:37.000+0000", "updated": "2019-07-09T16:05:37.000+0000" }, { "id": "453999", "author": { "name": "cbarber", "key": "cbarber", "displayName": "Chris Barber", "active": true, "timeZone": "America/Chicago" }, "body": "I wonder if this is happening due to the module a legacy install with a different module id? Say you have a module with id \"foo.bar\", it will create the directory \"foo.bar\". Now we update the id to \"Foo.Bar\". Thanks to Windows and macOS (by default) having case-insensitive filesystems, it detects the directory as already existing and just dumps the module in a version directory.\r\n\r\nNode doesn't test case sensitivity. For example, {{fs.mkdirSync('./foo'); console.log(fs.existsSync('./FOO')); // true}}.\r\n\r\nI don't know where Studio is getting their module id from in the tiapp editor, but I suspect it's from {{appc ti module -o json}} and this command will return the modules grouped by the directory name.\r\n\r\nAt the end of the day, the module manifest should be the source of truth. If you have a module FOO@1.0.0 and foo@2.0.0, on disk they can both live in a \"FOO\" or \"foo\" directory, but the detection code should treat them as 2 different modules.", "updateAuthor": { "name": "cbarber", "key": "cbarber", "displayName": "Chris Barber", "active": true, "timeZone": "America/Chicago" }, "created": "2020-01-31T19:20:34.000+0000", "updated": "2020-01-31T19:20:34.000+0000" } ], "maxResults": 2, "total": 2, "startAt": 0 } } }