Git Product home page Git Product logo

profile_tool's Introduction

sputnik environments

This repository contains the proposal for sputnik-environments.

What are environments

In a nutshell, environments are a collection of "things" needed to develop software. They exist to help provide a uniform development environment for a user.

Environments consist of the following components:

  • languages: the programming language used in the project.
  • frameworks: Language specific software layered on top
  • people: Defines custom setup for particular usernames (optional)

Sputnik environments are about optimizing ramp-up time to new developers. An open-source project might publish a sputnik environment for contributors. A company might define an environment to help shorten the onboarding of new team members.

Projects

These are wrapped into a project. A project defines which language the developer is using and any additional resources. These definitions are a very basic yaml file with very few required fields. The general rules proposed are:

  • a project MUST have a primary language
  • a project CAN have secondary languages
  • a project CAN have frameworks
  • a project CAN have external resources

External resources

Frequently when developing more than the most naive of software projects, you need access to external resources. In the past we might spin up a virtual machine but even with current tooling this is a time consuming AND resource intensive process. The alternatives are to install these resources locally or to utilize a shared resource. None of these are ideal.

Projects in sputnik can define a list of containers they would like to have as part of the project. This is done by leveraging linux containers via the docker project. Utilizing the docker.io public registry, a user can pull in any external resources they need such as a database, a memcached server or whatever.

Opinionated minimalism and composition

In each subdirectory there is a README describing the for of the components. You will note that the number of required fields is fairly minimal. This is intentional. A user's development environment is very personal. Dictating that a developer would be required to use a specific editor or directory structure would be insane.

sputnik environments are only opinionated where neccessary. At a minimum you need a project and a language. Your language defintion doesn't even have to do anything. Your project can consist of nothing but installing containers. The flexibility exists for you, the end user, to define what commands are run at what stage to provide a consistent development environment. Your project could call chef or puppet or just make a directory structure for you and install some base packages.

The proposed structure is in place to help scope feedback from the community before tooling is created to make it happen.

Feedback and best practices

The purpose of this repository is to solicit feedback from development communities about "best practices" for developers of that community. As we all know best practices are sometimes neither best or practiced. Our hope is that before the solicitation deadline ends, users of the appropriate communities will contribute to defining the out of the box experience with Sputnik as a developer

How to contribute

There are many ways to contribute:

  • Open issues on this repository with suggestions on proposed definition syntax
  • Fork the repository and propose your own definition for a language
  • Share this initiative with your respective communities
  • Offer insight into how your community or company can use this
  • Be honest and tell us what works and what doesn't

While almost everything is open to modification, we have a few small requirements.

  • The definition format MUST be yaml. YAML was chosen because it allows the appropriate data structures, is both human and machine readable and allows comments.
  • Respect the goals of minimalism and composition defined above
  • This is based on Ubuntu 12.04 amd64 (for now) as the primary use case is for inclusion in the Sputnik laptop.

What's next

At the end of the solictation period, we will curate the best proposals from each community along with any feedback and start developing the first version of the tool.

profile_tool's People

Contributors

lusis avatar nessamurmur avatar

Forkers

codepolish

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.