GitHub Sync

Last modified on October 20, 2021

You can integrate SwaggerHub with GitHub.com and GitHub Enterprise. 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

  • In SwaggerHub SaaS, GitHub.com integration is available to all users. GitHub Enterprise integration is available for organizations on the Team and Enterprise plans.

  • If you use SwaggerHub SaaS and GitHub Enterprise, your GitHub Enterprise server must be accessible from the public Internet and allow connections from our IP addresses.

  • GitHub Sync supports OpenAPI 2.0 and OpenAPI 3.0. 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.

  1. Open the API page in SwaggerHub.

  2. If the API has several versions, select the version whose code you want to store on GitHub.

    Selecting an API version
  3. Click the API name, switch to the Integrations tab, and click Add New Integrations:

    Add New Integration menu command
  4. Select GitHub Sync or GitHub Enterprise Sync depending on which you are integrating with.

  5. In the subsequent dialog, specify the integration parameters:

    • Name – Required. A display name for the integration.

    • For GitHub.com:

      • 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:

        Getting GitHub token

        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.

        The access token must have the public_repo scope if the target GitHub repository is public, or the repo scope if it is private.

    • For GitHub Enterprise:

      • GitHub Enterprise Host –The URL of your GitHub Enterprise server, for example, https://ghe.mycompany.com. Make sure to include http:// or https:// at the beginning.

      • GitHub Enterprise Token – A personal access token to authenticate with GitHub. You can create this token on the https://<github-host>/settings/tokens page. The token must have the public_repo scope if the target repository is public, or the repo scope if it is private. For detailed instructions, see Creating a personal access token for the command line.

    • 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.

      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.

      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.

  6. 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.

Pushing to source control from SwaggerHub

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.

See Also

Generating a Server Stub
Generating a Client SDK
Downloading OpenAPI Definitions From SwaggerHub
SwaggerHub Integrations

Highlight search results