This is alpha software! Use at your own risk. While we're working hard to make it stable, bugs are expected. Perfect for learning and prototyping! 🧪
PushBlind is a package manager for Lua-based automation scripts and development tools. It provides a streamlined interface for managing GitHub-hosted packages that define automated actions for software development tasks.
Core Operations:
- Add packages from GitHub repositories
- Install and manage package dependencies
- Execute package actions and workflows
- Update packages to latest versions
- Remove packages when no longer needed
PushBlind is designed for developers who need to:
- Manage automation scripts and development tools
- Download and install packages from GitHub repositories
- Execute automated tasks like building, testing, or deploying
- Keep development tools updated with latest versions
- Create and distribute custom automation packages
- Run package-defined actions through a unified CLI interface
- GitHub Integration - Direct package installation from GitHub repositories
- Action-Based System - Execute specific actions defined by packages
- Git Customization - Configurable git commands for cloning and updating
- Cross-platform Support - Compatible with Windows and Linux systems
- Minimal Configuration - Simple setup with customizable git operations
- Package Isolation - Each package is managed independently
- Extensible Actions - Packages can define custom actions beyond install/update/remove
Want to create your own packages for PushBlind? Check the package_sample/
directory for examples showing how to create package definitions with action functions using the PushBlind.actions
namespace.
File | What is |
---|---|
pushblind.out | Linux Static Binary |
pushblindi32.exe | Windows 32-bit Binary |
pushblind.deb | Debian Package |
pushblind.rpm | RPM Package |
extension.c | VibeScript Extension Source |
Documentation | Description |
---|---|
Build from Source | Complete guide to building PushBlind from source |
CLI Usage Guide | Comprehensive CLI commands and usage examples |
Package Creation | How to create your own PushBlind packages |
Click here CLI Commands Reference to see the complete list of available commands.
PushBlind uses git internally to manage packages. You can customize which git commands it uses:
pushblind set_git_clone "git clone"
pushblind set_git_pull "git pull"
Add a package from a GitHub repository:
pushblind add <repository_url> <entry_file> --name <package_name>
# Examples:
pushblind add https://github.com/OUIsolutions/public_oui_packages.git all.lua --name public_oui
pushblind add https://github.com/example/my-package.git main.lua --name my_package
Install or set up a package for use:
pushblind install <package_name>
# Example:
pushblind install public_oui
Update a package to the latest version:
pushblind update <package_name>
# Example:
pushblind update public_oui
Remove a package and its files:
pushblind remove <package_name>
# Example:
pushblind remove public_oui
Execute specific actions from installed packages:
pushblind <action_name> <package_name>
# Example:
pushblind build_project public_oui
Create a Lua file with action functions using the PushBlind.actions
namespace:
-- Required action: Install the package
function PushBlind.actions.install()
print("Installing my package...")
-- Add your installation logic here
-- This might include:
-- - Creating necessary directories
-- - Downloading dependencies
-- - Setting up configuration files
-- - Installing system dependencies
print("Package installed successfully!")
end
-- Required action: Update the package
function PushBlind.actions.update()
print("Updating my package...")
-- Add your update logic here
-- This might include:
-- - Pulling latest configurations
-- - Updating dependencies
-- - Migrating settings
print("Package updated successfully!")
end
-- Required action: Remove the package
function PushBlind.actions.remove()
print("Removing my package...")
-- Add your removal logic here
-- This might include:
-- - Cleaning up created files
-- - Removing installed dependencies
-- - Restoring previous configurations
print("Package removed successfully!")
end
-- Custom action example: Build a project
function PushBlind.actions.build_project()
print("Building project...")
-- Add build logic here
print("Project built successfully!")
end
function PushBlind.actions.install()
print("Installing binary tool...")
-- Download and install a binary tool
os.execute('curl -L https://example.com/tool.out -o tool.out')
os.execute("sudo chmod +x tool.out")
os.execute("sudo mv tool.out /usr/bin/tool")
print("Tool installed successfully!")
end
function PushBlind.actions.update()
print("Updating binary tool...")
-- Update to latest version
os.execute('curl -L https://example.com/tool.out -o tool.out')
os.execute("sudo chmod +x tool.out")
os.execute("sudo mv tool.out /usr/bin/tool")
print("Tool updated successfully!")
end
function PushBlind.actions.install()
print("Meta package cannot be directly installed")
print("Use update action to add component packages")
end
function PushBlind.actions.update()
print("Adding component packages...")
-- Add multiple related packages from the same repository
PushBlind.add_package({
repo = PushBlind.same, -- Refers to the current repository
filename = "component1.lua",
name = "component1",
force = false -- Don't re-clone if already exists
})
PushBlind.add_package({
repo = PushBlind.same,
filename = "component2.lua",
name = "component2",
force = false
})
print("Meta package components added!")
end
- Use PushBlind.actions namespace for all action functions
- Implement required actions (
install
,update
,remove
) - Handle errors gracefully and provide meaningful feedback
- Use absolute paths when possible to avoid directory issues
- Clean up temporary files after installation
- Test all actions thoroughly before publishing
- Document package requirements and dependencies
- Provide clear user feedback about what the package is doing
- Use descriptive filenames that match the package purpose
- Common patterns:
package_name.lua
,main.lua
,all.lua
- Keep filenames simple and without spaces
- Create your package file in a GitHub repository
- Add it to PushBlind:
pushblind add https://github.com/user/repo package.lua --name test_package
- Install it:
pushblind install test_package
- Test custom actions:
pushblind your_action test_package
- Update it:
pushblind update test_package
- Remove if needed:
pushblind remove test_package
Before building, ensure you have:
curl
- for downloading dependenciesgcc
- for compiling C code- Darwin build system (version 0.12.0)
- KeyObfuscate for generating security keys
To compile all available output formats at once:
darwin run_blueprint --target all
This generates the following files in the release/
directory:
pushblind.deb
- Debian packagepushblind_extension.c
- C extension sourcepushblindi32.exe
- Windows 32-bit executablepushblind.out
- Linux binarypushblind.rpm
- RPM package
Target | Command | Output | Description |
---|---|---|---|
.deb |
darwin run_blueprint --target .deb |
release/debian_static.deb |
Debian package |
extension |
darwin run_blueprint --target extension |
release/extension.c |
C extension source |
linux_bin |
darwin run_blueprint --target linux_bin |
release/pushblind.out |
Static Linux binary |
local_unix_bin |
darwin run_blueprint --target local_unix_bin |
release/local_unix_bin.out |
Local Unix binary |
.rpm |
darwin run_blueprint --target .rpm |
release/rpm_static_build.rpm |
RPM package |
.exe |
darwin run_blueprint --target .exe |
release/ouivibei32.exe |
Windows executable |
If you prefer to compile the extension manually:
- Generate the extension:
darwin run_blueprint --target extension
- Compile with GCC:
gcc dependencies/vibescript.c \
-DCONTENT_ENCRYPT_KEY=\"../keys/content.h\" \
-DLLM_ENCRYPT_KEY=\"../keys/llm.h\" \
-DNAME_ENCRYPT_KEY=\"../keys/name.h\" \
-DVIBE_EXTENSION_MODULE=\"../release/pushblind_extension.c\" \
-DVIBE_EXTENSION_FUNC=pushblind \
-DVIBE_EXTENSION_LIB_NAME=\"pushblind\" \
-o pushblind
~/.pushblind/
├── packages/ # Downloaded package repositories
│ └── package_name/ # Individual package directories
└── names/ # Package name mappings
└── *.txt # Name mapping files
This project is licensed under the MIT License - see the LICENSE file for details.