Development

View as Markdown

Setup

Clone Repository

git clone https://github.com/dsx-ai-factory/fleet-intelligence-agent.git
cd fleet-intelligence-agent

Prerequisites

  • Go: 1.26.6
  • GoReleaser: For building packages (install from goreleaser.com)
  • For ARM64 cross-compilation (optional): gcc-aarch64-linux-gnu and g++-aarch64-linux-gnu

Build

# Build the binary
make fleetint
# Build all targets
make all
# Run tests
make test

Project Structure

fleetint/
├── 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

Building Packages

Packages are built using GoReleaser, which handles .deb, .rpm, and tarball creation automatically.

Install GoReleaser

# Using Homebrew (macOS/Linux)
brew install goreleaser
# Using snap (Linux)
snap install --classic goreleaser
# Or download from https://github.com/goreleaser/goreleaser/releases

Build Snapshot Packages

Build packages without a git tag (for testing):

# Using Make
make package-snapshot
# Or directly with GoReleaser
goreleaser release --snapshot --clean

This creates in the dist/ directory:

  • .deb packages for Debian/Ubuntu (amd64, arm64)
  • .rpm packages for RHEL/Rocky/AlmaLinux 8, 9, 10 (x86_64, aarch64)
  • Binary tarballs for direct installation
  • Checksums and metadata

Create a Release

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.0

The GitHub Actions workflow will:

  • Build packages for all supported platforms (amd64, arm64)
  • Create .deb packages for Ubuntu
  • Create .rpm packages for RHEL/Rocky/AlmaLinux 8, 9, 10
  • Generate binary tarballs
  • Publish the release with all artifacts to GitHub Releases

Testing

Run Tests with Coverage

make test

This runs all tests and generates a coverage report in coverage/coverage.html.

Run Linting

make lint

Runs golangci-lint if installed, otherwise runs basic Go formatting and vet checks.

Format Code

make fmt

Vulnerability Scanning

make vuln

Scans the built binary for known vulnerabilities using govulncheck.

Manual Testing

# 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

Development Workflow

  1. Create a branch for your changes
  2. Make changes and add tests
  3. Run tests: make test
  4. Format code: make fmt
  5. Run linting: make lint
  6. Build locally: make fleetint
  7. Test changes manually
  8. Build packages (optional): make package-snapshot
  9. Submit PR with description of changes

Code Guidelines

  • 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 fmt to format code before committing
  • Keep commits focused and write clear commit messages

Available Make Targets

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

Contributing

See CONTRIBUTING.md for detailed contribution guidelines.