Skip to content

Commit

Permalink
adding docker builds
Browse files Browse the repository at this point in the history
  • Loading branch information
apowers313 committed Jun 25, 2018
1 parent 25a9eab commit bf66c5e
Show file tree
Hide file tree
Showing 5 changed files with 117 additions and 26 deletions.
25 changes: 15 additions & 10 deletions .travis.yml
@@ -1,21 +1,26 @@
sudo: false
sudo: true
services:
- docker
cache:
directories:
- node_modules
notifications:
email: true
language: node_js
node_js:
- '6'
- '10'
# before_install:
# - npm i -g npm@^2.0.0
before_script:
- npm prune
- 'curl -Lo travis_after_all.py https://git.io/vLSON'
after_success:
- python travis_after_all.py
- export $(cat .to_export_back)
- npm run docs
- git config --global user.name "Adam Powers"
- git config --global user.email "apowers@ato.ms"
- npm run publish
- npm run docker:build:prod-canary
- npm run docker:build:test-canary
script:
- docker run docker:test:canary
deploy:
provider: script
script:
- npm run docker:login
- npm run docker:release:canary
on:
branch: master
22 changes: 22 additions & 0 deletions Dockerfile
@@ -0,0 +1,22 @@
# production app
FROM node:10 as production
LABEL maintainer="apowers@ato.ms"
WORKDIR /usr/src/app
COPY package.json scm-config.json /usr/src/app/
COPY webauthn-yubiclone/ /usr/src/app/webauthn-yubiclone/
# RUN npm install --only=production
RUN npm install
EXPOSE 8888
EXPOSE 8443
ENTRYPOINT ["npm", "start"]

# dev / testing
FROM node:10 as test
LABEL maintainer="apowers@ato.ms"
WORKDIR /usr/src/app
COPY --from=production /usr/src/app/ /usr/src/app/
COPY test/ /usr/src/app/test/
# RUN npm install --only=development
EXPOSE 8888
EXPOSE 8443
ENTRYPOINT ["npm", "test"]
21 changes: 17 additions & 4 deletions package.json
Expand Up @@ -4,14 +4,22 @@
"description": "Examples and demo code for FIDO2 / WebAuthn servers",
"main": "index.js",
"scripts": {
"test": "istanbul cover _mocha",
"start": "node_modules/.bin/scm",
"docs": "jsdoc -c ./.jsdoc-conf.json"
"test": "mocha",
"start": "scm",
"docker:build:prod-canary": "docker build --target=production -t apowers313/fido2-server:prod-canary .",
"docker:build:test-canary": "docker build --target=test -t apowers313/fido2-server:test-canary .",
"docker:test:canary": "docker run apowers313/fido2-server:test-canary",
"docker:build:release": "docker build --target=test -t apowers313/fido2-server:test . && docker run apowers313/fido2-server:test && docker build --target=production -t apowers313/fido2-server:latest .",
"docker:test:canary": "docker run apowers313/fido2-server:test-canary",
"docker:login": "echo \"$DOCKER_PASSWORD\" | docker login -u \"$DOCKER_USERNAME\" --password-stdin",
"docker:release:canary": "docker push apowers313/fido2-server:test-canary && docker push apowers313/fido2-server:prod-canary",
"docker:release": "docker push apowers313/fido2-server:test && docker push apowers313/fido2-server:latest"
},
"keywords": [
"fido",
"fido2",
"webauthn"
"webauthn",
"server"
],
"author": "Adam Powers",
"license": "MIT",
Expand All @@ -34,6 +42,11 @@
"sinon": "^1.17.6"
},
"dependencies": {
"component-certs-static": "^1.0.1",
"component-fido2": "^1.0.11",
"component-logger-winston": "^1.0.1",
"component-uds-json": "^1.0.3",
"component-web": "^1.0.1",
"simple-component-manager": "^1.0.4"
},
"homepage": "https://github.com/apowers313/fido2-server-demo#readme",
Expand Down
12 changes: 6 additions & 6 deletions scm-config.json
Expand Up @@ -9,7 +9,7 @@
"components": [{
"name": "http",
"type": "generic",
"package": "component-web",
"package": "node_modules/component-web",
"pre-config": [{
"set-port": 8888
}],
Expand All @@ -23,7 +23,7 @@
}, {
"name": "https",
"type": "generic",
"package": "component-web",
"package": "node_modules/component-web",
"pre-config": [{
"set-port": 8443,
"set-https": true,
Expand All @@ -44,15 +44,15 @@
}, {
"name": "cert-manager",
"type": "generic",
"package": "component-certs-static",
"package": "node_modules/component-certs-static",
"pre-config": [{
"set-cert-file": "data/node_modules/component-certs-static/test/helpers/certs/cert.pem",
"set-key-file": "data/node_modules/component-certs-static/test/helpers/certs/key.pem"
}]
}, {
"name": "fido2",
"type": "generic",
"package": "component-fido2",
"package": "node_modules/component-fido2",
"pre-config": [{
"enable-dangerous-open-registration": true,
"enable-dangerous-xmit-debug-info": true,
Expand All @@ -61,11 +61,11 @@
}, {
"name": "uds",
"type": "generic",
"package": "component-uds-json"
"package": "node_modules/component-uds-json"
}, {
"name": "logger",
"type": "logger",
"package": "component-logger-winston",
"package": "node_modules/component-logger-winston",
"pre-config": [{
"set-level": "silly",
"add-transport": [{
Expand Down
63 changes: 57 additions & 6 deletions test/mainTest.js
@@ -1,10 +1,61 @@
var main = require ("../index.js");
var assert = require ("chai").assert;
"use strict";

const assert = require("chai").assert;
const pkg = require("../package");
const path = require("path");
const { spawn } = require("child_process");
const nodeModulesDir = path.join(__dirname, "../node_modules");

describe ("main test", function() {
it("tests something", function() {
function testPackage(pkgName) {
it(`tests ${pkgName}`, async function() {
this.timeout(300000); // eslint-disable-line no-invalid-this
this.slow(300000); // eslint-disable-line no-invalid-this

var pkgDir = path.join(nodeModulesDir, pkgName);
console.log("pkgDir", pkgDir);
// XXX: no guarantee that the devDependencies were installed unless we 'install' first
await npmCmd(pkgDir, "install");
await npmCmd(pkgDir, "test");
});
}

async function npmCmd(pkgDir, cmd) {
// spawn npm to test
var npmArgs = [];
npmArgs.push(cmd);

// spawn npm
var npmPs = spawn("npm", npmArgs, {
cwd: pkgDir
});

npmPs.stdout.on("data", (data) => {
process.stdout.write(data.toString());
});

npmPs.stderr.on("data", (data) => {
process.stderr.write(data.toString());
});

return new Promise((resolve, reject) => {
npmPs.on("close", (code) => {
// console.log("npm finished with code:", code);
if (code === 0) {
return resolve(true);
}
reject(new Error("test failed with code: " + code));
});
});
}

describe("fido-server-demo", function() {
it("loaded pkg", function() {
// test goes here
assert (true);
assert.isObject(pkg);
});
});

// test all packages
for (let depPkg of Object.keys(pkg.dependencies)) {
testPackage(depPkg);
}
});

0 comments on commit bf66c5e

Please sign in to comment.