Skip to content

Commit

Permalink
Map affected files to modules
Browse files Browse the repository at this point in the history
  • Loading branch information
chudilka1 committed Dec 9, 2024
1 parent 58194e2 commit 756f847
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 3 deletions.
42 changes: 42 additions & 0 deletions .github/scripts/map-affected-files-to-modules.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
#!/bin/bash
set -e

# Get the list of changed files from the JSON payload
changed_files=$(echo "$1" | jq -r '.[]')
echo "Changed files: ${changed_files[@]}"

# Find all modules in the repository, strip the leading './' and remove duplicates
modules=$(find . -name 'go.mod' -exec dirname {} \; | sed 's|^./||' | uniq)
echo "Found modules: ${modules[@]}"

# An associative array to track unique modules (since bash v4)
declare -A unique_modules

# Loop through each changed file and determine its module
for path_to_file in $changed_files; do
echo "Resolving a module affected by a file: '$path_to_file'"
for module in $modules; do
echo "Checking against module: '$module'"
if [[ ! $path_to_file =~ \/ ]]; then # if no slash in the path it is the root (i.e. main.go vs .gitignore)
echo "File '$path_to_file' is a file in the root."
unique_modules["."]="."
break
# skip adding a dot to the affected_modules
# if the path to a file matches the path to a module,
# add it to affected_modules
elif [[ $module != "." && $path_to_file =~ ^$module* ]]; then
echo "File '$path_to_file' is in the module '$module'"
unique_modules["$module"]="$module"
break
fi
done
done

# Convert associative array keys to an indexed array
affected_modules=("${!unique_modules[@]}")
echo "Affected modules: ${affected_modules[@]}"

# Convert the array to a JSON array
json_array=$(printf '%s\n' "${affected_modules[@]}" | jq -R . | jq -s .)
echo "JSON array: $json_array"
echo $json_array >> $GITHUB_OUTPUT
11 changes: 8 additions & 3 deletions .github/workflows/ci-core.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ jobs:
permissions:
pull-requests: read
outputs:
affected-packages: ${{ steps.match-every.outputs.non-ignored_files }}
affected-packages: ${{ steps.resolved-modules.outputs }}
deployment-changes: ${{ steps.match-some.outputs.deployment == 'true' }}
should-run-ci-core: ${{ steps.match-some.outputs.core-ci == 'true' || steps.match-every.outputs.non-ignored == 'true' || github.event_name == 'workflow_dispatch' || github.event_name == 'schedule' }}
should-run-golangci: ${{ steps.match-some.outputs.golang-ci == 'true' || steps.match-every.outputs.non-ignored == 'true' || github.event_name == 'workflow_dispatch' }}
Expand Down Expand Up @@ -96,8 +96,13 @@ jobs:
- '!nix-darwin-shell-hook.sh'
- '!LICENSE'
- '!.github/**'
- name: TEST
run: echo "${{ steps.match-every.outputs.non-ignored_files }}"
- name: Resolve affected files to modules
if: ${{ steps.match-every.outputs.non-ignored == 'true' }}
id: resolved-modules
shell: bash
run: |
bash ./github/scripts/map-affected-files-to-modules.sh '${{ steps.match-every.outputs.non-ignored_files }}'
golangci:
name: lint
Expand Down

0 comments on commit 756f847

Please sign in to comment.