//go:build mage // +build mage package main import ( "context" "path/filepath" "runtime" "github.com/magefile/mage/mg" "github.com/magefile/mage/sh" "github.com/xlgmokha/x/pkg/x" ) // Default target to run when none is specified // If not set, running mage will list available targets var Default = Run // Run the Identity Provider func Idp() error { env := map[string]string{ "SCHEME": "http", "PORT": "8282", "HOST": "idp.example.com:8080", } return sh.RunWithV(env, "ruby", "./bin/idp") } // Run the UI (a.k.a Service Provider) func UI() error { env := map[string]string{ "SCHEME": "http", "PORT": "8283", "HOST": "ui.example.com:8080", "IDP_HOST": "idp.example.com:8080", } return sh.RunWithV(env, "ruby", "./bin/ui") } // Run the API Gateway func Gateway() error { env := map[string]string{ "BIND_ADDR": ":8080", } return sh.RunWithV(env, "go", "run", "./cmd/gtwy/main.go") } // Run the REST API func Api() error { env := map[string]string{ "SCHEME": "http", "PORT": "8284", "HOST": "localhost:8284", } return sh.RunWithV(env, "ruby", "./bin/api") } // Run the gRPC Server func Rpc(ctx context.Context) error { mg.CtxDeps(ctx, Protos) env := map[string]string{ "PORT": "50051", "HOST": "localhost", } return sh.RunWithV(env, "ruby", "./bin/rpc") } // Open a web browser to the login page func Browser() error { url := "http://localhost:8080/ui/sessions/new" if runtime.GOOS == "linux" { return sh.RunV("xdg-open", url) } else { return sh.RunV("open", url) } } // Generate gRPC from protocal buffers func Protos() error { files := x.Must(filepath.Glob("./protos/*.proto")) for _, file := range files { if err := sh.RunV( "grpc_tools_ruby_protoc", "--proto_path=./protos", "--ruby_out=lib", "--grpc_out=lib", file, ); err != nil { return err } } return nil } // Run All the servers func Run(ctx context.Context) { mg.CtxDeps(ctx, Idp, UI, Api, Rpc, Gateway) }