Bitbucket上で個人、あるいは組織で所有するリポジトリを一覧表示するためのシェルスクリプト

2020-01-17Bash,Git

Bitbucket上で個人、あるいは組織で所有するリポジトリを一覧表示するためのシェルスクリプト

背景

仕事で自分の組織が所有するBitbucketのリポジトリを全て取得し、grep検索したい場合がありましたが、BitbucketのWebページの一覧性はよくありません。(特にページングされているので、全てを一覧表示できない。)

また、Vimで編集しやすいように、 コマンドラインから一覧表示するためのシェルスクリプト を作成しました。

検証環境

$ uname -a
Darwin NP178 18.2.0 Darwin Kernel Version 18.2.0: Mon Nov 12 20:24:46 PST 2018; root:xnu-4903.231.4~2/RELEASE_X86_64 x86_64 i386 MacBookPro11,4 Darwin

$ bash -version
GNU bash, バージョン 5.0.2(1)-release (x86_64-apple-darwin18.2.0)
Copyright (C) 2019 Free Software Foundation, Inc.
ライセンス GPLv3+: GNU GPL バージョン 3 またはそれ以降 <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

$ zsh --version
zsh 5.6.2 (x86_64-apple-darwin17.7.0)

前提条件

  • jqという、jsonデータを操作するためのツール

スクリプト

show-bitbucket-repositories.sh

#!/usr/bin/env bash
set -o errexit # エラーが発生した場合はシェルを終了
set -o nounset # 未定義の変数を利用禁止

opts='hu:p:o:'

usage() {
  echo -n "${0}"
  echo "${opts}" | sed 's/\([a-z]\)/ -\1/g' | sed 's/\-\([a-z]\):/-\1 \U\1\E/g'
  exit 1
}

type jq >/dev/null 2>&1 || {
  echo 'jqコマンドがありません。停止します。'
  exit 101
}

while getopts ":${opts}" opt; do
  case "${opt}" in
    u)
      BITBUCKET_USER=${OPTARG}
      ;;
    p)
      BITBUCKET_PASSWORD="${OPTARG}"
      ;;
    o)
      BITBUCKET_ORG="${OPTARG}"
      ;;
    h | : | \?)
      usage
      exit 0
      ;;
  esac
done

API_URL="https://api.bitbucket.org/2.0/repositories/${BITBUCKET_ORG:-${BITBUCKET_USER}}"

while [[ $API_URL != "null" ]]; do
  tmp=$(mktemp)

  curl \
    --silent \
    --user "$BITBUCKET_USER:$BITBUCKET_PASSWORD" "${API_URL}" >"${tmp}"

  # API実行結果がページングされて返却されるため、次ページ情報が存在するかを確認(ない場合にはnullという値が取得される)
  API_URL="$(cat "${tmp}" | jq -r .next)"
  cat "${tmp}" | jq -r -c ".values[].links.clone[].href" | grep 'https://'
done

設置方法

  • 環境変数 $PATH が設定されているディレクトリにファイルを配置してください。
    • ex)~/bin
$ vi show-bitbucket-repositories.sh

$ chmod 700 show-bitbucket-repositories.sh

実行方法

  • -u : ユーザID ( 必須 )
  • -p : パスワード ( 必須 )
  • -o : 組織情報 ( 任意:後述 )
# 個人のリポジトリ
$ ./show-bitbucket-repositories.sh -u genzouw -p password-dayo

# `-o` オプション付きで、組織で所有するものの一覧表示が可能
$ ./show-bitbucket-repositories.sh -u genzouw -p password-dayo -o my_organize

ちなみに

こちらのpythonのツールでも同じようなことはできます。

bitbucket-cli

2020-01-17Bash,Git