A convenient CLI tool to quickly spin up DragonflyBSD virtual machines using QEMU with sensible defaults.

Merge pull request #7 from tsirysndr/feat/docker-io-default-registry

feat: add default registry to image repository and enhance flag merging logic

authored by tsiry-sandratraina.com and committed by

GitHub bd09a77b 212a9efd

+26 -8
+19 -5
src/oras.ts
··· 149 149 }), 150 150 }); 151 151 152 + // add docker.io/ if no registry is specified 153 + const formatRepository = (repository: string) => 154 + repository.match(/^[^\/]+\.[^\/]+\/.*/i) 155 + ? repository 156 + : `docker.io/${repository}`; 157 + 152 158 const pushToRegistry = ( 153 159 img: { repository: string; tag: string; path: string }, 154 160 ) => 155 161 Effect.tryPromise({ 156 162 try: async () => { 157 - console.log(`Pushing image ${img.repository}...`); 163 + console.log(`Pushing image ${formatRepository(img.repository)}...`); 158 164 const process = new Deno.Command("oras", { 159 165 args: [ 160 166 "push", 161 - `${img.repository}:${img.tag}-amd64`, 167 + `${formatRepository(img.repository)}:${img.tag}-amd64`, 162 168 "--artifact-type", 163 169 "application/vnd.oci.image.layer.v1.tar", 164 170 "--annotation", ··· 218 224 Effect.tryPromise({ 219 225 try: async () => { 220 226 console.log(`Pulling image ${image}`); 227 + const repository = image.split(":")[0]; 228 + const tag = image.split(":")[1] || "latest"; 229 + console.log("pull", `${formatRepository(repository)}:${tag}-amd64`); 230 + 221 231 const process = new Deno.Command("oras", { 222 232 args: [ 223 233 "pull", 224 - `${image}-amd64`, 234 + `${formatRepository(repository)}:${tag}-amd64`, 225 235 ], 226 236 stdin: "inherit", 227 237 stdout: "inherit", ··· 244 254 export const getImageArchivePath = (image: string) => 245 255 Effect.tryPromise({ 246 256 try: async () => { 257 + const repository = image.split(":")[0]; 258 + const tag = image.split(":")[1] || "latest"; 247 259 const process = new Deno.Command("oras", { 248 260 args: [ 249 261 "manifest", 250 262 "fetch", 251 - `${image}-amd64`, 263 + `${formatRepository(repository)}:${tag}-amd64`, 252 264 ], 253 265 stdout: "piped", 254 266 stderr: "inherit", ··· 293 305 const getImageDigest = (image: string) => 294 306 Effect.tryPromise({ 295 307 try: async () => { 308 + const repository = image.split(":")[0]; 309 + const tag = image.split(":")[1] || "latest"; 296 310 const process = new Deno.Command("oras", { 297 311 args: [ 298 312 "manifest", 299 313 "fetch", 300 - `${image}-amd64`, 314 + `${formatRepository(repository)}:${tag}-amd64`, 301 315 ], 302 316 stdout: "piped", 303 317 stderr: "inherit",
+7 -3
src/subcommands/run.ts
··· 84 84 function mergeFlags(image: Image): Options { 85 85 const { flags } = parseFlags(Deno.args); 86 86 return { 87 - cpu: (flags.cpu || flags.c) ? (flags.cpu || flags.c) : "host", 88 - cpus: (flags.cpus || flags.C) ? (flags.cpus || flags.C) : 2, 87 + cpu: (flags.cpu || flags.c) 88 + ? (flags.cpu || flags.c) 89 + : Deno.build.arch === "aarch64" 90 + ? "max" 91 + : "host", 92 + cpus: (flags.cpus || flags.C) ? (flags.cpus || flags.C) : 4, 89 93 memory: (flags.memory || flags.m) ? (flags.memory || flags.m) : "2G", 90 94 image: image.path, 91 95 bridge: flags.bridge || flags.b, ··· 94 98 install: false, 95 99 diskFormat: image.format, 96 100 volume: flags.volume || flags.v, 97 - size: flags.size || flags.s, 101 + size: flags.size || flags.s || "20G", 98 102 }; 99 103 }