mirror of
https://github.com/open-policy-agent/opa.git
synced 2026-08-13 03:42:35 -06:00
d64568ec20
Signed-off-by: Torin Sandall <torinsandall@gmail.com>
299 lines
7.5 KiB
Makefile
299 lines
7.5 KiB
Makefile
# Copyright 2016 The OPA Authors. All rights reserved.
|
|
# Use of this source code is governed by an Apache2
|
|
# license that can be found in the LICENSE file.
|
|
|
|
VERSION := 0.15.0-dev
|
|
|
|
GO := go
|
|
GOVERSION := 1.12.9
|
|
GOARCH := $(shell go env GOARCH)
|
|
GOOS := $(shell go env GOOS)
|
|
|
|
DOCKER_INSTALLED := $(shell hash docker 2>/dev/null && echo 1 || echo 0)
|
|
DOCKER := docker
|
|
|
|
BIN := opa_$(GOOS)_$(GOARCH)
|
|
|
|
REPOSITORY := openpolicyagent
|
|
IMAGE := $(REPOSITORY)/opa
|
|
|
|
BUILD_COMMIT := $(shell ./build/get-build-commit.sh)
|
|
BUILD_TIMESTAMP := $(shell ./build/get-build-timestamp.sh)
|
|
BUILD_HOSTNAME := $(shell ./build/get-build-hostname.sh)
|
|
|
|
RELEASE_BUILD_IMAGE := golang:$(GOVERSION)
|
|
|
|
LDFLAGS := "-X github.com/open-policy-agent/opa/version.Version=$(VERSION) \
|
|
-X github.com/open-policy-agent/opa/version.Vcs=$(BUILD_COMMIT) \
|
|
-X github.com/open-policy-agent/opa/version.Timestamp=$(BUILD_TIMESTAMP) \
|
|
-X github.com/open-policy-agent/opa/version.Hostname=$(BUILD_HOSTNAME)"
|
|
|
|
GO15VENDOREXPERIMENT := 1
|
|
export GO15VENDOREXPERIMENT
|
|
|
|
######################################################
|
|
#
|
|
# Development targets
|
|
#
|
|
######################################################
|
|
|
|
# If you update the 'all' target check/update the call in Dockerfile.build target
|
|
# to make sure they're consistent.
|
|
.PHONY: all
|
|
all: deps build test perf check
|
|
|
|
.PHONY: version
|
|
version:
|
|
@echo $(VERSION)
|
|
|
|
.PHONY: deps
|
|
deps:
|
|
@./build/install-deps.sh
|
|
|
|
.PHONY: generate
|
|
generate: wasm-build
|
|
$(GO) generate
|
|
|
|
.PHONY: build
|
|
build: go-build
|
|
|
|
.PHONY: image
|
|
image: build-linux
|
|
@$(MAKE) image-quick
|
|
|
|
.PHONY: install
|
|
install: generate
|
|
$(GO) install -ldflags $(LDFLAGS)
|
|
|
|
.PHONY: test
|
|
test: wasm-test go-test wasm-rego-test
|
|
|
|
.PHONY: go-build
|
|
go-build: generate
|
|
$(GO) build -o $(BIN) -ldflags $(LDFLAGS)
|
|
|
|
.PHONY: go-test
|
|
go-test: generate
|
|
$(GO) test ./...
|
|
|
|
.PHONY: wasm-build
|
|
wasm-build:
|
|
ifeq ($(DOCKER_INSTALLED), 1)
|
|
@$(MAKE) -C wasm build
|
|
cp wasm/_obj/opa.wasm internal/compiler/wasm/opa/opa.wasm
|
|
else
|
|
@echo "Docker not installed. Skipping OPA-WASM library build."
|
|
endif
|
|
|
|
.PHONY: wasm-clean
|
|
wasm-clean:
|
|
@$(MAKE) -C wasm clean
|
|
|
|
.PHONY: wasm-test
|
|
wasm-test:
|
|
ifeq ($(DOCKER_INSTALLED), 1)
|
|
@$(MAKE) -C wasm test
|
|
else
|
|
@echo "Docker not installed. Skipping OPA-WASM library test."
|
|
endif
|
|
|
|
.PHONY: wasm-test
|
|
wasm-rego-test: _test/testcases.tar.gz
|
|
ifeq ($(DOCKER_INSTALLED), 1)
|
|
@./build/run-wasm-tests.sh
|
|
else
|
|
@echo "Docker not installed. Skipping WASM-based test execution."
|
|
endif
|
|
|
|
_test/testcases.tar.gz: $(shell find ./test/wasm/ -type f)
|
|
go run test/wasm/cmd/testgen.go \
|
|
--input-dir test/wasm/assets \
|
|
--output $@
|
|
|
|
.PHONY: perf
|
|
perf: generate
|
|
$(GO) test -run=- -bench=. -benchmem ./...
|
|
|
|
.PHONY: check
|
|
check: check-fmt check-vet check-lint
|
|
|
|
.PHONY: check-fmt
|
|
check-fmt:
|
|
./build/check-fmt.sh
|
|
|
|
.PHONY: check-vet
|
|
check-vet:
|
|
./build/check-vet.sh
|
|
|
|
.PHONY: check-lint
|
|
check-lint:
|
|
./build/check-lint.sh
|
|
|
|
.PHONY: fmt
|
|
fmt:
|
|
$(GO) fmt ./...
|
|
|
|
.PHONY: clean
|
|
clean: wasm-clean
|
|
rm -f opa_*_*
|
|
rm -fr _test
|
|
|
|
# The docs-% pattern target will shim to the
|
|
# makefile in ./docs
|
|
.PHONY: docs-%
|
|
docs-%:
|
|
$(MAKE) -C docs $*
|
|
|
|
######################################################
|
|
#
|
|
# CI targets
|
|
#
|
|
######################################################
|
|
|
|
.PHONY: travis-build
|
|
travis-build: wasm-build
|
|
@# this image is used in `Dockerfile` for image-quick
|
|
$(DOCKER) build -t build-$(BUILD_COMMIT) --build-arg GOVERSION=$(GOVERSION) -f Dockerfile.build .
|
|
@# the '/.' means "don't create the directory, copy its content only"
|
|
@# these are copied our to be used from the s3 upload targets
|
|
@# note: we don't bother cleaning up the container created here
|
|
$(DOCKER) cp "$$($(DOCKER) create build-$(BUILD_COMMIT)):/out/." .
|
|
|
|
.PHONY: travis-test
|
|
travis-test: travis-build wasm-test wasm-rego-test
|
|
$(DOCKER) run build-$(BUILD_COMMIT) make go-test perf check
|
|
|
|
.PHONY: travis-all
|
|
travis-all: travis-test docker-fuzzit-local-regression
|
|
|
|
.PHONY: build-linux
|
|
build-linux:
|
|
@$(MAKE) build GOOS=linux
|
|
|
|
.PHONY: build-darwin
|
|
build-darwin:
|
|
@$(MAKE) build GOOS=darwin
|
|
|
|
.PHONY: build-windows
|
|
build-windows:
|
|
@$(MAKE) build GOOS=windows
|
|
mv opa_windows_$(GOARCH) opa_windows_$(GOARCH).exe
|
|
|
|
.PHONY: image-quick
|
|
image-quick:
|
|
$(DOCKER) build --build-arg BUILD_COMMIT=$(BUILD_COMMIT) -t $(IMAGE):$(VERSION) .
|
|
$(DOCKER) build --build-arg BUILD_COMMIT=$(BUILD_COMMIT) -t $(IMAGE):$(VERSION)-debug --build-arg VARIANT=:debug .
|
|
$(DOCKER) build --build-arg BUILD_COMMIT=$(BUILD_COMMIT) -t $(IMAGE):$(VERSION)-rootless --build-arg USER=1 .
|
|
|
|
.PHONY: push
|
|
push:
|
|
$(DOCKER) push $(IMAGE):$(VERSION)
|
|
$(DOCKER) push $(IMAGE):$(VERSION)-debug
|
|
$(DOCKER) push $(IMAGE):$(VERSION)-rootless
|
|
|
|
.PHONY: tag-latest
|
|
tag-latest:
|
|
$(DOCKER) tag $(IMAGE):$(VERSION) $(IMAGE):latest
|
|
$(DOCKER) tag $(IMAGE):$(VERSION)-debug $(IMAGE):latest-debug
|
|
$(DOCKER) tag $(IMAGE):$(VERSION)-rootless $(IMAGE):latest-rootless
|
|
|
|
.PHONY: push-latest
|
|
push-latest:
|
|
$(DOCKER) push $(IMAGE):latest
|
|
$(DOCKER) push $(IMAGE):latest-debug
|
|
$(DOCKER) push $(IMAGE):latest-rootless
|
|
|
|
.PHONY: push-binary-edge
|
|
push-binary-edge:
|
|
aws s3 cp opa_darwin_$(GOARCH) s3://opa-releases/edge/opa_darwin_$(GOARCH)
|
|
aws s3 cp opa_windows_$(GOARCH).exe s3://opa-releases/edge/opa_windows_$(GOARCH).exe
|
|
aws s3 cp opa_linux_$(GOARCH) s3://opa-releases/edge/opa_linux_$(GOARCH)
|
|
|
|
.PHONY: tag-edge
|
|
tag-edge:
|
|
$(DOCKER) tag $(IMAGE):$(VERSION) $(IMAGE):edge
|
|
$(DOCKER) tag $(IMAGE):$(VERSION)-debug $(IMAGE):edge-debug
|
|
$(DOCKER) tag $(IMAGE):$(VERSION)-rootless $(IMAGE):edge-rootless
|
|
|
|
.PHONY: push-edge
|
|
push-edge:
|
|
$(DOCKER) push $(IMAGE):edge
|
|
$(DOCKER) push $(IMAGE):edge-debug
|
|
$(DOCKER) push $(IMAGE):edge-rootless
|
|
|
|
.PHONY: docker-login
|
|
docker-login:
|
|
@$(DOCKER) login -u ${DOCKER_USER} -p ${DOCKER_PASSWORD}
|
|
|
|
.PHONY: push-image
|
|
push-image: docker-login image-quick push
|
|
|
|
.PHONY: deploy-travis
|
|
deploy-travis: push-image tag-edge push-edge push-binary-edge
|
|
|
|
.PHONY: release-travis
|
|
release-travis: push-image tag-latest push-latest
|
|
|
|
.PHONY: release-bugfix-travis
|
|
release-bugfix-travis: deploy-travis
|
|
|
|
.PHONY: fuzzer
|
|
fuzzer:
|
|
docker build \
|
|
-f Dockerfile.fuzzit \
|
|
-t openpolicyagent/fuzzer:$(BUILD_COMMIT) \
|
|
--build-arg GOVERSION=$(GOVERSION) \
|
|
.
|
|
|
|
.PHONY: docker-fuzzit-local-regression
|
|
docker-fuzzit-local-regression: fuzzer
|
|
docker run \
|
|
-v /var/run/docker.sock:/var/run/docker.sock \
|
|
openpolicyagent/fuzzer:$(BUILD_COMMIT) \
|
|
./fuzzit create job --type "local-regression" opa/ast ast-fuzzer
|
|
|
|
.PHONY: docker-fuzzit-fuzzing
|
|
docker-fuzzit-fuzzing: fuzzer
|
|
@docker run \
|
|
-v /var/run/docker.sock:/var/run/docker.sock \
|
|
-e FUZZIT_API_KEY=$(FUZZIT_API_KEY) \
|
|
openpolicyagent/fuzzer:$(BUILD_COMMIT) \
|
|
./fuzzit create job --type "fuzzing" opa/ast ast-fuzzer
|
|
|
|
######################################################
|
|
#
|
|
# Release targets
|
|
#
|
|
######################################################
|
|
|
|
.PHONY: release
|
|
release:
|
|
$(DOCKER) run -it --rm \
|
|
-v $(PWD)/_release/$(VERSION):/_release/$(VERSION) \
|
|
-v $(PWD):/_src \
|
|
$(RELEASE_BUILD_IMAGE) \
|
|
/_src/build/build-release.sh --version=$(VERSION) --output-dir=/_release/$(VERSION) --source-url=/_src
|
|
|
|
.PHONY: release-local
|
|
release-local:
|
|
$(DOCKER) run -it --rm \
|
|
-v $(PWD)/_release/$(VERSION):/_release/$(VERSION) \
|
|
-v $(PWD):/_src \
|
|
$(RELEASE_BUILD_IMAGE) \
|
|
/_src/build/build-release.sh --output-dir=/_release/$(VERSION) --source-url=/_src
|
|
|
|
.PHONY: release-patch
|
|
release-patch:
|
|
@$(DOCKER) run -it --rm \
|
|
-e LAST_VERSION=$(LAST_VERSION) \
|
|
-v $(PWD):/_src \
|
|
python:2.7 \
|
|
/_src/build/gen-release-patch.sh --version=$(VERSION) --source-url=/_src
|
|
|
|
.PHONY: dev-patch
|
|
dev-patch:
|
|
@$(DOCKER) run -it --rm \
|
|
-v $(PWD):/_src \
|
|
python:2.7 \
|
|
/_src/build/gen-dev-patch.sh --version=$(VERSION) --source-url=/_src
|