תיעוד

הכניסו את מספר הגרסה לתהליך הבנייה

הקצה לכל גרסה מספר גרסה ומספר בנייה, העביר אותם לתהליך הבנייה, ותן ל־Coroid לאמת באיזו סביבה רצה כל גרסה.

המשתמשים בתוכנתך צריכים לראות באיזו גרסה הם משתמשים. Coroid מקצה לכל גרסה מספר גרסה ומספר בנייה, מעביר את שניהם לתהליך הבנייה, ובודק לאחר מכן שהסביבה רצה את הגרסה שהפצת.

1. Coroid מכנה זאת בשם

שחרור

1.4.1

בנייה 12

מתוך Coroid, קובץ במאגר הקוד שלך, או מתוך תהליך הבנייה.

2. צינור התהליכים שלכם בונה זאת

ה-CI/CD שלכם

COROID_VERSION=1.4.1

COROID_BUILD_NUMBER=12

COROID_COMMIT_SHA=3da015d…

הערכים מגיעים כמשתנים או כקלטים לתהליך עבודה.

3. המשתמשים רואים זאת

אודות

גרסה 1.4.1 (12)

הנתונים מוצגים באפליקציה ונרשמים ל־release.json.

4. Coroid מאשר זאת

GET /version.json

אושר

הפייפליין דיווח על 1.4.1, בנייה 12

לאחר הפצה, Coroid קורא את כתובת ה־URL של הגרסה.

הגרסה מועברת יחד עם השחרור לתהליך הבנייה, ו־Coroid בודק מה בדיוק רץ בסביבה.

כל הפרטים בעמוד זה מוגדרים לפי פרויקט ב־ גרסאות → הגדרות גרסאות → קביעת גרסה.

מאין מגיע מספר הגרסה

בחר מקור אחד לכל פרויקט:

  • Coroid מקצה אותו (הברירת מחדל): Coroid מציע את הגרסה הבאה כשאתה מכין גרסה. הוא מעלה את המספר האחרון של הגרסה הגבוהה ביותר שהופצה בפרויקט, כך ש 1.4.0 נקבע אחרי 1.4.1. הגרסה הראשונה היא 0.1.0. הקלד גרסה שונה בכל פעם שתזדקק לאחת.
  • קרא את הנתונים מהמאגר: Coroid קורא את מספר הגרסה שהקוד שלך מגדיר בזמן הקומיט של הגרסה. הוא מחפש ב־ VERSION, package.json, app.json (Expo), pubspec.yaml, קובץ Gradle של Android, Cargo.toml, pyproject.toml ופרויקט Xcode, או רק בקובץ שתציין. אם הקובץ עדיין מכיל גרסה ששימשה בגרסה קודמת, Coroid יבקש ממך להעלות אותה תחילה.
  • תהליך הבנייה שלי מקצה אותו: CI/CD שלך בוחר את מספר הגרסה, למשל באמצעות semantic-release או מתג, ומדווח עליו עם ההפצה.

לכל גרסה מקבלת גם מספר בנייה. מספרי הבנייה עולים תמיד ואינם נעשים בשימוש חוזר בתוך פרויקט, כפי שחנויות האפליקציות דורשות מ־iOS CFBundleVersion ו־Android versionCode.

מה שמתקבל בתהליך הבנייה

כש־Coroid מתחיל תהליך עבודה של GitHub Actions או תהליך GitLab CI/CD עבור גרסה, הוא מעביר את הערכים הבאים:

משתנה של GitLabקלט של GitHubערך
COROID_VERSIONcoroid_versionגרסת ההפצה
COROID_BUILD_NUMBERcoroid_build_numberמספר הבנייה
COROID_RELEASE_NAMEcoroid_release_nameשם הגרסה
COROID_COMMIT_SHAcoroid_commit_shaערך ה־SHA המלא של הקומיט
COROID_ENVIRONMENTcoroid_environmentמפתח הסביבה
COROID_RELEASE_IDcoroid_release_idמזהה הגרסה של Coroid
COROID_ATTEMPT_IDcoroid_attempt_idניסיון ההפצה

GitHub דוחה קלטים שתהליך העבודה אינו מכריז עליהם. לכן Coroid שולח coroid_version, coroid_build_number ו־ coroid_release_name רק לתהליך עבודה שמפרט אותם. הגדר אותם כאופציונליים:

on:
  workflow_dispatch:
    inputs:
      coroid_release_id: { required: true }
      coroid_attempt_id: { required: true }
      coroid_commit_sha: { required: true }
      coroid_environment: { required: true }
      coroid_version: { required: false }
      coroid_build_number: { required: false }
      coroid_release_name: { required: false }

jobs:
  deploy:
    runs-on: ubuntu-latest
    env:
      APP_VERSION: ${{ inputs.coroid_version || '0.0.0-dev' }}
      APP_BUILD_NUMBER: ${{ inputs.coroid_build_number || '0' }}
      APP_COMMIT: ${{ inputs.coroid_commit_sha || github.sha }}

GitLab מעביר את הערכים כמשתנים, כך שאין צורך בהכרזה:

deploy:
  script:
    - export APP_VERSION="${COROID_VERSION:-0.0.0-dev}"
    - export APP_BUILD_NUMBER="${COROID_BUILD_NUMBER:-0}"
    - export APP_COMMIT="${COROID_COMMIT_SHA:-$CI_COMMIT_SHA}"

תהליך עבודה שפועל באופן עצמאי יכול להשתמש בערכים שלו. דווח על הגרסה שהפצת, כפי שמתואר להלן, כדי שהגרסה תוצג.

כתוב קובץ מניפסט של גרסה

הגישה הפשוטה ביותר שפועלת על כל הפלטפורמות היא לכתוב קובץ קטן במהלך הבנייה ולקרוא אותו בכל מקום שבו מוצג מספר הגרסה:

cat > release.json <<EOF
{
  "version": "$APP_VERSION",
  "buildNumber": "$APP_BUILD_NUMBER",
  "commitSha": "$APP_COMMIT",
  "releaseName": "${COROID_RELEASE_NAME:-}",
  "environment": "${COROID_ENVIRONMENT:-local}"
}
EOF

עבור אפליקציית רשת או שירות, שרת את הקובץ ב־ /version.json. זה גם נותן ל־Coroid כתובת URL לבדיקה (ראה להלן).

הוראות שימוש

אפליקציות רשת (Next.js, Vite)

הערכים שהדפדפן צריך נקבעים כשהחבילה נבנית:

NEXT_PUBLIC_APP_VERSION="$APP_VERSION" NEXT_PUBLIC_APP_COMMIT="$APP_COMMIT" npm run build
VITE_APP_VERSION="$APP_VERSION" npm run build

הצג process.env.NEXT_PUBLIC_APP_VERSION או import.meta.env.VITE_APP_VERSION בתחתית או במסך אודות, והעתק release.json לתיקיית הציבור לפני הבנייה.

שרתים ו־API

קרא את הערכים בזמן ההפעלה וענה על נקודת קצה של גרסה:

app.get('/version.json', (_request, response) => {
  response.json({
    version: process.env.APP_VERSION,
    buildNumber: process.env.APP_BUILD_NUMBER,
    commitSha: process.env.APP_COMMIT,
  });
});

תמונות Docker

העביר את הערכים כארגומנטים לבנייה וסמן את התמונה, כך שהמכולה הפועלת והרשם ידעו את מספר הגרסה:

ARG APP_VERSION=0.0.0-dev
ARG APP_COMMIT=unknown
ENV APP_VERSION=$APP_VERSION APP_COMMIT=$APP_COMMIT
LABEL org.opencontainers.image.version=$APP_VERSION \
      org.opencontainers.image.revision=$APP_COMMIT
docker build --build-arg APP_VERSION="$APP_VERSION" --build-arg APP_COMMIT="$APP_COMMIT" .

iOS

Xcode קורא את מספר הגרסה שמוצג בחנות האפליקציות מ־ MARKETING_VERSION ואת מספר הבנייה מ־ CURRENT_PROJECT_VERSION:

xcodebuild -scheme App -configuration Release archive \
  MARKETING_VERSION="$APP_VERSION" \
  CURRENT_PROJECT_VERSION="$APP_BUILD_NUMBER"

עם fastlane, השתמש ב־ increment_version_number(version_number: ENV["APP_VERSION"]) ו־ increment_build_number(build_number: ENV["APP_BUILD_NUMBER"]).

אנדרואיד

קרא את הערכים ב app/build.gradle.kts:

android {
    defaultConfig {
        versionName = System.getenv("APP_VERSION") ?: "0.0.0-dev"
        versionCode = (System.getenv("APP_BUILD_NUMBER") ?: "1").toInt()
    }
}

BuildConfig.VERSION_NAME לאחר מכן הוא מציג את הגרסה באפליקציה.

Flutter

flutter build appbundle --build-name="$APP_VERSION" --build-number="$APP_BUILD_NUMBER"
flutter build ipa --build-name="$APP_VERSION" --build-number="$APP_BUILD_NUMBER"

Expo ו-React Native

קרא את הערכים ב app.config.js:

export default {
  expo: {
    version: process.env.APP_VERSION ?? '0.0.0-dev',
    ios: { buildNumber: process.env.APP_BUILD_NUMBER ?? '1' },
    android: { versionCode: Number(process.env.APP_BUILD_NUMBER ?? 1) },
  },
};

דווח על הגרסה שהופצה

אירוע הפצה יכול לציין איזו גרסה ובנייה הופצו. הוסף version וגם buildNumber לאירוע שהפייפליין שלך שולח כבר:

{
  "schemaVersion": 1,
  "eventId": "ci:run-812:production:succeeded",
  "providerRunId": "run-812",
  "projectId": "<project-uuid>",
  "environmentKey": "production",
  "repository": "owner/repository",
  "commitSha": "0123456789abcdef0123456789abcdef01234567",
  "status": "succeeded",
  "occurredAt": "2026-09-28T12:00:00Z",
  "version": "1.4.0",
  "buildNumber": "42"
}

אם הפייפליין של הפרויקט מקצה גרסאות, ההפצה תקבל את הגרסה שדווחה. במקרה אחר, דף ההפצה יציג את הגרסה שדווחה ויציין כאשר היא שונה מההפצה. עבור פרויקט המאוחסן ב-Coroid, הגדר repository לזיהוי הפרויקט. אירועי הפצה והגדרת CI מתאר את שאר האירוע.

בדוק מה רץ

הקצה לכל סביבת עבודה כתובת URL של גרסה, כגון https://app.example.com/version.json. לאחר הצלחת ההפצה, Coroid פותח את הכתובת ומחפש את ה-SHA של הקומיט או את הגרסה. קומיט שדווח חייב להתאים לקומיט של ההפצה; אחרת, הגרסה חייבת להתאים. Coroid ממשיך לבדוק במשך עשר דקות בזמן שהתהליך מסתיים, ולאחר מכן מציג אומת, גרסה שונה או לא ניתן לגשת תחת מה רץ בדף ההפצה.

הכתובת חייבת להשתמש ב-HTTPS ובכתובת ציבורית. Coroid אינו עוקב אחר הפניות וקורא לכל היותר 64 KB.

הפעל את Coroid להגדרה

הגדר חותמת גרסה במסך הגדרות הגרסאות פותח עבודה חדשה עם בקשה שנכתבה עבור הסטק שזוהה בפרויקט. סוכן קורא את הערכים שצוינו לעיל בזמן הבנייה, מציג את הגרסה באפליקציה, כותב release.json, מגדיר את קלטי תהליך העבודה ומתעד אותם ב-README. בצע סקירה של הבקשה, ולאחר מכן המשך כמו בכל עבודה אחרת.