mirror of
https://github.com/amark/gun.git
synced 2025-03-30 15:08:33 +00:00
Alpine based Docker image, metadata labels & Autobuild hooks
This commit is contained in:
parent
cb397aeb8b
commit
967bc972f7
23
Dockerfile
23
Dockerfile
@ -1,3 +1,24 @@
|
||||
FROM node:6-onbuild
|
||||
FROM alpine:edge
|
||||
# Build-time metadata as defined at http://label-schema.org
|
||||
ARG BUILD_DATE
|
||||
ARG VCS_REF
|
||||
ARG VCS_URL
|
||||
ARG VERSION
|
||||
LABEL org.label-schema.build-date=$BUILD_DATE \
|
||||
org.label-schema.name="Gun - Offline First, Javascript Graph Database" \
|
||||
# org.label-schema.description="Let it be pulled from Readme.md..." \
|
||||
org.label-schema.url="http://gun.js.org" \
|
||||
org.label-schema.vcs-ref=$VCS_REF \
|
||||
org.label-schema.vcs-url=$VCS_URL \
|
||||
org.label-schema.vendor="Pinnacle Digital" \
|
||||
org.label-schema.version=$VERSION \
|
||||
org.label-schema.schema-version="1.0"
|
||||
WORKDIR /app
|
||||
ADD . .
|
||||
ENV NPM_CONFIG_LOGLEVEL warn
|
||||
RUN apk update && apk upgrade \
|
||||
&& apk add --no-cache ca-certificates nodejs \
|
||||
&& npm install \
|
||||
&& rm -rf /var/cache/* -rf /tmp/npm*
|
||||
EXPOSE 8080
|
||||
CMD ["npm","start"]
|
||||
|
27
README.md
27
README.md
@ -1,4 +1,12 @@
|
||||
# gun [](https://npmjs.org/package/gun) [](https://travis-ci.org/amark/gun) [](https://gitter.im/amark/gun?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
||||
<h1>
|
||||
<a href="http://gundb.io">
|
||||
<img src='https://cldup.com/TEy9yGh45l.svg'
|
||||
width='40%'
|
||||
alt="gun" />
|
||||
</a>
|
||||
</h1>
|
||||
[](https://npmjs.org/package/gun) [](https://travis-ci.org/amark/gun) [](https://gitter.im/amark/gun?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
||||
[](https://hub.docker.com/r/gundb/gun/) [](https://microbadger.com/images/gundb/gun "Get your own image badge on microbadger.com") [](https://hub.docker.com/r/gundb/gun/) [](https://hub.docker.com/r/gundb/gun/)
|
||||
|
||||
GUN is a realtime, distributed, offline-first, graph database engine. Lightweight and powerful, at just **~9KB** gzipped.
|
||||
|
||||
@ -47,16 +55,23 @@ Try the [interactive tutorial](http://gun.js.org/think.html) in the browser (**5
|
||||
|
||||
- To quickly spin up a Gun test server for your development team, uilize eiher [Heroku](http://heroku.com) or [Docker](http://docker.com) or any variant thereof ([Dokku](http://dokku.viewdocs.io/dokku/), [Flynn.io](http://flynn.io), [now.sh](https://zeit.co/now), etc)
|
||||
|
||||
### Docker
|
||||
```bash
|
||||
### [Docker](https://www.docker.com/)
|
||||
- Either (fastest) from the [Docker Hub](https://hub.docker.com/r/gundb/gun/):
|
||||
|
||||
```bash
|
||||
docker run -p 8080:8080 gundb/gun
|
||||
```
|
||||
- Or build the [Docker](https://docs.docker.com/engine/installation/) image locally:
|
||||
|
||||
```bash
|
||||
git clone https://github.com/amark/gun.git
|
||||
cd gun
|
||||
docker build -t myrepo/gundb:v1 .
|
||||
docker run -p 8080:8080 myrepo/gundb:v1
|
||||
```
|
||||
```
|
||||
Then visit [http://localhost:8080](http://localhost:8080) in your browser.
|
||||
|
||||
### Heroku
|
||||
### [Heroku](https://www.heroku.com/)
|
||||
```bash
|
||||
git clone https://github.com/amark/gun.git
|
||||
cd gun
|
||||
@ -65,7 +80,7 @@ Try the [interactive tutorial](http://gun.js.org/think.html) in the browser (**5
|
||||
```
|
||||
Then visit the URL in the output of the 'heroku create' step, in your browser.
|
||||
|
||||
### Now.sh
|
||||
### [Now.sh](https://zeit.co/now/)
|
||||
```bash
|
||||
npm install -g now
|
||||
git clone https://github.com/amark/gun.git
|
||||
|
56
gun.js
56
gun.js
@ -908,7 +908,9 @@
|
||||
Gun.chain.opt = function(opt){
|
||||
opt = opt || {};
|
||||
var gun = this, at = gun._, tmp, u;
|
||||
if(!at.root){ root(at) }
|
||||
at.root = at.root || gun;
|
||||
at.graph = at.graph || {};
|
||||
at.dedup = new Dedup();
|
||||
at.opt = at.opt || {};
|
||||
if(text_is(opt)){ opt = {peers: opt} }
|
||||
else if(list_is(opt)){ opt = {peers: opt} }
|
||||
@ -922,15 +924,13 @@
|
||||
this[f] = v;
|
||||
}, at.opt);
|
||||
Gun.on('opt', at);
|
||||
if(!at.once){
|
||||
gun.on('in', input, at);
|
||||
gun.on('out', output, at);
|
||||
}
|
||||
at.once = true;
|
||||
return gun;
|
||||
}
|
||||
function root(at){
|
||||
var gun = at.gun;
|
||||
at.root = gun;
|
||||
at.graph = {};
|
||||
gun.on('in', input, at);
|
||||
gun.on('out', output, at);
|
||||
}
|
||||
function output(at){
|
||||
var cat = this, gun = cat.gun, tmp;
|
||||
// TODO: BUG! Outgoing `get` to read from in memory!!!
|
||||
@ -939,7 +939,7 @@
|
||||
cat.on('in', obj_to(at, {gun: cat.gun})); // TODO: PERF! input now goes to output so it would be nice to reduce the circularity here for perf purposes.
|
||||
//}
|
||||
if(at['#']){
|
||||
dedup.track(at['#']);
|
||||
cat.dedup.track(at['#']);
|
||||
}
|
||||
if(!at.gun){
|
||||
at = Gun.obj.to(at, {gun: gun});
|
||||
@ -974,12 +974,12 @@
|
||||
if(!at['#'] && at['@']){
|
||||
at['#'] = Gun.text.random(); // TODO: Use what is used other places instead.
|
||||
Gun.on.ack(at['@'], at);
|
||||
dedup.track(at['#']);
|
||||
cat.dedup.track(at['#']);
|
||||
cat.on('out', at);
|
||||
return;
|
||||
}
|
||||
if(at['#'] && dedup.check(at['#'])){ return }
|
||||
dedup.track(at['#']);
|
||||
if(at['#'] && cat.dedup.check(at['#'])){ return }
|
||||
cat.dedup.track(at['#']);
|
||||
Gun.on.ack(at['@'], at);
|
||||
if(at.put){
|
||||
if(cat.graph){
|
||||
@ -1011,40 +1011,41 @@
|
||||
via: this.at
|
||||
});
|
||||
}
|
||||
function dedup(){}
|
||||
dedup.cache = {};
|
||||
dedup.track = function (id) {
|
||||
dedup.cache[id] = Gun.time.is();
|
||||
function Dedup(){
|
||||
this.cache = {};
|
||||
}
|
||||
Dedup.prototype.track = function (id) {
|
||||
this.cache[id] = Gun.time.is();
|
||||
// Engage GC.
|
||||
if (!dedup.to) {
|
||||
dedup.gc();
|
||||
if (!this.to) {
|
||||
this.gc();
|
||||
}
|
||||
return id;
|
||||
};
|
||||
dedup.check = function(id){
|
||||
Dedup.prototype.check = function(id){
|
||||
// Have we seen this ID recently?
|
||||
return Gun.obj.has(dedup.cache, id);
|
||||
return Gun.obj.has(this.cache, id);
|
||||
}
|
||||
dedup.gc = function(){
|
||||
Dedup.prototype.gc = function(){
|
||||
var now = Gun.time.is();
|
||||
var oldest = now;
|
||||
var maxAge = 5 * 60 * 1000;
|
||||
// TODO: Gun.scheduler already does this? Reuse that.
|
||||
Gun.obj.map(dedup.cache, function (time, id) {
|
||||
Gun.obj.map(this.cache, function (time, id) {
|
||||
oldest = Math.min(now, time);
|
||||
|
||||
if ((now - time) < maxAge) {
|
||||
return;
|
||||
}
|
||||
|
||||
delete dedup.cache[id];
|
||||
delete this.cache[id];
|
||||
});
|
||||
|
||||
var done = Gun.obj.empty(dedup.cache);
|
||||
var done = Gun.obj.empty(this.cache);
|
||||
|
||||
// Disengage GC.
|
||||
if (done) {
|
||||
dedup.to = null;
|
||||
this.to = null;
|
||||
return;
|
||||
}
|
||||
|
||||
@ -1055,7 +1056,8 @@
|
||||
var nextGC = maxAge - elapsed;
|
||||
|
||||
// Schedule the next GC event.
|
||||
dedup.to = setTimeout(dedup.gc, nextGC);
|
||||
var dedup = this;
|
||||
this.to = setTimeout(function(){ dedup.gc() }, nextGC);
|
||||
}
|
||||
}());
|
||||
var text = Type.text, text_is = text.is, text_random = text.random;
|
||||
@ -2484,4 +2486,4 @@
|
||||
|
||||
})(require, './adapters/wsp');
|
||||
|
||||
}());
|
||||
}());
|
5
hooks/build
Executable file
5
hooks/build
Executable file
@ -0,0 +1,5 @@
|
||||
#!/bin/bash
|
||||
docker build --build-arg BUILD_DATE=`date -u +"%Y-%m-%dT%H:%M:%SZ"` \
|
||||
--build-arg VCS_REF=`git rev-parse --short HEAD` \
|
||||
--build-arg VCS_URL=`git remote get-url origin` \
|
||||
--build-arg VERSION=$SOURCE_BRANCH -t $IMAGE_NAME .
|
3
hooks/post_push
Executable file
3
hooks/post_push
Executable file
@ -0,0 +1,3 @@
|
||||
#!/bin/bash
|
||||
docker tag $IMAGE_NAME $DOCKER_REPO:latest
|
||||
docker push $DOCKER_REPO:latest
|
Loading…
x
Reference in New Issue
Block a user