Skip to content

Commit

Permalink
Implemented check on ros_gz installtion
Browse files Browse the repository at this point in the history
Signed-off-by: Saurabh Kamat <kamatsaurabh01@gmail.com>
  • Loading branch information
sauk2 committed Aug 25, 2024
1 parent 2b4225e commit df0b880
Show file tree
Hide file tree
Showing 3 changed files with 130 additions and 24 deletions.
69 changes: 57 additions & 12 deletions dist/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -26493,8 +26493,9 @@ function runLinux() {
yield apt.runAptGetInstall([`gz-${gazeboDistro}`]);
}
const rosGzDistros = utils.checkForRosGz();
for (const rosGzDistro of rosGzDistros) {
yield apt.runAptGetInstall([`ros-${rosGzDistro}-ros-gz`]);
if (rosGzDistros.length > 0) {
const rosAptPackageNames = utils.generateRosAptPackageNames(rosGzDistros, gazeboDistros);
yield apt.runAptGetInstall(rosAptPackageNames);
}
});
}
Expand Down Expand Up @@ -26796,6 +26797,7 @@ exports.getRequiredGazeboDistributions = getRequiredGazeboDistributions;
exports.checkUbuntuCompatibility = checkUbuntuCompatibility;
exports.checkForUnstableAptRepos = checkForUnstableAptRepos;
exports.checkForRosGz = checkForRosGz;
exports.generateRosAptPackageNames = generateRosAptPackageNames;
const actions_exec = __importStar(__nccwpck_require__(1514));
const core = __importStar(__nccwpck_require__(2186));
const yaml_1 = __nccwpck_require__(4083);
Expand All @@ -26809,7 +26811,28 @@ const validGazeboDistroList = [
"ionic",
];
// List of valid ROS 2 distributions
const validRosGzDistrosList = ["humble", "iron", "jazzy", "rolling"];
const validRosGzDistrosList = [
{
rosDistro: "humble",
compatibleGazeboDistros: ["fortress"],
useWithCautionGazeboDistros: ["garden", "harmonic"],
},
{
rosDistro: "iron",
compatibleGazeboDistros: ["fortress"],
useWithCautionGazeboDistros: ["garden", "harmonic"],
},
{
rosDistro: "jazzy",
compatibleGazeboDistros: ["harmonic"],
useWithCautionGazeboDistros: ["garden"],
},
{
rosDistro: "rolling",
compatibleGazeboDistros: ["harmonic"],
useWithCautionGazeboDistros: ["garden"],
},
];
/**
* Execute a command and wrap the output in a log group.
*
Expand Down Expand Up @@ -26866,15 +26889,16 @@ function validateDistro(requiredGazeboDistributionsList) {
/**
* Validate all ROS distribution names
*
* @param rosGzDistrosList
* @returns boolean Validaity of the ROS distribution
*/
function validateRosDistro(rosGzDistrosList) {
if (rosGzDistrosList.length <= 0) {
return true;
}
for (const rosDistro of rosGzDistrosList) {
if (validRosGzDistrosList.indexOf(rosDistro) <= -1) {
return false;
if (rosGzDistrosList.length > 0) {
const validDistro = validRosGzDistrosList.map((obj) => obj.rosDistro);
for (const rosDistro of rosGzDistrosList) {
if (validDistro.indexOf(rosDistro) <= -1) {
return false;
}
}
}
return true;
Expand Down Expand Up @@ -26966,14 +26990,35 @@ function checkForUnstableAptRepos() {
function checkForRosGz() {
let requiredRosDistroList = [];
const installRosGz = core.getInput("install-ros-gz");
console.log(installRosGz);
if (installRosGz) {
requiredRosDistroList = installRosGz.split(RegExp("\\s"));
}
if (!validateRosDistro(requiredRosDistroList)) {
throw new Error("Input has invalid ROS 2 distribution names.");
if (!validateRosDistro(requiredRosDistroList)) {
throw new Error("Input has invalid ROS 2 distribution names.");
}
}
return requiredRosDistroList;
}
function generateRosAptPackageNames(rosGzDistrosList, requiredGazeboDistributionsList) {
const rosAptPackageNames = [];
for (const rosDistro of rosGzDistrosList) {
const distroInfo = validRosGzDistrosList.find((distro) => distro.rosDistro === rosDistro);
for (const gazeboDistro of requiredGazeboDistributionsList) {
if (distroInfo.compatibleGazeboDistros.indexOf(gazeboDistro) > -1) {
rosAptPackageNames.push(`ros-${rosDistro}-ros-gz`);
}
else if (distroInfo.useWithCautionGazeboDistros.indexOf(gazeboDistro) > -1) {
rosAptPackageNames.push(`ros-${rosDistro}-ros_gz${gazeboDistro}`);
}
else {
throw new Error("Impossible ROS 2 and Gazebo combination requested. \
Please check the list of compatible combinations at \
https://gazebosim.org/docs/latest/ros_installation/#summary-of-compatible-ros-and-gazebo-combinations");
}
}
}
return rosAptPackageNames;
}


/***/ }),
Expand Down
8 changes: 6 additions & 2 deletions src/setup-gazebo-linux.ts
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,11 @@ export async function runLinux(): Promise<void> {
}

const rosGzDistros = utils.checkForRosGz();
for (const rosGzDistro of rosGzDistros) {
await apt.runAptGetInstall([`ros-${rosGzDistro}-ros-gz`]);
if (rosGzDistros.length > 0) {
const rosAptPackageNames = utils.generateRosAptPackageNames(
rosGzDistros,
gazeboDistros,
);
await apt.runAptGetInstall(rosAptPackageNames);
}
}
77 changes: 67 additions & 10 deletions src/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,32 @@ const validGazeboDistroList: string[] = [
];

// List of valid ROS 2 distributions
const validRosGzDistrosList: string[] = ["humble", "iron", "jazzy", "rolling"];
const validRosGzDistrosList: {
rosDistro: string;
compatibleGazeboDistros: string[];
useWithCautionGazeboDistros: string[];
}[] = [
{
rosDistro: "humble",
compatibleGazeboDistros: ["fortress"],
useWithCautionGazeboDistros: ["garden", "harmonic"],
},
{
rosDistro: "iron",
compatibleGazeboDistros: ["fortress"],
useWithCautionGazeboDistros: ["garden", "harmonic"],
},
{
rosDistro: "jazzy",
compatibleGazeboDistros: ["harmonic"],
useWithCautionGazeboDistros: ["garden"],
},
{
rosDistro: "rolling",
compatibleGazeboDistros: ["harmonic"],
useWithCautionGazeboDistros: ["garden"],
},
];

/**
* Execute a command and wrap the output in a log group.
Expand Down Expand Up @@ -82,15 +107,18 @@ export function validateDistro(
/**
* Validate all ROS distribution names
*
* @param rosGzDistrosList
* @returns boolean Validaity of the ROS distribution
*/
export function validateRosDistro(rosGzDistrosList: string[]): boolean {
if (rosGzDistrosList.length <= 0) {
return true;
}
for (const rosDistro of rosGzDistrosList) {
if (validRosGzDistrosList.indexOf(rosDistro) <= -1) {
return false;
if (rosGzDistrosList.length > 0) {
const validDistro: string[] = validRosGzDistrosList.map(
(obj) => obj.rosDistro,
);
for (const rosDistro of rosGzDistrosList) {
if (validDistro.indexOf(rosDistro) <= -1) {
return false;
}
}
}
return true;
Expand Down Expand Up @@ -199,11 +227,40 @@ export function checkForUnstableAptRepos(): string[] {
export function checkForRosGz(): string[] {
let requiredRosDistroList: string[] = [];
const installRosGz = core.getInput("install-ros-gz");
console.log(installRosGz);
if (installRosGz) {
requiredRosDistroList = installRosGz.split(RegExp("\\s"));
}
if (!validateRosDistro(requiredRosDistroList)) {
throw new Error("Input has invalid ROS 2 distribution names.");
if (!validateRosDistro(requiredRosDistroList)) {
throw new Error("Input has invalid ROS 2 distribution names.");
}
}
return requiredRosDistroList;
}

export function generateRosAptPackageNames(
rosGzDistrosList: string[],
requiredGazeboDistributionsList: string[],
): string[] {
const rosAptPackageNames: string[] = [];
for (const rosDistro of rosGzDistrosList) {
const distroInfo = validRosGzDistrosList.find(
(distro) => distro.rosDistro === rosDistro,
);
for (const gazeboDistro of requiredGazeboDistributionsList) {
if (distroInfo!.compatibleGazeboDistros.indexOf(gazeboDistro) > -1) {
rosAptPackageNames.push(`ros-${rosDistro}-ros-gz`);
} else if (
distroInfo!.useWithCautionGazeboDistros.indexOf(gazeboDistro) > -1
) {
rosAptPackageNames.push(`ros-${rosDistro}-ros_gz${gazeboDistro}`);
} else {
throw new Error(
"Impossible ROS 2 and Gazebo combination requested. \
Please check the list of compatible combinations at \
https://gazebosim.org/docs/latest/ros_installation/#summary-of-compatible-ros-and-gazebo-combinations",
);
}
}
}
return rosAptPackageNames;
}

0 comments on commit df0b880

Please sign in to comment.