/*************************************************************************************************** * Copyright (c) Red Hat, Inc. All rights reserved. * Licensed under the MIT License. See LICENSE file in the project root for license information. **************************************************************************************************/ import * as ini from "ini"; import { promises as fs } from "fs"; import * as core from "@actions/core"; import * as path from "path"; import * as io from "@actions/io"; import * as os from "os"; async function findStorageDriver(filePaths: string[]): Promise { let storageDriver = ""; for (const filePath of filePaths) { core.debug(`Checking if the storage file exists at ${filePath}`); if (await fileExists(filePath)) { core.debug(`Storage file exists at ${filePath}`); const fileContent = ini.parse(await fs.readFile(filePath, "utf-8")); if (fileContent.storage.driver) { storageDriver = fileContent.storage.driver; } } } return storageDriver; } export async function isStorageDriverOverlay(): Promise { let xdgConfigHome = path.join(os.homedir(), ".config"); if (process.env.XDG_CONFIG_HOME) { xdgConfigHome = process.env.XDG_CONFIG_HOME; } const filePaths: string[] = [ "/etc/containers/storage.conf", path.join(xdgConfigHome, "containers/storage.conf"), ]; const storageDriver = await findStorageDriver(filePaths); return (storageDriver === "overlay"); } async function fileExists(filePath: string): Promise { try { await fs.access(filePath); return true; } catch (err) { return false; } } export async function findFuseOverlayfsPath(): Promise { let fuseOverlayfsPath; try { fuseOverlayfsPath = await io.which("fuse-overlayfs"); } catch (err) { core.debug(err); } return fuseOverlayfsPath; } export function splitByNewline(s: string): string[] { return s.split(/\r?\n/); } export function isFullImageName(image: string): boolean { return image.indexOf(":") > 0; } export function getFullImageName(image: string, tag: string): string { if (isFullImageName(tag)) { return tag; } return `${image}:${tag}`; } const DOCKER_IO = `docker.io`; const DOCKER_IO_NAMESPACED = DOCKER_IO + `/library`; export function getFullDockerImageName(image: string): string { switch (image.split("/").length) { case 1: return `${DOCKER_IO_NAMESPACED}/${image}`; case 2: if (image.includes("amazonaws.com")) return image; return `${DOCKER_IO}/${image}`; default: return image; } }