remove old build artifacts
This commit is contained in:
-27
@@ -1,27 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
|
||||||
exports.getContainerRegistryURL = exports.getRepositoryMetadata = void 0;
|
|
||||||
async function getRepositoryMetadata(repository, token) {
|
|
||||||
const response = await fetch(`${process.env.GITHUB_API_URL}/repos/${repository}`);
|
|
||||||
if (!response.ok) {
|
|
||||||
throw new Error(`Failed to fetch repository metadata: ${response.statusText}`);
|
|
||||||
}
|
|
||||||
const data = await response.json();
|
|
||||||
// Check that the response contains the expected data
|
|
||||||
if (!data.id || !data.owner.id) {
|
|
||||||
throw new Error(`Failed to fetch repository metadata: ${JSON.stringify(data)}`);
|
|
||||||
}
|
|
||||||
return { repoId: data.id, ownerId: data.owner.id };
|
|
||||||
}
|
|
||||||
exports.getRepositoryMetadata = getRepositoryMetadata;
|
|
||||||
async function getContainerRegistryURL() {
|
|
||||||
const response = await fetch(`${process.env.GITHUB_API_URL}/packages/container-registry-url`);
|
|
||||||
if (!response.ok) {
|
|
||||||
throw new Error(`Failed to fetch status page: ${response.statusText}`);
|
|
||||||
}
|
|
||||||
const data = await response.json();
|
|
||||||
const registryURL = new URL(data.url);
|
|
||||||
return registryURL;
|
|
||||||
}
|
|
||||||
exports.getContainerRegistryURL = getContainerRegistryURL;
|
|
||||||
//# sourceMappingURL=api-client.js.map
|
|
||||||
-1
@@ -1 +0,0 @@
|
|||||||
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":";;;AAGO,KAAK,UAAU,qBAAqB,CAAC,UAAkB,EAAE,KAAa;IACzE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,UAAU,UAAU,EAAE,CACpD,CAAA;IAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,wCAAwC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAA;IAChF,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;IAElC,qDAAqD;IACrD,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,wCAAwC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACjF,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAA;AACpD,CAAC;AAjBH,sDAiBG;AAEM,KAAK,UAAU,uBAAuB;IAC3C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,kCAAkC,CAChE,CAAA;IACD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,gCAAgC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAA;IACxE,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;IAClC,MAAM,WAAW,GAAQ,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC1C,OAAO,WAAW,CAAA;AACpB,CAAC;AAVD,0DAUC"}
|
|
||||||
-146
@@ -1,146 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
||||||
if (k2 === undefined) k2 = k;
|
|
||||||
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
||||||
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
||||||
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
||||||
}
|
|
||||||
Object.defineProperty(o, k2, desc);
|
|
||||||
}) : (function(o, m, k, k2) {
|
|
||||||
if (k2 === undefined) k2 = k;
|
|
||||||
o[k2] = m[k];
|
|
||||||
}));
|
|
||||||
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
||||||
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
||||||
}) : function(o, v) {
|
|
||||||
o["default"] = v;
|
|
||||||
});
|
|
||||||
var __importStar = (this && this.__importStar) || function (mod) {
|
|
||||||
if (mod && mod.__esModule) return mod;
|
|
||||||
var result = {};
|
|
||||||
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
||||||
__setModuleDefault(result, mod);
|
|
||||||
return result;
|
|
||||||
};
|
|
||||||
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
||||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
||||||
};
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
|
||||||
exports.stageActionFiles = exports.readFileContents = exports.isDirectory = exports.createArchives = exports.removeDir = exports.createTempDir = void 0;
|
|
||||||
const fs = __importStar(require("fs"));
|
|
||||||
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
||||||
const path = __importStar(require("path"));
|
|
||||||
const tar = __importStar(require("tar"));
|
|
||||||
const archiver = __importStar(require("archiver"));
|
|
||||||
const crypto = __importStar(require("crypto"));
|
|
||||||
const os = __importStar(require("os"));
|
|
||||||
function createTempDir() {
|
|
||||||
const randomDirName = crypto.randomBytes(4).toString('hex');
|
|
||||||
const tempDir = path.join(os.tmpdir(), randomDirName);
|
|
||||||
if (!fs.existsSync(tempDir)) {
|
|
||||||
fs.mkdirSync(tempDir);
|
|
||||||
}
|
|
||||||
return tempDir;
|
|
||||||
}
|
|
||||||
exports.createTempDir = createTempDir;
|
|
||||||
function removeDir(dir) {
|
|
||||||
if (fs.existsSync(dir)) {
|
|
||||||
fs.rmSync(dir, { recursive: true });
|
|
||||||
}
|
|
||||||
}
|
|
||||||
exports.removeDir = removeDir;
|
|
||||||
// Creates both a tar.gz and zip archive of the given directory and returns the paths to both archives (stored in the provided target directory)
|
|
||||||
// as well as the size/sha256 hash of each file.
|
|
||||||
async function createArchives(distPath, archiveTargetPath = createTempDir()) {
|
|
||||||
const zipPath = path.join(archiveTargetPath, `archive.zip`);
|
|
||||||
const tarPath = path.join(archiveTargetPath, `archive.tar.gz`);
|
|
||||||
const createZipPromise = new Promise((resolve, reject) => {
|
|
||||||
const output = fs.createWriteStream(zipPath);
|
|
||||||
const archive = archiver.create('zip');
|
|
||||||
output.on('error', (err) => {
|
|
||||||
reject(err);
|
|
||||||
});
|
|
||||||
archive.on('error', (err) => {
|
|
||||||
reject(err);
|
|
||||||
});
|
|
||||||
output.on('close', () => {
|
|
||||||
resolve(fileMetadata(zipPath));
|
|
||||||
});
|
|
||||||
archive.pipe(output);
|
|
||||||
archive.directory(distPath, false); // TODO: make sure this doesn't include dirs that start with ., same with below
|
|
||||||
archive.finalize();
|
|
||||||
});
|
|
||||||
const createTarPromise = new Promise((resolve, reject) => {
|
|
||||||
tar
|
|
||||||
.c({
|
|
||||||
file: tarPath,
|
|
||||||
C: distPath, // Change to the source directory for relative paths (TODO)
|
|
||||||
gzip: true
|
|
||||||
}, ['.'])
|
|
||||||
// eslint-disable-next-line github/no-then
|
|
||||||
.catch(err => {
|
|
||||||
reject(err);
|
|
||||||
})
|
|
||||||
// eslint-disable-next-line github/no-then
|
|
||||||
.then(() => {
|
|
||||||
resolve(fileMetadata(tarPath));
|
|
||||||
});
|
|
||||||
});
|
|
||||||
const [zipFile, tarFile] = await Promise.all([
|
|
||||||
createZipPromise,
|
|
||||||
createTarPromise
|
|
||||||
]);
|
|
||||||
return { zipFile, tarFile };
|
|
||||||
}
|
|
||||||
exports.createArchives = createArchives;
|
|
||||||
function isDirectory(dirPath) {
|
|
||||||
return fs.existsSync(dirPath) && fs.lstatSync(dirPath).isDirectory();
|
|
||||||
}
|
|
||||||
exports.isDirectory = isDirectory;
|
|
||||||
function readFileContents(filePath) {
|
|
||||||
return fs.readFileSync(filePath);
|
|
||||||
}
|
|
||||||
exports.readFileContents = readFileContents;
|
|
||||||
// Copy actions files from sourceDir to targetDir, excluding files and folders not relevant to the action
|
|
||||||
// Errors if the repo appears to not contain any action files, such as an action.yml file
|
|
||||||
function stageActionFiles(actionDir, targetDir) {
|
|
||||||
var actionYmlFound = false;
|
|
||||||
fs_extra_1.default.copySync(actionDir, targetDir, {
|
|
||||||
filter: (src, dest) => {
|
|
||||||
const basename = path.basename(src);
|
|
||||||
if (basename === 'action.yml' || basename === 'action.yaml') {
|
|
||||||
actionYmlFound = true;
|
|
||||||
}
|
|
||||||
// Filter out hidden folers like .git and .github
|
|
||||||
return !basename.startsWith('.');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
if (!actionYmlFound) {
|
|
||||||
throw new Error(`No action.yml or action.yaml file found in source repository`);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
exports.stageActionFiles = stageActionFiles;
|
|
||||||
// Converts a file path to a filemetadata object by querying the fs for relevant metadata.
|
|
||||||
async function fileMetadata(filePath) {
|
|
||||||
const stats = fs.statSync(filePath);
|
|
||||||
const size = stats.size;
|
|
||||||
const hash = crypto.createHash('sha256');
|
|
||||||
const fileStream = fs.createReadStream(filePath);
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
fileStream.on('data', data => {
|
|
||||||
hash.update(data);
|
|
||||||
});
|
|
||||||
fileStream.on('end', () => {
|
|
||||||
const sha256 = hash.digest('hex');
|
|
||||||
resolve({
|
|
||||||
path: filePath,
|
|
||||||
size,
|
|
||||||
sha256: `sha256:${sha256}`
|
|
||||||
});
|
|
||||||
});
|
|
||||||
fileStream.on('error', err => {
|
|
||||||
reject(err);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
//# sourceMappingURL=fs-helper.js.map
|
|
||||||
-1
@@ -1 +0,0 @@
|
|||||||
{"version":3,"file":"fs-helper.js","sourceRoot":"","sources":["../src/fs-helper.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAwB;AACxB,wDAA8B;AAC9B,2CAA4B;AAC5B,yCAA0B;AAC1B,mDAAoC;AACpC,+CAAgC;AAChC,uCAAwB;AAExB,SAAgB,aAAa;IAC3B,MAAM,aAAa,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC3D,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,aAAa,CAAC,CAAA;IAErD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;IACvB,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC;AATD,sCASC;AAED,SAAgB,SAAS,CAAC,GAAW;IACnC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACrC,CAAC;AACH,CAAC;AAJD,8BAIC;AAQD,gJAAgJ;AAChJ,gDAAgD;AACzC,KAAK,UAAU,cAAc,CAClC,QAAgB,EAChB,oBAA4B,aAAa,EAAE;IAE3C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,aAAa,CAAC,CAAA;IAC3D,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,CAAA;IAE9D,MAAM,gBAAgB,GAAG,IAAI,OAAO,CAAe,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrE,MAAM,MAAM,GAAG,EAAE,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAA;QAC5C,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAEtC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAU,EAAE,EAAE;YAChC,MAAM,CAAC,GAAG,CAAC,CAAA;QACb,CAAC,CAAC,CAAA;QAEF,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAU,EAAE,EAAE;YACjC,MAAM,CAAC,GAAG,CAAC,CAAA;QACb,CAAC,CAAC,CAAA;QAEF,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACtB,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAA;QAChC,CAAC,CAAC,CAAA;QAEF,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACpB,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA,CAAC,+EAA+E;QAClH,OAAO,CAAC,QAAQ,EAAE,CAAA;IACpB,CAAC,CAAC,CAAA;IAEF,MAAM,gBAAgB,GAAG,IAAI,OAAO,CAAe,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrE,GAAG;aACA,CAAC,CACA;YACE,IAAI,EAAE,OAAO;YACb,CAAC,EAAE,QAAQ,EAAE,2DAA2D;YACxE,IAAI,EAAE,IAAI;SACX,EACD,CAAC,GAAG,CAAC,CACN;YACD,0CAA0C;aACzC,KAAK,CAAC,GAAG,CAAC,EAAE;YACX,MAAM,CAAC,GAAG,CAAC,CAAA;QACb,CAAC,CAAC;YACF,0CAA0C;aACzC,IAAI,CAAC,GAAG,EAAE;YACT,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAA;QAChC,CAAC,CAAC,CAAA;IACN,CAAC,CAAC,CAAA;IAEF,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC3C,gBAAgB;QAChB,gBAAgB;KACjB,CAAC,CAAA;IAEF,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAA;AAC7B,CAAC;AAtDD,wCAsDC;AAED,SAAgB,WAAW,CAAC,OAAe;IACzC,OAAO,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAA;AACtE,CAAC;AAFD,kCAEC;AAED,SAAgB,gBAAgB,CAAC,QAAgB;IAC/C,OAAO,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAA;AAClC,CAAC;AAFD,4CAEC;AAED,yGAAyG;AACzG,yFAAyF;AACzF,SAAgB,gBAAgB,CAAC,SAAiB,EAAE,SAAiB;IACnE,IAAI,cAAc,GAAG,KAAK,CAAA;IAE1B,kBAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,SAAS,EAAE;QACrC,MAAM,EAAE,CAAC,GAAW,EAAE,IAAY,EAAE,EAAE;YACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;YAEnC,IAAI,QAAQ,KAAK,YAAY,IAAI,QAAQ,KAAK,aAAa,EAAE,CAAC;gBAC5D,cAAc,GAAG,IAAI,CAAA;YACvB,CAAC;YAED,iDAAiD;YACjD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;QAClC,CAAC;KACF,CAAC,CAAA;IAEF,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CACb,8DAA8D,CAC/D,CAAA;IACH,CAAC;AACH,CAAC;AArBD,4CAqBC;AAED,0FAA0F;AAC1F,KAAK,UAAU,YAAY,CAAC,QAAgB;IAC1C,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;IACnC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAA;IACvB,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAA;IACxC,MAAM,UAAU,GAAG,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAA;IAChD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE;YAC3B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QACnB,CAAC,CAAC,CAAA;QACF,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;YACxB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YACjC,OAAO,CAAC;gBACN,IAAI,EAAE,QAAQ;gBACd,IAAI;gBACJ,MAAM,EAAE,UAAU,MAAM,EAAE;aAC3B,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QACF,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE;YAC3B,MAAM,CAAC,GAAG,CAAC,CAAA;QACb,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC"}
|
|
||||||
-154
@@ -1,154 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
||||||
if (k2 === undefined) k2 = k;
|
|
||||||
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
||||||
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
||||||
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
||||||
}
|
|
||||||
Object.defineProperty(o, k2, desc);
|
|
||||||
}) : (function(o, m, k, k2) {
|
|
||||||
if (k2 === undefined) k2 = k;
|
|
||||||
o[k2] = m[k];
|
|
||||||
}));
|
|
||||||
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
||||||
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
||||||
}) : function(o, v) {
|
|
||||||
o["default"] = v;
|
|
||||||
});
|
|
||||||
var __importStar = (this && this.__importStar) || function (mod) {
|
|
||||||
if (mod && mod.__esModule) return mod;
|
|
||||||
var result = {};
|
|
||||||
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
||||||
__setModuleDefault(result, mod);
|
|
||||||
return result;
|
|
||||||
};
|
|
||||||
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
||||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
||||||
};
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
|
||||||
exports.publishOCIArtifact = void 0;
|
|
||||||
const core = __importStar(require("@actions/core"));
|
|
||||||
const axios_1 = __importDefault(require("axios"));
|
|
||||||
const fsHelper = __importStar(require("./fs-helper"));
|
|
||||||
const axios_debug_log_1 = __importDefault(require("axios-debug-log"));
|
|
||||||
// Publish the OCI artifact and return the URL where it can be downloaded
|
|
||||||
async function publishOCIArtifact(token, registry, repository, semver, zipFile, tarFile, manifest, debugRequests = false) {
|
|
||||||
if (debugRequests) {
|
|
||||||
configureRequestDebugLogging();
|
|
||||||
}
|
|
||||||
const b64Token = Buffer.from(token).toString('base64');
|
|
||||||
const checkBlobEndpoint = new URL(`v2/${repository}/blobs/`, registry).toString();
|
|
||||||
const uploadBlobEndpoint = new URL(`v2/${repository}/blobs/uploads/`, registry).toString();
|
|
||||||
const manifestEndpoint = new URL(`v2/${repository}/manifests/${semver}`, registry).toString();
|
|
||||||
core.info(`Creating GHCR package for release with semver:${semver} with path:"${zipFile.path}" and "${tarFile.path}".`);
|
|
||||||
const layerUploads = manifest.layers.map(async (layer) => {
|
|
||||||
switch (layer.mediaType) {
|
|
||||||
case 'application/vnd.github.actions.package.layer.v1.tar+gzip':
|
|
||||||
return uploadLayer(layer, tarFile, registry, checkBlobEndpoint, uploadBlobEndpoint, b64Token);
|
|
||||||
case 'application/vnd.github.actions.package.layer.v1.zip':
|
|
||||||
return uploadLayer(layer, zipFile, registry, checkBlobEndpoint, uploadBlobEndpoint, b64Token);
|
|
||||||
case 'application/vnd.github.actions.package.config.v1+json':
|
|
||||||
return uploadLayer(layer, { path: '', size: 0, sha256: layer.digest }, registry, checkBlobEndpoint, uploadBlobEndpoint, b64Token);
|
|
||||||
default:
|
|
||||||
throw new Error(`Unknown media type ${layer.mediaType}`);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
await Promise.all(layerUploads);
|
|
||||||
const digest = await uploadManifest(JSON.stringify(manifest), manifestEndpoint, b64Token);
|
|
||||||
return { packageURL: new URL(`${repository}:${semver}`, registry), manifestDigest: digest };
|
|
||||||
}
|
|
||||||
exports.publishOCIArtifact = publishOCIArtifact;
|
|
||||||
async function uploadLayer(layer, file, registryURL, checkBlobEndpoint, uploadBlobEndpoint, b64Token) {
|
|
||||||
const checkExistsResponse = await axios_1.default.head(checkBlobEndpoint + layer.digest, {
|
|
||||||
headers: {
|
|
||||||
Authorization: `Bearer ${b64Token}`
|
|
||||||
},
|
|
||||||
validateStatus: () => {
|
|
||||||
return true; // Allow non 2xx responses
|
|
||||||
}
|
|
||||||
});
|
|
||||||
if (checkExistsResponse.status === 200 ||
|
|
||||||
checkExistsResponse.status === 202) {
|
|
||||||
core.info(`Layer ${layer.digest} already exists. Skipping upload.`);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (checkExistsResponse.status !== 404) {
|
|
||||||
throw new Error(`Unexpected response from blob check for layer ${layer.digest}: ${checkExistsResponse.status} ${checkExistsResponse.statusText}`);
|
|
||||||
}
|
|
||||||
core.info(`Uploading layer ${layer.digest}.`);
|
|
||||||
const initiateUploadResponse = await axios_1.default.post(uploadBlobEndpoint, layer, {
|
|
||||||
headers: {
|
|
||||||
Authorization: `Bearer ${b64Token}`
|
|
||||||
},
|
|
||||||
validateStatus: () => {
|
|
||||||
return true; // Allow non 2xx responses
|
|
||||||
}
|
|
||||||
});
|
|
||||||
if (initiateUploadResponse.status !== 202) {
|
|
||||||
core.error(`Unexpected response from upload post ${uploadBlobEndpoint}: ${initiateUploadResponse.status}`);
|
|
||||||
throw new Error(`Unexpected response from POST upload ${initiateUploadResponse.status}`);
|
|
||||||
}
|
|
||||||
const locationResponseHeader = initiateUploadResponse.headers['location'];
|
|
||||||
if (locationResponseHeader === undefined) {
|
|
||||||
throw new Error(`No location header in response from upload post ${uploadBlobEndpoint} for layer ${layer.digest}`);
|
|
||||||
}
|
|
||||||
const pathname = `${locationResponseHeader}?digest=${layer.digest}`;
|
|
||||||
const uploadBlobUrl = new URL(pathname, registryURL).toString();
|
|
||||||
// TODO: must we handle the empty config layer? Maybe we can just skip calling this at all
|
|
||||||
let data;
|
|
||||||
if (file.size === 0) {
|
|
||||||
data = Buffer.alloc(0);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
data = fsHelper.readFileContents(file.path);
|
|
||||||
}
|
|
||||||
const putResponse = await axios_1.default.put(uploadBlobUrl, data, {
|
|
||||||
headers: {
|
|
||||||
Authorization: `Bearer ${b64Token}`,
|
|
||||||
'Content-Type': 'application/octet-stream',
|
|
||||||
'Accept-Encoding': 'gzip', // TODO: What about for the config layer?
|
|
||||||
'Content-Length': layer.size.toString()
|
|
||||||
},
|
|
||||||
validateStatus: () => {
|
|
||||||
return true; // Allow non 2xx responses
|
|
||||||
}
|
|
||||||
});
|
|
||||||
if (putResponse.status !== 201) {
|
|
||||||
throw new Error(`Unexpected response from PUT upload ${putResponse.status} for layer ${layer.digest}`);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Uploads the manifest and returns the digest returned by GHCR
|
|
||||||
async function uploadManifest(manifestJSON, manifestEndpoint, b64Token) {
|
|
||||||
core.info(`Uploading manifest to ${manifestEndpoint}.`);
|
|
||||||
const putResponse = await axios_1.default.put(manifestEndpoint, manifestJSON, {
|
|
||||||
headers: {
|
|
||||||
Authorization: `Bearer ${b64Token}`,
|
|
||||||
'Content-Type': 'application/vnd.oci.image.manifest.v1+json'
|
|
||||||
},
|
|
||||||
validateStatus: () => {
|
|
||||||
return true; // Allow non 2xx responses
|
|
||||||
}
|
|
||||||
});
|
|
||||||
if (putResponse.status !== 201) {
|
|
||||||
throw new Error(`Unexpected response from PUT manifest ${putResponse.status}`);
|
|
||||||
}
|
|
||||||
const digestResponseHeader = putResponse.headers['Docker-Content-Digest'];
|
|
||||||
if (digestResponseHeader === undefined) {
|
|
||||||
throw new Error(`No digest header in response from PUT manifest ${manifestEndpoint}`);
|
|
||||||
}
|
|
||||||
return digestResponseHeader;
|
|
||||||
}
|
|
||||||
function configureRequestDebugLogging() {
|
|
||||||
(0, axios_debug_log_1.default)({
|
|
||||||
request: (debug, config) => {
|
|
||||||
core.debug(`Request with ${config}`);
|
|
||||||
},
|
|
||||||
response: (debug, response) => {
|
|
||||||
core.debug(`Response with ${response}`);
|
|
||||||
},
|
|
||||||
error: (debug, error) => {
|
|
||||||
core.debug(`Error with ${error}`);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
//# sourceMappingURL=ghcr-client.js.map
|
|
||||||
-1
@@ -1 +0,0 @@
|
|||||||
{"version":3,"file":"ghcr-client.js","sourceRoot":"","sources":["../src/ghcr-client.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,oDAAqC;AAGrC,kDAAyB;AACzB,sDAAuC;AACvC,sEAA2C;AAE3C,yEAAyE;AAClE,KAAK,UAAU,kBAAkB,CACtC,KAAa,EACb,QAAa,EACb,UAAkB,EAClB,MAAc,EACd,OAAqB,EACrB,OAAqB,EACrB,QAA+B,EAC/B,aAAa,GAAG,KAAK;IAErB,IAAI,aAAa,EAAE,CAAC;QAClB,4BAA4B,EAAE,CAAA;IAChC,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;IAEtD,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAC/B,MAAM,UAAU,SAAS,EACzB,QAAQ,CACT,CAAC,QAAQ,EAAE,CAAA;IACZ,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAChC,MAAM,UAAU,iBAAiB,EACjC,QAAQ,CACT,CAAC,QAAQ,EAAE,CAAA;IACZ,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAC9B,MAAM,UAAU,cAAc,MAAM,EAAE,EACtC,QAAQ,CACT,CAAC,QAAQ,EAAE,CAAA;IAEZ,IAAI,CAAC,IAAI,CACP,iDAAiD,MAAM,eAAe,OAAO,CAAC,IAAI,UAAU,OAAO,CAAC,IAAI,IAAI,CAC7G,CAAA;IAED,MAAM,YAAY,GAAoB,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAC,KAAK,EAAC,EAAE;QACtE,QAAQ,KAAK,CAAC,SAAS,EAAE,CAAC;YACxB,KAAK,0DAA0D;gBAC7D,OAAO,WAAW,CAChB,KAAK,EACL,OAAO,EACP,QAAQ,EACR,iBAAiB,EACjB,kBAAkB,EAClB,QAAQ,CACT,CAAA;YACH,KAAK,qDAAqD;gBACxD,OAAO,WAAW,CAChB,KAAK,EACL,OAAO,EACP,QAAQ,EACR,iBAAiB,EACjB,kBAAkB,EAClB,QAAQ,CACT,CAAA;YACH,KAAK,uDAAuD;gBAC1D,OAAO,WAAW,CAChB,KAAK,EACL,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,EAC3C,QAAQ,EACR,iBAAiB,EACjB,kBAAkB,EAClB,QAAQ,CACT,CAAA;YACH;gBACE,MAAM,IAAI,KAAK,CAAC,sBAAsB,KAAK,CAAC,SAAS,EAAE,CAAC,CAAA;QAC5D,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,MAAM,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;IAE/B,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,gBAAgB,EAAE,QAAQ,CAAC,CAAA;IAEzF,OAAO,EAAE,UAAU,EAAE,IAAI,GAAG,CAAC,GAAG,UAAU,IAAI,MAAM,EAAE,EAAE,QAAQ,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,CAAA;AAC7F,CAAC;AAxED,gDAwEC;AAED,KAAK,UAAU,WAAW,CACxB,KAAyB,EACzB,IAAkB,EAClB,WAAgB,EAChB,iBAAyB,EACzB,kBAA0B,EAC1B,QAAgB;IAEhB,MAAM,mBAAmB,GAAG,MAAM,eAAK,CAAC,IAAI,CAC1C,iBAAiB,GAAG,KAAK,CAAC,MAAM,EAChC;QACE,OAAO,EAAE;YACP,aAAa,EAAE,UAAU,QAAQ,EAAE;SACpC;QACD,cAAc,EAAE,GAAG,EAAE;YACnB,OAAO,IAAI,CAAA,CAAC,0BAA0B;QACxC,CAAC;KACF,CACF,CAAA;IAED,IACE,mBAAmB,CAAC,MAAM,KAAK,GAAG;QAClC,mBAAmB,CAAC,MAAM,KAAK,GAAG,EAClC,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,MAAM,mCAAmC,CAAC,CAAA;QACnE,OAAM;IACR,CAAC;IAED,IAAI,mBAAmB,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CACb,iDAAiD,KAAK,CAAC,MAAM,KAAK,mBAAmB,CAAC,MAAM,IAAI,mBAAmB,CAAC,UAAU,EAAE,CACjI,CAAA;IACH,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,mBAAmB,KAAK,CAAC,MAAM,GAAG,CAAC,CAAA;IAE7C,MAAM,sBAAsB,GAAG,MAAM,eAAK,CAAC,IAAI,CAAC,kBAAkB,EAAE,KAAK,EAAE;QACzE,OAAO,EAAE;YACP,aAAa,EAAE,UAAU,QAAQ,EAAE;SACpC;QACD,cAAc,EAAE,GAAG,EAAE;YACnB,OAAO,IAAI,CAAA,CAAC,0BAA0B;QACxC,CAAC;KACF,CAAC,CAAA;IAEF,IAAI,sBAAsB,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QAC1C,IAAI,CAAC,KAAK,CACR,wCAAwC,kBAAkB,KAAK,sBAAsB,CAAC,MAAM,EAAE,CAC/F,CAAA;QACD,MAAM,IAAI,KAAK,CACb,wCAAwC,sBAAsB,CAAC,MAAM,EAAE,CACxE,CAAA;IACH,CAAC;IAED,MAAM,sBAAsB,GAAG,sBAAsB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;IACzE,IAAI,sBAAsB,KAAK,SAAS,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CACb,mDAAmD,kBAAkB,cAAc,KAAK,CAAC,MAAM,EAAE,CAClG,CAAA;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,GAAG,sBAAsB,WAAW,KAAK,CAAC,MAAM,EAAE,CAAA;IACnE,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,QAAQ,EAAE,CAAA;IAE/D,0FAA0F;IAC1F,IAAI,IAAY,CAAA;IAChB,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACpB,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IACxB,CAAC;SAAM,CAAC;QACN,IAAI,GAAG,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC7C,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,eAAK,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,EAAE;QACvD,OAAO,EAAE;YACP,aAAa,EAAE,UAAU,QAAQ,EAAE;YACnC,cAAc,EAAE,0BAA0B;YAC1C,iBAAiB,EAAE,MAAM,EAAE,yCAAyC;YACpE,gBAAgB,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE;SACxC;QACD,cAAc,EAAE,GAAG,EAAE;YACnB,OAAO,IAAI,CAAA,CAAC,0BAA0B;QACxC,CAAC;KACF,CAAC,CAAA;IAEF,IAAI,WAAW,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CACb,uCAAuC,WAAW,CAAC,MAAM,cAAc,KAAK,CAAC,MAAM,EAAE,CACtF,CAAA;IACH,CAAC;AACH,CAAC;AAED,+DAA+D;AAC/D,KAAK,UAAU,cAAc,CAC3B,YAAoB,EACpB,gBAAwB,EACxB,QAAgB;IAEhB,IAAI,CAAC,IAAI,CAAC,yBAAyB,gBAAgB,GAAG,CAAC,CAAA;IAEvD,MAAM,WAAW,GAAG,MAAM,eAAK,CAAC,GAAG,CAAC,gBAAgB,EAAE,YAAY,EAAE;QAClE,OAAO,EAAE;YACP,aAAa,EAAE,UAAU,QAAQ,EAAE;YACnC,cAAc,EAAE,4CAA4C;SAC7D;QACD,cAAc,EAAE,GAAG,EAAE;YACnB,OAAO,IAAI,CAAA,CAAC,0BAA0B;QACxC,CAAC;KACF,CAAC,CAAA;IAEF,IAAI,WAAW,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CACb,yCAAyC,WAAW,CAAC,MAAM,EAAE,CAC9D,CAAA;IACH,CAAC;IAED,MAAM,oBAAoB,GAAG,WAAW,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAA;IACzE,IAAI,oBAAoB,KAAK,SAAS,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CACb,kDAAkD,gBAAgB,EAAE,CACrE,CAAA;IACH,CAAC;IAED,OAAO,oBAAoB,CAAA;AAC7B,CAAC;AAED,SAAS,4BAA4B;IACnC,IAAA,yBAAa,EAAC;QACZ,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;YACzB,IAAI,CAAC,KAAK,CAAC,gBAAgB,MAAM,EAAE,CAAC,CAAA;QACtC,CAAC;QACD,QAAQ,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;YAC5B,IAAI,CAAC,KAAK,CAAC,iBAAiB,QAAQ,EAAE,CAAC,CAAA;QACzC,CAAC;QACD,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACtB,IAAI,CAAC,KAAK,CAAC,cAAc,KAAK,EAAE,CAAC,CAAA;QACnC,CAAC;KACF,CAAC,CAAA;AACJ,CAAC"}
|
|
||||||
-1
@@ -1 +0,0 @@
|
|||||||
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;AAAA;;GAEG;AACH,iCAA4B;AAC5B,wDAA+B;AAE/B,MAAM,IAAI,GAAG,IAAA,kBAAQ,EAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,CAAA;AACxD,mEAAmE;AACnE,IAAA,UAAG,EAAC,IAAI,CAAC,CAAA"}
|
|
||||||
-115
@@ -1,115 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
||||||
if (k2 === undefined) k2 = k;
|
|
||||||
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
||||||
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
||||||
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
||||||
}
|
|
||||||
Object.defineProperty(o, k2, desc);
|
|
||||||
}) : (function(o, m, k, k2) {
|
|
||||||
if (k2 === undefined) k2 = k;
|
|
||||||
o[k2] = m[k];
|
|
||||||
}));
|
|
||||||
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
||||||
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
||||||
}) : function(o, v) {
|
|
||||||
o["default"] = v;
|
|
||||||
});
|
|
||||||
var __importStar = (this && this.__importStar) || function (mod) {
|
|
||||||
if (mod && mod.__esModule) return mod;
|
|
||||||
var result = {};
|
|
||||||
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
||||||
__setModuleDefault(result, mod);
|
|
||||||
return result;
|
|
||||||
};
|
|
||||||
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
||||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
||||||
};
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
|
||||||
exports.run = void 0;
|
|
||||||
const core = __importStar(require("@actions/core"));
|
|
||||||
const github = __importStar(require("@actions/github"));
|
|
||||||
const fsHelper = __importStar(require("./fs-helper"));
|
|
||||||
const ociContainer = __importStar(require("./oci-container"));
|
|
||||||
const ghcr = __importStar(require("./ghcr-client"));
|
|
||||||
const api = __importStar(require("./api-client"));
|
|
||||||
const semver_1 = __importDefault(require("semver"));
|
|
||||||
/**
|
|
||||||
* The main function for the action.
|
|
||||||
* @returns {Promise<void>} Resolves when the action is complete.
|
|
||||||
*/
|
|
||||||
async function run(pathInput) {
|
|
||||||
const tmpDirs = [];
|
|
||||||
try {
|
|
||||||
const repository = process.env.GITHUB_REPOSITORY || '';
|
|
||||||
if (repository === '') {
|
|
||||||
core.setFailed(`Could not find Repository.`);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const token = process.env.TOKEN || '';
|
|
||||||
const sourceCommit = process.env.GITHUB_SHA || '';
|
|
||||||
if (token === '') {
|
|
||||||
core.setFailed(`Could not find source commit.`);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (sourceCommit === '') {
|
|
||||||
core.setFailed(`Could not find source commit.`);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const semanticVersion = parseSourceSemanticVersion();
|
|
||||||
// Create a temporary directory to stage files for packaging in archives
|
|
||||||
const stagedActionFilesDir = fsHelper.createTempDir();
|
|
||||||
tmpDirs.push(stagedActionFilesDir);
|
|
||||||
fsHelper.stageActionFiles(".", stagedActionFilesDir);
|
|
||||||
// Create a temporary directory to store the archives
|
|
||||||
const archiveDir = fsHelper.createTempDir();
|
|
||||||
tmpDirs.push(archiveDir);
|
|
||||||
const archives = await fsHelper.createArchives(stagedActionFilesDir, archiveDir);
|
|
||||||
const { repoId, ownerId } = await api.getRepositoryMetadata(repository, token);
|
|
||||||
const manifest = ociContainer.createActionPackageManifest(archives.tarFile, archives.zipFile, repository, repoId, ownerId, sourceCommit, semanticVersion.raw, new Date());
|
|
||||||
const containerRegistryURL = await api.getContainerRegistryURL();
|
|
||||||
console.log(`Container registry URL: ${containerRegistryURL}`);
|
|
||||||
const { packageURL, manifestDigest } = await ghcr.publishOCIArtifact(token, containerRegistryURL, repository, semanticVersion.raw, archives.zipFile, archives.tarFile, manifest, true);
|
|
||||||
core.setOutput('package-url', packageURL.toString());
|
|
||||||
core.setOutput('package-manifest', JSON.stringify(manifest));
|
|
||||||
core.setOutput('package-manifest-sha', `sha256:${manifestDigest}`);
|
|
||||||
}
|
|
||||||
catch (error) {
|
|
||||||
// Fail the workflow run if an error occurs
|
|
||||||
if (error instanceof Error)
|
|
||||||
core.setFailed(error.message);
|
|
||||||
}
|
|
||||||
finally {
|
|
||||||
// Clean up any temporary directories that exist
|
|
||||||
for (const tmpDir of tmpDirs) {
|
|
||||||
if (tmpDir !== '') {
|
|
||||||
fsHelper.removeDir(tmpDir);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
exports.run = run;
|
|
||||||
// This action can be triggered by release events or tag push events.
|
|
||||||
// In each case, the source event should produce a Semantic Version compliant tag representing the code to be packaged.
|
|
||||||
function parseSourceSemanticVersion() {
|
|
||||||
const event = github.context.eventName;
|
|
||||||
var semverTag = '';
|
|
||||||
// Grab the raw tag
|
|
||||||
if (event === 'release')
|
|
||||||
semverTag = github.context.payload.release.tag_name;
|
|
||||||
else if (event === 'push' && github.context.ref.startsWith('refs/tags/')) {
|
|
||||||
semverTag = github.context.ref.replace(/^refs\/tags\//, '');
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
throw new Error(`This action can only be triggered by release events or tag push events.`);
|
|
||||||
}
|
|
||||||
if (semverTag === '') {
|
|
||||||
throw new Error(`Could not find a Semantic Version tag in the event payload.`);
|
|
||||||
}
|
|
||||||
const semanticVersion = semver_1.default.parse(semverTag.replace(/^v/, ''));
|
|
||||||
if (!semanticVersion) {
|
|
||||||
throw new Error(`${semverTag} is not a valid semantic version, and so cannot be uploaded as an Immutable Action.`);
|
|
||||||
}
|
|
||||||
return semanticVersion;
|
|
||||||
}
|
|
||||||
//# sourceMappingURL=main.js.map
|
|
||||||
-1
@@ -1 +0,0 @@
|
|||||||
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
|
|
||||||
-69
@@ -1,69 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
|
||||||
exports.createActionPackageManifest = void 0;
|
|
||||||
// Given a name and archive metadata, creates a manifest in the format expected by GHCR for an Actions Package.
|
|
||||||
function createActionPackageManifest(tarFile, zipFile, repository, repoId, ownerId, sourceCommit, version, created) {
|
|
||||||
const configLayer = createConfigLayer();
|
|
||||||
const sanitizedRepo = sanitizeRepository(repository);
|
|
||||||
const tarLayer = createTarLayer(tarFile, sanitizedRepo, version);
|
|
||||||
const zipLayer = createZipLayer(zipFile, sanitizedRepo, version);
|
|
||||||
const manifest = {
|
|
||||||
schemaVersion: 2,
|
|
||||||
mediaType: 'application/vnd.oci.image.manifest.v1+json',
|
|
||||||
artifactType: 'application/vnd.github.actions.package.v1+json',
|
|
||||||
config: configLayer,
|
|
||||||
layers: [configLayer, tarLayer, zipLayer],
|
|
||||||
annotations: {
|
|
||||||
'org.opencontainers.image.created': created.toISOString(),
|
|
||||||
'action.tar.gz.digest': tarFile.sha256,
|
|
||||||
'action.zip.digest': zipFile.sha256,
|
|
||||||
'com.github.package.type': 'actions_oci_pkg',
|
|
||||||
'com.github.package.version': version,
|
|
||||||
'com.github.source.repo.id': repoId,
|
|
||||||
'com.github.source.repo.owner.id': ownerId,
|
|
||||||
'com.github.source.commit': sourceCommit,
|
|
||||||
}
|
|
||||||
};
|
|
||||||
return manifest;
|
|
||||||
}
|
|
||||||
exports.createActionPackageManifest = createActionPackageManifest;
|
|
||||||
// TODO: is this ok hardcoded?
|
|
||||||
function createConfigLayer() {
|
|
||||||
const configLayer = {
|
|
||||||
mediaType: 'application/vnd.github.actions.package.config.v1+json',
|
|
||||||
size: 0,
|
|
||||||
digest: 'sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855',
|
|
||||||
annotations: {
|
|
||||||
'org.opencontainers.image.title': 'config.json'
|
|
||||||
}
|
|
||||||
};
|
|
||||||
return configLayer;
|
|
||||||
}
|
|
||||||
function createZipLayer(zipFile, repository, version) {
|
|
||||||
const zipLayer = {
|
|
||||||
mediaType: 'application/vnd.github.actions.package.layer.v1.zip',
|
|
||||||
size: zipFile.size,
|
|
||||||
digest: zipFile.sha256,
|
|
||||||
annotations: {
|
|
||||||
'org.opencontainers.image.title': `${repository}_${version}.zip`
|
|
||||||
}
|
|
||||||
};
|
|
||||||
return zipLayer;
|
|
||||||
}
|
|
||||||
function createTarLayer(tarFile, repository, version) {
|
|
||||||
const tarLayer = {
|
|
||||||
mediaType: 'application/vnd.github.actions.package.layer.v1.tar+gzip',
|
|
||||||
size: tarFile.size,
|
|
||||||
digest: tarFile.sha256,
|
|
||||||
annotations: {
|
|
||||||
'org.opencontainers.image.title': `${repository}_${version}.tar.gz`
|
|
||||||
}
|
|
||||||
};
|
|
||||||
return tarLayer;
|
|
||||||
}
|
|
||||||
// Remove slashes so we can use the repository in a filename
|
|
||||||
// repository usually includes the namespace too, e.g. my-org/my-repo
|
|
||||||
function sanitizeRepository(repository) {
|
|
||||||
return repository.replace('/', '-');
|
|
||||||
}
|
|
||||||
//# sourceMappingURL=oci-container.js.map
|
|
||||||
-1
@@ -1 +0,0 @@
|
|||||||
{"version":3,"file":"oci-container.js","sourceRoot":"","sources":["../src/oci-container.ts"],"names":[],"mappings":";;;AAkBA,+GAA+G;AAC/G,SAAgB,2BAA2B,CACzC,OAAqB,EACrB,OAAqB,EACrB,UAAkB,EAClB,MAAc,EACd,OAAe,EACf,YAAoB,EACpB,OAAe,EACf,OAAa;IAEb,MAAM,WAAW,GAAG,iBAAiB,EAAE,CAAA;IACvC,MAAM,aAAa,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAA;IACpD,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,CAAC,CAAA;IAChE,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,CAAC,CAAA;IAEhE,MAAM,QAAQ,GAAa;QACzB,aAAa,EAAE,CAAC;QAChB,SAAS,EAAE,4CAA4C;QACvD,YAAY,EAAE,gDAAgD;QAC9D,MAAM,EAAE,WAAW;QACnB,MAAM,EAAE,CAAC,WAAW,EAAE,QAAQ,EAAE,QAAQ,CAAC;QACzC,WAAW,EAAE;YACX,kCAAkC,EAAE,OAAO,CAAC,WAAW,EAAE;YACzD,sBAAsB,EAAE,OAAO,CAAC,MAAM;YACtC,mBAAmB,EAAE,OAAO,CAAC,MAAM;YACnC,yBAAyB,EAAE,iBAAiB;YAC5C,4BAA4B,EAAE,OAAO;YACrC,2BAA2B,EAAE,MAAM;YACnC,iCAAiC,EAAE,OAAO;YAC1C,0BAA0B,EAAE,YAAY;SACzC;KACF,CAAA;IAED,OAAO,QAAQ,CAAA;AACjB,CAAC;AAlCD,kEAkCC;AAED,8BAA8B;AAC9B,SAAS,iBAAiB;IACxB,MAAM,WAAW,GAAU;QACzB,SAAS,EAAE,uDAAuD;QAClE,IAAI,EAAE,CAAC;QACP,MAAM,EACJ,yEAAyE;QAC3E,WAAW,EAAE;YACX,gCAAgC,EAAE,aAAa;SAChD;KACF,CAAA;IAED,OAAO,WAAW,CAAA;AACpB,CAAC;AAED,SAAS,cAAc,CACrB,OAAqB,EACrB,UAAkB,EAClB,OAAe;IAEf,MAAM,QAAQ,GAAU;QACtB,SAAS,EAAE,qDAAqD;QAChE,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,WAAW,EAAE;YACX,gCAAgC,EAAE,GAAG,UAAU,IAAI,OAAO,MAAM;SACjE;KACF,CAAA;IAED,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,SAAS,cAAc,CACrB,OAAqB,EACrB,UAAkB,EAClB,OAAe;IAEf,MAAM,QAAQ,GAAU;QACtB,SAAS,EAAE,0DAA0D;QACrE,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,WAAW,EAAE;YACX,gCAAgC,EAAE,GAAG,UAAU,IAAI,OAAO,SAAS;SACpE;KACF,CAAA;IAED,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,4DAA4D;AAC5D,qEAAqE;AACrE,SAAS,kBAAkB,CAAC,UAAkB;IAC5C,OAAO,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;AACrC,CAAC"}
|
|
||||||
+1
-1
@@ -30,7 +30,7 @@
|
|||||||
"format:write": "prettier --write **/*.ts",
|
"format:write": "prettier --write **/*.ts",
|
||||||
"format:check": "prettier --check **/*.ts",
|
"format:check": "prettier --check **/*.ts",
|
||||||
"lint": "npx eslint . -c ./.github/linters/.eslintrc.yml",
|
"lint": "npx eslint . -c ./.github/linters/.eslintrc.yml",
|
||||||
"package": "ncc build src/index.ts --license licenses.txt",
|
"package": "rm -rf dist && ncc build src/index.ts --license licenses.txt",
|
||||||
"package:watch": "npm run package -- --watch",
|
"package:watch": "npm run package -- --watch",
|
||||||
"test": "jest",
|
"test": "jest",
|
||||||
"start": "node dist/index.js",
|
"start": "node dist/index.js",
|
||||||
|
|||||||
Reference in New Issue
Block a user