-
Notifications
You must be signed in to change notification settings - Fork 3.8k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add pre push hook to not allow ee changes in ce
- Loading branch information
1 parent
e4fc6d2
commit b6e5636
Showing
2 changed files
with
96 additions
and
0 deletions.
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 |
---|---|---|
|
@@ -234,6 +234,7 @@ jobs: | |
git config --global user.email "$gituseremail" | ||
git config --global user.name "$gituser" | ||
git clone https://[email protected]/appsmithorg/cibuildcache.git | ||
git lfs update --force | ||
git lfs install | ||
cd cibuildcache/ | ||
if [ "$reponame" = "appsmith" ]; then export repodir="CE"; fi | ||
|
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,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 | ||
} | ||
|
||
|
||
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 |