Nobody Pays (for) Magazines

    @chadfawcett/probot-serverless-now

    2.0.0 • Public • Published

    npm Version Build Status

    Zeit Now v2 Extension for Probot

    A Probot extenstion to make it easier to run your Probot Apps on Zeit Now v2

    Zeit Now v2 changes its functionality from long-running processes to functions. This means v2 deployments can't start probot run, and instead need direct access to the App's endpoint.

    Usage

    $ npm install @chadfawcett/probot-serverless-now
    //  now.js
    var { serverless } = require('@chadfawcett/probot-serverless-now')
    const appFn = require('./')
    module.exports = serverless(appFn)
    //  index.js
    module.exports = app => {
      app.on('issues.opened', async context => {
        // A new issue was opened, what should we do with it?
        context.log(context.payload)
      })
    }
    // now.json
    {
      "version": 2,
      "env": {
        "APP_ID": "@app-id",
        "WEBHOOK_SECRET": "@webhook-secret",
        "PRIVATE_KEY": "@private-key-base64-encoded"
      },
      "builds": [{ "src": "now.js", "use": "@now/node" }],
      "routes": [{ "src": "/", "dest": "/now.js" }]
    }
    $ now # Deploy using now!

    Using Routes

    Zeit Now encourages multiple granular endpoints instead of one monolithic app, so whenever possible you should separate custom routing. That being said, there may be cases for wanting to have custom routes inside of your app using app.route(). To enable this, simply change the src path in your now.json to have a wildcard ending ("src": "/*").

    {
      ...
      "routes": [{ "src": "/*", "dest": "/now.js" }]
    }

    Multiple Apps

    As mentioned in using routes, monolithic apps are discouraged. That being said, there may be a use case for running multiple Probot Apps together (ie logging, stats, etc). For this reason the serverless function also accepts an array of app functions.

    var { serverless } = require('@chadfawcett/probot-serverless-now')
    const statsApp = require('probot/lib/apps/stats')
    const myApp = require('./')
    
    module.exports = serverless([statsApp, myApp])

    API

    serverless(appFn[, options])

    Create a new instance of Probot and load the supplied App[s].

    Parameters

    Name Type Required Description
    appFn function | array true Single or array of of Probot App functions
    options object false Probot config options

    Options

    Name Type Default Description
    id number process.env.APP_ID The App ID assigned to your GitHub App
    secret string process.env.WEBHOOK_SECRET The webhook secret used when creating a GitHub App
    cert string findPrivateKey() The contents of the GitHub App private key (multiline or base64)

    Example

    With default options

    var { serverless } = require('@chadfawcett/probot-serverless-now')
    const appFn = require('./')
    module.exports = serverless(appFn)

    With custom options

    var { serverless } = require('@chadfawcett/probot-serverless-now')
    const appFn = require('./')
    
    const options = {
      id: 123,
      secret: process.env.MY_SECRET,
      cert: process.env.MY_PRIVATE_KEY
    }
    
    module.exports = serverless(appFn, options)

    Install

    With npm installed, run

    $ npm install @chadfawcett/probot-serverless-now
    

    This package is meant to be installed alongside your Probot app, so probot is a peer dependency.

    Acknowledgments

    @chadfawcett/probot-serverless-now was inspired by probot/serverless-lambda

    See Also

    License

    MIT Copyright Chad Fawcett

    Install

    npm i @chadfawcett/probot-serverless-now

    DownloadsWeekly Downloads

    43

    Version

    2.0.0

    License

    MIT

    Unpacked Size

    9.05 kB

    Total Files

    7

    Last publish

    Collaborators

    • chadfawcett