diff --git a/Makefile b/Makefile index 9c65646..c20b447 100644 --- a/Makefile +++ b/Makefile @@ -16,8 +16,11 @@ export TERRAFORM_PROVIDER_REPO ?= https://github.com/keycloak/terraform-provider export TERRAFORM_PROVIDER_VERSION ?= 5.1.0 export TERRAFORM_PROVIDER_DOWNLOAD_NAME ?= terraform-provider-keycloak export TERRAFORM_PROVIDER_DOWNLOAD_URL_PREFIX ?= ${TERRAFORM_PROVIDER_REPO}/releases/download/v$(TERRAFORM_PROVIDER_VERSION) -export TERRAFORM_NATIVE_PROVIDER_BINARY ?= terraform-provider-keycloak_v5.1.0 +export TERRAFORM_NATIVE_PROVIDER_BINARY ?= terraform-provider-keycloak_v$(TERRAFORM_PROVIDER_VERSION) export TERRAFORM_DOCS_PATH ?= docs/resources +export TERRAFORM_FILE_MIRROR ?= .terraform.d/plugins +export TERRAFORM_FILE_MIRROR_REPO ?= ${TERRAFORM_FILE_MIRROR}/registry.terraform.io +export TF_CLI_CONFIG_FILE ?= export GOLANGCILINT_VERSION ?= 1.57.2 @@ -124,11 +127,26 @@ $(TERRAFORM): check-terraform-version $(TERRAFORM_PROVIDER_SCHEMA): $(TERRAFORM) @$(INFO) generating provider schema for $(TERRAFORM_PROVIDER_SOURCE) $(TERRAFORM_PROVIDER_VERSION) @mkdir -p $(TERRAFORM_WORKDIR) + @$(MAKE) download-tf-provider-platforms @echo '{"terraform":[{"required_providers":[{"provider":{"source":"'"$(TERRAFORM_PROVIDER_SOURCE)"'","version":"'"$(TERRAFORM_PROVIDER_VERSION)"'"}}],"required_version":"'"$(TERRAFORM_VERSION)"'"}]}' > $(TERRAFORM_WORKDIR)/main.tf.json - @$(TERRAFORM) -chdir=$(TERRAFORM_WORKDIR) init > $(TERRAFORM_WORKDIR)/terraform-logs.txt 2>&1 - @$(TERRAFORM) -chdir=$(TERRAFORM_WORKDIR) providers schema -json=true > $(TERRAFORM_PROVIDER_SCHEMA) 2>> $(TERRAFORM_WORKDIR)/terraform-logs.txt + @echo 'provider_installation { filesystem_mirror { path = "$(TERRAFORM_WORKDIR)/$(TERRAFORM_FILE_MIRROR)" include = ["*/*/*"] } }' > $(TERRAFORM_WORKDIR)/config.tfrc + @TF_CLI_CONFIG_FILE=$(TERRAFORM_WORKDIR)/config.tfrc $(TERRAFORM) -chdir=$(TERRAFORM_WORKDIR) init -no-color > $(TERRAFORM_WORKDIR)/terraform-logs.txt 2>&1 + @TF_CLI_CONFIG_FILE=$(TERRAFORM_WORKDIR)/config.tfrc $(TERRAFORM) -chdir=$(TERRAFORM_WORKDIR) providers schema -json=true > $(TERRAFORM_PROVIDER_SCHEMA) 2>> $(TERRAFORM_WORKDIR)/terraform-logs.txt @$(OK) generating provider schema for $(TERRAFORM_PROVIDER_SOURCE) $(TERRAFORM_PROVIDER_VERSION) +download-tf-provider-platforms: $(foreach p,$(PLATFORMS), download-tf-provider-platform.$(p)) + +download-tf-provider-platform.%: + @$(MAKE) download-tf-provider-platform PLATFORM=$* + +download-tf-provider-platform: + @PLATFORM=$* + @$(INFO) downloading provider for platform $(PLATFORM) + @mkdir -p $(TERRAFORM_WORKDIR)/$(TERRAFORM_FILE_MIRROR_REPO)/$(TERRAFORM_PROVIDER_SOURCE)/$(TERRAFORM_PROVIDER_VERSION)/${PLATFORM} + @curl -fsSL ${TERRAFORM_PROVIDER_DOWNLOAD_URL_PREFIX}/${TERRAFORM_PROVIDER_DOWNLOAD_NAME}_${TERRAFORM_PROVIDER_VERSION}_${PLATFORM}.zip -o $(TERRAFORM_WORKDIR)/$(TERRAFORM_FILE_MIRROR_REPO)/$(TERRAFORM_PROVIDER_SOURCE)/$(TERRAFORM_PROVIDER_VERSION)/${PLATFORM}/terraform.zip + @unzip -o -qq $(TERRAFORM_WORKDIR)/$(TERRAFORM_FILE_MIRROR_REPO)/$(TERRAFORM_PROVIDER_SOURCE)/$(TERRAFORM_PROVIDER_VERSION)/${PLATFORM}/terraform.zip -d $(TERRAFORM_WORKDIR)/$(TERRAFORM_FILE_MIRROR_REPO)/$(TERRAFORM_PROVIDER_SOURCE)/$(TERRAFORM_PROVIDER_VERSION)/${PLATFORM}/ + @rm $(TERRAFORM_WORKDIR)/$(TERRAFORM_FILE_MIRROR_REPO)/$(TERRAFORM_PROVIDER_SOURCE)/$(TERRAFORM_PROVIDER_VERSION)/${PLATFORM}/terraform.zip + pull-docs: @if [ ! -d "$(WORK_DIR)/$(TERRAFORM_PROVIDER_SOURCE)" ]; then \ mkdir -p "$(WORK_DIR)/$(TERRAFORM_PROVIDER_SOURCE)" && \ diff --git a/README.md b/README.md index e02fd9a..26b0c86 100644 --- a/README.md +++ b/README.md @@ -151,7 +151,8 @@ You can explore the available custom resources: Run code-generation pipeline: ```console -go run cmd/generator/main.go "$PWD" +go install golang.org/x/tools/cmd/goimports@latest +go run cmd/generator/main.go "$(pwd)" ``` Checkout sub-repositories: @@ -184,7 +185,62 @@ Build binary: make build ``` -## Regression Tests +### Build from custom Terraform Provider + +If you want to build this crossplane provider on top of a forked `terraform-provider-keycloak` follow these instructions: + +1. Execute code generation: +``` +TERRAFORM_PROVIDER_REPO=https://github.com//terraform-provider-keycloak \ +TERRAFORM_PROVIDER_VERSION=1.0.0 \ +make generate +``` +**Hint:** `TERRAFORM_PROVIDER_VERSION` must be a Release. Releases can be found here: `https://github.com//terraform-provider-keycloak/releases`. +Every ReleaseName should have the prefix "v" (i.e 'v1.0.0'). But if you specify the `TERRAFORM_PROVIDER_VERSION` you need to +skip that prefix (i.e. '1.0.0') + +2. Use forked repo as go dependency: +``` +go mod edit -replace="github.com/keycloak/terraform-provider-keycloak@v0.0.0-20241206084240-f87470c95855=github.com//terraform-provider-keycloak@v1.0.0" +go mod tidy +``` +**Hint:** You can also specify the version as `github.com//terraform-provider-keycloak@v0.0.0--` + +### Build and publish to custom repo + +Install up cli: https://docs.upbound.io/reference/cli/ + +Git tag with the version that should be published: +```console +git tag v +``` + +Create a release branch with git: +```console +git checkout -b release-v +``` + +Ensure that you ran `make generate` and `make build` + +**Hint:** If you want to build a specific platform you can do this with: +```console +PLATFORMS=linux_amd64 make build +``` + +Login +```console +up login -t +``` + +Publish +```console +PLATFORMS=linux_amd64 \ +XPKG_REG_ORGS=xpkg.upbound.io/ \ +XPKG_REG_ORGS_NO_PROMOTE=xpkg.upbound.io/ \ +make publish +``` + +## Regression Tests TODO: Add regression test docs ## Report a Bug