run-graphql-server:
    go run cmd/graphql_server/main.go

run-grpc-server:
    go run cmd/grpc_server/main.go

run-config-loader:
    go run cmd/config_loader/main.go

run-decision-logger:
    go run cmd/decision_logger/main.go

go-mod-initialize:
    go mod init github.com/hongbo-miao/hongbomiao.com

go-mod-tidy:
    go mod tidy

go-test:
    go test ./...

go-test-coverage:
    go test ./... -race -coverprofile=coverage.txt -covermode=atomic

lint-go-fmt:
    gofmt -l .

lint-go-fmt-fix:
    gofmt -w .

lint-go:
    golangci-lint run ./...

lint-go-fix:
    golangci-lint run ./... --fix

# Protocol Buffers
proto-generate:
    protoc api/graphql_server/proto/greet/v1/greet.proto --go_out=plugins=grpc:.
    protoc api/graphql_server/proto/torchserve/v1/inference.proto --go_out=plugins=grpc:.
    protoc api/graphql_server/proto/torchserve/v1/management.proto --go_out=plugins=grpc:.

lint-protocol-buffers:
    buf lint

# OPA
opa-test:
    opa test internal/graphql_server/policies/*.rego --verbose

opa-test-coverage:
    opa test internal/graphql_server/policies/*.rego --coverage --format=json

lint-opa-fmt:
    opa fmt -l internal/graphql_server/policies/*.rego

lint-opa-fmt-fix:
    opa fmt -w internal/graphql_server/policies/*.rego

static-type-check-opa:
    opa check internal/graphql_server/policies/*.rego

# Decision Logger
decision-logger-gzip-call:
    echo '{"foo": "bar"}' | gzip | curl --verbose --include --data-binary @- -H "Content-Encoding: gzip" http://localhost:41797/logs

# Config Loader
config-loader-generate-cert-and-key:
    openssl req -x509 -newkey=rsa:4096 -nodes -out=config/config_loader/server.crt -keyout=config/config_loader/server.key -days=3650 -subj="/C=US/ST=CA/CN=hongbomiao.com"

# Docker
docker-build-config-loader:
    cd ../.. && \
    docker build --file=api/api-go/deployment/config_loader/Dockerfile --tag=ghcr.io/hongbo-miao/hm-config-loader:latest .

docker-push-config-loader:
    docker push ghcr.io/hongbo-miao/hm-config-loader:latest

docker-run-config-loader:
    docker run --publish=0.0.0.0:26660:26660 --name=hm-config-loader --rm --env=ENVIRONMENT=production ghcr.io/hongbo-miao/hm-config-loader

docker-build-decision-logger:
    cd ../.. && \
    docker build --file=api/api-go/deployment/config_loader/Dockerfile --tag=ghcr.io/hongbo-miao/hm-decision-logger:latest .

docker-push-decision-logger:
    docker push ghcr.io/hongbo-miao/hm-decision-logger:latest

docker-run-decision-logger:
    docker run --publish=0.0.0.0:41797:41797 --name=hm-decision-logger --rm --env=ENVIRONMENT=production ghcr.io/hongbo-miao/hm-decision-logger

docker-build-graphql-server:
    cd ../.. && \
    docker build --file=api/api-go/deployment/config_loader/Dockerfile --tag=ghcr.io/hongbo-miao/hm-graphql-server:latest .

docker-push-graphql-server:
    docker push ghcr.io/hongbo-miao/hm-graphql-server:latest

docker-run-graphql-server:
    docker run --publish=0.0.0.0:31800:31800 --name=hm-graphql-server --rm --env=ENVIRONMENT=production ghcr.io/hongbo-miao/hm-graphql-server

docker-build-grpc-server:
    cd ../.. && \
    docker build --file=api/api-go/deployment/config_loader/Dockerfile --tag=ghcr.io/hongbo-miao/hm-grpc-server:latest .

docker-push-grpc-server:
    docker push ghcr.io/hongbo-miao/hm-grpc-server:latest

docker-run-grpc-server:
    docker run --publish=0.0.0.0:45237:45237 --name=hm-grpc-server --rm --env=ENVIRONMENT=production ghcr.io/hongbo-miao/hm-grpc-server
