git clone https://github.com/NVIDIA/fleet-intelligence-agent.git
cd fleet-intelligence-agent- Go: 1.26.2
- GoReleaser: For building packages (install from goreleaser.com)
- For ARM64 cross-compilation (optional):
gcc-aarch64-linux-gnuandg++-aarch64-linux-gnu
# Build the binary
make fleetint
# Build all targets
make all
# Run tests
make testfleetint/
├── cmd/
│ └── fleetint/ # Main CLI application
├── internal/
│ ├── cmdutil/ # Command utilities
│ ├── config/ # Configuration management
│ ├── exporter/ # Data export functionality
│ │ ├── collector/ # Data collection
│ │ ├── converter/ # Format conversion (CSV, OTLP)
│ │ └── writer/ # Output writers (file, HTTP)
│ ├── machineinfo/ # Machine information gathering
│ ├── server/ # HTTP API server
│ └── version/ # Version information
├── deployments/
│ └── packages/ # Package build configurations
│ ├── scripts/ # Install/uninstall scripts
│ └── systemd/ # Systemd service files
└── docs/ # Documentation
Packages are built using GoReleaser, which handles .deb, .rpm, and tarball creation automatically.
# Using Homebrew (macOS/Linux)
brew install goreleaser
# Using snap (Linux)
snap install --classic goreleaser
# Or download from https://github.com/goreleaser/goreleaser/releasesBuild packages without a git tag (for testing):
# Using Make
make package-snapshot
# Or directly with GoReleaser
goreleaser release --snapshot --cleanThis creates in the dist/ directory:
.debpackages for Debian/Ubuntu (amd64, arm64).rpmpackages for RHEL/Rocky/AlmaLinux 8, 9, 10 (x86_64, aarch64)- Binary tarballs for direct installation
- Checksums and metadata
To create an official release, tag a version and push it to GitHub. The GitHub Actions workflow will automatically build and publish the release:
# Tag a version
git tag v0.2.0
# Push the tag to trigger the release workflow
git push origin v0.2.0The GitHub Actions workflow will:
- Build packages for all supported platforms (amd64, arm64)
- Create
.debpackages for Ubuntu - Create
.rpmpackages for RHEL/Rocky/AlmaLinux 8, 9, 10 - Generate binary tarballs
- Publish the release with all artifacts to GitHub Releases
make testThis runs all tests and generates a coverage report in coverage/coverage.html.
make lintRuns golangci-lint if installed, otherwise runs basic Go formatting and vet checks.
make fmtmake vulnScans the built binary for known vulnerabilities using govulncheck.
# Build and run locally
make fleetint
./bin/fleetint scan
# Test with different configurations
./bin/fleetint run --log-level=debug --listen-address=127.0.0.1:8080
# Test offline mode
./bin/fleetint run --offline-mode --path=/tmp/test --duration=00:01:00 --format=csv- Create a branch for your changes
- Make changes and add tests
- Run tests:
make test - Format code:
make fmt - Run linting:
make lint - Build locally:
make fleetint - Test changes manually
- Build packages (optional):
make package-snapshot - Submit PR with description of changes
- Follow standard Go conventions and idioms
- Add tests for new functionality
- Update documentation for user-facing changes
- Ensure all tests pass before submitting PRs
- Use
make fmtto format code before committing - Keep commits focused and write clear commit messages
make help # Show all available targets
make all # Build all binaries
make fleetint # Build fleetint binary
make test # Run tests with coverage
make lint # Run linting tools
make fmt # Format Go code
make vuln # Run vulnerability check
make clean # Clean up binaries and artifacts
make package-snapshot # Build packages (no git tag required)- leptonai/gpud: Upstream dependency providing core monitoring functionality
See CONTRIBUTING.md for detailed contribution guidelines.