You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
319 lines
9.3 KiB
319 lines
9.3 KiB
#!/bin/sh |
|
|
|
if [ "$INPUT_DEBUG_MODE" = true ]; then |
|
echo '---------------------------' |
|
printenv |
|
echo '---------------------------' |
|
fi |
|
|
|
upload_sources() { |
|
if [ -n "$INPUT_UPLOAD_SOURCES_ARGS" ]; then |
|
UPLOAD_SOURCES_OPTIONS="${UPLOAD_SOURCES_OPTIONS} ${INPUT_UPLOAD_SOURCES_ARGS}" |
|
fi |
|
|
|
echo "UPLOAD SOURCES" |
|
crowdin upload sources "$@" $UPLOAD_SOURCES_OPTIONS |
|
} |
|
|
|
upload_translations() { |
|
if [ -n "$INPUT_UPLOAD_LANGUAGE" ]; then |
|
UPLOAD_TRANSLATIONS_OPTIONS="${UPLOAD_TRANSLATIONS_OPTIONS} --language=${INPUT_UPLOAD_LANGUAGE}" |
|
fi |
|
|
|
if [ "$INPUT_AUTO_APPROVE_IMPORTED" = true ]; then |
|
UPLOAD_TRANSLATIONS_OPTIONS="${UPLOAD_TRANSLATIONS_OPTIONS} --auto-approve-imported" |
|
fi |
|
|
|
if [ "$INPUT_IMPORT_EQ_SUGGESTIONS" = true ]; then |
|
UPLOAD_TRANSLATIONS_OPTIONS="${UPLOAD_TRANSLATIONS_OPTIONS} --import-eq-suggestions" |
|
fi |
|
|
|
if [ -n "$INPUT_UPLOAD_TRANSLATIONS_ARGS" ]; then |
|
UPLOAD_TRANSLATIONS_OPTIONS="${UPLOAD_TRANSLATIONS_OPTIONS} ${INPUT_UPLOAD_TRANSLATIONS_ARGS}" |
|
fi |
|
|
|
echo "UPLOAD TRANSLATIONS" |
|
crowdin upload translations "$@" $UPLOAD_TRANSLATIONS_OPTIONS |
|
} |
|
|
|
download_translations() { |
|
if [ -n "$INPUT_DOWNLOAD_LANGUAGE" ]; then |
|
DOWNLOAD_TRANSLATIONS_OPTIONS="${DOWNLOAD_TRANSLATIONS_OPTIONS} --language=${INPUT_DOWNLOAD_LANGUAGE}" |
|
elif [ -n "$INPUT_LANGUAGE" ]; then #back compatibility for older versions |
|
DOWNLOAD_TRANSLATIONS_OPTIONS="${DOWNLOAD_TRANSLATIONS_OPTIONS} --language=${INPUT_LANGUAGE}" |
|
fi |
|
|
|
if [ "$INPUT_SKIP_UNTRANSLATED_STRINGS" = true ]; then |
|
DOWNLOAD_TRANSLATIONS_OPTIONS="${DOWNLOAD_TRANSLATIONS_OPTIONS} --skip-untranslated-strings" |
|
fi |
|
|
|
if [ "$INPUT_SKIP_UNTRANSLATED_FILES" = true ]; then |
|
DOWNLOAD_TRANSLATIONS_OPTIONS="${DOWNLOAD_TRANSLATIONS_OPTIONS} --skip-untranslated-files" |
|
fi |
|
|
|
if [ "$INPUT_EXPORT_ONLY_APPROVED" = true ]; then |
|
DOWNLOAD_TRANSLATIONS_OPTIONS="${DOWNLOAD_TRANSLATIONS_OPTIONS} --export-only-approved" |
|
fi |
|
|
|
if [ -n "$INPUT_DOWNLOAD_TRANSLATIONS_ARGS" ]; then |
|
DOWNLOAD_TRANSLATIONS_OPTIONS="${DOWNLOAD_TRANSLATIONS_OPTIONS} ${INPUT_DOWNLOAD_TRANSLATIONS_ARGS}" |
|
fi |
|
|
|
echo "DOWNLOAD TRANSLATIONS" |
|
crowdin download "$@" $DOWNLOAD_TRANSLATIONS_OPTIONS |
|
} |
|
|
|
create_pull_request() { |
|
LOCALIZATION_BRANCH="${1}" |
|
|
|
AUTH_HEADER="Authorization: token ${GITHUB_TOKEN}" |
|
HEADER="Accept: application/vnd.github.v3+json; application/vnd.github.antiope-preview+json; application/vnd.github.shadow-cat-preview+json" |
|
|
|
if [ -n "$INPUT_GITHUB_API_BASE_URL" ]; then |
|
REPO_URL="https://${INPUT_GITHUB_API_BASE_URL}/repos/${GITHUB_REPOSITORY}" |
|
else |
|
REPO_URL="https://api.${INPUT_GITHUB_BASE_URL}/repos/${GITHUB_REPOSITORY}" |
|
fi |
|
|
|
PULLS_URL="${REPO_URL}/pulls" |
|
|
|
echo "CHECK IF ISSET SAME PULL REQUEST" |
|
|
|
if [ -n "$INPUT_PULL_REQUEST_BASE_BRANCH_NAME" ]; then |
|
BASE_BRANCH="$INPUT_PULL_REQUEST_BASE_BRANCH_NAME" |
|
else |
|
if [ -n "$GITHUB_HEAD_REF" ]; then |
|
BASE_BRANCH=${GITHUB_HEAD_REF} |
|
else |
|
BASE_BRANCH=${GITHUB_REF#refs/heads/} |
|
fi |
|
fi |
|
|
|
PULL_REQUESTS_QUERY_PARAMS="?base=${BASE_BRANCH}&head=${LOCALIZATION_BRANCH}" |
|
|
|
PULL_REQUESTS=$(echo "$(curl -sSL -H "${AUTH_HEADER}" -H "${HEADER}" -X GET "${PULLS_URL}${PULL_REQUESTS_QUERY_PARAMS}")" | jq --raw-output '.[] | .head.ref ') |
|
|
|
# check if pull request exist |
|
if echo "$PULL_REQUESTS " | grep -q "$LOCALIZATION_BRANCH "; then |
|
echo "PULL REQUEST ALREADY EXIST" |
|
else |
|
echo "CREATE PULL REQUEST" |
|
|
|
if [ -n "$INPUT_PULL_REQUEST_BODY" ]; then |
|
BODY=",\"body\":\"${INPUT_PULL_REQUEST_BODY//$'\n'/\\n}\"" |
|
fi |
|
|
|
PULL_RESPONSE_DATA="{\"title\":\"${INPUT_PULL_REQUEST_TITLE}\", \"base\":\"${BASE_BRANCH}\", \"head\":\"${LOCALIZATION_BRANCH}\" ${BODY}}" |
|
# create pull request |
|
PULL_RESPONSE=$(curl -sSL -H "${AUTH_HEADER}" -H "${HEADER}" -X POST --data "${PULL_RESPONSE_DATA}" "${PULLS_URL}") |
|
|
|
set +x |
|
PULL_REQUESTS_URL=$(echo "${PULL_RESPONSE}" | jq '.html_url') |
|
PULL_REQUESTS_NUMBER=$(echo "${PULL_RESPONSE}" | jq '.number') |
|
view_debug_output |
|
|
|
if [ -n "$INPUT_PULL_REQUEST_LABELS" ]; then |
|
PULL_REQUEST_LABELS=$(echo "[\"${INPUT_PULL_REQUEST_LABELS}\"]" | sed 's/, \|,/","/g') |
|
|
|
if [ "$(echo "$PULL_REQUEST_LABELS" | jq -e . > /dev/null 2>&1; echo $?)" -eq 0 ]; then |
|
echo "ADD LABELS TO PULL REQUEST" |
|
|
|
ISSUE_URL="${REPO_URL}/issues/${PULL_REQUESTS_NUMBER}" |
|
|
|
LABELS_DATA="{\"labels\":${PULL_REQUEST_LABELS}}" |
|
|
|
# add labels to created pull request |
|
curl -sSL -H "${AUTH_HEADER}" -H "${HEADER}" -X PATCH --data "${LABELS_DATA}" "${ISSUE_URL}" |
|
else |
|
echo "JSON OF pull_request_labels IS INVALID: ${PULL_REQUEST_LABELS}" |
|
fi |
|
fi |
|
|
|
echo "PULL REQUEST CREATED: ${PULL_REQUESTS_URL}" |
|
fi |
|
} |
|
|
|
push_to_branch() { |
|
LOCALIZATION_BRANCH=${INPUT_LOCALIZATION_BRANCH_NAME} |
|
|
|
REPO_URL="https://${GITHUB_ACTOR}:${GITHUB_TOKEN}@${INPUT_GITHUB_BASE_URL}/${GITHUB_REPOSITORY}.git" |
|
|
|
echo "CONFIGURATION GIT USER" |
|
git config --global user.email "${INPUT_GITHUB_USER_EMAIL}" |
|
git config --global user.name "${INPUT_GITHUB_USER_NAME}" |
|
|
|
if [ ${GITHUB_REF#refs/heads/} != $GITHUB_REF ]; then |
|
git checkout "${GITHUB_REF#refs/heads/}" |
|
fi |
|
|
|
if [ -n "$(git show-ref refs/heads/${LOCALIZATION_BRANCH})" ]; then |
|
git checkout "${LOCALIZATION_BRANCH}" |
|
else |
|
git checkout -b "${LOCALIZATION_BRANCH}" |
|
fi |
|
|
|
git add . |
|
|
|
if [ ! -n "$(git status -s)" ]; then |
|
echo "NOTHING TO COMMIT" |
|
return |
|
fi |
|
|
|
echo "PUSH TO BRANCH ${LOCALIZATION_BRANCH}" |
|
git commit --no-verify -m "${INPUT_COMMIT_MESSAGE}" |
|
git push --no-verify --force "${REPO_URL}" |
|
|
|
if [ "$INPUT_CREATE_PULL_REQUEST" = true ]; then |
|
create_pull_request "${LOCALIZATION_BRANCH}" |
|
fi |
|
} |
|
|
|
view_debug_output() { |
|
if [ "$INPUT_DEBUG_MODE" = true ]; then |
|
set -x |
|
fi |
|
} |
|
|
|
setup_commit_signing() { |
|
echo "FOUND PRIVATE KEY, WILL SETUP GPG KEYSTORE" |
|
|
|
echo "${INPUT_GPG_PRIVATE_KEY}" > private.key |
|
|
|
gpg --import --batch private.key |
|
|
|
GPG_KEY_ID=$(gpg --list-secret-keys --keyid-format=long | grep -o "rsa\d\+\/\(\w\+\)" | head -n1 | sed "s/rsa\d\+\/\(\w\+\)/\1/") |
|
GPG_KEY_OWNER_NAME=$(gpg --list-secret-keys --keyid-format=long | grep "uid" | sed "s/.\+] \(.\+\) <\(.\+\)>/\1/") |
|
GPG_KEY_OWNER_EMAIL=$(gpg --list-secret-keys --keyid-format=long | grep "uid" | sed "s/.\+] \(.\+\) <\(.\+\)>/\2/") |
|
echo "Imported key information:" |
|
echo " Key id: ${GPG_KEY_ID}" |
|
echo " Owner name: ${GPG_KEY_OWNER_NAME}" |
|
echo " Owner email: ${GPG_KEY_OWNER_EMAIL}" |
|
|
|
git config --global user.signingkey "$GPG_KEY_ID" |
|
git config --global commit.gpgsign true |
|
|
|
export GPG_TTY=$(tty) |
|
# generate sign to store passphrase in cache for "git commit" |
|
echo "test" | gpg --clearsign --pinentry-mode=loopback --passphrase "${INPUT_GPG_PASSPHRASE}" > /dev/null 2>&1 |
|
|
|
rm private.key |
|
} |
|
|
|
get_branch_available_options() { |
|
for OPTION in "$@" ; do |
|
if echo "$OPTION" | egrep -vq "^(--dryrun|--branch|--source|--translation)"; then |
|
AVAILABLE_OPTIONS="${AVAILABLE_OPTIONS} ${OPTION}" |
|
fi |
|
done |
|
|
|
echo "$AVAILABLE_OPTIONS" |
|
} |
|
|
|
echo "STARTING CROWDIN ACTION" |
|
|
|
if [ -n "INPUT_WORKING_DIRECTORY" ]; then |
|
WORKING_DIRECTORY="${GITHUB_WORKSPACE}/${INPUT_WORKING_DIRECTORY}" |
|
else |
|
WORKING_DIRECTORY="${GITHUB_WORKSPACE}" |
|
fi |
|
|
|
cd "${WORKING_DIRECTORY}" || exit 1 |
|
|
|
git config --global --add safe.directory $GITHUB_WORKSPACE |
|
|
|
view_debug_output |
|
|
|
set -e |
|
|
|
#SET OPTIONS |
|
set -- --no-progress --no-colors |
|
|
|
if [ "$INPUT_DEBUG_MODE" = true ]; then |
|
set -- "$@" --verbose --debug |
|
fi |
|
|
|
if [ -n "$INPUT_CROWDIN_BRANCH_NAME" ]; then |
|
set -- "$@" --branch="${INPUT_CROWDIN_BRANCH_NAME}" |
|
fi |
|
|
|
if [ -n "$INPUT_IDENTITY" ]; then |
|
set -- "$@" --identity="${INPUT_IDENTITY}" |
|
fi |
|
|
|
if [ -n "$INPUT_CONFIG" ]; then |
|
set -- "$@" --config="${INPUT_CONFIG}" |
|
fi |
|
|
|
if [ "$INPUT_DRYRUN_ACTION" = true ]; then |
|
set -- "$@" --dryrun |
|
fi |
|
|
|
#SET CONFIG OPTIONS |
|
if [ -n "$INPUT_PROJECT_ID" ]; then |
|
set -- "$@" --project-id=${INPUT_PROJECT_ID} |
|
fi |
|
|
|
if [ -n "$INPUT_TOKEN" ]; then |
|
set -- "$@" --token="${INPUT_TOKEN}" |
|
fi |
|
|
|
if [ -n "$INPUT_BASE_URL" ]; then |
|
set -- "$@" --base-url="${INPUT_BASE_URL}" |
|
fi |
|
|
|
if [ -n "$INPUT_BASE_PATH" ]; then |
|
set -- "$@" --base-path="${INPUT_BASE_PATH}" |
|
fi |
|
|
|
if [ -n "$INPUT_SOURCE" ]; then |
|
set -- "$@" --source="${INPUT_SOURCE}" |
|
fi |
|
|
|
if [ -n "$INPUT_TRANSLATION" ]; then |
|
set -- "$@" --translation="${INPUT_TRANSLATION}" |
|
fi |
|
|
|
#EXECUTE COMMANDS |
|
|
|
if [ -n "$INPUT_ADD_CROWDIN_BRANCH" ]; then |
|
NEW_BRANCH_OPTIONS=$( get_branch_available_options "$@" ) |
|
|
|
if [ -n "$INPUT_NEW_BRANCH_PRIORITY" ]; then |
|
NEW_BRANCH_OPTIONS="${NEW_BRANCH_OPTIONS} --priority=${INPUT_NEW_BRANCH_PRIORITY}" |
|
fi |
|
|
|
echo "CREATING BRANCH $INPUT_ADD_CROWDIN_BRANCH" |
|
|
|
crowdin branch add $INPUT_ADD_CROWDIN_BRANCH $NEW_BRANCH_OPTIONS --title="${INPUT_NEW_BRANCH_TITLE}" --export-pattern="${INPUT_NEW_BRANCH_EXPORT_PATTERN}" |
|
fi |
|
|
|
if [ "$INPUT_UPLOAD_SOURCES" = true ]; then |
|
upload_sources "$@" |
|
fi |
|
|
|
if [ "$INPUT_UPLOAD_TRANSLATIONS" = true ]; then |
|
upload_translations "$@" |
|
fi |
|
|
|
if [ "$INPUT_DOWNLOAD_TRANSLATIONS" = true ]; then |
|
download_translations "$@" |
|
|
|
if [ "$INPUT_PUSH_TRANSLATIONS" = true ]; then |
|
[ -z "${GITHUB_TOKEN}" ] && { |
|
echo "CAN NOT FIND 'GITHUB_TOKEN' IN ENVIRONMENT VARIABLES" |
|
exit 1 |
|
} |
|
|
|
[ -n "${INPUT_GPG_PRIVATE_KEY}" ] && [ -n "${INPUT_GPG_PASSPHRASE}" ] && { |
|
setup_commit_signing |
|
} |
|
|
|
push_to_branch |
|
fi |
|
fi |
|
|
|
if [ -n "$INPUT_DELETE_CROWDIN_BRANCH" ]; then |
|
echo "REMOVING BRANCH $INPUT_DELETE_CROWDIN_BRANCH" |
|
|
|
crowdin branch delete $INPUT_DELETE_CROWDIN_BRANCH $( get_branch_available_options "$@" ) |
|
fi
|
|
|