# pulumi-incus ## nodejs ```bash sops exec-env secrets.sops.env 'earthly --secret TOKEN=$TOKEN --push -i +nodejs' ``` ## provider ```bash sops exec-env secrets.sops.env 'earthly --secret TOKEN=$TOKEN --push -i +provider' ``` ## provider publish (version) > publish the provider to gitea host. Include version number without v prefix ```bash #===================================================================== # upload_tarballs # # Upload every *.tar.gz file that contains a given version string from # ./bin/ to a Gitea generic‑package repository. # # Authentication is taken from the default ~/.netrc file (via --netrc). # # Call signature (simplified): # upload_tarballs # # – username and package in the form "user/pkg" # – version string to match (required) # # Host resolution: # * If $GITEA_HOST is set, it is used. # * Otherwise the built‑in default https://gitea.example.com is used. # # Example: # export GITEA_HOST="https://gitea.example.com" # upload_tarballs alice/my_pkg 2.5.0 #===================================================================== upload_tarballs() { # ----------------------------------------------------------------- # 1️⃣ Argument handling and defaults # ----------------------------------------------------------------- local user_pkg="${1:?Missing argument}" local version="${2:?Missing argument}" # Extract username & generic‑package from the "user/pkg" argument if [[ "$user_pkg" != */* ]]; then echo "ERROR: must be in the form 'username/package'" >&2 return 1 fi local username="${user_pkg%%/*}" local package="${user_pkg##*/}" # Sanity checks [[ -n "$username" && -n "$package" ]] || { echo "ERROR: Could not parse username or package from '$user_pkg'" >&2 return 1 } # ----------------------------------------------------------------- # 2️⃣ Find matching tarballs and upload them # ----------------------------------------------------------------- local files_found=0 # The while‑loop runs in the current shell (process substitution) so # the counter is visible after the loop finishes. while IFS= read -r -d '' file; do files_found=$((files_found + 1)) local filename filename="$(basename "$file")" # Build the Gitea API URL: # https://HOST/api/packages/USERNAME/generic/PACKAGE/VERSION/FILE local url="https://git.kalinow.ski/api/packages/${username}/generic/${package}/${version}/${filename}" echo "Uploading $url" curl --silent --show-error --fail --netrc --upload-file "$file" "$url" local rc=$? if (( rc != 0 )); then echo "❌ Upload failed for $file (curl exit code $rc)" >&2 else echo "✅ Uploaded $filename" fi done < <(find ./bin -type f -name "*${version}*.tar.gz" -print0) # ----------------------------------------------------------------- # 4️⃣ Final report # ----------------------------------------------------------------- if (( files_found == 0 )); then echo "⚠️ No *.tar.gz files containing version '${version}' were found in ./bin/." return 1 else echo "✅ Done – $files_found file(s) processed." fi } upload_tarballs kiterun/pulumi-incus $version ``` ## sdk publish ``` cd sdk/nodejs && pnpm publish bin ```