Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/workflows/client-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -234,6 +234,7 @@ jobs:
git config --global user.email "$gituseremail"
git config --global user.name "$gituser"
git clone https://$cachetoken@github.com/appsmithorg/cibuildcache.git
git lfs update --force
git lfs install
cd cibuildcache/
if [ "$reponame" = "appsmith" ]; then export repodir="CE"; fi
Expand Down
95 changes: 95 additions & 0 deletions app/client/.husky/pre-push
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
#!/bin/bash

echo "Pre push hook called"

# An example hook script to verify what is about to be pushed. Called by "git
# push" after it has checked the remote status, but before anything has been
# pushed. If this script exits with a non-zero status nothing will be pushed.
#
# This hook is called with the following parameters:
#
# $1 -- Name of the remote to which the push is being done
# $2 -- URL to which the push is being done
#
# If pushing without using a named remote those arguments will be equal.
#
# Information about the commits which are being pushed is supplied as lines to
# the standard input in the form:
#
# <local ref> <local oid> <remote ref> <remote oid>

appsmith_ee_url="appsmith-ee.git"
appsmith_ce_url="appsmithorg/appsmith.git"

# Define the null SHA.
null_sha="0000000000000000000000000000000000000000"

# Function to get list of files between two commits
do_commits_contain_ee_files() {
# Store the commit hashes
from_commit=$1
to_commit=$2
string_to_match="app/client/src/ee"

# to_commit sha can be null if a branch is being pushed for the first to remote
# In that case, we would need to compare the diff against a default branch, like release.
if [ "$to_commit" == "$null_sha" ]; then
echo "comparing changes against release"

remote_name=$(git remote -v | grep -i $appsmith_ce_url | grep -i fetch | awk '{print $1}')
echo "remote name is $remote_name"

git fetch $remote_name release
to_commit=$remote_name/release
fi

echo "to_commit in function is $to_commit"
echo "from_commit is $from_commit"

# Get the list of files between the two commits
files=$(git diff --name-only $from_commit $to_commit)

# Iterate over each file
for file in $files; do
# Check if the file path contains the string
if [[ "$file" == *"$string_to_match"* ]]; then
echo "File '$file' matches the string '$string_to_match'"
return 0
fi
done
return 1
}
Comment on lines +27 to +61

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Consider using local for variables within the function.

Using local for from_commit, to_commit, and string_to_match will limit their scope to the function and prevent potential conflicts.

-    from_commit=$1
-    to_commit=$2
-    string_to_match="app/client/src/ee"
+    local from_commit=$1
+    local to_commit=$2
+    local string_to_match="app/client/src/ee"
Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
# Function to get list of files between two commits
do_commits_contain_ee_files() {
# Store the commit hashes
from_commit=$1
to_commit=$2
string_to_match="app/client/src/ee"
# to_commit sha can be null if a branch is being pushed for the first to remote
# In that case, we would need to compare the diff against a default branch, like release.
if [ "$to_commit" == "$null_sha" ]; then
echo "comparing changes against release"
remote_name=$(git remote -v | grep -i $appsmith_ce_url | grep -i fetch | awk '{print $1}')
echo "remote name is $remote_name"
git fetch $remote_name release
to_commit=$remote_name/release
fi
echo "to_commit in function is $to_commit"
echo "from_commit is $from_commit"
# Get the list of files between the two commits
files=$(git diff --name-only $from_commit $to_commit)
# Iterate over each file
for file in $files; do
# Check if the file path contains the string
if [[ "$file" == *"$string_to_match"* ]]; then
echo "File '$file' matches the string '$string_to_match'"
return 0
fi
done
return 1
}
do_commits_contain_ee_files() {
# Store the commit hashes
local from_commit=$1
local to_commit=$2
local string_to_match="app/client/src/ee"
# to_commit sha can be null if a branch is being pushed for the first to remote
# In that case, we would need to compare the diff against a default branch, like release.
if [ "$to_commit" == "$null_sha" ]; then
echo "comparing changes against release"
remote_name=$(git remote -v | grep -i $appsmith_ce_url | grep -i fetch | awk '{print $1}')
echo "remote name is $remote_name"
git fetch $remote_name release
to_commit=$remote_name/release
fi
echo "to_commit in function is $to_commit"
echo "from_commit is $from_commit"
# Get the list of files between the two commits
files=$(git diff --name-only $from_commit $to_commit)
# Iterate over each file
for file in $files; do
# Check if the file path contains the string
if [[ "$file" == *"$string_to_match"* ]]; then
echo "File '$file' matches the string '$string_to_match'"
return 0
fi
done
return 1
}



remote="$1"
url="$2"

echo "URL is $url"
echo "remote is $remote"
echo "remote sha is $remote_sha"

if [[ "$url" == *"$appsmith_ee_url"* ]]; then
echo "Hook invoked on EE repo. Ignoring pre-push hook checks"
exit 0
fi

while read local_ref local_sha remote_ref remote_sha
do
echo "pushing from $local_sha to $remote_sha"
echo "local ref is " $local_ref
echo "remote ref is " $remote_ref

if [ "$local_sha" == "$null_sha" ]; then
echo "Branch is being deleted. Allow push"
exit 0
fi

if do_commits_contain_ee_files $local_sha $remote_sha
then
echo -e "Found EE changes in the commits\n"
exit 1
else
echo -e "Didn't find ee changes in the commits\n"
exit 0
fi
done