# Registry Acceptance
## :heavy_check_mark: `pack build --help` / `pack create-builder --help`
#### Output
```shell script
$ ./out/pack build --help
Generate app image from source code
Usage:
pack build <image-name> [flags]
Flags:
-B, --builder string Builder image (default "some/image")
-b, --buildpack strings Buildpack reference in the form of '<buildpack>@<version>',
path to a buildpack directory (not supported on Windows),
path/URL to a buildpack .tar or .tgz file, or
the name of a packaged buildpack image
Repeat for each buildpack in order,
or supply once by comma-separated list
-R, --buildpack-registry string Buildpack Registry URL
--clear-cache Clear image's associated cache before building
-D, --default-process string Set the default process type
-d, --descriptor string Path to the project descriptor file
-e, --env stringArray Build-time environment variable, in the form 'VAR=VALUE' or 'VAR'.
When using latter value-less form, value will be taken from current
environment at the time this command is executed.
This flag may be specified multiple times and will override
individual values defined by --env-file.
--env-file stringArray Build-time environment variables file
One variable per line, of the form 'VAR=VALUE' or 'VAR'
When using latter value-less form, value will be taken from current
environment at the time this command is executed
-h, --help Help for 'build'
--network string Connect detect and build containers to network
--no-pull Skip pulling builder and run images before use
-p, --path string Path to app dir or zip-formatted file (defaults to current working directory)
--publish Publish to registry
--run-image string Run image (defaults to default stack's run image)
--volume stringArray Mount host volume into the build container, in the form '<host path>:<target path>'. Target path will be prefixed with '/platform/'
Repeat for each volume in order,
or supply once by comma-separated list
Global Flags:
--no-color Disable color output
-q, --quiet Show less output
--timestamps Enable timestamps in output
-v, --verbose Show more output
┌─[javier.romero][Javiers-MacBook-Pro][±][rfc-0022 → origin {10} ✓][~/dev/pack]
└─▪ ./out/pack create-builder --help
Create builder image
Usage:
pack create-builder <image-name> --builder-config <builder-config-path> [flags]
Flags:
-b, --builder-config string Path to builder TOML file (required)
-R, --buildpack-registry string Buildpack Registry URL
-h, --help Help for 'create-builder'
--no-pull Skip pulling build image before use
--publish Publish to registry
Global Flags:
--no-color Disable color output
-q, --quiet Show less output
--timestamps Enable timestamps in output
-v, --verbose Show more output
```
```shell=
$ ./out/pack create-builder --help
Create builder image
Usage:
pack create-builder <image-name> --builder-config <builder-config-path> [flags]
Flags:
-b, --builder-config string Path to builder TOML file (required)
-R, --buildpack-registry string Buildpack Registry URL
-h, --help Help for 'create-builder'
--no-pull Skip pulling build image before use
--publish Publish to registry
Global Flags:
--no-color Disable color output
-q, --quiet Show less output
--timestamps Enable timestamps in output
-v, --verbose Show more output
```
## :heavy_check_mark: `pack build` when not able to connect to registry
#### Output
```shell script
$ ./out/pack build my-app -B cnbs/sample-builder:alpine -b urn:cnb:registry:example/foo -p ../samples/apps/bash-script/ -v
Using project descriptor located at ../samples/apps/bash-script/project.toml
Pulling image index.docker.io/cnbs/sample-builder:alpine
alpine: Pulling from cnbs/sample-builder
Digest: sha256:b7259fe1ab989ad962370eea2873e7dc66879ca275d7821636f71d377e53fae9
Status: Image is up to date for cnbs/sample-builder:alpine
Selected run image cnbs/sample-stack-run:alpine
Pulling image cnbs/sample-stack-run:alpine
alpine: Pulling from cnbs/sample-stack-run
Digest: sha256:bdfe5be3e39c2a1cf6d60ed38a46055e276a049932333903a0b6f060daf92005
Status: Image is up to date for cnbs/sample-stack-run:alpine
Refreshing registry cache for github.com//buildpacks/registry-index
Creating registry cache for github.com//buildpacks/registry-index
ERROR: locating in registry urn:cnb:registry:example/foo: refreshing cache: could not create registry cache: could not clone remote registry: authentication required
```
---
## :heavy_check_mark: `pack build -r <invalid registry>`
#### Output
```shell
$ ./out/pack build my-app -B cnbs/sample-builder:alpine -b urn:cnb:registry:example/foo -p ../samples/apps/bash-script/ -v -R /tmp/
Using project descriptor located at ../samples/apps/bash-script/project.toml
Pulling image index.docker.io/cnbs/sample-builder:alpine
alpine: Pulling from cnbs/sample-builder
Digest: sha256:b7259fe1ab989ad962370eea2873e7dc66879ca275d7821636f71d377e53fae9
Status: Image is up to date for cnbs/sample-builder:alpine
Selected run image cnbs/sample-stack-run:alpine
Pulling image cnbs/sample-stack-run:alpine
alpine: Pulling from cnbs/sample-stack-run
Digest: sha256:bdfe5be3e39c2a1cf6d60ed38a46055e276a049932333903a0b6f060daf92005
Status: Image is up to date for cnbs/sample-stack-run:alpine
Refreshing registry cache for //tmp/
Creating registry cache for //tmp/
ERROR: locating in registry urn:cnb:registry:example/foo: refreshing cache: could not create registry cache: could not clone remote registry: repository not found
```
---
## :heavy_check_mark: `pack create-builder` with `urn` in `uri` key
#### Output
```shell
$ cat ../samples/builders/alpine/builder.toml
# Buildpacks to include in builder
[[buildpacks]]
uri = "urn:cnb:registry:samples/hello-universe"
[[order]]
[[order.group]]
id = "samples/hello-universe"
version = "0.0.1"
# Stack that will be used by the builder
[stack]
id = "io.buildpacks.samples.stacks.alpine"
run-image = "cnbs/sample-stack-run:alpine"
build-image = "cnbs/sample-stack-build:alpine"
$ ./out/pack create-builder my-builder --builder-config ../samples/builders/alpine/builder.toml -R /var/folders/nx/x67fz2nj5hv_w43gn5h019hh0000gn/T/registry.hBN9UfoA -v
Pulling image cnbs/sample-stack-build:alpine
alpine: Pulling from cnbs/sample-stack-build
Digest: sha256:6d17681dfa4bbe62a4d8d22b088c9083c9a02153faf8db05ac5749d977e3606a
Status: Image is up to date for cnbs/sample-stack-build:alpine
Creating builder my-builder from build-image cnbs/sample-stack-build:alpine
Using cached version of https://github.com/buildpacks/lifecycle/releases/download/v0.7.2/lifecycle-v0.7.2+linux.x86-64.tgz
Refreshing registry cache for //var/folders/nx/x67fz2nj5hv_w43gn5h019hh0000gn/T/registry.hBN9UfoA
Validating registry cache for //var/folders/nx/x67fz2nj5hv_w43gn5h019hh0000gn/T/registry.hBN9UfoA
Creating registry cache for //var/folders/nx/x67fz2nj5hv_w43gn5h019hh0000gn/T/registry.hBN9UfoA
Pulling image localhost:5000/cnbs/sample-package@sha256:c68242ee63f084b50cca86d341bc7286d2b5c1223944e4b3e58038f00055ec80
sha256:c68242ee63f084b50cca86d341bc7286d2b5c1223944e4b3e58038f00055ec80: Pulling from cnbs/sample-package
Digest: sha256:c68242ee63f084b50cca86d341bc7286d2b5c1223944e4b3e58038f00055ec80
Status: Image is up to date for localhost:5000/cnbs/sample-package@sha256:c68242ee63f084b50cca86d341bc7286d2b5c1223944e4b3e58038f00055ec80
Successfully created builder image my-builder
Tip: Run pack build <image-name> --builder my-builder to use this builder
```
---
## :heavy_check_mark: `pack create-builder` with `urn` in `image` key
#### Output
```shell
$ cat ../samples/builders/alpine/builder.toml
# Buildpacks to include in builder
[[buildpacks]]
image = "urn:cnb:registry:samples/hello-universe"
[[order]]
[[order.group]]
id = "samples/hello-universe"
version = "0.0.1"
# Stack that will be used by the builder
[stack]
id = "io.buildpacks.samples.stacks.alpine"
run-image = "cnbs/sample-stack-run:alpine"
build-image = "cnbs/sample-stack-build:alpine"
$ ./out/pack create-builder my-builder --builder-config ../samples/builders/alpine/builder.toml
alpine: Pulling from cnbs/sample-stack-build
Digest: sha256:6d17681dfa4bbe62a4d8d22b088c9083c9a02153faf8db05ac5749d977e3606a
Status: Image is up to date for cnbs/sample-stack-build:alpine
ERROR: invalid image format: urn:cnb:registry:samples/hello-universe
```
## :heavy_check_mark: `pack build -r <valid registry>`
```shell
$ ./out/pack inspect-builder cnbs/sample-builder:alpine
Inspecting builder: cnbs/sample-builder:alpine
LOCAL:
Created By:
Name: Pack CLI
Version: 0.10.0+git-06d9983.build-259
Stack:
ID: io.buildpacks.samples.stacks.alpine
Lifecycle:
Version: 0.7.2
Buildpack API: 0.2
Platform API: 0.3
Run Images:
cnbs/sample-stack-run:alpine
Buildpacks:
ID VERSION HOMEPAGE
buildpacks-io-samples/java-maven 0.0.1 https://github.com/buildpacks/samples/tree/master/buildpacks/java-maven
buildpacks-io-samples/kotlin-gradle 0.0.1 https://github.com/buildpacks/samples/tree/master/buildpacks/kotlin-gradle
buildpacks-io-samples/hello-universe 0.0.1 https://github.com/buildpacks/samples/tree/master/buildpacks/hello-universe
buildpacks-io-samples/hello-moon 0.0.1 https://github.com/buildpacks/samples/tree/master/buildpacks/hello-moon
buildpacks-io-samples/hello-world 0.0.1 https://github.com/buildpacks/samples/tree/master/buildpacks/hello-world
Detection Order:
Group #1:
buildpacks-io-samples/java-maven@0.0.1
Group #2:
buildpacks-io-samples/kotlin-gradle@0.0.1
Group #3:
buildpacks-io-samples/hello-universe@0.0.1
$ ./out/pack build my-app -B cnbs/sample-builder:alpine -b urn:cnb:registry:samples/hello-world -p ../samples/apps/bash-script/ -v -r /var/folders/nx/x67fz2nj5hv_w43gn5h019hh0000gn/T/registry.y8vZ7nc1
Using project descriptor located at ../samples/apps/bash-script/project.toml
...
Pulling image localhost:5000/cnbs/sample-package@sha256:a26a307915d5ed20f05261c33c4143822cc57d3794315fa2b0083de4d86d8a76
sha256:a26a307915d5ed20f05261c33c4143822cc57d3794315fa2b0083de4d86d8a76: Pulling from cnbs/sample-package
Digest: sha256:a26a307915d5ed20f05261c33c4143822cc57d3794315fa2b0083de4d86d8a76
Status: Image is up to date for localhost:5000/cnbs/sample-package@sha256:a26a307915d5ed20f05261c33c4143822cc57d3794315fa2b0083de4d86d8a76
Adding buildpack samples/hello-world version 0.0.1 to builder
Setting custom order
Using build cache volume pack-cache-cbd6ecf04229.build
===> DETECTING
[detector] ======== Results ========
[detector] pass: samples/hello-world@0.0.1
[detector] Resolving plan... (try #1)
[detector] samples/hello-world 0.0.1
===> ANALYZING
[analyzer] Analyzing image "038d3966ef0e8ef14e36a36aa7481d48ce68964723dddb7c1ee7bd3ae6eae3dc"
===> RESTORING
===> BUILDING
...
===> EXPORTING
[exporter] no project metadata found at path './project-metadata.toml', project metadata will not be exported
[exporter] Reusing layers from image with id '038d3966ef0e8ef14e36a36aa7481d48ce68964723dddb7c1ee7bd3ae6eae3dc'
[exporter] Writing tarball for layer "launcher"
[exporter] Reusing layer 'launcher'
[exporter] Layer 'launcher' SHA: sha256:c189102796b1e6d38ccb28796cf6b65e1a5541f619367d0a7cd479785bf21a7c
[exporter] Layer 'app' SHA: sha256:4c6ff16e28deaf437a1abe5c926cdfb8afcd2c31ea544f6992ed7b665965b3f4
[exporter] Reusing 1/1 app layer(s)
[exporter] Writing tarball for layer "config"
[exporter] Reusing layer 'config'
[exporter] Layer 'config' SHA: sha256:fb8316ee68aad907adf0fda56908b2fc3c699c287ed13ab30e55ed7efe703bad
[exporter] *** Images (038d3966ef0e):
[exporter] index.docker.io/library/my-app:latest
[exporter]
[exporter] *** Image ID: 038d3966ef0e8ef14e36a36aa7481d48ce68964723dddb7c1ee7bd3ae6eae3dc
Successfully built image my-app
```
# Additional Sugestions
- [ ] Create an issue to support buildpacks from registry via `cnb://[<host>]/[<id>[@<version>]]`.
- [ ] Create an issue to enable configuring the default registry.
- [ ] Create an issue to gate registry functionallity behind "experimental".