diff --git a/README.md b/README.md index 3b8f0da..bbfd6f8 100644 --- a/README.md +++ b/README.md @@ -37,10 +37,15 @@ jobs: - uses: codelytv/pr-size-labeler@v1 with: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + xs_label: 'size/xs' xs_max_size: '10' + s_label: 'size/s' s_max_size: '100' + m_label: 'size/m' m_max_size: '500' + l_label: 'size/l' l_max_size: '1000' + xl_label: 'size/xl' fail_if_xl: 'false' message_if_xl: > 'This PR exceeds the recommended size of 1000 lines. @@ -51,6 +56,7 @@ jobs: ## 🎛️ Available parameters +- `*_label` (`xs_label`, `s_label`…): Adjust size label names - `*_max_size` (`xs_max_size`, `s_max_size`…): Adjust which amount of changes you consider appropriate for each size based on your project context - `fail_if_xl`: Set to `'true'` will report GitHub Workflow failure if the PR size is xl allowing to forbid PR merge - `github_api_url`: Override this parameter in order to use with your own GitHub Enterprise Server. Example: `'github.example.com/api/v3'` diff --git a/action.yml b/action.yml index 6505633..2b74e0f 100644 --- a/action.yml +++ b/action.yml @@ -4,22 +4,42 @@ inputs: GITHUB_TOKEN: description: 'GitHub token' required: true + xs_label: + description: 'Label for xs PR' + required: false + default: 'size/xs' xs_max_size: description: 'Max size for a PR to be considered xs' required: false default: '10' + s_label: + description: 'Label for s PR' + required: false + default: 'size/s' s_max_size: description: 'Max size for a PR to be considered s' required: false default: '100' + m_label: + description: 'Label for m PR' + required: false + default: 'size/m' m_max_size: description: 'Max size for a PR to be considered m' required: false default: '500' + l_label: + description: 'Label for l PR' + required: false + default: 'size/l' l_max_size: description: 'Max size for a PR to be considered l' required: false default: '1000' + xl_label: + description: 'Label for xl PR' + required: false + default: 'size/xl' fail_if_xl: description: 'Report GitHub Workflow failure if the PR size is xl allowing to forbid PR merge' required: false @@ -40,10 +60,15 @@ runs: image: 'Dockerfile' args: - ${{ inputs.GITHUB_TOKEN }} + - ${{ inputs.xs_label }} - ${{ inputs.xs_max_size }} + - ${{ inputs.s_label }} - ${{ inputs.s_max_size }} + - ${{ inputs.m_label }} - ${{ inputs.m_max_size }} + - ${{ inputs.l_label }} - ${{ inputs.l_max_size }} + - ${{ inputs.xl_label }} - ${{ inputs.fail_if_xl }} - ${{ inputs.message_if_xl }} - ${{ inputs.github_api_url }} diff --git a/entrypoint.sh b/entrypoint.sh index c5ceb99..242a3a6 100755 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -8,8 +8,8 @@ if [ "$PR_SIZE_LABELER_HOME" == "/" ]; then PR_SIZE_LABELER_HOME="" fi -if [ ! -z "$8" ]; then - PR_SIZE_LABELER_API=$8 +if [ ! -z "${13}" ]; then + PR_SIZE_LABELER_API="${13}" fi export PR_SIZE_LABELER_HOME diff --git a/src/github.sh b/src/github.sh index 8b445ec..74e8beb 100644 --- a/src/github.sh +++ b/src/github.sh @@ -13,11 +13,16 @@ github::calculate_total_modifications() { } github::add_label_to_pr() { - local -r pr_number=$1 - local -r label_to_add=$2 + local -r pr_number="${1}" + local -r label_to_add="${2}" + local -r xs_label="${3}" + local -r s_label="${4}" + local -r m_label="${5}" + local -r l_label="${6}" + local -r xl_label="${7}" local -r body=$(curl -sSL -H "Authorization: token $GITHUB_TOKEN" -H "$GITHUB_API_HEADER" "$GITHUB_API_URI/repos/$GITHUB_REPOSITORY/pulls/$1") - local labels=$(echo "$body" | jq .labels | jq -r ".[] | .name" | grep -v "size/") + local labels=$(echo "$body" | jq .labels | jq -r ".[] | .name" | grep -e "$xs_label" -e "$s_label" -e "$m_label" -e "$l_label" -e "$xl_label" -v) labels=$(printf "%s\n%s" "$labels" "$label_to_add") local -r comma_separated_labels=$(github::format_labels "$labels") diff --git a/src/labeler.sh b/src/labeler.sh index aa5f161..cab116e 100644 --- a/src/labeler.sh +++ b/src/labeler.sh @@ -1,8 +1,13 @@ #!/usr/bin/env bash labeler::label() { - local -r fail_if_xl="$5" - local -r message_if_xl="$6" + local -r xs_label="${1}" + local -r s_label="${3}" + local -r m_label="${5}" + local -r l_label="${7}" + local -r xl_label="${9}" + local -r fail_if_xl="${10}" + local -r message_if_xl="${11}" local -r pr_number=$(github_actions::get_pr_number) local -r total_modifications=$(github::calculate_total_modifications "$pr_number") @@ -13,9 +18,9 @@ labeler::label() { log::message "Labeling pull request with $label_to_add" - github::add_label_to_pr "$pr_number" "$label_to_add" + github::add_label_to_pr "$pr_number" "$label_to_add" "$xs_label" "$s_label" "$m_label" "$l_label" "$xl_label" - if [ "$label_to_add" == "size/xl" ]; then + if [ "$label_to_add" == "$xl_label" ]; then if [ -n "$message_if_xl" ]; then github::comment "$message_if_xl" fi @@ -28,22 +33,27 @@ labeler::label() { } labeler::label_for() { - local -r total_modifications="$1" - local -r xs_max_size="$2" - local -r s_max_size="$3" - local -r m_max_size="$4" - local -r l_max_size="$5" + local -r total_modifications="${1}" + local -r xs_label="${2}" + local -r xs_max_size="${3}" + local -r s_label="${4}" + local -r s_max_size="${5}" + local -r m_label="${6}" + local -r m_max_size="${7}" + local -r l_label="${8}" + local -r l_max_size="${9}" + local -r xl_label="${10}" if [ "$total_modifications" -lt "$xs_max_size" ]; then - label="size/xs" + label="$xs_label" elif [ "$total_modifications" -lt "$s_max_size" ]; then - label="size/s" + label="$s_label" elif [ "$total_modifications" -lt "$m_max_size" ]; then - label="size/m" + label="$m_label" elif [ "$total_modifications" -lt "$l_max_size" ]; then - label="size/l" + label="$l_label" else - label="size/xl" + label="$xl_label" fi echo "$label" diff --git a/src/main.sh b/src/main.sh index cefdf70..874d56d 100644 --- a/src/main.sh +++ b/src/main.sh @@ -9,11 +9,11 @@ source "$PR_SIZE_LABELER_HOME/src/misc.sh" main() { ensure::env_variable_exist "GITHUB_REPOSITORY" ensure::env_variable_exist "GITHUB_EVENT_PATH" - ensure::total_args 8 "$@" + ensure::total_args 13 "$@" - export GITHUB_TOKEN="$1" + export GITHUB_TOKEN="${1}" - labeler::label "$2" "$3" "$4" "$5" "$6" "$7" + labeler::label "${2}" "${3}" "${4}" "${5}" "${6}" "${7}" "${8}" "${9}" "${10}" "${11}" "${12}" exit $? }