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

snapshotizr

v1.5.1

Published

Create monthly team diff from GHE repositories

Downloads

76

Readme

Snapshotizr

Snapshot creates a diff for each project modified by your team members on Github.

Slack channel: #STP-Snapshotizr

Setup

Install and initialise snapshotizr:

npm install -g snapshotizr
snapshotizr-init

Create a github token with scope: repo and edit configuration file: ~/snapshotizr/config.js.

Enjoy! :)

FTP upload

If you want snapshotizr to automatically upload generated diffs (aka. reports) to your FTP server, please provide "ftp" object with following fields to the config file:

ftp: {
  host: '192.168.x.x',
  user: 'username',
  remoteRoot: '/public_dir/some_subdir/'
}

Password is not required in the config file - if nothing given, you'll be prompted for it during execution time.

AI generated summary

As we are required to create our work summary in Polish, let's use AI for that.

OpenAI has been implemented as the service of choice, so in order to use the integration you have to obtain the token. Please refer the docs to find out how to get one: https://help.openai.com/en/

Configuration is described in the example config file. If you already had a config created, you have to copy & paste it from the example file located in the source code of this project - global node_modules/snapshotizr/examples/config.js.

Here is the default config at the time of adding the feature, but it might be out of date, because docs like to be out of date 😉

openai: {
    enabled: false,
    apiKey: '', // Needed to use OpenAI API

    // systemQueryPreset: 'perProject', // pick one of the predefined system queries. See src/openai.js for details

    // Add an additional part in the system query in between the format description and the system query preset.
    // It can be used so the model understands common phrases like `pulse tracking`.
    // systemQueryAddon: '`Pulse` is the user behavior tracking system used in the company.',

    // Override the system query. Will not use any of the default system queries or git log format description. Make it on your own.
    // customSystemQuery: null, // provide your own system query. Takes precedence over systemQueryPreset

    // streamOutput: true, // Print in chunks as they arrive or print all at once
    // printInput: true, // Print git logs input to the console

    // Completions parameters - see https://platform.openai.com/docs/api-reference/completions/create
    // You can add here anythig from the API reference.
    // Model is required. Other are defaults listed here to point you to the possibilities.
    // Do not set `response_format` here, it is set in the code. Same for `stream`.
    completions: {
        model: 'gpt-4o',
        // max_completion_tokens: 2048,
        // temperature: 1,
        // top_p: 1,
        // frequency_penalty: 0,
        // presence_penalty: 0,
    },
},

The generated summary is in markdown format, but Jira does not handle pasting md. In order to paste it as the formatted text you have to format it with something like https://markdowntohtml.com/

Slack notifications

If you want to receive success and failure notifications on Slack, please provide a "slack" object with following fields in the config file:

slack: {
  enabled: true,
  token: 'SLACK_TOKEN',
  channel: 'CHANNEL_ID',
},

You need to create a Slack application to get the token needed here. Creating a Slack app in the sch-chat workspace requires admin approval, but is easy to get. I suggest having a single Slack app per team and just re-use it for all integrations. Scope required here is chat:write (you need to add the app to your channel first).

To get a channel ID it's easiest to open Slack in the browser, enter the desired channel and pick its ID from URL e.g. https://app.slack.com/client/T0356Q2CJ/C044Q8M5W <-- C044Q8M5W is the channel ID.

Working directory

Default

Snapshotizr uses directory: ~/snapshotizr/.

Custom

You can use file ~/.snapshotizr for configuration and also add there key 'appDir' in root with appropriate path to define working directory (for repositories and reports)

Usage

Just run:

snapshotizr -h

to see available options:

  -f, --from from       Date string or keyword `last`, default value: start of this month. `last`
                        will be replaced with the last report date based on the directory creation
                        date
  -u, --until until     Date string, default value: now
  -s, --skip-cleanup    Do not remove cloned repositories at the end of the script
  -c, --config string   Configuration file path
  -h, --help            Print this help message

Example - generate report since 2021-01-25 up to now:

snapshotizr --from 2021-01-25

Or detect automatically the last report date with:

snapshotizr --from last

Limitations

Supported protocols

This tool support only HTTPS protocol to work with Git.

Limited number of public events in GHE

Github provides only last 100 public events performed by a user (event == push, not commit). So in the specific situation, you can lose some repos.

To work around that you can explicitly specify repos inside config.profiles in configuration file, for example:

const config = { 
  appDir: '',
  skipCleanup: true,
  profiles: [
    {   
      name: 'ghe',
      repos: ['snt/fastenposten', 'snt/snt-capi-preview'],
      ...

it is also possible to exclude specific repositories from processing:

const config = { 
  appDir: '',
  skipCleanup: true,
  profiles: [
    {   
      name: 'ghe',
      reposToSkip: ['spt-privacy/jakub-test', 'spt/adventofcode' ],
      ...

Generating report for Jira

Besides storing a code snapshot we're all required to create Jira issues inside 'Copyright' project with a human-readable report listing all work delivered this month present in the snapshot (in Polish).

See AI generated summary for the smarter way. If you do not want to pay a few cents, or you do not trust AI, try the following approach.

Here's a snippet to make this work easier. It takes your push messages and translates them using Google Translate. I highly suggest going through it afterwards, there are often beauties in there e.g. 'fix lint' ==> 'napraw kłaczki' 😂 Still, it's faster and more detailed than writing it from scratch.

npm i -g git-standup google-translate-cli
git standup -m 3 -A "`date +%Y-%m-01` 00:00:00" -D short -s | grep '<IMIE_NAZWISKO>' | cut -f3- -d" " | rev | cut -d" " -f4- | rev | translate -s en -t pl
  • replace date param with a proper date matching from param set for snapshotizr, e.g. git standup -m 3 -A "2021-01-25 00:00:00" ...
  • adjust git standup params to fit the way you have your projects stored locally.
  • <IMIE_NAZWISKO> is spelled normally e.g. 'Wojciech Iskra'

How to publish package to NpmJS

Package is published to NpmJS when NPM tag is created.

You can bump version using command npm version.

Example:

npm version patch
npm version minor
npm version major

When new version will be created code need to pushed to master:

git push --tags