0x1d 6b0ba2edc7
Some checks failed
CI / Test (pull_request) Failing after 46s
CI / Lint (pull_request) Failing after 5s
CI / Build (pull_request) Successful in 14s
CI / Format Check (pull_request) Successful in 3s
fix: improve CI workflow for Gitea compatibility and test detection
- Improve test file detection with more robust find command
  - Use explicit variable assignment instead of pipe to grep
  - Add debug output to show found test files
  - Handle errors gracefully with 2>/dev/null || true

- Downgrade actions for Gitea compatibility
  - upload-artifact@v4 -> v3 (Gitea doesn't support v4+)
  - codecov-action@v4 -> v3 (preventive downgrade)

- Add Alpine Linux build dependencies installation step
  - Install build-base and musl-dev when running on Alpine
  - Required for CGO-enabled builds and race detector

- Disable CGO for verify build step when no tests exist
  - Avoids requiring C build tools for simple compilation check
2025-11-05 12:57:04 +01:00
2025-11-05 11:19:24 +01:00
2025-11-05 11:00:36 +01:00
2025-11-05 11:19:24 +01:00

Go Platform (goplt)

Plugin-friendly SaaS/Enterprise Platform Go Edition

A modular, extensible platform built with Go that provides a solid foundation for building scalable, secure, and observable applications. The platform supports plugin-based architecture, enabling teams to build feature modules independently while sharing core services.

🏗️ Architecture Overview

Go Platform follows Clean/Hexagonal Architecture principles with clear separation between:

  • Core Kernel: Foundation services (authentication, authorization, configuration, logging, observability)
  • Module Framework: Plugin system for extending functionality
  • Infrastructure Adapters: Support for databases, caching, event buses, and job scheduling
  • Security-by-Design: Built-in JWT authentication, RBAC/ABAC authorization, and audit logging
  • Observability: OpenTelemetry integration for tracing, metrics, and logging

Key Principles

  • Clean Architecture: Separation between pkg/ (interfaces) and internal/ (implementations)
  • Dependency Injection: Using uber-go/fx for lifecycle management
  • Microservices-Ready: Each module is an independent service from day one
  • Plugin-First Design: Extensible architecture supporting static and dynamic module loading
  • Security-by-Design: JWT authentication, RBAC/ABAC, and audit logging
  • Observability: OpenTelemetry, structured logging, and Prometheus metrics

📁 Directory Structure

goplt/
├── cmd/
│   └── platform/          # Main application entry point
├── internal/              # Private implementation code
│   ├── di/                # Dependency injection container
│   ├── registry/          # Module registry
│   ├── pluginloader/      # Plugin loader (optional)
│   ├── config/            # Configuration implementation
│   ├── logger/            # Logger implementation
│   ├── infra/             # Infrastructure adapters
│   └── ent/               # Ent ORM schemas
├── pkg/                   # Public interfaces (exported)
│   ├── config/            # ConfigProvider interface
│   ├── logger/            # Logger interface
│   ├── module/             # IModule interface
│   ├── auth/              # Auth interfaces
│   ├── perm/              # Permission DSL
│   └── infra/             # Infrastructure interfaces
├── modules/               # Feature modules
│   └── blog/              # Sample Blog module (Epic 4)
├── config/                # Configuration files
│   ├── default.yaml
│   ├── development.yaml
│   └── production.yaml
├── api/                   # OpenAPI specs
├── scripts/               # Build/test scripts
├── docs/                  # Documentation
├── ops/                   # Operations (Grafana dashboards, etc.)
└── .github/
    └── workflows/
        └── ci.yml

🚀 Quick Start

Prerequisites

  • Go 1.24+: Install Go
  • Make: For using development commands
  • Docker (optional): For containerized development

Installation

  1. Clone the repository

    git clone git.dcentral.systems/toolz/goplt.git
    cd goplt
    
  2. Install dependencies

    go mod download
    
  3. Build the platform

    make build
    
  4. Run the platform

    ./bin/platform
    # Or
    go run cmd/platform/main.go
    

Configuration

The platform loads configuration from multiple sources with the following precedence:

  1. Environment variables (highest priority)
  2. Environment-specific YAML files (config/development.yaml, config/production.yaml)
  3. Base configuration file (config/default.yaml)

Example environment variables:

export SERVER_PORT=8080
export DATABASE_DSN="postgres://user:pass@localhost/dbname"
export LOGGING_LEVEL=debug

🛠️ Development

Make Commands

make help          # Show all available commands
make test          # Run all tests
make test-coverage # Run tests with coverage report
make lint          # Run linters
make fmt           # Format code
make fmt-check     # Check code formatting
make build         # Build platform binary
make clean         # Clean build artifacts
make docker-build  # Build Docker image
make docker-run    # Run Docker container
make verify        # Verify code (fmt, lint, test)

Running Tests

# Run all tests
make test

# Run tests with coverage
make test-coverage

# Run tests for a specific package
go test ./internal/config/...

Code Quality

The project uses:

  • golangci-lint: For comprehensive linting
  • gofmt: For code formatting
  • go vet: For static analysis

Run all checks:

make verify

📚 Documentation

Comprehensive documentation is available in the docs/ directory:

View Documentation Locally

# Using MkDocs (requires Python)
make docs-install
make docs-serve

# Using Docker (no Python required)
make docs-docker

Documentation will be available at http://127.0.0.1:8000

🏛️ Architecture

Core Kernel

The platform provides a core kernel with essential services:

  • Configuration Management: Hierarchical configuration with YAML and environment variable support
  • Structured Logging: JSON-formatted logs with request correlation
  • Dependency Injection: FX-based DI container for service lifecycle management
  • Health & Metrics: Health check endpoints and Prometheus metrics
  • Error Handling: Centralized error handling with proper error wrapping

Module System

Modules extend the platform's functionality by implementing the IModule interface:

type IModule interface {
    Name() string
    Version() string
    Initialize(ctx context.Context, app *Application) error
    Routes() []Route
    Permissions() []Permission
}

Security

  • Authentication: JWT-based authentication with access and refresh tokens
  • Authorization: RBAC/ABAC authorization system
  • Audit Logging: Immutable audit trail for security-relevant actions
  • Rate Limiting: Configurable rate limiting per endpoint

Observability

  • Distributed Tracing: OpenTelemetry integration for request tracing
  • Metrics: Prometheus metrics for monitoring
  • Structured Logging: JSON-formatted logs with correlation IDs
  • Health Checks: Kubernetes-ready health and readiness endpoints

🔧 Configuration

Configuration is managed through YAML files and environment variables. See config/default.yaml for the base configuration structure.

Key configuration sections:

  • Server: HTTP server settings (port, host, timeouts)
  • Database: Database connection settings
  • Logging: Log level, format, and output destination
  • Authentication: JWT settings and token configuration

🧪 Testing

The project follows table-driven testing patterns and includes:

  • Unit tests for all packages
  • Integration tests for service interactions
  • Mock generation for interfaces
  • Test coverage reporting

🤝 Contributing

  1. Create a feature branch: git checkout -b feature/my-feature
  2. Make your changes following the project's architecture principles
  3. Run tests and linting: make verify
  4. Commit your changes with clear messages
  5. Push to your branch and create a pull request

📄 License

[Add license information here]

📞 Support

For questions and support, please refer to the documentation or create an issue in the repository.


Built with ❤️ using Go

Description
No description provided
Readme 100 MiB
Languages
Go 95%
Makefile 2.7%
Dockerfile 1.2%
Nix 0.6%
Shell 0.5%