---
title: Auto-syncing revision history from Github to Launchpad
description: In the design team we keep some projects in Launchpad (as canonical-webmonkeys),
  and some project in Github (as UbuntuDesign), meaning we work in both Bazaar and
  Git. The need to synchronise Github to Launchpad Some of our Github projects need
  to be also stored in Launchpad, as some of our systems only have access to  […]
url: https://canonical.com/blog/auto-syncing-revision-history-from-github-to-launchpad?format=md
---

1. [Blog](https://canonical.com/blog)
2. Article

---

[Robin Winslow](https://canonical.com/blog/author/nottrobin "More about Robin Winslow")

on 28 January 2015

# Auto-syncing revision history from Github to Launchpad

[Design](https://canonical.com/blog/tag/design)

Share on:* [Facebook](https://www.facebook.com/sharer/sharer.php?u=https://www.canonical.com/blog/auto-syncing-revision-history-from-github-to-launchpad "Share on Facebook")
* [Twitter](https://twitter.com/share?text=Auto-syncing%20revision%20history%20from%20Github%20to%20Launchpad&url=https://www.canonical.com/blog/auto-syncing-revision-history-from-github-to-launchpad&hashtags=ubuntu "Share on Twitter")
* [LinkedIn](https://www.linkedin.com/shareArticle?mini=true&url=https://www.canonical.com/blog/auto-syncing-revision-history-from-github-to-launchpad&title=Auto-syncing%20revision%20history%20from%20Github%20to%20Launchpad "Share on LinkedIn")

---

---

## Newsletter signup

Get the latest Canonical news and updates in your inbox.

Work email:

\*I agree to receive information about Canonical's
products and services.

By submitting this form, I confirm that I have read and agree to [Canonical's Privacy Policy](https://canonical.com/legal/data-privacy).

Sign up

In the [design team](http://design.canonical.com/team/) we keep some projects in [Launchpad](https://launchpad.net/) (as [canonical-webmonkeys](https://launchpad.net/~canonical-webmonkeys)), and some project in [Github](https://github.com/) (as [UbuntuDesign](https://github.com/ubuntudesign)), meaning we [work in both Bazaar and Git](https://canonical.com/2015/01/converting-projects-between-git-and-bazaar/).

## The need to synchronise Github to Launchpad

Some of our Github projects need to be also stored in Launchpad, as some of our systems only have access to Launchpad repositories.

Initally we were [converting these projects manually](https://canonical.com/2015/01/converting-projects-between-git-and-bazaar/) at regular intervals, but this quickly became too cumbersome.

## The Bazaar synchroniser

To manage this we created a simple [web-service project to synchronise Git projects to Bazaar](https://github.com/ubuntudesign/bzr-sync). This script basically automates the techniques described in [our previous article](https://canonical.com/2015/01/converting-projects-between-git-and-bazaar/) to pull down the Github repository, convert it to Bazaar and push it up to Launchpad at a specified location.

It’s a simple Python [WSGI](http://en.wikipedia.org/wiki/Web_Server_Gateway_Interface) app which can be run directly or through a server that understands WSGI like [gunicorn](http://gunicorn.org/).

### Setting up the server

Here’s a guide to setting up our `bzr-sync` project on a server somewhere to sync Github to Launchpad.

#### System dependencies

Install necessary system dependencies:

#### User permissions

First off, you’ll have to make sure you set up a user on whichever server is to run this service which has read access to your Github projects and write access to your Launchpad projects:

#### Cloning the project

Then you should clone [the project](https://github.com/ubuntudesign/bzr-sync) and install dependencies. We placed it at `/srv/bzr-sync` but you can put it anywhere:

#### Preparing gunicorn

We should serve this over HTTPS, so our `auth_token` will remain secret. This means you’ll need a SSL certificate keyfile and certfile. You should get one from a certificate authority, but for testing you could just generate a self-signed-certificate.

Put your certificate files somewhere accessible (like `/srv/bzr-sync/certs/`), and then test out running your server with `gunicorn`:

#### Try out the sync server

You should now be able to synchronise a Github repository with Launchpad by pointing your browser at:

`https://{server-domain}/?token={secret-token}&git_url={url-of-github-repository}&bzr_url=lp:{launchpad-branch-location}`

You should be able to see the progress of the conversion as command-line output from the above `gunicorn` command.

#### Add upstart job

Rather than running the server directly, we can setup an upstart job to manage running the process. This way the bzr-sync service will restart if the server restarts.

Here’s an example of an upstart job, which we placed at `/etc/init/bzr-sync.conf`:

You can now start the bzr-sync server as a service:

And output will be logged to `/etc/upstart/bzr-sync.log`.

### Setting up Github projects

Now to use this sync server to automatically synchronise your Github projects to Launchpad, you simply need to add a [post-commit webhook](https://github.com/blog/1778-webhooks-level-up) to ping a URL of the form:

`https://{server-domain}/?token={secret-token}&git_url={url-of-github-repository}&bzr_url=lp:{launchpad-branch-location}`

Creating a webhook

In your repository settings, select “Webhooks and Services”, then “Add webhook”, and enter the following information:

* **Payload URL**: `https://{server-domain}/?token={secret-token}&git_url={url-of-github-repository}&bzr_url=lp:{launchpad-branch-location}`
* **Content type**: “application/json”
* **Secret**: -leave blank-
* Select **Just the push event**
* Tick **Active**

Saving a webhook

**NB**: Notice the `Disable SSL verification` button. By default, the hook will only work if your server has a *valid* certificate. If you are testing with a self-signed one then you’ll need to disable this SSL verification.

Now whenever you commit to your Github repository, Github should ping the URL, and the server should synchronise your repository into Launchpad.

#### Related posts

---

[Kola Ojoodide](https://canonical.com/blog/author/kola-ojoodide)

26 June 2026

### [Challenges designers face in open source (and how to fix them)](https://canonical.com/blog/challenges-designers-face-in-open-source-and-how-to-fix-them)

Company

Ubuntu tech blog

Open source powers up to 90% of modern software, yet many projects lack usability. Canonical’s Design team surveyed 115 cross-functional professionals to uncover the 4 core challenges UI/UX designers face when contributing, and how maintainers can solve them. ...

---

[Nina Rojc](https://canonical.com/blog/author/ninarojc)

16 June 2026

### [Template: Streamlining open source design contributions](https://canonical.com/blog/template-streamlining-open-source-design-contributions)

Design

Article

As designers working at Canonical, we’re always thinking about open source. We believe that encouraging more designers to contribute to open source  benefits everyone, from the project maintainers to the end users themselves.   In the 2025 edition of FOSSBackstage conference, we presented our research findings on  why designers don’t get ...

---

[Miguel Divo](https://canonical.com/blog/author/mdivo)

22 May 2026

### [Decoding design: How design and engineering thrive together in open source](https://canonical.com/blog/decoding-design-how-design-and-engineering-thrive-together-in-open-source)

Design

Article

Open source thrives on engineering-driven processes. Fast feedback loops, terminal tools, Git workflows: they’re the lifeblood of how we build software in the open. But for software to truly excel, we need to create user experiences that empower people to use them. I wanted to bring this conversation into the spotlight as part of Canonica ...
