minimeteor
minimeteor copied to clipboard
Build is failing after Meteor 1.6 release
So, I was using minimeteor with gitlab CI and it was great.
Today exactly when meteor 1.6 has been release, my build broke.
Here's my .gitlab-ci.yml (relevant part):
buid_docker:
stage: docker
image: gitlab/dind:latest
script:
- cd app
- docker info
- docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN registry.gitlab.com
- curl https://aedm.github.io/minimeteor/build.sh | sh -s $CONTAINER_IMAGE
- docker push $CONTAINER_IMAGE
So, it just curls minimeteor's build.sh and runs it in my app's folder.
Here's what I get in build log:
$ curl https://aedm.github.io/minimeteor/build.sh | sh -s $CONTAINER_IMAGE
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
100 4312 100 4312 0 0 10759 0 --:--:-- --:--:-- --:--:-- 10780
Using temp dir: /tmp/minimeteor-2xcEz33U
[minimeteor] Building as root
[minimeteor] Copying project files to temp directory
[minimeteor] Writing Meteor build script
[minimeteor] Setting executable rights on build script
[minimeteor] Starting Meteor container
Unable to find image 'debian:latest' locally
latest: Pulling from library/debian
3e17c6eae66c: Pulling fs layer
3e17c6eae66c: Download complete
3e17c6eae66c: Pull complete
Digest: sha256:2e43e863a4ab6e53caf87a37d01d8c144cdcb732ad1b944fcf45cbfd7248a02a
Status: Downloaded newer image for debian:latest
[minimeteor] Meteor container started
[minimeteor] Updating apt
[minimeteor] Installing tools
debconf: delaying package configuration, since apt-utils is not installed
[minimeteor] Copying files
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
100 7782 0 7782 0 0 10921 0 --:--:-- --:--:-- --:--:-- 10929
Downloading Meteor distribution
Meteor 1.6 has been installed in your home directory (~/.meteor).
Writing a launcher script to /usr/local/bin/meteor for your convenience.
To get started fast:
$ meteor create ~/my_cool_app
$ cd ~/my_cool_app
$ meteor
Or see the docs at:
docs.meteor.com
[minimeteor] Installing NPM build dependencies
user, this is your first time using Meteor!
Installing a Meteor distribution in your home directory.
Downloading Meteor distribution
[minimeteor] Performing Meteor build
Error checking npm module: node-sass@>=3.x <=4.x (required by nathantreid:css-modules): module not found. Please ensure you have installed the module; here is the command:
meteor npm install node-sass --save-dev
Warning: unable to resolve "env" in presets of /home/user/source/.babelrc
Warning: unable to resolve "react" in presets of /home/user/source/.babelrc
Warning: unable to resolve "stage-2" in presets of /home/user/source/.babelrc
Warning: unable to resolve "babel-root-slash-import" in plugins of /home/user/source/.babelrc
Warning: unable to resolve "transform-decorators-legacy" in plugins of /home/user/source/.babelrc
Warning: unable to resolve "transform-class-properties" in plugins of /home/user/source/.babelrc
Error checking npm module: node-sass@>=3.x <=4.x (required by nathantreid:css-modules): module not found. Please ensure you have installed the module; here is the command:
meteor npm install node-sass --save-dev ....
And so on. So, it fails to install npm module idk why. Obviously, it is listed in package.json.
Same is happening when I try to build it on my local machine (mac OS).
I'd love to get help on this :(
So, i looked at npm install log in minimeteor container and here's what it says:
root@7a3d6826e51e:/# cat /home/user/.npm/_logs/2017-10-30T20_51_06_137Z-debug.log
0 info it worked if it ends with ok
1 verbose cli [ '/home/user/.meteor/packages/meteor-tool/.1.6.0.1whvdik.oongk++os.linux.x86_64+web.browser+web.cordova/mt-os.linux.x86_64/dev_bundle/bin/node',
1 verbose cli '/home/user/.meteor/packages/meteor-tool/.1.6.0.1whvdik.oongk++os.linux.x86_64+web.browser+web.cordova/mt-os.linux.x86_64/dev_bundle/bin/npm',
1 verbose cli 'install' ]
2 info using [email protected]
3 info using [email protected]
4 verbose npm-session 34b6d7f140263173
5 silly install runPreinstallTopLevelLifecycles
6 silly preinstall [email protected]
7 info lifecycle [email protected]~preinstall: [email protected]
8 silly install loadCurrentTree
9 silly install readLocalPackageData
10 silly install loadIdealTree
11 silly install cloneCurrentTreeToIdealTree
12 silly install loadShrinkwrap
13 verbose stack SyntaxError: Unexpected token < in JSON at position 5052
13 verbose stack at JSON.parse (<anonymous>)
13 verbose stack at module.exports (/home/user/.meteor/packages/meteor-tool/.1.6.0.1whvdik.oongk++os.linux.x86_64+web.browser+web.cordova/mt-os.linux.x86_64/dev_bundle/lib/node_modules/npm/lib/utils/parse-json.js:3:15)
13 verbose stack at BB.join (/home/user/.meteor/packages/meteor-tool/.1.6.0.1whvdik.oongk++os.linux.x86_64+web.browser+web.cordova/mt-os.linux.x86_64/dev_bundle/lib/node_modules/npm/lib/install/read-shrinkwrap.js:31:20)
13 verbose stack at tryCatcher (/home/user/.meteor/packages/meteor-tool/.1.6.0.1whvdik.oongk++os.linux.x86_64+web.browser+web.cordova/mt-os.linux.x86_64/dev_bundle/lib/node_modules/npm/node_modules/bluebird/js/release/util.js:16:23)
13 verbose stack at Holder$3._callFunction (eval at generateHolderClass (/home/user/.meteor/packages/meteor-tool/.1.6.0.1whvdik.oongk++os.linux.x86_64+web.browser+web.cordova/mt-os.linux.x86_64/dev_bundle/lib/node_modules/npm/node_modules/bluebird/js/release/join.js:92:16), <anonymous>:14:44)
13 verbose stack at Holder$3.checkFulfillment (eval at generateHolderClass (/home/user/.meteor/packages/meteor-tool/.1.6.0.1whvdik.oongk++os.linux.x86_64+web.browser+web.cordova/mt-os.linux.x86_64/dev_bundle/lib/node_modules/npm/node_modules/bluebird/js/release/join.js:92:16), <anonymous>:29:30)
13 verbose stack at Promise.eval (eval at thenCallback (/home/user/.meteor/packages/meteor-tool/.1.6.0.1whvdik.oongk++os.linux.x86_64+web.browser+web.cordova/mt-os.linux.x86_64/dev_bundle/lib/node_modules/npm/node_modules/bluebird/js/release/join.js:14:16), <anonymous>:6:20)
13 verbose stack at Promise._settlePromise (/home/user/.meteor/packages/meteor-tool/.1.6.0.1whvdik.oongk++os.linux.x86_64+web.browser+web.cordova/mt-os.linux.x86_64/dev_bundle/lib/node_modules/npm/node_modules/bluebird/js/release/promise.js:566:21)
13 verbose stack at Promise._settlePromise0 (/home/user/.meteor/packages/meteor-tool/.1.6.0.1whvdik.oongk++os.linux.x86_64+web.browser+web.cordova/mt-os.linux.x86_64/dev_bundle/lib/node_modules/npm/node_modules/bluebird/js/release/promise.js:614:10)
13 verbose stack at Promise._settlePromises (/home/user/.meteor/packages/meteor-tool/.1.6.0.1whvdik.oongk++os.linux.x86_64+web.browser+web.cordova/mt-os.linux.x86_64/dev_bundle/lib/node_modules/npm/node_modules/bluebird/js/release/promise.js:693:18)
13 verbose stack at Promise._fulfill (/home/user/.meteor/packages/meteor-tool/.1.6.0.1whvdik.oongk++os.linux.x86_64+web.browser+web.cordova/mt-os.linux.x86_64/dev_bundle/lib/node_modules/npm/node_modules/bluebird/js/release/promise.js:638:18)
13 verbose stack at Promise._settlePromise (/home/user/.meteor/packages/meteor-tool/.1.6.0.1whvdik.oongk++os.linux.x86_64+web.browser+web.cordova/mt-os.linux.x86_64/dev_bundle/lib/node_modules/npm/node_modules/bluebird/js/release/promise.js:582:21)
13 verbose stack at Promise._settlePromise0 (/home/user/.meteor/packages/meteor-tool/.1.6.0.1whvdik.oongk++os.linux.x86_64+web.browser+web.cordova/mt-os.linux.x86_64/dev_bundle/lib/node_modules/npm/node_modules/bluebird/js/release/promise.js:614:10)
13 verbose stack at Promise._settlePromises (/home/user/.meteor/packages/meteor-tool/.1.6.0.1whvdik.oongk++os.linux.x86_64+web.browser+web.cordova/mt-os.linux.x86_64/dev_bundle/lib/node_modules/npm/node_modules/bluebird/js/release/promise.js:693:18)
13 verbose stack at Promise._fulfill (/home/user/.meteor/packages/meteor-tool/.1.6.0.1whvdik.oongk++os.linux.x86_64+web.browser+web.cordova/mt-os.linux.x86_64/dev_bundle/lib/node_modules/npm/node_modules/bluebird/js/release/promise.js:638:18)
13 verbose stack at /home/user/.meteor/packages/meteor-tool/.1.6.0.1whvdik.oongk++os.linux.x86_64+web.browser+web.cordova/mt-os.linux.x86_64/dev_bundle/lib/node_modules/npm/node_modules/bluebird/js/release/nodeback.js:42:21
13 verbose stack at /home/user/.meteor/packages/meteor-tool/.1.6.0.1whvdik.oongk++os.linux.x86_64+web.browser+web.cordova/mt-os.linux.x86_64/dev_bundle/lib/node_modules/npm/node_modules/graceful-fs/graceful-fs.js:78:16
13 verbose stack at FSReqWrap.readFileAfterClose [as oncomplete] (fs.js:513:3)
14 verbose cwd /home/user/source
15 verbose Linux 4.9.49-moby
16 verbose argv "/home/user/.meteor/packages/meteor-tool/.1.6.0.1whvdik.oongk++os.linux.x86_64+web.browser+web.cordova/mt-os.linux.x86_64/dev_bundle/bin/node" "/home/user/.meteor/packages/meteor-tool/.1.6.0.1whvdik.oongk++os.linux.x86_64+web.browser+web.cordova/mt-os.linux.x86_64/dev_bundle/bin/npm" "install"
17 verbose node v8.8.1
18 verbose npm v5.4.2
19 error Unexpected token < in JSON at position 5052
20 verbose exit [ 1, true ]
Found it. It was corrupted package-lock.json.
I'm glad you figured out how to run it on Gitlab. I tried for a while and encountered an error that I couldn't fix. Eventually, I left Gitlab CI altogether. Maybe I'll give it another shot.
Still can't get it to work due to node version upgrade. So, I've trying to deploy my current app, that's on Meteor 1.5 and i get this:
Errors prevented bundling:
While processing files with nathantreid:css-modules (for target web.browser):
/home/user/source/node_modules/node-sass/lib/binding.js:15:13: Missing binding
/home/user/source/node_modules/node-sass/vendor/linux-x64-46/binding.node
Node Sass could not find a binding for your current environment: Linux 64-bit
with Node.js 4.x
Found bindings for the following environments:
- Linux 64-bit with Node.js 8.x
This usually happens because your environment has changed since running `npm
install`.
Run `npm rebuild node-sass --force` to build the binding for your current
environment.
at module.exports
(/home/user/source/node_modules/node-sass/lib/binding.js:15:13)
at Object.<anonymous>
(/home/user/source/node_modules/node-sass/lib/index.js:14:35)
at Module._compile (module.js:409:26)
at Object.Module._extensions..js (module.js:416:10)
at Module.load (module.js:343:32)
at Module.Mp.load (/tools/tool-env/install-runtime.js:30:27)
at Function.Module._load (module.js:300:12)
at Module.require (module.js:353:17)
at require (internal/module.js:12:17)
at Object.require (/tools/isobuild/bundler.js:1915:22)
at makeInstallerOptions.fallback (packages/modules-runtime.js:641:18)
at require (packages/modules-runtime.js:234:16)
at new ScssProcessor (packages/mss/scss-processor.js:12:55)
at CssModulesBuildPlugin._setupPreprocessors
(packages/mss/css-modules-build-plugin.js:125:31)
at CssModulesBuildPlugin.processFilesForTarget
(packages/mss/css-modules-build-plugin.js:74:10)
I'm using css-modules with node-sass. Any Idea?
If I understand things right, then it seems that when build.sh runs 'meteor npm install' on line 75, it uses latest meteor node version, which is 8.
Then, when build.sh runs 'meteor build', it correctly adjusts to node v.4 because my project is still on meteor 1.5.
So, question is how to make meteor npm install to use node version 4, just like when building. I actually don't know how to make it happen and why is npm install creates bindings for node8 instead of node4.
Same happens on my machine, so Gitlab CI is not relevant.
So I logged into meteor build container and check how is it going, and here's what I see:
root@96cbb3d0cfd0:/home/source# curl "https://install.meteor.com/" | sh
root@96cbb3d0cfd0:/home/source# meteor npm -v
5.4.2
root@96cbb3d0cfd0:/home/source# meteor node -v
v8.8.1
root@96cbb3d0cfd0:/home/source# cat .meteor/release
[email protected]
So, I don't know yet why, but meteor uses new node version instead of node4, which should be selected for meteor 1.5 application. Any ideas?
So, what I did, is added empty meteor command with release tag, just before doing npm install:
meteor --release 1.5.2.2 list
meteor npm install
in build script. And it worked. So, it seems that bug is in Meteor 1.6, that fails to choose proper meteor-tool version when installing npm packages on clean install.
I would appreciate if anyone could check my deductions and confirm or add to it.
Meteor 1.7 and 1.7.0.1 is impacted by a recent NPM bug - see https://github.com/meteor/meteor/issues/9940
I could successfully perform a build using the same workaround. (Adding meteor --release 1.6.1 list
before meteor npm install
.)