gup:go install의 바이너리 대량 업데이트 명령 (규격과 향후)

7287 단어 GogolangCLItech

전언


이 기사는 gup 명령의 방법을 설명한 글입니다.'$goinstall'에 설치된 명령(GOPATH/bin 이하 또는 $GOBIN 이하 명령)을 최신 버전으로 일괄 업데이트하는 명령입니다.현재 버전에 지정된 업데이트 기능이 없습니다.
과거개인 블로그에gup을 올리는 방법에 해봤는데 개선 요구를 받아들이는 과정에서 규격이 큰 폭으로 바뀌었다.그쪽 기사를 다시 쓰기보다는 새로운 재작성 방법을 선택해 젠에게 처음 투고하는 게 낫다.'기사를 몇 번 쓰는 이유'는 이용자가 늘어나면 도구에 대한 개선 요구도 늘어나고 규격을 더 개선할 기회도 늘어나기 때문이다.

설치 방법


이제 "go install"설치 방법만 지원됩니다.구글에서 사용하는 도구이기 때문에 충분하다고 생각합니다. 만약 요구가 있다면.집.대응rpm.
go install github.com/nao1215/gup@latest

gup의 하위 명령 목록


gup 명령의 하위 명령은 Version 0.7.4에서 다음 테이블의 하위 명령을 갖습니다.하위 명령이 지정되지 않은 경우 도움말 메시지가 표시됩니다.
하위 명령
기능
update
GOPATH/bin 이하 또는 $GOBIN 이하 명령을 최신 버전으로 업데이트
list
$GOPATH/bin 이하 또는 $GOBIN 이하의 명령 정보 표시
export
$GOPATH/bin 이하 또는 $GOBIN 이하의 명령 정보를 기록합니다gup.conf.
importgup.conf의 내용에 따라 설치 명령
remove
$GOPATH/bin 이하 또는 $GOBIN 이하 명령 제거

업데이트 하위 명령의 규격


gup 명령어의 주요 기능입니다. $GOPATH/bin 이하 또는 $GOBIN 이하의 명령을 최신 버전으로 업데이트합니다.이미 최신 버전인 경우'Alreadyup-to-date'를 표시하고gup 명령에 따라 업데이트된 경우'${구 버전} to${최신 버전}'을 표시합니다.
다음은 실행 예와 실행 결과입니다.실행 결과는 존재하지 않지만 '$go get' 에 설치된 명령은 업데이트에 실패할 것입니다.
$ gup update
gup:INFO : update all binary under $GOPATH/bin or $GOBIN
gup:INFO : [ 1/32] update success: github.com/cheat/cheat/cmd/cheat (Already up-to-date: v0.0.0-20211009161301-12ffa4cb5c87)
gup:INFO : [ 2/32] update success: fyne.io/fyne/v2/cmd/fyne_demo (Already up-to-date: v2.1.3)
gup:INFO : [ 3/32] update success: github.com/nao1215/gal/cmd/gal (v1.0.0 to v1.2.0)
 :
 : (省略)
 :
gup:INFO : [32/32] update success: github.com/nao1215/ubume/cmd/ubume (Already up-to-date: v1.5.0)
명령 이름을 업데이트 하위 명령의 매개 변수로 전송한 후 매개 변수가 지정한 명령만 최신 버전으로 업데이트합니다.
$ gup update ubume lazygit
gup:INFO : update all binary under $GOPATH/bin or $GOBIN
gup:INFO : [1/2] update success: github.com/jesseduffield/lazygit (Already up-to-date: v0.32.2)
gup:INFO : [2/2] update success: github.com/nao1215/ubume/cmd/ubume (Already up-to-date: v1.5.0)
gup명령은 --dry-run 옵션이 있기 때문에'결과가 어떤지 알고 싶지만 업데이트하고 싶지 않습니다'는 상황에서 사용하십시오.

업데이트 하위 명령의 내부 규격


gup 명령의 구조는 매우 간단합니다. 달러 GOPATH/bin 이하나 달러 GOBIN 이하의 명령에 대해 "$goinstall${명령 경로] @latest"를 순서대로 실행하고 있습니다.
명령을 업데이트하려면 대상 명령의 import partth(예:github.com/nao1215/gup)를 업데이트해야 합니다.gup 명령은 '$go versin-m${명령이 저장된 경로}' 의 실행 결과에서 import path를 얻었습니다.
)$ go version -m ~/.go/bin/gup
/home/nao/.go/bin/gup: go1.17
	path	github.com/nao1215/gup  ★ ここがimport path情報
	mod	github.com/nao1215/gup	v0.7.3 ★ バージョン情報はここから取得
	(省略)
--dry-run 옵션이 유효하면 달러 GOPATH/bin 또는 달러 GOBIN을 다른 경로로 임시로 변경한 후 구축을 수행합니다.--dry-run 옵션이 무효인 경우--dry-run에 비해 옵션이 유효할 때 전체 구축이기 때문에 시간이 걸린다.

list 하위 명령


$GOPATH/bin 이하 또는 $GOBIN 이하의 명령 정보를 나열합니다.표시할 정보는 다음과 같습니다.
  • 명령 이름
  • import path
  • 버전
  • $ gup list
           cheat: github.com/cheat/cheat/cmd/[email protected]
       fyne_demo: fyne.io/fyne/v2/cmd/[email protected]
             gal: github.com/nao1215/gal/cmd/[email protected]
       germanium: github.com/matsuyoshi30/germanium/cmd/[email protected]
          ginkgo: github.com/onsi/ginkgo/[email protected]
      git-chglog: github.com/git-chglog/git-chglog/cmd/[email protected]
    

    export/import 하위 명령


    export/import 하위 명령은 규격이 완비되지 않은 잔류입니다.gup 명령의 초기 규격에서 셸의 실행 역사에서 import path를 가져오고 ~/.config/gup/gup.conf에 import path의 규격을 남깁니다.그리고 gup.conf의 내용에 따라 업데이트를 실시했다.gup.conf는'KEY=VALUE'의 형식이고 KEY는 명령명이며 VALUE는 import partth이다.
    $ cat ~/.config/gup/gup.conf 
    cheat = github.com/cheat/cheat/cmd/cheat
    fyne_demo = fyne.io/fyne/v2/cmd/fyne_demo
    germanium = github.com/matsuyoshi30/germanium/cmd/germanium
    ginkgo = github.com/onsi/ginkgo/ginkgo
    
    규격이 완비되지 않은 내용은'셸의 역사가 사라졌기 때문에 모든 import path를 얻을 수 없다'는 내용이다.이 과제를 해결하기 위해 현재'go version-m'을 사용하는 방법이 바뀌고 있다.
    개선 규격이 완비되지 않을 때는'환경 A에서 제작gup.conf하고, 환경 B에서 근거gup.conf한 정보에 따라 설치 명령을 내리면 환경 구축이 수월해진다'는 생각을 했다.인상은 여러 환경에서 dotfiles를 공유하는 느낌이다.
    따라서, 현재는 export 하위 명령을 통해 gup.conf 생성할 수 있으며, import 하위 명령을 기반으로 gup.conf 명령을 설치할 수 있습니다.
    $ gup export
    gup:INFO : Export /home/nao/.config/gup/gup.conf
    
    $ gup import
    gup:INFO : start update based on /home/nao/.config/gup/gup.conf
    gup:INFO : update all binary under $GOPATH/bin or $GOBIN
    gup:INFO : [ 1/32] update success: github.com/cheat/cheat/cmd/cheat (<from gup.conf> to v0.0.0-20211009161301-12ffa4cb5c87)
    gup:INFO : [ 2/32] update success: fyne.io/fyne/v2/cmd/fyne_demo (<from gup.conf> to v2.1.3)
    	(省略)
    

    remove 하위 명령


    remove 하위 명령 이름은 $GOPATH/bin 이하 또는 $GOBIN 이하의 명령 이름으로 매개변수이며 명령을 삭제합니다.명령을 설치하려고 할 때 빠르게 삭제하기 위해 추가된 기능입니다.
    $ gup remove gal ubume subaru
    gup:CHECK: remove /home/nao/.go/bin/gal? [Y/n] Y
    gup:INFO : removed /home/nao/.go/bin/gal
    gup:CHECK: remove /home/nao/.go/bin/ubume? [Y/n] Y
    gup:INFO : removed /home/nao/.go/bin/ubume
    gup:CHECK: remove /home/nao/.go/bin/subaru? [Y/n] Y
    gup:INFO : removed /home/nao/.go/bin/subaru
    
    --force에 옵션을 추가하면 삭제 확인이 사라지고 명령을 강제로 삭제합니다.
    $ gup remove --force lazygit
    gup:INFO : removed /home/nao/.go/bin/lazygit
    

    향후 (추가 가능 기능)


    개인적으로 필요하다고 생각하는 기능은 다음과 같다.
  • 설치 시 구축 옵션에 해당
  • 업데이트 완료 시 데스크탑 알림
    - 업데이트 소요 시간
  • 다른 환경으로 간단히 복제gup.conf
  • Gist를 사용하면 가능하지만 필요하지 않은 것 같습니다
  • .
  • GOPATH/bin 이하 또는 GOBIN 이하 명령이 최신 검사 기능인지 여부
  • 주제 밖의 말: OSS 자체 제작을 위한 적절한 홍보 필요


    지금까지 자신이 만든 OSS의 홍보는 자신의 기술 블로그에만 쓰이고 적극적인 홍보는 하지 않았다.그러나gup지령은 mattn의 트위터에 의해 GiitHub Star 증가 기능에 대한 의견을 듣기 시작했다.
    스타는 동기와 연결되고 의견은 소프트웨어 개선과 연결되어 매우 귀중하다.하지만 자체 제작 OSS는 소개 기사가 올라오거나 트위터에 올라올 때만 주목을 받는다.제게 소개 기사를 써줄 사람이 거의 없기 때문에 제인에게만 쓸 수 있습니다이렇게 생각한 결과
    (단, 자체 제작한 OSS만 사용하고 홍보하면 검색에 방해가 되지 않는다)
    마지막으로 당신의 의견 일부를 소개하면 끝납니다.다 그런 것 같아서 바로 수정했어요.
  • $ gup에서 업데이트를 시작하는 것보다 $ gup update에서 업데이트를 시작하는 것이 낫다.갑작스러운 업데이트 방지
  • 지정된 바이너리를 업데이트할 때 --file 옵션으로 명령명을 지정하기보다는 매개 변수로 직접 지정하는 것이 더 자연스럽다
  • 업데이트 전후 버전 정보 출력
  • 사용자에게 전달할 수 없는 오류 로그gup:WARN : $GOPATH/bin or $GOBIN contains the directory가 있습니다
  • 좋은 웹페이지 즐겨찾기