Skip to content

Add check for migrator filename uniqueness #24

Add check for migrator filename uniqueness

Add check for migrator filename uniqueness #24

name: Check Migration Filename Uniqueness
on:
pull_request:
types: [opened, synchronize, reopened]
jobs:
migrator-name-uniqueness-check:
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: read
env:
GH_TOKEN: ${{ github.token }}
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0 # fetch full history so we can diff properly
- name: Fetch base branch
run: |
git fetch origin ${{ github.base_ref }} --depth=1
- name: Find newly added migration files
id: find_migrators
run: |
# Diff only added files between base branch and PR HEAD
new_migrators=$(git diff --name-only --diff-filter=A origin/${{ github.base_ref }}...HEAD | grep '^recipe/migrations/' || true)
echo "Found new migrators:"
echo "$new_migrators"
echo "new_migrators=$new_migrators" >> $GITHUB_OUTPUT
- name: Search for existing uses of that migrator in conda-forge
if: steps.find_migrators.outputs.new_migrators != ''
run: |
failed=0
for m in ${{ steps.find_migrators.outputs.new_migrators }}; do
migrator=$(basename "$m")
echo "Checking for existing uses of migrator $migrator in conda-forge..."
# Search in GH-org with exact path where migrators end up
# https://api.github.com/search/code?q=... uses the heavily under-powered
# legacy search API; we need the newer API (same as searching in web UI)
# that's only available through graphql apparently
query='
query {
search(query:"org:conda-forge path:.ci_support/migrations/$migrator", type: CODE, first: 10) {
codeCount
nodes {
... on Code {
repository { nameWithOwner isArchived }
path
}
}
}
}'
response=$(jq -n --arg q "$query" '{query: $q}' | \
curl -s -H "Authorization: bearer $GH_TOKEN" \
-H "Content-Type: application/json" \
-d @- https://api.github.com/graphql)
echo "Sent $query"
echo "Got $response"
num_hits=$(echo "$response" | jq '[.data.search.nodes[] | select(.repository.isArchived == false)] | length')
if [ "$num_hits" -gt 0 ]; then
echo "Found $num_hits existing occurrences of migrator $migrator in conda-forge"
failed=1
else
echo "No existing occurrences of $migrator found"
fi
done
if [ "$failed" -eq 1 ]; then
echo "Pre-existing uses of migration filename(s) found in conda-forge."
exit 1
fi