CI/CD with GitHub Actions

RAPS provides four official GitHub Actions that bring APS automation directly into your CI/CD pipeline. With these actions you can authenticate, upload design files, translate models, and execute full RAPS pipeline files — all triggered by git events like pushes or pull requests.

Workflow Overview

🔧
Setup
Install RAPS + Auth
→
📤
Upload
Files to OSS Bucket
→
🔄
Translate
Model Derivative SVF2

Available Actions

ActionPurpose
raps-actions/setup@v1Install RAPS and configure APS authentication
raps-actions/upload@v1Upload files to OSS buckets
raps-actions/translate@v1Translate models via Model Derivative
raps-actions/pipeline@v1Run a RAPS pipeline file

All actions are hosted at dmytro-yemelianov/raps-actions and pinned to the v1 tag.


Basic Setup

The setup action installs the RAPS CLI and configures APS credentials from repository secrets. Every workflow that interacts with APS should begin with this step.

- uses: dmytro-yemelianov/raps-actions/setup@v1
  with:
    client-id: ${{ secrets.APS_CLIENT_ID }}
    client-secret: ${{ secrets.APS_CLIENT_SECRET }}

Store your APS application credentials in Settings → Secrets and variables → Actions:

  • APS_CLIENT_ID — Your APS application client ID
  • APS_CLIENT_SECRET — Your APS application client secret

Upload + Translate Workflow

A complete workflow that uploads Revit models when they change and translates them to SVF2 for web viewing:

name: Process Models
on:
  push:
    paths: ['models/**']

jobs:
  process:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dmytro-yemelianov/raps-actions/setup@v1
        with:
          client-id: ${{ secrets.APS_CLIENT_ID }}
          client-secret: ${{ secrets.APS_CLIENT_SECRET }}
      - uses: dmytro-yemelianov/raps-actions/upload@v1
        id: upload
        with:
          bucket: my-project-models
          files: 'models/*.rvt'
          create-bucket: 'true'
      - uses: dmytro-yemelianov/raps-actions/translate@v1
        with:
          urn: ${{ steps.upload.outputs.urn }}
          wait: 'true'
          timeout: '30m'

How it works

  1. Trigger — The workflow runs whenever files under models/ are pushed.
  2. Setup — RAPS is installed and authenticated using repository secrets.
  3. Upload — All .rvt files are uploaded to the my-project-models OSS bucket. The bucket is created automatically if it does not exist.
  4. Translate — The uploaded model URN is passed to the translate action, which starts an SVF2 translation and waits up to 30 minutes for completion.

Pipeline Execution

For more complex workflows, use the pipeline action to execute a RAPS pipeline file. Pipeline files define multi-step operations declaratively in YAML.

      - uses: dmytro-yemelianov/raps-actions/pipeline@v1
        with:
          file: raps-pipeline.yaml
          dry-run: 'false'

The dry-run option lets you validate the pipeline without executing any APS operations — useful for pull request checks.

Example: PR Validation

name: Validate Pipeline
on: pull_request

jobs:
  validate:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dmytro-yemelianov/raps-actions/setup@v1
        with:
          client-id: ${{ secrets.APS_CLIENT_ID }}
          client-secret: ${{ secrets.APS_CLIENT_SECRET }}
      - uses: dmytro-yemelianov/raps-actions/pipeline@v1
        with:
          file: raps-pipeline.yaml
          dry-run: 'true'

Troubleshooting

Missing secrets

If the workflow fails with an authentication error, verify that both APS_CLIENT_ID and APS_CLIENT_SECRET are set in your repository secrets. For organization repositories, ensure the secrets are accessible to the workflow (check environment protection rules).

Timeout on large models

Revit models over 500 MB can take significant time to translate. Increase the timeout value in the translate action:

      - uses: dmytro-yemelianov/raps-actions/translate@v1
        with:
          urn: ${{ steps.upload.outputs.urn }}
          wait: 'true'
          timeout: '60m'

Bucket naming rules

OSS bucket keys must be globally unique, 3-128 characters, and contain only lowercase letters, digits, and hyphens. A common pattern is to include your GitHub repository ID:

bucket: my-project-${{ github.repository_id }}

Action version pinning

Always pin to a major version tag (@v1) rather than @main to avoid breaking changes in production workflows.