From: Tom Clegg Date: Tue, 8 Dec 2020 15:34:07 +0000 (-0500) Subject: Save git version in lightning binary collection name and properties. X-Git-Url: https://git.arvados.org/lightning.git/commitdiff_plain/632ce6b4c5bc7d0b5fb08c71e361b996bd177464 Save git version in lightning binary collection name and properties. Arvados-DCO-1.1-Signed-off-by: Tom Clegg --- diff --git a/Makefile b/Makefile new file mode 100644 index 0000000000..62f4e549e2 --- /dev/null +++ b/Makefile @@ -0,0 +1,4 @@ +GOPATH?=$(HOME)/go +.PHONY: $(GOPATH)/bin/lightning +$(GOPATH)/bin/lightning: + go install -ldflags "-X git.arvados.org/arvados.git/lib/cmd.version=$(shell ./version.sh)" diff --git a/arvados.go b/arvados.go index a79160d785..f2819d01ef 100644 --- a/arvados.go +++ b/arvados.go @@ -14,6 +14,7 @@ import ( "sync" "time" + "git.arvados.org/arvados.git/lib/cmd" "git.arvados.org/arvados.git/sdk/go/arvados" "git.arvados.org/arvados.git/sdk/go/arvadosclient" "git.arvados.org/arvados.git/sdk/go/keepclient" @@ -399,7 +400,7 @@ func (runner *arvadosContainerRunner) makeCommandCollection() (string, error) { return "", err } b2 := blake2b.Sum256(exe) - cname := fmt.Sprintf("lightning-%x", b2) + cname := "lightning " + cmd.Version.String() // must build with "make", not just "go install" var existing arvados.CollectionList err = runner.Client.RequestAndDecode(&existing, "GET", "arvados/v1/collections", nil, arvados.ListOptions{ Limit: 1, @@ -407,15 +408,16 @@ func (runner *arvadosContainerRunner) makeCommandCollection() (string, error) { Filters: []arvados.Filter{ {Attr: "name", Operator: "=", Operand: cname}, {Attr: "owner_uuid", Operator: "=", Operand: runner.ProjectUUID}, + {Attr: "properties.blake2b", Operator: "=", Operand: fmt.Sprintf("%x", b2)}, }, }) if err != nil { return "", err } if len(existing.Items) > 0 { - uuid := existing.Items[0].UUID - log.Printf("using lightning binary in existing collection %s (name is %q; did not verify whether content matches)", uuid, cname) - return uuid, nil + coll := existing.Items[0] + log.Printf("using lightning binary in existing collection %s (name is %q, hash is %q; did not verify whether content matches)", coll.UUID, cname, coll.Properties["blake2b"]) + return coll.UUID, nil } log.Printf("writing lightning binary to new collection %q", cname) ac, err := arvadosclient.New(runner.Client) @@ -449,6 +451,9 @@ func (runner *arvadosContainerRunner) makeCommandCollection() (string, error) { "owner_uuid": runner.ProjectUUID, "manifest_text": mtxt, "name": cname, + "properties": map[string]interface{}{ + "blake2b": fmt.Sprintf("%x", b2), + }, }, }) if err != nil { diff --git a/version.sh b/version.sh new file mode 100755 index 0000000000..d17f361c76 --- /dev/null +++ b/version.sh @@ -0,0 +1,7 @@ +#!/bin/bash +set -e -o pipefail +echo -n "0.0.0" +echo -n "+$(git log -n1 --format=%h)" +if [[ -n "$(git status -s)" || -n "$(git diff)" || -n "$(git diff --cached)" ]]; then + echo -n "-$(TZ=UTC date +%Y%m%d%H%M%S)" +fi