Skip to main content

Write once, package everywhere

Project description

Why another packaging thing?

One of the most frustrating aspects of starting a new project is figuring out how to package it for release. No matter what shiny framework you have, once you leave the safety of generating a plain old binary, all bets are off and you’re left to figure out how to get said binary to your customers.

What’s more, it’s a problem that rarely needs to be solved more than once, and so many of the resources on the subject are few and far between, which makes it all the more frustrating.

The goal of Packthing is to create a language-agnostic, high-level integration tool that does the work for you, making your application fit for human consumption. It intends to support interoperability between:

  • Multiple version control systems

  • Many output formats (windows installer, mac bundle, pkg, tar, debian, rpm, apk, and so on and so forth).

  • Many build systems

Famously described as a glorified convenience wrapper, packthing is here to make your life easy.

It’s a super project!

Multiple version control systems

Say someone wrote an awesome Python app with Mercurial for version control, someone else wrote a cool C++ app using bjam, and yet another person wrote a native C app using scons and SVN. Packthing let’s you ignore for a moment that they all came from different places.

Packthing projects use version control, but exist outside of it, forming a super repository of smaller projects, defined by a JSON file.

{
    "info": {
        "org": "bazzbar industries",
        "name": "Frobnicator",
        "package": "frob",
        "url": "http://frobby.io"
    },
    "repo": [
        {
            "path": "frobtool",
            "url": "https://github.com/frob/frobtool.git",
            "type": "qmake",
            "master": true,
            "icon": "icons/propellerhat.png"
        },
        {
            "path": "frobdocs",
            "url": "https://github.com/frob/frob-docs.git",
            "type": "dir"
        }
    ]
}

Packthing then fetchs the dependencies and auto-populates all the needed information to package the project for a variety of formats.

Multiple package formats

Build your application into a windows installer, mac bundle, pkg, tar, Debian RPM, APK, and many more. packthing provides a generic abstraction between the build system and the packaging system, so you can all but forget what the final project layout actually looks like.

Future

At present, the focus has been on supporting Qt applications, but there are other multiply cross-platform environments where a tool such as this would be useful. Possible future targets include:

  • scons (C++)

  • distutils (Python)

  • CMake

Packthing does not attempt to support every possible configurations all of the time. Rather, it’s goal is to do a good enough job for more common use cases first, with the possibility of finer-grained controls in the future.

So use packthing because you want to get the thing out the door. Now, please!

NOTE: Packthing is in the early stages of development. Currently only triplets including Git and Qt are supported.

Usage

Setting up your project to use packthing

First, write up a config file for your project, and save as packthing.json. This file should be checked in to your project but does not depend on your project. You should be able to download the config file separately to use packthing.

This config will include a single project repository. packthing is useful for both single- and multi-repository projects!

Building a package

Type packthing -h or packthing --help to get a nice pretty help output.

usage: packthing [-h] [-r REPO] [-c DIR] [-l LEVEL] [-a NAME] [--list-src]
               [--list-build] [-j JOBS] [--refresh]
               [TARGET]

packthing - make working with your project more complicated

...

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

packthing-0.2.2.zip (27.9 kB view details)

Uploaded Source

packthing-0.2.2.tar.gz (15.3 kB view details)

Uploaded Source

File details

Details for the file packthing-0.2.2.zip.

File metadata

  • Download URL: packthing-0.2.2.zip
  • Upload date:
  • Size: 27.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for packthing-0.2.2.zip
Algorithm Hash digest
SHA256 5a2f3bcfe1f95b6777fdc92baa9ae547c93a82ee2135a684f11b2760faab9167
MD5 906eb356406d4e484cd35c14aa26b38b
BLAKE2b-256 3821836b7d12861d86b7f869d2176ae3ad6c316d0b827292a977456bd3badb02

See more details on using hashes here.

File details

Details for the file packthing-0.2.2.tar.gz.

File metadata

  • Download URL: packthing-0.2.2.tar.gz
  • Upload date:
  • Size: 15.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for packthing-0.2.2.tar.gz
Algorithm Hash digest
SHA256 2f6fe3193f8f4a0ed70faa8d123fc3d97a10e783de8d40cca772a3440f8c8a04
MD5 d57c1955949b1a4bc9d7b9ec82a6b246
BLAKE2b-256 444950e48a45cf062df9ab76985f1851138349470bad71464d0935b26506c8a4

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page