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

GitHub Actions

RAPS надає готовий GitHub Action для легкої інтеграції з CI/CD. Автоматизуйте завантаження моделей, трансляції та операції APS безпосередньо у ваших GitHub-воркфлоу.

Швидкий старт

# .github/workflows/aps.yml
name: APS Automation

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

jobs:
  translate:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Setup RAPS
        uses: dmytro-yemelianov/raps-action@v1
        with:
          version: 'latest'

      - name: Test Authentication
        run: raps auth test
        env:
          APS_CLIENT_ID: ${{ secrets.APS_CLIENT_ID }}
          APS_CLIENT_SECRET: ${{ secrets.APS_CLIENT_SECRET }}

Конфігурація Action

Вхідні параметри

ПараметрОписЗа замовчуванням
versionВерсія RAPS для встановленняlatest

Приклад із закріпленням версії

- name: Setup RAPS
  uses: dmytro-yemelianov/raps-action@v1
  with:
    version: '4.14.0'  # Закріпити конкретну версію

Налаштування секретів

  1. Перейдіть у Settings вашого репозиторію -> Secrets and variables -> Actions
  2. Додайте такі секрети:
    • APS_CLIENT_ID — Client ID вашого APS-застосунку
    • APS_CLIENT_SECRET — Client secret вашого APS-застосунку

Приклади воркфлоу

Завантаження та трансляція при push

name: Translate Models

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

jobs:
  translate:
    runs-on: ubuntu-latest
    env:
      APS_CLIENT_ID: ${{ secrets.APS_CLIENT_ID }}
      APS_CLIENT_SECRET: ${{ secrets.APS_CLIENT_SECRET }}
      BUCKET: ci-builds-${{ github.run_id }}

    steps:
      - uses: actions/checkout@v4

      - name: Setup RAPS
        uses: dmytro-yemelianov/raps-action@v1

      - name: Create Bucket
        run: raps bucket create $BUCKET --retention transient

      - name: Upload Models
        run: |
          for file in models/*.rvt models/*.dwg; do
            if [ -f "$file" ]; then
              echo "Uploading $file..."
              raps object upload $BUCKET "$file"
            fi
          done

      - name: Translate Models
        run: |
          for file in models/*.rvt models/*.dwg; do
            if [ -f "$file" ]; then
              filename=$(basename "$file")
              URN=$(raps object urn $BUCKET "$filename" --quiet)
              echo "Translating $filename..."
              raps translate start "$URN" --format svf2 --wait
            fi
          done

      - name: Cleanup
        if: always()
        run: raps bucket delete $BUCKET --yes || true

Матричні збірки для кількох моделей

Паралельна обробка кількох моделей:

name: Parallel Translation

on: [push]

jobs:
  list-models:
    runs-on: ubuntu-latest
    outputs:
      models: ${{ steps.find.outputs.models }}
    steps:
      - uses: actions/checkout@v4
      - id: find
        run: |
          models=$(find models -name "*.rvt" -printf '"%f",' | sed 's/,$//')
          echo "models=[$models]" >> $GITHUB_OUTPUT

  translate:
    needs: list-models
    runs-on: ubuntu-latest
    strategy:
      matrix:
        model: ${{ fromJson(needs.list-models.outputs.models) }}
      fail-fast: false
    env:
      APS_CLIENT_ID: ${{ secrets.APS_CLIENT_ID }}
      APS_CLIENT_SECRET: ${{ secrets.APS_CLIENT_SECRET }}

    steps:
      - uses: actions/checkout@v4

      - name: Setup RAPS
        uses: dmytro-yemelianov/raps-action@v1

      - name: Upload and Translate
        run: |
          BUCKET="matrix-${{ github.run_id }}"
          raps bucket create $BUCKET --retention transient || true
          raps object upload $BUCKET "models/${{ matrix.model }}"
          URN=$(raps object urn $BUCKET "${{ matrix.model }}" --quiet)
          raps translate start "$URN" --format svf2 --wait

Планове обслуговування

Запуск періодичних задач обслуговування APS:

name: Weekly Cleanup

on:
  schedule:
    - cron: '0 2 * * 0'  # Щонеділі о 2:00

jobs:
  cleanup:
    runs-on: ubuntu-latest
    env:
      APS_CLIENT_ID: ${{ secrets.APS_CLIENT_ID }}
      APS_CLIENT_SECRET: ${{ secrets.APS_CLIENT_SECRET }}

    steps:
      - name: Setup RAPS
        uses: dmytro-yemelianov/raps-action@v1

      - name: List Old Buckets
        run: |
          raps bucket list --output json | jq -r '.[] |
            select(.createdDate < (now - 7*24*60*60 | strftime("%Y-%m-%dT%H:%M:%S"))) |
            .bucketKey'

      - name: Delete Transient Buckets
        run: |
          raps bucket list --output json | jq -r '.[] |
            select(.policyKey == "transient") |
            .bucketKey' | while read bucket; do
              echo "Deleting $bucket..."
              raps bucket delete "$bucket" --yes || true
          done

Валідація Pull Request

Перевірка моделей перед злиттям:

name: PR Validation

on:
  pull_request:
    paths:
      - 'models/**'

jobs:
  validate:
    runs-on: ubuntu-latest
    env:
      APS_CLIENT_ID: ${{ secrets.APS_CLIENT_ID }}
      APS_CLIENT_SECRET: ${{ secrets.APS_CLIENT_SECRET }}

    steps:
      - uses: actions/checkout@v4

      - name: Setup RAPS
        uses: dmytro-yemelianov/raps-action@v1

      - name: Validate Models
        id: validate
        run: |
          BUCKET="pr-${{ github.event.pull_request.number }}"
          raps bucket create $BUCKET --retention transient

          failed=0
          for file in $(git diff --name-only origin/main...HEAD -- 'models/*.rvt'); do
            if [ -f "$file" ]; then
              echo "Validating $file..."
              raps object upload $BUCKET "$file"
              URN=$(raps object urn $BUCKET "$(basename $file)" --quiet)

              if ! raps translate start "$URN" --format svf2 --wait; then
                echo "::error::Translation failed for $file"
                failed=1
              fi
            fi
          done

          raps bucket delete $BUCKET --yes || true
          exit $failed

      - name: Comment on PR
        if: failure()
        uses: actions/github-script@v7
        with:
          script: |
            github.rest.issues.createComment({
              issue_number: context.issue.number,
              owner: context.repo.owner,
              repo: context.repo.repo,
              body: '❌ Model translation validation failed. Please check the workflow logs.'
            })

Експорт результатів трансляції

Збереження результатів трансляції як артефактів:

name: Export Derivatives

on:
  workflow_dispatch:
    inputs:
      model:
        description: 'Model filename'
        required: true

jobs:
  export:
    runs-on: ubuntu-latest
    env:
      APS_CLIENT_ID: ${{ secrets.APS_CLIENT_ID }}
      APS_CLIENT_SECRET: ${{ secrets.APS_CLIENT_SECRET }}

    steps:
      - uses: actions/checkout@v4

      - name: Setup RAPS
        uses: dmytro-yemelianov/raps-action@v1

      - name: Translate and Download
        run: |
          BUCKET="export-${{ github.run_id }}"
          MODEL="${{ github.event.inputs.model }}"

          raps bucket create $BUCKET --retention transient
          raps object upload $BUCKET "models/$MODEL"

          URN=$(raps object urn $BUCKET "$MODEL" --quiet)
          raps translate start "$URN" --format obj --wait

          mkdir -p output
          raps translate download "$URN" --output-dir output/

      - name: Upload Artifacts
        uses: actions/upload-artifact@v4
        with:
          name: derivatives-${{ github.event.inputs.model }}
          path: output/
          retention-days: 7

Кросплатформна підтримка

RAPS Action працює на всіх GitHub-hosted раннерах:

jobs:
  test:
    strategy:
      matrix:
        os: [ubuntu-latest, windows-latest, macos-latest]
    runs-on: ${{ matrix.os }}
    steps:
      - name: Setup RAPS
        uses: dmytro-yemelianov/raps-action@v1

      - name: Test
        run: raps auth test
        env:
          APS_CLIENT_ID: ${{ secrets.APS_CLIENT_ID }}
          APS_CLIENT_SECRET: ${{ secrets.APS_CLIENT_SECRET }}

Кешування (опціонально)

Прискорення воркфлоу за допомогою кешування бінарного файлу RAPS:

- name: Cache RAPS
  uses: actions/cache@v4
  with:
    path: ~/.cargo/bin/raps
    key: raps-${{ runner.os }}-4.14.0

- name: Setup RAPS
  uses: dmytro-yemelianov/raps-action@v1
  with:
    version: '4.14.0'

Зневадження воркфлоу

Увімкнення зневаджувального виводу

- name: Debug API Calls
  run: raps bucket list --debug
  env:
    APS_CLIENT_ID: ${{ secrets.APS_CLIENT_ID }}
    APS_CLIENT_SECRET: ${{ secrets.APS_CLIENT_SECRET }}

Перевірка автентифікації

- name: Check Auth
  run: |
    raps auth test
    raps auth status
  env:
    APS_CLIENT_ID: ${{ secrets.APS_CLIENT_ID }}
    APS_CLIENT_SECRET: ${{ secrets.APS_CLIENT_SECRET }}

Найкращі практики безпеки

  1. Використовуйте секрети — Ніколи не записуйте облікові дані безпосередньо у воркфлоу
  2. Обмежуйте дозволи — Використовуйте мінімальні scope для вашого APS-застосунку
  3. Перевіряйте Actions — Закріплюйте версії action за допомогою SHA-хешів для безпеки
  4. Очищуйте ресурси — Видаляйте тимчасові бакети після використання
# Закріпити за SHA для безпеки
- uses: dmytro-yemelianov/raps-action@abc123def456...

# Завжди очищувати
- name: Cleanup
  if: always()
  run: raps bucket delete $BUCKET --yes || true

Пов’язана документація