| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- package main
- import (
- "encoding/json"
- "os"
- "path/filepath"
- resource "github.com/concourse/registry-image-resource"
- "github.com/google/go-containerregistry/pkg/name"
- "github.com/google/go-containerregistry/pkg/v1/remote"
- "github.com/sirupsen/logrus"
- )
- type InRequest struct {
- Source resource.Source `json:"source"`
- Version resource.Version `json:"version"`
- }
- type InResponse struct {
- Version resource.Version `json:"version"`
- Metadata []MetadataField `json:"metadata"`
- }
- type ImageMetadata struct {
- Env []string `json:"env"`
- User string `json:"user"`
- }
- type MetadataField struct {
- Name string `json:"name"`
- Value string `json:"value"`
- }
- func main() {
- logrus.SetOutput(os.Stderr)
- var req InRequest
- err := json.NewDecoder(os.Stdin).Decode(&req)
- if err != nil {
- logrus.Errorf("invalid payload: %s", err)
- os.Exit(1)
- return
- }
- dest := os.Args[1]
- ref := req.Source.Repository + ":" + req.Source.Tag
- n, err := name.ParseReference(ref, name.WeakValidation)
- if err != nil {
- logrus.Errorf("failed to resolve name: %s", err)
- os.Exit(1)
- return
- }
- image, err := remote.Image(n)
- if err != nil {
- logrus.Errorf("Failed to locate remote image: %s", err)
- os.Exit(1)
- return
- }
- err = unpackImage(filepath.Join(dest, "rootfs"), image)
- if err != nil {
- logrus.Errorf("Failed to extract image: %s", err)
- os.Exit(1)
- return
- }
- meta, err := os.Create(filepath.Join(dest, "metadata.json"))
- if err != nil {
- logrus.Errorf("Failed to create image metadata: %s", err)
- os.Exit(1)
- return
- }
- cfg, err := image.ConfigFile()
- if err != nil {
- logrus.Errorf("Failed to inspect image config: %s", err)
- os.Exit(1)
- return
- }
- err = json.NewEncoder(meta).Encode(ImageMetadata{
- Env: cfg.ContainerConfig.Env,
- User: cfg.ContainerConfig.User,
- })
- if err != nil {
- logrus.Errorf("Failed to write image metadata: %s", err)
- os.Exit(1)
- return
- }
- json.NewEncoder(os.Stdout).Encode(InResponse{
- Version: req.Version,
- Metadata: []MetadataField{},
- })
- }
|