| # Scrap Exchange | 
 |  | 
 | A unified backend service for storing scraps of code across all of Skia Infrastructure's services. | 
 |  | 
 | ## Overview | 
 |  | 
 | Skia Infrastructure currently has services that store scraps of code, such as | 
 | https://shaders.skia.org. The term 'scrap' implies that the code can not stand | 
 | on its own, such as the JSON that underlies SkSL shaders, or JS demos. | 
 |  | 
 | Scrap Exchange is a unified backend service that is constructed to make it | 
 | easier to stand up such web UIs, and to also make linking top level web UIs | 
 | together easier, for example, going from a particle 'scrap' on | 
 | shaders.skia.org to complete C++ code on fiddle.skia.org, or complete JS code | 
 | on jsfiddle.skia.org, that runs the shaders. The scrap service has the | 
 | following features: | 
 |  | 
 | - Store scraps by 'type', i.e. SVG vs SkSL vs C++. | 
 | - Load scraps via URL. | 
 | - Store meta-data with scraps. For example, one SkSL scrap may refer to other | 
 |   child shaders, so the meta-data will contain the references to those other | 
 |   scraps. Other things that could be stored in metadata include the values of | 
 |   controls that are used as inputs to a shader. | 
 | - Ability for Infrastructure team members to review and delete scraps as | 
 |   needed, such as copyright violations. | 
 | - The scrap server will also allow 'wrapping' scraps in boilerplate code. For | 
 |   example, an SkSL scrap can be wrapped in C++ and then used directly by | 
 |   fiddle. This includes understanding the metadata about the scrap, such as | 
 |   child shaders, and filling in the C++ code template appropriately. | 
 |  | 
 | See http://go/scrap-exchange for more details. | 
 |  | 
 | ## Auth | 
 |  | 
 | Uses the `skia-public-auth@skia-public.iam.gserviceaccount.com` service account, | 
 | originally created in `//infra/am`, to talk to the Chrome Infra Auth API. | 
 |  | 
 | ## Buckets | 
 |  | 
 | We use the following buckets for each instance: | 
 |  | 
 |     skia-public: gs://skia-public-scrap-exchange | 
 |  | 
 | ## Deployment | 
 |  | 
 | Scrap Exchange is automatically built by a | 
 | [Louhi flow](https://louhi.dev/6316342352543744/flow-detail/dee997a6-0306-49f9-b902-dd8a7e7aab9b?branch=main) | 
 | whenever a change merges anywhere in this repository. If this results in a new | 
 | Docker image in | 
 | [gcr.io/skia-public/scrapexchange](https://console.cloud.google.com/gcr/images/skia-public/global/scrapexchange) | 
 | then Louhi will automatically update references in k8s-config whereby | 
 | k8s-deployer will automatically deploy that new image. Deployment is fully | 
 | automatic. | 
 |  | 
 | A Docker image can be manually pushed to GCR by running | 
 | `make push_I_am_really_sure`. In addition to pushing, this target will also | 
 | update k8s-config references. This will prevent Louhi from updating future | 
 | scrapexchange references in k8s-config. To re-enable updating, a manual change | 
 | in k8s-config will need to be landed that returns the image reference from | 
 | tag-style (e.g. `gcr.io/skia-public/scrapexchange:{tagname}`) | 
 | to digest style (e.g. `cr.io/skia-public/scrapexchange@sha256:{digest}`). |