|
| 1 | +# Universal Project Manager |
| 2 | + |
| 3 | +[](https://github.com/hyperpolymath/Universal-Project-Manager/actions/workflows/ci.yml) |
| 4 | +[](https://github.com/hyperpolymath/Universal-Project-Manager/actions/workflows/codeql.yml) |
| 5 | +[](https://opensource.org/licenses/MIT) |
| 6 | + |
| 7 | +A comprehensive, language-agnostic CI/CD framework that automatically detects project configurations and provides unified scripts for building, testing, and deploying across multiple platforms. |
| 8 | + |
| 9 | +## Features |
| 10 | + |
| 11 | +- **Auto-Detection**: Automatically detects programming languages, package managers, test frameworks, and build systems |
| 12 | +- **Multi-Language Support**: JavaScript/TypeScript, Python, Ruby, Go, Rust, Java/Kotlin, C/C++, C#, PHP, and more |
| 13 | +- **Platform Agnostic**: Works with GitHub Actions and GitLab CI out of the box |
| 14 | +- **Mirror Sync**: Event-driven repository mirroring between platforms |
| 15 | +- **Unified Scripts**: Single set of scripts that work across all CI platforms |
| 16 | + |
| 17 | +## Quick Start |
| 18 | + |
| 19 | +### 1. Copy CI Scripts |
| 20 | + |
| 21 | +Copy the `ci-scripts/` directory to your project: |
| 22 | + |
| 23 | +```bash |
| 24 | +cp -r ci-scripts/ /path/to/your/project/ |
| 25 | +chmod +x /path/to/your/project/ci-scripts/*.sh |
| 26 | +``` |
| 27 | + |
| 28 | +### 2. Run Detection |
| 29 | + |
| 30 | +```bash |
| 31 | +./ci-scripts/detect.sh |
| 32 | +``` |
| 33 | + |
| 34 | +Output: |
| 35 | +``` |
| 36 | +[INFO] Detecting project configuration in: /your/project |
| 37 | +[SUCCESS] Detection complete! |
| 38 | +
|
| 39 | +Languages detected: javascript,typescript |
| 40 | +Primary language: javascript |
| 41 | +Package managers: npm |
| 42 | +Test frameworks: jest |
| 43 | +Build systems: npm-scripts,webpack |
| 44 | +``` |
| 45 | + |
| 46 | +### 3. Setup Dependencies |
| 47 | + |
| 48 | +```bash |
| 49 | +./ci-scripts/setup.sh |
| 50 | +``` |
| 51 | + |
| 52 | +### 4. Run Tests |
| 53 | + |
| 54 | +```bash |
| 55 | +./ci-scripts/test.sh --coverage |
| 56 | +``` |
| 57 | + |
| 58 | +### 5. Lint Code |
| 59 | + |
| 60 | +```bash |
| 61 | +./ci-scripts/lint.sh |
| 62 | +# Or with auto-fix: |
| 63 | +./ci-scripts/lint.sh --fix |
| 64 | +``` |
| 65 | + |
| 66 | +### 6. Build |
| 67 | + |
| 68 | +```bash |
| 69 | +./ci-scripts/build.sh --release |
| 70 | +``` |
| 71 | + |
| 72 | +## CI Scripts Reference |
| 73 | + |
| 74 | +| Script | Description | Options | |
| 75 | +|--------|-------------|---------| |
| 76 | +| `detect.sh` | Detects project configuration | `json` - Output as JSON | |
| 77 | +| `setup.sh` | Installs project dependencies | - | |
| 78 | +| `test.sh` | Runs test suites | `--coverage`, `--verbose`, `--ci` | |
| 79 | +| `lint.sh` | Runs code linters | `--fix`, `--verbose` | |
| 80 | +| `build.sh` | Builds the project | `--release`, `--debug` | |
| 81 | +| `sync-mirror.sh` | Syncs to mirror repository | `--mirror-url`, `--dry-run` | |
| 82 | +| `verify-mirror.sh` | Verifies mirror sync | `--source`, `--mirror` | |
| 83 | + |
| 84 | +## Supported Languages |
| 85 | + |
| 86 | +| Language | Package Manager | Test Framework | Linter | |
| 87 | +|----------|----------------|----------------|--------| |
| 88 | +| JavaScript/TypeScript | npm, yarn, pnpm, bun | Jest, Mocha, Vitest, AVA | ESLint, Prettier | |
| 89 | +| Python | pip, pipenv, poetry | pytest, unittest, tox | Ruff, Flake8, Black, mypy | |
| 90 | +| Ruby | Bundler | RSpec, Minitest | RuboCop | |
| 91 | +| Go | Go Modules | go test | golangci-lint, go vet | |
| 92 | +| Rust | Cargo | cargo test | clippy, rustfmt | |
| 93 | +| Java/Kotlin | Maven, Gradle | JUnit | Checkstyle, SpotBugs | |
| 94 | +| C/C++ | CMake, Make | - | clang-format | |
| 95 | +| C#/.NET | NuGet | xUnit, NUnit | dotnet format | |
| 96 | +| PHP | Composer | PHPUnit | PHP-CS-Fixer, PHPStan | |
| 97 | + |
| 98 | +## CI/CD Integration |
| 99 | + |
| 100 | +### GitHub Actions |
| 101 | + |
| 102 | +The included `.github/workflows/ci.yml` provides: |
| 103 | + |
| 104 | +- Automatic language detection |
| 105 | +- Matrix testing across OS and language versions |
| 106 | +- Dependency caching |
| 107 | +- Code coverage reporting |
| 108 | +- Build artifact uploads |
| 109 | +- Docker image builds |
| 110 | +- Automatic releases on tags |
| 111 | +- Event-driven mirror sync |
| 112 | + |
| 113 | +### GitLab CI |
| 114 | + |
| 115 | +The included `.gitlab-ci.yml` provides: |
| 116 | + |
| 117 | +- Language-specific job templates |
| 118 | +- Parallel test execution |
| 119 | +- Coverage reporting |
| 120 | +- Container Registry integration |
| 121 | +- GitLab Pages deployment |
| 122 | +- Release automation |
| 123 | + |
| 124 | +## Repository Mirroring |
| 125 | + |
| 126 | +### Setup (GitHub to GitLab) |
| 127 | + |
| 128 | +1. Generate an SSH key: |
| 129 | + ```bash |
| 130 | + ssh-keygen -t ed25519 -C "github-to-gitlab-mirror" -f gitlab_mirror_key |
| 131 | + ``` |
| 132 | + |
| 133 | +2. Add the public key to GitLab as a deploy key with write access |
| 134 | + |
| 135 | +3. Add secrets to GitHub: |
| 136 | + - `GITLAB_SSH_PRIVATE_KEY`: Contents of `gitlab_mirror_key` |
| 137 | + - `GITLAB_MIRROR_URL`: `git@gitlab.com:your/repo.git` |
| 138 | + |
| 139 | +4. Push to main/master to trigger sync |
| 140 | + |
| 141 | +See [SECRETS.md](SECRETS.md) for detailed instructions. |
| 142 | + |
| 143 | +## Project Structure |
| 144 | + |
| 145 | +``` |
| 146 | +. |
| 147 | +├── ci-scripts/ |
| 148 | +│ ├── detect.sh # Project detection |
| 149 | +│ ├── setup.sh # Dependency setup |
| 150 | +│ ├── test.sh # Test runner |
| 151 | +│ ├── lint.sh # Linter runner |
| 152 | +│ ├── build.sh # Build script |
| 153 | +│ ├── sync-mirror.sh # Mirror sync |
| 154 | +│ └── verify-mirror.sh # Mirror verification |
| 155 | +├── tests/ |
| 156 | +│ ├── test_detect.bats # BATS tests |
| 157 | +│ └── run_tests.sh # Test runner |
| 158 | +├── .github/ |
| 159 | +│ ├── workflows/ |
| 160 | +│ │ ├── ci.yml # Main CI workflow |
| 161 | +│ │ └── codeql.yml # Security scanning |
| 162 | +│ └── dependabot.yml # Dependency updates |
| 163 | +├── .gitlab-ci.yml # GitLab CI config |
| 164 | +├── TODO.md # Project TODO list |
| 165 | +├── SECRETS.md # Secrets documentation |
| 166 | +├── ROADMAP.adoc # Project roadmap |
| 167 | +└── README.md # This file |
| 168 | +``` |
| 169 | + |
| 170 | +## Configuration |
| 171 | + |
| 172 | +### Environment Variables |
| 173 | + |
| 174 | +| Variable | Description | Default | |
| 175 | +|----------|-------------|---------| |
| 176 | +| `PROJECT_ROOT` | Project root directory | Script's parent dir | |
| 177 | +| `CI` | CI environment flag | `false` | |
| 178 | +| `COVERAGE` | Enable coverage reporting | `false` | |
| 179 | +| `VERBOSE` | Enable verbose output | `false` | |
| 180 | +| `FIX` | Auto-fix lint issues | `false` | |
| 181 | +| `BUILD_MODE` | Build mode (`release`/`debug`) | `release` | |
| 182 | + |
| 183 | +### Future: Configuration File |
| 184 | + |
| 185 | +Support for a `upm.yml` configuration file is planned: |
| 186 | + |
| 187 | +```yaml |
| 188 | +version: 1 |
| 189 | + |
| 190 | +project: |
| 191 | + name: my-project |
| 192 | + type: nodejs # Override auto-detection |
| 193 | + |
| 194 | +ci: |
| 195 | + test: |
| 196 | + coverage: true |
| 197 | + parallel: true |
| 198 | + lint: |
| 199 | + fix: false |
| 200 | +``` |
| 201 | +
|
| 202 | +## Security |
| 203 | +
|
| 204 | +- **CodeQL**: Automated security scanning |
| 205 | +- **Dependabot**: Automated dependency updates |
| 206 | +- **SAST**: Static Application Security Testing |
| 207 | +
|
| 208 | +See [SECURITY.md](SECURITY.md) for security policy. |
| 209 | +
|
| 210 | +## Contributing |
| 211 | +
|
| 212 | +Contributions are welcome! Please read [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) first. |
| 213 | +
|
| 214 | +1. Fork the repository |
| 215 | +2. Create a feature branch |
| 216 | +3. Make your changes |
| 217 | +4. Run tests: `./tests/run_tests.sh` |
| 218 | +5. Submit a pull request |
| 219 | + |
| 220 | +## Roadmap |
| 221 | + |
| 222 | +See [ROADMAP.adoc](ROADMAP.adoc) for the full roadmap. |
| 223 | + |
| 224 | +### MVP v1.0 Goals |
| 225 | + |
| 226 | +- [x] Auto-detection for 10+ languages |
| 227 | +- [x] GitHub Actions workflow |
| 228 | +- [x] GitLab CI configuration |
| 229 | +- [x] Mirror sync support |
| 230 | +- [ ] Configuration file support |
| 231 | +- [ ] CLI wrapper tool |
| 232 | + |
| 233 | +## License |
| 234 | + |
| 235 | +This project is licensed under the MIT License - see [LICENSE](LICENSE) for details. |
| 236 | + |
| 237 | +## Acknowledgments |
| 238 | + |
| 239 | +- Inspired by the need for unified CI/CD across multiple platforms |
| 240 | +- Thanks to all contributors and users |
| 241 | + |
| 242 | +--- |
| 243 | + |
| 244 | +**Note**: This project is mirrored between: |
| 245 | +- GitHub: https://github.com/hyperpolymath/Universal-Project-Manager |
| 246 | +- GitLab: https://gitlab.com/overarch-underpin/managers/universal-project-manager |
0 commit comments