aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/cli/Makefile
diff options
context:
space:
mode:
author简律纯 <hsiangnianian@outlook.com>2023-04-28 01:36:44 +0800
committer简律纯 <hsiangnianian@outlook.com>2023-04-28 01:36:44 +0800
commitdd84b9d64fb98746a230cd24233ff50a562c39c9 (patch)
treeb583261ef00b3afe72ec4d6dacb31e57779a6faf /cli/Makefile
parent0b46fcd72ac34382387b2bcf9095233efbcc52f4 (diff)
downloadHydroRoll-dd84b9d64fb98746a230cd24233ff50a562c39c9.tar.gz
HydroRoll-dd84b9d64fb98746a230cd24233ff50a562c39c9.zip
Diffstat (limited to 'cli/Makefile')
-rw-r--r--cli/Makefile332
1 files changed, 332 insertions, 0 deletions
diff --git a/cli/Makefile b/cli/Makefile
new file mode 100644
index 0000000..90db191
--- /dev/null
+++ b/cli/Makefile
@@ -0,0 +1,332 @@
+TURBO_VERSION = $(shell cat ../version.txt | sed -n '1 p')
+TURBO_TAG = $(shell cat ../version.txt | sed -n '2 p')
+
+EXT :=
+ifeq ($(OS),Windows_NT)
+ UNAME := Windows
+ EXT = .exe
+else
+ UNAME := $(shell uname -s)
+endif
+
+GOARCH:=$(shell go env GOARCH | xargs)
+GOOS:=$(shell go env GOOS | xargs)
+
+# Strip debug info
+GO_FLAGS += "-ldflags=-s -w"
+
+# Avoid embedding the build path in the executable for more reproducible builds
+GO_FLAGS += -trimpath
+
+CLI_DIR = $(shell pwd)
+
+# allow opting in to the rust codepaths
+GO_TAG ?= rust
+
+GO_FILES = $(shell find . -name "*.go")
+SRC_FILES = $(shell find . -name "*.go" | grep -v "_test.go")
+GENERATED_FILES = internal/turbodprotocol/turbod.pb.go internal/turbodprotocol/turbod_grpc.pb.go
+
+# We do not set go-turbo as a dependency because the Rust build.rs
+# script will call it for us and copy over the binary
+turbo:
+ cargo build -p turbo
+
+turbo-prod:
+ cargo build --release --manifest-path ../crates/turborepo/Cargo.toml
+
+go-turbo$(EXT): $(GENERATED_FILES) $(SRC_FILES) go.mod turborepo-ffi-install
+ CGO_ENABLED=1 go build -tags $(GO_TAG) -o go-turbo$(EXT) ./cmd/turbo
+
+
+.PHONY: turborepo-ffi-install
+turborepo-ffi-install: turborepo-ffi turborepo-ffi-copy-bindings
+ cp ../crates/turborepo-ffi/target/debug/libturborepo_ffi.a ./internal/ffi/libturborepo_ffi_$(GOOS)_$(GOARCH).a
+
+.PHONY: turborepo-ffi
+turborepo-ffi:
+ cd ../crates/turborepo-ffi && cargo build --target-dir ./target
+
+.PHONY: turborepo-ffi-copy-bindings
+turborepo-ffi-copy-bindings:
+ cp ../crates/turborepo-ffi/bindings.h ./internal/ffi/bindings.h
+
+#
+# ffi cross compiling
+#
+# these targets are used to build the ffi library for each platform
+# when doing a release. they _may_ work on your local machine, but
+# they're not intended to be used for development.
+#
+
+.PHONY: turborepo-ffi-install-windows-amd64
+turborepo-ffi-install-windows-amd64: turborepo-ffi-windows-amd64 turborepo-ffi-copy-bindings
+ cp ../crates/turborepo-ffi/target/x86_64-pc-windows-gnu/release/libturborepo_ffi.a ./internal/ffi/libturborepo_ffi_windows_amd64.a
+
+.PHONY: turborepo-ffi-install-darwin-arm64
+turborepo-ffi-install-darwin-arm64: turborepo-ffi-darwin-arm64 turborepo-ffi-copy-bindings
+ cp ../crates/turborepo-ffi/target/aarch64-apple-darwin/release/libturborepo_ffi.a ./internal/ffi/libturborepo_ffi_darwin_arm64.a
+
+.PHONY: turborepo-ffi-install-darwin-amd64
+turborepo-ffi-install-darwin-amd64: turborepo-ffi-darwin-amd64 turborepo-ffi-copy-bindings
+ cp ../crates/turborepo-ffi/target/x86_64-apple-darwin/release/libturborepo_ffi.a ./internal/ffi/libturborepo_ffi_darwin_amd64.a
+
+.PHONY: turborepo-ffi-install-linux-arm64
+turborepo-ffi-install-linux-arm64: turborepo-ffi-linux-arm64 turborepo-ffi-copy-bindings
+ cp ../crates/turborepo-ffi/target/aarch64-unknown-linux-musl/release/libturborepo_ffi.a ./internal/ffi/libturborepo_ffi_linux_arm64.a
+
+.PHONY: turborepo-ffi-install-linux-amd64
+turborepo-ffi-install-linux-amd64: turborepo-ffi-linux-amd64 turborepo-ffi-copy-bindings
+ cp ../crates/turborepo-ffi/target/x86_64-unknown-linux-musl/release/libturborepo_ffi.a ./internal/ffi/libturborepo_ffi_linux_amd64.a
+
+.PHONY: turborepo-ffi-windows-amd64
+turborepo-ffi-windows-amd64:
+ cd ../crates/turborepo-ffi && cargo build --release --target-dir ./target --target x86_64-pc-windows-gnu
+
+.PHONY: turborepo-ffi-darwin-arm64
+turborepo-ffi-darwin-arm64:
+ cd ../crates/turborepo-ffi && cargo build --release --target-dir ./target --target aarch64-apple-darwin
+
+.PHONY: turborepo-ffi-darwin-amd64
+turborepo-ffi-darwin-amd64:
+ cd ../crates/turborepo-ffi && cargo build --release --target-dir ./target --target x86_64-apple-darwin
+
+.PHONY: turborepo-ffi-linux-arm64
+turborepo-ffi-linux-arm64:
+ cd ../crates/turborepo-ffi && CC="zig cc -target aarch64-linux-musl" cargo build --release --target-dir ./target --target aarch64-unknown-linux-musl
+
+.PHONY: turborepo-ffi-linux-amd64
+turborepo-ffi-linux-amd64:
+ cd ../crates/turborepo-ffi && CC="zig cc -target x86_64-linux-musl" cargo build --release --target-dir ./target --target x86_64-unknown-linux-musl
+
+#
+# end
+#
+
+.PHONY: turborepo-ffi-proto
+turborepo-ffi-proto:
+ protoc -I../crates/ ../crates/turborepo-ffi/messages.proto --go_out=./internal/
+
+protoc: internal/turbodprotocol/turbod.proto
+ protoc --go_out=. --go_opt=paths=source_relative \
+ --go-grpc_out=. --go-grpc_opt=paths=source_relative \
+ internal/turbodprotocol/turbod.proto
+
+$(GENERATED_FILES): internal/turbodprotocol/turbod.proto
+ make protoc
+
+compile-protos: $(GENERATED_FILES)
+
+ewatch: scripts/...
+ nodemon --exec "make e2e" -e .ts,.go
+
+check-go-version:
+ @go version | grep ' go1\.18\.0 ' || (echo 'Please install Go version 1.18.0' && false)
+
+# This "TURBO_RACE" variable exists at the request of a user on GitHub who
+# wants to run "make test-go" on an unsupported version of macOS (version 10.9).
+# Go's race detector does not run correctly on that version. With this flag
+# you can run "TURBO_RACE= make test-go" to disable the race detector.
+TURBO_RACE ?= -race
+
+ifeq ($(UNAME), Windows)
+ TURBO_RACE=
+endif
+
+clean-go:
+ go clean -testcache -r
+
+test-go: $(GENERATED_FILES) $(GO_FILES) go.mod go.sum turborepo-ffi-install
+ go test $(TURBO_RACE) -tags $(GO_TAG) ./...
+
+# protos need to be compiled before linting, since linting needs to pick up
+# some types from the generated code
+lint-go: $(GENERATED_FILES) $(GO_FILES) go.mod go.sum
+ golangci-lint run --new-from-rev=main
+
+fmt-go: $(GO_FILES) go.mod go.sum
+ go fmt ./...
+
+install: | ./package.json
+ pnpm install --filter=cli
+
+corepack:
+ which corepack || npm install -g corepack@latest
+ corepack enable
+
+e2e: corepack install turbo
+ node -r esbuild-register scripts/e2e/e2e.ts
+
+# Expects turbo to be built and up to date
+# Only should be used by CI
+e2e-prebuilt: corepack install
+ node -r esbuild-register scripts/e2e/e2e.ts
+
+cmd/turbo/version.go: ../version.txt
+ # Update this atomically to avoid issues with this being overwritten during use
+ node -e 'console.log(`package main\n\nconst turboVersion = "$(TURBO_VERSION)"`)' > cmd/turbo/version.go.txt
+ mv cmd/turbo/version.go.txt cmd/turbo/version.go
+
+build: install
+ cd $(CLI_DIR)/../ && pnpm install --filter=create-turbo && pnpm turbo build --filter=create-turbo...
+ cd $(CLI_DIR)/../ && pnpm install --filter=@turbo/codemod && pnpm turbo build --filter=@turbo/codemod...
+ cd $(CLI_DIR)/../ && pnpm install --filter=turbo-ignore && pnpm turbo build --filter=turbo-ignore...
+ cd $(CLI_DIR)/../ && pnpm install --filter=@turbo/workspaces && pnpm turbo build --filter=@turbo/workspaces...
+ cd $(CLI_DIR)/../ && pnpm install --filter=eslint-plugin-turbo && pnpm turbo build --filter=eslint-plugin-turbo...
+ cd $(CLI_DIR)/../ && pnpm install --filter=eslint-config-turbo && pnpm turbo build --filter=eslint-config-turbo...
+
+.PHONY: prepublish
+prepublish: compile-protos cmd/turbo/version.go
+ make -j3 bench/turbo test-go
+
+.PHONY: publish-turbo-cross
+publish-turbo-cross: prepublish
+ goreleaser release --rm-dist -f cross-release.yml
+
+.PHONY: publish-turbo-darwin
+publish-turbo-darwin: prepublish
+ goreleaser release --rm-dist -f darwin-release.yml
+
+.PHONY: snapshot-turbo-cross
+snapshot-turbo-cross:
+ goreleaser release --snapshot --rm-dist -f cross-release.yml
+
+.PHONY: snapshot-turbo-darwin
+snapshot-turbo-darwin:
+ goreleaser release --snapshot --rm-dist -f darwin-release.yml
+
+.PHONY: snapshot-lib-turbo-darwin
+snapshot-lib-turbo-darwin:
+ goreleaser release --snapshot --rm-dist -f darwin-lib.yml
+
+.PHONY: snapshot-lib-turbo-cross
+snapshot-lib-turbo-cross:
+ goreleaser release --snapshot --rm-dist -f cross-lib.yml
+
+.PHONY: build-lib-turbo-darwin
+build-lib-turbo-darwin:
+ goreleaser release --rm-dist -f darwin-lib.yml
+
+.PHONY: build-go-turbo-darwin
+build-go-turbo-darwin:
+ goreleaser release --rm-dist -f darwin-release.yml
+
+.PHONY: build-go-turbo-cross
+build-go-turbo-cross:
+ goreleaser release --rm-dist -f cross-release.yml
+
+.PHONY: build-lib-turbo-cross
+build-lib-turbo-cross:
+ goreleaser release --rm-dist -f cross-lib.yml
+
+.PHONY: stage-release
+stage-release: cmd/turbo/version.go
+ echo "Version: $(TURBO_VERSION)"
+ echo "Tag: $(TURBO_TAG)"
+ cat $(CLI_DIR)/../version.txt
+ git diff -- $(CLI_DIR)/../version.txt
+ git status
+ @test main = "`git rev-parse --abbrev-ref HEAD`" || (echo "Refusing to publish from non-main branch `git rev-parse --abbrev-ref HEAD`" && false)
+ @test "" = "`git cherry`" || (echo "Refusing to publish with unpushed commits" && false)
+
+ # Stop if versions are not updated.
+ @test "" != "`git diff -- $(CLI_DIR)/../version.txt`" || (echo "Refusing to publish with unupdated version.txt" && false)
+ @test "" != "`git diff -- $(CLI_DIR)/cmd/turbo/version.go`" || (echo "Refusing to publish with unupdated version.go" && false)
+
+ # Prepare the packages.
+ cd $(CLI_DIR)/../packages/turbo && pnpm version "$(TURBO_VERSION)" --allow-same-version
+ cd $(CLI_DIR)/../packages/create-turbo && pnpm version "$(TURBO_VERSION)" --allow-same-version
+ cd $(CLI_DIR)/../packages/turbo-codemod && pnpm version "$(TURBO_VERSION)" --allow-same-version
+ cd $(CLI_DIR)/../packages/turbo-ignore && pnpm version "$(TURBO_VERSION)" --allow-same-version
+ cd $(CLI_DIR)/../packages/turbo-workspaces && pnpm version "$(TURBO_VERSION)" --allow-same-version
+ cd $(CLI_DIR)/../packages/eslint-plugin-turbo && pnpm version "$(TURBO_VERSION)" --allow-same-version
+ cd $(CLI_DIR)/../packages/eslint-config-turbo && pnpm version "$(TURBO_VERSION)" --allow-same-version
+
+ git checkout -b staging-$(TURBO_VERSION)
+ git commit -anm "publish $(TURBO_VERSION) to registry"
+ git tag "v$(TURBO_VERSION)"
+ git push origin staging-$(TURBO_VERSION) --tags --force
+
+.PHONY: publish-turbo
+publish-turbo: clean build
+ echo "Version: $(TURBO_VERSION)"
+ echo "Tag: $(TURBO_TAG)"
+
+ # Include the patch in the log.
+ git format-patch HEAD~1 --stdout | cat
+
+ npm config set --location=project "//registry.npmjs.org/:_authToken" $(NPM_TOKEN)
+
+ # Publishes the native npm modules.
+ goreleaser release --rm-dist -f combined-shim.yml $(SKIP_PUBLISH)
+
+ # Split packing from the publish step so that npm locates the correct .npmrc file.
+ cd $(CLI_DIR)/../packages/turbo && pnpm pack --pack-destination=$(CLI_DIR)/../
+ cd $(CLI_DIR)/../packages/create-turbo && pnpm pack --pack-destination=$(CLI_DIR)/../
+ cd $(CLI_DIR)/../packages/turbo-codemod && pnpm pack --pack-destination=$(CLI_DIR)/../
+ cd $(CLI_DIR)/../packages/turbo-ignore && pnpm pack --pack-destination=$(CLI_DIR)/../
+ cd $(CLI_DIR)/../packages/turbo-workspaces && pnpm pack --pack-destination=$(CLI_DIR)/../
+ cd $(CLI_DIR)/../packages/eslint-plugin-turbo && pnpm pack --pack-destination=$(CLI_DIR)/../
+ cd $(CLI_DIR)/../packages/eslint-config-turbo && pnpm pack --pack-destination=$(CLI_DIR)/../
+
+ifneq ($(SKIP_PUBLISH),--skip-publish)
+ # Publish the remaining JS packages in order to avoid race conditions.
+ cd $(CLI_DIR)/../
+ npm publish -ddd --tag $(TURBO_TAG) $(CLI_DIR)/../turbo-$(TURBO_VERSION).tgz
+ npm publish -ddd --tag $(TURBO_TAG) $(CLI_DIR)/../create-turbo-$(TURBO_VERSION).tgz
+ npm publish -ddd --tag $(TURBO_TAG) $(CLI_DIR)/../turbo-codemod-$(TURBO_VERSION).tgz
+ npm publish -ddd --tag $(TURBO_TAG) $(CLI_DIR)/../turbo-ignore-$(TURBO_VERSION).tgz
+ npm publish -ddd --tag $(TURBO_TAG) $(CLI_DIR)/../turbo-workspaces-$(TURBO_VERSION).tgz
+ npm publish -ddd --tag $(TURBO_TAG) $(CLI_DIR)/../eslint-plugin-turbo-$(TURBO_VERSION).tgz
+ npm publish -ddd --tag $(TURBO_TAG) $(CLI_DIR)/../eslint-config-turbo-$(TURBO_VERSION).tgz
+endif
+
+demo/lage: install
+ node $(CLI_DIR)/scripts/generate.mjs lage
+
+demo/lerna: install
+ node $(CLI_DIR)/scripts/generate.mjs lerna
+
+demo/nx: install
+ node $(CLI_DIR)/scripts/generate.mjs nx
+
+demo/turbo: install
+ node $(CLI_DIR)/scripts/generate.mjs turbo
+
+demo: demo/lage demo/lerna demo/nx demo/turbo
+
+bench/lerna: demo/lerna
+ cd $(CLI_DIR)/demo/lerna && node_modules/.bin/lerna run build
+
+bench/lage: demo/lage
+ cd $(CLI_DIR)/demo/lage && node_modules/.bin/lage build
+
+bench/nx: demo/nx
+ cd $(CLI_DIR)/demo/nx && node_modules/.bin/nx run-many --target=build --all
+
+bench/turbo: demo/turbo turbo
+ cd $(CLI_DIR)/demo/turbo && $(CLI_DIR)/turbo run test
+
+bench: bench/lerna bench/lage bench/nx bench/turbo
+
+clean: clean-go clean-build clean-demo clean-rust
+
+clean-rust:
+ cargo clean
+
+clean-build:
+ rm -f turbo
+
+clean-demo:
+ rm -rf node_modules
+ rm -rf demo
+
+# use target fixture-<some directory under integration_tests/_fixtures> to set up the testbed directory
+.PHONY=fixture-%
+fixture-%:
+ $(eval $@_FIXTURE := $(@:fixture-%=%))
+ @echo "fixture setup $($@_FIXTURE)"
+ rm -rf testbed
+ mkdir -p testbed
+ ../turborepo-tests/integration/tests/_helpers/setup_monorepo.sh ./testbed $($@_FIXTURE)
+