blob: 365e5ad14665cb4b2bd9eb9c0c18f8f63542b9f8 [file]
# set the concourse target default to dev
CONCOURSE ?= ud
# set the pxf-protocol-extension default branch to current branch
BRANCH ?= $(shell git rev-parse --abbrev-ref HEAD)
# set YOUR_TAG to current release tag for longevity pipeline
YOUR_TAG ?= $(shell git describe --tags --abbrev=0)
SHELL = /bin/bash
BUILD_PIPELINE_NAME ?= pxf-build
DEV_BUILD_PIPELINE_NAME ?= dev-$(USER)-$(BRANCH)
PR_BUILD_PIPELINE_NAME ?= pxf_pr_pipeline
CERTIFICATION_PIPELINE_NAME ?= pxf-certification
CLOUDBUILD_PIPELINE_NAME ?= cloudbuild
DEV_CLOUDBUILD_PIPELINE_NAME ?= dev-cloudbuild-$(USER)-$(BRANCH)
PERF_PIPELINE_NAME ?= pxf_perf-$(SCALE)g-RHEL$(REDHAT_MAJOR_VERSION)
GPDB_ARTIFACTS_PIPELINE_NAME ?= gpdb-artifacts
NUM_GPDB5_VERSIONS ?= 10
NUM_GPDB6_VERSIONS ?= 10
NUM_GPDB7_VERSIONS ?= 10
REDHAT_MAJOR_VERSION ?= 7
FLY_CMD ?= fly
CHECK_CREDS ?= true
TEMPLATE_CMD = ./template_tool
FLY_OPTION_NON-INTERACTIVE =
NOTIFY ?= true
# below are dev-build specific vars
MULTINODE_EL7 ?= false
MULTINODE_EL8 ?= false
MULTINODE_EL9 ?= false
MULTINODE_NO_IMPERSONATION ?= false
JDK11 ?= false
CDH ?= false
HDP2 ?= false
HDP3 ?= false
S3 ?= false
ABFSS ?= false
WASBS ?= false
GS ?= false
MINIO ?= false
OEL7 ?= false
FILE ?= false
GP7_CLI ?= false
LOAD ?= false
# used to quickly modify the docker image tag being pulled ONLY in the dev_build_pipeline
PXF_DEV_IMAGE_TAG ?= latest
RELEASE_IMAGE_TAG ?= latest
SET_PIPELINE := set-pipeline
ifeq ($(CHECK_CREDS), true)
SET_PIPELINE += --check-creds
endif
.PHONY: release main certification dev-release dev pr cloudbuild dev-cloudbuild longevity gpdb-artifacts
release: set-release-pipeline
main: set-main-pipeline
certification: set-certification-pipeline
dev-release: set-dev-release-pipeline
dev: set-dev-build-pipeline
pr: set-pr-build-pipeline
cloudbuild: set-cloudbuild-pipeline
dev-cloudbuild: set-dev-cloudbuild-pipeline
longevity: set-longevity-pipeline
gpdb-artifacts: set-gpdb-artifacts-pipeline
# ============================= BUILD PIPELINE TARGETS =============================
.PHONY: set-release-pipeline
set-release-pipeline:
ifndef RELEASE_BRANCH
$(error RELEASE_BRANCH is not set, please set a release branch)
else
RELEASE_IMAGE_TAG = release-$(word 2, $(subst -, , $(RELEASE_BRANCH)))
set-release-pipeline: SHIPIT_REGEX="$(RELEASE_BRANCH)/greenplum-pxf-(.*).txt"
set-release-pipeline: NOTIFY=true
set-release-pipeline: PIPELINE_NAME=$(BUILD_PIPELINE_NAME)-$(RELEASE_BRANCH)
set-release-pipeline: ENVIRONMENT=prod
set-release-pipeline: BUCKET_PREFIX=prod
set-release-pipeline: IMAGE_TAG=${RELEASE_IMAGE_TAG}
set-release-pipeline: set-build-pipeline-base
endif
.PHONY: set-main-pipeline
set-main-pipeline: SHIPIT_REGEX=noop
set-main-pipeline: NOTIFY=true
set-main-pipeline: PIPELINE_NAME=$(BUILD_PIPELINE_NAME)
set-main-pipeline: RELEASE_BRANCH=main
set-main-pipeline: ENVIRONMENT=prod
set-main-pipeline: BUCKET_PREFIX=prod
set-main-pipeline: IMAGE_TAG=latest
set-main-pipeline: set-build-pipeline-base
.PHONY: set-dev-release-pipeline
set-dev-release-pipeline: SHIPIT_REGEX="$(USER)-$(BRANCH)/greenplum-pxf-(.*).txt"
set-dev-release-pipeline: PIPELINE_NAME=$(DEV_BUILD_PIPELINE_NAME)
set-dev-release-pipeline: RELEASE_BRANCH=$(BRANCH)
set-dev-release-pipeline: ENVIRONMENT=dev
set-dev-release-pipeline: EXTRA_VARS=--var=ud/pxf/dev/git-remote-ssh-url=noop
set-dev-release-pipeline: BUCKET_PREFIX=dev/$(USER)-$(BRANCH)
set-dev-release-pipeline: IMAGE_TAG=$(PXF_DEV_IMAGE_TAG)
set-dev-release-pipeline: set-build-pipeline-base
.PHONY: set-build-pipeline-base
set-build-pipeline-base:
@PIPELINE_FILE=$$(mktemp) && \
$(TEMPLATE_CMD) --template build_pipeline-tpl.yml --vars \
environment=$(ENVIRONMENT) \
gchat_notification=$(NOTIFY) \
user=$(USER) \
num_gpdb5_versions=$(NUM_GPDB5_VERSIONS) \
num_gpdb6_versions=$(NUM_GPDB6_VERSIONS) \
num_gpdb7_versions=$(NUM_GPDB7_VERSIONS) >"$${PIPELINE_FILE}" && \
$(FLY_CMD) --target=$(CONCOURSE) \
$(SET_PIPELINE) \
--pipeline=$(PIPELINE_NAME) \
--config "$${PIPELINE_FILE}" \
--load-vars-from=$(HOME)/workspace/pxf/concourse/settings/pxf-multinode-params.yml \
--var=pxf-git-branch=$(RELEASE_BRANCH) \
--var=pxf-build-bucket-prefix=$(BUCKET_PREFIX) \
--var=gpdb-pxf-dev-image-tag=$(IMAGE_TAG) \
--var=shipit-regex=$(SHIPIT_REGEX) \
$(EXTRA_VARS) \
${FLY_OPTION_NON-INTERACTIVE} || echo "Generated yaml has errors: check $${PIPELINE_FILE}"
@echo using the following command to unpause the pipeline:
@echo -e "\t$(FLY_CMD) -t ${CONCOURSE} unpause-pipeline --pipeline ${BUILD_PIPELINE_NAME}"
.PHONY: set-dev-build-pipeline
set-dev-build-pipeline:
@PIPELINE_FILE=$$(mktemp) && \
$(TEMPLATE_CMD) --template dev_build_pipeline-tpl.yml --vars \
gchat_notification=$(NOTIFY) \
multinode_el7=$(MULTINODE_EL7) \
multinode_el8=$(MULTINODE_EL8) \
multinode_el9=$(MULTINODE_EL9) \
multinode_no_impersonation=$(MULTINODE_NO_IMPERSONATION) \
jdk11=$(JDK11) \
cdh=$(CDH) \
hdp2=$(HDP2) \
hdp3=$(HDP3) \
file=$(FILE) \
s3=$(S3) \
abfss=$(ABFSS) \
wasbs=$(WASBS) \
gs=$(GS) \
minio=$(MINIO) \
oel7=$(OEL7) \
gp7_cli=$(GP7_CLI) \
load=$(LOAD) \
dev_pipeline=true \
user=$(USER) \
branch=$(BRANCH) \
num_gpdb5_versions=1 \
num_gpdb6_versions=1 \
num_gpdb7_versions=1 >"$${PIPELINE_FILE}" && \
$(FLY_CMD) --target=$(CONCOURSE) \
$(SET_PIPELINE) \
--pipeline=$(DEV_BUILD_PIPELINE_NAME) \
--config "$${PIPELINE_FILE}" \
--load-vars-from=$(HOME)/workspace/pxf/concourse/settings/pxf-multinode-params.yml \
--var=pxf-git-branch=${BRANCH} \
--var=pxf-build-bucket-prefix=dev/$(USER)-$(BRANCH) \
--var=gpdb-pxf-dev-image-tag=$(PXF_DEV_IMAGE_TAG) \
--var=shipit-regex=$(SHIPIT_REGEX) \
${FLY_OPTION_NON-INTERACTIVE} || echo "Generated yaml has errors: check $${PIPELINE_FILE}"
@echo using the following command to unpause the pipeline:
@echo -e "\t$(FLY_CMD) -t ${CONCOURSE} unpause-pipeline --pipeline ${DEV_BUILD_PIPELINE_NAME}"
.PHONY: set-hadoop-cluster-cleaner
set-hadoop-cluster-cleaner:
@PIPELINE_FILE=$$(mktemp) && \
$(TEMPLATE_CMD) --template hadoop-cluster-cleaner-tpl.yml --vars \
gchat_notification=true >"$${PIPELINE_FILE}" && \
$(FLY_CMD) --target=$(CONCOURSE) \
$(SET_PIPELINE) \
--pipeline=hadoop-cluster-cleaner \
--config "$${PIPELINE_FILE}" \
--var=pxf-git-branch=main \
${FLY_OPTIONS_NON-INTERACTIVE} || echo "Generated yaml has errors: check $${PIPELINE_FILE}"
@echo "using the following command to unpause the pipeline"
@echo -e "\t$(FLY_CMD) -t $(CONCOURSE) unpause-pipeline --pipeline hadoop-cluster-cleaner"
.PHONY: set-pr-build-pipeline
set-pr-build-pipeline:
@PIPELINE_FILE=$$(mktemp) && \
$(TEMPLATE_CMD) --template pr_pipeline-tpl.yml --vars \
gchat_notification=false \
pr_pipeline=true \
num_gpdb5_versions=1 \
num_gpdb6_versions=1 \
num_gpdb7_versions=1 >"$${PIPELINE_FILE}" && \
$(FLY_CMD) --target=$(CONCOURSE) \
$(SET_PIPELINE) \
--pipeline=$(PR_BUILD_PIPELINE_NAME) \
--config "$${PIPELINE_FILE}" \
${FLY_OPTION_NON-INTERACTIVE} || echo "Generated yaml has errors: check $${PIPELINE_FILE}"
@echo using the following command to unpause the pipeline:
@echo -e "\t$(FLY_CMD) -t ${CONCOURSE} unpause-pipeline --pipeline ${PR_BUILD_PIPELINE_NAME}"
# ============================= FORWARD COMPATIBILITY PIPELINE TARGETS =============================
.PHONY: set-certification-pipeline
set-certification-pipeline:
@PIPELINE_FILE=$$(mktemp) && \
$(TEMPLATE_CMD) --template certification_pipeline-tpl.yml --vars \
gchat_notification=true >"$${PIPELINE_FILE}" && \
$(FLY_CMD) --target=$(CONCOURSE) \
$(SET_PIPELINE) \
--pipeline=$(CERTIFICATION_PIPELINE_NAME) \
--config "$${PIPELINE_FILE}" \
--var=pxf-git-branch=${BRANCH} \
--var=gpdb-pxf-dev-image-tag=latest \
${FLY_OPTION_NON-INTERACTIVE} || echo "Generated yaml has errors: check $${PIPELINE_FILE}"
@echo using the following command to unpause the pipeline:
@echo -e "\t$(FLY_CMD) -t ${CONCOURSE} unpause-pipeline --pipeline ${CERTIFICATION_PIPELINE_NAME}"
# ============================= HELPER PIPELINE TARGETS =============================
.PHONY: set-cloudbuild-pipeline
set-cloudbuild-pipeline: PXF_GIT_BRANCH=main
set-cloudbuild-pipeline: GCP_IMAGE_TAG=latest
set-cloudbuild-pipeline: PIPELINE_NAME=$(CLOUDBUILD_PIPELINE_NAME)
set-cloudbuild-pipeline: set-cloudbuild-pipeline-base
.PHONY: set-dev-cloudbuild-pipeline
set-dev-cloudbuild-pipeline: PXF_GIT_BRANCH=$(BRANCH)
set-dev-cloudbuild-pipeline: GCP_IMAGE_TAG=$(PXF_DEV_IMAGE_TAG)
set-dev-cloudbuild-pipeline: PIPELINE_NAME=$(DEV_CLOUDBUILD_PIPELINE_NAME)
set-dev-cloudbuild-pipeline: set-cloudbuild-pipeline-base
.PHONY: set-cloudbuild-pipeline-base
set-cloudbuild-pipeline-base:
$(FLY_CMD) --target=$(CONCOURSE) \
$(SET_PIPELINE) \
--config $(HOME)/workspace/pxf/concourse/pipelines/cloudbuild_pipeline.yml \
--var pxf-git-branch=$(PXF_GIT_BRANCH) \
--var gcp-image-tag=$(GCP_IMAGE_TAG) \
--pipeline $(PIPELINE_NAME) \
${FLY_OPTION_NON-INTERACTIVE} || echo "pipelines/cloudbuild_pipeline.yml has errors"
.PHONY: set-gpdb-artifacts-pipeline
set-gpdb-artifacts-pipeline: generate-gpdb-artifacts-pipeline
$(FLY_CMD) --target=$(CONCOURSE) \
$(SET_PIPELINE) \
--pipeline=${GPDB_ARTIFACTS_PIPELINE_NAME} \
--config ./generated/get_gpdb_artifacts.yml \
--var pxf-git-branch=$(BRANCH) \
${FLY_OPTION_NON-INTERACTIVE}
@echo using the following command to unpause the pipeline:
@echo -e "\t$(FLY_CMD) -t ${CONCOURSE} unpause-pipeline --pipeline ${GPDB_ARTIFACTS_PIPELINE_NAME}"
.PHONY: generate-gpdb-artifacts-pipeline
generate-gpdb-artifacts-pipeline:
mkdir -p generated
$(TEMPLATE_CMD) --template get_gpdb_artifacts-tpl.yml --vars \
num_gpdb5_versions=$(NUM_GPDB5_VERSIONS) \
num_gpdb6_versions=$(NUM_GPDB6_VERSIONS) \
num_gpdb7_versions=$(NUM_GPDB7_VERSIONS)>./generated/get_gpdb_artifacts.yml
.PHONY: singlecluster
singlecluster:
$(FLY_CMD) --target=$(CONCOURSE) \
$(SET_PIPELINE) \
--pipeline=pxf-singlecluster \
--config ~/workspace/pxf/concourse/pipelines/singlecluster-pipeline.yml \
--var pxf-git-branch=main \
${FLY_OPTIONS_NON-INTERACTIVE} || echo "pipelines/singlecluster-pipeline.yml has errors"
@echo "using the following command to unpause the pipeline"
@echo -e "\t$(FLY_CMD) -t $(CONCOURSE) unpause-pipeline --pipeline pxf-singlecluster"
# ============================= PERFORMANCE PIPELINE TARGETS =============================
.PHONY: perf
perf:
@if [ -z '$(SCALE)' ]; then \
echo 'Specify the SCALE for the test (i.e make SCALE=10 perf). Allowed SCALE values are 10, 50, 500'; \
exit 1; \
fi
@PIPELINE_FILE=$$(mktemp) && \
$(TEMPLATE_CMD) --template perf_pipeline-tpl.yml --vars \
redhat_major_version=$(REDHAT_MAJOR_VERSION) >"$${PIPELINE_FILE}" && \
$(FLY_CMD) --target=$(CONCOURSE) \
$(SET_PIPELINE) \
--config "$${PIPELINE_FILE}" \
--load-vars-from=$(HOME)/workspace/pxf/concourse/settings/perf-settings-$(SCALE)g.yml \
--var pxf-git-branch=$(BRANCH) \
--pipeline $(PERF_PIPELINE_NAME) \
${FLY_OPTION_NON-INTERACTIVE}
.PHONY: data-gen-1g
data-gen-1g:
@if ! [ -d ~/workspace/gp-performance-testing ]; then \
echo 'Please clone the gp-performance-testing repository to your workspace.'; \
exit 1; \
fi
make -C ~/workspace/gp-performance-testing \
FLY_TARGET=ud \
data-gen-pxf-parquet-tpc-h-1g-6X \
INPUT_FILE=data-gen-6x-pxf.yml
.PHONY: query-execution-parquet
query-execution-parquet-1g:
@if ! [ -d ~/workspace/gp-performance-testing ]; then \
echo 'Please clone the gp-performance-testing repository to your workspace.'; \
exit 1; \
fi
make -C ~/workspace/gp-performance-testing \
FLY_TARGET=ud \
query-execution-pxf-parquet-tpc-h-1g-6X \
INPUT_FILE=ccp-provision-from-release-pxf.yml
# ============================= LONGEVITY PIPELINE TARGETS =============================
.PHONY: set-longevity-pipeline
set-longevity-pipeline:
$(FLY_CMD) --target=$(CONCOURSE) \
$(SET_PIPELINE) \
--pipeline=dev:longevity_$(YOUR_TAG)_6X_STABLE \
--config pipelines/longevity_pipeline.yml \
--load-vars-from=settings/pxf-multinode-params.yml \
--var=folder-prefix=dev/pivotal \
--var=test-env=dev \
--var=icw_green_bucket=gpdb5-assert-concourse-builds \
--var=gcs-bucket-intermediates=pivotal-gpdb-concourse-resources-intermediates-prod \
--var=gcs-bucket-resources-prod=pivotal-gpdb-concourse-resources-prod \
--var=gpdb-branch=6X_STABLE \
--var=pgport=6000 \
--var=pxf-tag=$(YOUR_TAG)
## ----------------------------------------------------------------------
## List explicit rules
## ----------------------------------------------------------------------
.PHONY: list
list:
@sh -c "$(MAKE) -p no_targets__ 2>/dev/null | \
awk -F':' '/^[a-zA-Z0-9][^\$$#\/\\t=]*:([^=]|$$)/ {split(\$$1,A,/ /);for(i in A)print A[i]}' | \
grep -v Makefile | \
grep -v '%' | \
grep -v '__\$$' | \
sort"
## ----------------------------------------------------------------------
## Lint targets
## ----------------------------------------------------------------------
.PHONY: check
check:
$(MAKE) lint
.PHONY: lint
lint:
$(MAKE) shfmt shellcheck yamllint
.PHONY: shfmt
shfmt:
docker run --rm -v ${CURDIR}:/code mvdan/shfmt:v2.6.4 -d /code
.PHONY: shellcheck
shellcheck:
docker run --rm -v ${CURDIR}:/code mvdan/shfmt:v2.6.4 -f /code | xargs docker run --rm -v ${CURDIR}:/code koalaman/shellcheck:v0.7.0 -e SC1090,SC1091
.PHONY: yamllint
yamllint:
docker run --rm -v ${CURDIR}:/code cytopia/yamllint /code -c /code/.yamllint