
Research
/Security News
Chrome and Firefox Extensions Posing as Free VPNs Add Clipboard Stealers via Malicious Updates
Malicious Chrome and Firefox extensions posed as free VPNs while stealing clipboard data through later extension updates.
@continuous-excellence/digger
Advanced tools
Privacy-controlled git analytics for team insights. CLI for extracting contribution statistics, commit analysis, and developer metrics from git repositories.
A program for extracting 'contribution data' from git repositories into JSON files.
You can install the tool using any NPM-like system.
npm i -D @continuous-excellence/digger # this will install it into a project as a dev dependency
npx digger current-contribution-data $(pwd) # You can use npx to run a project's programs easily
npm i -g @continuous-excellence/digger # this will install it globally into npm
digger current-contribution-data $(pwd) # Now it should be available via NPM's path on your shell.
For environments without Node.js, a standalone JVM distribution is available.
Download the latest release from GitHub Releases:
# Download the latest version (replace 3.1.2 with current version)
VERSION=3.1.2
curl -L -O https://github.com/robertfmurdock/ze-great-tools/releases/download/${VERSION}/digger-cli-jvm.zip
# Verify checksum (optional but recommended)
curl -L -O https://github.com/robertfmurdock/ze-great-tools/releases/download/${VERSION}/digger-cli-jvm.zip.sha256
sha256sum -c digger-cli-jvm.zip.sha256
# Extract to installation directory
unzip digger-cli-jvm.zip -d ~/.local/share/
# Add to PATH (add this line to your ~/.bashrc or ~/.zshrc)
export PATH="$HOME/.local/share/digger-cli-jvm/bin:$PATH"
# Verify installation
digger --version
Distribution contents:
bin/digger - Unix/Linux/macOS executable scriptbin/digger.bat - Windows executable scriptlib/ - All required JVM dependenciesRequirements: Java Runtime Environment (JRE) 8 or higher
Alternatively, you can build the JVM distribution locally:
# Clone the repository
git clone https://github.com/robertfmurdock/ze-great-tools.git
cd ze-great-tools
# Build the JVM distribution
./gradlew :command-line-tools:digger-cli:jvmDistZip
# Extract to installation directory
unzip command-line-tools/digger-cli/build/distributions/digger-cli-jvm.zip -d ~/.local/share/
# Add to PATH
export PATH="$HOME/.local/share/digger-cli-jvm/bin:$PATH"
digger --version
git-diggerThe package has been renamed to @continuous-excellence/digger. The old git-digger package is deprecated. To migrate:
# Uninstall old package
npm uninstall git-digger
# Install new scoped package
npm install @continuous-excellence/digger
The CLI command remains digger - no changes needed to your scripts or workflows.
The current-contribution-data command will collect the most recent contribution to the repository.
The most recent contribution is calculated by looking for the most recent, non-HEAD tag, and then including every commit after that until the current HEAD.
The contribution data JSON is created at ./currentContributionData.json.
It will include all fields listed here.
Any "Instant" in the specification is an ISO 8601 date-time. Any Duration is an ISO 8601 duration.
The all-contribution-data command will collect all the contributions in the git repository.
This is calculated by subdividing the repository by its tags, and each section becomes a contribution.
The contribution data JSON is created at ./allContributionData.json, as a JSON array.
It will include all fields listed here.
Any "Instant" in the specification is an ISO 8601 date-time. Any Duration is an ISO 8601 duration.
Both commands support structured output via the --format flag. Use --format=json for advanced build automation that
needs explicit status envelopes and error handling.
--format=text (default): Writes JSON to a file and prints a confirmation message--format=json: Outputs structured JSON to stdout wrapped in a status envelopeExample command:
digger current-contribution-data $(pwd)
Output:
Data written to currentContributionData.json
The JSON data is written to currentContributionData.json (or the file specified by --output-file).
Example command:
digger current-contribution-data $(pwd) --format=json
Success response:
{
"status": "success",
"data": {
"storyId": "STORY-123",
"contributors": [
{
"email": "user@example.com",
"name": "John Doe"
}
],
"commits": [
{
"sha": "abc123",
"message": "[STORY-123] [patch] Fix bug",
"dateTime": "2026-05-19T10:30:00Z"
}
],
"semver": "Patch",
"label": "my-project",
"firstCommitDateTime": "2026-05-19T10:30:00Z",
"lastCommitDateTime": "2026-05-19T10:30:00Z",
"ease": 3
}
}
The data field contains the contribution data object.
See ContributionDataJson.kt
for the complete schema, or use current-contribution-data --help for field descriptions.
Example command:
digger all-contribution-data $(pwd) --format=json
Success response:
{
"status": "success",
"data": [
{
"storyId": "STORY-123",
"contributors": [],
"commits": [],
"semver": "Patch",
"label": "my-project",
"firstCommitDateTime": "2026-05-19T10:30:00Z",
"lastCommitDateTime": "2026-05-19T10:30:00Z",
"ease": 3
}
]
}
(Additional contribution objects omitted for brevity)
The data field contains an array of contribution data objects, one for each contribution period. Use
all-contribution-data --help for more details.
Extract story ID in GitHub Actions:
- name: Get current contribution
id: contribution
run: |
STORY_ID=$(digger current-contribution-data $(pwd) --format=json | jq -r '.data.storyId')
echo "story-id=$STORY_ID" >> $GITHUB_OUTPUT
- name: Use story ID
run: |
echo "Current story: ${{ steps.contribution.outputs.story-id }}"
Extract contributor list in bash:
# Get contributors
CONTRIBUTORS=$(digger current-contribution-data $(pwd) --format=json | jq -r '.data.contributors[].name')
echo "Contributors:"
echo "$CONTRIBUTORS"
Check semver type:
OUTPUT=$(digger current-contribution-data $(pwd) --format=json 2>/dev/null)
SEMVER=$(echo "$OUTPUT" | jq -r '.data.semver')
case "$SEMVER" in
"Major")
echo "Breaking change detected"
;;
"Minor")
echo "New feature detected"
;;
"Patch")
echo "Bug fix detected"
;;
"None")
echo "No version bump"
;;
esac
Extract all story IDs:
# Get all contributions and extract story IDs
STORY_IDS=$(digger all-contribution-data $(pwd) --format=json | jq -r '.data[].storyId' | sort -u)
echo "All story IDs:"
echo "$STORY_IDS"
For a full listing of the available options in the program, please use the built-in help command.
digger --help
For fit-assessment guidance and workflow recommendations:
digger guide
Documentation is also available as markdown files in the repository:
FAQs
Privacy-controlled git analytics for team insights. CLI for extracting contribution statistics, commit analysis, and developer metrics from git repositories.
The npm package @continuous-excellence/digger receives a total of 154 weekly downloads. As such, @continuous-excellence/digger popularity was classified as not popular.
We found that @continuous-excellence/digger demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Research
/Security News
Malicious Chrome and Firefox extensions posed as free VPNs while stealing clipboard data through later extension updates.

Research
/Security News
Miasma Mini Shai-Hulud hits @immobiliarelabs Backstage plugins, targeting GitLab and LDAP auth packages on npm.

Security News
Rolldown paused Rust React Compiler integration after a 5MB binary size increase raised concerns about shipping React-specific code to all Vite users.