Files
tycho-protocol-sdk/.github/actions/substreams-check/action.yml

55 lines
1.9 KiB
YAML

name: 'Substreams Package Names'
description: 'Compute package names from changed files'
inputs:
changed-files:
description: 'List of changed files from tj-actions/changed-files'
required: true
outputs:
package_names:
description: 'Space-separated list of package names that were found'
value: ${{ steps.extract_package_names.outputs.package_names }}
runs:
using: "composite"
steps:
- name: Get changed directories and package names
id: extract_package_names
shell: bash
run: |
# Convert space-separated list to newline-separated list and process
echo '${{ inputs.changed-files }}' | tr ' ' '\n' | grep '^substreams/' | grep -v 'Cargo.lock$' > changed_files.txt
# Initialize empty array for package names
PACKAGE_NAMES=()
# Process each changed file
while IFS= read -r file; do
# Get the directory of the file
dir=$(dirname "$file")
# Find the nearest parent directory containing Cargo.toml
while [ "$dir" != "substreams" ] && [ "$dir" != "." ]; do
if [ -f "$dir/Cargo.toml" ]; then
PACKAGE_NAME=$(grep -m1 '^name = ' "$dir/Cargo.toml" | cut -d'"' -f2)
if [ -n "$PACKAGE_NAME" ]; then
PACKAGE_NAMES+=("$PACKAGE_NAME")
break
fi
fi
dir=$(dirname "$dir")
done
done < changed_files.txt
# Remove duplicates and sort
PACKAGE_NAMES=($(printf "%s\n" "${PACKAGE_NAMES[@]}" | sort -u))
# Join package names with spaces and store
if [ ${#PACKAGE_NAMES[@]} -gt 0 ]; then
echo "package_names=${PACKAGE_NAMES[*]}" >> $GITHUB_OUTPUT
echo "Found packages: ${PACKAGE_NAMES[*]}"
else
echo "No valid packages found"
echo "package_names=" >> $GITHUB_OUTPUT
fi