Skip to main content
Documentation
Preview
You're viewing the Next docs — a rolling preview of in-development changes. The current release docs may differ.

Publish a Package Version

Publish a release with multiple files using Nexigon CLI. You will create a package version, upload its assets, attach them under their download filenames, and add a release tag after checking the contents.

A repository stores files as assets. A package groups related releases, and a package version attaches the files for one release. See Repositories for the resource model.

Before You Start

You need Nexigon CLI installed and configured, a repository with working S3 storage, and permission to manage its assets, packages, and versions.

This example publishes application-amd64.tar.gz and application-arm64.tar.gz to my-repo/application. Replace those names with your repository, package, and files.

Run the examples in the same Bash shell, from the directory containing the files and the downloaded nexigon-cli binary. The examples use jq to extract IDs from JSON responses.

For Rugix system images, use the Rugix release workflow. It supplies the image-version metadata and system-specific bundle filenames required by that update integration.

Create the Package

Create a package once:

./nexigon-cli repositories packages create my-repo application

If it already exists, use that package. Inspect it with:

./nexigon-cli repositories packages info my-repo/application

Create a Version

Create the version without a public release tag so consumers do not resolve it before its files are attached:

set -euo pipefail

version_json=$(./nexigon-cli repositories versions create my-repo/application \
  --name "Release 2.0.0" \
  --metadata '{"gitCommit": "abc1234"}')
version_id=$(printf '%s\n' "$version_json" | jq -er '.versionId')
printf 'Version ID: %s\n' "$version_id"

The response contains result: "Created" and versionId. The display name does not create a tag. Use the returned ID for subsequent commands so they continue to address this version even if a tag changes.

The optional --metadata argument accepts a JSON object. Use your release’s actual metadata or omit it.

Upload and Attach the Assets

Upload each file, read its assetId, then attach it to the version:

for file in application-amd64.tar.gz application-arm64.tar.gz; do
  asset_json=$(./nexigon-cli repositories assets upload my-repo "$file")
  asset_id=$(printf '%s\n' "$asset_json" | jq -er '.assetId')
  ./nexigon-cli repositories versions assets add "$version_id" "$asset_id" "$file"
done

An upload response has result: "Created" or result: "AssetAlreadyExists"; both include assetId. Existing content can be reused within the repository.

Uploading stores the bytes. Attaching gives the asset a filename in this version. The final argument to versions assets add is that download filename; it must be unique within the version. Repeat the upload and attachment steps for other files, such as release notes or a software bill of materials.

Check the Contents and Publish a Tag

Inspect the version and confirm that both filenames are present:

./nexigon-cli repositories versions info "$version_id"

Then add a locked release tag and resolve it back to the version:

./nexigon-cli repositories versions tag "$version_id" --tag v2.0.0,locked
./nexigon-cli repositories versions info my-repo/application/v2.0.0

The locked tag keeps v2.0.0 assigned to this version. Locking a tag does not seal the version’s contents; see Sealed Versions for content protection.

Verify a Download

Request a download URL for one of the attached files:

download_json=$(./nexigon-cli repositories issue-url \
  my-repo/application/v2.0.0/application-arm64.tar.gz)
download_url=$(printf '%s\n' "$download_json" | jq -er '.url')
curl --fail --location "$download_url" --output downloaded-application-arm64.tar.gz
cmp application-arm64.tar.gz downloaded-application-arm64.tar.gz

A successful cmp produces no output and exits with status zero.

issue-url returns a temporary storage URL that authorizes the download. Keep the repository asset path as the durable reference and request a new URL when you need another download after the previous URL expires.

Promote a Channel or Resume a Publish

To move a floating channel tag to this version:

./nexigon-cli repositories versions tag "$version_id" --tag stable,reassign

A device or client following stable resolves the new version after this command. A locked tag cannot be reassigned.

If publication stops before tagging, inspect the saved version ID and attach any missing files before retrying the tag command. Running versions create again creates another version.

For private device downloads, link the repository to the device’s project under Project Settings → Repositories. Continue with Application Workloads or Deploy System Updates for deployment.