2585b86aa4
These changes add initial support for the construction of remote components. For now, this support is limited to the NodeJS SDK; follow-up changes will implement support for the other SDKs. Remote components are component resources that are constructed and managed by plugins rather than by Pulumi programs. In this sense, they are a bit like cloud resources, and are supported by the same distribution and plugin loading mechanisms and described by the same schema system. The construction of a remote component is initiated by a `RegisterResourceRequest` with the new `remote` field set to `true`. When the resource monitor receives such a request, it loads the plugin that implements the component resource and calls the `Construct` method added to the resource provider interface as part of these changes. This method accepts the information necessary to construct the component and its children: the component's name, type, resource options, inputs, and input dependencies. It is responsible for dispatching to the appropriate component factory to create the component, then returning its URN, resolved output properties, and output property dependencies. The dependency information is necessary to support features such as delete-before-replace, which rely on precise dependency information for custom resources. These changes also add initial support for more conveniently implementing resource providers in NodeJS. The interface used to implement such a provider is similar to the dynamic provider interface (and may be unified with that interface in the future). An example of a NodeJS program constructing a remote component resource also implemented in NodeJS can be found in `tests/construct_component/nodejs`. This is the core of #2430.
104 lines
4.9 KiB
Makefile
104 lines
4.9 KiB
Makefile
PROJECT_NAME := Pulumi SDK
|
|
SUB_PROJECTS := sdk/dotnet sdk/nodejs sdk/python sdk/go
|
|
include build/common.mk
|
|
|
|
PROJECT := github.com/pulumi/pulumi/pkg/v2/cmd/pulumi
|
|
PROJECT_PKGS := $(shell cd ./pkg && go list ./... | grep -v /vendor/)
|
|
TESTS_PKGS := $(shell cd ./tests && go list ./... | grep -v tests/templates | grep -v /vendor/)
|
|
VERSION := $(shell scripts/get-version HEAD)
|
|
|
|
TESTPARALLELISM := 10
|
|
|
|
ensure::
|
|
$(call STEP_MESSAGE)
|
|
ifeq ($(NOPROXY), true)
|
|
@echo "cd sdk && GO111MODULE=on go mod tidy"; cd sdk && GO111MODULE=on go mod tidy
|
|
@echo "cd sdk && GO111MODULE=on go mod download"; cd sdk && GO111MODULE=on go mod download
|
|
@echo "cd pkg && GO111MODULE=on go mod tidy"; cd pkg && GO111MODULE=on go mod tidy
|
|
@echo "cd pkg && GO111MODULE=on go mod download"; cd pkg && GO111MODULE=on go mod download
|
|
@echo "cd scripts && GO111MODULE=on go mod tidy"; cd scripts && GO111MODULE=on go mod tidy
|
|
@echo "cd scripts && GO111MODULE=on go mod download"; cd scripts && GO111MODULE=on go mod download
|
|
@echo "cd tests && GO111MODULE=on go mod tidy"; cd tests && GO111MODULE=on go mod tidy
|
|
@echo "cd tests && GO111MODULE=on go mod download"; cd tests && GO111MODULE=on go mod download
|
|
@echo "cd scripts && GO111MODULE=on go mod tidy"; cd scripts && GO111MODULE=on go mod tidy
|
|
@echo "cd scripts && GO111MODULE=on go mod download"; cd scripts && GO111MODULE=on go mod download
|
|
else
|
|
@echo "cd sdk && GO111MODULE=on GOPROXY=$(GOPROXY) go mod tidy"; cd sdk && GO111MODULE=on GOPROXY=$(GOPROXY) go mod tidy
|
|
@echo "cd sdk && GO111MODULE=on GOPROXY=$(GOPROXY) go mod download"; cd sdk && GO111MODULE=on GOPROXY=$(GOPROXY) go mod download
|
|
@echo "cd pkg && GO111MODULE=on GOPROXY=$(GOPROXY) go mod tidy"; cd pkg && GO111MODULE=on GOPROXY=$(GOPROXY) go mod tidy
|
|
@echo "cd pkg && GO111MODULE=on GOPROXY=$(GOPROXY) go mod download"; cd pkg && GO111MODULE=on GOPROXY=$(GOPROXY) go mod download
|
|
@echo "cd scripts && GO111MODULE=on GOPROXY=$(GOPROXY) go mod tidy"; cd scripts && GO111MODULE=on GOPROXY=$(GOPROXY) go mod tidy
|
|
@echo "cd scripts && GO111MODULE=on GOPROXY=$(GOPROXY) go mod download"; cd scripts && GO111MODULE=on GOPROXY=$(GOPROXY) go mod download
|
|
@echo "cd tests && GO111MODULE=on GOPROXY=$(GOPROXY) go mod tidy"; cd tests && GO111MODULE=on GOPROXY=$(GOPROXY) go mod tidy
|
|
@echo "cd tests && GO111MODULE=on GOPROXY=$(GOPROXY) go mod download"; cd tests && GO111MODULE=on GOPROXY=$(GOPROXY) go mod download
|
|
@echo "cd scripts && GO111MODULE=on GOPROXY=$(GOPROXY) go mod tidy"; cd scripts && GO111MODULE=on GOPROXY=$(GOPROXY) go mod tidy
|
|
@echo "cd scripts && GO111MODULE=on GOPROXY=$(GOPROXY) go mod download"; cd scripts && GO111MODULE=on GOPROXY=$(GOPROXY) go mod download
|
|
endif
|
|
|
|
|
|
build-proto::
|
|
cd sdk/proto && ./generate.sh
|
|
|
|
.PHONY: generate
|
|
generate::
|
|
$(call STEP_MESSAGE)
|
|
echo "Generate static assets bundle for docs generator"
|
|
cd pkg && go generate ./codegen/docs/gen.go
|
|
|
|
build:: generate
|
|
cd pkg && go install -ldflags "-X github.com/pulumi/pulumi/pkg/v2/version.Version=${VERSION}" ${PROJECT}
|
|
|
|
install:: generate
|
|
cd pkg && GOBIN=$(PULUMI_BIN) go install -ldflags "-X github.com/pulumi/pulumi/pkg/v2/version.Version=${VERSION}" ${PROJECT}
|
|
|
|
dist:: build
|
|
cd pkg && go install -ldflags "-X github.com/pulumi/pulumi/pkg/v2/version.Version=${VERSION}" ${PROJECT}
|
|
|
|
# NOTE: the brew target intentionally avoids the dependency on `build`, as it does not require the language SDKs.
|
|
brew::
|
|
cd pkg && go install -ldflags "-X github.com/pulumi/pulumi/pkg/v2/version.Version=${VERSION}" ${PROJECT}
|
|
|
|
lint::
|
|
for DIR in "pkg" "sdk" "tests" ; do \
|
|
pushd $$DIR ; golangci-lint run -c ../.golangci.yml --timeout 5m ; popd ; \
|
|
done
|
|
|
|
test_fast:: build
|
|
cd pkg && $(GO_TEST_FAST) ${PROJECT_PKGS}
|
|
|
|
test_build:: $(SUB_PROJECTS:%=%_install)
|
|
cd tests/integration/construct_component/testcomponent && yarn install && yarn link @pulumi/pulumi && yarn run tsc
|
|
|
|
test_all:: build test_build $(SUB_PROJECTS:%=%_install)
|
|
cd pkg && $(GO_TEST) ${PROJECT_PKGS}
|
|
cd tests && $(GO_TEST) -v -p=1 ${TESTS_PKGS}
|
|
|
|
.PHONY: publish_tgz
|
|
publish_tgz:
|
|
$(call STEP_MESSAGE)
|
|
./scripts/publish_tgz.sh
|
|
|
|
.PHONY: publish_packages
|
|
publish_packages:
|
|
$(call STEP_MESSAGE)
|
|
./scripts/publish_packages.sh
|
|
|
|
# Run the integration tests for our DockerHub containers. We do so only via the
|
|
# "Travis Cron" job type, because (1) the tests can only be ran _after_ we publish
|
|
# the current SDK version, since it is required by the Docker build. And (2) the
|
|
# tests (currently) aren't reliable enough to run as part of every push to master.
|
|
#
|
|
# So instead we run the ~daily on master. Where we know the current SDK version
|
|
# will have been published.
|
|
.PHONY: test_containers_cron
|
|
test_containers_cron:
|
|
$(call STEP_MESSAGE)
|
|
./scripts/build-docker.sh ${VERSION} --test
|
|
|
|
# The travis_* targets are entrypoints for CI.
|
|
.PHONY: travis_cron travis_push travis_pull_request travis_api
|
|
travis_cron: install dist all
|
|
travis_push: install dist publish_tgz only_test publish_packages
|
|
travis_pull_request: install dist all
|
|
travis_api: install dist all
|