2022-01-23 18:47:06 +01:00
.DEFAULT_GOAL := help
2021-10-14 16:48:42 +02:00
PY_SOURCE ?= ingestion/src
2023-10-30 18:23:47 +11:00
i n c l u d e i n g e s t i o n / M a k e f i l e
2021-08-01 14:27:44 -07:00
2022-01-23 18:47:06 +01:00
.PHONY : help
help :
2023-11-22 07:10:37 +01:00
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $( MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":"}; {printf "\033[35m%-35s\033[0m %s\n", $$2, $$3}'
2022-01-23 18:47:06 +01:00
2023-09-19 14:44:36 +02:00
.PHONY : install_e 2e_tests
install_e2e_tests : ## Install the ingestion module with e2e test dependencies (playwright)
python -m pip install "ingestion[e2e_test]/"
playwright install --with-deps
.PHONY : run_e 2e_tests
run_e2e_tests : ## Run e2e tests
2023-10-25 20:47:51 +02:00
pytest --screenshot= only-on-failure --output= "ingestion/tests/e2e/artifacts" $( ARGS) --slowmo 5 --junitxml= ingestion/junit/test-results-e2e.xml ingestion/tests/e2e
2023-09-19 14:44:36 +02:00
2022-01-23 18:47:06 +01:00
## Yarn
.PHONY : yarn_install_cache
yarn_install_cache : ## Use Yarn to install UI dependencies
2021-12-28 23:16:52 +05:30
cd openmetadata-ui/src/main/resources/ui && yarn install --frozen-lockfile
2022-01-23 18:47:06 +01:00
.PHONY : yarn_start_dev_ui
yarn_start_dev_ui : ## Run the UI locally with Yarn
2021-12-28 23:16:52 +05:30
cd openmetadata-ui/src/main/resources/ui && yarn start
2022-01-23 18:47:06 +01:00
2022-05-23 09:51:34 +02:00
.PHONY : py_antlr
py_antlr : ## Generate the Python code for parsing FQNs
2022-09-14 23:14:02 -07:00
antlr4 -Dlanguage= Python3 -o ingestion/src/metadata/generated/antlr ${ PWD } /openmetadata-spec/src/main/antlr4/org/openmetadata/schema/*.g4
2022-08-18 18:32:28 +05:30
.PHONY : js_antlr
js_antlr : ## Generate the Python code for parsing FQNs
2022-09-14 23:14:02 -07:00
antlr4 -Dlanguage= JavaScript -o openmetadata-ui/src/main/resources/ui/src/generated/antlr ${ PWD } /openmetadata-spec/src/main/antlr4/org/openmetadata/schema/*.g4
2022-08-18 18:32:28 +05:30
2023-10-30 18:23:47 +11:00
## Ingestion models generation
.PHONY : generate
generate : ## Generate the pydantic models from the JSON Schemas to the ingestion module
@echo "Running Datamodel Code Generator"
@echo "Make sure to first run the install_dev recipe"
rm -rf ingestion/src/metadata/generated
mkdir -p ingestion/src/metadata/generated
python scripts/datamodel_generation.py
$( MAKE) py_antlr js_antlr
$( MAKE) install
2022-05-23 09:51:34 +02:00
.PHONY : install_antlr_cli
install_antlr_cli : ## Install antlr CLI locally
echo '#!/usr/bin/java -jar' > /usr/local/bin/antlr4
curl https://www.antlr.org/download/antlr-4.9.2-complete.jar >> /usr/local/bin/antlr4
chmod 755 /usr/local/bin/antlr4
2022-06-27 15:14:04 +02:00
2023-05-16 22:04:56 -07:00
.PHONY : docker -docs -local
docker-docs-local : ## Runs the OM docs in docker with a local image
2023-09-13 14:56:45 +02:00
docker run --name openmetadata-docs -p 3000:3000 -v ${ PWD } /openmetadata-docs/content:/docs/content/ -v ${ PWD } /openmetadata-docs/images:/docs/public/images openmetadata-docs:local yarn dev
2023-04-19 06:31:55 +02:00
2023-05-16 22:04:56 -07:00
.PHONY : docker -docs
docker-docs : ## Runs the OM docs in docker passing openmetadata-docs-v1 as volume for content and images
docker pull openmetadata/docs:latest
2023-09-13 14:56:45 +02:00
docker run --name openmetadata-docs -p 3000:3000 -v ${ PWD } /openmetadata-docs/content:/docs/content/ -v ${ PWD } /openmetadata-docs/images:/docs/public/images openmetadata/docs:latest yarn dev
2023-04-19 06:31:55 +02:00
2023-05-16 22:04:56 -07:00
.PHONY : docker -docs -validate
docker-docs-validate : ## Runs the OM docs in docker passing openmetadata-docs as volume for content and images
2023-04-19 06:31:55 +02:00
docker pull openmetadata/docs-v1:latest
2023-05-16 22:04:56 -07:00
docker run --entrypoint '/bin/sh' -v ${ PWD } /openmetadata-docs/content:/docs/content/ -v ${ PWD } /openmetadata-docs/images:/docs/public/images openmetadata/docs:latest -c 'yarn build'
2022-07-28 23:06:33 +02:00
## SNYK
SNYK_ARGS := --severity-threshold= high
.PHONY : snyk -ingestion -report
snyk-ingestion-report : ## Uses Snyk CLI to validate the ingestion code and container. Don't stop the execution
@echo "Validating Ingestion container..."
docker build -t openmetadata-ingestion:scan -f ingestion/Dockerfile .
2022-08-09 21:54:08 +02:00
snyk container test openmetadata-ingestion:scan --file= ingestion/Dockerfile $( SNYK_ARGS) --json > security-report/ingestion-docker-scan.json | true;
2022-07-28 23:06:33 +02:00
@echo "Validating ALL ingestion dependencies. Make sure the venv is activated."
cd ingestion; \
pip freeze > scan-requirements.txt; \
2022-08-09 21:54:08 +02:00
snyk test --file= scan-requirements.txt --package-manager= pip --command= python3 $( SNYK_ARGS) --json > ../security-report/ingestion-dep-scan.json | true; \
snyk code test $( SNYK_ARGS) --json > ../security-report/ingestion-code-scan.json | true;
2022-07-28 23:06:33 +02:00
.PHONY : snyk -airflow -apis -report
snyk-airflow-apis-report : ## Uses Snyk CLI to validate the airflow apis code. Don't stop the execution
@echo "Validating airflow dependencies. Make sure the venv is activated."
cd openmetadata-airflow-apis; \
2022-08-09 21:54:08 +02:00
snyk code test $( SNYK_ARGS) --json > ../security-report/airflow-apis-code-scan.json | true;
2022-07-28 23:06:33 +02:00
.PHONY : snyk -catalog -report
snyk-server-report : ## Uses Snyk CLI to validate the catalog code and container. Don't stop the execution
@echo "Validating catalog container... Make sure the code is built and available under openmetadata-dist"
2023-03-06 08:58:53 -08:00
docker build -t openmetadata-server:scan -f docker/development/Dockerfile .
snyk container test openmetadata-server:scan --file= docker/development/Dockerfile $( SNYK_ARGS) --json > security-report/server-docker-scan.json | true;
2022-08-09 21:54:08 +02:00
snyk test --all-projects $( SNYK_ARGS) --json > security-report/server-dep-scan.json | true;
snyk code test --all-projects --severity-threshold= high --json > security-report/server-code-scan.json | true;
2022-07-28 23:06:33 +02:00
.PHONY : snyk -ui -report
snyk-ui-report : ## Uses Snyk CLI to validate the UI dependencies. Don't stop the execution
2022-08-09 21:54:08 +02:00
snyk test --file= openmetadata-ui/src/main/resources/ui/yarn.lock $( SNYK_ARGS) --json > security-report/ui-dep-scan.json | true;
2022-07-28 23:06:33 +02:00
.PHONY : snyk -dependencies -report
2022-07-29 13:08:12 +02:00
snyk-dependencies-report : ## Uses Snyk CLI to validate the project dependencies: MySQL, Postgres and ES. Only local testing.
2022-07-28 23:06:33 +02:00
@echo "Validating dependencies images..."
2022-08-09 21:54:08 +02:00
snyk container test mysql/mysql-server:latest $( SNYK_ARGS) --json > security-report/mysql-scan.json | true;
snyk container test postgres:latest $( SNYK_ARGS) --json > security-report/postgres-scan.json | true;
snyk container test docker.elastic.co/elasticsearch/elasticsearch:7.10.2 $( SNYK_ARGS) --json > security-report/es-scan.json | true;
2022-07-28 23:06:33 +02:00
.PHONY : snyk -report
snyk-report : ## Uses Snyk CLI to run a security scan of the different pieces of the code
@echo "To run this locally, make sure to install and authenticate using the Snyk CLI: https://docs.snyk.io/snyk-cli/install-the-snyk-cli"
2022-08-09 21:54:08 +02:00
rm -rf security-report
mkdir -p security-report
2022-07-28 23:06:33 +02:00
$( MAKE) snyk-ingestion-report
$( MAKE) snyk-airflow-apis-report
$( MAKE) snyk-server-report
$( MAKE) snyk-ui-report
2023-02-02 17:10:35 +01:00
$( MAKE) export-snyk-pdf-report
2022-07-28 23:06:33 +02:00
2023-02-02 17:10:35 +01:00
.PHONY : export -snyk -pdf -report
export-snyk-pdf-report : ## export json file from security-report/ to HTML
2022-07-28 23:06:33 +02:00
@echo "Reading all results"
2022-08-09 21:54:08 +02:00
npm install snyk-to-html -g
ls security-report | xargs -I % snyk-to-html -i security-report/% -o security-report/%.html
2023-02-02 17:10:35 +01:00
pip install pdfkit
pip install PyPDF2
python scripts/html_to_pdf.py
2022-10-11 07:50:49 +02:00
# Ingestion Operators
.PHONY : build -ingestion -base -local
build-ingestion-base-local : ## Builds the ingestion DEV docker operator with the local ingestion files
$( MAKE) install_dev generate
docker build -f ingestion/operators/docker/Dockerfile-dev . -t openmetadata/ingestion-base:local
2023-07-11 13:29:51 +05:30
.PHONY : generate -schema -docs
generate-schema-docs : ## Generates markdown files for documenting the JSON Schemas
@echo "Generating Schema docs"
2023-10-28 00:07:31 +05:30
# Installing "0.4.0" version for simpler formatting
python3 -m pip install "jsonschema2md==0.4.0"
python3 scripts/generate_docs_schemas.py
2023-09-13 11:40:28 +02:00
#Upgrade release automation scripts below
.PHONY : update_all
2023-11-22 07:10:37 +01:00
update_all : ## To update all the release related files run make update_all RELEASE_VERSION=2.2.2 PY_RELEASE_VERSION=2.2.2.2
2023-09-13 11:40:28 +02:00
@echo " The release version is: $( RELEASE_VERSION) " ; \
echo " The python metadata release version: $( PY_RELEASE_VERSION) " ; \
$( MAKE) update_maven ; \
$( MAKE) update_github_action_paths ; \
$( MAKE) update_python_release_paths ; \
$( MAKE) update_dockerfile_version ; \
$( MAKE) update_ingestion_dockerfile_version ; \
#remove comment and use the below section when want to use this sub module "update_all" independently to update github actions
#make update_all RELEASE_VERSION=2.2.2 PY_RELEASE_VERSION=2.2.2.2
.PHONY : update_maven
2023-11-22 07:10:37 +01:00
update_maven : ## To update the common and pom.xml maven version
2023-09-13 11:40:28 +02:00
@echo " Updating Maven projects to version $( RELEASE_VERSION) ... " ; \
mvn versions:set -DnewVersion= $( RELEASE_VERSION)
#remove comment and use the below section when want to use this sub module "update_maven" independently to update github actions
#make update_maven RELEASE_VERSION=2.2.2
.PHONY : update_github_action_paths
2023-11-22 07:10:37 +01:00
update_github_action_paths : ## To update the github action ci docker files
2023-09-13 11:40:28 +02:00
@echo " Updating docker github action release version to $( RELEASE_VERSION) ... " ; \
file_paths = " docker/docker-compose-quickstart/Dockerfile \
.github/workflows/docker-openmetadata-db.yml \
.github/workflows/docker-openmetadata-ingestion-base.yml \
.github/workflows/docker-openmetadata-ingestion.yml \
.github/workflows/docker-openmetadata-postgres.yml \
.github/workflows/docker-openmetadata-server.yml" ; \
for file_path in $$ file_paths; do \
python3 scripts/update_version.py 1 $$ file_path -s $( RELEASE_VERSION) ; \
done ; \
file_paths1 = "docker/docker-compose-quickstart/Dockerfile" ; \
for file_path in $$ file_paths1; do \
python3 scripts/update_version.py 4 $$ file_path -s $( RELEASE_VERSION) ; \
done
#remove comment and use the below section when want to use this sub module "update_github_action_paths" independently to update github actions
#make update_github_action_paths RELEASE_VERSION=2.2.2
.PHONY : update_python_release_paths
2023-11-22 07:10:37 +01:00
update_python_release_paths : ## To update the setup.py files
2023-09-13 11:40:28 +02:00
file_paths = " ingestion/setup.py \
openmetadata-airflow-apis/setup.py" ; \
echo " Updating Python setup file versions to $( PY_RELEASE_VERSION) ... " ; \
for file_path in $$ file_paths; do \
python3 scripts/update_version.py 2 $$ file_path -s $( PY_RELEASE_VERSION) ; \
done
# Commented section for independent usage of the module update_python_release_paths independently to update github actions
#make update_python_release_paths PY_RELEASE_VERSION=2.2.2.2
.PHONY : update_dockerfile_version
2023-11-22 07:10:37 +01:00
update_dockerfile_version : ## To update the dockerfiles version
2023-11-17 11:33:47 +05:30
@file_paths= " docker/docker-compose-ingestion/docker-compose-ingestion.yml \
2023-09-13 11:40:28 +02:00
docker/docker-compose-openmetadata/docker-compose-openmetadata.yml \
docker/docker-compose-quickstart/docker-compose-postgres.yml \
docker/docker-compose-quickstart/docker-compose.yml" ; \
echo " Updating docker github action release version to $( RELEASE_VERSION) ... " ; \
for file_path in $$ file_paths; do \
python3 scripts/update_version.py 3 $$ file_path -s $( RELEASE_VERSION) ; \
done
#remove comment and use the below section when want to use this sub module "update_dockerfile_version" independently to update github actions
#make update_dockerfile_version RELEASE_VERSION=2.2.2
.PHONY : update_ingestion_dockerfile_version
2023-11-22 07:10:37 +01:00
update_ingestion_dockerfile_version : ## To update the ingestion dockerfiles version
2023-09-13 11:40:28 +02:00
@file_paths= " ingestion/Dockerfile \
ingestion/operators/docker/Dockerfile" ; \
echo " Updating ingestion dockerfile release version to $( PY_RELEASE_VERSION) ... " ; \
for file_path in $$ file_paths; do \
python3 scripts/update_version.py 4 $$ file_path -s $( PY_RELEASE_VERSION) ; \
done
#remove comment and use the below section when want to use this sub module "update_ingestion_dockerfile_version" independently to update github actions
#make update_ingestion_dockerfile_version PY_RELEASE_VERSION=2.2.2.2
#Upgrade release automation scripts above