From aff7dd4aa87b81db30a60b89e257eccd8a97185f Mon Sep 17 00:00:00 2001 From: Wes Todd Date: Thu, 15 Aug 2019 00:07:55 -0700 Subject: [PATCH] Configure statusboard --- .github/workflows/build.yml | 46 ++++++++++++++ .github/workflows/publish.yml | 32 ++++++++++ .github/workflows/test.yml | 16 +++++ .gitignore | 19 ++++++ .npmrc | 1 + LICENSE | 22 +++++++ README.md | 22 ++++++- bin/exsb | 6 ++ index.js | 113 ++++++++++++++++++++++++++++++++++ package.json | 34 ++++++++++ test/index.js | 14 +++++ 11 files changed, 323 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/build.yml create mode 100644 .github/workflows/publish.yml create mode 100644 .github/workflows/test.yml create mode 100644 .gitignore create mode 100644 .npmrc create mode 100644 LICENSE create mode 100755 bin/exsb create mode 100644 index.js create mode 100644 package.json create mode 100644 test/index.js diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..455dddf --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,46 @@ +name: Index and build site + +on: + pull_request: + branches: + - master + push: + branches: + - master + schedule: + - cron: "0 */2 * * *" + +jobs: + index: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v1 + - name: Use Node.js 12 + uses: actions/setup-node@v1 + with: + node-version: 12 + - name: Setup git user + run: | + git config user.email "<>" + git config user.name "${GITHUB_ACTOR}" + - name: Setup gh-pages branch + run: | + git checkout gh-pages || (git checkout --orphan gh-pages && git reset && touch .nojekyll && git add .nojekyll && git commit -m "gh-pages init" && git clean -fdx) + git pull -X theirs origin gh-pages + git checkout - + git worktree add build gh-pages || echo "build worktree exists" + - name: NPM install + run: | + npm i + - name: Build index + env: + GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} + run: npm run buildindex + - name: Build site + run: npm run buildsite + - name: Commit and push gh-pages + run: | + cd build + git add . + git commit -m "Building gh-pages from ${GITHUB_SHA}" + git push https://${GITHUB_ACTOR}:${{secrets.GH_TOKEN}}@github.com/${GITHUB_REPOSITORY}.git gh-pages -f diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 0000000..df1b50a --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,32 @@ +name: Publish GPR Package + +on: + push: + branches: + - master + +jobs: + publish-gpr: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v1 + - name: Setup git user + run: | + git config user.email "<>" + git config user.name "${GITHUB_ACTOR}" + - uses: actions/setup-node@v1 + with: + node-version: 12 + registry-url: https://npm.pkg.github.com/ + scope: '@expressjs' + - name: NPM Install + run: npm i + - name: NPM Version + run: npm version prerelease --preid="${GITHUB_SHA}" + - name: NPM Publish + run: npm publish + env: + NODE_AUTH_TOKEN: ${{secrets.GH_TOKEN}} + - name: Push version and tag + run: | + git push https://wesleytodd:${{secrets.GH_TOKEN}}@github.com/${GITHUB_REPOSITORY}.git --tags diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..7fd2dbe --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,16 @@ +name: Run Tests +on: [push] +jobs: + test: + runs-on: ubuntu-latest + strategy: + matrix: + node-version: [10.x, 12.x] + steps: + - uses: actions/checkout@v1 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node-version }} + - name: npm install and test + run: npm it diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d5e177a --- /dev/null +++ b/.gitignore @@ -0,0 +1,19 @@ +package-lock.json +build +data.db + +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Dependency directories +node_modules/ + +# dotenv environment variables file +.env diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..43c97e7 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +package-lock=false diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..c8588b2 --- /dev/null +++ b/LICENSE @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) 2019 Wes Todd + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/README.md b/README.md index c920ba7..e4a2387 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,24 @@ **Notice: This is a work in progress, some things might not work as expected** -This package exposes an api and cli for managing a project status board. It -is a wrapper around `@pkgjs/statusboard` with configuration for Express +This package exposes an api and cli for managing a project StatusBoard. It +is a thin wrapper around `@pkgjs/statusboard` with configuration for Express projects. + +The status board website can be found here: https://expressjs.github.io/statusboard/ + +## Usage + +The package is published on the Github Pacakge Registry. With it you can +build and run the StatusBoard locally. + +``` +$ npm i @expressjs/statusboard --registry https://npm.pkg.github.com/ +``` + +Build and serve the StatusBoard locally: + +``` +$ exsb build +$ exsb serve +``` diff --git a/bin/exsb b/bin/exsb new file mode 100755 index 0000000..7e6aba1 --- /dev/null +++ b/bin/exsb @@ -0,0 +1,6 @@ +#! /usr/bin/env node +'use strict' +const { cli } = require('@pkgjs/statusboard') + +// Construct the cli +cli(require('..'), process.argv.slice(2)) diff --git a/index.js b/index.js new file mode 100644 index 0000000..8118b85 --- /dev/null +++ b/index.js @@ -0,0 +1,113 @@ +'use strict' +const path = require('path') +const statusboard = require('@pkgjs/statusboard') + +module.exports = async (c) => { + return statusboard(await config(c)) +} + +const config = module.exports.config = async (c = {}) => { + const buildDir = path.join(__dirname, 'build') + + return Object.assign({ + // Status Board Config + db: path.join(buildDir, 'data', 'data.db'), + baseUrl: '/statusboard', + outputDirectory: buildDir, + + // Project configs + title: 'Express', + description: '', + + issueLabels: ['top priority', 'good first issue', 'help wanted', 'discuss', 'meeting'], + + projects: [ + 'expressjs/express', + 'expressjs/discussions', + 'expressjs/cors', + 'expressjs/morgan', + 'expressjs/response-time', + 'expressjs/session', + 'expressjs/multer', + 'expressjs/body-parser', + 'expressjs/compression', + 'expressjs/serve-static', + 'expressjs/errorhandler', + 'expressjs/serve-index', + 'expressjs/csurf', + 'expressjs/timeout', + 'expressjs/flash', + 'expressjs/vhost', + + 'pillarjs/router', + 'pillarjs/cookies', + 'pillarjs/send', + 'pillarjs/finalhandler', + 'pillarjs/path-to-regexp', + + 'jshttp/cookie', + 'jshttp/fresh', + 'jshttp/content-disposition', + 'jshttp/mime-db', + 'jshttp/media-typer', + 'jshttp/range-parser', + 'jshttp/type-is', + 'jshttp/accepts', + 'jshttp/negotiator', + 'jshttp/mime-types', + 'jshttp/compressible', + 'jshttp/content-type', + 'jshttp/http-errors', + 'jshttp/proxy-addr', + 'jshttp/etag', + 'jshttp/forwarded', + 'jshttp/on-finished', + 'jshttp/on-headers', + 'jshttp/vary', + 'jshttp/basic-auth', + 'jshttp/methods', + 'jshttp/statuses' + ], + + teams: { + technicalCommitee: [{ + name: 'Doug Wilson', + github: 'dougwilson', + npm: 'dougwilson', + twitter: 'blipsofadoug', + email: 'doug@somethingdoug.com' + }, { + name: 'Jonathan Ong', + github: 'jonathanong', + npm: 'jongleberry', + twitter: 'jongleberry', + email: 'me@jongleberry.com', + avatar: '6e33cc0412b61cc01daac23c8989003c' + }, { + name: 'Jeremiah Senkpiel', + github: 'fishrock123', + npm: 'fishrock123', + twitter: 'fishrock123', + email: 'fishrock123@rocketmail.com' + }, { + name: 'Alex Kocharin', + github: 'rlidwka', + npm: 'rlidwka', + twitter: 'rlidwka', + email: 'alex@kocharin.ru' + }, { + name: 'Linus Unnebäck', + github: 'LinusU', + npm: 'linusu', + twitter: 'LinusU', + email: 'linus@folkdatorn.se' + }, { + name: 'Wes Todd', + github: 'wesleytodd', + npm: 'wesleytodd', + twitter: 'wesleytodd', + email: 'wes@wesleytodd.com' + }] + } + }, c) +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..8706910 --- /dev/null +++ b/package.json @@ -0,0 +1,34 @@ +{ + "name": "@expressjs/statusboard", + "version": "1.0.0", + "description": "Express project StatusBoard", + "author": "Wes Todd ", + "keywords": [ + "statusboard", + "express" + ], + "license": "MIT", + "main": "index.js", + "repository": { + "type": "git", + "url": "https://github.com/expressjs/statusboard.git" + }, + "bin": { + "exsb": "./bin/exsb" + }, + "scripts": { + "test": "standard && mocha", + "prepublushOnly": "npm t", + "build": "./bin/exsb build", + "buildsite": "npm run clean && ./bin/exsb site", + "buildindex": "./bin/exsb index", + "clean": "rm -rf build/css build/js" + }, + "devDependencies": { + "mocha": "^6.2.0", + "standard": "^13.1.0" + }, + "dependencies": { + "@pkgjs/statusboard": "0.0.14" + } +} diff --git a/test/index.js b/test/index.js new file mode 100644 index 0000000..2f83bbe --- /dev/null +++ b/test/index.js @@ -0,0 +1,14 @@ +'use strict' +const { describe, it } = require('mocha') +const assert = require('assert') +const pkg = require('../package.json') +const exsb = require('../') + +describe(pkg.name, () => { + it('should create a configured statusboard instance', async () => { + const sb = await exsb() + assert.strictEqual(typeof sb.buildIndex, 'function') + assert.strictEqual(typeof sb.buildSite, 'function') + assert.strictEqual(typeof sb.serve, 'function') + }) +})