-
Notifications
You must be signed in to change notification settings - Fork 326
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
add conditional skip and skip running tests and build if only non-cod… (
#4204) * add conditional skip and skip running tests and build if only non-code files are changed * make check_skip_ci file executable
- Loading branch information
Showing
4 changed files
with
123 additions
and
1 deletion.
There are no files selected for viewing
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
#!/bin/bash | ||
# Copyright (c) HashiCorp, Inc. | ||
# SPDX-License-Identifier: MPL-2.0 | ||
|
||
set -euo pipefail | ||
|
||
# first argument is the list, second is the item to check | ||
function contains() { | ||
list=($1) | ||
for item in "${list[@]}"; do | ||
if [ "$item" == "$2" ]; then | ||
return 0 | ||
fi | ||
done | ||
return 1 | ||
} | ||
|
||
# Get the list of changed files | ||
# Using `git merge-base` ensures that we're always comparing against the correct branch point. | ||
#For example, given the commits: | ||
# | ||
# A---B---C---D---W---X---Y---Z # origin/main | ||
# \---E---F # feature/branch | ||
# | ||
# ... `git merge-base origin/$SKIP_CHECK_BRANCH HEAD` would return commit `D` | ||
# `...HEAD` specifies from the common ancestor to the latest commit on the current branch (HEAD).. | ||
files_to_check=$(git diff --name-only "$(git merge-base origin/$SKIP_CHECK_BRANCH HEAD~)"...HEAD) | ||
|
||
# Define the directories to check | ||
skipped_directories=("assets" ".changelog/", "version") | ||
|
||
files_to_skip=("LICENSE" ".copywrite.hcl" ".gitignore") | ||
|
||
# Loop through the changed files and find directories/files outside the skipped ones | ||
files_to_check_array=($files_to_check) | ||
for file_to_check in "${files_to_check_array[@]}"; do | ||
file_is_skipped=false | ||
echo "checking file: $file_to_check" | ||
|
||
# Allow changes to: | ||
# - This script | ||
# - Files in the skipped directories | ||
# - Markdown files | ||
for dir in "${skipped_directories[@]}"; do | ||
if [[ "$file_to_check" == */check_skip_ci.sh ]] || | ||
[[ "$file_to_check" == "$dir"* ]] || | ||
[[ "$file_to_check" == *.md ]] || | ||
contains "${files_to_skip[*]}" "$file_to_check"; then | ||
file_is_skipped=true | ||
break | ||
fi | ||
done | ||
|
||
if [ "$file_is_skipped" != "true" ]; then | ||
echo -e "non-skippable file changed: $file_to_check" | ||
SKIP_CI=false | ||
echo "Changes detected in non-documentation files - will not skip tests and build" | ||
echo "skip-ci=false" >>"$GITHUB_OUTPUT" | ||
exit 0 ## if file is outside of the skipped_directory exit script | ||
fi | ||
done | ||
|
||
echo "Changes detected in only documentation files - skipping tests and build" | ||
echo "skip-ci=true" >>"$GITHUB_OUTPUT" |
Empty file.
This file contains 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
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
name: conditional-skip | ||
|
||
on: | ||
workflow_call: | ||
outputs: | ||
skip-ci: | ||
description: "Whether we should skip build and test jobs" | ||
value: ${{ jobs.check-skip.outputs.skip-ci }} | ||
|
||
jobs: | ||
check-skip: | ||
runs-on: ubuntu-latest | ||
name: Check whether to skip build and tests | ||
outputs: | ||
skip-ci: ${{ steps.check-changed-files.outputs.skip-ci }} | ||
env: | ||
SKIP_CHECK_BRANCH: ${{ github.head_ref || github.ref_name }} | ||
steps: | ||
- uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4 | ||
with: | ||
fetch-depth: 0 | ||
- name: Check changed files | ||
id: check-changed-files | ||
run: ./.github/scripts/check_skip_ci.sh |