GitHub Sync
This guide describes how to integrate with GitHub.com. If you use self-hosted GitHub Enterprise Server, see GitHub Enterprise Server Sync.
You can integrate SwaggerHub with GitHub.com. This allows you to synchronize your API definition, auto-generated server code, or client SDK with an existing GitHub repository. You can fully control which files will be added, updated, or ignored in the target repository.
Video tutorial
Considerations
GitHub Sync supports OpenAPI 2.0, OpenAPI 3.0 and AsyncAPI 2.x. If you use SwaggerHub On-Premise, note that syncing OpenAPI 3.0 definitions requires v. 1.19.1 or later.
The target repository must not be empty. It must contain, for example, a README or .gitignore file.
The GitHub Sync configuration is bound to a specific version of the API, so you can synchronize the code for different versions separately.
Configure GitHub Sync
GitHub Sync can be configured by the API owner or collaborators with the Editor role.
Open the API page in SwaggerHub.
If the API has several versions, select the version whose code you want to store on GitHub.
Click the API name, switch to the Integrations tab, and click Add New Integrations:
Select GitHub Sync.
In the subsequent dialog, specify the integration parameters:
Name – Required. A display name for the integration.
GitHub Token – Required. The GitHub access token that SwaggerHub will use to access the target GitHub repository.
The easiest way to get the token is to click Connect to GitHub and allow SwaggerHub to retrieve information from your GitHub account:
Click the image to enlarge it.
You can also create a token on the GitHub web site yourself: https://github.com/settings/tokens. For detailed instructions, see Creating an access token for command-line use in GitHub documentation.
Important
The access token must have the public_repo scope if the target GitHub repository is public, or the repo scope if it is private.
Click Next in the GitHub Token edit box to continue. SwaggerHub will validate the token and then display other parameters.
Repository Owner – Select the GitHub user or organization that owns the desired repository. The list displays only those accounts your GitHub token has access to.
Repository – Select the repository to push the code to. This repository must not be empty. It must contain at least one commit, for example, a README or .gitignore file.
Sync Method – Select the synchronization type:
Sync method
Description
Basic Sync
SwaggerHub will manage all files in the specified branch and folder: new files will be added, existing files will be overwritten, and unused files will be deleted.
Note: In SwaggerHub On-Premise versions up to 1.23.1, Basic Sync always pushes to the branch named SWAGGERHUB. To use a different branch, select Advanced Sync or upgrade your SwaggerHub On-Premise instance to the latest version.
Advanced Sync
Similar to Basic Sync, but you can specify which files will be overwritten or ignored. Use this method if the output folder contains existing files that you want to keep.
Branch – Required. The repository branch to push the code to. If this branch does not exist, it will be created based on the repository’s default branch.
Generated API Code – Required. Select what you want to generate: server code, client SDK, API documentation, or the OpenAPI definition itself as YAML or JSON. See here for a list of supported languages and frameworks.
Tip
To customize code generation options, such as package names, use the Export > Codegen Options menu in the SwaggerHub editor. See Code Generation Options for details.
Output Folder – The output folder for the generated code, relative to the repository root. For example, server or sdk/android. If this folder does not exist, it will be created. If the output folder is not specified, SwaggerHub will create files and folders in the repository root.
Important
Use forward slashes (
/
) as path separators:folder/subfolder1/subfolder2 – Correct
folder\subfolder1\subfolder2 – Incorrect
Paths – Available only if you selected Advanced Sync. Use these options to control which files and folders will be created, updated, deleted, or ignored during synchronization. All the paths are relative to the Output Folder. You need to specify either Partially Managed Paths or Fully Managed Paths.
Partially Managed Paths – These files and folders will be created if they do not exist, but the existing files and folders will not be modified. The wildcard
*
indicates all files and folders in the Output Folder.Fully Managed Paths – These files and folders will be completely managed by the integration: new files will be added, the existing files will be overwritten, and the files that are no longer used will be deleted. You can use
*
as a wildcard for all files.Ignored Paths – These files and folders will remain as is and will not be changed in any way.
Important
Use forward slashes (
/
) as path separators, for example, sdk/android/README.md.Output file – Only used if Generated API Code is JSON or YAML, that is, the OpenAPI definition itself. Specifies the name of the .json or .yaml file to create, for example, swagger.yaml or petstore.json. This file will be created in the Output Folder.
Enabled – Select or clear this check box to enable or disable the integration.
Click Create, then Done.
Push to GitHub
When you are ready to push your changes, click Sync on the editor toolbar, enter a commit message and click Push. SwaggerHub will generate the specified target (server code, client code, API documentation or an OpenAPI JSON or YAML file) and push it to the configured repository and branch.
Commits are made on behalf of the user associated with the access token. If synchronization fails (for example, due to a permission problem), you will see an integration error at the top of the SwaggerHub Editor.
Generate multiple targets
You can add multiple GitHub Sync integrations for different targets. For example, one for the Node.js server, and another for the Android client SDK. You can push all the targets to the same repository, but be sure to use different Output Folders to avoid conflicts.
Disable GitHub Sync
If you no longer want to sync with GitHub, you can disable or delete the GitHub Sync integration. The existing files will remain in your GitHub repository, but SwaggerHub will not update them anymore.
Troubleshooting
If the integration fails with an error, check the access token expiration date. If it is about to expire, generate a new token and update the token in the integration settings. If the token has expired, generate a new one and create the integration anew.