npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@genx/runner

v1.0.0

Published

Gen-X Job Runner

Downloads

2

Readme

@genx/runner

Light-weight job runner library and cli

Usage

  • code
const runner = require('@genx/runner');

await runner(
  jobs, // jobs config, same as the content of config file
  null // null as 'default', or specify a job name to start here, 
  {
    variables: { $env:{ var1: "Hello", var2: "Gen-X" } }
  }
);
  • cli
genx-run
genx-run test/genx-run.jobs
genx-run test/genx-run.jobs.json

Definitions

  • Flow - A list of jobs in the order of resolved dependencies
  • Job - Definition of a work flow
  • Process - The running instance of a job
  • Task - Definition of a job step
  • Activity - The running instance of a task

Runner context

  • concurrent - Whether to run in concurrent mode, default: false
  • logger - Logger instance
  • tasks - Custom tasks
  • variables - Input variables
  • beforeJob - Hook run before job execution, function (jobInfo, jobContext) => jobContext
  • afterJob - Hook run after job execution, function (jobInfo, jobContext) => void

Flow context

  • ... all runner context
  • variables - Input variables
    • $env - process.env (readonly)

Job context

  • ... all flow context
  • variables - Input variables
    • $env - process.env (readonly)
    • $job - variables produced by this job
  • getEnv - Get value from variables.$env function (key) => value
  • getVariable / getV - Get value from variables, function (key) => value, key can be dot path, e.g. object1.key1OfObject1.key2OfChildObject

Step context

  • ... all job context
  • job - The job object
    • name
    • processing - The currency on-going step
    • completed - Completed steps
  • updateVariables / update - Update variables to job variables, function (object)
  • log - Log function, function (level, message)
  • logRaw - Raw output collect, used to collect the stdout and stderr of the task itself (not the logs of the job runner)

Job information

  • dependsOn - Dependent jobs

  • steps - Steps of a job, will be executed step by step

  • picks - Picks variables from completed jobs

"picks": {
    "job1": [
      { "from": "var3", "to": "var4" }, 
      "var3"
    ]
}

"picks": { // $last means to pick from the last job
    "$last": ["var3"]
}
  • emits - Emits job variables from input
"emits": [
    "var4",
    {
        "from": "var3",
        "to": "var5"
    }
]
  • onlyWhen - Pre-condition to run the job, object filter or using the JSON Syntax Expression (see @genx/jes)
"onlyWhen": { // check jobContext.variables
    "var3": {
        "$gt": 100
    }
}

Step information

  • task - Task type
  • continueOnError - Whether to continue on error
  • onlyWhen - Pre-condition to run the step, object filter or using the JSON Syntax Expression (see @genx/jes)
"onlyWhen": { // check stepContext.variables
    "var3": {
        "$gt": 100
    }
}

Builtin tasks

  • exec
    • commands or command - shell command line with variables interpolation supported

Custom task implementation

Each step in a job is a certain type of task.

async function (step, stepContext) {
    // stepContext.getEnv
    // stepContext.getVariable
    // stepContext.log('level', message)

    // ... do something

    // stepContext.update({ ...result }) if variables produce
}

Custom logger implementation

A logger not only can be used to log information and errors, but also can be used to capture the data produced during task execution.

{
  tag: <keyword> => <decorated keyword>,
  log: (level, message, meta: { job?, task? }) => {}
}