Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: use shell to build Packages file #218

Merged
merged 4 commits into from
Sep 13, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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