func (aci *Aci) Push() error { defer aci.giveBackUserRightsToTarget() if err := aci.EnsureBuilt(); err != nil { return err } if aci.args.Test { aci.args.Test = false if err := aci.Test(); err != nil { return err } } if err := aci.EnsureZipSign(); err != nil { return err } im, err := common.ExtractManifestFromAci(aci.target + pathImageAci) if err != nil { return errs.WithEF(err, aci.fields.WithField("file", pathImageAci), "Failed to extract manifest from aci file") } return aci.upload(common.ExtractNameVersionFromManifest(im)) }
func (aci *Aci) RunBuilderCommand(command common.BuilderCommand) error { defer aci.giveBackUserRightsToTarget() logs.WithF(aci.fields).Info("Building") if err := os.MkdirAll(aci.target, 0777); err != nil { return errs.WithEF(err, aci.fields, "Cannot create target directory") } if err := ioutil.WriteFile(aci.target+common.PathManifestYmlTmpl, []byte(aci.manifestTmpl), 0644); err != nil { return errs.WithEF(err, aci.fields.WithField("file", aci.target+common.PathManifestYmlTmpl), "Failed to write manifest template") } stage1Hash, err := aci.prepareStage1aci() if err != nil { return errs.WithEF(err, aci.fields, "Failed to prepare stage1 image") } builderHash, err := aci.prepareBuildAci() if err != nil { return errs.WithEF(err, aci.fields, "Failed to prepare build image") } logs.WithF(aci.fields).Info("Calling rkt to start build") defer aci.cleanupRun(builderHash, stage1Hash) if err := Home.Rkt.Run(aci.prepareRktRunArguments(command, builderHash, stage1Hash)); err != nil { return errs.WithEF(err, aci.fields, "Builder container return with failed status") } content, err := common.ExtractManifestContentFromAci(aci.target + pathImageAci) if err != nil { logs.WithEF(err, aci.fields).Warn("Failed to write manifest.json") } if err := ioutil.WriteFile(aci.target+pathManifestJson, content, 0644); err != nil { logs.WithEF(err, aci.fields).Warn("Failed to write manifest.json") } im := &schema.ImageManifest{} if err = im.UnmarshalJSON(content); err != nil { return errs.WithEF(err, aci.fields.WithField("content", string(content)), "Cannot unmarshall json content") } fullname := common.ExtractNameVersionFromManifest(im) logs.WithField("fullname", *fullname).Info("Finished building aci") if err := ioutil.WriteFile(aci.target+pathVersion, []byte(*fullname), 0644); err != nil { return errs.WithEF(err, aci.fields, "Failed to write version file in target") } return nil }