mirror of
https://github.com/cpina/github-action-push-to-another-repository.git
synced 2025-01-10 00:59:01 -07:00
Moved entrypoint functionality to functions
Created functions.sh file
This commit is contained in:
parent
037cfb345e
commit
5520368043
|
@ -3,5 +3,6 @@ FROM alpine:latest
|
|||
RUN apk add --no-cache git git-lfs openssh-client
|
||||
|
||||
COPY entrypoint.sh /entrypoint.sh
|
||||
COPY functions.sh /functions.sh
|
||||
|
||||
ENTRYPOINT ["/entrypoint.sh"]
|
||||
|
|
|
@ -3,19 +3,10 @@
|
|||
set -e # if a command fails it stops the execution
|
||||
set -u # script fails if trying to access to an undefined variable
|
||||
|
||||
. ./functions.sh
|
||||
|
||||
echo "[+] Action start"
|
||||
SOURCE_BEFORE_DIRECTORY="${1}"
|
||||
SOURCE_DIRECTORY="${2}"
|
||||
DESTINATION_GITHUB_USERNAME="${3}"
|
||||
DESTINATION_REPOSITORY_NAME="${4}"
|
||||
GITHUB_SERVER="${5}"
|
||||
USER_EMAIL="${6}"
|
||||
USER_NAME="${7}"
|
||||
DESTINATION_REPOSITORY_USERNAME="${8}"
|
||||
TARGET_BRANCH="${9}"
|
||||
COMMIT_MESSAGE="${10}"
|
||||
TARGET_DIRECTORY="${11}"
|
||||
CREATE_TARGET_BRANCH_IF_NEEDED="${12}"
|
||||
getArgs "$@"
|
||||
|
||||
if [ -z "$DESTINATION_REPOSITORY_USERNAME" ]
|
||||
then
|
||||
|
@ -32,24 +23,11 @@ fi
|
|||
if [ -n "${SSH_DEPLOY_KEY:=}" ]
|
||||
then
|
||||
echo "[+] Using SSH_DEPLOY_KEY"
|
||||
|
||||
# Inspired by https://github.com/leigholiver/commit-with-deploy-key/blob/main/entrypoint.sh , thanks!
|
||||
mkdir --parents "$HOME/.ssh"
|
||||
DEPLOY_KEY_FILE="$HOME/.ssh/deploy_key"
|
||||
echo "${SSH_DEPLOY_KEY}" > "$DEPLOY_KEY_FILE"
|
||||
chmod 600 "$DEPLOY_KEY_FILE"
|
||||
|
||||
SSH_KNOWN_HOSTS_FILE="$HOME/.ssh/known_hosts"
|
||||
ssh-keyscan -H "$GITHUB_SERVER" > "$SSH_KNOWN_HOSTS_FILE"
|
||||
|
||||
export GIT_SSH_COMMAND="ssh -i "$DEPLOY_KEY_FILE" -o UserKnownHostsFile=$SSH_KNOWN_HOSTS_FILE"
|
||||
|
||||
GIT_CMD_REPOSITORY="git@$GITHUB_SERVER:$DESTINATION_REPOSITORY_USERNAME/$DESTINATION_REPOSITORY_NAME.git"
|
||||
|
||||
sshDeployKey
|
||||
elif [ -n "${API_TOKEN_GITHUB:=}" ]
|
||||
then
|
||||
echo "[+] Using API_TOKEN_GITHUB"
|
||||
GIT_CMD_REPOSITORY="https://$DESTINATION_REPOSITORY_USERNAME:$API_TOKEN_GITHUB@$GITHUB_SERVER/$DESTINATION_REPOSITORY_USERNAME/$DESTINATION_REPOSITORY_NAME.git"
|
||||
githubToken
|
||||
else
|
||||
echo "::error::API_TOKEN_GITHUB and SSH_DEPLOY_KEY are empty. Please fill one (recommended the SSH_DEPLOY_KEY)"
|
||||
exit 1
|
||||
|
@ -65,29 +43,10 @@ echo "[+] Enable git lfs"
|
|||
git lfs install
|
||||
|
||||
echo "[+] Cloning destination git repository $DESTINATION_REPOSITORY_NAME"
|
||||
# Setup git
|
||||
git config --global user.email "$USER_EMAIL"
|
||||
git config --global user.name "$USER_NAME"
|
||||
setupGit
|
||||
|
||||
{
|
||||
git clone --single-branch --depth 1 --branch "$TARGET_BRANCH" "$GIT_CMD_REPOSITORY" "$CLONE_DIR"
|
||||
} || {
|
||||
if [ "$CREATE_TARGET_BRANCH_IF_NEEDED" = "true" ]
|
||||
then
|
||||
# Default branch of the repository is cloned. Later on the required branch
|
||||
# will be created
|
||||
git clone --single-branch --depth 1 "$GIT_CMD_REPOSITORY" "$CLONE_DIR"
|
||||
else
|
||||
false
|
||||
fi
|
||||
} || {
|
||||
echo "::error::Could not clone the destination repository. Command:"
|
||||
echo "::error::git clone --single-branch --branch $TARGET_BRANCH $GIT_CMD_REPOSITORY $CLONE_DIR"
|
||||
echo "::error::(Note that if they exist USER_NAME and API_TOKEN is redacted by GitHub)"
|
||||
echo "::error::Please verify that the target repository exist AND that it contains the destination branch name, and is accesible by the API_TOKEN_GITHUB OR SSH_DEPLOY_KEY"
|
||||
exit 1
|
||||
cloneRepo
|
||||
|
||||
}
|
||||
ls -la "$CLONE_DIR"
|
||||
|
||||
TEMP_DIR=$(mktemp -d)
|
||||
|
@ -117,19 +76,7 @@ echo "[+] List contents of $SOURCE_DIRECTORY"
|
|||
ls "$SOURCE_DIRECTORY"
|
||||
|
||||
echo "[+] Checking if local $SOURCE_DIRECTORY exist"
|
||||
if [ ! -d "$SOURCE_DIRECTORY" ]
|
||||
then
|
||||
echo "ERROR: $SOURCE_DIRECTORY does not exist"
|
||||
echo "This directory needs to exist when push-to-another-repository is executed"
|
||||
echo
|
||||
echo "In the example it is created by ./build.sh: https://github.com/cpina/push-to-another-repository-example/blob/main/.github/workflows/ci.yml#L19"
|
||||
echo
|
||||
echo "If you want to copy a directory that exist in the source repository"
|
||||
echo "to the target repository: you need to clone the source repository"
|
||||
echo "in a previous step in the same build section. For example using"
|
||||
echo "actions/checkout@v2. See: https://github.com/cpina/push-to-another-repository-example/blob/main/.github/workflows/ci.yml#L16"
|
||||
exit 1
|
||||
fi
|
||||
checkSource
|
||||
|
||||
echo "[+] Copying contents of source repository folder $SOURCE_DIRECTORY to folder $TARGET_DIRECTORY in git repo $DESTINATION_REPOSITORY_NAME"
|
||||
cp -ra "$SOURCE_DIRECTORY"/. "$CLONE_DIR/$TARGET_DIRECTORY"
|
||||
|
@ -147,11 +94,7 @@ echo "[+] Set directory is safe ($CLONE_DIR)"
|
|||
# TODO: review before releasing it as a version
|
||||
git config --global --add safe.directory "$CLONE_DIR"
|
||||
|
||||
|
||||
if [ "$CREATE_TARGET_BRANCH_IF_NEEDED" = "true" ]
|
||||
then
|
||||
git switch -c "$TARGET_BRANCH"
|
||||
fi
|
||||
switchBranch
|
||||
|
||||
echo "[+] Adding git commit"
|
||||
git add .
|
||||
|
|
83
functions.sh
Normal file
83
functions.sh
Normal file
|
@ -0,0 +1,83 @@
|
|||
#!/bin/sh
|
||||
|
||||
getArgs() {
|
||||
SOURCE_BEFORE_DIRECTORY="${1}"
|
||||
SOURCE_DIRECTORY="${2}"
|
||||
DESTINATION_GITHUB_USERNAME="${3}"
|
||||
DESTINATION_REPOSITORY_NAME="${4}"
|
||||
GITHUB_SERVER="${5}"
|
||||
USER_EMAIL="${6}"
|
||||
USER_NAME="${7}"
|
||||
DESTINATION_REPOSITORY_USERNAME="${8}"
|
||||
TARGET_BRANCH="${9}"
|
||||
COMMIT_MESSAGE="${10}"
|
||||
TARGET_DIRECTORY="${11}"
|
||||
CREATE_TARGET_BRANCH_IF_NEEDED="${12}"
|
||||
}
|
||||
|
||||
sshDeployKey() {
|
||||
mkdir --parents "$HOME/.ssh"
|
||||
DEPLOY_KEY_FILE="$HOME/.ssh/deploy_key"
|
||||
echo "${SSH_DEPLOY_KEY}" > "$DEPLOY_KEY_FILE"
|
||||
chmod 600 "$DEPLOY_KEY_FILE"
|
||||
|
||||
SSH_KNOWN_HOSTS_FILE="$HOME/.ssh/known_hosts"
|
||||
ssh-keyscan -H "$GITHUB_SERVER" > "$SSH_KNOWN_HOSTS_FILE"
|
||||
|
||||
export GIT_SSH_COMMAND="ssh -i "$DEPLOY_KEY_FILE" -o UserKnownHostsFile=$SSH_KNOWN_HOSTS_FILE"
|
||||
|
||||
GIT_CMD_REPOSITORY="git@$GITHUB_SERVER:$DESTINATION_REPOSITORY_USERNAME/$DESTINATION_REPOSITORY_NAME.git"
|
||||
}
|
||||
|
||||
githubToken() {
|
||||
GIT_CMD_REPOSITORY="https://$DESTINATION_REPOSITORY_USERNAME:$API_TOKEN_GITHUB@$GITHUB_SERVER/$DESTINATION_REPOSITORY_USERNAME/$DESTINATION_REPOSITORY_NAME.git"
|
||||
}
|
||||
|
||||
setupGit() {
|
||||
git config --global user.email "$USER_EMAIL"
|
||||
git config --global user.name "$USER_NAME"
|
||||
}
|
||||
|
||||
cloneRepo() {
|
||||
{
|
||||
git clone --single-branch --depth 1 --branch "$TARGET_BRANCH" "$GIT_CMD_REPOSITORY" "$CLONE_DIR"
|
||||
} || {
|
||||
if [ "$CREATE_TARGET_BRANCH_IF_NEEDED" = "true" ]
|
||||
then
|
||||
# Default branch of the repository is cloned. Later on the required branch
|
||||
# will be created
|
||||
git clone --single-branch --depth 1 "$GIT_CMD_REPOSITORY" "$CLONE_DIR"
|
||||
else
|
||||
false
|
||||
fi
|
||||
} || {
|
||||
echo "::error::Could not clone the destination repository. Command:"
|
||||
echo "::error::git clone --single-branch --branch $TARGET_BRANCH $GIT_CMD_REPOSITORY $CLONE_DIR"
|
||||
echo "::error::(Note that if they exist USER_NAME and API_TOKEN is redacted by GitHub)"
|
||||
echo "::error::Please verify that the target repository exist AND that it contains the destination branch name, and is accesible by the API_TOKEN_GITHUB OR SSH_DEPLOY_KEY"
|
||||
exit 1
|
||||
}
|
||||
}
|
||||
|
||||
checkSource() {
|
||||
if [ ! -d "$SOURCE_DIRECTORY" ]
|
||||
then
|
||||
echo "ERROR: $SOURCE_DIRECTORY does not exist"
|
||||
echo "This directory needs to exist when push-to-another-repository is executed"
|
||||
echo
|
||||
echo "In the example it is created by ./build.sh: https://github.com/cpina/push-to-another-repository-example/blob/main/.github/workflows/ci.yml#L19"
|
||||
echo
|
||||
echo "If you want to copy a directory that exist in the source repository"
|
||||
echo "to the target repository: you need to clone the source repository"
|
||||
echo "in a previous step in the same build section. For example using"
|
||||
echo "actions/checkout@v2. See: https://github.com/cpina/push-to-another-repository-example/blob/main/.github/workflows/ci.yml#L16"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
switchBranch() {
|
||||
if [ "$CREATE_TARGET_BRANCH_IF_NEEDED" = "true" ]
|
||||
then
|
||||
git switch -c "$TARGET_BRANCH"
|
||||
fi
|
||||
}
|
Loading…
Reference in New Issue
Block a user