DM-54614: Add initial version of DP2 schema #1077
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 |