2.1.0 • Published 6 years ago
shardy-mc-shard-face v2.1.0
ShardyMcShardFace
Package to shard a set of items based on CI parallelization parameters, e.g. YOUR_CI_SYSTEM_INDEX and YOUR_CI_SYSTEM_COUNT.
Features:
- Shards as evenly as possible, uneven splits will end up in the tail shards
- Supports sharding less items than parallelization count; tail shards will be empty
- Distributes items into shards based on a given seed for a random number generator to provide random, but stable distribution.
- Fully typed in Typescript
Installation
yarn add shardy-mc-shard-faceUsage
shardyMcShardFace(items: any[] [, options: { throwOnEmpty: boolean, throwWhenNotSharding: boolean, seed: string }]): shard[];You can get debug output by setting the environment variable DEBUG=ShardyMcShardFace:*.
Example
import { shard as shardyMcShardFace } from 'shardy-mc-shard-face';
const shard = shardyMcShardFace([1, 2, 3, 4]);
// shard is an array that contains items based on YOUR_CI_SYSTEM_INDEX and YOUR_CI_SYSTEM_COUNTCLI example
cat items | shardy shardInput is expected to be newline-separated to stdin. Output is also newline-separated to stdout.
On a CI run this would look like this:
# CI_NODE_INDEX=1 (set by your CI system)
# CI_NODE_TOTAL=2 (set by your CI system)
echo "A\nB" | shardy shard
# Will print "A" (w/o quotes) to stdoutyou can control the seed as well via -s <seed>.
For a full list of options, please run shardy --help.
CI system support
CI systems supported are the ones supported by ci-parallel-vars. Feel free to open a pull request there and I will be happy to bump the dependency.