Skip to content

Commit

Permalink
Alpine based Docker image, metadata labels & Autobuild hooks
Browse files Browse the repository at this point in the history
  • Loading branch information
hillct committed Dec 1, 2016
1 parent cb397ae commit 967bc97
Show file tree
Hide file tree
Showing 5 changed files with 80 additions and 34 deletions.
23 changes: 22 additions & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
@@ -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 changes: 21 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,12 @@
# gun [![NPM downloads](https://img.shields.io/npm/dm/gun.svg?style=flat)](https://npmjs.org/package/gun) [![Build Status](https://travis-ci.org/amark/gun.svg?branch=master)](https://travis-ci.org/amark/gun) [![Gitter](https://badges.gitter.im/Join%20Chat.svg)](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>
[![NPM downloads](https://img.shields.io/npm/dm/gun.svg?style=flat)](https://npmjs.org/package/gun) [![Build Status](https://travis-ci.org/amark/gun.svg?branch=master)](https://travis-ci.org/amark/gun) [![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/amark/gun?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
[![Docker Automated buil](https://img.shields.io/docker/automated/gundb/gun.svg)](https://hub.docker.com/r/gundb/gun/) [![](https://images.microbadger.com/badges/image/gundb/gun.svg)](https://microbadger.com/images/gundb/gun "Get your own image badge on microbadger.com") [![Docker Pulls](https://img.shields.io/docker/pulls/gundb/gun.svg)](https://hub.docker.com/r/gundb/gun/) [![Docker Stars](https://img.shields.io/docker/stars/gundb/gun.svg)](https://hub.docker.com/r/gundb/gun/)

GUN is a realtime, distributed, offline-first, graph database engine. Lightweight and powerful, at just **~9KB** gzipped.

Expand Down Expand Up @@ -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
Expand All @@ -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
Expand Down
56 changes: 29 additions & 27 deletions gun.js
Original file line number Diff line number Diff line change
Expand Up @@ -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} }
Expand All @@ -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!!!
Expand All @@ -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});
Expand Down Expand Up @@ -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){
Expand Down Expand Up @@ -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;
}

Expand All @@ -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;
Expand Down Expand Up @@ -2484,4 +2486,4 @@

})(require, './adapters/wsp');

}());
}());
5 changes: 5 additions & 0 deletions hooks/build
Original file line number Diff line number Diff line change
@@ -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 changes: 3 additions & 0 deletions hooks/post_push
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#!/bin/bash
docker tag $IMAGE_NAME $DOCKER_REPO:latest
docker push $DOCKER_REPO:latest

0 comments on commit 967bc97

Please sign in to comment.