燕鹏
il y a 4 ans
révision
6fe91b36d5
27 fichiers modifiés avec 487 ajouts et 0 suppressions
@ -0,0 +1,50 @@ |
|||
FROM node:12.18.4-buster-slim |
|||
|
|||
LABEL maintainer="buildmaster@rocket.chat" |
|||
|
|||
# dependencies |
|||
RUN groupadd -g 65533 -r rocketchat \ |
|||
&& useradd -u 65533 -r -g rocketchat rocketchat \ |
|||
&& mkdir -p /app/uploads \ |
|||
&& chown rocketchat:rocketchat /app/uploads \ |
|||
&& apt-get update \ |
|||
&& apt-get install -y --no-install-recommends fontconfig |
|||
|
|||
#ADD .. /app |
|||
ADD ../bundle /app/bundle |
|||
|
|||
RUN aptMark="$(apt-mark showmanual)" \ |
|||
&& apt-get install -y --no-install-recommends g++ make python ca-certificates \ |
|||
&& cd /app/bundle/programs/server \ |
|||
&& npm install \ |
|||
&& apt-mark auto '.*' > /dev/null \ |
|||
&& apt-mark manual $aptMark > /dev/null \ |
|||
&& find /usr/local -type f -executable -exec ldd '{}' ';' \ |
|||
| awk '/=>/ { print $(NF-1) }' \ |
|||
| sort -u \ |
|||
| xargs -r dpkg-query --search \ |
|||
| cut -d: -f1 \ |
|||
| sort -u \ |
|||
| xargs -r apt-mark manual \ |
|||
&& apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ |
|||
&& npm cache clear --force \ |
|||
&& chown -R rocketchat:rocketchat /app |
|||
|
|||
USER rocketchat |
|||
|
|||
VOLUME /app/uploads |
|||
|
|||
WORKDIR /app/bundle |
|||
|
|||
# needs a mongoinstance - defaults to container linking with alias 'mongo' |
|||
ENV DEPLOY_METHOD=docker \ |
|||
NODE_ENV=production \ |
|||
MONGO_URL=mongodb://mongo:27017/rocketchat \ |
|||
HOME=/tmp \ |
|||
PORT=3000 \ |
|||
ROOT_URL=http://localhost:3000 \ |
|||
Accounts_AvatarStorePath=/app/uploads |
|||
|
|||
EXPOSE 3000 |
|||
|
|||
CMD ["node", "main.js"] |
@ -0,0 +1,2 @@ |
|||
node_modules/ |
|||
/package-lock.json |
@ -0,0 +1,19 @@ |
|||
# This file contains information which helps Meteor properly upgrade your |
|||
# app when you run 'meteor update'. You should check it into version control |
|||
# with your project. |
|||
|
|||
notices-for-0.9.0 |
|||
notices-for-0.9.1 |
|||
0.9.4-platform-file |
|||
notices-for-facebook-graph-api-2 |
|||
1.2.0-standard-minifiers-package |
|||
1.2.0-meteor-platform-split |
|||
1.2.0-cordova-changes |
|||
1.2.0-breaking-changes |
|||
1.3.0-split-minifiers-package |
|||
1.4.0-remove-old-dev-bundle-link |
|||
1.4.1-add-shell-server-package |
|||
1.4.3-split-account-service-packages |
|||
1.5-add-dynamic-import-package |
|||
1.7-split-underscore-from-meteor-base |
|||
1.8.3-split-jquery-from-blaze |
@ -0,0 +1 @@ |
|||
local |
@ -0,0 +1,7 @@ |
|||
# This file contains a token that is unique to your project. |
|||
# Check it into your repository along with the rest of this directory. |
|||
# It can be used for purposes such as: |
|||
# - ensuring you don't accidentally deploy one app on top of another |
|||
# - providing package authors with aggregated statistics |
|||
|
|||
vj567esl31n.obedb45x5fst |
@ -0,0 +1,24 @@ |
|||
# Meteor packages used by this project, one per line. |
|||
# Check this file (and the other files in this directory) into your repository. |
|||
# |
|||
# 'meteor add' and 'meteor remove' will edit this file for you, |
|||
# but you can also edit it by hand. |
|||
|
|||
meteor-base@1.4.0 # Packages every Meteor app needs to have |
|||
mobile-experience@1.1.0 # Packages for a great mobile UX |
|||
mongo@1.10.0 # The database Meteor supports right now |
|||
reactive-var@1.0.11 # Reactive variable for tracker |
|||
|
|||
standard-minifier-css@1.6.1 # CSS minifier run for production mode |
|||
standard-minifier-js@2.6.0 # JS minifier run for production mode |
|||
es5-shim@4.8.0 # ECMAScript 5 compatibility for older browsers |
|||
ecmascript@0.14.3 # Enable ECMAScript2015+ syntax in app code |
|||
typescript@3.7.6 # Enable TypeScript syntax in .ts and .tsx modules |
|||
shell-server@0.5.0 # Server-side component of the `meteor shell` command |
|||
|
|||
tracker@1.2.0 # Dependency tracker to allow reactive callbacks |
|||
static-html # Define static page content in .html files |
|||
akryum:vue-component # Vue-CLI template to publish components |
|||
|
|||
meteortesting:mocha # A package for writing and running your meteor app and package tests with mocha |
|||
johanbrook:publication-collector # Test a Meteor publication by collecting its output |
@ -0,0 +1,2 @@ |
|||
server |
|||
browser |
@ -0,0 +1 @@ |
|||
METEOR@1.11.1 |
@ -0,0 +1,78 @@ |
|||
akryum:vue-component@0.15.2 |
|||
akryum:vue-component-dev-client@0.4.7 |
|||
akryum:vue-component-dev-server@0.1.4 |
|||
allow-deny@1.1.0 |
|||
autoupdate@1.6.0 |
|||
babel-compiler@7.5.3 |
|||
babel-runtime@1.5.0 |
|||
base64@1.0.12 |
|||
binary-heap@1.0.11 |
|||
blaze-tools@1.0.10 |
|||
boilerplate-generator@1.7.1 |
|||
caching-compiler@1.2.2 |
|||
caching-html-compiler@1.1.3 |
|||
callback-hook@1.3.0 |
|||
check@1.3.1 |
|||
ddp@1.4.0 |
|||
ddp-client@2.3.3 |
|||
ddp-common@1.4.0 |
|||
ddp-server@2.3.2 |
|||
deps@1.0.12 |
|||
diff-sequence@1.1.1 |
|||
dynamic-import@0.5.2 |
|||
ecmascript@0.14.3 |
|||
ecmascript-runtime@0.7.0 |
|||
ecmascript-runtime-client@0.11.0 |
|||
ecmascript-runtime-server@0.10.0 |
|||
ejson@1.1.1 |
|||
es5-shim@4.8.0 |
|||
fetch@0.1.1 |
|||
geojson-utils@1.0.10 |
|||
hot-code-push@1.0.4 |
|||
html-tools@1.0.11 |
|||
htmljs@1.0.11 |
|||
http@1.4.2 |
|||
id-map@1.1.0 |
|||
inter-process-messaging@0.1.1 |
|||
johanbrook:publication-collector@1.1.0 |
|||
launch-screen@1.2.0 |
|||
livedata@1.0.18 |
|||
logging@1.1.20 |
|||
meteor@1.9.3 |
|||
meteor-base@1.4.0 |
|||
meteortesting:browser-tests@1.3.4 |
|||
meteortesting:mocha@2.0.1 |
|||
meteortesting:mocha-core@8.0.1 |
|||
minifier-css@1.5.3 |
|||
minifier-js@2.6.0 |
|||
minimongo@1.6.0 |
|||
mobile-experience@1.1.0 |
|||
mobile-status-bar@1.1.0 |
|||
modern-browsers@0.1.5 |
|||
modules@0.15.0 |
|||
modules-runtime@0.12.0 |
|||
mongo@1.10.0 |
|||
mongo-decimal@0.1.1 |
|||
mongo-dev-server@1.1.0 |
|||
mongo-id@1.0.7 |
|||
npm-mongo@3.8.1 |
|||
ordered-dict@1.1.0 |
|||
promise@0.11.2 |
|||
random@1.2.0 |
|||
reactive-var@1.0.11 |
|||
reload@1.3.0 |
|||
retry@1.1.0 |
|||
routepolicy@1.1.0 |
|||
shell-server@0.5.0 |
|||
socket-stream-client@0.3.1 |
|||
spacebars-compiler@1.1.3 |
|||
standard-minifier-css@1.6.1 |
|||
standard-minifier-js@2.6.0 |
|||
static-html@1.2.2 |
|||
templating-tools@1.1.2 |
|||
tracker@1.2.0 |
|||
typescript@3.7.6 |
|||
underscore@1.0.10 |
|||
url@1.3.1 |
|||
webapp@1.9.1 |
|||
webapp-hashing@1.0.9 |
@ -0,0 +1,7 @@ |
|||
<head> |
|||
<title>vue-test</title> |
|||
</head> |
|||
|
|||
<body> |
|||
<div id="app"></div> |
|||
</body> |
@ -0,0 +1,12 @@ |
|||
import Vue from 'vue' |
|||
|
|||
import '../imports/ui/plugins' |
|||
|
|||
import App from '../imports/ui/App.vue' |
|||
|
|||
Meteor.startup(() => { |
|||
new Vue({ |
|||
el: '#app', |
|||
...App, |
|||
}) |
|||
}) |
@ -0,0 +1,3 @@ |
|||
import { Mongo } from 'meteor/mongo'; |
|||
|
|||
export default new Mongo.Collection('links'); |
@ -0,0 +1,24 @@ |
|||
// Tests for the behavior of the links collection
|
|||
//
|
|||
// https://guide.meteor.com/testing.html
|
|||
|
|||
import { Meteor } from 'meteor/meteor'; |
|||
import { assert } from 'chai'; |
|||
import Links from './Links.js'; |
|||
|
|||
if (Meteor.isServer) { |
|||
describe('links collection', function () { |
|||
it('insert correctly', function () { |
|||
const linkId = Links.insert({ |
|||
title: 'meteor homepage', |
|||
url: 'https://www.meteor.com', |
|||
}); |
|||
const added = Links.find({ _id: linkId }); |
|||
const collectionName = added._getCollectionName(); |
|||
const count = added.count(); |
|||
|
|||
assert.equal(collectionName, 'links'); |
|||
assert.equal(count, 1); |
|||
}); |
|||
}); |
|||
} |
@ -0,0 +1,32 @@ |
|||
import { Meteor } from 'meteor/meteor'; |
|||
import Links from './collections/Links.js'; |
|||
|
|||
Meteor.startup(() => { |
|||
// if the Links collection is empty
|
|||
if (Links.find().count() === 0) { |
|||
const data = [ |
|||
{ |
|||
title: 'Do the Tutorial', |
|||
url: 'https://www.meteor.com/try', |
|||
createdAt: new Date(), |
|||
}, |
|||
{ |
|||
title: 'Follow the Guide', |
|||
url: 'http://guide.meteor.com', |
|||
createdAt: new Date(), |
|||
}, |
|||
{ |
|||
title: 'Read the Docs', |
|||
url: 'https://docs.meteor.com', |
|||
createdAt: new Date(), |
|||
}, |
|||
{ |
|||
title: 'Discussions', |
|||
url: 'https://forums.meteor.com', |
|||
createdAt: new Date(), |
|||
}, |
|||
]; |
|||
|
|||
data.forEach(link => Links.insert(link)); |
|||
} |
|||
}); |
@ -0,0 +1,16 @@ |
|||
import { Meteor } from 'meteor/meteor'; |
|||
import { check } from 'meteor/check'; |
|||
import Links from '../collections/Links.js'; |
|||
|
|||
Meteor.methods({ |
|||
'createLink'(title, url) { |
|||
check(url, String); |
|||
check(title, String); |
|||
|
|||
return Links.insert({ |
|||
url, |
|||
title, |
|||
createdAt: new Date(), |
|||
}); |
|||
}, |
|||
}); |
@ -0,0 +1,20 @@ |
|||
import { Meteor } from 'meteor/meteor'; |
|||
import { assert } from 'chai'; |
|||
import Links from '../collections/Links.js'; |
|||
import './methods.js'; |
|||
|
|||
if (Meteor.isServer) { |
|||
describe('method: createLink', function () { |
|||
beforeEach(function () { |
|||
Links.remove({}); |
|||
}); |
|||
|
|||
it('can add a new link', function () { |
|||
const addLink = Meteor.server.method_handlers['createLink']; |
|||
|
|||
addLink.apply({}, ['meteor.com', 'https://www.meteor.com']); |
|||
|
|||
assert.equal(Links.find().count(), 1); |
|||
}); |
|||
}); |
|||
} |
@ -0,0 +1 @@ |
|||
import './createLink' |
@ -0,0 +1 @@ |
|||
import './links' |
@ -0,0 +1,6 @@ |
|||
import { Meteor } from 'meteor/meteor'; |
|||
import Links from '../collections/Links.js'; |
|||
|
|||
Meteor.publish('links', function () { |
|||
return Links.find(); |
|||
}); |
@ -0,0 +1,22 @@ |
|||
import { assert } from 'chai' |
|||
import { PublicationCollector } from 'meteor/johanbrook:publication-collector' |
|||
import Links from '../collections/Links.js' |
|||
import './publications.js' |
|||
|
|||
describe('Publish links', function () { |
|||
beforeEach(function () { |
|||
Links.remove({}) |
|||
Links.insert({ |
|||
title: 'meteor homepage', |
|||
url: 'https://www.meteor.com' |
|||
}) |
|||
}) |
|||
|
|||
it('sends all links', function (done) { |
|||
const collector = new PublicationCollector() |
|||
collector.collect('links', (collections) => { |
|||
assert.equal(collections.links.length, 1) |
|||
done() |
|||
}) |
|||
}) |
|||
}) |
@ -0,0 +1,26 @@ |
|||
<template> |
|||
<div> |
|||
<h1>Welcome to Meteor!</h1> |
|||
<hello/> |
|||
<info/> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import Hello from './components/Hello.vue' |
|||
import Info from './components/Info.vue' |
|||
|
|||
export default { |
|||
components: { |
|||
Hello, |
|||
Info, |
|||
}, |
|||
} |
|||
</script> |
|||
|
|||
<style> |
|||
body { |
|||
font-family: sans-serif; |
|||
padding: 10px; |
|||
} |
|||
</style> |
@ -0,0 +1,27 @@ |
|||
<template> |
|||
<div> |
|||
<button @click="increment">Click Me</button> |
|||
<p>You've pressed the button {{counter}} times.</p> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
export default { |
|||
data() { |
|||
return { |
|||
counter: 0, |
|||
} |
|||
}, |
|||
methods: { |
|||
increment() { |
|||
this.counter += 1 |
|||
} |
|||
}, |
|||
} |
|||
</script> |
|||
|
|||
<style scoped> |
|||
p { |
|||
font-family: serif; |
|||
} |
|||
</style> |
@ -0,0 +1,55 @@ |
|||
<template> |
|||
<div> |
|||
<h2>Learn Meteor!</h2> |
|||
<ul> |
|||
<li> |
|||
<form class="info-link-add"> |
|||
<input type="text" v-model="title" name="title" placeholder="Title" required> |
|||
<input type="url" v-model="url" name="url" placeholder="Url" required> |
|||
<input type="submit" name="submit" @click="submit($event)" value="Add new link"> |
|||
</form> |
|||
</li> |
|||
<li v-for="link in links"><a :href="link.url" target="_blank">{{link.title}}</a></li> |
|||
</ul> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import Links from '../../api/collections/Links' |
|||
|
|||
export default { |
|||
data() { |
|||
return { |
|||
title: "", |
|||
url: "", |
|||
} |
|||
}, |
|||
meteor: { |
|||
$subscribe: { |
|||
'links': [], |
|||
}, |
|||
links () { |
|||
return Links.find({}) |
|||
}, |
|||
}, |
|||
methods: { |
|||
submit(event) { |
|||
event.preventDefault() |
|||
Meteor.call('createLink', this.title, this.url, (error) => { |
|||
if (error) { |
|||
alert(error.error) |
|||
} else { |
|||
this.title = '' |
|||
this.url = '' |
|||
} |
|||
}) |
|||
} |
|||
}, |
|||
} |
|||
</script> |
|||
|
|||
<style scoped> |
|||
ul { |
|||
font-family: monospace; |
|||
} |
|||
</style> |
@ -0,0 +1,4 @@ |
|||
import Vue from 'vue' |
|||
import VueMeteorTracker from 'vue-meteor-tracker' |
|||
|
|||
Vue.use(VueMeteorTracker) |
@ -0,0 +1,24 @@ |
|||
{ |
|||
"name": "vue-test", |
|||
"private": true, |
|||
"scripts": { |
|||
"start": "meteor run", |
|||
"build": "meteor build --directory ./", |
|||
"test": "meteor test --once --driver-package meteortesting:mocha", |
|||
"test-app": "TEST_WATCH=1 meteor test --full-app --driver-package meteortesting:mocha", |
|||
"visualize": "meteor --production --extra-packages bundle-visualizer" |
|||
}, |
|||
"dependencies": { |
|||
"@babel/runtime": "^7.11.2", |
|||
"meteor-node-stubs": "^1.0.1", |
|||
"vue": "^2.6.12", |
|||
"vue-meteor-tracker": "^2.0.0-beta.5" |
|||
}, |
|||
"meteor": { |
|||
"mainModule": { |
|||
"client": "client/main.js", |
|||
"server": "server/main.js" |
|||
}, |
|||
"testModule": "tests/main.js" |
|||
} |
|||
} |
@ -0,0 +1,3 @@ |
|||
import '../imports/api/fixtures' |
|||
import '../imports/api/methods' |
|||
import '../imports/api/publications' |
@ -0,0 +1,20 @@ |
|||
import assert from "assert"; |
|||
|
|||
describe("skel", function () { |
|||
it("package.json has correct name", async function () { |
|||
const { name } = await import("../package.json"); |
|||
assert.strictEqual(name, "skel"); |
|||
}); |
|||
|
|||
if (Meteor.isClient) { |
|||
it("client is not server", function () { |
|||
assert.strictEqual(Meteor.isServer, false); |
|||
}); |
|||
} |
|||
|
|||
if (Meteor.isServer) { |
|||
it("server is not client", function () { |
|||
assert.strictEqual(Meteor.isClient, false); |
|||
}); |
|||
} |
|||
}); |
Chargement…
Référencer dans un nouveau ticket