• How we deploy new features

    There's been some recent discussion about rolling out new features. Ross at Flickr talked about using flags and flippers. Forrst mentioned their use of user buckets.

    The nice thing about these techniques is that they're simple and easy to tweak to meet your specific needs. Before launching Orgs, we relied on user feature flags to determine which users had beta access. However, we didn't want to worry about enabling Orgs for all of the user's fellow team members. This lead to a few UI if statements like this:

    <% if @user.has_orgs? || @user.organizations.size > 0 -%>
    <a href="...">Organizations</a><!-- link to organizations tab -->
    

    We deploy a lot, but I don't like littering the commit history with small configuration tweaks.

    Replacing the Downloads server recently gave me a chance to try a slightly new technique: Using Redis for configuration management:

    def use_nodeload?
      case GitHub::Config[:nodeload]
        when 'public' then current_repository.public?
        when 'all'    then true
        else               false
      end
    end
    

    At one point, I was even sending a percentage of traffic to the new server to see how it handled things. If there were bugs, I could easily tweak the value in Redis without redeploying anything. If we need buckets, we could use Redis' awesome Set commands.

  • Do you use Git on Windows?

    defunkt 1 Jul 2010

    If so, we want to hear from you! Help us make Git on Windows better by answering a few short questions.

  • Fork You

    I suppose we should do something with this warehouse full of Fork You shirts we have. Starting to look like an episode of Hoarders up in here. Hey, you want one?

    These suckers go like hotcakes, so act fast. Also, keep an eye out for an extremely limited final run of the All of You Rebase Are Belong to Us shirts. Once those are gone, they'll never be back! Probably.

    Lastly, I'd love to hear suggestions for future shirt design in the comments.

  • Organizations for Small Businesses

    defunkt 30 Jun 2010

    When we launched Organizations yesterday we were overwhelmed by the response. We designed and built Organizations for large customers managing many teams of developers, not realizing how useful they'd be for small businesses.

    Today we're introducing two new Organizations plans for small businesses: Bronze and Silver. Essentially they're the Small and Medium personal accounts for Organizations.

    (With this change we're modifying the existing Organizations plans too. The old Silver is now Gold, the old Gold is now Platinum, and the old Platinum is available by contacting [email protected]. Existing Organization accounts have been properly adjusted.)

    Grab one of the new plans and start saving time with Organizations today!

  • Introducing Organizations

    kneath 29 Jun 2010

    Today we're introducing Organizations. Organizations simplify management of group-owned repositories (for example: your company's code), expand on our permissions system, and help focus your GitHub workflow for business and large open source projects.

    If you've ever had to manage multiple GitHub accounts, desired a company-specific dashboard, wanted to add read-only collaborators, or needed to give someone else administrative control over one of your repositories, you're going to love Organizations.

    And just like the rest of GitHub, Organizations are free for open source.

    A home for your organization's code

    Creating an organization helps you centralize your organization's code. All repositories live under the organization, and billing goes through a central organization account.

    Any owner of an organization may edit that organization's settings, from profile details to billing information.

    Next generation permissions control

    Teams give people access to the organization's code, making it easy to add or remove people to many repositories at once.

    Here are all the teams in the dolores organization:

    Each team has one of three levels of permission:

    • Pull Only - This new permission level is useful when you want to give people access to see the code, participate in private issues/wikis, or work in their private fork. These members may not push to the organization owned repository.

    • Pull+Push - This is the default permission that collaborators have on GitHub right now. These members can participate in the project and push code, but they may not change the repository's meta data (name, private/public status, teams, service hooks).

    • Pull+Push+Administrative - This new permission level allows you to grant participatory, push and administrative permissions. These members can do anything a repository owner can do.

    Both users and repositories may be added to teams by owners, and you can make as many teams as you want.

    Focus on your organization

    Each organization you belong to has its own dashboard context. Within this context, you'll see events pertinent to the organization as well as the repositories that belong to the organization (that you have access to).

    Contexts are sticky. Once you've selected a context, clicking the GitHub logo or any "dashboard" link will bring you back the your context. Select your name from the dropdown to get back to your personal dashboard.

    Dashboard contexts are all about focus. Come to work, switch to your company's context — go home, switch back to your personal context.

    Want to see an organization repo in your personal context? Watch it.

    Forking friendly

    Organizations know all about forks. If you have the power to create new repositories on behalf of the organization (that is, you're an owner of the organization or in a team with admin-level permissions), clicking "Fork" on any repository will ask where to fork it to:

    Similarly, if a member of your organization forks one of your organization's repositories that fork will be considered part of the repository and can be added to teams. This is not unlike the way forking private repositories works with personal accounts, just much more flexible and powerful.

    Open Source ready

    Just like personal accounts, organizations are completely free for open source.

    Check out MongoDB and RubyGems for two open source organizations.

    Transforming an existing user account into an organization

    Is your company or open source project using a shared GitHub account? Converting it to an organization is cake.

    Log in one final time and click Manage Organizations in the Switch Context dropdown on your dashboard. Here you can turn your shared user account into an organization. Just click the button and follow the instructions.

    Pricing

    With Organizations we've simplified our plans structure.

    Personal accounts can continue to choose from the Free, Micro, Small, and Medium plans. The Large, Mega, and Giga plans will no longer be available. If you're currently using one of these plans, don't worry — you've been grandfathered in. However, If you want to take advantage of the new organizations features, you'll need to upgrade to an Organization plan.

    Organizations can choose from the Free, Bronze, Silver, Gold, and Platinum plans. Organizations have no team limits, member limits, or collaborators - the only thing that matters is the number of private repositories. Public repositories, as always, are free.

    Take a look at our new plans structure.

    Get started with Organizations today

    Join Engine Yard, Shopify, Efficiency 2.0, GitHub, and other companies by switching to an organization today. We hope they'll give you and your team more time to focus on what matters most - the code!

    Create a new organization now!

    Updated Pricing

    We've released more affordable Organizations for Small Businesses.

  • Starring Gists

    schacon 29 Jun 2010

    If you have ever forked a Gist just so you can remember which one it is, now you can just star it. There is now a 'star' button on each Gist, including your own.

    If you click on that, it will bookmark the Gist for you and you can find all your starred Gists under the new "Starred Gists" link:

    Happy starring!

  • Scheduled Fileserver Maintenance Today @ 22:00 PST

    technoweenie 23 Jun 2010

    Update: The new fileserver is online and working now.

    Following up on last week's fileserver problems, we will be swapping in the new server tonight (Wednesday, June 23rd) at 22:00 PST. We expect the outage for users on this fileserver to last about 10 minutes.

  • Twitter's on GitHub

    pjhyett 22 Jun 2010

    It just occurred to me that we never mentioned Twitter's been open sourcing code like crazy on GitHub over the past few months.

    They've put together a really great Twitter OpenSource page, from which you're gonna find quite a few links to code hosted here. I know I speak for the rest of the team when I say I love seeing companies embrace open source so wholeheartedly.

  • Scheduled DB Maintenance Today @ 22:00 PST

    technoweenie 21 Jun 2010

    UPDATE: The upgrade ran without problems.

    We will be performing some maintenance on the database tonight (Monday, June 21, 2010) at 22:00 PST. We will temporarily disable background jobs while this takes place, but all data will still be accessible through the web. Git/SSH access will be unaffected. We expect the migration to take about 10 minutes.

  • WebPulp.tv Interview with Tom Preston-Werner

    mojombo 21 Jun 2010

    A few weeks ago I had the pleasure of being interviewed by Josh Owens for webpulp.tv. We talked about the GitHub architecture, Grit, BERT and Ernie, Erlang, load balancing, Redis and MongoDB, Resque, Git-backed Wikis, open source, backups, Unicorn, EventMachine and much more. Give it a watch and subscribe to the show for more great tech interviews!

    Webpulp.tv - Github - Tom Preston-Werner from Four Bean Soup on Vimeo.

  • Postmortem of last week's fileserver failure

    tekkub 20 Jun 2010

    As you may know, on thursday, 2010-06-10, we had a machine in one of our fileserver pairs fail. This caused an outage for all users on that fileserver, and corrupted files in a number of repos on the file server.

    Lead up

    Prior to the failure, we had been seeing some anomalous behaviour from the A server in this pair. The machine had been taken offline and memory tests performed, but no issue was found. Concerned about the machine being out of active rotation if an issue were to arise on the B server, the A server was put back into rotation. The server was left in standby mode so that disk syncs could occur.

    The failure

    At approximately 14:55 PST, load on B spiked. This lead to a fallover to A. Over the next hour, reports of repo corruption and rollbacks were investigated. It was apparent that most of the issues were with repos that had been pushed to since the fallover, so at 16:40 PST, the fileserver pair was taken offline. The decision was made to bring B back online, after verifying that the corruption was not being caused on it. This was completed and the B server was put back into service at 18:40 PST.

    Recovery

    Scanning and recovery began immediately after the B server was put back into service, and proceded through the weekend. Every repo on the server was scanned with git fsck. Any repo that failed this check was re-scanned and its corrupted objects were restored from the last uncorrupted disk snapshot or from backup. A small handful of repos were pushed to during the time A was serving and these pushes were unrecoverable. Owners of the unrecoverable repos were notified of the issue and given instructions on how to push the missing commits to their repos.

    Resolution

    After investigation we've concluded that faulty hardware on the A server was the cause. The server has been replaced with new hardware and is currently being tested. We are updating our post-fallover procedures to ensure filesystem snapshots remain intact and uncorrupted. We are also updating our snapshot job to perform fscks to identify corruption early.

  • APK Downloads for Android Projects

    schacon 20 Jun 2010

    For all you Android developers out there, we now will automatically detect when you upload an Android package (.apk) file and will give you a QR code page link on your download page list, like this:

    Unfortunately, only uploads since this weekend will work, but going forward any .apk file you upload will automatically have it's own QR code page. Clicking on that icon gives you a page like this:

    Now you can scan that with your Android phone to automatically download and install that package. You can check it out with the Japanese localization of the K-9 email client, which is on GitHub.

  • Notifo service hook added

    kneath 16 Jun 2010

    If you've ever wished you could have push notifications sent to your iPhone when someone commits to your repository — today's your lucky day. We recently added support for Notifo to our service hooks (coded up by stammy).

    Click "Admin" on any of your repositories, select "Service hooks" on the left hand side and then choose the Notifo service to set it up.

    Paul also took the time to write up a pretty extensive post on getting started with the Notifo API on this blog (notifo also hosts their code on GitHub!).

    Enjoy!

  • GitHub Meetup SF #19

    Summer is almost here and its time for another meetup! In what is perhaps an overly optimistic act, we're going to do another meetup outdoors at Irish Bank. It might be nice outside. And you could consider leaving your coat at home. Or perhaps you should bring it. Because, well, that's what your mother would want you to do. Just in case, dear.

    The Facts:

    Irish Bank 10 Mark Lane Thursday June 17th 8:30pm

  • Slide on GitHub

    pjhyett 15 Jun 2010

    Slide just open-sourced a bunch of code on their GitHub account, joining the likes of Digg, Yahoo, Facebook and many more forward-thinking companies.

    Check it out: github.com/slideinc