Skip to content

Latest commit

 

History

History
67 lines (53 loc) · 2.08 KB

README.md

File metadata and controls

67 lines (53 loc) · 2.08 KB

PackageBundler.jl

Experimental bundling of Julia packages and environments into a single artifact that can be installed as a custom Julia package registry by users.

Goals

  • best user experience possible while still achieving the goals below
  • strip original source code from selected packages
  • strip out package commit history
  • strip out package source unrelated to runtime usage by end users
  • generate custom manifests that can load these bundled packages
  • allow multiple versions of the same package to be bundled
  • sign bundled packages and environments to allow verification of integrity
  • easy distribution of bundled packages
  • easy installation of bundled packages
  • native compilation of bundled packages
  • rely on existing package manager infrastructure as much as possible
  • rely on Pkg.Registry for adding bundled packages to user systems
  • don't bundle publicly available package artifacts, just use Pkg
  • minimize the bundled package size
  • declarative configuration using TOML

Non-Goals

  • encrypting bundled source code
  • compiling to native code that is shipped in the bundles

Usage

You can use the below code to generate a starter bundler project

import Pkg
Pkg.activate(; temp = true)
Pkg.add(; url = "https://github.com/PumasAI/PackageBundler.jl")
import PackageBundler
PackageBundler.generate("path/to/my/project")

This will create a new project with some starter configuration to get you started. See below for how to configure a project manually.

Create a PackageBundler.toml file. This file contains the list of project environments to bundle and the specific packages that should have their source code stripped and bundled instead as serialized AST artifacts.

name = "MyCustomBundle"
uuid = "00000000-0000-0000-0000-000000000000"
environments = [
    "environments/one",
    "environments/two",
]
outputs = ["build/MyCustomBundle"]
key = "signing-key"

[packages]
"<uuid>" = "<package name>"

and then generate a bundle with

import PackageBundler
PackageBundler.bundle("PackageBundler.toml")