Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

I2I: Consolidate source code under src/ #34866

Open
rcebulko opened this issue Jun 15, 2021 · 6 comments
Open

I2I: Consolidate source code under src/ #34866

rcebulko opened this issue Jun 15, 2021 · 6 comments
Labels
INTENT TO IMPLEMENT Proposes implementation of a significant new feature. https://bit.ly/amp-contribute-code Stale Inactive for one year or more Type: DevX issues impacting developer experience Type: Refactoring

Comments

@rcebulko
Copy link
Contributor

rcebulko commented Jun 15, 2021

In the earlier days of amp, the root directory was fairly sparse. "Top-level" directories like 3p, ads, builtins, and extensions had separate functions, while src was synonymous with the AMP runtime. IIUC, one motivation for this at the time was so external contributors could easily view the repo and understand where to contribute an ad provider, 3p integration, or new component/extension.

Today, the root directory has dozens of config files and directories (.babel-cache/, .circleci/, .codecov.yml, .css-cache/, .editorconfig, .eslintignore, .eslintplugin.js, .eslintrc.js, .git/, .gitattributes, .github/, .gitignore, .lando.yml, .lgtm.yml, .npmrc, .nyc_output/, .pre-closure-cache/, .prettierignore, .prettierrc, .renovaterc.json, .vscode/), build/dist files, node_modules, third_party, and a handful of other directories containing tools, docs, and more.

More generally, I suspect if we re-created the repo today, we'd put all the source files under src, separate from built system, build files, documentation, and testing. Down the line, this can also allow for consolidation and simplification of some lint rules, presubmits, etc.

@rcebulko rcebulko added INTENT TO IMPLEMENT Proposes implementation of a significant new feature. https://bit.ly/amp-contribute-code Type: DevX issues impacting developer experience Type: Refactoring labels Jun 15, 2021
@samouri
Copy link
Member

samouri commented Jun 15, 2021

In general I'm in favor of moving all of our code that gets bundled/distributed to src.
Note though that some of the examples above (i.e. .babel-cache and .css-cache) aren't actually part of our git repo.

@erwinmombay
Copy link
Member

+1 on this. this would help infra code quite a bit i think. generally when we add a new directory we would need to add a new glob to some rule or transformer which always seemed very brittle. with this change there would most likely a reduction in the globs for linters and compilers which should reduce a little bit of complexity

@caroqliu
Copy link
Contributor

One concern is that this will make it more difficult to view the blame of the moved directories, whose original paths will be effectively treated as deleted. It's still possible by calling git blame with a commit hash prior to the relocation, but retrieving this is slightly more friction than not and could be hard for new contributors as time goes on. For me, being able to do this is valuable for components I'm less familiar with as well as those with long histories.

Another point -- when moving extensions inside src, would this change then move any unit, e2e, and validator tests typically located inside extensions/**/test outside of src to the separate testing directory described?

@rcebulko
Copy link
Contributor Author

rcebulko commented Jun 16, 2021

One concern is that this will make it more difficult to view the blame of the moved directories, whose original paths will be effectively treated as deleted. It's still possible by calling git blame with a commit hash prior to the relocation, but retrieving this is slightly more friction than not and could be hard for new contributors as time goes on. For me, being able to do this is valuable for components I'm less familiar with as well as those with long histories.

As long as I used git mv properly (which I intend to), history/blame still works naturally within GitHub. For example, when I moved src/utils/string.js to src/core/types/string/index.js, you can still see the blame from 6 years ago on the "new"/moved file. So, I think that may not be an issue, unless I'm missing something.

Another point -- when moving extensions inside src, would this change then move any unit, e2e, and validator tests typically located inside extensions/**/test outside of src to the separate testing directory described?

I would say moving any test files within extensions/, if anything, would merit an entirely separate design review.

Personal tangent on what I think we should do with test files down the line, in separate design review(s) As an aside, personally I would be in favor of moving more tests closer to source files (and `test/unit/core` is structured to mirror the source tree so this could be done easily for core). If that were to happen, I'd propose in conjunction shifting the naming convention from `foo.js`/`test-foo.js` to `foo.js`/`foo.test.js` or `foo-test.js` so source+test files are grouped together in sorting. But that would again be at least a separate design review, if not two.

Regardless of the note above, the scope of this DR would be almost exclusively git mv {3p,ads,builtins,extensions} src/ (and updating corresponding imports), and not any shuffling of test files at this time.

@rcebulko
Copy link
Contributor Author

Follow-up: For those with active open branches, merging may not play nice with the moved files, while rebasing should apply the local changes to the moved directories without issue. Since this still has the potential to cause disruption to developers, each directory should be moved separately and with (~1wk?) advanced notice, to make sure anyone actively working in those directories (especially extensions) is aware of the merge/rebase difference

@stale
Copy link

stale bot commented Nov 23, 2022

This issue has been automatically marked as stale because it has not had recent activity. It will be closed in 7 days if no further activity occurs. Thank you for your contributions.

@stale stale bot added the Stale Inactive for one year or more label Nov 23, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
INTENT TO IMPLEMENT Proposes implementation of a significant new feature. https://bit.ly/amp-contribute-code Stale Inactive for one year or more Type: DevX issues impacting developer experience Type: Refactoring
Projects
None yet
Development

No branches or pull requests

4 participants