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 🙏

© 2026 – Pkg Stats / Ryan Hefner

openci-worker-cli

v0.1.55

Published

OpenCI Worker CLI

Readme

OpenCI Worker CLI (Node.js)

Node.js implementation of the OpenCI worker. It claims queued build jobs from Firestore, creates build runs, streams logs back to Firestore, runs the workflow with act, and runs build-job follow-up work through the shared Firestore data services.

Usage

Install from npm:

npm install -g openci-worker-cli
openci_worker --service-account /path/to/service-account.json --worker-id worker-1

Run from source:

npm install
npm run build
node dist/index.cjs --service-account /path/to/service-account.json --worker-id worker-1

For a single-job smoke test:

node dist/index.cjs --service-account /path/to/service-account.json --worker-id worker-1 --once

The worker claims ubuntu jobs on Linux and runs them inside openci-ubuntu:latest. On macOS it claims macos jobs and runs them inside a cloned Lume VM.

Publishing

The worker build bundles its Firestore data and build-job services into dist/index.cjs so it can be installed from npm without repository-local dependencies.

Before publishing from this package directory:

npm run pack:dry-run
npm publish

The dry run should only include dist, README.md, and package.json; it should not list bundled dependencies.

Requirements

  • Node.js 22
  • A Firebase service account JSON with Firestore, Secret Manager, and FCM permissions
  • act available in the worker runtime
  • Linux workers: Docker and the openci-ubuntu:latest image
  • macOS workers: Lume and the tahoe-base_v1.2.3 base VM

Linux Docker image release

The Linux worker creates job containers from the local Docker image openci-ubuntu:latest. Keep this image aligned with the macOS base VM toolchain so workflow steps behave consistently across platforms.

docker tag openci-ubuntu:latest openci-ubuntu:backup-$(date -u +%Y%m%d%H%M%S)
cat > /tmp/openci-ubuntu.Dockerfile <<'DOCKERFILE'
FROM openci-ubuntu:latest

RUN npm install -g firebase-tools@latest \
  && firebase --version \
  && npx -y firebase-tools@latest --version \
  && npm cache clean --force
DOCKERFILE

docker build -t openci-ubuntu:latest-candidate -f /tmp/openci-ubuntu.Dockerfile /tmp
docker run --rm openci-ubuntu:latest-candidate bash -lc \
  'firebase --version && npx -y firebase-tools@latest --version && act --version && flutter --version | head -n 1'
docker tag openci-ubuntu:latest-candidate openci-ubuntu:latest

macOS VM image release

The worker clones the local Lume VM named tahoe-base_v1.2.3. Base image updates are manual because they depend on a macOS host that can run Lume and install Xcode.

echo "$GHCR_TOKEN" | docker login ghcr.io -u "$GHCR_USER" --password-stdin
lume clone tahoe-base_v1.2.2 tahoe-base_v1.2.3
lume run tahoe-base_v1.2.3

# Prefer keeping xcodes installed in the base VM so Xcode updates can happen
# entirely inside the VM.
lume ssh tahoe-base_v1.2.3 --user admin --password admin -- \
  brew install robotsandpencils/made/xcodes
lume ssh tahoe-base_v1.2.3 --user admin --password admin -- \
  xcodes install 26.5 --select
lume ssh tahoe-base_v1.2.3 --user admin --password admin -- \
  sudo xcodebuild -license accept
lume ssh tahoe-base_v1.2.3 --user admin --password admin -- \
  "echo admin | sudo -S xcodebuild -runFirstLaunch"
lume ssh tahoe-base_v1.2.3 --user admin --password admin -- \
  xcodebuild -downloadPlatform iOS
lume ssh tahoe-base_v1.2.3 --user admin --password admin -- \
  npm install -g firebase-tools@latest

lume ssh tahoe-base_v1.2.3 --user admin --password admin -- xcodebuild -version
lume ssh tahoe-base_v1.2.3 --user admin --password admin -- \
  "/usr/bin/arch -arm64e xcrun xcodebuild -version"
lume ssh tahoe-base_v1.2.3 --user admin --password admin -- \
  xcrun --sdk iphoneos --show-sdk-path
lume ssh tahoe-base_v1.2.3 --user admin --password admin -- firebase --version
lume stop tahoe-base_v1.2.3
lume push tahoe-base_v1.2.3 tahoe-base:v1.2.3 --organization openci-org --additional-tags latest

If xcodes is not available in the VM yet, use a macOS host that already has the target Xcode installed as a fallback:

rsync -a --delete /Applications/Xcode.app [email protected]:/Users/admin/openci-vm-assets/
/Users/admin/.local/bin/lume run -n --shared-dir /Users/admin/openci-vm-assets:ro tahoe-base_v1.2.3
/Users/admin/.local/bin/lume ssh tahoe-base_v1.2.3 --user admin --password admin -- \
  sudo ditto "/Volumes/My Shared Files/Xcode.app" /Applications/Xcode-26.5.0.app
/Users/admin/.local/bin/lume ssh tahoe-base_v1.2.3 --user admin --password admin -- \
  sudo xcode-select -s /Applications/Xcode-26.5.0.app/Contents/Developer
/Users/admin/.local/bin/lume ssh tahoe-base_v1.2.3 --user admin --password admin -- \
  sudo xcodebuild -license accept
/Users/admin/.local/bin/lume ssh tahoe-base_v1.2.3 --user admin --password admin -- \
  "echo admin | sudo -S xcodebuild -runFirstLaunch"
/Users/admin/.local/bin/lume ssh tahoe-base_v1.2.3 --user admin --password admin -- \
  xcodebuild -downloadPlatform iOS
/Users/admin/.local/bin/lume ssh tahoe-base_v1.2.3 --user admin --password admin -- xcodebuild -version
/Users/admin/.local/bin/lume ssh tahoe-base_v1.2.3 --user admin --password admin -- \
  "/usr/bin/arch -arm64e xcrun xcodebuild -version"
/Users/admin/.local/bin/lume ssh tahoe-base_v1.2.3 --user admin --password admin -- \
  xcrun --sdk iphoneos --show-sdk-path

Lume push reads GitHub credentials from GITHUB_USERNAME and GITHUB_TOKEN. Docker's ghcr.io login alone is not enough for lume push.