Code Monkey home page Code Monkey logo

package's Introduction

Metaparticle/Package

Language Idiomatic bindings for building Container Images.

What's this about?

Containers are an optimal way to package and deploy your code. However, teaching developers to learn a new configuration file format, and toolchain, just to package their application in a container is an unnecessary barrier to entry for many programmers just starting out with containers.

Metaparticle/Package simplifies the task of building and deploying container images. Metaparticle/Package is a collection of libraries that enable programmers to build and deploy containers using code that feels familiar to them.

Rather than learn a new set of tools, syntaxes or workflows. The package libraries aim to use language level features to add new capabilities to existing programming languages.

Can you give me an example?

Here's a simple example of building a containerized Java application:

import io.metaparticle.annotations.Package;
import static io.metaparticle.Metaparticle.Containerize;

public class Main {
    @Package(repository="brendanburns",
             jarFile="path/to/my-fat-jar.jar")
    public static void main(String[] args) {
        Containerize(() -> {
            System.out.println("Hello Metaparticle/Package");
        });
    }
}

When you run this program via the java command or your IDE, rather than simply executing your code, this program packages up the Java code in a container, and runs that container.

What languages do you support?

Currently:

But it's fairly straightforward to add other languages, we would love to see contributions.

Details

For more details see the more complete walkthroughs for each language:

Operation

When you link the metaparticle package library into your application, it intercepts and overwrites the main program entry point. This interception performs the following pseudo code:

func main(args []string) {
    if runningInDockerContainer {
        executeOriginalMain(args)
    } else {
        buildDockerImage()
        pushDockerImage()
        if deployRequested {
            deployDockerImage()
        }
    }
}

The net effect of this is that a developer can containerize, distribute and optionally deploy their application without ever leaving the syntax or confines of their development environment and language of choice.

At the same time, metaparticle is not intended to be a platform. Under the hood, the libraries still write Dockerfiles and make calls to the same build and push code. So when a developer wants or needs to switch to the complete container tooling, they can easily take their application with them.

In addition to basic packaging and deployment, metaparticle can also implement more complex distributed system patterns via language fluent semantics.

Contribute

There are many ways to contribute to Metaparticle

  • Submit bugs and help us verify fixes as they are checked in.
  • Review the source code changes.
  • Engage with other Metaparticle users and developers on gitter.
  • Join the #metaparticle discussion on Twitter.
  • Contribute bug fixes.

This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact [email protected] with any additional questions or comments.

package's People

Contributors

brendanburns avatar brendandburns avatar yolocs avatar srini85 avatar xfernando avatar martinpeck avatar pfongkye avatar tomkukral avatar stuartleeks avatar stealthybox avatar vbmade2000 avatar leighciechanowski avatar njoneja avatar yuva29 avatar willpenington avatar willnewby avatar smothiki avatar radu-matei avatar pemmasanikrishna avatar chanezon avatar mikecook avatar michael-k avatar mmacy avatar dazwilkin avatar christopherhein avatar wagoodman avatar apobbati avatar

Watchers

 avatar James Cloos avatar William Murphy avatar  avatar

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.