123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- #!/usr/bin/env bash
- # Copyright Materialize, Inc. and contributors. All rights reserved.
- #
- # Use of this software is governed by the Business Source License
- # included in the LICENSE file at the root of this repository.
- #
- # As of the Change Date specified in that file, in accordance with
- # the Business Source License, use of this software will be governed
- # by the Apache License, Version 2.0.
- #
- # check-mzcompose-files.sh - Make sure mzcompose files run automatically in CI
- set -euo pipefail
- cd "$(dirname "$0")/../../../.."
- . misc/shlib/shlib.bash
- check_all_files_referenced_in_ci() {
- RETURN=0
- COMPOSITIONS=$(find . -name mzcompose.py \
- -not -wholename "./misc/python/materialize/cli/mzcompose.py" `# Only glue code, no workflows` \
- -not -wholename "./misc/monitoring/mzcompose.py" `# Only run manually` \
- -not -wholename "./test/canary-environment/mzcompose.py" `# Only run manually` \
- -not -wholename "./test/console/mzcompose.py" `# Only run manually` \
- -not -wholename "./test/mzcompose_examples/mzcompose.py" `# Example only` \
- -not -wholename "./test/get-cloud-hostname/mzcompose.py" `# Utility, no test` \
- | sed -e "s|.*/\([^/]*\)/mzcompose.py|\1|")
- while read -r composition; do
- if ! grep -q "composition: $composition" ci/*/pipeline.template.yml; then
- echo "mzcompose composition \"$composition\" is unused in any CI pipeline file"
- RETURN=1
- fi
- done <<< "$COMPOSITIONS"
- return $RETURN
- }
- check_default_workflow_references_others() {
- RETURN=0
- MZCOMPOSE_TEST_FILES=()
- while IFS= read -r file; do
- MZCOMPOSE_TEST_FILES+=("$file")
- done < <(find ./test -name "mzcompose.py" \
- -not -wholename "./test/canary-environment/mzcompose.py" `# Only run manually` \
- -not -wholename "./test/ssh-connection/mzcompose.py" `# Handled differently` \
- -not -wholename "./test/scalability/mzcompose.py" `# Other workflows are for manual usage` \
- -not -wholename "./test/testdrive-old-kafka-src-syntax/mzcompose.py" `# Other workflow is run separately` \
- -not -wholename "./test/terraform/mzcompose.py" `# Handled differently` \
- )
- for file in "${MZCOMPOSE_TEST_FILES[@]}"; do
- MATCHES_COUNT=$(grep "def workflow_" "$file" -c)
- if (( MATCHES_COUNT > 1 )); then
- # mzcompose file contains more than one workflow
- LOOP_DETECTED=$(grep "c.workflow(name" "$file" -c)
- if (( LOOP_DETECTED < 1 )); then
- echo "$file contains more than one workflow but does not seem to loop over the workflows"
- RETURN=1
- fi
- fi
- done
- if (( RETURN > 0 )); then
- echo "Use this pattern in the default workflow:"
- echo "for name in c.workflows:"
- echo " if name == \"default\":"
- echo " continue"
- echo ""
- echo " with c.test_case(name):"
- echo " c.workflow(name)"
- fi
- return $RETURN
- }
- # ensure that each mzcompose file is referenced
- try check_all_files_referenced_in_ci
- # ensure that each mzcompose file with more than one workflow loops over workflows in the default workflow
- try check_default_workflow_references_others
- # ensure that we can list the compositions without requiring environment variables to be set
- try env -i PATH="$PATH" MZ_DEV_CI_BUILDER="${MZ_DEV_CI_BUILDER:-local}" bin/mzcompose list-compositions > /dev/null
- try_status_report
|