I need something to make sure tarballs are created intelligently and correctly reliably.
Go to file
Leopere 9899387fe7 Initial implementation of tarballer utility with FreeBSD/macOS/Linux support and symlink handling 2025-03-20 13:06:29 -04:00
.gitignore Initial implementation of tarballer utility with FreeBSD/macOS/Linux support and symlink handling 2025-03-20 13:06:29 -04:00
Dockerfile Initial implementation of tarballer utility with FreeBSD/macOS/Linux support and symlink handling 2025-03-20 13:06:29 -04:00
README.md Initial implementation of tarballer utility with FreeBSD/macOS/Linux support and symlink handling 2025-03-20 13:06:29 -04:00
docker-compose.yml Initial implementation of tarballer utility with FreeBSD/macOS/Linux support and symlink handling 2025-03-20 13:06:29 -04:00
go.mod Initial implementation of tarballer utility with FreeBSD/macOS/Linux support and symlink handling 2025-03-20 13:06:29 -04:00
main.go Initial implementation of tarballer utility with FreeBSD/macOS/Linux support and symlink handling 2025-03-20 13:06:29 -04:00

README.md

Tarballer

A simple utility to create tarballs with a specific directory structure.

Features

  • Creates compressed tar archives (.tar.gz) from a source directory
  • Places all files under a specified prefix directory in the tarball
  • Preserves file permissions and directory structure
  • Handles symbolic links correctly
  • Cross-platform compatibility (FreeBSD, macOS, Linux)

Building

This project includes Docker support to build binaries for different platforms:

docker compose up --build build

This will create these binaries in the ./bin directory:

  • tarballer-freebsd: FreeBSD AMD64 compatible binary
  • tarballer-darwin: macOS ARM64 compatible binary
  • tarballer-linux: Linux AMD64 compatible binary

Testing

You can run the included test to verify functionality:

docker compose up --build test

This will:

  1. Create a test directory structure with nested directories and symlinks
  2. Create a tarball from it
  3. Extract the tarball
  4. Verify the contents and file structure, including symlinks

Usage

The usage is the same for all binaries:

./bin/tarballer-<platform> -source /path/to/directory -output myarchive.tar.gz -prefix myprefix

Options

  • -source: The directory you want to compress (required)
  • -output: The name of the output tarball (defaults to "output.tar.gz")
  • -prefix: The directory name that will contain all files in the tarball (defaults to "myapp")

Example

# On macOS:
./bin/tarballer-darwin -source ./myproject -output release.tar.gz -prefix app

# On FreeBSD:
./bin/tarballer-freebsd -source ./myproject -output release.tar.gz -prefix app

When extracted, all files will be under the app/ directory in the tarball.