mirror of
https://github.com/open-policy-agent/opa.git
synced 2026-08-27 02:34:52 -06:00
708cfd289e
Previously the wasm-test make target did not build the wasm libary and update the checked in version. This was a bit clunky if you were making changes to the wasm library implementation and wanting to run the integration tests. It wasn't an issue before because we were not extending the wasm library implementation much after the initial work. With these changes, the wasm-test make target depends on the generate target which will cause the wasm library to be rebuilt. The build caching works so this doesn't slow down the feedback loop much. Signed-off-by: Torin Sandall <torinsandall@gmail.com>
225 lines
5.5 KiB
Makefile
225 lines
5.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.9.3-dev
|
|
|
|
GO := go
|
|
GOVERSION := 1.10
|
|
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_BUILDER_VERSION := 1.0
|
|
|
|
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
|
|
#
|
|
######################################################
|
|
|
|
.PHONY: all
|
|
all: deps build test perf check
|
|
|
|
.PHONY: version
|
|
version:
|
|
@echo $(VERSION)
|
|
|
|
.PHONY: deps
|
|
deps:
|
|
@./build/install-deps.sh
|
|
|
|
.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: generate
|
|
generate: wasm-build
|
|
$(GO) generate
|
|
|
|
.PHONY: build
|
|
build: go-build
|
|
|
|
.PHONY: go-build
|
|
go-build: generate
|
|
$(GO) build -o $(BIN) -ldflags $(LDFLAGS)
|
|
|
|
.PHONY: image
|
|
image:
|
|
@$(MAKE) build GOOS=linux
|
|
@$(MAKE) image-quick
|
|
|
|
.PHONY: image-quick
|
|
image-quick:
|
|
sed -e 's/GOARCH/$(GOARCH)/g' Dockerfile.in > .Dockerfile_$(GOARCH)
|
|
sed -e 's/GOARCH/$(GOARCH)/g' Dockerfile_debug.in > .Dockerfile_debug_$(GOARCH)
|
|
docker build -t $(IMAGE):$(VERSION) -f .Dockerfile_$(GOARCH) .
|
|
docker build -t $(IMAGE):$(VERSION)-debug -f .Dockerfile_debug_$(GOARCH) .
|
|
|
|
.PHONY: push
|
|
push:
|
|
docker push $(IMAGE):$(VERSION)
|
|
docker push $(IMAGE):$(VERSION)-debug
|
|
|
|
.PHONY: tag-latest
|
|
tag-latest:
|
|
docker tag $(IMAGE):$(VERSION) $(IMAGE):latest
|
|
docker tag $(IMAGE):$(VERSION)-debug $(IMAGE):latest-debug
|
|
|
|
.PHONY: push-latest
|
|
push-latest:
|
|
docker push $(IMAGE):latest
|
|
docker push $(IMAGE):latest-debug
|
|
|
|
.PHONY: docker-login
|
|
docker-login:
|
|
@docker login -u ${DOCKER_USER} -p ${DOCKER_PASSWORD}
|
|
|
|
.PHONY: deploy-travis
|
|
deploy-travis: docker-login image-quick push
|
|
|
|
.PHONY: release-travis
|
|
release-travis: deploy-travis tag-latest push-latest
|
|
|
|
.PHONY: install
|
|
install: generate
|
|
$(GO) install -ldflags $(LDFLAGS)
|
|
|
|
.PHONY: test
|
|
test: opa-wasm-test go-test wasm-test
|
|
|
|
.PHONY: opa-wasm-test
|
|
opa-wasm-test:
|
|
ifeq ($(DOCKER_INSTALLED), 1)
|
|
@$(MAKE) -C wasm test
|
|
else
|
|
@echo "Docker not installed. Skipping OPA-WASM library test."
|
|
endif
|
|
|
|
.PHONY: go-test
|
|
go-test: generate
|
|
$(GO) test ./...
|
|
|
|
.PHONY: wasm-test
|
|
wasm-test: generate
|
|
ifeq ($(DOCKER_INSTALLED), 1)
|
|
@mkdir -p _test
|
|
@$(GO) run test/wasm/cmd/testgen.go --input-dir test/wasm/assets --output _test/testcases.tar.gz
|
|
@$(DOCKER) run -it --rm -e VERBOSE=$(VERBOSE) -v $(PWD):/src -w /src node:8 ./build/test-wasm.sh
|
|
else
|
|
@echo "Docker not installed. Skipping WASM-based test execution."
|
|
endif
|
|
|
|
.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: wasm-clean
|
|
wasm-clean:
|
|
@$(MAKE) -C wasm clean
|
|
|
|
.PHONY: clean
|
|
clean: wasm-clean
|
|
rm -f .Dockerfile_*
|
|
rm -f opa_*_*
|
|
rm -fr site.tar.gz docs/_site docs/node_modules docs/book/_book docs/book/node_modules
|
|
rm -fr _test
|
|
|
|
.PHONY: docs
|
|
docs:
|
|
docker run -it --rm \
|
|
-v $(PWD):/go/src/github.com/open-policy-agent/opa \
|
|
-w /go/src/github.com/open-policy-agent/opa \
|
|
-p 4000:4000 \
|
|
$(REPOSITORY)/release-builder:$(RELEASE_BUILDER_VERSION) \
|
|
./build/build-docs.sh --output-dir=/go/src/github.com/open-policy-agent/opa --serve=4000
|
|
|
|
######################################################
|
|
#
|
|
# Release targets
|
|
#
|
|
######################################################
|
|
|
|
.PHONY: release-builder
|
|
release-builder:
|
|
sed -e s/GOVERSION/$(GOVERSION)/g Dockerfile_release-builder.in > .Dockerfile_release-builder
|
|
docker build -f .Dockerfile_release-builder -t $(REPOSITORY)/release-builder:$(RELEASE_BUILDER_VERSION) -t $(REPOSITORY)/release-builder:latest .
|
|
|
|
.PHONY: push-release-builder
|
|
push-release-builder:
|
|
docker push $(REPOSITORY)/release-builder:latest
|
|
docker push $(REPOSITORY)/release-builder:$(RELEASE_BUILDER_VERSION)
|
|
|
|
.PHONY: release
|
|
release:
|
|
docker run -it --rm \
|
|
-v $(PWD)/_release/$(VERSION):/_release/$(VERSION) \
|
|
-v $(PWD):/_src \
|
|
$(REPOSITORY)/release-builder:$(RELEASE_BUILDER_VERSION) \
|
|
/_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 \
|
|
$(REPOSITORY)/release-builder:$(RELEASE_BUILDER_VERSION) \
|
|
/_src/build/build-release.sh --output-dir=/_release/$(VERSION) --source-url=/_src
|
|
|
|
.PHONY: release-patch
|
|
release-patch:
|
|
@docker run -it --rm \
|
|
-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
|