-
Notifications
You must be signed in to change notification settings - Fork 3
/
Makefile
140 lines (110 loc) · 4.18 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
GOPATH := $(shell go env GOPATH)
DIRS := . $(shell find tests examples -type d)
GARBAGE_PATTERNS := Pulumi.test.yaml state
GARBAGE := $(foreach DIR,$(DIRS),$(addprefix $(DIR)/,$(GARBAGE_PATTERNS)))
NAME := threefold
PROJECT := github.com/threefoldtech/pulumi-${NAME}
PROVIDER := pulumi-resource-${NAME}
CODEGEN := pulumi-gen-${NAME}
PROVIDER_PATH := provider
VERSION_PATH := ${PROVIDER_PATH}/pkg/version.Version
SCHEMA_PATH := ${PROVIDER_PATH}/cmd/${PROVIDER}/schema.json
WORKING_DIR := $(shell pwd)
VERSION := $(shell git describe --tags --abbrev=0 --match="v[0-9]*" HEAD)
all: prepare lint build schema test
prepare:
go work sync
for DIR in "provider" "sdk" "tests" ; do \
cd $$DIR && go mod tidy && cd ../ ; \
done
install_latest:
pulumi plugin install resource ${NAME} ${VERSION} --server github://api.github.com/threefoldtech/pulumi-threefold
build: gen
(cd provider && go build -o $(WORKING_DIR)/bin/${PROVIDER} -ldflags "-X ${PROJECT}/${VERSION_PATH}=${VERSION}" $(PROJECT)/${PROVIDER_PATH}/cmd/$(PROVIDER))
gen::
(cd provider && go build -o $(WORKING_DIR)/bin/${CODEGEN} -ldflags "-X ${PROJECT}/${VERSION_PATH}=${VERSION}" ${PROJECT}/${PROVIDER_PATH}/cmd/$(CODEGEN))
schema:
pulumi package get-schema $(WORKING_DIR)/bin/${PROVIDER} > $(WORKING_DIR)/provider/cmd/${PROVIDER}/schema.json
pulumi:
curl -fsSL https://get.pulumi.com | sh
test:
@echo "Running Tests"
cd provider && go test -v ./...
integration: build
@echo "Running integration tests"
go test -v ./tests
release:
@echo "Running release script..."
chmod +x release.sh
./release.sh
coverage: clean
mkdir coverage && \
cd provider && \
echo "Installing gopherbadger" && go get -u github.com/jpoles1/gopherbadger && go install github.com/jpoles1/gopherbadger && \
go test -v -vet=off ./... -coverprofile=../coverage/coverage.out && \
go tool cover -html=../coverage/coverage.out -o ../coverage/coverage.html && \
${GOPATH}/bin/gopherbadger -png=false -md=../README.md && \
rm coverage.out && \
go mod tidy
clean:
rm ./coverage -rf
rm -f ${PROVIDER}
rm -rf $(GARBAGE)
lint:
@echo "Installing golangci-lint" && go install github.com/golangci/golangci-lint/cmd/[email protected]
for DIR in "provider" "sdk" "tests" ; do \
cd $$DIR && golangci-lint run -c ../.golangci.yml --timeout 10m && cd ../ ; \
done
tidy:
for DIR in "provider" "sdk" "tests" ; do \
cd $$DIR && go mod tidy && cd ../ ; \
done
go_sdk:: build
rm -rf sdk/go
pulumi package gen-sdk $(WORKING_DIR)/bin/$(PROVIDER) --language go
nodejs_sdk:: build
rm -rf sdk/nodejs
pulumi package gen-sdk $(WORKING_DIR)/bin/$(PROVIDER) --language nodejs
cd sdk/nodejs/ && \
yarn install && \
yarn run tsc && \
cp ../../README.md ../../LICENSE package.json yarn.lock bin/ && \
sed -i.bak 's/$${VERSION}/$(VERSION)/g' bin/package.json && \
rm ./bin/package.json.bak
python_sdk:: build
rm -rf sdk/python
pulumi package gen-sdk $(WORKING_DIR)/bin/$(PROVIDER) --language python
cp README.md sdk/python/
cd sdk/python/ && \
python3 setup.py clean --all 2>/dev/null && \
rm -rf ./bin/ ../python.bin/ && cp -R . ../python.bin && mv ../python.bin ./bin && \
sed -i.bak -e 's/^VERSION = .*/VERSION = "$(VERSION)"/g' -e 's/^PLUGIN_VERSION = .*/PLUGIN_VERSION = "$(VERSION)"/g' ./bin/setup.py && \
rm ./bin/setup.py.bak && \
cd ./bin && python3 setup.py build sdist
install:: install_nodejs_sdk
cp $(WORKING_DIR)/bin/${PROVIDER} ${GOPATH}/bin
install_nodejs_sdk::
-yarn unlink --cwd $(WORKING_DIR)/sdk/nodejs/bin
yarn link --cwd $(WORKING_DIR)/sdk/nodejs/bin
install_python_sdk::
cd sdk/python/bin && python3 setup.py install
install_go_sdk::
#target intentionally blank
gen_examples: gen_go_example \
gen_nodejs_example \
gen_python_example \
gen_dotnet_example
exmaple := virtual_machine #gateway_fqdn #gateway_name #zdb #kubernetes #virtual_machine #network
gen_%_example:
rm -rf ${WORKING_DIR}/examples/$*/${exmaple}
pulumi convert \
--cwd ${WORKING_DIR}/examples/yaml/${exmaple} \
--logtostderr \
--generate-only \
--non-interactive \
--language $* \
--out ${WORKING_DIR}/examples/$*/${exmaple}
define pulumi_login
export PULUMI_CONFIG_PASSPHRASE=asdfqwerty1234; \
pulumi login --local;
endef