MyGet Blog

Package management made easier!

NAVIGATION - SEARCH

Support for feed names with dashes and underscores

An often requested feature for MyGet was support for feed names with dashes and/or underscores. With our 1.6 release we introduce just this: support for feed names with – and _ in their name.

Feed names with dashes and underscores

Many people asked us for this feature. The main scenario these users referred to was having feeds for development and production, having feeds per branch and so on with a recognizable prefix.

Since we deployed it in our staging environment, we’ve been using it continuously ourselves. Every support request that comes in and requires investigation is prefixed with “support-“. When we develop a new feature and test it on a given feed, we typically prefix those feeds with “dev-". I even saw a “chuck-norris-was-here” feed appearing during development. We hope you like this as much as we do!

Happy packaging!

Release notes for MyGet 1.6

Many users have asked for us to provide release notes for everything we put online. Since that’s a great idea we’ll start doing this with the current 1.6 release which has been deployed earlier this week. But before we dive into that, let’s give you some hints about our development process and versioning system.

Our development process and versioning system

If you look at the footer of our website, you’ll have seen the following for the past few weeks already:

image

That’s right: we’ve been on (parts of) version 1.6.x for the past few weeks already. The reason for that is we version after our sprints and do continuous deployment of most things we work on. This means that when we start deploying features for our v1.7.x sprint, we’ll already update the version number in the footer to that number yet we’ll provide release notes only at the end of our sprint. So while today, you may already see v1.7.x mentioned in our footer because we've already deployed some features from that sprint, the following release notes are valid at time of writing this post.

Release notes for MyGet 1.6

MyGet 1.6 was released on February 25, 2013.

Features

MyGet

  • Minimum length for usernames has been decreased to 3 characters (previously 6). Shorter usernames are now possible.
  • A new menu item under feed: "Feed Settings" will contain settings specific to how MyGet handles packages for a given feed.
  • Feed settings contains an option to enable/disable overwriting of packages on the feed
  • Feed settings contains an option to enable/disable validation on the package version number with regards to Semantic Versioning
  • Dashes and underscores in feed names are supported. Feeds can be named foo-prod for example.
  • Download feed as ZIP.
  • Package Sources are out of beta.
  • API key in package source configuration is now masked

MyGet Enterprise

  • Block e-mail addresses not belonging to the organization.
  • Users can be made administrator.
  • User removal (with the option of transfering their resources to another user).

MyGet Build Services

  • Copy build log to clipboard.
  • Specify build configuration and platform (Release/Debug and Any CPU/Mixed Platforms/...)
  • Support incremental build numbers.
  • Support configuring the build number using a template. Register version number as an environment variable.
  • Support building Windows Phone 8 projects.
  • Hotlink commit on GitHub/BitBucket from the build list.
  • Refresh build status automatically.
  • Support creating tools packages.
  • Hanging build detection.
  • Install psake on the build servers.

Bug Fixes

  • Copy to clipboard on feed details page did not work in Chrome version 24.0.1312.57 and up.
  • Feed statistics are not updated in some situations.
  • NuGet Package Explorer always shows prerelease packages in the feed list.
  • Build Services: building from protected SVN repositories isn't always working.
  • Build Services: GitHub API only returns 30 repositories.

Happy packaging!

We were down...

On 23 February 2013, we’ve been down for 8 hours. We received a monitoring alert (and some e-mails and tweets as well) at around 9:50 PM (CET) notifying us of this event. After looking into it, we discovered there was not much to do about this besides sit and wait… We do wish to apologize and clarify the events for this outage (our first since July 2012).

Windows Azure Storage outageThe root cause of this outage was a global outage of Windows Azure Storage. This service is one of the code building blocks of Windows Azure and has never in the past failed (that’s 4 years of no issues). This storage system works based on the HTTP protocol and has both http and https endpoints. Most applications built on top of Windows Azure, including the platform’s own building blocks, are using the https endpoints to prevent transport-level attacks, including MyGet. Unfortunately, most clusters of Windows Azure Storage were running an expired SSL certificate on this https endpoint, the reason for this global outage of Windows Azure and every application hosted on the platform, including MyGet and the official NuGet package source and every service directly depending on www.nuget.org.

MyGet runs in the Windows Azure Europe West region (Amsterdam), with a cold disaster recovery location in the Windows Azure Europe North region (Dublin). We can fail over to this location within hours if compute or storage in the main datacenter location fail. In case of a serious outage, we can restore a disaster recovery copy of our services in any Windows Azure region around the globe. Unfortunately, there’s nothing much we can do in case of a global outage…

Our status page can always be found at http://status.myget.org. For reference, here are our uptime numbers for the past year.

Name

Uptime
(avg.: 99.79%)

February 2013

98,44%

January 2013

100%

December 2012

99,99%

November 2012

99,94%

October 2012

99,99%

September 2012

99,92%

August 2012

99,98%

July 2012

99,56%

June 2012

99,94%

May 2012

100%

April 2012

99,69%

March 2012

99,99%

 

Again, we do apologize for the inconvenience caused and are debating around possible fallback scenarios in case a severe platform outage like this occurs again.

Happy packaging!

Cloning feeds is now supported

It happens that for some reason you require a full copy of an existing feed. You may want to do some upgrades. Maybe you just require your development feed to be copied as a production feed or vice-versa. Our latest deployment provides you with a fresh feature: cloning feeds.

From the feed list (www.myget.org/feed/list), simply click the “Clone” button next to a feed. Note that this will only be shown for feeds that are owned by you.

image

After a couple of minutes, your feed clone will be up and running.

image

Happy packaging!

Introducing a new profile page

Our latest service deployment features a fresh user profile page. You’ll be able to see everything you need by just clicking the Profile link. You’ll be able to see your feeds, linked identity providers, payment history and more.

image

You can also look at other user profiles. Simply browse to the MyGet gallery and you’ll be able to find out who’s behind a given public feed.

image

Yes, you’re seeing what we’re up to: in one of our next releases, we’ll be providing you with activity streams that give you an overview of what’s happening on a given feed or by a specific user.

Happy packaging!

Package retention policies

So you’re pushing your packages from your build server onto MyGet. That must result into a large number of packages! Or you want to keep only the latest 2 versions of a given package? Have no fear, package retention policies are here!

Under your feed, navigate to the Package Retention tab.

image

By default, we keep all package versions available on your feed. If you would like to do some automated housekeeping, you can now specify the number of stable and prerelease packages to keep on your feed. Whenever a package is added to your feed, we'll make sure these retention rules are respected.

Happy packaging!

Add packages from GitHub, BitBucket and CodePlex using MyGet build services

We’re pleased to announce some new features to MyGet build services. This feature allows you to add packages to your MyGet feed from any Git, Mercurial (hg) or Subversion repository out there. We’ll grab the sources, compile, package and make sure the result is listed on your feed. While still in beta, the feature is starting to take shape. In our latest release, we’ve shipped some interesting new features related to build services.

From your feed details page, you can navigate to build services. The “Add build source…” button has been around since the start and allows you to enter details of the source code repository manually. Because that can be a bit clumsy and since most public source code repositories out there have API’s available, we now support linking GitHub, BitBucket and CodePlex repositories with the click of a button!

image

After clicking one of these, you’ll be redirected to the code hosting provider for login.

image

After that, you can just check the projects you wish to add and link them automatically.

image

Apart from being able to easily link projects from GitHub, BitBucket and CodePlex, we also improved the build server itself a bit:

  • Support for portable libraries
  • TypeScript SDK 0.8.1.1 has been deployed
  • Private repositories on BitBucket now can be referenced
  • Git repositories with submodules can now be built (do note the submodule must be available over HTTP/HTTPS)

Happy packaging!

How we push GoogleAnalyticsTracker to NuGet

If you check Maarten’s blog post Tracking API usage with Google Analytics, you’ll see that a small open-source component evolved from MyGet. This component, GoogleAnalyticsTracker, lives on GitHub and NuGet and has since evolved into something that supports Windows Phone and Windows RT as well. Here’s his guest post:


It’s funny how things evolve. GoogleAnalyticsTracker started as a small component inside MyGet, and since a couple of weeks it uses MyGet to publish itself to NuGet. Say what? In this blog post, I’ll elaborate a bit on the development tools used on this tiny component.

Source code

Source code for GoogleAnalyticsTracker can be found on GitHub. This is the main entry point to all activity around this “project”. If you have a nice addition, feel free to fork it and send me a pull request.

Staging NuGet packages

Whenever I update the source code, I want to automatically build it and publish NuGet packages for it. Not directly to NuGet: I want to keep the regular version, the WinRT and WP version more or less in sync regarding version numbers. Also, I sometimes miss something which I fix again 5 minutes after. In the meanwhile, I like to have the generated package on some sort of “staging” feed, at MyGet. It’s even public, check http://www.myget.org/F/githubmaarten if you want to use my development artifacts.

When I decide it’s time for these packages to move to the “official NuGet package repository” at NuGet.org, I simply click the “push” button in my MyGet feed. Yes, that’s a manual step but I wanted to have some “gate” in the middle where I should explicitly do something. Here’s what happens after clicking “push”:

Push to NuGet

That’s right! You can use MyGet as a staging feed and from there push your packages onwards to any other feed out there. MyGet takes care of the uploading.

Building the package

There’s one thing which I forgot… How do I build these packages? Well… I don’t. I let MyGet Build Services.do the heavy lifting. On your feed, you can simply click the “Add GitHub project” button and a list of all your GitHub repos will be shown:

Build GitHub project

Tick a box and you’re ready to roll. And if you look carefully, you’ll see a “Build hook URL” being shown:

MyGet build hook

Back on GitHub, there’s this concept of “service hooks”, basically small utilities that you can fire whenever a new commit occurs on your repository. Wouldn’t it be awesome to trigger package creation on MyGet whenever I check in code to GitHub? Guess what…

GitHub build hook

That’s right! And MyGet even runs unit tests. Some sort of a continuous integration where I have the choice to promote packages to NuGet whenever I think they are stable.

MyGet Build Services - Public Beta

We’re happy to announce that MyGet Build Services is in Public Beta since, well, now. MyGet Build Services enable you to add packages to your feed by just giving us your Git, Mercurial or Subversion repo. We build it, we package it, we publish it. And starting today, every MyGet user can use it.

More information on MyGet Build Services can be found in a previous blog post, although some things have been updated. You’ve provided us feedback through our UserVoice, resulting in the following changes:

  • We now support .NET Framework 4.5. New features available in .NET Framework 4.5 are described at http://msdn.microsoft.com/en-us/library/vstudio/ms171868.aspx.
  • Build hooks! The list of your build definitions now shows a build hook URL which you can link to your GitHub or BitBucket repository. Calling this build hook (HTTP POST) will trigger a new build. Or in other words: a commit will trigger a build.
  • Our build server now checks for a file called build.bat first, then MyGet.sln, then your .sln and then .csproj/.vbproj files (UV)
  • We now support Git, Mercurial and Subversion repositories (UV)
  • You’ll now have some tools available in the environment variables (UV)
  • There’s more information in the build logs (UV)

Keep the feedback coming! Build Services are now enabled on every MyGet account. Do note MyGet Build Services are still a beta, and as Willy Wonka would say… “Little surprises around every corner, but nothing dangerous.”

Happy packaging!

PS: Why not deploy your freshly built apps using Octopus Deploy?

MyGet Build Services - Join the private beta!

Good news! Over the past 4 weeks we’ve been sending out tweets about our secret project MyGet project “wonka”. Today is the day Wonka shows his great stuff to the world… In short: MyGet Build Services enable you to add packages to your feed by just giving us your GitHub repo. We build it, we package it, we publish it.

Our build server searches for a file called MyGet.sln and builds that. No problem if it's not there: we'll try and build other projects then. We'll run unit tests (NUnit, XUnit, MSTest and some more) and fail when those fail. We'll search for packages generated by your solution and if none are generated, we take a wild guess and create them for you.

To make it more visual, here are some screenshots. First, you have to add a build source, for example a GitHub repository (in fact, GitHub is all we currently support):

MyGet Add build source

After that, you simply click “Build”. A couple of seconds or minutes later, your fresh package is available on your feed:

MyGet build package

MyGet package result

If you want to see what happened, the build log is available for review as well:

MyGet build log

Enroll now!

Starting today, you can enroll for our private beta. You’ll get on a waiting list and as we improve build capacity, you will be granted access to the beta. If you’re in, tell us how it behaves. What works, what doesn’t, what would you like to see improved. Enroll for this private beta now via http://www.myget.org/buildservices. Limited seats!

Do note it’s still a beta, and as Willy Wonka would say… “Little surprises around every corner, but nothing dangerous.”

Happy packaging!

PS: Why not deploy your freshly built apps using Octopus Deploy?