Skip to content

Instantly share code, notes, and snippets.

@dolmen
Last active July 13, 2022 05:52
Show Gist options
  • Save dolmen/baf85f57a397c53a2bae065586bba50c to your computer and use it in GitHub Desktop.
Save dolmen/baf85f57a397c53a2bae065586bba50c to your computer and use it in GitHub Desktop.

Revisions

  1. dolmen revised this gist Mar 6, 2020. 1 changed file with 1 addition and 0 deletions.
    1 change: 1 addition & 0 deletions go-bin-upgrade
    Original file line number Diff line number Diff line change
    @@ -2,6 +2,7 @@

    # Upgrade Go binaries built in Go module mode and installed in $GOPATH/bin.
    # Author: Olivier Mengué
    # Source: https://gist.github.com/dolmen/baf85f57a397c53a2bae065586bba50c

    set -euo pipefail
    IFS=$'\n\t'
  2. dolmen revised this gist Mar 5, 2020. 1 changed file with 12 additions and 0 deletions.
    12 changes: 12 additions & 0 deletions README.md
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,12 @@
    # go-bin-upgrade

    Rebuild the binaries you have built in Go module mode installed in $GOPATH/bin.

    Usage: `go-bin-upgrade [-n] [-v] bin1 [bin2]...`

    Examples:
    * `go-bin-upgrade -n godoc`
    * `(cd ~/go/bin ; go-bin-upgrade * )`

    Limitation: only binaries built in Go module mode can be rebuilt because
    they embed the module from which they have been built. Check `go version -m` on the binary for more info.
  3. dolmen revised this gist Mar 5, 2020. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion go-bin-upgrade
    Original file line number Diff line number Diff line change
    @@ -1,6 +1,6 @@
    #!/usr/bin/env bash

    # Upgrade Go binaries installed in $GOPATH/bin
    # Upgrade Go binaries built in Go module mode and installed in $GOPATH/bin.
    # Author: Olivier Mengué

    set -euo pipefail
  4. dolmen created this gist Mar 5, 2020.
    58 changes: 58 additions & 0 deletions go-bin-upgrade
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,58 @@
    #!/usr/bin/env bash

    # Upgrade Go binaries installed in $GOPATH/bin
    # Author: Olivier Mengué

    set -euo pipefail
    IFS=$'\n\t'

    update=true
    verbose=false

    GOBIN="$(go env GOPATH)/bin"

    function usage
    {
    echo "usage: $0 [-n] <file>"
    exit 1
    }

    while getopts 'nv?h' o; do
    case "$o" in
    n)
    update=false
    ;;
    v)
    verbose=true
    ;;
    *)
    usage
    ;;
    esac
    done
    shift $((OPTIND-1))

    for f
    do
    # path
    p="$(go version -m "$GOBIN/$1" 2>/dev/null | sed -n -e '2 s/^ path //p')"
    if [[ -n "$p" ]]; then
    # mod
    m="$(go version -m "$GOBIN/$1" | sed -n -e '3 s/^ mod \([^ ]*\).*/\1/p')"

    echo "$f: path=$p module=$m"
    if $verbose; then
    go version -m "$GOBIN/$1"
    fi
    $update || continue

    ( cd "$(go env GOPATH)/src"; go get -t -d "$m" "$p" ) || true
    ( cd "$(go env GOPATH)/src/$p"; GO111MODULE=on go install )

    if $verbose; then
    go version -m "$GOBIN/$1"
    fi
    else
    echo "$f: no go module information embeded in binary" >&2
    fi
    done