DevTools Overview
Development automation tools for sprint management, release processes, and backlog workflows at Path2Response.
Purpose
The devtools repository contains a collection of Node.js CLI tools used by the Engineering team to automate recurring sprint and development processes. These tools integrate with Jira, Bitbucket, Slack, and Google Workspace to streamline the two-week sprint cycle and maintain operational efficiency.
Architecture
Repository Structure
devtools/
├── backlogManagement/ # PROD <-> PATH workflow automation
├── createRecurringSprintStories/ # Automated sprint story creation
├── findExternalShareFiles/ # Google Drive security audit
├── notifySprint/ # Sprint announcement notifications
├── setOrdersSupport/ # Support rotation management
├── sprintRelease/ # Release automation (tags, branches, versions)
├── sprintReviewExport/ # Sprint review data export
├── sprintTestPlan/ # Test plan generation
├── sprintVerifyVersions/ # Version verification for releases
├── testPlansNagging/ # Test plan reminder notifications
└── package.json # Root orchestration
Technology Stack
| Component | Technology |
|---|---|
| Runtime | Node.js (~22 or ~24) |
| Package Manager | npm (~10 or ~11) |
| Language | JavaScript (ES6+), TypeScript (backlogManagement) |
| Jira Integration | jira.js library |
| Slack Integration | @slack/web-api |
| Async Control | async.js (auto pattern) |
| CLI Framework | yargs |
| Testing | Mocha, Jest, nyc (coverage) |
| Linting | ESLint with @stylistic/eslint-plugin |
| Shared Utilities | javascript-shared (internal library) |
Common Patterns
All tools follow consistent patterns:
- CLI with yargs - Standard argument parsing with
--helpsupport - async.auto() - Dependency-based task orchestration
- Dry-run mode -
--dry-runflag for safe testing - JSON output -
--json-outputfor programmatic consumption - Environment variables - Credentials via env vars, not config files
Tools
backlogManagement
Purpose: Manage PROD-PATH workflow transitions, including triage tasks and epic creation.
Location: backlogManagement/
CLI Commands:
| Command | Description |
|---|---|
createTriageTask.ts | Creates a triage task linked to a PROD ticket (automated via Jira Automation) |
createPRODToPathEpic.ts | Creates PATH epic and refinement task from PROD ticket |
addRefinementTaskToExistingPathEpic.ts | Adds refinement task to existing PATH epic |
closeIssue.ts | Closes a Jira issue |
Usage:
cd backlogManagement
npx ts-node bin/createPRODToPathEpic.ts --prod-jira-key PROD-1234
npx ts-node bin/createPRODToPathEpic.ts --prod-jira-key PROD-1234 --skip-refinement-task
Templates Used:
- PATH-24850: Triage task template
- PATH-24853: PATH epic template
- PATH-24855: Refinement task template
createRecurringSprintStories
Purpose: Automate creation of recurring Jira stories for sprint ceremonies, maintenance tasks, and operational activities.
Location: createRecurringSprintStories/
Story Builders Include:
- Sprint release activities (tags, branches, versions)
- Dependency maintenance across all projects
- Branch cleanup
- SSL certificate updates
- CDK backend installations (Dev, RC, Production)
- NCOA runs
- AWS cost reviews
- Security Hub/GuardDuty findings review
- Melissa data artifact updates
- Browse transaction counts
- End of month close activities
- Domain transfer management
Usage:
cd createRecurringSprintStories
# List available story builders for a sprint
node lib/createRecurringSprintStories.js -s 250 -n
# Dry-run for a specific sprint
node lib/createRecurringSprintStories.js --target-sprint-number 250 --dry-run
# Create specific stories only
node lib/createRecurringSprintStories.js -s 250 -o releaseSprint,performDependencyMaintenanceOnAllProjects
Environment Variables:
JIRA_SERVICE_USER_NAME- Atlassian emailJIRA_SERVICE_USER_PASSWORD- Atlassian API token
sprintRelease
Purpose: Automate sprint release activities including branching, tagging, version management, and deployments.
Location: sprintRelease/
CLI Actions (in lib/actions/):
| Action | Description |
|---|---|
createBranches.js | Create branches across multiple repositories |
createPatchBranch.js | Create patch/hotfix branches |
tagReleases.js | Tag releases across repositories |
mergeBranches.js | Merge branches (e.g., staging to production) |
setVersions.js | Update version numbers in package.json files |
printVersions.js | Display current versions across projects |
printNewestTags.js | Show most recent tags per repository |
resetStagingBranches.js | Reset staging branches for new sprint |
deployReleasesToNexus.js | Deploy releases to Nexus repository |
exportGitCommitInfo.js | Export commit history for release notes |
checkAllServerUptimes.js | Verify server availability |
qc.js | Quality control checks |
Usage:
cd sprintRelease
# Create staging branch from production tag
node lib/actions/createBranches.js -b 330.0.0 -s staging/sprint-331 --repos all
# Tag releases
node lib/actions/tagReleases.js -t 331.0.0 --repos all --dry-run
# Check versions
node lib/actions/printVersions.js --repos all
sprintTestPlan
Purpose: Generate test plan content for Google Sheets from Jira sprint data.
Location: sprintTestPlan/
Key Files:
sprintTestPlanExport.js- Main export scriptbaseTests.json- Standard test casesautomatedTests.json- Automated test definitions
Author: Michael Pelikan
sprintReviewExport
Purpose: Generate sprint review sheet contents from Jira data for sprint retrospectives.
Location: sprintReviewExport/
Key File: sprintReviewExport.js - Exports to CSV format
Author: Originally in jmalone’s paraphernalia, moved to devtools
sprintVerifyVersions
Purpose: Validate version consistency after DevOps performs sprint release activities.
Location: sprintVerifyVersions/
Key Files:
verify_versions.sh- Main verification scriptgetRepositoryProjects.js- Generates project list for verification
notifySprint
Purpose: Send sprint notifications to company Slack channels announcing sprint completion and new sprint start.
Location: notifySprint/
Key Files:
notifySprint.js- Main notification scriptsprint_announcement.txt- Announcement template with placeholdersactivities.json- Random activities for announcement varietycodeFreezeLanguage.txt- Code freeze notification text
Environment Variables:
SLACK_TOKEN- Slack API tokenJIRA_HOST- Jira instance (default: caveance.atlassian.net)JIRA_SERVICE_USER_NAME- Jira user emailJIRA_SERVICE_USER_TOKEN- Jira API token
Slack Channel: Posts to #general (C024QPRA3)
Author: Michael Pelikan
setOrdersSupport
Purpose: Update the #orders Slack channel topic based on the Engineering/Data Science support rotation schedule from Google Sheets.
Location: setOrdersSupport/
Dependencies: @slack/web-api, moment-timezone
Author: Michael Pelikan
testPlansNagging
Purpose: Send reminder messages to Slack for incomplete pre-release and post-release test plan items.
Location: testPlansNagging/
Features:
- Queries Jira for incomplete test items
- Sends targeted reminders via Slack
- Supports pre-release and post-release phases
Author: John Malone
findExternalShareFiles
Purpose: Security audit tool to find Google Drive files shared externally (“Anyone with link”) that are owned internally.
Location: findExternalShareFiles/
Author: Michael Pelikan
Integrations
Jira (Atlassian)
All tools connect to the Caveance Atlassian instance:
- Host: caveance.atlassian.net
- Authentication: Basic auth with API token
- Projects: PATH (Engineering), PROD (Product)
- Board ID: 4 (PATH Sprint Board)
Bitbucket
Sprint release tools interact with Bitbucket repositories:
- Repository URL pattern:
git@bitbucket.org:path2response/{repo}.git - Operations: clone, branch, tag, merge, push
Slack
Multiple tools post to Slack channels:
notifySprint- Sprint announcements to #generalsetOrdersSupport- Updates #orders channel topictestPlansNagging- Test plan reminders
Google Workspace
setOrdersSupport- Reads support rotation from Google SheetsfindExternalShareFiles- Audits Google Drive sharing permissions
Nexus Repository
sprintRelease- Deploys releases to internal Nexus
Development
Prerequisites
# Node.js version
node --version # Should be ~22 or ~24
# npm version
npm --version # Should be ~10 or ~11
Installation
# Clone repository
git clone git@bitbucket.org:path2response/devtools.git
cd devtools
# Install all sub-projects
npm run reinstall
Per-Project Commands
Each sub-project supports:
| Command | Description |
|---|---|
npm run reinstall | Clean install with linting |
npm run reinstall-production | Production install (npm ci) |
npm test | Run tests |
npm run lint | Run ESLint |
npm run test-with-coverage | Tests with coverage report |
Environment Variables
| Variable | Used By | Purpose |
|---|---|---|
JIRA_SERVICE_USER_NAME | Most tools | Atlassian email |
JIRA_SERVICE_USER_PASSWORD | createRecurringSprintStories | Atlassian API token |
JIRA_SERVICE_USER_TOKEN | notifySprint | Atlassian API token |
JIRA_AUTOMATION_USER_TOKEN | backlogManagement | Jira automation token |
SLACK_TOKEN | notifySprint, setOrdersSupport, testPlansNagging | Slack API token |
JIRA_HOST | All Jira tools | Atlassian host (default: caveance.atlassian.net) |
JIRA_SPRINT_BOARD | notifySprint | Sprint board ID (default: 4) |
Versioning
All tools share a version number with the main sprint releases:
- Current:
335.0.0-SNAPSHOT - Format:
{sprint}.{patch}.{build}[-SNAPSHOT]
Related Documentation
| Document | Description |
|---|---|
| Development Process | Agile/Scrum process and Jira usage |
| Sprint Process Schedule | Sprint ceremonies and schedules |
| Branching Strategy | Git branching workflow |
| Base Test Plan | Standard pre-release testing |
| PROD-PATH Process | Product-Development workflow |
Source Files Read:
/Users/mpelikan/Documents/code/p2r/devtools/README.md/Users/mpelikan/Documents/code/p2r/devtools/package.json/Users/mpelikan/Documents/code/p2r/devtools/backlogManagement/README.md/Users/mpelikan/Documents/code/p2r/devtools/sprintRelease/README.md/Users/mpelikan/Documents/code/p2r/devtools/createRecurringSprintStories/README.md- All tool package.json files
- Sample source files for architecture patterns
Documentation created: 2026-01-24