Skip to content
83 changes: 77 additions & 6 deletions entrypoint.sh
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ fi
# Setting branch name
BRANCH="${INPUT_TARGET_BRANCH:-$(git symbolic-ref --short -q HEAD)}"
# Add timestamp to branch name
if [[ "${INPUT_ADD_TIMESTAMP}" == "true" && -n ${FILES_CHANGED} ]]; then
if [[ "${INPUT_ADD_TIMESTAMP}" == "true" ]]; then
TIMESTAMP=$(date -u +"%Y-%m-%dT%H-%M-%SZ")
if [[ -n ${BRANCH} ]]; then
BRANCH="${BRANCH}-${TIMESTAMP}"
Expand All @@ -53,9 +53,73 @@ if [[ "${INPUT_ADD_TIMESTAMP}" == "true" && -n ${FILES_CHANGED} ]]; then
fi
echo -e "\n[INFO] Target branch: ${BRANCH}"

# Create a new branch
if [[ (-n "${INPUT_TARGET_BRANCH}" || "${INPUT_ADD_TIMESTAMP}" == "true") && -n ${FILES_CHANGED} ]]; then
git checkout -b "${BRANCH}"
# Enhanced branch handling with proper remote synchronization
if [[ -n "${INPUT_TARGET_BRANCH}" || "${INPUT_ADD_TIMESTAMP}" == "true" ]]; then
# Fetch latest changes from remote
echo "[INFO] Fetching latest changes from remote..."
git fetch origin || {
echo "[WARNING] Could not fetch from remote. Proceeding with local operations."
}

# Check if remote branch exists
REMOTE_BRANCH_EXISTS=$(git ls-remote --heads origin "${BRANCH}" 2>/dev/null | wc -l)

# Improved main branch detection
MAIN_BRANCH="main"
if git show-ref --verify --quiet "refs/remotes/origin/main"; then
MAIN_BRANCH="main"
elif git show-ref --verify --quiet "refs/remotes/origin/master"; then
MAIN_BRANCH="master"
else
# Try to get default branch from remote HEAD
MAIN_BRANCH=$(git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's@^refs/remotes/origin/@@' || echo "main")
fi
echo "[INFO] Detected main branch: ${MAIN_BRANCH}"

if [[ ${REMOTE_BRANCH_EXISTS} -gt 0 ]]; then
echo "[INFO] Remote branch '${BRANCH}' exists, checking out and updating..."
# Check if local branch exists
if git show-ref --verify --quiet "refs/heads/${BRANCH}"; then
echo "[INFO] Local branch '${BRANCH}' exists, switching to it..."
git checkout "${BRANCH}" || {
echo "[ERROR] Failed to checkout branch ${BRANCH}"
exit 1
}
else
echo "[INFO] Creating local branch '${BRANCH}' from remote..."
git checkout -b "${BRANCH}" "origin/${BRANCH}" || {
echo "[ERROR] Failed to create local branch from remote"
exit 1
}
fi

# Ensure branch is up-to-date with main/master (only if they're different branches)
if [[ "${BRANCH}" != "${MAIN_BRANCH}" ]] && git show-ref --verify --quiet "refs/remotes/origin/${MAIN_BRANCH}"; then
echo "[INFO] Rebasing branch onto ${MAIN_BRANCH}..."
git rebase "origin/${MAIN_BRANCH}" || {
echo "[WARNING] Rebase onto ${MAIN_BRANCH} failed. This may indicate conflicts."
echo "[INFO] Attempting to abort the rebase and continue without sync..."
git rebase --abort 2>/dev/null || true
echo "[INFO] Branch will remain at its current state without sync to ${MAIN_BRANCH}"
}
fi
else
echo "[INFO] Remote branch '${BRANCH}' does not exist, creating new branch..."
# Ensure starting from the latest main/master
if git show-ref --verify --quiet "refs/remotes/origin/${MAIN_BRANCH}"; then
echo "[INFO] Creating branch from latest ${MAIN_BRANCH}..."
git checkout -b "${BRANCH}" "origin/${MAIN_BRANCH}" || {
echo "[ERROR] Failed to create branch from ${MAIN_BRANCH}"
exit 1
}
else
echo "[INFO] Creating branch from current HEAD..."
git checkout -b "${BRANCH}" || {
echo "[ERROR] Failed to create branch from HEAD"
exit 1
}
fi
fi
fi

# Create an auto commit
Expand Down Expand Up @@ -104,9 +168,16 @@ if [[ "${INPUT_FORCE}" == "true" ]]; then
elif [[ "${INPUT_FORCE_WITH_LEASE}" == "true" ]]; then
echo "[INFO] Force pushing changes with lease"
git push --force-with-lease origin "${BRANCH}"
elif [[ -n ${FILES_CHANGED} || "${INPUT_AMEND}" == "true" ]]; then
elif [[ -n ${FILES_CHANGED} || "${INPUT_AMEND}" == "true" || -n "${INPUT_TARGET_BRANCH}" ]]; then
echo "[INFO] Pushing changes"
git push origin "${BRANCH}"
# Check if branch has upstream tracking
if git rev-parse --abbrev-ref "${BRANCH}@{upstream}" >/dev/null 2>&1; then
echo "[INFO] Branch has upstream, pushing normally"
git push origin "${BRANCH}"
else
echo "[INFO] Branch has no upstream, setting upstream on push"
git push -u origin "${BRANCH}"
fi
fi

# Finish
Expand Down