Commit Graph

6868 Commits

Author SHA1 Message Date
Ben Newman
f14d50538e Merge branch 'devel' into release-1.6.2 2018-03-01 18:02:08 -05:00
Ben Newman
e7b0a70a98 Use meteor.testModule in package.json of modules test app. 2018-03-01 14:27:31 -05:00
Ben Newman
36c7ee8efa Remove unnecessary 'meteor.' prefix from {main,test}Module self-tests. 2018-03-01 14:27:31 -05:00
Ben Newman
601f0d6f9f Update 'meteor test' help text to explain meteor.testModule. 2018-03-01 14:27:31 -05:00
Ben Newman
60731a88bc Test meteor.testModule with just meteor test (not --full-app). 2018-03-01 14:27:31 -05:00
Ben Newman
a212d9f515 Also support meteor.testModule to configure test entry points.
Setting meteor.testModule is a great way to specify test entry points
explicitly, rather than relying on Meteor's isTestFilePath heuristics:
https://github.com/meteor/meteor/blob/devel/tools/isobuild/test-files.js

The syntax is identical to meteor.mainModule, so you can set an explicit
meteor.testModule.{client,server,...} for each platform. If a testModule
is not specified for a platform, then Meteor's existing rules about test
file paths apply for that platform, as before.

If a testModule is specified, that module will always be loaded eagerly
when running `meteor test`, in addition to any other modules that load
eagerly because of meteor.mainModule or other rules regarding module
loading. If you run `meteor test` without the `--full-app` option, then no
application JS modules other than the testModule (and any modules imported
by it) will be loaded eagerly.
2018-03-01 14:27:30 -05:00
Ben Newman
b0e5400ff5 Improve meteor.mainModule arch discovery in tests.
If config.mainModule.client === false, then mainId should === false.
2018-03-01 14:27:30 -05:00
Ben Newman
8dd2402f76 Allow meteor.mainModule.{client,server} === false for no entry point.
If meteor.mainModule.{client,server,...} === false, no modules will be
loaded eagerly for that architecture. This is useful if you have an app
with no special app/{client,server} directory structure and you want to
specify an entry point for just the client (or just the server), without
accidentally loading everything on the other architecture.
2018-03-01 14:27:30 -05:00
Ben Newman
66508c483a Remove test driver packages from tests/apps/app-config/.meteor/versions. 2018-03-01 14:27:30 -05:00
Ben Newman
c2e3c52dd3 Simplify ResourceSlot#_isLazy for package resources. 2018-03-01 14:27:30 -05:00
Ben Newman
95efca2223 Stop using _inferFileOptions for package files.
Determining if Meteor package files should be loaded lazily or eagerly is
a lot easier than doing so for application files, so we should just do
that separately, to avoid any risk of application directory layout logic
interfering with package behavior.
2018-03-01 14:27:30 -05:00
Ben Newman
c28d813745 Merge branch 'devel' into release-1.6.2 2018-02-23 18:39:06 -05:00
Ben Newman
c47a2bedfb Tests for require("/package.json").meteor.mainModule. 2018-02-23 17:06:56 -05:00
Ben Newman
c07e0d4c73 Fix bug that caused non-main modules to load eagerly during tests. 2018-02-23 17:05:42 -05:00
Ben Newman
31c39f0e6f Resolve mainModule strings using Node module resolution rules. 2018-02-23 12:45:24 -05:00
Ben Newman
ae3ad3b2df Support a meteor.mainModule section in application package.json files.
https://github.com/meteor/meteor-feature-requests/issues/135

This change allows applications to specify specific entry points for each
architecture, without relying on `imports` directories to determine the
eagerness/laziness of modules. In other words, it will finally be possible
to build a Meteor app without a special `imports` directory.

Specifically, if `packageJson.meteor.mainModule[architecture]` is defined,
all modules for that architecture will be lazy except for the specified
module, which will be loaded eagerly.

Possible values for `architecture` include "client", "server", "web",
"web.browser", "web.cordova", "os", and so on, just like the second
argument to `api.mainModule(file, where)` in Meteor packages.

In order to match existing behavior, a Meteor application might include
the following in its `package.json` file:

  "meteor": {
    "mainModule": {
      "client": "client/main.js",
      "server": "server/main.js"
    }
  }

These architectures are handled independently, so omitting the "client" or
"server" property would cause that architecture to revert to standard
Meteor loading semantics. In other words, Meteor developers must opt into
this functionality, which is crucial for backwards compatibility.

Note that this functionality applies only to application modules, since
modules in Meteor packages are already lazy by default, and Meteor
packages can already specify entry points by calling `api.mainModule` in
their `package.js` files.

Also note that the loading behavior of non-JavaScript resources is *not*
affected by `packageJson.meteor.mainModule`. Only resources added by
compiler plugins via `addJavaScript` are subject to the new configuration
option. If a compiler plugin calls `addStylesheet` or `addHtml`, those
resources will still be included unconditionally in the HTML document
rendered by the web server. While you could try to import these resources
from JavaScript, you would only be importing any JavaScript resources the
compiler plugin registered using `addJavaScript`, and not the actual HTML
or CSS resources. I welcome feedback on this decision, but if there's no
meaningful way to import a resource, making it lazy just means it won't be
loaded at all.

An ulterior motive for this feature is to enable Meteor apps to have
directory layouts that developers who are not familiar with Meteor can
immediately understand. The special meaning of the `imports` directory and
the surprising eagerness of modules outside of `imports` have always
required some explanation, so this change should reduce that surprise.

Because Meteor strives to be a zero-configuration tool, this is currently
the only supported option in the "meteor" section of `package.json`,
though the available options may be expanded in the future if that's the
best/only way to solve important problems. This would involve adding
additional methods to the `MeteorConfig` class in `project-context.js`,
and then using those methods elsewhere in the `meteor/tools` codebase.
2018-02-23 12:44:56 -05:00
Ben Newman
0520200f90 Fix tools/tests/help.js self-test.
https://circleci.com/gh/meteor/meteor/16787
2018-02-21 20:22:12 -05:00
Ben Newman
590ca4d48b Support meteor create --minimal for creating very small apps.
Like `meteor create --bare`, except with even fewer Meteor core packages,
so that the client-side footprint of the app is as tiny as possible.
2018-02-21 19:39:24 -05:00
Ben Newman
a6191d4bad Merge branch 'devel' into release-1.6.2 2018-02-21 18:34:17 -05:00
Hugh Willson
a58dc51f80 Keep bundled /public and /private node_modules symlink content. (#9666)
Many npm based packages provide supporting assets that need
to be made available, when used on the web. For example, to
use the `font-awesome` package properly, the
`node_modules/font-awesome/fonts` files need to be made accessible
to incoming web requests.

With Meteor, an easy way to handle this would be to create a
symlink to `node_modules/font-awesome/fonts` from within an
application's `/public` directory. This would then allow all
of `font-awesome`'s font files to be accessed directly by
incoming clients. Unfortunately, while this approach does work
in development when using the Meteor Tool, it does not work when
production bundles are created.

Meteor's isobuild process uses a helper class called
`SymlinkLoopChecker`, to make sure the build process doesn't get
caught up in an infinite loop trying to follow circular symlinks.
Currently, a shared `SymlinkLoopChecker` instance is used to watch
for symlink loops during both the `_findSoures` and `_findAssets`
parts of the isobuild process. `_findSources` is called first, and
covers source files that an application uses from the `node_modules`
directory. The `SymlinkLoopChecker` tracks all of the `node_modules`
directories covered, so they can be watched for in the future (to
prevent duplicate inclusions). Next, `_findAssets` is called using
the same `SymlinkLoopChecker`. This means that if there are any
`node_modules` symlinks used in the `public` or `private`
directories, they will be marked as being duplicates (and stripped),
since they were already covered in the `_findSources` run.

This commit changes things a bit so that both `_findSources` and
`_findAssets` use their own `SymlinkLoopChecker` instance. This
opens up an applications symlink capabilities a bit, while still
preserving some circular symlink safeguards. By doing this, a
production application bundle can now maintain the contents of
`node_modules` based symlinks, used in `public` and `private`.

So in the case of `font-awesome` for example

```
public/fonts --> ../node_modules/font-awesome/fonts
```

becomes the following in the production application bundle

```
bundle/programs/web.browser/app/fonts/[all fonts files]
```

Fixes #7013.
2018-02-21 11:50:01 -05:00
Ben Newman
eeb7baca8f Merge branch 'devel' into release-1.6.2 2018-02-13 15:08:58 -05:00
Ben Newman
7c96a70692 Update meteor-babel to latest version, 7.0.0-beta.40-1. 2018-02-13 14:08:05 -05:00
Ben Newman
ff8a1ef32a Better error when running test-packages for nonexistent packages. 2018-02-13 13:43:08 -05:00
Ben Newman
926743536e Merge branch 'devel' into release-1.6.2 2018-02-10 11:01:41 -05:00
Robert Lowe
3332558ddb Introduce MONGO_BIND_IP override (#9606)
* Introduce MONGO_BIND_IP override

Introduces an environment variable (MONGO_BIND_IP) for overriding of meteor's mongod's `bind_ip` option to allow docker containers to bind on `0.0.0.0` to be able to expose mongod processs via docker's `-p 3001:3001` port bindings.

Related issue: https://serverfault.com/questions/758225/cannot-connect-to-mongodb-in-docker
Partially Related PR: https://github.com/meteor/meteor/pull/469

* Use METEOR_MONGO_BIND_IP over ambiguous MONGO_BIND_IP

Change request to use METEOR_MONGO_BIND_IP over ambiguous MONGO_BIND_IP
2018-02-08 10:30:28 -05:00
David Glasser
1dd7ad4544 Fix Galaxy discovery for version-status operation 2018-02-07 13:30:42 -08:00
Adam Zionts
d19f583e4f Make meteor deploy synchronous
- This changes meteor deploy to poll the /version-status/ REST endpoint
in Galaxy for the build and deploy status of the returned version
- Also fixes up a typo in a test
- Currently only configured to use a default polling configuration
- This change also adds a flag called --no-wait which allows users to
  specify that they want the deploy command to behave just as before
2018-02-07 13:30:21 -08:00
Jesse Rosenberger
52fb454803 Merge pull request #9644 from brucejo75/WSL_SQLITE_TRUNCATE
TRUNCATE journal mode for packaging DB on Windows like file systems
2018-02-07 08:32:19 +02:00
Bruce Johnson
e34c72f665 TRUNCATE journal mode for packaging DB on Windows like file systems 2018-02-06 08:24:44 -08:00
James Burgess
c9ff7a55aa Fix flakey test 'javascript hot code push' 2018-02-03 11:57:18 +01:00
Ben Newman
82e61fe085 Further refine ImportScanner METEOR_PROFILE output. 2018-02-01 12:44:16 -05:00
Ben Newman
dfb6a9b712 Avoid displaying package stats errors in headless mode.
Console.isInteractive() will be false during our Circle CI test runs,
since we set the METEOR_HEADLESS environment variable, so this change
should help prevent spurious test failures like these:
https://circleci.com/gh/meteor/meteor/15305.
2018-02-01 12:22:10 -05:00
Ben Newman
c6d481d53b Instrument more ImportScanner methods for METEOR_PROFILE.
This should help with analyzing how much time computeJsOutputFilesMap
spends scanning imports within individual packages (scanImports) versus
resolving cross-package imports (scanMissingModules).
2018-02-01 11:10:35 -05:00
Ben Newman
29e48758df Merge branch 'devel' into release-1.6.2 2018-01-31 18:26:12 -05:00
Ben Newman
85d74f8d2b Revert "Upgrade to Mongo 3.6 (#9533)"
This reverts commit dfc0702558.

We've seen some odd test failures (e.g. `passwords - tokens`) and trouble
updating from 1.6.1 to 1.6.2-beta.3 (easily solved with `meteor reset`,
but also worth investigating), so I think we should keep working on the
Mongo 3.6 upgrade in a PR, rather than running all of our tests against
a devel branch that includes Mongo 3.6.

cc @abernix @hwillson
2018-01-30 17:47:12 -05:00
Hugh Willson
540dc00230 Add a self-test skip option (#9579)
* Add a self-test skip option

Meteor's CI infrastructure is configured to exclude certain
`self-test`'s on each run. These excludes are specified in
each CI environment's config file, and included when running
`meteor self-test`. Developers running `meteor self-test`
locally however are not using these excludes by default,
so developer's have to manually look up the current exclude
list from one of the CI configs, then add these excludes to
their own `meteor self-test` call manually.

This commit adds a new `skip` option to Meteor's `self-test`
system, that can be used to skip adding/running a defined
`self-test` (similar in concept to Mocha's `skip` feature).
This provides a way to skip the running of older
`self-test`'s that are no longer needed, but allows them to
be preserved in the `self-test` suite, for future reference.
With this functionality in place, and the older test suites
updated to use it, Meteor's base CI excludes no longer need
to be maintained in their respective config files. The
excludes are all managed at the source (the test definition),
and can be leveraged by anyone/anything calling
`meteor self-test`.

* Log message describing skipped test

* Add manually-ignored count to self-test summary

* Small comment correction

* History.md entry with PR link
2018-01-29 14:25:09 +02:00
Ben Newman
b8663fb14a Merge branch 'devel' into release-1.6.2 2018-01-24 18:07:47 -05:00
Hugh Willson
dfc0702558 Upgrade to Mongo 3.6 (#9533)
Update the Meteor Tool to use Mongo 3.6.2 for 64-bit OS'
and Mongo 3.2.18 for 32-bit OS'. A few important mentions:

- As of Mongo 3.6, all Mongo binary downloads include
  SSL - there is no longer a non-SSL based download bundle
  (so it's a bit bigger, but that shouldn't be an issue).
- Using the `--nojournal` option with WiredTiger based
  replica sets is no longer supported (see
  https://jira.mongodb.org/browse/SERVER-30760). The
  `--nojournal` flag was added in
  bcfe072d52
  to help reduce the amount of disk space used by Mongo,
  but since this option is no longer supported, we'll
  have to live with the extra disk space usage.
- Add PR link to History.md
2018-01-24 22:01:46 +02:00
Ben Newman
b4a68e99c1 Avoid having to republish all core packages for web.browser.legacy.
I'm not entirely sure this will work, but the alternative is having to
bump the patch version of every core package, so I'd like to see if this
simplification works first.
2018-01-22 21:28:54 -05:00
Ben Newman
7fc1b1b73c Introduce "legacy" shorthand for web.browser.legacy and web.cordova. 2018-01-22 18:07:55 -05:00
Ben Newman
2fa38bdf4c Convert utils/archinfo.js to use ECMAScript exports. 2018-01-22 18:07:55 -05:00
Ben Newman
8ccbe3baa0 Avoid breaking backwards compatibility for asset URLs. 2018-01-22 18:07:55 -05:00
Ben Newman
bfbb8baf5f Add "/__arch" prefixes to URLs in tools/isobuild/bundler.js.
This avoids the need to add architecture-specific prefixes in
webapp_server.js, and also fixes dynamic module source map URLs.
2018-01-22 18:07:53 -05:00
Ben Newman
c300f65859 Fix "compiler plugins caching" self-tests for web.browser.legacy. 2018-01-22 18:07:38 -05:00
Ben Newman
e89c946a7e Fix modules self-tests for web.browser.legacy. 2018-01-22 17:56:55 -05:00
Ben Newman
89eaedc749 Fix meteor show <package> self-tests for web.browser.legacy. 2018-01-22 17:56:54 -05:00
Ben Newman
05ef0a6602 Fix compiler plugins self-tests for web.browser.legacy. 2018-01-22 17:56:54 -05:00
Ben Newman
4a4b4f93a9 Fix long-standing bug due to improper use of _.has on an array.
This traces back to my commit a9fde48ca8.
The problem went unnoticed because the only symptom was that duplicate
files were not properly reported.

The "compiler plugins - addAsset" self-test checks for the "Duplicate
source file" error, and was passing until recently, but began failing
after I fixed a bug in the forAllMatchingArchs function that allowed
duplicate callbacks for the same architecture.
2018-01-22 17:56:54 -05:00
Ben Newman
7fceffbe00 Avoid duplicating calls in forAllMatchingArchs. 2018-01-22 17:54:42 -05:00
Ben Newman
a94db9b6ae Convert PackageAPI to an ECMAScript class. 2018-01-22 17:54:42 -05:00