diff --git a/bin/git-browse-ci b/bin/git-browse-ci new file mode 100755 index 0000000..3057373 --- /dev/null +++ b/bin/git-browse-ci @@ -0,0 +1,64 @@ +#!/usr/bin/env bash + +if [[ $1 == "" ]] +then + branch=$(git rev-parse --abbrev-ref HEAD 2&> /dev/null) + remote=$(git config branch."${branch}".remote || echo "origin") +else + remote=$1 +fi + +if [[ $remote == "" ]] +then + echo "Remote not found" + exit 1 +fi + +remote_url=$(git remote get-url "${remote}") + +if [[ $? -ne 0 ]] +then + exit $? +fi + +if [[ $remote_url = git@* ]] +then + url=$(echo "${remote_url}" | sed -E -e 's/:/\//' -e 's/\.git$//' -e 's/.*@(.*)/http:\/\/\1/') +elif [[ $remote_url = http* ]] +then + url=${remote_url%.git} +fi + +if [[ $url =~ github ]] +then + ci_url=${url}/actions +elif [[ $url =~ gitlab ]] +then + ci_url=${url}/-/pipelines +elif [[ $url =~ bitbucket ]] +then + ci_url=${url}/addon/pipelines/home +fi +case "$OSTYPE" in + darwin*) + # MacOS + open "${ci_url}" + ;; + msys) + # Git-Bash on Windows + start "${ci_url}" + ;; + linux*) + # Handle WSL on Windows + if uname -a | grep -i -q Microsoft + then + powershell.exe -NoProfile start "${ci_url}" + else + xdg-open "${ci_url}" + fi + ;; + *) + # fall back to xdg-open for BSDs, etc. + xdg-open "${ci_url}" + ;; +esac