Giter Club home page Giter Club logo

gh-badges's People

Contributors

alrra avatar espadrine avatar ezzatron avatar jmalloc avatar mathiasbynens avatar relrod avatar rmasters avatar stefanjudis avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

gh-badges's Issues

Following color, rounding and font "standard" from other providers.

It seems there is a kind of "de facto standard" for badges' appearance.

Right now, img.shields.io is not following it, so its badges stand out as "different".

Example : https://github.com/Offirmo/network-constants.js

You can see that badges from img.shields.io have a bigger font, a slightly different color and more round corners.

I thank img.shields.io would be even more awesome if it was following the other badges styles, which I find better. Badges should be small.

What do you think ?

Build a web service

Buckler is a service to download PNG images of badges with any text and color.

We can do the same, with an SVG output.

This bug is here to track progress. A few issues:

  • Buckler relies on a single color, and applies a gradient to it.
  • Buckler relies on data sent in the URL. What format should we use?
  • Buckler has an associated server running. What DNS name should we use?

Tracking Gemnasium’s adoption of these badges

I’d like Gemnasium to offer their badges as SVG using the format used in this project.

I think these are all the badges Gemnasium needs:

Badge Link to example SVG code
dependencies out-of-date /:dependencies-out--of--date-yellow.svg
devDependencies out-of-date /:devDependencies-out--of--date-yellow.svg
dependencies up-to-date /:dependencies-up--to--date-brightgreen.svg
devDependencies up-to-date /:devDependencies-up--to--date-brightgreen.svg
dependencies update! /:dependencies-update!-red.svg
devDependencies update! /:devDependencies-update!-red.svg
dependencies unknown /:dependencies-unknown-lightgrey.svg
dependencies none /:dependencies-none-brightgreen.svg

Since there’s no appropriate public repository to file this request, I’ll just send them a link to this issue instead.

Installation in Node.js v5.8.0 - Compilation error

I installed gh-badges a few days ago on a server running Node.js v0.10.25. For that installation, npm was able to complete the install after I did the following things in order:

apt-get update
apt-get install libcairo2-dev libturbojpeg libjpeg-dev libpango1.0-dev libgif-dev build-essential g++
npm install -g canvas
npm install -g gh-badges

Unfortunately, after upgrading Node, I'm getting some errors I wasn't getting before:

npm WARN deprecated [email protected]: graceful-fs version 3 and before will fail on newer node releases. Please update to graceful-fs@^4.0.0 as soon as possible.
npm WARN deprecated [email protected]: graceful-fs version 3 and before will fail on newer node releases. Please update to graceful-fs@^4.0.0 as soon as possible.
npm WARN deprecated [email protected]: this package has been reintegrated into npm and is now out of date with respect to npm
/usr/bin/badge -> /usr/lib/node_modules/gh-badges/gh-badge.js

> [email protected] install /usr/lib/node_modules/gh-badges/node_modules/canvas
> node-gyp rebuild

gyp WARN EACCES user "root" does not have permission to access the dev dir "/root/.node-gyp/5.8.0"
gyp WARN EACCES attempting to reinstall using temporary dev dir "/usr/lib/node_modules/gh-badges/node_modules/canvas/.node-gyp"
make: Entering directory '/usr/lib/node_modules/gh-badges/node_modules/canvas/build'
  SOLINK_MODULE(target) Release/obj.target/canvas-postbuild.node
  COPY Release/canvas-postbuild.node
  CXX(target) Release/obj.target/canvas/src/Canvas.o
In file included from ../src/Canvas.h:22:0,
                 from ../src/Canvas.cc:7:
../node_modules/nan/nan.h: In function 'v8::Local<v8::Signature> NanNew(v8::Handle<v8::FunctionTemplate>, int, v8::Handle<v8::FunctionTemplate>*)':
../node_modules/nan/nan.h:342:78: error: no matching function for call to 'v8::Signature::New(v8::Isolate*, v8::Handle<v8::FunctionTemplate>&, int&, v8::Handle<v8::FunctionTemplate>*&)'
     return v8::Signature::New(v8::Isolate::GetCurrent(), receiver, argc, argv);
                                                                              ^
../node_modules/nan/nan.h:342:78: note: candidate is:
In file included from ../src/Canvas.h:11:0,
                 from ../src/Canvas.cc:7:
/usr/lib/node_modules/gh-badges/node_modules/canvas/.node-gyp/5.8.0/include/node/v8.h:4674:27: note: static v8::Local<v8::Signature> v8::Signature::New(v8::Isolate*, v8::Local<v8::FunctionTemplate>)
   static Local<Signature> New(
                           ^
/usr/lib/node_modules/gh-badges/node_modules/canvas/.node-gyp/5.8.0/include/node/v8.h:4674:27: note:   candidate expects 2 arguments, 4 provided
In file included from ../src/Canvas.h:22:0,
                 from ../src/Canvas.cc:7:
../node_modules/nan/nan.h: At global scope:
../node_modules/nan/nan.h:424:3: error: redefinition of 'v8::Local<T> NanNew(P) [with T = v8::StringObject; P = v8::Local<v8::String>]'
   NanNew<v8::StringObject, v8::Handle<v8::String> >(
   ^
../node_modules/nan/nan.h:417:3: error: 'v8::Local<T> NanNew(P) [with T = v8::StringObject; P = v8::Local<v8::String>]' previously declared here
   NanNew<v8::StringObject, v8::Local<v8::String> >(
   ^
../node_modules/nan/nan.h:442:36: error: redefinition of 'template<class T> v8::Local<v8::RegExp> NanNew(v8::Local<v8::String>, v8::RegExp::Flags)'
   NAN_INLINE v8::Local<v8::RegExp> NanNew(
                                    ^
../node_modules/nan/nan.h:436:36: error: 'template<class T> v8::Local<v8::RegExp> NanNew(v8::Handle<v8::String>, v8::RegExp::Flags)' previously declared here
   NAN_INLINE v8::Local<v8::RegExp> NanNew(
                                    ^
../node_modules/nan/nan.h:454:36: error: redefinition of 'template<class T, class P> v8::Local<v8::RegExp> NanNew(v8::Local<v8::String>, v8::RegExp::Flags)'
   NAN_INLINE v8::Local<v8::RegExp> NanNew(
                                    ^
../node_modules/nan/nan.h:448:36: error: 'template<class T, class P> v8::Local<v8::RegExp> NanNew(v8::Handle<v8::String>, v8::RegExp::Flags)' previously declared here
   NAN_INLINE v8::Local<v8::RegExp> NanNew(
                                    ^
../node_modules/nan/nan.h:623:19: error: 'NanNew' declared as an 'inline' variable
       v8::String::ExternalAsciiStringResource *resource) {
                   ^
../node_modules/nan/nan.h:623:19: warning: 'always_inline' attribute ignored [-Wattributes]
../node_modules/nan/nan.h:623:19: error: 'v8::Local<v8::String> NanNew' redeclared as different kind of symbol
../node_modules/nan/nan.h:617:36: error: previous declaration of 'v8::Local<v8::String> NanNew(v8::String::ExternalStringResource*)'
   NAN_INLINE v8::Local<v8::String> NanNew(
                                    ^
../node_modules/nan/nan.h:623:7: error: 'ExternalAsciiStringResource' is not a member of 'v8::String'
       v8::String::ExternalAsciiStringResource *resource) {
       ^
../node_modules/nan/nan.h:623:48: error: 'resource' was not declared in this scope
       v8::String::ExternalAsciiStringResource *resource) {
                                                ^
../node_modules/nan/nan.h:637:27: error: redefinition of 'template<class T> v8::Local<T> _NanEscapeScopeHelper(v8::Local<T>)'
   NAN_INLINE v8::Local<T> _NanEscapeScopeHelper(v8::Local<T> val) {
                           ^
../node_modules/nan/nan.h:632:27: error: 'template<class T> v8::Local<T> _NanEscapeScopeHelper(v8::Handle<T>)' previously declared here
   NAN_INLINE v8::Local<T> _NanEscapeScopeHelper(v8::Handle<T> val) {
                           ^
../node_modules/nan/nan.h:889:13: error: 'node::smalloc' has not been declared
     , node::smalloc::FreeCallback callback
             ^
../node_modules/nan/nan.h:889:35: error: expected ',' or '...' before 'callback'
     , node::smalloc::FreeCallback callback
                                   ^
../node_modules/nan/nan.h: In function 'v8::Local<v8::Object> NanNewBufferHandle(char*, size_t, int)':
../node_modules/nan/nan.h:893:50: error: 'callback' was not declared in this scope
         v8::Isolate::GetCurrent(), data, length, callback, hint);
                                                  ^
../node_modules/nan/nan.h:893:60: error: 'hint' was not declared in this scope
         v8::Isolate::GetCurrent(), data, length, callback, hint);
                                                            ^
../node_modules/nan/nan.h: In function 'v8::Local<v8::Object> NanNewBufferHandle(const char*, uint32_t)':
../node_modules/nan/nan.h:900:67: error: call of overloaded 'New(v8::Isolate*, const char*&, uint32_t&)' is ambiguous
     return node::Buffer::New(v8::Isolate::GetCurrent(), data, size);
                                                                   ^
../node_modules/nan/nan.h:900:67: note: candidates are:
In file included from ../node_modules/nan/nan.h:179:0,
                 from ../src/Canvas.h:22,
                 from ../src/Canvas.cc:7:
/usr/lib/node_modules/gh-badges/node_modules/canvas/.node-gyp/5.8.0/include/node/node_buffer.h:31:40: note: v8::MaybeLocal<v8::Object> node::Buffer::New(v8::Isolate*, v8::Local<v8::String>, node::encoding) <near match>
 NODE_EXTERN v8::MaybeLocal<v8::Object> New(v8::Isolate* isolate,
                                        ^
/usr/lib/node_modules/gh-badges/node_modules/canvas/.node-gyp/5.8.0/include/node/node_buffer.h:31:40: note:   no known conversion for argument 3 from 'uint32_t {aka unsigned int}' to 'node::encoding'
/usr/lib/node_modules/gh-badges/node_modules/canvas/.node-gyp/5.8.0/include/node/node_buffer.h:43:40: note: v8::MaybeLocal<v8::Object> node::Buffer::New(v8::Isolate*, char*, size_t) <near match>
 NODE_EXTERN v8::MaybeLocal<v8::Object> New(v8::Isolate* isolate,
                                        ^
/usr/lib/node_modules/gh-badges/node_modules/canvas/.node-gyp/5.8.0/include/node/node_buffer.h:43:40: note:   no known conversion for argument 2 from 'const char*' to 'char*'
In file included from ../src/Canvas.h:22:0,
                 from ../src/Canvas.cc:7:
../node_modules/nan/nan.h: In function 'v8::Local<v8::Object> NanNewBufferHandle(uint32_t)':
../node_modules/nan/nan.h:904:61: error: could not convert 'node::Buffer::New(v8::Isolate::GetCurrent(), ((size_t)size))' from 'v8::MaybeLocal<v8::Object>' to 'v8::Local<v8::Object>'
     return node::Buffer::New(v8::Isolate::GetCurrent(), size);
                                                             ^
../node_modules/nan/nan.h: In function 'v8::Local<v8::Object> NanBufferUse(char*, uint32_t)':
../node_modules/nan/nan.h:911:12: error: 'Use' is not a member of 'node::Buffer'
     return node::Buffer::Use(v8::Isolate::GetCurrent(), data, size);
            ^
../node_modules/nan/nan.h: In function 'bool _NanGetExternalParts(v8::Handle<v8::Value>, const char**, size_t*)':
../node_modules/nan/nan.h:1993:12: error: 'class v8::String' has no member named 'IsExternalAscii'
   if (str->IsExternalAscii()) {
            ^
../node_modules/nan/nan.h:1994:11: error: 'ExternalAsciiStringResource' in 'class v8::String' does not name a type
     const v8::String::ExternalAsciiStringResource* ext;
           ^
../node_modules/nan/nan.h:1995:5: error: 'ext' was not declared in this scope
     ext = str->GetExternalAsciiStringResource();
     ^
../node_modules/nan/nan.h:1995:16: error: 'class v8::String' has no member named 'GetExternalAsciiStringResource'
     ext = str->GetExternalAsciiStringResource();
                ^
../node_modules/nan/nan.h: In function 'v8::Local<v8::Object> NanNewBufferHandle(const char*, uint32_t)':
../node_modules/nan/nan.h:901:3: warning: control reaches end of non-void function [-Wreturn-type]
   }
   ^
make: *** [Release/obj.target/canvas/src/Canvas.o] Error 1
make: Leaving directory '/usr/lib/node_modules/gh-badges/node_modules/canvas/build'
gyp ERR! build error 
gyp ERR! stack Error: 'make' failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/usr/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:276:23)
gyp ERR! stack     at emitTwo (events.js:100:13)
gyp ERR! stack     at ChildProcess.emit (events.js:185:7)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:204:12)
gyp ERR! System Linux 3.19.0-25-generic
gyp ERR! command "/usr/bin/nodejs" "/usr/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /usr/lib/node_modules/gh-badges/node_modules/canvas
gyp ERR! node -v v5.8.0
gyp ERR! node-gyp -v v3.2.1
gyp ERR! not ok 
/usr/lib
└── (empty)

npm ERR! Linux 3.19.0-25-generic
npm ERR! argv "/usr/bin/nodejs" "/usr/bin/npm" "install" "-g" "gh-badges"
npm ERR! node v5.8.0
npm ERR! npm  v3.7.3
npm ERR! code ELIFECYCLE

npm ERR! [email protected] install: 'node-gyp rebuild'
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the [email protected] install script 'node-gyp rebuild'.
npm ERR! Make sure you have the latest version of node.js and npm installed.
npm ERR! If you do, this is most likely a problem with the canvas package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     node-gyp rebuild
npm ERR! You can get information on how to open an issue for this project with:
npm ERR!     npm bugs canvas
npm ERR! Or if that isn't available, you can get their info via:
npm ERR!     npm owner ls canvas
npm ERR! There is likely additional logging output above.

npm ERR! Please include the following file with any support request:
npm ERR!     /root/npm-debug.log
npm ERR! code 1

Since upgrading node, I have removed all existing node_modules and have been reinstalling them manually using npm to ensure they're installed properly with the new version of Node.

Work with existing services

When possible (when an API is available), we should have a way to provide a bridge to existing services.

eg, gh-badges.herokuapp.com/travis/joyent/node.svg.

This issue is to discuss which APIs we can access, and what is the most efficient way to do so.

Making PNG download faster

While SVG is simply a function call to generate, another to SVGO compress, and a last one to gzip, PNG follows all of those steps, loads phantomjs, converts the font to base64, includes it in the SVG, resizes the phantomjs window, takes a snapshot, converts it to PNG, and sends that.

I believe we can:

  • Keep phantomjs running (avoids startup time and re-computing the font's base64)
  • Cache the resulting image in a fixed-sized RAM store, keeping the most used ones around.

Add build script that generates SVG badges based on template

This repository will mainly host the template on which the SVG badges are used.

But we’ll want to create several badges with different settings:

  • different texts
  • different colors (build status: failed → red)

It would be cool if, whenever we make changes to the main template, the various badges can be updated just by running a build script.

I’m thinking: a JSON config file that contains settings for each badge (incl. width for each part of the badge as well as the name of the gradient/color combination that should be used). So, for each badge, there would be an entry like this:

{
  "text": [ "build", "passed" ],
  "widths": [ 77, 45 ],
  "colorscheme": "green"
}

Any other ideas?

Running from Docker

Hi there,

We have a network restriction to reach to shields website, so I'm trying to start the server using docker... I'm getting an error while running the built image... The error is:

> [email protected] start /usr/src/app
> node server.js

http://[::1]:80/try.html
No secret data (secret.json, see server.js): { [Error: Cannot find module './secret.json'] code: 'MODULE_NOT_FOUND' }
No secret data (secret.json, see server.js): { [Error: Cannot find module './secret.json'] code: 'MODULE_NOT_FOUND' }

Questions

  • Is there anything I need to run the server using Docker?
  • What's the secret module that's missing?
  • Where's it required?
  • How to generate it?

Here's what I did...

Building

[root@pppdc9prdabd shields]# docker build --build-arg HTTP_PROXY=$HTTP_PROXY -t badges .
INFO[0186] POST /v1.21/build?buildargs=%7B%22HTTP_PROXY%22%3A%22http%3A%2F%2Fqypprdproxy02.ie.intuit.net%3A80%22%7D&cgroupparent=&cpuperiod=0&cpuquota=0&cpusetcpus=&cpusetmems=&cpushares=0&dockerfile=Dockerfile&memory=0&memswap=0&rm=1&t=badges&ulimits=null
Sending build context to Docker daemon 3.992 MB
Step 1 : FROM node:0.12.7-onbuild
# Executing 3 build triggers...
Step 1 : COPY package.json /usr/src/app/
 ---> Using cache
Step 1 : RUN npm install
 ---> Running in 38e1efb0fd3f
npm WARN package.json [email protected] No README data
npm WARN package.json [email protected] No bin file found at ./gh-badge.js

> [email protected] install /usr/src/app/node_modules/canvas
> node-gyp rebuild

make: Entering directory '/usr/src/app/node_modules/canvas/build'
  SOLINK_MODULE(target) Release/obj.target/canvas-postbuild.node
  COPY Release/canvas-postbuild.node
  CXX(target) Release/obj.target/canvas/src/Canvas.o
  CXX(target) Release/obj.target/canvas/src/CanvasGradient.o
  CXX(target) Release/obj.target/canvas/src/CanvasPattern.o
  CXX(target) Release/obj.target/canvas/src/CanvasRenderingContext2d.o
  CXX(target) Release/obj.target/canvas/src/color.o
  CXX(target) Release/obj.target/canvas/src/Image.o
../src/Image.cc:661:13: warning: 'void jpeg_mem_src(j_decompress_ptr, void*, long int)' defined but not used [-Wunused-function]
 static void jpeg_mem_src (j_decompress_ptr cinfo, void* buffer, long nbytes) {
             ^
  CXX(target) Release/obj.target/canvas/src/ImageData.o
  CXX(target) Release/obj.target/canvas/src/init.o
  CXX(target) Release/obj.target/canvas/src/PixelArray.o
  CXX(target) Release/obj.target/canvas/src/FontFace.o
  SOLINK_MODULE(target) Release/obj.target/canvas.node
  COPY Release/canvas.node
make: Leaving directory '/usr/src/app/node_modules/canvas/build'
npm WARN engine [email protected]: wanted: {"node":"0.10.x"} (current: {"node":"0.12.7","npm":"2.14.1"})
npm WARN deprecated [email protected]: the module is now available as 'css-select'
npm WARN deprecated [email protected]: lodash@<3.0.0 is no longer maintained. Upgrade to lodash@^3.0.0.
npm WARN deprecated [email protected]: the module is now available as 'css-what'

> [email protected] install /usr/src/app/node_modules/camp/node_modules/ws
> (node-gyp rebuild 2> builderror.log) || (exit 0)

make: Entering directory '/usr/src/app/node_modules/camp/node_modules/ws/build'
  CXX(target) Release/obj.target/bufferutil/src/bufferutil.o
  SOLINK_MODULE(target) Release/obj.target/bufferutil.node
  COPY Release/bufferutil.node
  CXX(target) Release/obj.target/validation/src/validation.o
  SOLINK_MODULE(target) Release/obj.target/validation.node
  COPY Release/validation.node
make: Leaving directory '/usr/src/app/node_modules/camp/node_modules/ws/build'

> [email protected] install /usr/src/app/node_modules/phantomjs
> node install.js

PhantomJS not found on PATH
Downloading https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-1.9.8-linux-x86_64.tar.bz2
Saving to /usr/src/app/node_modules/phantomjs/phantomjs/phantomjs-1.9.8-linux-x86_64.tar.bz2
Using proxy http://qypprdproxy02.ie.intuit.net:80/
Receiving...

Received 12854K total.
Extracting tar contents (via spawned process)
Removing /usr/src/app/node_modules/phantomjs/lib/phantom
Copying extracted folder /usr/src/app/node_modules/phantomjs/phantomjs/phantomjs-1.9.8-linux-x86_64.tar.bz2-extract-1448919673297/phantomjs-1.9.8-linux-x86_64 -> /usr/src/app/node_modules/phantomjs/lib/phantom
Writing location.js file
Done. Phantomjs binary available at /usr/src/app/node_modules/phantomjs/lib/phantom/bin/phantomjs

> [email protected] install /usr/src/app/node_modules/ass/node_modules/gh-badges/node_modules/camp/node_modules/ws/node_modules/utf-8-validate
> node-gyp rebuild

make: Entering directory '/usr/src/app/node_modules/ass/node_modules/gh-badges/node_modules/camp/node_modules/ws/node_modules/utf-8-validate/build'
  CXX(target) Release/obj.target/validation/src/validation.o
  SOLINK_MODULE(target) Release/obj.target/validation.node
  COPY Release/validation.node
make: Leaving directory '/usr/src/app/node_modules/ass/node_modules/gh-badges/node_modules/camp/node_modules/ws/node_modules/utf-8-validate/build'

> [email protected] install /usr/src/app/node_modules/ass/node_modules/gh-badges/node_modules/camp/node_modules/ws/node_modules/bufferutil
> node-gyp rebuild

make: Entering directory '/usr/src/app/node_modules/ass/node_modules/gh-badges/node_modules/camp/node_modules/ws/node_modules/bufferutil/build'
  CXX(target) Release/obj.target/bufferutil/src/bufferutil.o
  SOLINK_MODULE(target) Release/obj.target/bufferutil.node
  COPY Release/bufferutil.node
make: Leaving directory '/usr/src/app/node_modules/ass/node_modules/gh-badges/node_modules/camp/node_modules/ws/node_modules/bufferutil/build'

> [email protected] install /usr/src/app/node_modules/ass/node_modules/gh-badges/node_modules/camp/node_modules/socket.io/node_modules/engine.io/node_modules/ws/node_modules/utf-8-validate
> node-gyp rebuild

make: Entering directory '/usr/src/app/node_modules/ass/node_modules/gh-badges/node_modules/camp/node_modules/socket.io/node_modules/engine.io/node_modules/ws/node_modules/utf-8-validate/build'
  CXX(target) Release/obj.target/validation/src/validation.o
  SOLINK_MODULE(target) Release/obj.target/validation.node
  COPY Release/validation.node
make: Leaving directory '/usr/src/app/node_modules/ass/node_modules/gh-badges/node_modules/camp/node_modules/socket.io/node_modules/engine.io/node_modules/ws/node_modules/utf-8-validate/build'

> [email protected] install /usr/src/app/node_modules/ass/node_modules/gh-badges/node_modules/camp/node_modules/socket.io/node_modules/engine.io/node_modules/ws/node_modules/bufferutil
> node-gyp rebuild

make: Entering directory '/usr/src/app/node_modules/ass/node_modules/gh-badges/node_modules/camp/node_modules/socket.io/node_modules/engine.io/node_modules/ws/node_modules/bufferutil/build'
  CXX(target) Release/obj.target/bufferutil/src/bufferutil.o
  SOLINK_MODULE(target) Release/obj.target/bufferutil.node
  COPY Release/bufferutil.node
make: Leaving directory '/usr/src/app/node_modules/ass/node_modules/gh-badges/node_modules/camp/node_modules/socket.io/node_modules/engine.io/node_modules/ws/node_modules/bufferutil/build'

> [email protected] install /usr/src/app/node_modules/ass/node_modules/gh-badges/node_modules/camp/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/node_modules/utf-8-validate
> node-gyp rebuild

make: Entering directory '/usr/src/app/node_modules/ass/node_modules/gh-badges/node_modules/camp/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/node_modules/utf-8-validate/build'
  CXX(target) Release/obj.target/validation/src/validation.o
  SOLINK_MODULE(target) Release/obj.target/validation.node
  COPY Release/validation.node
make: Leaving directory '/usr/src/app/node_modules/ass/node_modules/gh-badges/node_modules/camp/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/node_modules/utf-8-validate/build'

> [email protected] install /usr/src/app/node_modules/ass/node_modules/gh-badges/node_modules/camp/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/node_modules/bufferutil
> node-gyp rebuild

make: Entering directory '/usr/src/app/node_modules/ass/node_modules/gh-badges/node_modules/camp/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/node_modules/bufferutil/build'
  CXX(target) Release/obj.target/bufferutil/src/bufferutil.o
  SOLINK_MODULE(target) Release/obj.target/bufferutil.node
  COPY Release/bufferutil.node
make: Leaving directory '/usr/src/app/node_modules/ass/node_modules/gh-badges/node_modules/camp/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/node_modules/bufferutil/build'
[email protected] node_modules/dot

[email protected] node_modules/semver

[email protected] node_modules/should

[email protected] node_modules/promise
└── [email protected]

[email protected] node_modules/es6-promise

[email protected] node_modules/mocha
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected] ([email protected])
├── [email protected] ([email protected], [email protected], [email protected])
└── [email protected] ([email protected], [email protected])

[email protected] node_modules/request
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected] ([email protected])
├── [email protected] ([email protected])
├── [email protected]
├── [email protected] ([email protected])
├── [email protected] ([email protected], [email protected], [email protected])
├── [email protected] ([email protected])
├── [email protected] ([email protected], [email protected], [email protected], [email protected])
└── [email protected] ([email protected], [email protected], [email protected], [email protected])

[email protected] node_modules/redis

[email protected] node_modules/canvas
└── [email protected]

[email protected] node_modules/svgo
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected] ([email protected])
├── [email protected] ([email protected])
└── [email protected] ([email protected], [email protected])

[email protected] node_modules/bower
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected] ([email protected])
├── [email protected]
├── [email protected] ([email protected], [email protected], [email protected], [email protected], [email protected])
├── [email protected]
├── [email protected] ([email protected], [email protected], [email protected], [email protected])
├── [email protected] ([email protected], [email protected], [email protected])
├── [email protected] ([email protected])
├── [email protected] ([email protected], [email protected])
├── [email protected] ([email protected])
├── [email protected] ([email protected])
├── [email protected] ([email protected])
├── [email protected] ([email protected], [email protected])
├── [email protected] ([email protected], [email protected], [email protected], [email protected])
├── [email protected] ([email protected])
├── [email protected] ([email protected], [email protected], [email protected], [email protected], [email protected])
├── [email protected] ([email protected], [email protected], [email protected], [email protected])
├── [email protected] ([email protected], [email protected])
├── [email protected] ([email protected], [email protected], [email protected], [email protected])
├── [email protected] ([email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected])
├── [email protected] ([email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected])
├── [email protected] ([email protected])
├── [email protected] ([email protected], [email protected])
├── [email protected]
├── [email protected] ([email protected], [email protected], [email protected], [email protected])
├── [email protected] ([email protected], [email protected], [email protected], [email protected], [email protected])
├── [email protected] ([email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected])
└── [email protected] ([email protected], [email protected])

[email protected] node_modules/camp
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected] ([email protected], [email protected], [email protected], [email protected])
└── [email protected] ([email protected], [email protected], [email protected], [email protected])

[email protected] node_modules/phantomjs
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected] ([email protected])
├── [email protected] ([email protected], [email protected], [email protected])
├── [email protected]
├── [email protected] ([email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected])
├── [email protected] ([email protected], [email protected], [email protected], [email protected])
└── [email protected] ([email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected])

[email protected] node_modules/ass
├── [email protected]
├── [email protected] ([email protected])
├── [email protected] ([email protected], [email protected], [email protected], [email protected])
├── [email protected] ([email protected], [email protected], [email protected])
└── [email protected] ([email protected], [email protected], [email protected])
Step 1 : COPY . /usr/src/app
 ---> 45d4fd8a836c
Removing intermediate container 38e1efb0fd3f
Removing intermediate container aef6a59b2157
Step 2 : ENV INFOSITE http://shields.io
 ---> Running in c47af377d9c2
 ---> c4bdbc6517d9
Removing intermediate container c47af377d9c2
Step 3 : EXPOSE 80
 ---> Running in 036ca1307161
 ---> d8436111866a
Removing intermediate container 036ca1307161
Successfully built d8436111866a

Running

[root@pppdc9prdabd shields]# docker run -ti -p 80:80 -e INFOSITE=http://ci.nodejs.isp.corp.intuit.net badges
INFO[0548] POST /v1.21/containers/create
INFO[0549] POST /v1.21/containers/665802f3194e2e0425ec38ddb6709256a500245c0521401dd4d2e6b400572d4f/attach?stderr=1&stdin=1&stdout=1&stream=1
INFO[0549] POST /v1.21/containers/665802f3194e2e0425ec38ddb6709256a500245c0521401dd4d2e6b400572d4f/start
INFO[0549] POST /v1.21/containers/665802f3194e2e0425ec38ddb6709256a500245c0521401dd4d2e6b400572d4f/resize?h=16&w=98

> [email protected] start /usr/src/app
> node server.js

http://[::1]:80/try.html
No secret data (secret.json, see server.js): { [Error: Cannot find module './secret.json'] code: 'MODULE_NOT_FOUND' }
No secret data (secret.json, see server.js): { [Error: Cannot find module './secret.json'] code: 'MODULE_NOT_FOUND' }

Picking the font

This issue is heavily related to bug #12.

For licensing reasons, servers are usually not bundled with Verdana, the font we currently use. However, the license also forbids that we include Verdana in this project for use by the width computation system: http://www.microsoft.com/typography/fontpack/eula.htm.

That made me look at using an open font. A font that we could bundle in this project. Since such a font wouldn't be web-safe, the SVG file would have to link to it or bundle it.

As it turns out, while Blink allows SVG images to link to external fonts, Firefox does not. On the other hand, they both support fonts bundled in the SVG through data:font/ttf;base64,…, but either way, the result is a pretty big download.

Say, if we wanted to use Open Sans (the font currently used in all major badges), we'd have to include at least 284K of base64 data, which causes a download roughly 132x the size of the equivalent PNG.

Maybe there is a way to only include the font information for the characters actually used, but I haven't found it.

Code improvements

Let’s move the minor tweaks and suggestions from https://gist.github.com/espadrine/8218740#comments to this issue.

The initial code was:

<svg xmlns='http://www.w3.org/2000/svg'>
  <style type='text/css'>
    text {fill:#fff; font-family:'Trebuchet MS',sans-serif; font-size:10px;}
  </style>
  <linearGradient id='ggreen' x2='0%' y2='100%'>
    <stop offset='0' stop-color='#8f6'/>
    <stop offset='0.1' stop-color='#5d2'/>
    <stop offset='0.9' stop-color='#3b0'/>
    <stop offset='1' stop-color='#370'/>
  </linearGradient>
  <linearGradient id='ggrey' x2='0%' y2='100%'>
    <stop offset='0' stop-color='#aaa'/>
    <stop offset='0.1' stop-color='#666'/>
    <stop offset='0.9' stop-color='#444'/>
    <stop offset='1' stop-color='#222'/>
  </linearGradient>
  <rect rx='4px' width='77px' height='18px' style='fill:url(#ggrey)'/>
  <rect rx='4px' x='32px' width='45px' height='18px' style='fill:url(#ggreen)'/>
  <rect x='32px' width='5px' height='18px' style='fill:url(#ggreen)'/>
  <text x='5px' y='12.5px' style='stroke:rgba(0,0,0,0.3)'>build</text>
  <text x='5px' y='12px'>build</text>
  <text x='39px' y='12.5px' style='stroke:rgba(0,0,0,0.3)'>passed</text>
  <text x='39px' y='12px'>passed</text>
</svg>

Not rendering in Github

Is it just me, or are the badges borked for anybody else when used directly in a Github README?

See here, a row of missing images. And yet here, we're fully badged-up.

Interestingly, when I get the badges from b.adge.me, it works fine in the README.

Oh, I notice the badges for this project are similarly broken.

:(

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.