Skip to content

Commit

Permalink
Merge pull request #218 from ZettaScaleLabs/fix-cat-debian-packages
Browse files Browse the repository at this point in the history
fix: use shell to build Packages file
  • Loading branch information
Mallets authored Sep 13, 2024
2 parents 23331f3 + dd5e65e commit 863640b
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 76 deletions.
104 changes: 44 additions & 60 deletions dist/publish-crates-debian-main.js
Original file line number Diff line number Diff line change
Expand Up @@ -127682,39 +127682,36 @@ __nccwpck_require__.a(module, async (__webpack_handle_async_dependencies__, __we
/* unused harmony export cleanup */
/* harmony import */ var fs_promises__WEBPACK_IMPORTED_MODULE_0__ = __nccwpck_require__(73292);
/* harmony import */ var fs_promises__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__nccwpck_require__.n(fs_promises__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var zlib__WEBPACK_IMPORTED_MODULE_1__ = __nccwpck_require__(59796);
/* harmony import */ var zlib__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nccwpck_require__.n(zlib__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _actions_core__WEBPACK_IMPORTED_MODULE_2__ = __nccwpck_require__(42186);
/* harmony import */ var _actions_core__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nccwpck_require__.n(_actions_core__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _actions_artifact__WEBPACK_IMPORTED_MODULE_3__ = __nccwpck_require__(79450);
/* harmony import */ var _actions_artifact__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__nccwpck_require__.n(_actions_artifact__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _ssh__WEBPACK_IMPORTED_MODULE_4__ = __nccwpck_require__(27149);
/* harmony import */ var _command__WEBPACK_IMPORTED_MODULE_5__ = __nccwpck_require__(28121);
/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_6__ = __nccwpck_require__(71017);
/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__nccwpck_require__.n(path__WEBPACK_IMPORTED_MODULE_6__);
/* harmony import */ var _build_crates_debian__WEBPACK_IMPORTED_MODULE_7__ = __nccwpck_require__(22771);
var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_build_crates_debian__WEBPACK_IMPORTED_MODULE_7__]);
_build_crates_debian__WEBPACK_IMPORTED_MODULE_7__ = (__webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__)[0];

/* harmony import */ var _actions_core__WEBPACK_IMPORTED_MODULE_1__ = __nccwpck_require__(42186);
/* harmony import */ var _actions_core__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__nccwpck_require__.n(_actions_core__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _actions_artifact__WEBPACK_IMPORTED_MODULE_2__ = __nccwpck_require__(79450);
/* harmony import */ var _actions_artifact__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__nccwpck_require__.n(_actions_artifact__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _ssh__WEBPACK_IMPORTED_MODULE_3__ = __nccwpck_require__(27149);
/* harmony import */ var _command__WEBPACK_IMPORTED_MODULE_4__ = __nccwpck_require__(28121);
/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_5__ = __nccwpck_require__(71017);
/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__nccwpck_require__.n(path__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var _build_crates_debian__WEBPACK_IMPORTED_MODULE_6__ = __nccwpck_require__(22771);
var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_build_crates_debian__WEBPACK_IMPORTED_MODULE_6__]);
_build_crates_debian__WEBPACK_IMPORTED_MODULE_6__ = (__webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__)[0];







const artifact = new _actions_artifact__WEBPACK_IMPORTED_MODULE_3__.DefaultArtifactClient();
const artifact = new _actions_artifact__WEBPACK_IMPORTED_MODULE_2__.DefaultArtifactClient();
const sourcesListName = "publish-crates-debian.list";
const sourcesListDir = "/etc/apt/sources.list.d";
function setup() {
const liveRun = _actions_core__WEBPACK_IMPORTED_MODULE_2__.getBooleanInput("live-run", { required: true });
const version = _actions_core__WEBPACK_IMPORTED_MODULE_2__.getInput("version", { required: true });
const sshHost = _actions_core__WEBPACK_IMPORTED_MODULE_2__.getInput("ssh-host", { required: true });
const sshHostPath = _actions_core__WEBPACK_IMPORTED_MODULE_2__.getInput("ssh-host-path", { required: true });
const sshPrivateKey = _actions_core__WEBPACK_IMPORTED_MODULE_2__.getInput("ssh-private-key", { required: true });
const sshPassphrase = _actions_core__WEBPACK_IMPORTED_MODULE_2__.getInput("ssh-passphrase", { required: true });
const installationTest = _actions_core__WEBPACK_IMPORTED_MODULE_2__.getBooleanInput("installation-test", { required: true });
const repo = _actions_core__WEBPACK_IMPORTED_MODULE_2__.getInput("repo", { required: true });
const liveRun = _actions_core__WEBPACK_IMPORTED_MODULE_1__.getBooleanInput("live-run", { required: true });
const version = _actions_core__WEBPACK_IMPORTED_MODULE_1__.getInput("version", { required: true });
const sshHost = _actions_core__WEBPACK_IMPORTED_MODULE_1__.getInput("ssh-host", { required: true });
const sshHostPath = _actions_core__WEBPACK_IMPORTED_MODULE_1__.getInput("ssh-host-path", { required: true });
const sshPrivateKey = _actions_core__WEBPACK_IMPORTED_MODULE_1__.getInput("ssh-private-key", { required: true });
const sshPassphrase = _actions_core__WEBPACK_IMPORTED_MODULE_1__.getInput("ssh-passphrase", { required: true });
const installationTest = _actions_core__WEBPACK_IMPORTED_MODULE_1__.getBooleanInput("installation-test", { required: true });
const repo = _actions_core__WEBPACK_IMPORTED_MODULE_1__.getInput("repo", { required: true });
return {
liveRun,
version,
Expand All @@ -127726,26 +127723,14 @@ function setup() {
repo,
};
}
function gzip(input) {
return new Promise((resolve, reject) => {
zlib__WEBPACK_IMPORTED_MODULE_1__.gzip(input, { level: 9 }, (error, buffer) => {
if (!error) {
resolve(buffer);
}
else {
reject(error);
}
});
});
}
async function main(input) {
try {
const results = await artifact.listArtifacts({ latest: true });
for (const result of results.artifacts) {
if (_build_crates_debian__WEBPACK_IMPORTED_MODULE_7__/* .artifactRegExp.test */ .cx.test(result.name)) {
if (_build_crates_debian__WEBPACK_IMPORTED_MODULE_6__/* .artifactRegExp.test */ .cx.test(result.name)) {
const { downloadPath } = await artifact.downloadArtifact(result.id);
const archive = path__WEBPACK_IMPORTED_MODULE_6___default().join(downloadPath, result.name);
(0,_command__WEBPACK_IMPORTED_MODULE_5__.sh)(`unzip ${archive} -d ${input.version}`);
const archive = path__WEBPACK_IMPORTED_MODULE_5___default().join(downloadPath, result.name);
(0,_command__WEBPACK_IMPORTED_MODULE_4__.sh)(`unzip ${archive} -d ${input.version}`);
}
}
// repo is actually owner/repo so we have to split it here to get only the git repo name
Expand All @@ -127754,56 +127739,55 @@ async function main(input) {
const packagesPath = `.Packages-${gitRepo}-${input.version}`;
const allPackagesPath = "Packages";
const allPackagesGzippedPath = "Packages.gz";
await _ssh__WEBPACK_IMPORTED_MODULE_4__/* .withIdentity */ .Y(input.sshPrivateKey, input.sshPassphrase, env => {
(0,_command__WEBPACK_IMPORTED_MODULE_5__.sh)(`scp -v -o StrictHostKeyChecking=no -r ${debianRepo}/.Packages-* ./`, { check: false, env });
await _ssh__WEBPACK_IMPORTED_MODULE_3__/* .withIdentity */ .Y(input.sshPrivateKey, input.sshPassphrase, env => {
(0,_command__WEBPACK_IMPORTED_MODULE_4__.sh)(`scp -v -o StrictHostKeyChecking=no -r ${debianRepo}/.Packages-* ./`, { check: false, env });
});
(0,_command__WEBPACK_IMPORTED_MODULE_5__.sh)("sudo apt-get update");
(0,_command__WEBPACK_IMPORTED_MODULE_5__.sh)("sudo apt-get install -y dpkg-dev");
await fs_promises__WEBPACK_IMPORTED_MODULE_0__.writeFile(packagesPath, (0,_command__WEBPACK_IMPORTED_MODULE_5__.sh)(`dpkg-scanpackages --multiversion ${input.version}`));
(0,_command__WEBPACK_IMPORTED_MODULE_4__.sh)("sudo apt-get update");
(0,_command__WEBPACK_IMPORTED_MODULE_4__.sh)("sudo apt-get install -y dpkg-dev");
await fs_promises__WEBPACK_IMPORTED_MODULE_0__.writeFile(packagesPath, (0,_command__WEBPACK_IMPORTED_MODULE_4__.sh)(`dpkg-scanpackages --multiversion ${input.version}`));
// NOTE: An unzipped package index is necessary for apt-get to recognize the
// local repository created below
const packages = (0,_command__WEBPACK_IMPORTED_MODULE_5__.sh)(`cat .Packages-*`, { quiet: true });
await fs_promises__WEBPACK_IMPORTED_MODULE_0__.writeFile(allPackagesPath, packages);
await fs_promises__WEBPACK_IMPORTED_MODULE_0__.writeFile(allPackagesGzippedPath, await gzip(packages));
(0,_command__WEBPACK_IMPORTED_MODULE_5__.sh)("ls -R");
_actions_core__WEBPACK_IMPORTED_MODULE_2__.info(`Adding a local Debian repository at ${process.cwd()}`);
(0,_command__WEBPACK_IMPORTED_MODULE_4__.sh)(`cat .Packages-* > ${allPackagesPath}`, { quiet: true });
(0,_command__WEBPACK_IMPORTED_MODULE_4__.sh)(`gzip -k -9 ${allPackagesPath}`, { quiet: true });
(0,_command__WEBPACK_IMPORTED_MODULE_4__.sh)("ls -R");
_actions_core__WEBPACK_IMPORTED_MODULE_1__.info(`Adding a local Debian repository at ${process.cwd()}`);
await fs_promises__WEBPACK_IMPORTED_MODULE_0__.writeFile(sourcesListName, `deb [trusted=yes] file:${process.cwd()} /`);
// NOTE: We cannot write zenoh.list directly into /etc/apt/sources.list.d as
// that requires sudo
(0,_command__WEBPACK_IMPORTED_MODULE_5__.sh)(`sudo cp ${sourcesListName} ${sourcesListDir}`);
(0,_command__WEBPACK_IMPORTED_MODULE_5__.sh)(`cat ${sourcesListDir}/${sourcesListName}`);
(0,_command__WEBPACK_IMPORTED_MODULE_5__.sh)("sudo apt-get update");
(0,_command__WEBPACK_IMPORTED_MODULE_4__.sh)(`sudo cp ${sourcesListName} ${sourcesListDir}`);
(0,_command__WEBPACK_IMPORTED_MODULE_4__.sh)(`cat ${sourcesListDir}/${sourcesListName}`);
(0,_command__WEBPACK_IMPORTED_MODULE_4__.sh)("sudo apt-get update");
if (input.installationTest) {
const debs = new Set();
for await (const dirent of await fs_promises__WEBPACK_IMPORTED_MODULE_0__.opendir(input.version)) {
const debPath = path__WEBPACK_IMPORTED_MODULE_6___default().join(dirent.path, dirent.name);
const package_ = (0,_command__WEBPACK_IMPORTED_MODULE_5__.sh)(`dpkg-deb --field ${debPath} Package`).trim();
const debPath = path__WEBPACK_IMPORTED_MODULE_5___default().join(dirent.path, dirent.name);
const package_ = (0,_command__WEBPACK_IMPORTED_MODULE_4__.sh)(`dpkg-deb --field ${debPath} Package`).trim();
debs.add(package_);
}
debs.forEach(deb => {
(0,_command__WEBPACK_IMPORTED_MODULE_5__.sh)(`sudo apt-get install -y ${deb}`);
(0,_command__WEBPACK_IMPORTED_MODULE_4__.sh)(`sudo apt-get install -y ${deb}`);
});
debs.forEach(deb => {
(0,_command__WEBPACK_IMPORTED_MODULE_5__.sh)(`sudo dpkg --purge --force-all ${deb}`);
(0,_command__WEBPACK_IMPORTED_MODULE_4__.sh)(`sudo dpkg --purge --force-all ${deb}`);
});
}
if (input.liveRun) {
await _ssh__WEBPACK_IMPORTED_MODULE_4__/* .withIdentity */ .Y(input.sshPrivateKey, input.sshPassphrase, env => {
await _ssh__WEBPACK_IMPORTED_MODULE_3__/* .withIdentity */ .Y(input.sshPrivateKey, input.sshPassphrase, env => {
const files = [allPackagesGzippedPath, packagesPath, input.version].join(" ");
(0,_command__WEBPACK_IMPORTED_MODULE_5__.sh)(`ssh -v -o StrictHostKeyChecking=no ${input.sshHost} mkdir -p ${input.sshHostPath}`, { env });
(0,_command__WEBPACK_IMPORTED_MODULE_5__.sh)(`scp -v -o StrictHostKeyChecking=no -r ${files} ${debianRepo}`, { env });
(0,_command__WEBPACK_IMPORTED_MODULE_4__.sh)(`ssh -v -o StrictHostKeyChecking=no ${input.sshHost} mkdir -p ${input.sshHostPath}`, { env });
(0,_command__WEBPACK_IMPORTED_MODULE_4__.sh)(`scp -v -o StrictHostKeyChecking=no -r ${files} ${debianRepo}`, { env });
});
}
cleanup();
}
catch (error) {
cleanup();
if (error instanceof Error)
_actions_core__WEBPACK_IMPORTED_MODULE_2__.setFailed(error.message);
_actions_core__WEBPACK_IMPORTED_MODULE_1__.setFailed(error.message);
}
}
function cleanup() {
(0,_command__WEBPACK_IMPORTED_MODULE_5__.sh)(`sudo rm ${sourcesListDir}/${sourcesListName}`, { check: false });
(0,_command__WEBPACK_IMPORTED_MODULE_4__.sh)(`sudo rm ${sourcesListDir}/${sourcesListName}`, { check: false });
}

__webpack_async_result__();
Expand Down
18 changes: 2 additions & 16 deletions src/publish-crates-debian.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import * as fs from "fs/promises";
import * as zlib from "zlib";

import * as core from "@actions/core";
import { DefaultArtifactClient } from "@actions/artifact";
Expand Down Expand Up @@ -48,18 +47,6 @@ export function setup(): Input {
};
}

function gzip(input: string): Promise<Buffer> {
return new Promise((resolve, reject) => {
zlib.gzip(input, { level: 9 }, (error, buffer) => {
if (!error) {
resolve(buffer);
} else {
reject(error);
}
});
});
}

export async function main(input: Input) {
try {
const results = await artifact.listArtifacts({ latest: true });
Expand Down Expand Up @@ -88,9 +75,8 @@ export async function main(input: Input) {
await fs.writeFile(packagesPath, sh(`dpkg-scanpackages --multiversion ${input.version}`));
// NOTE: An unzipped package index is necessary for apt-get to recognize the
// local repository created below
const packages = sh(`cat .Packages-*`, { quiet: true });
await fs.writeFile(allPackagesPath, packages);
await fs.writeFile(allPackagesGzippedPath, await gzip(packages));
sh(`cat .Packages-* > ${allPackagesPath}`, { quiet: true });
sh(`gzip -k -9 ${allPackagesPath}`, { quiet: true });

sh("ls -R");
core.info(`Adding a local Debian repository at ${process.cwd()}`);
Expand Down

0 comments on commit 863640b

Please sign in to comment.