Although adding and configuring apps in Runway can primarily be accomplished via the Runway web app, it's also now possible for teams to accomplish this programmatically through Runway’s public API using YAML configuration files.
Fetching an existing app's configuration file
You can access the configuration file of any of your existing apps in Runway by using the GET /app/{appId}/config endpoint in Runway's public API. The resulting YAML file will contain your app's current configuration details, which can be a good starting point if you want to programmatically create new apps in Runway with similar configurations.
Adding an app using a YAML configuration file
You can add an app to your Runway organization programmatically by calling the POST /app/config endpoint in Runway's public API with a .yml configuration file in the request body.
The configuration file must include the required properties for successful app creation. See below for a sample configuration file in YAML syntax.
Required properties for app creation are:
name
platform
Properties that are not required will either be left empty or be populated with default values by Runway if not specified.
# App example# Describes an App within Runway---name:Apolloplatform:iosappGroup:'Apollo'icon:'https://uploads-ssl.webflow.com/5edfa38a1bd219267bdf69b7/5fadc479febc556d17ade92e_nasa-org.png'integrations:'GitHub Apollo':# The ID or alias of an integrationtype:'github-vcs'# For available integration types, see https://api-docs.runway.team/#tag/IntegrationTypeprovider:'Apple GH'# Matches on either ID or aliasdata:repoName:'apollo-ios'# The payload used to configure the integration. Dependent on integration type. For examples, compare to a payload from the GET app config endpoint.'App Store Apollo':type:'apple'provider:'Apple App Store'data:bundleId:'com.nasa.apollo''Build system Apollo':type:'github-ci'provider:'github:111222333'# example of a provider IDdata:workflowId:'demo-ios/deploy'devWorkflowId:'demo-ios/build''Testrail Apollo':type:'testrail'provider:'Testrail'data:testRunNameKeywords:'iOS'project:'Demo Testrail iOS''JIRA Apollo':type:'jira'provider:'JIRA'data:projects: ['Demo','Demo-Core']additionalDoneStatuses: ['Done','Deployed','Ready to Release']'Beta testing Apollo':type:'apple-beta'provider:'Apple App Store'data:bundleId:'com.nasa.apollo''Slack Apollo':type:'slack'provider:'Slack'data:primaryChannelIds: ['#apollo-releases']'Sentry Apollo':type:'sentry'provider:'Sentry'data:orgId:'NASA'projectId:'Apollo iOS'prodEnvironmentIdentifier:'production'betaEnvironmentIdentifier:'beta''Amplitude Apollo':type:'amplitude'provider:'amplitude'data:selectedEventsAndParams: - eventName:'add to cart' - eventName:'view checkout'paramName:'amount' - eventName:'view checkout'paramName:'itemCount''Optimizely Apollo':provider:'Optimizely'data:projectId:'Apollo'environmentId:'Production'versionAttributeName:'app_version''PagerDuty Apollo':type:'pagerduty-scheduling'provider:'PagerDuty'data:scheduleId:'Apollo Release Rotation''Crowdin Apollo':type:'crowdin'provider:'Crowdin'data:projectId:'Apollo'metadataProjectId:'Apollo Metadata'buildDistro:buckets:'Release Candidates':# bucket nametype:'rc'# For available bucket types, see https://api-docs.runway.team/#tag/BucketTypeorgWideAccessEnabled:truenotificationsEnabled:truemembers:'Release pilot':'tester''PMs':'tester''EMs':'admin'rules: - branch:'release-{version}'type:'Branch'# can be 'Branch' or 'PR'workflow:'build-rc'fileFilterPatterns: - '{*}.ipa''Development':type:'dev'notificationsEnabled:truemembers:# group or user to permission level'Release pilot':'tester'# permission level can be 'admin', 'uploader', or 'tester''PMs':'tester''QA':'tester''EMs':'admin'rules: - baseBranch:'main'type:'PR'workflow:'demo-ios/build'fileFilterPatterns: - '{*}.ipa'appSettings:defaultReleaseType:'minor'# can be any non-hotfix type: https://api-docs.runway.team/#tag/ReleaseTypeassumeHotfixesArePointReleases:falseversionFiles: - 'appollo.xcodeproj/project.pbxproj' - 'appollo/settings.xcconfig'localizationDirectories: - 'appollo/resources'requireFixApprovals:falseenableFixStatusChecks:false# can only be true if requireFixApprovals is truehideNotRequiredReleaseStepsInTimeline:falseappUsers: - aearhart@demo.com - ssullenberger@demo.com - narmstrong@demo.com - mjemison@demo.combranchSettings:'GitHub Apollo':# must match a VCS integration specified in the integrations sectionreleaseBranchPatterns:all:pattern:'release-{version}'hotfix:pattern:'hotfix-{version}'workingBranch:maintagSettings:tagSettingsMain:pattern:'{version}'featureAffiliations:FA Fix Versions:integration:'Jira Apollo'# must match an issue tracking integration ID or aliastype:'fixVersion'pattern:'{version}'appStoreReleaseSettings:releaseMethod:manualphasedReleaseEnabled:truestepGroups:# all steps for the app, arranged in groups - steps: - name:Kickoffarchetype:'kickoff'# type of the step. For valid types, see https://api-docs.runway.team/#tag/ReleaseStepTypereleaseTypes:# the release types for this step. Can be 'standard', 'hotfix', or 'rollback'standard:required:true# whether this step is required for the given release typehotfix:required:true - name:'Feature readiness'archetype:'featureReadiness'releaseTypes:standard:required:truehotfix:required:false - name:Translationsarchetype:'translations'releaseTypes:standard:required:truehotfix:required:false - name:'Rollback build'archetype:'rollbackBuild'# The special 'rollbackBuild' step is only valid for the 'rollback' release typereleaseTypes:rollback:required:true - steps: - name:Release candidatearchetype:'releaseCandidate'releaseTypes:standard:required:truehotfix:required:true - name:Regression testingarchetype:'regressionTesting'releaseTypes:standard:required:truehotfix:required:false - name:Beta testingarchetype:'betaTesting'releaseTypes:standard:required:truehotfix:required:false - steps: - name:Screenshotsarchetype:'screenshots'releaseTypes:standard:required:truehotfix:required:falserollback:required:true - name:Metadataarchetype:'metadata'releaseTypes:standard:required:truehotfix:required:falserollback:required:true - steps: - name:Approvalsarchetype:'approvals'releaseTypes:standard:required:truehotfix:required:truerollback:required:true - steps: - name:Submitarchetype:'submission'releaseTypes:standard:required:truehotfix:required:truerollback:required:true - name:Reviewarchetype:'storeReview'releaseTypes:standard:required:truehotfix:required:truerollback:required:true - name:Releasearchetype:'takeoff'releaseTypes:standard:required:truehotfix:required:truerollback:required:true
Not all properties of your app in Runway are currently configurable programatically. If you wish to configure a property that's not supported via programatic configuration, you must use the web UI.
Integrations can only be configured programmatically if they're using an existing integration provider. If you need to authenticate with a new integration provider, you must do so using the Runway web UI.