Відстеження версій моделей
Відстеження версій моделей з організованим зберіганням та порівнянням.
Огляд робочого процесу
Історія версій
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-20240215 15 лют 2024 1 892 156 МБ v-20240208 8 лют 2024 1 854 152 МБ v-20240201 1 лют 2024 1 823 148 МБ v-20240125 25 січ 2024 1 756 142 МБ
Найкращі практики
Конвенція іменування
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