# Project Structure

## Repository Layout
```
├── buildtestpublish_all.sh    # Master build script for all projects
├── clean.sh                   # Global cleanup script
├── README.md                  # Main project documentation
└── <tool-name>/               # Individual tool directories
```

## Tool Directory Structure

### C++ Projects (CMake-based)
```
<tool-name>/
├── CMakeLists.txt             # CMake configuration
├── build.sh                   # Build script
├── test.sh                    # Test script  
├── clean.sh                   # Cleanup script
├── publish.sh                 # Publishing script
├── install.sh                 # Installation script
├── README.md                  # Tool documentation
├── Dockerfile.dropshell-build # Docker build configuration
├── src/                       # Source code
│   ├── <tool>.cpp            # Main source file
│   ├── version.hpp.in        # Version template
│   └── ...                   # Additional sources
├── build/                     # Build artifacts (generated)
├── output/                    # Final executables (generated)
└── .vscode/                   # VS Code configuration
```

### Shell Script Projects
```
<tool-name>/
├── <tool-name>               # Executable shell script
├── build.sh                  # Build script (may be no-op)
├── test.sh                   # Test script
├── clean.sh                  # Cleanup script
├── publish.sh                # Publishing script
└── setup_script.sh           # Post-install setup (optional)
```

## Standard Files

### Required Scripts
- **build.sh**: Builds the project (Docker for C++, no-op for shell)
- **test.sh**: Runs project tests
- **clean.sh**: Removes build artifacts
- **publish.sh**: Publishes to getpkg.xyz registry

### Optional Files
- **install.sh**: System-wide installation script
- **setup_script.sh**: Post-install setup for getpkg
- **cmake_prebuild.sh**: Pre-build setup for CMake projects

### Generated Directories
- **build/**: CMake build artifacts (C++ projects)
- **output/**: Final executables ready for distribution
- **test_*/**: Test-specific directories

## Naming Conventions
- Tool directories match executable names
- C++ source files typically match project name
- Version templates use `.hpp.in` extension
- Docker files use `Dockerfile.dropshell-build` pattern
- Test directories prefixed with `test_`

## Configuration Files
- **.gitignore**: Standard ignore patterns for build artifacts
- **.vscode/**: VS Code workspace settings
- **CMakeLists.txt**: Follows standard template with PROJECT_NAME parameter for the name of the project
