# :gear: Universal Project Manager
Upman is a CLI tool that provides OS and language independent commands for all aspects of project management.
![Crates.io Total Downloads](https://img.shields.io/crates/d/upman?logo=rust&label=Downloads&labelColor=blue)
![Screenshot 2024-11-17 173152](https://github.com/user-attachments/assets/37b8c420-a04a-4ab0-82e3-3809ea0e16f5)
![Windows OS Compatible](https://img.shields.io/badge/Windows-0078D6?style=flat&logo=windows&logoColor=white)
![Mac OS Compatible](https://img.shields.io/badge/macOS-000000?style=flat&logo=apple&logoColor=white)
![Linux OS Compatible](https://img.shields.io/badge/Linux-FCC624?style=flat&logo=linux&logoColor=black)
[View on Crates.io](https://crates.io/crates/upman)
## 🛠️ Installation
### Method #1 (Manual Installation)
Install the binary from Releases for your OS, and place it in a folder recognized by your PATH or add it's location to your PATH.
### Method #2 (Automatic Installation - Crates.io - requires Rust)
Open a terminal (with Rust installed on your machine)
```
cargo install upman
```
### Method #3 (Build from the repo - requires Rust)
Open a terminal (with Rust installed on your machine)
```
git clone https://github.com/james-kaddissi/universal_project_manager.git
cd universal_project_manager
cargo build
```
## :page_facing_up: Command Guide
### Project Creation
```
upman new *FLAGS*
```
##### - The desired name of the project/root directory.
##### - The main programming language of the project.
##### *FLAGS* - add any amount of these flags to include in project creation. (Flags can be set to true by default in your config file)
- **--git** - initializes the directory as a git repository
- **--ignore** - initializes a .gitignore in the root directory
- **--venv** - initializes a virtual environment in the root directory
- **--license** - initializes your default license (set in your config file) in the root directory
- **--readme** - initializes a README.md in your root directory
- **--tests** - initializes a tests directory in your root directory
- **--docs** - initializes a docs directory in your root directory
- **--docker** - initializes docker in the project
#### Project creation from an existing directory
```
upman init
```
---
### Package Management
_Only works with languages that have a package manager (pip, cargo, npm, etc.)_
```
upman add
```
##### - the desired name of the package to be added.
---
### Project Execution
```
upm run
```
##### Runs the main entry point of the project
---
### Preferences Configuration
```
upm config
```
##### - defines what configuration you'd like to change
##### - specifies the specific value to change or change too
**Modifiers:**
- _main_ - sets the main path of the project. Argument is the path.
- _defaults_ - toggles the specified (argument) default flag to true or false. Arguments: (git, ignore, docs, etc.)
- _editor_ - sets your default code editor. Argument is the editor name.
- _license_ - sets your default license. Argument is the license name.
- _warnings_ - toggle on or off various warnings. Argument is the warning name (shown in the warning message itself)
---
### Project Management
```
upm open
```
##### Opens the specified PROJECT in the terminal and default editor
```
upm delete
```
##### Deletes the specified PROJECT from your projects list
```
upm list
```
##### Lists specifics about the entered ARGUMENT (editors, templates, licenses, projects, preferences, languages)
---
### Miscellaneous Tools
```
upm template **PROJECT_NAME** **PROJECT_LANGUAGE** **PROJECT_MAIN**
```
###### - which template feature to use (save, create, delete)
###### - name of the template you are modifying
**PROJECT_NAME** **PROJECT_LANGUAGE** **PROJECT_MAIN** - Specifies the details of project creation (only required with the create ACTION)
- **Save** - saves the current directory as a template under the specified name
- **Create** - creates a UPM project using the specified template
- **Delete** - deletes the specified template from your saved templates
```
upm script **SCRIPT_PATH**
```
##### - which script feature to use (save, delete, add)
##### - name of the script you are modifying
**SCRIPT_PATH** - Specifies the path of the script to save (only required with the save ACTION)
- **Save** - saves the script at the specified path under the specified name
- **Delete** - deletes the specified script from your saved scripts
- **Add** - adds the specified script to your current working directory
```
upm secrets
```
##### - which secrets feature to use (save/add, delete/remove, show)
##### - the name of the secret to modify
##### the value of the specified secret
- **Save/Add** - Adds a new secret with NAME and VALUE to your .env
- **Delete/Remove** - Removes the specified secret from your .env
- **Show** - Lists the secrets in your .env