about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--tools/nixery/server/builder/state.go24
-rw-r--r--tools/nixery/server/main.go18
2 files changed, 31 insertions, 11 deletions
diff --git a/tools/nixery/server/builder/state.go b/tools/nixery/server/builder/state.go
new file mode 100644
index 000000000000..1c7f58821b6b
--- /dev/null
+++ b/tools/nixery/server/builder/state.go
@@ -0,0 +1,24 @@
+package builder
+
+import (
+	"cloud.google.com/go/storage"
+	"github.com/google/nixery/config"
+	"github.com/google/nixery/layers"
+)
+
+// State holds the runtime state that is carried around in Nixery and
+// passed to builder functions.
+type State struct {
+	Bucket *storage.BucketHandle
+	Cache  LocalCache
+	Cfg    config.Config
+	Pop    layers.Popularity
+}
+
+func NewState(bucket *storage.BucketHandle, cfg config.Config) State {
+	return State{
+		Bucket: bucket,
+		Cfg:    cfg,
+		Cache:  NewCache(),
+	}
+}
diff --git a/tools/nixery/server/main.go b/tools/nixery/server/main.go
index 9242a3731af0..ae8dd3ab2dbf 100644
--- a/tools/nixery/server/main.go
+++ b/tools/nixery/server/main.go
@@ -122,10 +122,8 @@ func writeError(w http.ResponseWriter, status int, code, message string) {
 }
 
 type registryHandler struct {
-	cfg    *config.Config
-	ctx    *context.Context
-	bucket *storage.BucketHandle
-	cache  *builder.LocalCache
+	ctx   *context.Context
+	state *builder.State
 }
 
 func (h *registryHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
@@ -141,7 +139,7 @@ func (h *registryHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
 		imageTag := manifestMatches[2]
 		log.Printf("Requesting manifest for image %q at tag %q", imageName, imageTag)
 		image := builder.ImageFromName(imageName, imageTag)
-		buildResult, err := builder.BuildImage(h.ctx, h.cfg, h.cache, &image, h.bucket)
+		buildResult, err := builder.BuildImage(h.ctx, h.state, &image)
 
 		if err != nil {
 			writeError(w, 500, "UNKNOWN", "image build failure")
@@ -172,7 +170,7 @@ func (h *registryHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
 	layerMatches := layerRegex.FindStringSubmatch(r.RequestURI)
 	if len(layerMatches) == 3 {
 		digest := layerMatches[2]
-		url, err := constructLayerUrl(h.cfg, digest)
+		url, err := constructLayerUrl(&h.state.Cfg, digest)
 
 		if err != nil {
 			log.Printf("Failed to sign GCS URL: %s\n", err)
@@ -197,16 +195,14 @@ func main() {
 
 	ctx := context.Background()
 	bucket := prepareBucket(&ctx, cfg)
-	cache := builder.NewCache()
+	state := builder.NewState(bucket, *cfg)
 
 	log.Printf("Starting Nixery on port %s\n", cfg.Port)
 
 	// All /v2/ requests belong to the registry handler.
 	http.Handle("/v2/", &registryHandler{
-		cfg:    cfg,
-		ctx:    &ctx,
-		bucket: bucket,
-		cache:  &cache,
+		ctx:   &ctx,
+		state: &state,
 	})
 
 	// All other roots are served by the static file server.