آپلود source map با CLI
ابزار `@abrova-trace/cli` را در pipeline مربوط به CI/CD اجرا کنید تا بعد از هر build، source mapها آپلود شوند. stack traceهای minified در داشبورد ابرووا تریس به مسیر خوانای فایلهای اصلی تبدیل میشوند.
ابزار @abrova-trace/cli فایلهای source map را از pipeline مربوط به CI/CD به ابرووا تریس آپلود میکند. هر خطایی که بعد از آپلود ثبت شود، در داشبورد با نام واقعی فایلها و شمارهی خطوط نمایش داده میشود؛ دیگر خبری از stackهای minified مثل 4d240bf7.js:1:16945 نیست.
هر بار که build مربوط به production را با minification منتشر میکنید (Next.js، Vite، webpack، Rollup). بدون source mapهای آپلودشده، هر خطا در داشبورد ابرووا تریس stack فشردهشده را نشان میدهد که برای debug به کاری نمیآید.
پیشنیازها#
سه چیز لازم دارید:
- Node.js 18+ روی ماشینی که آپلود را اجرا میکند (runner مربوط به CI یا سیستم توسعهی خودتان)
- یک توکن دسترسی شخصی با دسترسی
sourcemaps:write - DSN پروژه از بخش ابرووا تریس ← Source map و symbol در کنسول ابرووا
نصب CLI#
این CLI از Abrova Center میآید. یک بار رجیستری را اضافه کنید، سپس آن را بهعنوان dev dependency نصب کنید:
# .npmrc (in your project root) @abrova-trace:registry=https://center.abrova.ir/api/packages/abrova/npm/
npm install --save-dev @abrova-trace/cli
آن را از داخل پروژه با npx abrova-trace اجرا کنید (مثلاً npx abrova-trace --help). نام دستور abrova-trace است.
ساختن توکن دسترسی شخصی#
توکنهای دسترسی شخصی (PAT) اعتبارنامههایی بلندمدت و وابسته به کاربرند؛ همان الگویی که بسیاری از CLIهای توسعهدهندگان به کار میبرند. در جریانهای خودکار، جای توکن نشست کاربر را میگیرند.
- کنسول ابرووا را باز کنید: Account → Personal Access Tokens
- روی token جدید کلیک کنید
- یک نام به آن بدهید (مثلاً
CI upload — production) - دسترسی
sourcemaps:writeرا فعال کنید - تاریخ انقضا را انتخاب کنید (برای CI بدون انقضا هم مشکلی ندارد؛ ۹۰ روز یک حد وسط رایج است)
- روی ساخت token کلیک کنید
- مقدار
ab_pat_xxxرا همان لحظه کپی کنید؛ فقط یک بار نمایش داده میشود
این مقدار را در محیط CI بهعنوان secret با نام ABROVA_TRACE_TOKEN ذخیره کنید.
- توکنها در سمت ما بهصورت hash ذخیره میشوند؛ توکن گمشده را نمیتوانیم بازیابی کنیم، فقط میشود آن را باطل کرد و توکن تازه ساخت.
- خود توکن اعتبارنامه است؛ هر کسی آن را داشته باشد میتواند در هر کدام از پروژههای شما source map آپلود کند.
- اگر لو رفت، از همان صفحه فوراً باطلش کنید. همهی کارهای CLI/CI که از آن استفاده میکنند همان لحظه از کار میافتند.
- هرگز توکن را در git commit نکنید. از secretهای سرویس CI خود استفاده کنید (GitHub Actions Secrets، متغیرهای GitLab CI و غیره).
پیدا کردن شناسهی پروژه#
«project ID» در این CLI همان DSN پروژه برای پلتفرم وبی است که mapها به آن تعلق دارند (در یک پروژهی ابرووا، هر پلتفرم DSN جداگانهی خودش را دارد).
- کنسول ابرووا را باز کنید و پروژهتان را انتخاب کنید
- به ابرووا تریس ← Source map و symbol بروید (زبانهی Source maps)
- در کارت آپلود از CI، اگر پروژه بیش از یک پلتفرم دارد پلتفرم وب را انتخاب کنید، سپس DSN پروژه برای CLI را کپی کنید
این مقدار را با نام ABROVA_TRACE_PROJECT در محیط CI ذخیره کنید (CLI متغیر قدیمی ABROVA_TRACE_DSN را هم همچنان میخواند).
آپلود از CI#
این دو خط را درست بعد از build مربوط به production که فایلهای source map را میسازد، به pipeline اضافه کنید:
export ABROVA_TRACE_TOKEN=ab_pat_xxx export ABROVA_TRACE_PROJECT=<your-project-id> npx abrova-trace sourcemaps upload ./path/to/your/sourcemaps \ --release "1.2.3"
همین. CLI همهی فایلهای .map را در پوشهی دادهشده و زیرپوشههایش پیدا میکند، همه را در یک درخواست آپلود میکند و با نسخهی release برچسب میزند تا ابرووا تریس بتواند آنها را با خطاهای همان نسخه جور کند.
مثال: آپلود source mapهای Next.js#
در Next.js ساخت source map را در next.config.js فعال کنید:
module.exports = {
productionBrowserSourceMaps: true,
};سپس در اسکریپت CI:
#!/bin/bash
set -e
# 1. Build with sourcemaps
npm run build
# 2. Copy sourcemaps into a dedicated folder
mkdir -p ./sourcemaps
find .next/static/chunks -name "*.js.map" -exec cp {} ./sourcemaps \;
# 3. Upload to Abrova Trace tagged with the release version
npx abrova-trace sourcemaps upload \
--release "$NEXT_PUBLIC_APP_VERSION" \
./sourcemaps
# 4. Remove sourcemaps from the deployed build so browsers can't download them
# (source stays private — Abrova keeps the maps server-side)
find .next/static/chunks -name "*.js.map" -delete
find .next/static/chunks -name "*.js" -exec \
sed -i '/^\/\/# sourceMappingURL=/d' {} +یکسان بودن نسخهی release#
مقدار فلگ --release باید با نسخهای که SDK هنگام ارسال خطا میفرستد یکی باشد. اگر SDK مربوط به Next.js اینطور مقداردهی شده است:
AbrovaTrace.init({
apiKey: process.env.NEXT_PUBLIC_ABROVA_TRACE_API_KEY!,
release: process.env.NEXT_PUBLIC_APP_VERSION, // e.g. "1.2.3"
});با این دستور آپلود کنید:
npx abrova-trace sourcemaps upload \ --release "$NEXT_PUBLIC_APP_VERSION" \ ./sourcemaps
اگر رشتههای release یکی نباشند، ابرووا تریس source map را برای خطا پیدا نمیکند و همان stack فشردهشده را نشان میدهد.
«source mapها را آپلود کردم اما خطاها هنوز stack فشردهشده نشان میدهند.»
معمولاً رشتهی release در آپلود با چیزی که SDK میفرستد یکی نیست. نسخهی release را در صفحهی جزئیات خطا در داشبورد ابرووا تریس ببینید، سپس دقیقاً با همان رشته دوباره آپلود کنید.
گزینههای CLI#
DSN پروژه (یا متغیر محیطی ABROVA_TRACE_PROJECT را تنظیم کنید). --dsn <id> نام دیگر همین گزینه است
الزامی. نسخهی releaseی که این bundle به آن تعلق دارد
توکن دسترسی شخصی (یا متغیر محیطی ABROVA_TRACE_TOKEN را تنظیم کنید)
آدرس پایهی Trace API (یا متغیر محیطی ABROVA_TRACE_API_URL را تنظیم کنید). پیشفرض: https://trace.abrova.ir
پیشنمایش فایلهایی که آپلود میشوند، بدون ارسال آنها
فلگ بر متغیر محیطی متناظرش اولویت دارد. کلید API پروژه (ab_live_…) اینجا کار نمیکند؛ CLI توکن دسترسی شخصی لازم دارد.
ابرووا تریس روی سرور خودتان#
وقتی ابرووا تریس را روی زیرساخت خودتان اجرا میکنید، CLI را به API خودتان وصل کنید:
export ABROVA_TRACE_API_URL=https://trace.mycompany.com npx abrova-trace sourcemaps upload \ --release "1.2.3" \ ./sourcemaps
CLI روی نسخهی self-hosted دقیقاً همان کار را میکند؛ بدون تغییر کد، فقط با تغییر URL.
کدهای خروج#
0: موفق1: هر خطایی (توکن نامعتبر، خطای شبکه، رد شدن آپلود و غیره)
مناسب برای اینکه deploy فقط بعد از آپلود موفق انجام شود:
# .github/workflows/deploy.yml
- name: Upload sourcemaps
run: npx abrova-trace sourcemaps upload --release "$GITHUB_SHA" ./sourcemaps
env:
ABROVA_TRACE_TOKEN: ${{ secrets.ABROVA_TRACE_TOKEN }}
ABROVA_TRACE_PROJECT: ${{ secrets.ABROVA_TRACE_PROJECT }}
- name: Deploy
run: ./deploy.sh
# Deploy only runs if sourcemap upload succeededمحدودیتهای آپلود#
- بیشینهی حجم bundle: ۱۱۰ مگابایت در هر آپلود (کل درخواست multipart)
- بیشینهی حجم فایل: ۵۰ مگابایت برای هر فایل
.map - بیشینهی تعداد فایل در هر آپلود: ۵۰۰
این مقادیر پیشفرض سخاوتمندانهاند و برای buildهای معمول Next.js، Vite و webpack کافیاند. فایلهای بزرگتر با HTTP 413 رد میشوند. اگر bundle شما از ۱۱۰ مگابایت بیشتر است، آن را در چند آپلود با همان --release تقسیم کنید (مثلاً هر بار یک پوشه)، یا با ما تماس بگیرید.
dSYMهای iOS#
CLI فقط source mapهای جاوااسکریپت را آپلود میکند. debug symbolهای iOS (dSYM) در کنسول ابرووا آپلود میشوند:
- در Xcode به Organizer › Archives › Download Debug Symbols بروید، سپس پوشهی
.dSYMرا zip کنید - ابرووا تریس ← Source map و symbol را باز کنید و زبانهی dSYMهای iOS را انتخاب کنید
- release را انتخاب کنید و فایل
.zipرا رها کنید (در هر آپلود یک.zip، تا ۱۰ مگابایت)
آپلود دستکم نقش member میخواهد؛ حذف فایلهای آپلودشده نقش admin یا owner. نقشها و دسترسیها را ببینید.
عیبیابی#
توکن وجود ندارد، منقضی یا باطل شده، یا دسترسی sourcemaps:write را ندارد. در Account → Personal Access Tokens یک توکن تازه بسازید.
شناسهی پروژه وجود ندارد یا صاحب توکن به آن دسترسی ندارد. آن را دوباره از ابرووا تریس ← Source map و symbol (DSN پروژه برای CLI) کپی کنید.
حجم bundle از ۱۱۰ مگابایت یا حجم یک فایل .map از ۵۰ مگابایت بیشتر است. به آپلودهای کوچکتر تقسیم کنید یا با ما تماس بگیرید.
رشتهی release یکی نیست. مقدار --release باید با چیزی که SDK میفرستد یکی باشد. صفحهی جزئیات خطا را در داشبورد ببینید.
build هیچ source mapی نساخته است. در Next.js مقدار productionBrowserSourceMaps: true را در next.config.js تنظیم کنید.