forked from kubernetes/org
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Makefile
86 lines (69 loc) · 2.36 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
# Copyright 2021 The Kubernetes Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
SHELL := /bin/bash
# available for override
GITHUB_TOKEN_PATH ?= /etc/github-token/token
TEST_INFRA_PATH ?= $(OUTPUT_DIR)/tmp/test-infra
# intentionally hardcoded list to ensure it's high friction to remove someone
ADMINS = cblecker fejta idvoretskyi mrbobbytables nikhita spiffxp
ORGS = $(shell find ./config -type d -mindepth 1 -maxdepth 1 | cut -d/ -f3)
# use absolute path to ./_output, which is .gitignored
OUTPUT_DIR := $(shell pwd)/_output
OUTPUT_BIN_DIR := $(OUTPUT_DIR)/bin
MERGE_CMD := $(OUTPUT_BIN_DIR)/merge
PERIBOLOS_CMD := $(OUTPUT_BIN_DIR)/peribolos
MERGED_CONFIG := $(OUTPUT_DIR)/gen-config.yaml
# convenience targets for humans
.PHONY: clean
clean:
rm -rf $(OUTPUT_DIR)
.PHONY: build
build:
go build ./...
.PHONY: merge
merge: $(MERGE_CMD)
.PHONY: config
config: $(MERGED_CONFIG)
.PHONY: peribolos
peribolos: $(PERIBOLOS_CMD)
.PHONY: test
test: config
go test ./... --config=$(MERGED_CONFIG)
.PHONY: deploy # --confirm
deploy: config test peribolos
$(PERIBOLOS_CMD) \
--config-path $(MERGED_CONFIG) \
--fix-org \
--fix-org-members \
--fix-teams \
--fix-team-members \
--github-token-path=$(GITHUB_TOKEN_PATH) \
$(patsubst %, --required-admins=%, $(ADMINS)) \
$@
# actual targets that only get built if they don't already exist
$(MERGE_CMD):
mkdir -p "$(OUTPUT_BIN_DIR)"
go build -v -o "$(OUTPUT_BIN_DIR)" ./cmd/merge
$(MERGED_CONFIG): $(MERGE_CMD) config/**/*.yaml
mkdir -p "$(OUTPUT_DIR)"
$(MERGE_CMD) \
--merge-teams \
$(shell for o in $(ORGS); do echo "--org-part=$$o=config/$$o/org.yaml"; done) \
> $(MERGED_CONFIG)
$(TEST_INFRA_PATH):
mkdir -p $(TEST_INFRA_PATH)
git clone --depth=1 https://github.com/kubernetes/test-infra $(TEST_INFRA_PATH)
$(PERIBOLOS_CMD): $(TEST_INFRA_PATH)
cd $(TEST_INFRA_PATH) && \
go build -v -o $(PERIBOLOS_CMD) ./prow/cmd/peribolos