Release-it is the CLI tool that automates versioning, changelog generation, git tagging, npm publishing, and GitHub release creation in a single command. It's the engine behind many projects' release workflows. But when the services those releases deploy go down — or when the release pipeline itself stops running — Release-it has no built-in monitoring.
In this tutorial you'll add uptime and heartbeat monitoring to Release-it release pipelines and the services they ship using Vigilmon — free tier, no credit card required.
Why monitor Release-it pipelines?
Release-it is often run in CI on a schedule or triggered by pushing to a release branch. Several things can fail silently:
- npm publish succeeds but service deployment fails — the artifact is live on npm but the running service never updated, leaving production on stale code
- GitHub release is created but changelog is empty — a misconfigured Release-it plugin generates a release tag with no notes, and nobody notices
- Scheduled release job stops running — a CI configuration change disables the trigger and releases stop shipping without any error
- Service degrades after a new release — a dependency change or migration in the new version causes 5xx errors that only surface after deployment
Vigilmon heartbeat monitors catch pipeline stalls; HTTP monitors catch post-release service degradation.
What you'll need
- A project using Release-it (typically with a CI workflow that runs
release-it) - A service deployed after each Release-it release
- A free Vigilmon account
Step 1: Add a health endpoint that exposes the current release version
The most useful health endpoint for a Release-it-managed project tells you which version is currently deployed. This lets you verify that the latest Release-it tag is actually running in production.
For a Node.js service:
const { version, name } = require('./package.json');
app.get('/health', (req, res) => {
res.json({
status: 'ok',
name,
version,
uptime: process.uptime()
});
});
After Release-it bumps 2.1.0 → 2.2.0 and deploys, the health endpoint should show "version":"2.2.0". If it still shows 2.1.0, the deployment silently failed.
For a Go service (using a version variable injected at build time):
var Version = "dev"
http.HandleFunc("/health", func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
fmt.Fprintf(w, `{"status":"ok","version":%q}`, Version)
})
Build with: go build -ldflags "-X main.Version=$(git describe --tags --exact-match)" to inject the Release-it tag.
Step 2: Configure Release-it hooks to ping Vigilmon
Release-it supports lifecycle hooks that run shell commands at each stage of the release process. Add a Vigilmon heartbeat ping to the after:release hook:
{
"$schema": "https://unpkg.com/release-it/schema/release-it.json",
"git": {
"commitMessage": "chore: release v${version}",
"tagName": "v${version}"
},
"npm": {
"publish": true
},
"hooks": {
"after:bump": "echo 'Version bumped to ${version}'",
"after:npm:release": "echo 'Published to npm'",
"after:release": "curl -fsS -X POST \"$VIGILMON_RELEASE_HEARTBEAT_URL\" --max-time 10 --retry 3 && echo 'Vigilmon heartbeat sent'"
},
"github": {
"release": true,
"releaseName": "Release v${version}"
}
}
Set VIGILMON_RELEASE_HEARTBEAT_URL as an environment variable in your CI secrets. The after:release hook fires only when all release steps complete successfully — if npm publish fails or the GitHub release creation errors, the hook doesn't run and no ping reaches Vigilmon.
Step 3: Set up heartbeat monitoring in Vigilmon
Create a heartbeat monitor for your Release-it pipeline:
- Log in to vigilmon.online and go to New Monitor → Heartbeat
- Name it
Release-it — main - Set the expected interval to your release cadence:
- Weekly releases → 8 days (7 days + 1 day grace)
- Bi-weekly releases → 15 days
- Continuous releases (every merge) → 48 hours
- Set the grace period to 4 hours
- Save and copy the ping URL → store it as
VIGILMON_RELEASE_HEARTBEAT_URLin CI
If your team stops merging release commits or if CI breaks, no ping arrives after the expected interval and Vigilmon alerts you.
Step 4: Set up HTTP monitoring for deployed services
Point Vigilmon at each service's health endpoint to catch post-release degradation:
- Go to Monitors → New Monitor → HTTP / HTTPS
- Set the URL to your health endpoint, e.g.
https://api.example.com/health - Set the check interval to 1 minute
- Under Expected response, set:
- Status code:
200 - (Optional) Response body contains:
"status":"ok"
- Status code:
- Save
Vigilmon checks every minute from multiple regions. Any non-200 response — including a startup failure from a bad release — opens an incident.
Step 5: Add CI pipeline heartbeat monitoring
If Release-it runs in CI (GitHub Actions, GitLab CI, CircleCI), add a dedicated CI heartbeat monitor separate from the Release-it release heartbeat:
# .github/workflows/release.yml
name: Release
on:
push:
branches: [main]
jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
token: ${{ secrets.GITHUB_TOKEN }}
- uses: actions/setup-node@v4
with:
node-version: '20'
registry-url: 'https://registry.npmjs.org'
- run: npm ci
- name: Configure git
run: |
git config user.email "ci@example.com"
git config user.name "CI"
- name: Run Release-it
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
VIGILMON_RELEASE_HEARTBEAT_URL: ${{ secrets.VIGILMON_RELEASE_HEARTBEAT_URL }}
run: npx release-it --ci
- name: Deploy updated service
run: ./scripts/deploy.sh
- name: Smoke test after deploy
run: |
sleep 10
curl -sf https://api.example.com/health
- name: Ping Vigilmon — deploy complete
if: success()
run: |
curl -fsS -X POST "${{ secrets.VIGILMON_DEPLOY_HEARTBEAT_URL }}" \
--max-time 10 --retry 3
Use two separate heartbeat monitors:
Release-it — main: pinged by the Release-itafter:releasehook (confirms packages released)Deploy — production: pinged after the deploy step (confirms service updated)
Step 6: Track key metrics
| Metric | What it catches | |---|---| | HTTP response code | Service crash after release, bad deploy | | HTTP response body version | Old version still serving — deploy silently failed | | HTTP response time | Performance regression introduced in new release | | Release heartbeat | Release cadence stalled, CI trigger disabled | | Deploy heartbeat | Release published but service never updated | | TCP port reachability | Service failed to start after deploy |
Set a response-time alert threshold (e.g. alert if > 1 s) to detect latency regressions introduced by a Release-it-triggered deploy.
Step 7: Configure alert channels
- Go to Alert Channels → Add Channel
- Choose Email, Slack webhook, or PagerDuty
- Assign channels to your HTTP monitors and heartbeat monitors
- For production HTTP monitors, trigger on 1 failed check
- For release heartbeat monitors, trigger after the grace period expires
When a heartbeat is missed:
🔴 MISSED HEARTBEAT: Release-it — main
Last ping: 10 days ago
Expected interval: 7 days
No release has shipped in 10 days. Check CI pipeline status.
When service health fails after a deploy:
🔴 DOWN: api.example.com/health
Duration: 4 minutes
Last response: 503
Check deploy logs — service may have failed to start after the latest Release-it deploy.
Step 8: Create a status page
If Release-it manages multiple packages and services (a common monorepo pattern), a Vigilmon status page surfaces all service health in one view:
- Go to Status Pages → New Status Page
- Name it (e.g. "Production Services")
- Add all your HTTP monitors and TCP monitors
- Publish and share with your team
This is especially useful in the minutes after a Release-it run — team members can watch the status page to confirm all services came up healthy after the deploy.
Conclusion
Release-it automates everything from version bump to GitHub release to npm publish. Vigilmon closes the observability gap that follows: confirming the pipeline ran on schedule, verifying deployed services are healthy, and catching the version mismatch that reveals a deploy silently failed. Add the after:release hook, create a heartbeat monitor for your release cadence, and set up a one-minute HTTP monitor on each deployed service — you'll have full release pipeline visibility in under fifteen minutes.
Get started free at vigilmon.online.