diff --git a/.github/workflows/PrepareJob.yml b/.github/workflows/PrepareJob.yml index 3c04269..1cbdbf3 100644 --- a/.github/workflows/PrepareJob.yml +++ b/.github/workflows/PrepareJob.yml @@ -62,9 +62,15 @@ on: is_release_tag: description: "" value: ${{ jobs.Prepare.outputs.is_release_tag }} + has_submodules: + description: "" + value: ${{ jobs.Prepare.outputs.has_submodules }} ref_kind: description: "" value: ${{ jobs.Prepare.outputs.ref_kind }} + default_branch: + description: "" + value: ${{ jobs.Prepare.outputs.default_branch }} branch: description: "" value: ${{ jobs.Prepare.outputs.branch }} @@ -86,28 +92,42 @@ on: # pr_mergedat: # description: "" # value: ${{ jobs.Prepare.outputs.pr_mergedat }} + git_submodule_count: + description: "" + value: ${{ jobs.Prepare.outputs.git_submodule_count }} + git_submodule_names: + description: "" + value: ${{ jobs.Prepare.outputs.git_submodule_names }} + git_submodule_paths: + description: "" + value: ${{ jobs.Prepare.outputs.git_submodule_paths }} jobs: Prepare: name: Extract Information runs-on: ubuntu-24.04 outputs: - on_default_branch: ${{ steps.Classify.outputs.on_default_branch }} - on_main_branch: ${{ steps.Classify.outputs.on_main_branch }} - on_release_branch: ${{ steps.Classify.outputs.on_release_branch }} - on_dev_branch: ${{ steps.Classify.outputs.on_dev_branch }} - is_regular_commit: ${{ steps.Classify.outputs.is_regular_commit }} - is_merge_commit: ${{ steps.Classify.outputs.is_merge_commit }} - is_release_commit: ${{ steps.Classify.outputs.is_release_commit }} - is_nightly_tag: ${{ steps.Classify.outputs.is_nightly_tag }} - is_release_tag: ${{ steps.Classify.outputs.is_release_tag }} - ref_kind: ${{ steps.Classify.outputs.ref_kind }} - branch: ${{ steps.Classify.outputs.branch }} - tag: ${{ steps.Classify.outputs.tag }} - version: ${{ steps.Classify.outputs.version || steps.FindPullRequest.outputs.pr_version }} -# release_version: ${{ steps.FindPullRequest.outputs.release_version }} - pr_title: ${{ steps.FindPullRequest.outputs.pr_title }} - pr_number: ${{ steps.Classify.outputs.pr_number || steps.FindPullRequest.outputs.pr_number }} + on_default_branch: ${{ steps.Classify.outputs.on_default_branch }} + on_main_branch: ${{ steps.Classify.outputs.on_main_branch }} + on_release_branch: ${{ steps.Classify.outputs.on_release_branch }} + on_dev_branch: ${{ steps.Classify.outputs.on_dev_branch }} + is_regular_commit: ${{ steps.Classify.outputs.is_regular_commit }} + is_merge_commit: ${{ steps.Classify.outputs.is_merge_commit }} + is_release_commit: ${{ steps.Classify.outputs.is_release_commit }} + is_nightly_tag: ${{ steps.Classify.outputs.is_nightly_tag }} + is_release_tag: ${{ steps.Classify.outputs.is_release_tag }} + has_submodules: ${{ steps.Classify.outputs.has_submodules }} + ref_kind: ${{ steps.Classify.outputs.ref_kind }} + default_branch: ${{ steps.Classify.outputs.default_branch }} + branch: ${{ steps.Classify.outputs.branch }} + tag: ${{ steps.Classify.outputs.tag }} + version: ${{ steps.Classify.outputs.version || steps.FindPullRequest.outputs.pr_version }} +# release_version: ${{ steps.FindPullRequest.outputs.release_version }} + pr_title: ${{ steps.FindPullRequest.outputs.pr_title }} + pr_number: ${{ steps.Classify.outputs.pr_number || steps.FindPullRequest.outputs.pr_number }} + git_submodule_count: ${{ steps.Classify.outputs.git_submodule_count }} + git_submodule_names: ${{ steps.Classify.outputs.git_submodule_names }} + git_submodule_paths: ${{ steps.Classify.outputs.git_submodule_paths }} steps: - name: ⏬ Checkout repository @@ -136,6 +156,8 @@ jobs: ANSI_LIGHT_BLUE=$'\x1b[94m' ANSI_NOCOLOR=$'\x1b[0m' + export GH_TOKEN=${{ github.token }} + ref="${{ github.ref }}" on_default_branch="false" on_main_branch="false" @@ -146,84 +168,86 @@ jobs: is_release_commit="false" is_nightly_tag="false" is_release_tag="false" + has_submodules="false" ref_kind="unknown" default_branch="" branch="" tag="" pr_number="" version="" + git_submodule_count="0" + git_submodule_names="" + git_submodule_paths="" + printf "Classify Git reference '%s' " "${ref}" if [[ "${ref:0:11}" == "refs/heads/" ]]; then + printf "${ANSI_LIGHT_GREEN}[BRANCH]\n" ref_kind="branch" branch="${ref:11}" printf "Get default branch name ... " - defaultBranch=$(gh repo view "${{ github.repository }}" --json defaultBranchRef --jq '.defaultBranchRef.name') + defaultBranch=$(gh repo view "${{ github.repository }}" --json defaultBranchRef --jq '.defaultBranchRef.name' 2>&1) if [[ $? -eq 0 ]]; then - printf " ${ANSI_LIGHT_GREEN} [OK]\n" + printf "${ANSI_LIGHT_GREEN} [OK]\n" + + default_branch="${defaultBranch}" + printf " default_branch=%s\n" "${default_branch}" else - printf " ${ANSI_LIGHT_RED} [FAILED]\n" + printf "${ANSI_LIGHT_RED} [FAILED]\n" + printf " %s\n" "${default_branch}" fi - printf "Commit check:\n" + printf "Commit checks:\n" + printf " Commit kind " + if [[ -z "$(git rev-list -1 --merges ${{ github.sha }}~1..${{ github.sha }})" ]]; then + is_regular_commit="true" + printf "${ANSI_LIGHT_YELLOW}[REGULAR]${ANSI_NOCOLOR}\n" + else + is_merge_commit="true" + printf "${ANSI_LIGHT_GREEN}[MERGE]${ANSI_NOCOLOR}\n" + fi + printf "Branch checks:\n" if [[ "${branch}" == "${defaultBranch}" ]]; then on_default_branch="true" - - if [[ -z "$(git rev-list -1 --merges ${{ github.sha }}~1..${{ github.sha }})" ]]; then - is_regular_commit="true" - printf " ${ANSI_LIGHT_YELLOW}regular " - else - is_merge_commit="true" - printf " ${ANSI_LIGHT_GREEN}merge " - fi - printf "commit${ANSI_NOCOLOR} on default branch ${ANSI_LIGHT_BLUE}'%s'${ANSI_NOCOLOR}\n" "${defaultBranch}" + printf " Commit on default branch ${ANSI_LIGHT_BLUE}'%s'${ANSI_NOCOLOR}\n" "${defaultBranch}" fi if [[ "${branch}" == "${{ inputs.main_branch }}" ]]; then on_main_branch="true" - - if [[ -z "$(git rev-list -1 --merges ${{ github.sha }}~1..${{ github.sha }})" ]]; then - is_regular_commit="true" - printf " ${ANSI_LIGHT_YELLOW}regular " - else - is_merge_commit="true" - printf " ${ANSI_LIGHT_GREEN}merge " - fi - printf "commit${ANSI_NOCOLOR} on main branch ${ANSI_LIGHT_BLUE}'%s'${ANSI_NOCOLOR}\n" "${{ inputs.main_branch }}" + printf " Commit on main branch ${ANSI_LIGHT_BLUE}'%s'${ANSI_NOCOLOR}\n" "${{ inputs.main_branch }}" fi if [[ "${branch}" == "${{ inputs.release_branch }}" ]]; then on_release_branch="true" - - if [[ -z "$(git rev-list -1 --merges ${{ github.sha }}~1..${{ github.sha }})" ]]; then - is_regular_commit="true" - printf " ${ANSI_LIGHT_YELLOW}regular " - else - is_release_commit="true" - printf " ${ANSI_LIGHT_GREEN}release " - fi - printf "commit${ANSI_NOCOLOR} on release branch ${ANSI_LIGHT_BLUE}'%s'${ANSI_NOCOLOR}\n" "${{ inputs.release_branch }}" + printf " Commit on release branch ${ANSI_LIGHT_BLUE}'%s'${ANSI_NOCOLOR}\n" "${{ inputs.release_branch }}" fi if [[ "${branch}" == "${{ inputs.development_branch }}" ]]; then on_dev_branch="true" + printf " Commit on development branch ${ANSI_LIGHT_BLUE}'%s'${ANSI_NOCOLOR}\n" "${{ inputs.development_branch }}" + fi - if [[ -z "$(git rev-list -1 --merges ${{ github.sha }}~1..${{ github.sha }})" ]]; then - is_regular_commit="true" - printf " ${ANSI_LIGHT_YELLOW}regular " - else - is_merge_commit="true" - printf " ${ANSI_LIGHT_GREEN}merge " + if [[ "${is_merge_commit}" == "true" ]]; then + printf "Release checks:\n" + printf " Release kind " + if [[ "${on_main_branch}" == "true" ]]; then + is_release_commit="true" + printf "${ANSI_LIGHT_GREEN}[RELEASE]${ANSI_NOCOLOR}\n" + elif [[ "${on_version_branch}" == "true" ]]; then + is_release_commit="true" + printf "${ANSI_LIGHT_GREEN}[RELEASE]${ANSI_NOCOLOR}\n" + elif [[ "${on_release_branch}" == "true" ]]; then + is_prerelease_commit="true" + printf "${ANSI_LIGHT_YELLOW}[PRERELEASE]${ANSI_NOCOLOR}\n" fi - printf "commit${ANSI_NOCOLOR} on development branch ${ANSI_LIGHT_BLUE}'%s'${ANSI_NOCOLOR}\n" "${{ inputs.development_branch }}" fi elif [[ "${ref:0:10}" == "refs/tags/" ]]; then + printf "${ANSI_LIGHT_GREEN}[TAG]\n" ref_kind="tag" tag="${ref:10}" - printf "Tag check:\n" - + printf "Tag checks:\n" printf " Check if tag is on main branch '%s' ... " "${{ inputs.main_branch }}" git branch --remotes --contains $(git rev-parse --verify "tags/${tag}~0") | grep "origin/${{ inputs.main_branch }}" > /dev/null if [[ $? -eq 0 ]]; then @@ -254,18 +278,30 @@ jobs: exit 1 fi elif [[ "${ref:0:10}" == "refs/pull/" ]]; then + printf "${ANSI_LIGHT_YELLOW}[PULL REQUEST]\n" ref_kind="pullrequest" pr_number=${ref:11} pr_number=${pr_number%%/*} - printf "Pull Request check:\n" + printf "Pull Request checks:\n" printf " Number: %s\n" "${pr_number}" else + printf "${ANSI_LIGHT_RED}[UNKNOWN]\n" printf "${ANSI_LIGHT_RED}Unknown Git reference '%s'.${ANSI_NOCOLOR}\n" "${{ github.ref }}" printf "::error title=Classify Commit::Unknown Git reference '%s'.\n" "${{ github.ref }}" exit 1 fi + # Submodules + if [[ -f .gitsubmodules ]]; then + has_submodules="true" + git_modules_file=.gitmodules # $(git rev-parse --show-toplevel)/.gitmodules + git_submodule_count="$(grep -Po '(?<=\[submodule \")(.*)(?=\"\])' "${git_modules_file}" | wc -l)" + git_submodule_names="$(grep -Po '(?<=\[submodule \")(.*)(?=\"\])' "${git_modules_file}" | paste -sd ':' -)" + git_submodule_paths="$(git config --file "${git_modules_file}" --null --name-only --get-regexp '\.path$' | xargs -0 -n1 git config --file "${git_modules_file}" --get | paste -sd ':' -)" + fi + + printf "\nWriting output variables ...\n" tee --append "${GITHUB_OUTPUT}" <