Skip to content

DM-54614: Add initial version of DP2 schema #1077

DM-54614: Add initial version of DP2 schema

DM-54614: Add initial version of DP2 schema #1077

Workflow file for this run

name: Compare Schemas for Changes
on:
pull_request:
jobs:
compare:
runs-on: ubuntu-latest
steps:
- name: Check out repo
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Setup Python environment
uses: ./.github/actions/setup-python
- name: Set relative path to schema directory
run: |
echo "SCHEMA_DIR=python/lsst/sdm/schemas" >> $GITHUB_ENV
- name: Get list of changed YAML files
run: |
echo "Checking for changes compared with: ${{ github.event.pull_request.base.ref }}"
DIFF_OUTPUT=$(git diff --name-only origin/${{ github.event.pull_request.base.ref }}..HEAD -- ${{ env.SCHEMA_DIR }})
CHANGED_FILES=$(echo "$DIFF_OUTPUT" | grep '\.yaml$' || true)
if [ -z "$CHANGED_FILES" ]; then
echo "No schema files changed."
echo "CHANGED_FILES=" >> $GITHUB_ENV
echo "SCHEMA_FILES_CHANGED=false" >> $GITHUB_ENV
else
CHANGED_FILES=$(echo "$CHANGED_FILES" | sed "s|^${{ env.SCHEMA_DIR }}/||" | tr '\n' ' ')
echo "Changed YAML files: $CHANGED_FILES"
echo "CHANGED_FILES=$CHANGED_FILES" >> $GITHUB_ENV
echo "SCHEMA_FILES_CHANGED=true" >> $GITHUB_ENV
fi
- name: Check out PR base ref
if: env.SCHEMA_FILES_CHANGED == 'true'
uses: actions/checkout@v6
with:
ref: ${{ github.event.pull_request.base.ref }}
path: base-ref
- name: Filter list of changed files
if: env.SCHEMA_FILES_CHANGED == 'true'
run: |
if [ -n "$CHANGED_FILES" ]; then
for file in $CHANGED_FILES; do
if [ ! -f "base-ref/${{ env.SCHEMA_DIR }}/$file" ]; then
echo "File $file not found in base ref, removing from list of changed files."
CHANGED_FILES=$(echo "$CHANGED_FILES" | sed "s|$file||")
fi
if [ ! -f "${{ env.SCHEMA_DIR }}/$file" ]; then
echo "File $file not found in current ref, removing from list of changed files."
CHANGED_FILES=$(echo "$CHANGED_FILES" | sed "s|$file||")
fi
done
CHANGED_FILES=$(echo "$CHANGED_FILES" | tr -s ' ' | sed 's/^ //')
echo "Changed YAML files: $CHANGED_FILES"
echo "CHANGED_FILES=$CHANGED_FILES" >> $GITHUB_ENV
fi
if [ -z "$CHANGED_FILES" ]; then
echo "No schema files changes were detected after filtering."
echo "SCHEMA_FILES_CHANGED=false" >> $GITHUB_ENV
fi
- name: Run deepdiff comparison
if: env.SCHEMA_FILES_CHANGED == 'true'
run: |
for file in ${{ env.CHANGED_FILES }}; do
echo "Comparing $file..."
BASE_FILE=base-ref/${{ env.SCHEMA_DIR }}/$file
CURRENT_FILE=${{ env.SCHEMA_DIR }}/$file
felis --log-level ERROR diff -c deepdiff $BASE_FILE $CURRENT_FILE
done
- name: Run alembic comparison
if: env.SCHEMA_FILES_CHANGED == 'true'
run: |
for file in ${{ env.CHANGED_FILES }}; do
echo "Comparing $file..."
BASE_FILE=base-ref/${{ env.SCHEMA_DIR }}/$file
CURRENT_FILE=${{ env.SCHEMA_DIR }}/$file
felis --log-level ERROR diff -c alembic $BASE_FILE $CURRENT_FILE
done
- name: Run alembic comparison on deployed schemas
if: env.SCHEMA_FILES_CHANGED == 'true'
run: |
ERROR_FLAG=0
DEPLOYED_SCHEMAS=$(cat yml/deployed-schemas.txt)
for file in ${{ env.CHANGED_FILES }}; do
if echo "$DEPLOYED_SCHEMAS" | grep -q "^$file$"; then
echo "Comparing $file..."
BASE_FILE=base-ref/${{ env.SCHEMA_DIR }}/$file
CURRENT_FILE=${{ env.SCHEMA_DIR }}/$file
if ! felis --log-level ERROR diff -E -c alembic $BASE_FILE $CURRENT_FILE; then
echo "Error comparing $file"
ERROR_FLAG=1
fi
else
echo "Skipping $file (not in deployed-schemas.txt)"
fi
done
if [ $ERROR_FLAG -ne 0 ]; then
echo "One or more schemas was changed."
exit 1
fi