Want to talk about soil? Join us for Open Call every Tuesday until Mar. 30 and our kick-off call on this topic on Feb. 2! Click here for details on how to join!

Public Lab Wiki documentation

Contributing to Public Lab Software

This is a revision from January 27, 2015 07:17. View all revisions
2 | 30 | | #11487

« Back to Developers

Public Lab welcomes and encourages community contributions to our open source software!

This page is intended to:

  1. List software projects that Public Lab has incubated and provide links to source code.
  2. Collect software development guidelines and best practices for Public Lab projects.
  3. Help newcomers figure out how and where to start contributing!

Getting started

Quick tips for getting involved with the Public Lab codebases:

  1. Set up a GitHub account and install git.

    If you're not familiar with git, a popular version control software, you can try it out at https://try.github.io.

    Speaking of GitHub...right now, all of Public Lab's open source code is located on GitHub, a website which hosts git repositories. Setting up a GitHub account is the first step to getting involved with Public Lab's code (and lots of other code).

  2. Join the Public Lab developers mailing list

Contribution Guidelines

Public Lab software is written in many languages, and each project may have its own guidelines for contributors. These broad guidelines should serve as general principles to guide your approach to a new Public Lab codebase.

Contributing using git

Check out this article on GitHub flow, a routine that works great on all git projects and makes Public Lab development super smooth.

A sample git workflow

Let's say that a developer and PublicLab community member named Susan decides that she wants to add a feature to MapKnitter. Here's what Susan's workflow might look like:

  1. Fork the publiclab/mapknitter repo.
  2. Clone the forked repository susan/mapknitter. This downloads a copy of Susan's version of mapknitter to her computer.
  3. Create a branch for the new feature (a feature branch). Let's say that Susan wanted users to be able to tag maps. She might then create and checkout a new branch called add-map-tags with: git checkout -b add-map-tags.
  4. Develop the new feature in the add-map-tags feature branch.
  5. When Susan is done developing the new feature, she switches back to the master branch of her own repository: git checkout master, and then pulls the latest version of mapknitter down from the publiclab repo with git pull publiclab master.
  6. Susan applies her new feature on top of the latest version of mapknitter: git rebase add-map-tags --onto master. This is the great strength of doing development in a feature branch - it allows Susan to merge her changes into the latest public version of mapknitter on her own computer and to resolve any conflicts locally..
  7. After rebasing, Susan's local master branch contains the latest version of mapknitter with her new feature added on top. The new feature is ready, so Susan submits a pull request on GitHub.
  8. Susan discusses her code with others. After any questions or change requests have been resolved, Susan's request is merged in, and her contribution becomes part of MapKnitter!

A few notes - some git best practices that will make all of our lives easier:

  • Remember to pull from master before you start working. This helps keep your local repository in sync with the code that everyone else is working on.
  • Always do development in a feature branch. This makes it much easier for project maintainers to merge your contributions into the trunk. The name of your branch is displayed when it is merged in to the main trunk, which means that it serves as built-in documentation for your feature. This works great when you give your feature branches descriptive names! Some example branch names:
    • donation-button-redesign
    • markdown-package-update
    • fix#44 (fixes GitHub issue #44 in this repository)
  • Open a pull request early! In fact, feel free to open a pull request as soon as you start working on a new feature or bugfix. GitHub's pull request pages make it easy to see progress that's been made on an issue, and it's a great way to start an open and ongoing discussion with the project's maintainers and other contributors about your work.

Contributing to Ruby projects

Contributing to JavaScript projects

Public Lab Software

Project Description Source Code
MapKnitter Assemble aerial images into maps. github:publiclab/mapknitter
Spectral Workbench Material analysis using DIY spectrometry. github:spectral-workbench
Leaflet.Illustrate Leaflet plugin built for MapKnitter. Enables text annotations on Leaflet maps. github:manleyjster/Leaflet.Illustrate
Leaflet.DistortableImage Leaflet plugin built for MapKnitter. Enables images to be distorted. github:publiclab/Leaflet.DistortableImage
publiclab.org This very website! github:publiclab/plots2
Infragram Analyze plant health with infrared imagery. github:p-v-o-s/infragram-js