unrealMan’s blog

IT関連の奮闘記を備忘録がてら記載していきます!

【Gitlab】コマンドで簡単操作、labコマンドを使ってみた【大奮闘】

GitbashでGitlabをコマンド操作

labコマンドとは?

GitLabのCLIクラアントとして以下に紹介されています。
コマンドラインからGitlabへのissueのopen/close、マージリクエストやブラウザ遷移など。
Webブラウザ上の操作をコマンドで操作できちゃいます。
fzfなどのワンライナーツールと組み合わせると超効率が実現できそうです。
about.gitlab.com


今回使うのはこれ!
github.com


ただlabコマンドを使っている人が少ないのか情報がほとんどない。。
とりあえず↟のREADMEをみながら進めてみた。
環境はWindows10で、愛用のGitbashを使用していきます。

labコマンドのインストール

bashのインストール手順通りに進めますが、いきなり躓きます。

unrealman@DESKTOP-XXXXX MINGW64 ~
$ curl -s https://raw.githubusercontent.com/zaquestion/lab/master/install.sh | sudo bash
bash: sudo: command not found
(23) Failed writing body

Gitbashにはsudoコマンドがありません。
sudoを省きます。

unrealman@DESKTOP-XXXXX MINGW64 ~
$ curl -s https://raw.githubusercontent.com/zaquestion/lab/master/install.sh | bash
OS not supported

「OS not supported」
OSがサポートされていないと出てきました。。
これ終わりじゃ、、と思いましたが諦めません。

WindowsPowerShellからパッケージ管理ツール「Scoop」を使えばインストールする手順があります。

パッケージ管理「Scoop」をインストールする

PowerShellを開き以下のコマンドを実行します。

Set-ExecutionPolicy RemoteSigned -scope CurrentUser; iex (new-object net.webclient).downloadstring('https://get.scoop.sh')
labコマンドをインストールする

PowerShellではなくGitbashを使いたいのです。
WSLでもよいのですが、WSLだとCLIからブラウジングができないのです(検証済み)。
(WSLからブラウザの制御が難しい模様、できなくはないのだろうが骨が折れそうです。。)

Gitbahを開き、以下のコマンドを実行します。

scoop bucket add zaquestion https://github.com/zaquestion/scoop-bucket.git
scoop install lab

インストール完了!

labコマンドの実行

さっそく実行してみます。

$ lab
Enter GitLab host (default: https://gitlab.com):
Create a token here: https://gitlab.com/profile/personal_access_tokens
Enter default GitLab token (scope: api): 2019/12/04 22:45:11 main.go:68: The handle is invalid.

はい失敗しました。
labコマンドを構成しているgo言語ファイルでエラーをはいています。

おそらくこれが原因じゃなかろうかと、minttyのwindowsラッパーのwinptyを付けてみます。

$ winpty lab
Enter GitLab host (default: https://gitlab.com):
Create a token here: https://gitlab.com/profile/personal_access_tokens
Enter default GitLab token (scope: api):

いけました!

Gitlabでパーソナルアクセストークンを発行

labコマンドを入力し、Enterを押下するとトークンを作るURLが表示されるのでブラウザで開きます。
これ

Create a token here: https://gitlab.com/profile/personal_access_tokens

f:id:unrealman:20191206023849p:plain

名前(トークンの名前)とScopes(有効範囲とアクセスレベル)を設定します。
f:id:unrealman:20191206024014p:plain
今回は
Scopesはapi(完全な権限)
Expiers atは未入力(有効期限が無期限)とします。
入力したら、Create personal access tokenを押下します。
f:id:unrealman:20191206024031p:plain
パーソナルアクセストークンが発行されました。


先ほどのコマンドラインで生成されたアクセストークンを入力しEnterを押下します。

コマンド操作してみる

ちゃんと動いています。
以下はプロジェクトのリスト表示コマンド

$ lab project list
leberwurscht/teardownwalls
technomancy/leiningen
jonan/heroes-of-wesnoth
jonan/k
hcs/hcs_utils
soeren/sspssptest

cloneしたプロジェクトは以下で以下のコマンドを打つとブラウザ表示します。素晴らしいです。
$ lab project browse

f:id:unrealman:20191206024059p:plain

しかし、うまくいったと思ったのも束の間。

issueもマージリクエストも作成できない

また、エラーです。viの実行可能ファイルがPATHにないと言っています。

$ lab issue create
2019/12/06 02:13:27 issue_create.go:55: /home/travis/gopath/src/github.com/zaquestion/lab/cmd/issue_create.go:54 exec: "vi": executable file not found in %PATH%

しかし、viはパス通っています。認識しています。

$ vi

f:id:unrealman:20191206024240p:plain

念の為確認しますが、やっぱり通っています。

$ echo $PATH
(省略):/usr/local/bin:/usr/bin:(省略)

ここにちゃんといます。

$ ll /usr/bin/vi
-rwxr-xr-x 1 unrealman 197609 25 10月 21 21:40 /usr/bin/vi*

調べてもどこにも情報はなく、Githubのissueにもありませんでした。
(似たような人はいましたが放置状態)
ここ大事なとこなので諦められません。

まったく関係ないとこで何やら、.exeが付いているかついていないかで動きが違うという情報を取得。
理由は謎らしいので触れません。
https://stackoverflow.com/questions/54276583/getting-an-stdin-is-not-a-tty-error-when-using-python-json-tool-in-git-bash
viコマンドを表示してみると、なぜかviは.exeがついていない。
これはなぜなのか?

$ ll /usr/bin/vi*
-rwxr-xr-x 1 daisuke 197609      25 10月 21 21:40 /usr/bin/vi*
-rwxr-xr-x 1 daisuke 197609 2729207 11月  4 16:09 /usr/bin/view.exe*
-rwxr-xr-x 1 daisuke 197609 2729207 11月  4 16:09 /usr/bin/vim.exe*
-rwxr-xr-x 1 daisuke 197609 2729207 11月  4 16:09 /usr/bin/vimdiff.exe*
-rwxr-xr-x 1 daisuke 197609    2121 11月  4 16:09 /usr/bin/vimtutor*

ひとまず、vi.exeを作成します。
※管理者権限必要なので、Gitbashを管理者として開いていなければ、右クリック-「管理者として実行」してください。

$ cp -p /usr/bin/vi /usr/bin/vi.exe

また、エラーです。。。
しかし、内容が変わった。着実に進んでいる証拠です。

$ lab issue create
2019/12/06 02:25:07 issue_create.go:55: /home/travis/gopath/src/github.com/zaquestion/lab/cmd/issue_create.go:54 fork/exec C:\Program Files\Git\usr\bin\vi.exe: This version of %1 is not compatible with the version of Windows you're running. Check your computer's system information and then contact the software publisher.

「互換性がないからコンピューターのシステム情報を確認してから、ソフトウェアの発行元に連絡してください。」
と言われました。

ええ、なにか方法はないか、WSLを開きDebianのviを何気なく見てみたらヒントが。。!

unrealman@DESKTOP-XXXXX:~$ ll /usr/bin/vi
lrwxrwxrwx 1 root root 20 Aug  3 17:40 /usr/bin/vi -> /etc/alternatives/vi

unrealman@DESKTOP-XXXXX:~$ ll /etc/alternatives/vi
lrwxrwxrwx 1 root root 17 Aug  3 17:40 /etc/alternatives/vi -> /usr/bin/vim.tiny

シンボリックリンクをたどった先はvimでした。

もしやとvi.exeでvim.exeへのシンボリックリンクを張ってみました。

$ ln -s /usr/bin/vim.exe /usr/bin/vi.exe

いけました!

$ lab issue create

やっとwindowsからlabコマンドでissueが作れた。。。
# Write a message for this issue. The first block
# of text is the title and the rest is the description.
~

画像はslackと連携させているので、そこに通知が来ています。

f:id:unrealman:20191206024150p:plain

ゆっくり眠れそうです。