Highly-opinionated (ex-bullshit-free) MTPROTO proxy for Telegram. If you use v1.0 or upgrade broke you proxy, please read the chapter Version 2
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

Makefile 3.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. ROOT_DIR := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
  2. IMAGE_NAME := mtg
  3. APP_NAME := $(IMAGE_NAME)
  4. GOLANGCI_LINT_VERSION := v1.44.2
  5. VERSION_GO := $(shell go version)
  6. VERSION_DATE := $(shell date -Ru)
  7. VERSION_TAG := $(shell git describe --tags --always)
  8. COMMON_BUILD_FLAGS := -trimpath -mod=readonly -ldflags="-extldflags '-static' -s -w -X 'main.version=$(VERSION_TAG) ($(VERSION_GO)) [$(VERSION_DATE)]'"
  9. FUZZ_FLAGS := -fuzztime=120s
  10. GOBIN := $(ROOT_DIR)/.bin
  11. GOTOOL := env "GOBIN=$(GOBIN)" "PATH=$(ROOT_DIR)/.bin:$(PATH)"
  12. # -----------------------------------------------------------------------------
  13. .PHONY: all
  14. all: build
  15. .PHONY: build
  16. build:
  17. @go build $(COMMON_BUILD_FLAGS) -o "$(APP_NAME)"
  18. $(APP_NAME): build
  19. .PHONY: static
  20. static:
  21. @env CGO_ENABLED=0 GOOS=linux go build \
  22. $(COMMON_BUILD_FLAGS) \
  23. -tags netgo \
  24. -a \
  25. -o "$(APP_NAME)"
  26. vendor: go.mod go.sum
  27. @$(MOD_ON) go mod vendor
  28. .bin:
  29. @mkdir -p "$(GOBIN)" || true
  30. .PHONY: fmt
  31. fmt:
  32. @$(GOTOOL) gofumpt -w -extra "$(ROOT_DIR)"
  33. .PHONY: test
  34. test:
  35. @go test -v ./...
  36. .PHONY: citest
  37. citest:
  38. @go test -coverprofile=coverage.txt -covermode=atomic -parallel 2 -race -v ./...
  39. .PHONY: clean
  40. clean:
  41. @git clean -xfd && \
  42. git reset --hard >/dev/null && \
  43. git submodule foreach --recursive sh -c 'git clean -xfd && git reset --hard' >/dev/null
  44. .PHONY: lint
  45. lint:
  46. @$(GOTOOL) golangci-lint run
  47. .PHONY: release
  48. release:
  49. @$(GOTOOL) goreleaser release --snapshot --rm-dist && \
  50. find "$(ROOT_DIR)/dist" -type d | grep -vP "dist$$" | xargs -r rm -rf && \
  51. rm -f "$(ROOT_DIR)/dist/config.yaml"
  52. .PHONY: docker
  53. docker:
  54. @docker build --pull -t "$(IMAGE_NAME)" "$(ROOT_DIR)"
  55. .PHONY: doc
  56. doc:
  57. @$(GOTOOL) godoc -http 0.0.0.0:10000
  58. .PHONY: install-tools
  59. install-tools: install-tools-lint install-tools-godoc install-tools-gofumpt install-tools-goreleaser
  60. .PHONY: install-tools-lint
  61. install-tools-lint: .bin
  62. @curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh \
  63. | bash -s -- -b "$(GOBIN)" "$(GOLANGCI_LINT_VERSION)"
  64. .PHONY: install-tools-godoc
  65. install-tools-godoc: .bin
  66. @$(GOTOOL) go install golang.org/x/tools/cmd/godoc@latest
  67. .PHONY: install-tools-gofumpt
  68. install-tools-gofumpt: .bin
  69. @$(GOTOOL) go install mvdan.cc/gofumpt@latest
  70. .PHONY: goreleaser
  71. install-tools-goreleaser: .bin
  72. @$(GOTOOL) go install github.com/goreleaser/goreleaser@latest
  73. .PHONY: update-deps
  74. update-deps:
  75. @go get -u && go mod tidy -go=1.18
  76. .PHONY: fuzz
  77. fuzz: fuzz-ClientHello fuzz-ServerGenerateHandshakeFrame fuzz-ClientHandshake fuzz-ServerReceive fuzz-ServerSend
  78. .PHONY: fuzz-ClientHello
  79. fuzz-ClientHello:
  80. @go test -fuzz=FuzzClientHello $(FUZZ_FLAGS) "$(ROOT_DIR)/mtglib/internal/faketls"
  81. .PHONY: fuzz-ServerGenerateHandshakeFrame
  82. fuzz-ServerGenerateHandshakeFrame:
  83. @go test -fuzz=FuzzServerGenerateHandshakeFrame $(FUZZ_FLAGS) "$(ROOT_DIR)/mtglib/internal/obfuscated2"
  84. .PHONY: fuzz-ClientHandshake
  85. fuzz-ClientHandshake:
  86. @go test -fuzz=FuzzClientHandshake $(FUZZ_FLAGS) "$(ROOT_DIR)/mtglib/internal/obfuscated2"
  87. .PHONY: fuzz-ServerReceive
  88. fuzz-ServerReceive:
  89. @go test -fuzz=FuzzServerReceive $(FUZZ_FLAGS) "$(ROOT_DIR)/mtglib/internal/obfuscated2"
  90. .PHONY: fuzz-ServerSend
  91. fuzz-ServerSend:
  92. @go test -fuzz=FuzzServerSend $(FUZZ_FLAGS) "$(ROOT_DIR)/mtglib/internal/obfuscated2"