Merging from Upstream Buildpacks

Page last updated:

This topic describes how to maintain your forked buildpack by merging it with the upstream buildpack. This allows you to keep your fork updated with changes from the original buildpack, providing patches, updates, and new features.

The following procedure assumes that you are maintaining a custom buildpack that was forked from a Cloud Foundry system buildpack. However, you can use the same procedure to update a buildpack forked from any upstream buildpack.

To sync your forked buildpack with an upstream Cloud Foundry buildpack:

  1. Navigate to your forked repository on GitHub and click Compare in the upper right to display the Comparing changes page. This page shows the unmerged commits between your forked buildpack and the upstream buildpack.

  2. Inspect the unmerged commits and confirm that you want to merge them all.

  3. In a terminal window, navigate to the forked repository and set the upstream remote as the Cloud Foundry buildpack repository.

    $ cd ~/workspace/ruby-buildpack
    $ git remote add upstream git@github.com:cloudfoundry/ruby-buildpack.git
    

  4. Pull down the remote upstream changes.

    $ git fetch upstream
    

  5. Merge the upstream changes into the intended branch. You may need to resolve merge conflicts. This example shows merging the master branch of the upstream buildpack into the master branch of the forked buildpack.

    $ git checkout master
    $ git merge upstream/master
    

    Note: When merging upstream buildpacks, do not use git rebase. This approach is not sustainable because you confront the same merge conflicts repeatedly.

  6. Run the buildpack test suite to ensure that the upstream changes do not break anything.

    $ BUNDLE_GEMFILE=cf.Gemfile buildpack-build
    

  7. Push the updated branch.

    $ git push
    

Your forked buildpack is now synced with the upstream Cloud Foundry buildpack.

For more information about syncing forks, see the Github topic Syncing a Fork.

Was this helpful?
What can we do to improve?
View the source for this page in GitHub