Skip to content

golangid/candi

Folders and files

NameName
Last commit message
Last commit date
Mar 7, 2023
May 25, 2023
Aug 19, 2022
Jun 5, 2023
Jul 5, 2023
Jun 5, 2023
Jun 20, 2023
Jul 5, 2023
May 18, 2023
Mar 3, 2023
Jun 14, 2023
Jun 14, 2023
Jun 14, 2023
Apr 10, 2023
Jun 14, 2023
Apr 17, 2020
Jun 14, 2023
Feb 9, 2022
Jan 15, 2021
Apr 10, 2023
Jun 2, 2023
Jul 5, 2023
Jul 5, 2023
Jul 5, 2023

Repository files navigation

Candi, a library and utilities for Membangun Candi project in Golang

Build Status Go Report Card codecov golang

Build with ❤️ and

golang logo docker logo rest logo graphql logo grpc logo kafka logo

Install CLI

For linux:

$ wget -O candi https://storage.googleapis.com/agungdp/bin/candi/candi-linux && chmod +x candi && sudo mv candi /usr/local/bin
$ candi

For macOS:

$ wget -O candi https://storage.googleapis.com/agungdp/bin/candi/candi-osx && chmod +x candi && mv candi /usr/local/bin
$ candi

For windows:

https://storage.googleapis.com/agungdp/bin/candi/candi-x64.exe (64 bit)
or 
https://storage.googleapis.com/agungdp/bin/candi/candi-x86.exe (32 bit)

Or build binary from source:

$ go install github.com/golangid/candi/cmd/candi@latest
$ candi

Flag options:

$ candi --help
Usage of candi:
  -add-handler
        [project generator] add handler in delivery module in service
  -add-module
        [project generator] add module in service
  -init
        [project generator] init service
  -init-monorepo
        [project generator] init monorepo codebase
  -libraryname string
        [project generator] define library name (default "github.com/golangid/candi"), you can custom set to CANDI_CLI_PACKAGES global environment variable 
  -monorepo-name string
        [project generator] set monorepo project name (default "monorepo")
  -output string
        [project generator] directory to write project to (default is service name)
  -packageprefix string
        [project generator] define package prefix
  -protooutputpkg string
        [project generator] define generated proto output target (if using grpc), with prefix is your go.mod
  -run
        [service runner] run selected service or all service in monorepo
  -scope string
        [project generator] set scope 
        1 for init service, 
        2 for add module(s), 
        3 for add delivery handler(s) in module, 
        4 for init monorepo codebase, 
        5 for run multiple service in monorepo
  -service string
        Describe service name (if run multiple services, separate by comma)
  -version
        print version
  -withgomod
        [project generator] generate go.mod or not (default true)

Create new service or add module in existing service

$ candi

The project is generated with this architecture diagram:

Build and run service

$ cd {{service_name}}
$ make run

If include GRPC handler, run $ make proto for generate rpc files from proto (must install protoc compiler min version libprotoc 3.14.0)

Server handlers example:

Worker handlers example:

Plugin: Candi Plugin

Example microservices project using this library: Backend Microservices

Features

  • Tracing

    • Using Jaeger for trace distributed system in microservices.
  • Graceful Shutdown for all servers and workers

Todo

Pronunciation

/can·di/ lihat! beliau membangun seribu candi dalam satu malam.

Contributing

A big thank you to all contributors!