Skip to content

Commit a77da28

Browse files
Use ros-apt-source package
Signed-off-by: Christophe Bedard <bedard.christophe@gmail.com>
1 parent db439e7 commit a77da28

File tree

3 files changed

+39
-160
lines changed

3 files changed

+39
-160
lines changed

dist/index.js

Lines changed: 18 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -7059,68 +7059,13 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
70597059
step((generator = generator.apply(thisArg, _arguments || [])).next());
70607060
});
70617061
};
7062-
var __importDefault = (this && this.__importDefault) || function (mod) {
7063-
return (mod && mod.__esModule) ? mod : { "default": mod };
7064-
};
70657062
Object.defineProperty(exports, "__esModule", ({ value: true }));
70667063
exports.runLinux = runLinux;
70677064
const core = __importStar(__nccwpck_require__(186));
70687065
const io = __importStar(__nccwpck_require__(436));
70697066
const apt = __importStar(__nccwpck_require__(671));
70707067
const pip = __importStar(__nccwpck_require__(744));
70717068
const utils = __importStar(__nccwpck_require__(314));
7072-
const path = __importStar(__nccwpck_require__(17));
7073-
const fs_1 = __importDefault(__nccwpck_require__(147));
7074-
// Open Robotics APT Repository public GPG key, as retrieved at:
7075-
// https://github.com/ros/rosdistro/blob/master/ros.asc
7076-
//
7077-
// Unfortunately, usin apt-key adv is slow, and is failing sometimes, causing
7078-
// spurious pipelines failures. The action is hard-coding the key here to
7079-
// mitigate this issue.
7080-
const openRoboticsAptPublicGpgKey = `
7081-
-----BEGIN PGP PUBLIC KEY BLOCK-----
7082-
Version: GnuPG v1
7083-
7084-
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
7121-
=9IZg
7122-
-----END PGP PUBLIC KEY BLOCK-----
7123-
`;
71247069
/**
71257070
* Configure basic OS stuff.
71267071
*/
@@ -7160,43 +7105,37 @@ function configOs() {
71607105
yield apt.runAptGetInstall(["tzdata"]);
71617106
});
71627107
}
7163-
/**
7164-
* Add OSRF APT repository key.
7165-
*
7166-
* This is necessary even when building from source to install colcon, vcs, etc.
7167-
*/
7168-
function addAptRepoKey() {
7169-
return __awaiter(this, void 0, void 0, function* () {
7170-
const workspace = process.env.GITHUB_WORKSPACE;
7171-
const keyFilePath = path.join(workspace, "ros.key");
7172-
fs_1.default.writeFileSync(keyFilePath, openRoboticsAptPublicGpgKey);
7173-
yield utils.exec("sudo", ["apt-key", "add", keyFilePath]);
7174-
});
7175-
}
71767108
// Ubuntu distribution for ROS 1
71777109
const ros1UbuntuVersion = "focal";
71787110
/**
71797111
* Add OSRF APT repository.
71807112
*
71817113
* @param ubuntuCodename the Ubuntu version codename
7114+
* @param use_ros2_testing whether to use the apt testing repository
71827115
*/
71837116
function addAptRepo(ubuntuCodename, use_ros2_testing) {
71847117
return __awaiter(this, void 0, void 0, function* () {
7118+
// Install key and apt repo using ros-apt-source:
7119+
// https://docs.ros.org/en/rolling/Installation/Ubuntu-Install-Debs.html#enable-required-repositories
7120+
const GITHUB_REPO = "ros-infrastructure/ros-apt-source";
7121+
const apt_source_latest = yield utils.getCommandOutput(`curl -s https://api.github.com/repos/${GITHUB_REPO}/releases/latest | grep -F "tag_name" | awk -F\\" '{print $4}'`);
7122+
const deb_file = "/tmp/apt-source.deb";
7123+
let deb_url = "";
71857124
// There is now no Ubuntu version overlap between ROS 1 and ROS 2
71867125
if (ros1UbuntuVersion === ubuntuCodename) {
7187-
yield utils.exec("sudo", [
7188-
"bash",
7189-
"-c",
7190-
`echo "deb http://packages.ros.org/ros/ubuntu ${ubuntuCodename} main" > /etc/apt/sources.list.d/ros-latest.list`,
7191-
]);
7126+
deb_url = `https://github.com/${GITHUB_REPO}/releases/download/${apt_source_latest}/ros-apt-source_${apt_source_latest}.${ubuntuCodename}_all.deb`;
71927127
}
71937128
else {
7194-
yield utils.exec("sudo", [
7195-
"bash",
7196-
"-c",
7197-
`echo "deb http://packages.ros.org/ros2${use_ros2_testing ? "-testing" : ""}/ubuntu ${ubuntuCodename} main" > /etc/apt/sources.list.d/ros2-latest.list`,
7198-
]);
7129+
const testing = use_ros2_testing ? "-testing" : "";
7130+
deb_url = `https://github.com/${GITHUB_REPO}/releases/download/${apt_source_latest}/ros2${testing}-apt-source_${apt_source_latest}.${ubuntuCodename}_all.deb`;
71997131
}
7132+
yield utils.exec("sudo", [
7133+
"bash",
7134+
"-c",
7135+
`curl -L -o ${deb_file} "${deb_url}"`,
7136+
]);
7137+
yield utils.exec("sudo", ["bash", "-c", `apt install ${deb_file}`]);
7138+
yield utils.exec("sudo", ["bash", "-c", `rm ${deb_file}`]);
72007139
yield utils.exec("sudo", ["apt-get", "update"]);
72017140
});
72027141
}
@@ -7226,7 +7165,6 @@ function runLinux() {
72267165
const use_ros2_testing = core.getInput("use-ros2-testing") === "true";
72277166
const installConnext = core.getInput("install-connext") === "true";
72287167
yield configOs();
7229-
yield addAptRepoKey();
72307168
const ubuntuCodename = yield utils.determineDistribCodename();
72317169
yield addAptRepo(ubuntuCodename, use_ros2_testing);
72327170
if ("noble" !== ubuntuCodename) {
@@ -7533,6 +7471,7 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
75337471
exports.exec = exec;
75347472
exports.getRequiredRosDistributions = getRequiredRosDistributions;
75357473
exports.validateDistro = validateDistro;
7474+
exports.getCommandOutput = getCommandOutput;
75367475
exports.determineDistribCodename = determineDistribCodename;
75377476
exports.determineDistrib = determineDistrib;
75387477
exports.determineDistribVer = determineDistribVer;

src/setup-ros-ubuntu.ts

Lines changed: 20 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -5,60 +5,6 @@ import * as apt from "./package_manager/apt";
55
import * as pip from "./package_manager/pip";
66
import * as utils from "./utils";
77

8-
import * as path from "path";
9-
import fs from "fs";
10-
11-
// Open Robotics APT Repository public GPG key, as retrieved at:
12-
// https://github.com/ros/rosdistro/blob/master/ros.asc
13-
//
14-
// Unfortunately, usin apt-key adv is slow, and is failing sometimes, causing
15-
// spurious pipelines failures. The action is hard-coding the key here to
16-
// mitigate this issue.
17-
const openRoboticsAptPublicGpgKey = `
18-
-----BEGIN PGP PUBLIC KEY BLOCK-----
19-
Version: GnuPG v1
20-
21-
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
58-
=9IZg
59-
-----END PGP PUBLIC KEY BLOCK-----
60-
`;
61-
628
/**
639
* Configure basic OS stuff.
6410
*/
@@ -100,47 +46,43 @@ async function configOs(): Promise<void> {
10046
await apt.runAptGetInstall(["tzdata"]);
10147
}
10248

103-
/**
104-
* Add OSRF APT repository key.
105-
*
106-
* This is necessary even when building from source to install colcon, vcs, etc.
107-
*/
108-
async function addAptRepoKey(): Promise<void> {
109-
const workspace = process.env.GITHUB_WORKSPACE as string;
110-
const keyFilePath = path.join(workspace, "ros.key");
111-
fs.writeFileSync(keyFilePath, openRoboticsAptPublicGpgKey);
112-
await utils.exec("sudo", ["apt-key", "add", keyFilePath]);
113-
}
114-
11549
// Ubuntu distribution for ROS 1
11650
const ros1UbuntuVersion = "focal";
11751

11852
/**
11953
* Add OSRF APT repository.
12054
*
12155
* @param ubuntuCodename the Ubuntu version codename
56+
* @param use_ros2_testing whether to use the apt testing repository
12257
*/
12358
async function addAptRepo(
12459
ubuntuCodename: string,
12560
use_ros2_testing: boolean,
12661
): Promise<void> {
62+
// Install key and apt repo using ros-apt-source:
63+
// https://docs.ros.org/en/rolling/Installation/Ubuntu-Install-Debs.html#enable-required-repositories
64+
const GITHUB_REPO = "ros-infrastructure/ros-apt-source";
65+
const apt_source_latest = await utils.getCommandOutput(
66+
`curl -s https://api.github.com/repos/${GITHUB_REPO}/releases/latest | grep -F "tag_name" | awk -F\\" '{print $4}'`,
67+
);
68+
const deb_file = "/tmp/apt-source.deb";
69+
70+
let deb_url = "";
12771
// There is now no Ubuntu version overlap between ROS 1 and ROS 2
12872
if (ros1UbuntuVersion === ubuntuCodename) {
129-
await utils.exec("sudo", [
130-
"bash",
131-
"-c",
132-
`echo "deb http://packages.ros.org/ros/ubuntu ${ubuntuCodename} main" > /etc/apt/sources.list.d/ros-latest.list`,
133-
]);
73+
deb_url = `https://github.com/${GITHUB_REPO}/releases/download/${apt_source_latest}/ros-apt-source_${apt_source_latest}.${ubuntuCodename}_all.deb`;
13474
} else {
135-
await utils.exec("sudo", [
136-
"bash",
137-
"-c",
138-
`echo "deb http://packages.ros.org/ros2${
139-
use_ros2_testing ? "-testing" : ""
140-
}/ubuntu ${ubuntuCodename} main" > /etc/apt/sources.list.d/ros2-latest.list`,
141-
]);
75+
const testing = use_ros2_testing ? "-testing" : "";
76+
deb_url = `https://github.com/${GITHUB_REPO}/releases/download/${apt_source_latest}/ros2${testing}-apt-source_${apt_source_latest}.${ubuntuCodename}_all.deb`;
14277
}
14378

79+
await utils.exec("sudo", [
80+
"bash",
81+
"-c",
82+
`curl -L -o ${deb_file} "${deb_url}"`,
83+
]);
84+
await utils.exec("sudo", ["bash", "-c", `apt install ${deb_file}`]);
85+
await utils.exec("sudo", ["bash", "-c", `rm ${deb_file}`]);
14486
await utils.exec("sudo", ["apt-get", "update"]);
14587
}
14688

@@ -170,8 +112,6 @@ export async function runLinux(): Promise<void> {
170112

171113
await configOs();
172114

173-
await addAptRepoKey();
174-
175115
const ubuntuCodename = await utils.determineDistribCodename();
176116
await addAptRepo(ubuntuCodename, use_ros2_testing);
177117

src/utils.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ export function validateDistro(
6969
* @param command the command, which must output something
7070
* @returns the string output
7171
*/
72-
async function getCommandOutput(command: string): Promise<string> {
72+
export async function getCommandOutput(command: string): Promise<string> {
7373
let output = "";
7474
const options: im.ExecOptions = {};
7575
options.listeners = {

0 commit comments

Comments
 (0)