opensource.google.com

Menu

Docs

Releasing a Project

go/releasing

This is the process for releasing code as a new open source project. This process applies to all types of projects: personal (at home), 20%, and new Google open source releases that aren’t part of an already-established open source project (like Chromium or Android).

This whole process typically takes under a week from filing to final approval. If any individual item drags for more than three work days please email emailremoved@ and let us know!

TIP: If you’re releasing a patch to an existing project, go/patching is a much faster and simpler process.

If you want to own the copyright on a personal project, the Invention Assignment Review Committee (go/iarc) will consider your request. This is not necessary for most open source releases.

Release checklist

  1. Stage your code on an internal git-on-borg repo:

    • Scrub the comments of any sensitive information.
    • Include a README file.
    • Include an Apache 2 LICENSE file and appropriate source file headers.
      • If you intend to publish your release under any license other than Apache 2, include the appropriate license file instead and explain why you are using a different license in your launch description.
    • Include a CONTRIBUTING.md file which tells people to sign our CLA if they haven’t already.
      • If you are omitting a CONTRIBUTING.md file, explain the reason for choosing to do so in your launch description.
    • TIP: https://github.com/google/new-project contains a repository you can copy with boilerplate README.md, Apache 2 LICENSE, and CONTRIBUTING.md files.

    • Non-Google code must be in a third_party directory.

    • Include a disclaimer that “This is not an official Google product” unless it actually is.

    • Set your repository ACLs to ensure that reviewers and the automated Cross linter can access your code.

    • Run the Cross linter to check your repository, making changes where useful (Cross outputs warnings, not errors):

      /path/to/.../cross \
        http://linkremoved/
      

      There is no need to copy and paste the output in your launch, Cross will automatically run and leave the results as a comment. If, two hours after the launch becoming current (i.e. leaving DRAFT), Cross hasn’t commented on your launch, you can run with the -ariane flag which will leave a comment for you (and then follow-up by filing an issue at go/cross-bug):

      /path/to/.../cross \
        -ariane=LAUNCH_ID \
        http://linkremoved/
      

      If you need to run against a subdirectory, you should check out your repository first, and then point Cross to the subdirectory:

      /path/to/.../cross /path/to/your/subdirectory
      
  2. Create an entry on the Open Source launch calendar in Ariane:

    • Add your director as an approver for the Eng bit.
    • Include a link to your code in the description field.
      • E.g. http://linkremoved/
    • Ensure all reviewers have read access to your code.
    • Include a link to where you would like to host your code.
      • E.g. https://github.com/google/$PROJECT
      • We require projects that are at all work-related to be hosted in one of the orgs at go/github/orgs (e.g. sample applications, utilities, sdks, code accompanying academic papers, and demos).
    • Set the launch date at least two weeks in the future to allow for time to review.
    • WAIT until your launch is approved before continuing to the next step.
  3. Create the external repository.

    • If the project is going to be hosted on GitHub in a Google organization, create the repository for the GitHub URL in an Ariane launch at go/github/repo.
  4. If your project contains encryption code, follow go/releasing-crypto to notify the export compliance team on the day you make your release public. You don’t need to do this for just authentication or digital signatures.

Stuff you can do after you launch

Except as otherwise noted, the content of this page is licensed under CC-BY-4.0 license. Third-party product names and logos may be the trademarks of their respective owners.