Candle Documentation

Package

Packaging your Wick application or component is a key step before deployment. This guide provides a comprehensive walkthrough of creating a Wick package and pushing it to an OCI compliant registry.

Wick Package Configuration

Here’s a typical configuration block for creating a package with Wick:

---
kind: wick/app@v1
name: my-app
metadata:
  version: 0.1.0
 ...
package:
  registry:
    host: registry.candle.dev
    namespace: wick
  files:
    - ./public

Configuration Details:

  • host: Specifies the OCI compliant registry where your Wick package will be pushed. We highly recommend using the free Candle Registry, which is optimized specifically for Wick packages.
  • namespace: Represents the “project” or container under which the package artifact will reside. If you’re familiar with DockerHub, this is similar to a repository.
  • files: An array that lists the directories or files to be included in the package. In this example, all files in the ./public directory will be added to the package. This is useful for including static assets such as html, images, CSS, and JavaScript files for web applications and SPA.

Packaging Name and Version

Wick automatically extracts the package name and version from the Wick application (or component) manifest. This ensures consistency and eliminates manual errors during the packaging process.

Registry Credentials

There are two ways to set your registry credentials: First is to use environment variables:

export OCI_USERNAME=<username>
export OCI_PASSWORD=<password/secret>

The second way is to set the values in the wick config.yaml file located at ~/.wick/config.yaml:

---
 ...
credentials: #this is a top level key
  - scope: registry.candle.dev
    auth:
      type: basic
      username: <username>
      password: <password/secret>
 ...

Pushing a Package

Once your configuration is set and you’re ready to push your package, use the following command:

wick registry push <app/component.wick> --tag=latest

This command pushes your Wick application or component (specified by <app/component.wick>) to the registry, tagging it as the latest version.

Running a Package

Once the package is pushed, you can run it anywhere using the following command:

wick run registry.candle.dev/wick/my-app:0.1.0

Package Types

All wick apps, components, and types can be indepenently packaged and pushed to the registry. This allows for easy sharing and reusability of any and all parts of a wick application or component.

Import Types

A common use case for packaging types is to import them into other wick applications or components. This allows you to share types across multiple applications and components, ensuring consistency and reducing the need for duplicate code. You may frequently use the http type. Here is an example of using the http type in a wick application:

---
name: 'my-component'
kind: wick/component@v1
metadata:
  version: '0.0.1'
  ...
import:
  - name: http
    component:
      kind: wick/component/types@v1
      ref: registry.candle.dev/types/http:0.4.0 # <-- import the http type
  ...
component:
  kind: wick/component/wasmrs@v1
  ref: build/component.signed.wasm
  operations:
    - name: my_operation
      inputs:
        - name: request
          type: http::HttpRequest # <-- using the imported type

Contents of a Package

  • The package will contain any *.wick files that are directly referenced by your parent file.
  • Additionally, the package contains a tar of all the external files that are referenced in your package.files configuration.
  • Finally, the package will contain your compiled WebAssembly binary if you are using the wick/component/wasmrs@v1 component. Your source code is not included in the package by default and we recommend that you do not include it. If you wish to make your source code public, you can add it to any public git repository and reference the link to it in your app/component metadata section.

Examples

You will find many examples of package and component configurations in the Wick Components repository.

Last updated on 24 Aug 2023
Published on 24 Aug 2023