<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Cool new stuff on Launchpad Blog</title>
    <link>https://blog.launchpad.net/categories/cool-new-stuff/</link>
    <description>News and updates from the Launchpad team</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Tue, 08 Sep 2026 10:32:27 +0000</lastBuildDate>
    <atom:link href="https://blog.launchpad.net/feed/categories/cool-new-stuff/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>Review merge proposals in VS Code</title>
      <link>https://blog.launchpad.net/general/review-merge-proposals-in-vs-code/</link>
      <pubDate>Tue, 08 Sep 2026 10:32:27 +0000</pubDate>
      <dc:creator>Adam Steciuk</dc:creator>
      <guid isPermaLink="false">https://blog.launchpad.net/?p=4590</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://marketplace.visualstudio.com/items?itemName=Canonical.launchpad-merge-proposals&#34;&gt;Launchpad Merge Proposals&lt;/a&gt;, a VS Code extension for reviewing Launchpad merge proposals, is now available on the Visual Studio Marketplace as a preview release.&lt;/p&gt;
&lt;p&gt;The extension brings the review into the editor. It finds the merge proposals for the branch you have checked out, renders their diffs in VS Code’s diff editor, and lets you comment and vote without opening a browser.&lt;/p&gt;
&lt;h2 id=&#34;what-the-extension-does&#34;&gt;What the extension does&lt;/h2&gt;
&lt;h3 id=&#34;finds-the-merge-proposals-for-the-branch-you-are-on&#34;&gt;Finds the merge proposals for the branch you are on&lt;/h3&gt;
&lt;p&gt;It reads the upstream of the checked-out branch and lists merge proposals in both directions: &lt;strong&gt;outgoing&lt;/strong&gt;, where your branch is the source, and &lt;strong&gt;incoming&lt;/strong&gt;, where it is the target. Proposals can be filtered by status.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.launchpad.net/images/external/assets.ubuntu.com/v1/1e88331d-merge_proposals.gif&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;renders-diffs-in-the-vs-code-editor&#34;&gt;Renders diffs in the VS Code editor&lt;/h3&gt;
&lt;p&gt;Open &lt;strong&gt;Files Changed&lt;/strong&gt; and the proposal opens in VS Code’s side-by-side diff editor, with syntax highlighting and the surrounding file for context. Files are decorated to show where comments already exist.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.launchpad.net/images/external/assets.ubuntu.com/v1/f156a3ba-files_changed.gif&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;puts-comments-next-to-the-code&#34;&gt;Puts comments next to the code&lt;/h3&gt;
&lt;p&gt;Published inline comments appear beside the lines they refer to, and new ones are drafted in the same place, with full markdown support. Drafts are stored on Launchpad, so a review started in the editor can be finished in the browser, or the other way around.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.launchpad.net/images/external/assets.ubuntu.com/v1/90e0c85b-inline_comments.gif&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;submits-the-whole-review-at-once&#34;&gt;Submits the whole review at once&lt;/h3&gt;
&lt;p&gt;Pick a vote, write the summary comment, and submit. Every inline draft is published alongside it.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.launchpad.net/images/external/assets.ubuntu.com/v1/1925d975-submit_review.gif&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;getting-started&#34;&gt;Getting started&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Install &lt;a href=&#34;https://marketplace.visualstudio.com/items?itemName=Canonical.launchpad-merge-proposals&#34;&gt;Launchpad Merge Proposals&lt;/a&gt; in VS Code 1.105 or newer.&lt;/li&gt;
&lt;li&gt;Open a project backed by a Git repository on Launchpad, and check out a branch tracking a remote one.&lt;/li&gt;
&lt;li&gt;Open the &lt;strong&gt;Launchpad Merge Proposals&lt;/strong&gt; view from the &lt;strong&gt;Activity Bar&lt;/strong&gt; and sign in when prompted.&lt;/li&gt;
&lt;li&gt;Select a merge proposal, then pick a preview diff to see the changes and comments.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Sign-in uses Launchpad’s OAuth flow, and the token is stored in VS Code’s secret storage. Launchpad asks what level of access to grant, and the level you pick determines what the extension can do. Reading diffs and published inline comments needs at least read access. Drafting inline comments and submitting reviews needs change access.&lt;/p&gt;
&lt;h2 id=&#34;current-status-of-the-project&#34;&gt;Current status of the project&lt;/h2&gt;
&lt;p&gt;This is a &lt;strong&gt;preview release&lt;/strong&gt;. The core review flow works and we use it daily, but some capabilities are still experimental while we work out how they should behave. The &lt;a href=&#34;https://marketplace.visualstudio.com/items?itemName=Canonical.launchpad-merge-proposals&#34;&gt;README&lt;/a&gt; covers the current state, including a &lt;em&gt;known issues&lt;/em&gt; section that we update with each release.&lt;/p&gt;
&lt;h2 id=&#34;feedback&#34;&gt;Feedback&lt;/h2&gt;
&lt;p&gt;We want to hear what works, what breaks, and what is missing. Please &lt;a href=&#34;https://bugs.launchpad.net/vscode-launchpad/+filebug&#34;&gt;report bugs&lt;/a&gt; and file feature requests on the &lt;a href=&#34;https://launchpad.net/vscode-launchpad&#34;&gt;project’s Launchpad page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The extension is free software under GPL-3.0, and its &lt;a href=&#34;https://git.launchpad.net/vscode-launchpad&#34;&gt;source&lt;/a&gt; is hosted on Launchpad. We welcome contributions via merge proposals. You can even review them using the extension itself!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Merge Launchpad merge proposals with one click</title>
      <link>https://blog.launchpad.net/general/merge-launchpad-merge-proposals-with-one-click/</link>
      <pubDate>Fri, 04 Sep 2026 09:52:42 +0000</pubDate>
      <dc:creator>Goulin Khoge</dc:creator>
      <guid isPermaLink="false">https://blog.launchpad.net/?p=4582</guid>
      <description>&lt;p&gt;Maintainers can now merge changes (merge proposals) directly from the Launchpad UI.&lt;/p&gt;
&lt;p&gt;The new &lt;strong&gt;Request merge&lt;/strong&gt; button is available to anyone with permission to push to the target branch. Launchpad enables it if the merge proposal has:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;An active status and an up-to-date diff&lt;/li&gt;
&lt;li&gt;No conflicts with the target branch&lt;/li&gt;
&lt;li&gt;Approval from the target repository owner, a member of its owner team, or designated review team&lt;/li&gt;
&lt;li&gt;Successfully completed any configured CI checks&lt;/li&gt;
&lt;li&gt;No unmerged prerequisite branches&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When you click on &lt;strong&gt;Request merge&lt;/strong&gt;, Launchpad queues the merge, tracks its progress, and lets you know when the change has been merged.&lt;/p&gt;
&lt;p&gt;The feature is available for all Launchpad-hosted Git repositories, with no additional setup or integration required.&lt;/p&gt;
&lt;p&gt;Happy merging!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Introducing PPA Dependency Pinning</title>
      <link>https://blog.launchpad.net/general/introducing-ppa-dependency-pinning/</link>
      <pubDate>Thu, 03 Sep 2026 07:07:37 +0000</pubDate>
      <dc:creator>Riad El Terek</dc:creator>
      <guid isPermaLink="false">https://blog.launchpad.net/?p=4576</guid>
      <description>&lt;p&gt;PPA maintainers now have more control over where their build dependencies come from. With PPA dependency pinning, you can assign priorities to the PPAs your builds depend on, helping ensure that your packages build against the software you intend to use.&lt;/p&gt;
&lt;p&gt;Whether you are testing a patch, maintaining a customised library, or preparing a new release, this feature makes it easier to manage builds that rely on packages outside the standard Ubuntu archive.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; This setting applies only to package builds performed by Launchpad and can only be set by the PPA maintainer. It does NOT change package selection on users’ computers, nor affect local builds.&lt;/p&gt;
&lt;h2 id=&#34;why-dependency-priorities-matter&#34;&gt;&lt;strong&gt;Why dependency priorities matter&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Personal Package Archives (PPAs) let developers build and distribute packages through Launchpad. When packages in one PPA require packages from another PPA in order to be built, the maintainer can configure the other PPA as a build dependency.&lt;/p&gt;
&lt;p&gt;However, making a package available does not necessarily mean it will be selected. When multiple repositories provide the same package at the same priority, Ubuntu’s package manager generally prefers the newer version. &lt;a href=&#34;https://manpages.ubuntu.com/manpages/focal/man5/apt_preferences.5.html&#34;&gt;APT’s documentation&lt;/a&gt; explains these selection rules.&lt;/p&gt;
&lt;p&gt;Imagine that your application needs a library containing a patch you maintain in a separate PPA. Your builds will only use that library successfully until an Ubuntu update introduces a package with a higher version number. Subsequent builds will select the Ubuntu version instead, even though it does not contain your patch.&lt;/p&gt;
&lt;p&gt;PPA dependency pinning gives you a way to express which source your builds should always prefer by allowing you to assign a priority to each PPA dependency. Launchpad applies those priorities when preparing the build environment.&lt;/p&gt;
&lt;p&gt;For the patched-library example, an appropriate priority lets you keep using the library from your chosen PPA, even when Ubuntu publishes a newer version. This reduces the need to adjust package version numbers to influence which source is selected.&lt;/p&gt;
&lt;h2 id=&#34;who-is-this-for&#34;&gt;&lt;strong&gt;Who is this for?&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;The feature is useful for teams that:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Test fixes or features that are not yet available in Ubuntu.&lt;/li&gt;
&lt;li&gt;Maintain customised dependencies for their applications.&lt;/li&gt;
&lt;li&gt;Build related projects across several PPAs.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;configure-priorities-in-launchpad&#34;&gt;&lt;strong&gt;Configure priorities in Launchpad&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;When Launchpad prepares a build, APT resolves versioning conflicts by selecting the package repository with the highest priority. Some values already have conventional meanings: &lt;strong&gt;500&lt;/strong&gt; is the default for available packages, and &lt;strong&gt;990&lt;/strong&gt; is generally used for packages from the configured target release. Values above &lt;strong&gt;1000&lt;/strong&gt; are especially strong and may cause APT to select a package even when it is an older version. See &lt;a href=&#34;https://manpages.ubuntu.com/manpages/focal/man5/apt_preferences.5.html#APT&#34;&gt;APT’s documentation&lt;/a&gt; for more information.&lt;/p&gt;
&lt;p&gt;To get started, open your PPA’s &lt;strong&gt;Edit PPA dependencies&lt;/strong&gt; page and adjust the &lt;strong&gt;Priority&lt;/strong&gt; field beside the relevant dependency. Save your changes to apply the setting to subsequent builds.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.launchpad.net/images/posts/2026/09/64c9/image.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;For teams that manage their PPA configuration through scripts or automation, priorities can also be configured through the &lt;a href=&#34;https://api.launchpad.net/devel.html#archive_dependency&#34;&gt;Launchpad API&lt;/a&gt;. This can be done through &lt;a href=&#34;https://ubuntu.com/docs/launchpad/developer/how-to/operate-launchpad/use-lp-shell/&#34;&gt;lp-shell&lt;/a&gt; as follows:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# Run: lp-shell production devel

In [1]: target_ppa = lp.people[&amp;#34;your-launchpad-id&amp;#34;].getPPAByName(
    name=&amp;#34;your-ppa-name&amp;#34;
)
In [2]: dependency_ppa = lp.people[&amp;#34;dependency-owner&amp;#34;].getPPAByName(
    name=&amp;#34;dependency-ppa-name&amp;#34;
)

In [3]: target_ppa.addArchiveDependency(
    dependency=dependency_ppa,
    pocket=&amp;#34;Release&amp;#34;,
    component=&amp;#34;main&amp;#34;,
    pin_priority=1001,
)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Existing dependencies retain the default priority of &lt;strong&gt;500&lt;/strong&gt;, so there is no configuration change required if the current behaviour meets your needs.&lt;/p&gt;
&lt;p&gt;Priorities apply to packages supplied by the dependency PPA, so choose them with the contents of that PPA in mind. They express a source preference; they do not freeze a particular package version or guarantee identical builds over time.&lt;/p&gt;
&lt;p&gt;Additionally, PPA dependency pinning only affects the build environment on Launchpad. It does not change package preferences on the computers of people who install software from your PPA.&lt;/p&gt;
&lt;h2 id=&#34;references&#34;&gt;&lt;strong&gt;References&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;For more information, see:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://manpages.ubuntu.com/manpages/focal/man5/apt_preferences.5.html&#34;&gt;apt_preferences(5)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://ubuntu.com/docs/launchpad/user/how-to/packaging/create-ppa/&#34;&gt;Launchpad manual’s create a PPA page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://api.launchpad.net/devel.html#archive_dependency&#34;&gt;Launchpad API Archive Dependency page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://ubuntu.com/docs/launchpad/developer/how-to/operate-launchpad/use-lp-shell/&#34;&gt;lp-shell documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>Make fetch service opt-in</title>
      <link>https://blog.launchpad.net/general/make-fetch-service-opt-in/</link>
      <pubDate>Tue, 28 Oct 2025 11:31:12 +0000</pubDate>
      <dc:creator>Vaishnavi Asawale</dc:creator>
      <guid isPermaLink="false">https://blog.launchpad.net/?p=4492</guid>
      <description>&lt;p&gt;Launchpad Builders do not have direct access to the Internet. To reach external resources, they must acquire an authentication token that allows access to a restricted set of URLs via a proxy. This can either be a custom authenticated builder proxy or the fetch service.&lt;/p&gt;
&lt;p&gt;The fetch service is a custom sophisticated context-aware forward proxy. Whereas the builder proxy allows requests to allowlisted URLs, the fetch service also keeps track of requests and dependencies for a build.&lt;/p&gt;
&lt;p&gt;Users can now opt-in to use the fetch service while building snaps, charms, rocks and sourcecraft packages. You can read more about the fetch service &lt;a href=&#34;https://documentation.ubuntu.com/launchpad/developer/reference/services/fetch-service/&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why is the fetch service important?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;To achieve traceability and reproducibility, artifact dependencies retrieved during a build must be identified. The fetch service mediates network access between the build host and the outside world, examining the request protocol, creating a manifest of the downloaded artifacts, and keeping a copy of the artifacts for archival and metadata extraction for each package build.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How to use the fetch service?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;To be able to use the fetch service, users must opt-in. For snaps, charms, rocks and sourcecraft packages, the &lt;code&gt;use_fetch_service&lt;/code&gt; flag should be set to &lt;code&gt;true&lt;/code&gt; in the API. For snaps and charms, this setting is also available in the &lt;em&gt;Edit Recipe&lt;/em&gt; UI page.&lt;/p&gt;
&lt;p&gt;The fetch service can be run in two modes, &amp;ldquo;strict&amp;rdquo; and &amp;ldquo;permissive&amp;rdquo;, where it defaults to the former. Both modes only allow certain resources and formats, as defined by inspectors which are responsible for inspecting the requests and the various downloads that are made during the build, ensuring that the requests are permitted.&lt;/p&gt;
&lt;p&gt;The &amp;ldquo;strict&amp;rdquo; mode errors out if any restrictions are violated. The &amp;ldquo;permissive&amp;rdquo; mode works similarly, but only logs a warning when encountering any violations. The mode can be configured using the &lt;code&gt;fetch_service_policy&lt;/code&gt; option via the API. For snaps and charms, the mode can also be selected from a dropdown on the &lt;em&gt;Edit Recipe&lt;/em&gt; UI page.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;When to use the fetch service?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Use the fetch service when you need to keep track of requests and dependencies for a build, e.g., when you need to verify that the artifacts belong to secure, trusted sources.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Beta test: Git recipes</title>
      <link>https://blog.launchpad.net/cool-new-stuff/beta-test-git-recipes/</link>
      <pubDate>Mon, 25 Jan 2016 11:33:41 +0000</pubDate>
      <dc:creator>Colin Watson</dc:creator>
      <guid isPermaLink="false">https://blog.launchpad.net/?p=4223</guid>
      <description>&lt;p&gt;If you are a member of &lt;a href=&#34;https://launchpad.net/~launchpad-beta-testers&#34;&gt;Launchpad&amp;rsquo;s beta testers team&lt;/a&gt;, you can now try out Git-based recipes.  These work very similarly to the Bazaar-based recipes that Launchpad has supported for a long time, with a few minor changes to handle differences in the underlying version control system: the main thing you&amp;rsquo;ll probably notice is that you almost always need to explicitly specify a branch name.  The &lt;a href=&#34;https://help.launchpad.net/Packaging/SourceBuilds&#34;&gt;recipes documentation&lt;/a&gt; explains what to do; if you&amp;rsquo;re already familiar with how recipes work for Bazaar, then you should probably skip straight to the &lt;a href=&#34;https://help.launchpad.net/Packaging/SourceBuilds/Recipes&#34;&gt;recipes guide&lt;/a&gt; to look over the differences for Git.&lt;/p&gt;
&lt;p&gt;Please try this out and &lt;a href=&#34;https://bugs.launchpad.net/launchpad/+filebug&#34;&gt;report any bugs you find&lt;/a&gt;.  If all goes well, we&amp;rsquo;ll open this up to all users in a couple of weeks.&lt;/p&gt;
&lt;p&gt;Update: as of 2016-03-15, this feature is enabled for all Launchpad users.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Beta test: webhooks</title>
      <link>https://blog.launchpad.net/general/beta-test-webhooks/</link>
      <pubDate>Mon, 09 Nov 2015 15:41:34 +0000</pubDate>
      <dc:creator>Colin Watson</dc:creator>
      <guid isPermaLink="false">https://blog.launchpad.net/?p=4208</guid>
      <description>&lt;p&gt;If you are a member of &lt;a href=&#34;https://launchpad.net/~launchpad-beta-testers&#34;&gt;Launchpad&amp;rsquo;s beta testers team&lt;/a&gt;, you can now try out webhooks for Bazaar branches and Git repositories. These can be used to set up integration with external sites for various purposes, such as running CI jobs or publishing documentation. We expect to open this up to all Launchpad users soon, but in the meantime please do file a bug against Launchpad itself if you encounter any problems.&lt;/p&gt;
&lt;p&gt;See our &lt;a href=&#34;https://help.launchpad.net/API/Webhooks&#34;&gt;webhooks documentation&lt;/a&gt; for more details.&lt;/p&gt;
&lt;p&gt;Update: as of 2015-11-20, this feature is enabled for all Launchpad users.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Launchpad news, April-June 2015</title>
      <link>https://blog.launchpad.net/general/launchpad-news-april-june-2015/</link>
      <pubDate>Thu, 09 Jul 2015 01:07:23 +0000</pubDate>
      <dc:creator>Colin Watson</dc:creator>
      <guid isPermaLink="false">https://blog.launchpad.net/?p=4173</guid>
      <description>&lt;p&gt;It&amp;rsquo;s been a while since we posted much regularly on this team blog, not least because for a while Launchpad was running more or less in maintenance mode.  That&amp;rsquo;s no longer the case and we&amp;rsquo;re back to the point where we can do feature development work again, as exemplified by our recent addition of &lt;a href=&#34;http://blog.launchpad.net/general/git-code-hosting-beta&#34;&gt;Git code hosting support&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Lots of other things have been happening in the Launchpad world lately, though, and the half-way point in the year seems like a good time to start talking about them.  I&amp;rsquo;m going to try to do this a bit more regularly, aiming for about once a month when we also update our internal stakeholders.  This post covers roughly the last three months.&lt;/p&gt;
&lt;h2 id=&#34;git&#34;&gt;Git&lt;/h2&gt;
&lt;p&gt;Of course, you don&amp;rsquo;t get to release a major new feature and then have everything be perfect.  In fact, we&amp;rsquo;d released it pretty much as soon as we had a &lt;a href=&#34;https://en.wikipedia.org/wiki/Minimum_viable_product&#34;&gt;minimum viable product&lt;/a&gt;, so we knew there was plenty more to do.&lt;/p&gt;
&lt;p&gt;Now that the basics work reasonably well, we&amp;rsquo;ve been focusing on tying off loose ends, and on getting to the point where Launchpad itself can be self-hosted in Git: this is partly because most of the things we need to do for that are relevant to many other projects considering a migration, partly because that ensures that any problems with it will affect Launchpad developers directly, and partly because this will allow us to trim a very large amount of database cruft associated with the representation of Launchpad&amp;rsquo;s own branches.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s a brief changelog since our initial public announcement:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Leaving the &amp;ldquo;Target reference path&amp;rdquo; field empty when proposing a Git-based merge proposal no longer crashes (&lt;a href=&#34;https://bugs.launchpad.net/launchpad/+bug/1451068&#34;&gt;#1451068&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Git-based merge proposals can be deleted&lt;/li&gt;
&lt;li&gt;Pushing to private repositories no longer hangs (&lt;a href=&#34;https://bugs.launchpad.net/launchpad/+bug/1451107&#34;&gt;#1451107&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The backend now stores reflogs so that we can help users recover from mistakes&lt;/li&gt;
&lt;li&gt;Pushing a new default repository for a project now sets the repository owner to the project owner rather than to the person performing the push&lt;/li&gt;
&lt;li&gt;The project +sharing view now handles Git repositories&lt;/li&gt;
&lt;li&gt;Branches of a project default repository are now shown on the project&amp;rsquo;s code page, although we expect to be making significant further improvements in this area soon&lt;/li&gt;
&lt;li&gt;Individual Git commits under &amp;ldquo;Recent Commits&amp;rdquo; now link directly to a full view of the corresponding commit&lt;/li&gt;
&lt;li&gt;Merge proposal listings now cover Git (&lt;a href=&#34;https://bugs.launchpad.net/launchpad/+bug/1453020&#34;&gt;#1453020&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Branches in private repositories now show a privacy banner (&lt;a href=&#34;https://bugs.launchpad.net/launchpad/+bug/1457553&#34;&gt;#1457553&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Repositories can now be deleted (&lt;a href=&#34;https://bugs.launchpad.net/launchpad/+bug/1456583&#34;&gt;#1456583&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Private repositories are now browseable and show a privacy banner in the browsing interface&lt;/li&gt;
&lt;li&gt;The URLs for Git-based merge proposals have moved to be directly under the source repository rather than under the source branch, so that historical MPs can still be accessed after deleting the branch (&lt;a href=&#34;https://bugs.launchpad.net/launchpad/+bug/1456589&#34;&gt;#1456589&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Launchpad now sends mail for Git-based merge proposals&lt;/li&gt;
&lt;li&gt;There are various new Git repository listing views, chiefly for projects, packages, and people&lt;/li&gt;
&lt;li&gt;Repositories now have a complete edit form allowing you to rename them, move them between targets, and set their default branch (&amp;ldquo;HEAD&amp;rdquo;) (&lt;a href=&#34;https://bugs.launchpad.net/launchpad/+bug/1456625&#34;&gt;#1456625&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;We&amp;rsquo;ve exported a few more bits and pieces on the webservice API to support Git merge robots&lt;/li&gt;
&lt;li&gt;We&amp;rsquo;ve brought various bits of automation for Git-based merge proposals up to par with their Bazaar equivalents: when a Git branch is updated, Launchpad now automatically updates the preview diffs for any MPs where that is the source branch, and detects whether any MPs where that is the target branch can now be marked as Merged&lt;/li&gt;
&lt;li&gt;The Code settings view for projects now allows you to set the project&amp;rsquo;s default Git repository and to choose whether the default revision system for the project is Bazaar or Git&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We&amp;rsquo;ve started on support for webhooks, and hope to be able to tell you more about this soon. Git-to-Git repository mirroring and native Git recipes are also frequent requests that we know are important to people, and we hope to get to those soon.&lt;/p&gt;
&lt;h2 id=&#34;other-code-review-changes&#34;&gt;Other code review changes&lt;/h2&gt;
&lt;p&gt;Many of the changes needed for Git touched on our code review infrastructure, but we&amp;rsquo;ve been making some other improvements there too.  Launchpad has supported &amp;ldquo;inline comments&amp;rdquo; on merge proposals for a year or so now, allowing you to comment on parts of a diff without having to manually quote it; but the feature hadn&amp;rsquo;t been quite finished and lots of people had nits to pick with it.  We&amp;rsquo;ve made a couple of improvements here lately:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Preview diffs in merge proposals now have keyboard navigation to move between files, diff hunks, and inline comments&lt;/li&gt;
&lt;li&gt;Links to diffs now include a per-file diffstat under an expander triangle&lt;/li&gt;
&lt;li&gt;The mails sent when a reviewer adds inline comments now only include relevant parts of the diff context rather than the entire diff, making them much easier to read and making it harder to miss comments (&lt;a href=&#34;https://bugs.launchpad.net/launchpad/+bug/1334577&#34;&gt;#1334577&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We threw in a couple of bonus features here as well.  You can now see side-by-side diffs for merge proposals as well as unified diffs (&lt;a href=&#34;https://bugs.launchpad.net/launchpad/+bug/917502&#34;&gt;#917502&lt;/a&gt;): there&amp;rsquo;s a link at the top of each preview diff allowing you to switch it to side-by-side mode (we may add a user preference for this later).  And resubmitting a merge proposal now automatically preserves the commit message (&lt;a href=&#34;https://bugs.launchpad.net/launchpad/+bug/676769&#34;&gt;#676769&lt;/a&gt;).&lt;/p&gt;
&lt;h2 id=&#34;package-build-infrastructure&#34;&gt;Package build infrastructure&lt;/h2&gt;
&lt;p&gt;When we first added support for building debug symbol packages (ddebs) in Ubuntu, we handled the build and publication side of things with a temporary hack involving a custom hack to our &lt;code&gt;sbuild&lt;/code&gt; fork that stashed the ddebs on the builder for a while, and a job that periodically fetched them to &lt;a href=&#34;http://ddebs.ubuntu.com/&#34;&gt;ddebs.ubuntu.com&lt;/a&gt;. As is the way of temporary hacks, it proceeded to stay that way for eight and a half years. It mostly worked, but was rather fragile, contributed to tying us to an old &lt;code&gt;sbuild&lt;/code&gt;, wasn&amp;rsquo;t very extensible to PPAs, and couldn&amp;rsquo;t work with virtualised builders where all the builder&amp;rsquo;s state is reset before every build.&lt;/p&gt;
&lt;p&gt;A couple of years ago we put together the Launchpad changes required to store ddebs straightforwardly in Launchpad instead, but weren&amp;rsquo;t able to deploy this at the time due to needing better librarian infrastructure. We finally got all this cleared out in April and deployed the new ddeb publishing mechanism. The main user-visible effect of this is that &lt;a href=&#34;http://ddebs.ubuntu.com/&#34;&gt;ddebs.ubuntu.com&lt;/a&gt; isn&amp;rsquo;t liable to lose packages any more, and ddebs are also available from Launchpad build pages.&lt;/p&gt;
&lt;p&gt;Having done this, we were able to &lt;a href=&#34;https://lists.ubuntu.com/archives/ubuntu-devel-announce/2015-June/001137.html&#34;&gt;upgrade&lt;/a&gt; from our 2004-era fork of &lt;code&gt;sbuild&lt;/code&gt; to a modern version, which fixed a number of long-standing bugs.&lt;/p&gt;
&lt;p&gt;All architectures are now optional for PPAs (&lt;a href=&#34;https://bugs.launchpad.net/launchpad/+bug/1244868&#34;&gt;#1244868&lt;/a&gt;), so, for example, a PPA that only needs to support &lt;code&gt;armhf&lt;/code&gt; can save builder cycles by disabling &lt;code&gt;amd64&lt;/code&gt; and &lt;code&gt;i386&lt;/code&gt;. At the moment this can only be done by Launchpad administrators, so &lt;a href=&#34;https://answers.launchpad.net/launchpad/+addquestion&#34;&gt;ask a question on Launchpad&lt;/a&gt; if you think this would be worth doing for any of your PPAs.&lt;/p&gt;
&lt;p&gt;We rewrote the way that we install build-dependencies for &lt;a href=&#34;https://help.launchpad.net/Packaging/SourceBuilds/Recipes&#34;&gt;source package recipes&lt;/a&gt;. This allows recipes to handle the &amp;ldquo;:native&amp;rdquo; qualifier in build-dependencies which is used in some places as part of supporting cross-building.&lt;/p&gt;
&lt;p&gt;The next step in this modernisation programme will be to move all builds into &lt;a href=&#34;https://insights.ubuntu.com/2014/10/30/scalingstack-2x-performance-in-launchpads-build-farm-with-openstack/&#34;&gt;ScalingStack&lt;/a&gt; and decommission the corresponding bare-metal builders, which we&amp;rsquo;ll be starting soon and working on an architecture-by-architecture basis as that cloud gains support for them. In the short term, this will give us better build capacity on the migrated architectures; in the longer term, it will let us support PPA builds on more architectures, and erase the cumbersome distinction between &amp;ldquo;non-virtualised&amp;rdquo; and &amp;ldquo;virtualised&amp;rdquo; builders. More news on this as it happens.&lt;/p&gt;
&lt;h2 id=&#34;performance&#34;&gt;Performance&lt;/h2&gt;
&lt;p&gt;We upgraded to significantly more modern database servers earlier this year, which meant that a lot of hitherto difficult timeout problems suddenly either disappeared or became tractable. There are still some bad queries and a few mysterious problems, but as a general trend our timeout rates are very significantly down from where they were six months ago. We have some more general plans in this area, and will continue to spot-fix bad pages as they show up and as time permits.&lt;/p&gt;
&lt;h2 id=&#34;epilogue&#34;&gt;Epilogue&lt;/h2&gt;
&lt;p&gt;We have lots more to do across the whole application, but still have a rather limited number of developers. If any of this kind of thing sounds interesting and you&amp;rsquo;d like to help, &lt;a href=&#34;https://dev.launchpad.net/&#34;&gt;you can&lt;/a&gt;!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Git code hosting beta</title>
      <link>https://blog.launchpad.net/general/git-code-hosting-beta/</link>
      <pubDate>Fri, 01 May 2015 20:50:11 +0000</pubDate>
      <dc:creator>William Grant</dc:creator>
      <guid isPermaLink="false">https://blog.launchpad.net/?p=4163</guid>
      <description>&lt;p&gt;Today we&amp;rsquo;re announcing early support for hosting &lt;a href=&#34;http://git-scm.com/&#34;&gt;Git&lt;/a&gt; repositories directly on Launchpad, as well as or instead of &lt;a href=&#34;http://bazaar.canonical.com/&#34;&gt;Bazaar&lt;/a&gt; branches. This has been by far the single most commonly requested feature from Launchpad code hosting for a long time; we&amp;rsquo;ve been working hard on it for several months now, and we&amp;rsquo;re very happy to be able to release it for general use.&lt;/p&gt;
&lt;p&gt;This is distinct from the facility to &lt;a href=&#34;https://help.launchpad.net/Code/Imports&#34;&gt;import code&lt;/a&gt; from Git (and some other systems) into Bazaar that Launchpad has included for many years. Code imports are useful to aggregate information from all over the free software ecosystem in a unified way, which has always been one of the primary goals of Launchpad, and in the future we may add the facility to import code into Git as well. However, what we&amp;rsquo;re releasing today is native support: you can use git push to upload code to Launchpad, and your users and collaborators can use git clone to download it, in the same kind of way that you can with any Git server.&lt;/p&gt;
&lt;p&gt;Our support is still in its early stages, and we still have several features to add to bring it up to parity with Bazaar hosting in Launchpad, as well as generally making it easier and more pleasant to use. We&amp;rsquo;ve released it before it&amp;rsquo;s completely polished because many people are clamouring to be able to use it and we&amp;rsquo;re ready to let you all do so. From here on in, we&amp;rsquo;ll be adding features, applying polish, and fixing bugs using Launchpad&amp;rsquo;s normal iterative deployment process: changes will be rolled out to production once they&amp;rsquo;re ready, so you&amp;rsquo;ll see the UI gradually improving over time.&lt;/p&gt;
&lt;h2 id=&#34;whats-supported&#34;&gt;What&amp;rsquo;s supported?&lt;/h2&gt;
&lt;p&gt;You can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;push Git repositories to Launchpad over SSH&lt;/li&gt;
&lt;li&gt;clone repositories over git://, SSH, or HTTPS&lt;/li&gt;
&lt;li&gt;see summary information on repositories and the branches they contain in the Launchpad web UI&lt;/li&gt;
&lt;li&gt;follow links from the Launchpad web UI to a full-featured code browser (cgit)&lt;/li&gt;
&lt;li&gt;push and clone private repositories, if you have a commercial subscription to Launchpad&lt;/li&gt;
&lt;li&gt;propose merges from one branch to another, including in a different repository, provided that they are against the same project or package&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;what-will-be-supported-later&#34;&gt;What will be supported later?&lt;/h2&gt;
&lt;p&gt;Launchpad&amp;rsquo;s Bazaar support has grown many features over the years, and it will take some time to bring our Git support up to full parity with it and beyond. Git repositories use a somewhat different model from Bazaar branches, which we&amp;rsquo;ve had to account for in many places, and some facilities will require complete reimplementation before we can support them with Git.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s an incomplete list of some of the features we hope to add:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;useful subscriptions (currently only attribute change notifications work, which are not usually very interesting in themselves)&lt;/li&gt;
&lt;li&gt;RSS feeds&lt;/li&gt;
&lt;li&gt;mirroring&lt;/li&gt;
&lt;li&gt;webhooks&lt;/li&gt;
&lt;li&gt;an integrated code browser&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;See our &lt;a href=&#34;https://help.launchpad.net/Code/Git&#34;&gt;help page&lt;/a&gt; for more known issues and instructions on using Launchpad with Git.&lt;/p&gt;
&lt;h2 id=&#34;helping-out&#34;&gt;Helping out&lt;/h2&gt;
&lt;p&gt;This is a new service, and we welcome your feedback: you can ask questions in #launchpad on freenode IRC, on our &lt;a href=&#34;https://launchpad.net/~launchpad-users&#34;&gt;launchpad-users&lt;/a&gt; mailing list, or on &lt;a href=&#34;https://answers.launchpad.net/launchpad/+addquestion&#34;&gt;Launchpad Answers&lt;/a&gt;, and if you find a bug then please &lt;a href=&#34;https://bugs.launchpad.net/launchpad/+filebug&#34;&gt;tell us about that&lt;/a&gt; too.&lt;/p&gt;
&lt;p&gt;Launchpad is free software, licensed under the GNU AGPLv3. We&amp;rsquo;d be very happy to mentor people who want to help out with parts of this service, or to build things on top of it using our &lt;a href=&#34;https://help.launchpad.net/API/launchpadlib&#34;&gt;published API&lt;/a&gt;. Some preliminary documentation on this is on our &lt;a href=&#34;https://dev.launchpad.net/Code/Git&#34;&gt;developer wiki&lt;/a&gt;, and you can always &lt;a href=&#34;https://dev.launchpad.net/Help&#34;&gt;contact us for help&lt;/a&gt;.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Launchpad JavaScript now combo loaded and faster than ever.</title>
      <link>https://blog.launchpad.net/general/launchpad-javascript-now-combo-loaded-and-faster-than-ever/</link>
      <pubDate>Tue, 25 Sep 2012 15:38:51 +0000</pubDate>
      <dc:creator>Richard Harding</dc:creator>
      <guid isPermaLink="false">https://blog.launchpad.net/?p=3727</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://blog.launchpad.net/images/external/ubuntuone.com/4TlJf9tXAV2NDiJvi2i91v.png&#34; alt=&#34;Network graph of the combo loaded JavaScript.&#34;&gt;
&lt;em&gt;Updated network graph&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Back in January a side project was started to update the JavaScript used in Launchpad. Launchpad has been using YUI 3.3.0 for a long time, very successfully, however recent advances in &lt;a href=&#34;https://github.com/yui/yui3/blob/master/src/app/HISTORY.md#350&#34;&gt;YUI 3.5&lt;/a&gt; and higher have added some great tools for development that Launchpad can take advantage of.  In order to facilitate easier upgrades our YUI library version Launchpad has been moved to using a &lt;a href=&#34;http://pypi.python.org/pypi/convoy/0.2.4&#34;&gt;combo loader&lt;/a&gt; for serving out JavaScript.&lt;/p&gt;
&lt;p&gt;This means, that instead of a single launchpad.js file that can be upwards of 3MB in size, each request builds a list of JavaScript modules needed for the current page to work, and the combo loader only sends down those modules. This drastically cuts down on the download size of the JavaScript for users. These combo loaded JavaScript files are also cached for speedy serving to other users of Launchpad.&lt;/p&gt;
&lt;p&gt;The combo loader also allows us to specify which YUI version to load via a tweak to the url. In this way we can easily test new version of YUI side by side with the current stable version as they come out. This allows Launchpad to keep with future YUI released much faster.&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;re excited that today Launchpad has moved from YUI 3.3.0 to 3.5.1 and is now served by the combo loader. This change provides a faster experience for users along with easier maintenance and new JavaScript library features for developers.&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;ve still got more to do though. YUI &lt;a href=&#34;http://www.yuiblog.com/blog/2012/09/18/announcing-yui-3-7-0/&#34;&gt;just released version 3.7&lt;/a&gt; and we aim to push that into production faster than ever before.  Please let us know how these changes work for you.&lt;/p&gt;
&lt;p&gt;Launchpad also wants to thank the folks over at &lt;a href=&#34;http://yuilibrary.com/&#34;&gt;YUI&lt;/a&gt; for continuing the great work on a tool that Launchpad heavily depends on.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Setting up commercial projects quickly</title>
      <link>https://blog.launchpad.net/cool-new-stuff/setting-up-commercial-projects-quickly/</link>
      <pubDate>Wed, 18 Apr 2012 12:38:45 +0000</pubDate>
      <dc:creator>Curtis Hovey</dc:creator>
      <guid isPermaLink="false">https://blog.launchpad.net/?p=3317</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://blog.launchpad.net/images/posts/2012/04/2967373590_3422330020.jpg&#34;&gt;&lt;img src=&#34;https://blog.launchpad.net/images/posts/2012/04/2967373590_3422330020-300x200.jpg&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Setting up a commercial project in Launchpad has gotten easier. You can now quickly register a proprietary project and enable private bugs. You can create private teams and private personal package archives, AKA private PPA or P3A without the assistance of a Launchpad admin.&lt;/p&gt;
&lt;p&gt;When you select the Other/Proprietary license while registering a project, or changing the project&amp;rsquo;s details,&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.launchpad.net/images/posts/2012/04/proprietary-license.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;it is given a complimentary 30-day commercial subscription.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.launchpad.net/images/posts/2012/04/commercial-subscription.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;The delay between the moment when a commercial project was registered and when the commercial subscription was purchased and then applied to the project caused a lot of confusion. During this delay, proprietary data could be disclosed. We chose to award the project with a short term commercial subscription which enabled the project to be properly configured while the 12-month commercial subscription was being purchased and applied to the project.&lt;/p&gt;
&lt;h3 id=&#34;any-project-with-a-commercial-subscription-can-enable&#34;&gt;Any project with a commercial subscription can enable&lt;/h3&gt;
&lt;dl&gt;
&lt;dt&gt;&lt;strong&gt;Default private bugs&lt;/strong&gt;&lt;/dt&gt;
&lt;dd&gt;Once enabled by configuring the project&#39;s bug tracker, all new reported bugs are private. You can choose to make the report public.&lt;/dd&gt;
&lt;dd&gt;&lt;a href=&#34;https://blog.launchpad.net/images/posts/2012/04/private-bugs.png&#34;&gt;&lt;img title=&#34;Default private bugs&#34; src=&#34;https://blog.launchpad.net/images/posts/2012/04/private-bugs.png&#34; alt=&#34;Default private bugs&#34; width=&#34;421&#34; height=&#34;62&#34; /&gt;&lt;/a&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;Default private branches&lt;/strong&gt;&lt;/dt&gt;
&lt;dd&gt;You can request a Launchpad admin to configure private branches for your teams. (You will be able to do this yourself in the near future when projects gain proprietary branches.)&lt;/dd&gt;
&lt;/dl&gt;
&lt;h3 id=&#34;as-the-maintainer-of-a-project-with-a-commercial-subscription-you-can-register&#34;&gt;As the maintainer of a project with a commercial subscription, you can register&lt;/h3&gt;
&lt;dl&gt;
&lt;dt&gt;&lt;strong&gt;Private teams&lt;/strong&gt;&lt;/dt&gt;
&lt;dd&gt;When you register a team, you can choose to set the team visibility to private. The team&#39;s members and data is hidden from non-members.&lt;/dd&gt;
&lt;dd&gt;&lt;a href=&#34;https://blog.launchpad.net/images/posts/2012/04/private-team.png&#34;&gt;&lt;img title=&#34;Private team&#34; src=&#34;https://blog.launchpad.net/images/posts/2012/04/private-team.png&#34; alt=&#34;&#34; width=&#34;568&#34; height=&#34;132&#34; /&gt;&lt;/a&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;Private mailing lists&lt;/strong&gt;&lt;/dt&gt;
&lt;dd&gt;When you create a mailing list for a private team, the archive is also private. Only team members may see the messages in the archive.&lt;/dd&gt;
&lt;dd&gt;&lt;a href=&#34;https://blog.launchpad.net/images/posts/2012/04/private-mailing-list.png&#34;&gt;&lt;img title=&#34;Private mailing-list archive&#34; src=&#34;https://blog.launchpad.net/images/posts/2012/04/private-mailing-list.png&#34; alt=&#34;&#34; width=&#34;589&#34; height=&#34;142&#34; /&gt;&lt;/a&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;Private PPAs&lt;/strong&gt;&lt;/dt&gt;
&lt;dd&gt;When you create a PPA for your public team, you may choose to make it private; private teams can only have private PPAs. You can subscribe users to your archive so that they may install packages without revealing all your team&#39;s members and data to the subscriber.&lt;/dd&gt;
&lt;dd&gt;&lt;a href=&#34;https://blog.launchpad.net/images/posts/2012/04/private-ppa.png&#34;&gt;&lt;img title=&#34;Private Personal Package Archive&#34; src=&#34;https://blog.launchpad.net/images/posts/2012/04/private-ppa.png&#34; alt=&#34;&#34; width=&#34;621&#34; height=&#34;120&#34; /&gt;&lt;/a&gt;&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;A secondary benefit of this change is that you can now try Launchpad&amp;rsquo;s commercial features before purchasing a 12-month commercial subscription. The features will be disabled at the end of 30-days. Your test data will remain private to ensure your data is not disclosed.&lt;/p&gt;
&lt;p&gt;Any open source project may also have a commercial subscription to enable commercial features. You can &lt;a href=&#34;http://shop.canonical.com/product_info.php?products_id=230&#34;&gt;purchase a commercial subscription at the Canonical store.&lt;/a&gt; Commercial subscriptions cost US$250/year/project + applicable V.A.T.&lt;/p&gt;
&lt;p&gt;(Photo by &lt;a href=&#34;http://www.flickr.com/photos/fwp-dawson/&#34;&gt;Fred Dawson&lt;/a&gt; on flickr, creative commons license)&lt;/p&gt;
</description>
    </item>
    
  </channel>
</rss>
