برنامهٔ تقویمی با اعلام انتشار یکسان نیست

در بازبینی ۲۷ اکتبر ۲۰۲۶، صفحهٔ رسمی نود، شاخهٔ ۲۶ را در وضعیت جاری نشان می‌دهد و تقویم رسمی، آغاز پشتیبانی بلندمدت آن را برای ۲۸ اکتبر برنامه‌ریزی کرده است. این دو گزاره را نباید با اعلام انجام‌شدهٔ انتشار جایگزین کرد. مقاله برای آماده‌کردن تصمیم ارتقا نوشته شده است؛ در روز استفاده، وضعیت واقعی و اطلاعیهٔ رسمی را دوباره بررسی کنید، چون برنامهٔ زمانی به‌تنهایی تأیید انتشار نیست.

ارتقای محیط اجرا فقط جایگزینی یک فرمان روی لپ‌تاپ نیست. سرویس، کانتینر، ابزار ساخت و کار زمان‌بندی‌شده می‌توانند نسخه‌های متفاوتی داشته باشند. نمونهٔ موجودی، نسخهٔ همان فرایند و اطلاعات چند وابستگی بومی را در یک فایل تازه ثبت می‌کند. این گزارش برای مقایسهٔ محیط‌ها مفید است، اما به‌تنهایی سازگاری بسته‌ها یا درستی تنظیمات سرویس را ثابت نمی‌کند. آن را از داخل محیط هدف تهیه کنید.

نسخهٔ فرایند و وابستگی‌های بومی را ثبت کنید

سیاست نمونه یک تصویر تاریخ‌دار از تقویم رسمی است. پیش از روز برنامه‌ریزی‌شده، وضعیت را جاری گزارش می‌کند؛ پس از رسیدن تاریخ نیز از شما می‌خواهد اعلام واقعی و آزمون برنامه را بررسی کنید. بنابراین عبور ساعت از نیمه‌شب باعث تأیید خودکار ارتقا نمی‌شود. نسخهٔ شاخهٔ دیگر و سیاست منقضی‌شده نیز نیازمند بررسی‌اند. نگهداری چنین مرزی از اعتماد بیش از حد به مقایسهٔ سادهٔ شماره‌ها جلوگیری می‌کند.

چهار فایل را کنار هم ذخیره کنید. ابزارها روی نود ۲۲ یا جدیدتر اجرا می‌شوند و بستهٔ بیرونی نمی‌خواهند. با node --test test_schedule.mjs مرز تاریخ‌ها را بررسی کنید؛ آزمون ساعت واقعی رایانه را عوض نمی‌کند. سپس node schedule_check.mjs را اجرا کنید. اگر مفسر شما شاخهٔ ۲۶ نیست، پیام بررسی شاخهٔ دیگر طبیعی است و به معنی شکست نصب یا نیاز به ارتقای فوری همهٔ ماشین‌ها نیست.

با node runtime_inventory.mjs یک گزارش تازه در پوشهٔ آزمایش بسازید. این فایل در اجرای دوباره بازنویسی نمی‌شود و می‌تواند مبنای مقایسهٔ محیط قدیم و هدف باشد. پیش از انتقال، نصب وابستگی‌ها، بسته‌های دارای افزونهٔ بومی، اتصال شبکه، پردازش متن فارسی و کارهای پس‌زمینه را در محیط جدا آزمون کنید. موفقیت آزمون سیاست تقویم، جای اجرای آزمون‌های خود برنامه و اندازه‌گیری مصرف منابع را نمی‌گیرد.

فایل‌های کامل و قابل اجرا

چهار فایل زیر کامل‌اند؛ پیش‌نیاز، ترتیب اجرا و روش بررسی در متن آمده است. کدها خلاصه یا پنهان نشده‌اند.

1. فایل کامل schedule_snapshot.json

این فایل را با همین نام و بدون حذف سطرها کنار بقیهٔ فایل‌ها ذخیره کنید.

{
  "reviewed": "2026-10-27",
  "reviewBy": "2026-11-03",
  "source": "https://raw.githubusercontent.com/nodejs/Release/main/schedule.json",
  "v26": {"start": "2026-05-05", "lts": "2026-10-28", "maintenance": "2027-10-20", "end": "2029-04-30"}
}

دستور اجرا، نتیجهٔ مورد انتظار و محدودیت این فایل در بخش اجرای مقاله توضیح داده شده است.

2. فایل کامل schedule_check.mjs

این فایل را با همین نام و بدون حذف سطرها کنار بقیهٔ فایل‌ها ذخیره کنید.

import fs from 'node:fs';

export function assess(version, policy, today) {
  if (!/^\d{4}-\d{2}-\d{2}$/.test(today) || today < policy.reviewed || today > policy.reviewBy) return 'review-policy-date';
  if (!/^v?26\.\d+\.\d+$/.test(version)) return 'review-a-different-runtime-branch';
  if (today < policy.v26.lts) return 'current-before-scheduled-lts';
  return 'verify-actual-lts-announcement-and-application-tests';
}

if (process.argv[1] && new URL(import.meta.url).pathname.replace(/^\/(?:([A-Za-z]:))/, '$1').endsWith(process.argv[1].replaceAll('\\', '/'))) {
  const policy = JSON.parse(fs.readFileSync(new URL('./schedule_snapshot.json', import.meta.url), 'utf8'));
  console.log(JSON.stringify({version: process.version, assessment: assess(process.version, policy, new Date().toISOString().slice(0, 10))}));
}

دستور اجرا، نتیجهٔ مورد انتظار و محدودیت این فایل در بخش اجرای مقاله توضیح داده شده است.

3. فایل کامل runtime_inventory.mjs

این فایل را با همین نام و بدون حذف سطرها کنار بقیهٔ فایل‌ها ذخیره کنید.

import fs from 'node:fs';
const evidence = {version: process.version, platform: process.platform, architecture: process.arch,
  versions: {modules: process.versions.modules, openssl: process.versions.openssl, v8: process.versions.v8}};
fs.writeFileSync('runtime-inventory.json', JSON.stringify(evidence, null, 2) + '\n', {flag: 'wx'});
console.log('Saved runtime-inventory.json; record this inside the target service/container.');

دستور اجرا، نتیجهٔ مورد انتظار و محدودیت این فایل در بخش اجرای مقاله توضیح داده شده است.

4. فایل کامل test_schedule.mjs

این فایل را با همین نام و بدون حذف سطرها کنار بقیهٔ فایل‌ها ذخیره کنید.

import {test} from 'node:test';
import assert from 'node:assert/strict';
import fs from 'node:fs';
import {assess} from './schedule_check.mjs';
const policy = JSON.parse(fs.readFileSync(new URL('./schedule_snapshot.json', import.meta.url), 'utf8'));
test('scheduled LTS date is not treated as a completed announcement', () => {
  assert.equal(assess('v26.12.1', policy, '2026-10-27'), 'current-before-scheduled-lts');
  assert.equal(assess('v26.12.1', policy, '2026-10-28'), 'verify-actual-lts-announcement-and-application-tests');
  assert.equal(assess('v26.12.1', policy, '2026-11-04'), 'review-policy-date');
  assert.equal(assess('v24.22.1', policy, '2026-10-27'), 'review-a-different-runtime-branch');
});

دستور اجرا، نتیجهٔ مورد انتظار و محدودیت این فایل در بخش اجرای مقاله توضیح داده شده است.

اجرای سیاست کوتاه‌عمر و آماده‌کردن آزمون

برای انتشار کنترل‌شده، نسخهٔ دقیق و روش ساخت تصویر یا بسته را ثبت کنید و معیار بازگشت داشته باشید. روز اعلام وضعیت بلندمدت، منبع رسمی را دوباره بخوانید و سیاست بازبینی‌شده را همراه شواهد آزمون نگه دارید. اطلاعات این مقاله نباید پس از موعد بازبینی به‌عنوان تأیید دائمی استفاده شود. هدف، آماده‌سازی یک تغییر قابل ارزیابی و قابل برگشت است، نه حرکت خودکار به هر شمارهٔ نسخهٔ تازه.

چک‌لیست اجرای عملی

  • وضعیت واقعی از برنامهٔ تقویم تفکیک شود.
  • نسخه از فرایند یا کانتینر هدف ثبت شود.
  • آزمون وابستگی بومی و برنامه جدا اجرا شود.
  • در روز تصمیم، منبع و مهلت سیاست بازبینی شوند.

منابع

تدوین و راهنمای عملی: دانشنامه لیان.