Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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

ComponentTechnology
RuntimeNode.js (~22 or ~24)
Package Managernpm (~10 or ~11)
LanguageJavaScript (ES6+), TypeScript (backlogManagement)
Jira Integrationjira.js library
Slack Integration@slack/web-api
Async Controlasync.js (auto pattern)
CLI Frameworkyargs
TestingMocha, Jest, nyc (coverage)
LintingESLint with @stylistic/eslint-plugin
Shared Utilitiesjavascript-shared (internal library)

Common Patterns

All tools follow consistent patterns:

  1. CLI with yargs - Standard argument parsing with --help support
  2. async.auto() - Dependency-based task orchestration
  3. Dry-run mode - --dry-run flag for safe testing
  4. JSON output - --json-output for programmatic consumption
  5. 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:

CommandDescription
createTriageTask.tsCreates a triage task linked to a PROD ticket (automated via Jira Automation)
createPRODToPathEpic.tsCreates PATH epic and refinement task from PROD ticket
addRefinementTaskToExistingPathEpic.tsAdds refinement task to existing PATH epic
closeIssue.tsCloses 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 email
  • JIRA_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/):

ActionDescription
createBranches.jsCreate branches across multiple repositories
createPatchBranch.jsCreate patch/hotfix branches
tagReleases.jsTag releases across repositories
mergeBranches.jsMerge branches (e.g., staging to production)
setVersions.jsUpdate version numbers in package.json files
printVersions.jsDisplay current versions across projects
printNewestTags.jsShow most recent tags per repository
resetStagingBranches.jsReset staging branches for new sprint
deployReleasesToNexus.jsDeploy releases to Nexus repository
exportGitCommitInfo.jsExport commit history for release notes
checkAllServerUptimes.jsVerify server availability
qc.jsQuality 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 script
  • baseTests.json - Standard test cases
  • automatedTests.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 script
  • getRepositoryProjects.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 script
  • sprint_announcement.txt - Announcement template with placeholders
  • activities.json - Random activities for announcement variety
  • codeFreezeLanguage.txt - Code freeze notification text

Environment Variables:

  • SLACK_TOKEN - Slack API token
  • JIRA_HOST - Jira instance (default: caveance.atlassian.net)
  • JIRA_SERVICE_USER_NAME - Jira user email
  • JIRA_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 #general
  • setOrdersSupport - Updates #orders channel topic
  • testPlansNagging - Test plan reminders

Google Workspace

  • setOrdersSupport - Reads support rotation from Google Sheets
  • findExternalShareFiles - 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:

CommandDescription
npm run reinstallClean install with linting
npm run reinstall-productionProduction install (npm ci)
npm testRun tests
npm run lintRun ESLint
npm run test-with-coverageTests with coverage report

Environment Variables

VariableUsed ByPurpose
JIRA_SERVICE_USER_NAMEMost toolsAtlassian email
JIRA_SERVICE_USER_PASSWORDcreateRecurringSprintStoriesAtlassian API token
JIRA_SERVICE_USER_TOKENnotifySprintAtlassian API token
JIRA_AUTOMATION_USER_TOKENbacklogManagementJira automation token
SLACK_TOKENnotifySprint, setOrdersSupport, testPlansNaggingSlack API token
JIRA_HOSTAll Jira toolsAtlassian host (default: caveance.atlassian.net)
JIRA_SPRINT_BOARDnotifySprintSprint 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]
DocumentDescription
Development ProcessAgile/Scrum process and Jira usage
Sprint Process ScheduleSprint ceremonies and schedules
Branching StrategyGit branching workflow
Base Test PlanStandard pre-release testing
PROD-PATH ProcessProduct-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