{"action":"created","issue":{"url":"https://api.github.com/repos/silverstripe/silverstripe-framework/issues/7360","repository_url":"https://api.github.com/repos/silverstripe/silverstripe-framework","labels_url":"https://api.github.com/repos/silverstripe/silverstripe-framework/issues/7360/labels{/name}","comments_url":"https://api.github.com/repos/silverstripe/silverstripe-framework/issues/7360/comments","events_url":"https://api.github.com/repos/silverstripe/silverstripe-framework/issues/7360/events","html_url":"https://github.com/silverstripe/silverstripe-framework/issues/7360","id":256553561,"number":7360,"title":"Allow SilverStripe module to be stored in vendor","user":{"login":"sminnee","id":59968,"avatar_url":"https://avatars1.githubusercontent.com/u/59968?v=4","gravatar_id":"","url":"https://api.github.com/users/sminnee","html_url":"https://github.com/sminnee","followers_url":"https://api.github.com/users/sminnee/followers","following_url":"https://api.github.com/users/sminnee/following{/other_user}","gists_url":"https://api.github.com/users/sminnee/gists{/gist_id}","starred_url":"https://api.github.com/users/sminnee/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sminnee/subscriptions","organizations_url":"https://api.github.com/users/sminnee/orgs","repos_url":"https://api.github.com/users/sminnee/repos","events_url":"https://api.github.com/users/sminnee/events{/privacy}","received_events_url":"https://api.github.com/users/sminnee/received_events","type":"User","site_admin":false},"labels":[{"id":386316041,"url":"https://api.github.com/repos/silverstripe/silverstripe-framework/labels/affects/v4","name":"affects/v4","color":"5319e7","default":false},{"id":175811039,"url":"https://api.github.com/repos/silverstripe/silverstripe-framework/labels/change/minor","name":"change/minor","color":"f9d0c4","default":false},{"id":182941354,"url":"https://api.github.com/repos/silverstripe/silverstripe-framework/labels/impact/high","name":"impact/high","color":"eb6420","default":false},{"id":34209120,"url":"https://api.github.com/repos/silverstripe/silverstripe-framework/labels/type/enhancement","name":"type/enhancement","color":"0e8a16","default":false}],"state":"open","locked":false,"assignee":{"login":"tractorcow","id":936064,"avatar_url":"https://avatars2.githubusercontent.com/u/936064?v=4","gravatar_id":"","url":"https://api.github.com/users/tractorcow","html_url":"https://github.com/tractorcow","followers_url":"https://api.github.com/users/tractorcow/followers","following_url":"https://api.github.com/users/tractorcow/following{/other_user}","gists_url":"https://api.github.com/users/tractorcow/gists{/gist_id}","starred_url":"https://api.github.com/users/tractorcow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tractorcow/subscriptions","organizations_url":"https://api.github.com/users/tractorcow/orgs","repos_url":"https://api.github.com/users/tractorcow/repos","events_url":"https://api.github.com/users/tractorcow/events{/privacy}","received_events_url":"https://api.github.com/users/tractorcow/received_events","type":"User","site_admin":false},"assignees":[{"login":"tractorcow","id":936064,"avatar_url":"https://avatars2.githubusercontent.com/u/936064?v=4","gravatar_id":"","url":"https://api.github.com/users/tractorcow","html_url":"https://github.com/tractorcow","followers_url":"https://api.github.com/users/tractorcow/followers","following_url":"https://api.github.com/users/tractorcow/following{/other_user}","gists_url":"https://api.github.com/users/tractorcow/gists{/gist_id}","starred_url":"https://api.github.com/users/tractorcow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tractorcow/subscriptions","organizations_url":"https://api.github.com/users/tractorcow/orgs","repos_url":"https://api.github.com/users/tractorcow/repos","events_url":"https://api.github.com/users/tractorcow/events{/privacy}","received_events_url":"https://api.github.com/users/tractorcow/received_events","type":"User","site_admin":false}],"milestone":{"url":"https://api.github.com/repos/silverstripe/silverstripe-framework/milestones/57","html_url":"https://github.com/silverstripe/silverstripe-framework/milestone/57","labels_url":"https://api.github.com/repos/silverstripe/silverstripe-framework/milestones/57/labels","id":2746661,"number":57,"title":"Recipe 4.0.0-beta4","description":"","creator":{"login":"tractorcow","id":936064,"avatar_url":"https://avatars2.githubusercontent.com/u/936064?v=4","gravatar_id":"","url":"https://api.github.com/users/tractorcow","html_url":"https://github.com/tractorcow","followers_url":"https://api.github.com/users/tractorcow/followers","following_url":"https://api.github.com/users/tractorcow/following{/other_user}","gists_url":"https://api.github.com/users/tractorcow/gists{/gist_id}","starred_url":"https://api.github.com/users/tractorcow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tractorcow/subscriptions","organizations_url":"https://api.github.com/users/tractorcow/orgs","repos_url":"https://api.github.com/users/tractorcow/repos","events_url":"https://api.github.com/users/tractorcow/events{/privacy}","received_events_url":"https://api.github.com/users/tractorcow/received_events","type":"User","site_admin":false},"open_issues":12,"closed_issues":10,"state":"open","created_at":"2017-09-05T22:03:39Z","updated_at":"2017-09-20T21:05:25Z","due_on":null,"closed_at":null},"comments":22,"created_at":"2017-09-11T00:35:24Z","updated_at":"2017-09-20T21:21:51Z","closed_at":null,"author_association":"OWNER","body":"Ever since we split SS4 into minipackages we've been chomping at the bit to shift modules to the vendor path. The current root path of a default install — let alone a CWP recipe — is very cluttered.\r\n\r\nRather than move all modules in one fell-swoop that would be invasive enough to count as an API breakage, I think we let individual modules choose when they're ready to be placed in the vendor path. Although we should recommend that people don't reference hard-coded paths, it's more likely that a module will do this about its own code than external code to do this. So making it a module decision rather than a project decision will be lower impact.\r\n\r\nSpecifically I think we support 2 new composer package types: `silverstripe-vendormodule` and maybe `silverstripe-vendortheme`. These modules will be picked up by any `silverstripe-*` scan of packages, and we can patch `composer/installers` to handle them properly.\r\n\r\nIn addition to that patch, we'll want to ensure that the module manifest can find such modules.\r\n\r\nAdding this capability is definitely a minor change. Making use of this in existing modules will be a minor change **if and only if** we state that the path of our core modules is *not* a public API and tell people to use the resource lookup APIs to find assets."},"comment":{"url":"https://api.github.com/repos/silverstripe/silverstripe-framework/issues/comments/330984801","html_url":"https://github.com/silverstripe/silverstripe-framework/issues/7360#issuecomment-330984801","issue_url":"https://api.github.com/repos/silverstripe/silverstripe-framework/issues/7360","id":330984801,"user":{"login":"tractorcow","id":936064,"avatar_url":"https://avatars2.githubusercontent.com/u/936064?v=4","gravatar_id":"","url":"https://api.github.com/users/tractorcow","html_url":"https://github.com/tractorcow","followers_url":"https://api.github.com/users/tractorcow/followers","following_url":"https://api.github.com/users/tractorcow/following{/other_user}","gists_url":"https://api.github.com/users/tractorcow/gists{/gist_id}","starred_url":"https://api.github.com/users/tractorcow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tractorcow/subscriptions","organizations_url":"https://api.github.com/users/tractorcow/orgs","repos_url":"https://api.github.com/users/tractorcow/repos","events_url":"https://api.github.com/users/tractorcow/events{/privacy}","received_events_url":"https://api.github.com/users/tractorcow/received_events","type":"User","site_admin":false},"created_at":"2017-09-20T21:21:51Z","updated_at":"2017-09-20T21:21:51Z","author_association":"CONTRIBUTOR","body":"> That sounds like a reason to use copy over symlinks IMO rather than justification for adding more reliance on dev/build.\r\n\r\nBut what if your archive / deployment system doesn't support it? What if you are just a new dev and aren't aware how to safely archive and deploy symlinked folders? It's another major point of fragility.\r\n\r\n> but some sites might not want to build the entire database just to republish an asset\r\n\r\nWho do you know who deploys a new site without a dev/build after deploying new files? We would be symlinking the entire folder, not individual files. If you really wanted to, you wouldn't need a dev/build unless you'd added/removed an entire module."}}
{"actor":{"display_login":"tractorcow"}}