Ця сторінка ще не перекладена українською. Показано англійську версію. Переглянути англійською

Відстеження версій моделей

Відстеження версій моделей з організованим зберіганням та порівнянням.

Огляд робочого процесу

Історія версій

v-20240101
building.rvt

v-20240115
building.rvt

v-20240201
building.rvt

latest
building.rvt

Структура бакету OSS
bucket/building/v-20240101/
bucket/building/v-20240115/
bucket/building/v-20240201/
bucket/building/latest/
Viewables SVF2
URN-v1
URN-v2
URN-v3
URN-latest
Порівняння версій
Звіт відмінностей
+45-12~78
Версії→Сховище→Трансляція→Порівняння

Підхід CLI

Крок 1: Завантаження версійної моделі

# Створення версійного ключа об'єкта з часовою міткою
VERSION=$(date +%Y%m%d-%H%M%S)
raps object upload my-bucket building.rvt --key "building/v-${VERSION}/building.rvt"

# Також завантаження як "latest" для швидкого доступу
raps object upload my-bucket building.rvt --key "building/latest/building.rvt"

Крок 2: Перелік усіх версій

raps object list my-bucket --prefix "building/v-" --output json | \
  jq -r '.[] | .key' | sort -r

Вивід:

building/v-20240201-110530/building.rvt
building/v-20240115-143022/building.rvt
building/v-20240101-090000/building.rvt

Крок 3: Порівняння версій

# Отримання URN для обох версій
OLD_URN=$(raps object urn my-bucket "building/v-20240101-090000/building.rvt" --output plain)
NEW_URN=$(raps object urn my-bucket "building/v-20240115-143022/building.rvt" --output plain)

# Витяг кількості елементів
OLD_COUNT=$(raps derivative properties "$OLD_URN" --output json | jq 'length')
NEW_COUNT=$(raps derivative properties "$NEW_URN" --output json | jq 'length')

echo "Version comparison:"
echo "  Old version: $OLD_COUNT elements"
echo "  New version: $NEW_COUNT elements"
echo "  Difference: $((NEW_COUNT - OLD_COUNT)) elements"

Крок 4: Детальне порівняння за категоріями

# Порівняння категорій між версіями
echo "Category Comparison:"
echo "===================="

for category in "Walls" "Doors" "Windows" "Rooms"; do
  OLD=$(raps derivative properties "$OLD_URN" --output json | jq "[.[] | select(.category == \"$category\")] | length")
  NEW=$(raps derivative properties "$NEW_URN" --output json | jq "[.[] | select(.category == \"$category\")] | length")
  DIFF=$((NEW - OLD))

  if [ $DIFF -gt 0 ]; then
    echo "$category: $OLD -> $NEW (+$DIFF)"
  elif [ $DIFF -lt 0 ]; then
    echo "$category: $OLD -> $NEW ($DIFF)"
  else
    echo "$category: $OLD (no change)"
  fi
done

CI/CD-конвеєр

# .github/workflows/version-tracking.yml
name: Model Version Tracking

on:
  push:
    paths:
      - 'models/**/*.rvt'

jobs:
  version-and-upload:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 2

      - name: Install RAPS
        run: cargo install raps

      - name: Version and upload models
        env:
          APS_CLIENT_ID: ${{ secrets.APS_CLIENT_ID }}
          APS_CLIENT_SECRET: ${{ secrets.APS_CLIENT_SECRET }}
        run: |
          VERSION=$(date +%Y%m%d-%H%M%S)
          BUCKET="versioned-models"

          for file in $(git diff --name-only HEAD~1 HEAD -- 'models/**/*.rvt'); do
            [ -f "$file" ] || continue

            basename=$(basename "$file" .rvt)

            # Завантаження версійної копії
            raps object upload "$BUCKET" "$file" --key "${basename}/v-${VERSION}/${basename}.rvt"

            # Завантаження як latest
            raps object upload "$BUCKET" "$file" --key "${basename}/latest/${basename}.rvt"

            # Трансляція latest
            URN=$(raps object urn "$BUCKET" "${basename}/latest/${basename}.rvt" --output plain)
            raps translate start "$URN" --format svf2 --wait

            echo "Uploaded ${basename} as version ${VERSION}"
          done

      - name: Generate version comparison
        env:
          APS_CLIENT_ID: ${{ secrets.APS_CLIENT_ID }}
          APS_CLIENT_SECRET: ${{ secrets.APS_CLIENT_SECRET }}
        run: |
          # Отримання двох останніх версій та порівняння
          echo "# Version Comparison Report" > comparison.md
          echo "Generated: $(date)" >> comparison.md
          # Додайте логіку порівняння тут

      - name: Upload artifacts
        uses: actions/upload-artifact@v4
        with:
          name: version-log
          path: comparison.md

Потік конвеєра

Git Push
models/*.rvt changed
Версіонування
Генерація часової мітки
Завантаження v-YYYYMMDD
Завантаження як latest
Обробка
Трансляція latest
Порівняння з попередньою
Звіт
comparison.md

Інтеграція з MCP

Завантаження нової версії

User: "Upload the new version of the building model and compare it with last week's version"
Користувач
AI-асистент
RAPS MCP
Хмара APS
Завантажити та порівняти версії
→
aps_object_upload()
→
Завантажити нову версію
→
aps_translate_start()
→
Транслятувати нову версію
→
aps_object_list()
→
Перелік версій
→
←
Список версій
aps_derivative_properties(old)
→
aps_derivative_properties(new)
→
Обчислення відмінностей
←
Звіт порівняння версій

Відповідь AI:

Нову версію завантажено та транслятовано. Порівняння з v-20240208:

  • Додано: 23 нові стіни, 8 дверей, 12 вікон
  • Видалено: 5 стін, 2 двері
  • Змінено: 45 елементів з оновленими властивостями
  • Загалом елементів: 1 892 (було 1 854)

Перегляд історії версій

User: "Show me all versions of the office building model"

Відповідь AI:

Історія версій office-building.rvt:

ВерсіяДатаЕлементівРозмір
v-2024021515 лют 20241 892156 МБ
v-202402088 лют 20241 854152 МБ
v-202402011 лют 20241 823148 МБ
v-2024012525 січ 20241 756142 МБ

Найкращі практики

Конвенція іменування

bucket/
└── {model-name}/
    ├── v-YYYYMMDD-HHMMSS/
    │   └── {model-name}.rvt
    ├── v-YYYYMMDD-HHMMSS/
    │   └── {model-name}.rvt
    └── latest/
        └── {model-name}.rvt

Політика зберігання

# Зберігати лише останні 10 версій
VERSIONS=$(raps object list my-bucket --prefix "building/v-" --output json | jq -r '.[].key' | sort -r)
COUNT=0

echo "$VERSIONS" | while read key; do
  COUNT=$((COUNT + 1))
  if [ $COUNT -gt 10 ]; then
    echo "Deleting old version: $key"
    raps object delete my-bucket "$key"
  fi
done

Пов’язане