diff --git a/Dockerfile b/Dockerfile index 09650cd7..2fe0ef39 100644 --- a/Dockerfile +++ b/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="The Gun Database Team" \ + 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"] diff --git a/README.md b/README.md index 0b0ea210..64d47571 100644 --- a/README.md +++ b/README.md @@ -55,8 +55,8 @@ 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](https://www.docker.com/) - - Either (fastest) from the [Docker Hub](https://hub.docker.com/r/gundb/gun/): +### [Docker](https://www.docker.com/) + - Either (fastest) from the [Docker Hub](https://hub.docker.com/r/gundb/gun/)(Built at [![](https://images.microbadger.com/badges/commit/gundb/gun.svg)](https://microbadger.com/images/gundb/gun "Get your own commit badge on microbadger.com")): ```bash docker run -p 8080:8080 gundb/gun @@ -68,10 +68,18 @@ Try the [interactive tutorial](http://gun.js.org/think.html) in the browser (**5 cd gun docker build -t myrepo/gundb:v1 . docker run -p 8080:8080 myrepo/gundb:v1 +``` + - Or, if you prefer your Docker image with metadata labels (Linux/Mac only): + + ```bash + npm run docker + docker run -p 8080:8080 usenameHere/gun:git ``` Then visit [http://localhost:8080](http://localhost:8080) in your browser. ### [Heroku](https://www.heroku.com/) + - Either click [![Deploy](https://www.herokucdn.com/deploy/button.svg)](https://heroku.com/deploy?template=https://github.com/amark/gun/tree/0.5) to deploy to your existing Heroku account immediately, OR: + ```bash git clone https://github.com/amark/gun.git cd gun @@ -119,7 +127,7 @@ Designed with ♥ by Mark Nadal, the gun team, and many amazing contributors. L Thanks to the following people who have contributed to GUN, via code, issues, or conversation (this list has quickly become tremendously behind! We'll probably turn this into a dedicated wiki page so you can add yourself): -[agborkowski](https://github.com/agborkowski); [alexlafroscia](https://github.com/alexlafroscia); [anubiann00b](https://github.com/anubiann00b); [bromagosa](https://github.com/bromagosa); [coolaj86](https://github.com/coolaj86); [d-oliveros](https://github.com/d-oliveros), [danscan](https://github.com/danscan); **[forrestjt](https://github.com/forrestjt) ([file.js](https://github.com/amark/gun/blob/master/lib/file.js))**; [gedw99](https://github.com/gedw99); [HelloCodeMing](https://github.com/HelloCodeMing); **[JosePedroDias](https://github.com/josepedrodias) (graph visualizer)**; **[jveres](https://github.com/jveres) ([todoMVC](https://github.com/jveres/todomvc) [live demo](http://todos.loqali.com/))**; [ndarilek](https://github.com/ndarilek); [onetom](https://github.com/onetom); [phpnode](https://github.com/phpnode); [PsychoLlama](https://github.com/PsychoLlama); **[RangerMauve](https://github.com/RangerMauve) ([schema](https://github.com/gundb/gun-schema))**; [riston](https://github.com/riston); [rootsical](https://github.com/rootsical); [rrrene](https://github.com/rrrene); [ssr1ram](https://github.com/ssr1ram); [Xe](https://github.com/Xe); [zot](https://github.com/zot); +[agborkowski](https://github.com/agborkowski); [alexlafroscia](https://github.com/alexlafroscia); [anubiann00b](https://github.com/anubiann00b); [bromagosa](https://github.com/bromagosa); [coolaj86](https://github.com/coolaj86); [d-oliveros](https://github.com/d-oliveros), [danscan](https://github.com/danscan); **[forrestjt](https://github.com/forrestjt) ([file.js](https://github.com/amark/gun/blob/master/lib/file.js))**; [gedw99](https://github.com/gedw99); [HelloCodeMing](https://github.com/HelloCodeMing); **[Hillct](https://github.com/hillct) (Deployment Tools); **[JosePedroDias](https://github.com/josepedrodias) (graph visualizer)**; **[jveres](https://github.com/jveres) ([todoMVC](https://github.com/jveres/todomvc) [live demo](http://todos.loqali.com/))**; [ndarilek](https://github.com/ndarilek); [onetom](https://github.com/onetom); [phpnode](https://github.com/phpnode); [PsychoLlama](https://github.com/PsychoLlama); **[RangerMauve](https://github.com/RangerMauve) ([schema](https://github.com/gundb/gun-schema))**; [riston](https://github.com/riston); [rootsical](https://github.com/rootsical); [rrrene](https://github.com/rrrene); [ssr1ram](https://github.com/ssr1ram); [Xe](https://github.com/Xe); [zot](https://github.com/zot); [ayurmedia](https://github.com/ayurmedia); This list of contributors was manually compiled and alphabetically sorted. If we missed you, please submit an issue so we can get you added! diff --git a/app.json b/app.json new file mode 100644 index 00000000..005f6f0e --- /dev/null +++ b/app.json @@ -0,0 +1,8 @@ +{ + "name": "gun-server", + "website": "http://gun.js.org", + "repository": "https://github.com/amark/gun", + "logo": "https://avatars3.githubusercontent.com/u/8811914", + "keywords": ["node", "gun", "gunDB", "database","graph","offline-first"], + "description": "Javascript, Offline-First Javascript Graph Database Server Peer" +} diff --git a/gun.js b/gun.js index 6bbd937e..efea12bf 100644 --- a/gun.js +++ b/gun.js @@ -1025,26 +1025,26 @@ return Gun.obj.has(this.cache, id); } Dedup.prototype.gc = function(){ + var de = this; var now = Gun.time.is(); var oldest = now; var maxAge = 5 * 60 * 1000; - var cache = this.cache; - // TODO: Gun.scheduler already does this? Reuse that. - Gun.obj.map(this.cache, function (time, id) { + // TODO: Gun.scheduler already does this? Reuse that. + Gun.obj.map(de.cache, function (time, id) { oldest = Math.min(now, time); if ((now - time) < maxAge) { return; } - delete cache[id]; - }); + delete de.cache[id]; + }); - var done = Gun.obj.empty(this.cache); + var done = Gun.obj.empty(de.cache); // Disengage GC. if (done) { - this.to = null; + de.to = null; return; } @@ -1055,8 +1055,7 @@ var nextGC = maxAge - elapsed; // Schedule the next GC event. - var dedup = this; - this.to = setTimeout(function(){ dedup.gc() }, nextGC); + de.to = setTimeout(function(){ de.gc() }, nextGC); } }()); var text = Type.text, text_is = text.is, text_random = text.random; diff --git a/hooks/build b/hooks/build new file mode 100755 index 00000000..1f6fd415 --- /dev/null +++ b/hooks/build @@ -0,0 +1,7 @@ +#!/bin/bash +FOO=${IMAGE_NAME:=`whoami`/gun:git-local} +BAR=${SOURCE_BRANCH:=`git rev-parse --abbrev-ref HEAD`} +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 config --get remote.origin.url` \ + --build-arg VERSION=$SOURCE_BRANCH -t $IMAGE_NAME . diff --git a/hooks/post_push b/hooks/post_push new file mode 100755 index 00000000..38af73a6 --- /dev/null +++ b/hooks/post_push @@ -0,0 +1,3 @@ +#!/bin/bash +docker tag $IMAGE_NAME $DOCKER_REPO:latest +docker push $DOCKER_REPO:latest diff --git a/package.json b/package.json index b5969385..ab9f8c81 100644 --- a/package.json +++ b/package.json @@ -5,8 +5,9 @@ "main": "index.js", "scripts": { "start": "node examples/http.js 8080", - "prepublish": "uglifyjs2 gun.js -o gun.min.js -c -m", + "prepublish": "npm run unbuild && uglifyjs gun.js -o gun.min.js -c -m", "test": "mocha", + "docker": "hooks/build", "unbuild": "node lib/unbuild.js" }, "repository": { @@ -54,6 +55,6 @@ "mocha": "~>1.9.0", "panic-server": "~>0.3.0", "selenium-webdriver": "~>2.53.2", - "uglify-js2": "^2.1.11" + "uglify-js": "^2.2.0" } } diff --git a/src/.gitignore b/src/.gitignore new file mode 100644 index 00000000..5e7d2734 --- /dev/null +++ b/src/.gitignore @@ -0,0 +1,4 @@ +# Ignore everything in this directory +* +# Except this file +!.gitignore