From ca669a91a3e598403cf786189d783eb47d0ce846 Mon Sep 17 00:00:00 2001 From: Saurabh Kamat Date: Thu, 15 Aug 2024 19:55:45 +0800 Subject: [PATCH 1/4] Addded check for ros_gz Signed-off-by: Saurabh Kamat --- .github/workflows/test.yml | 18 ++++++++++++++++++ action.yml | 5 +++++ dist/index.js | 22 ++++++++++++++++++++++ src/setup-gazebo-linux.ts | 11 +++++++++++ src/utils.ts | 11 +++++++++++ 5 files changed, 67 insertions(+) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 75ab8ce..62c21e8 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -256,3 +256,21 @@ jobs: run: | conda activate gz sim --versions + + test_install_ros_gz: + name: 'Install ros_gz side-by-side Gazebo' + runs-on: ubuntu-24.04 + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4.0.3 + with: + node-version: '20.x' + - name: 'Install ROS 2 Jazzy' + uses: ros-tooling/setup-ros@v0.7 + with: + required-ros-distributions: jazzy + - name: 'Install Gazebo with ros_gz' + uses: ./ + with: + required-gazebo-distributions: 'harmonic' + install-ros-gz: 'true' diff --git a/action.yml b/action.yml index f758cfa..f18f3ca 100644 --- a/action.yml +++ b/action.yml @@ -29,6 +29,11 @@ inputs: Use nightly binaries from OSRF repository required: false default: 'false' + install-ros-gz: + description: | + Install ros_gz side-by-side with ROS 2 and Gazebo + required: false + default: 'false' runs: using: node20 main: dist/index.js diff --git a/dist/index.js b/dist/index.js index d3fb151..11ce59b 100644 --- a/dist/index.js +++ b/dist/index.js @@ -26387,6 +26387,7 @@ Object.defineProperty(exports, "__esModule", ({ value: true })); exports.runLinux = runLinux; const core = __importStar(__nccwpck_require__(2186)); const io = __importStar(__nccwpck_require__(7436)); +const actions_exec = __importStar(__nccwpck_require__(1514)); const apt = __importStar(__nccwpck_require__(4671)); const utils = __importStar(__nccwpck_require__(1314)); /** @@ -26477,6 +26478,16 @@ function addAptRepo(ubuntuCodename) { yield utils.exec("sudo", ["apt-get", "update"]); }); } +function installRosGz() { + return __awaiter(this, void 0, void 0, function* () { + yield utils.exec("bash", ["-c", `distros=($(ls /opt/ros -1))`]); + const output = yield actions_exec.getExecOutput("bash", [ + "-c", + `echo $distros`, + ]); + console.log(output.stdout); + }); +} /** * Install Gazebo on a Linux worker. */ @@ -26492,6 +26503,7 @@ function runLinux() { for (const gazeboDistro of utils.getRequiredGazeboDistributions()) { yield apt.runAptGetInstall([`gz-${gazeboDistro}`]); } + yield installRosGz(); }); } @@ -26790,6 +26802,7 @@ exports.validateDistro = validateDistro; exports.getRequiredGazeboDistributions = getRequiredGazeboDistributions; exports.checkUbuntuCompatibility = checkUbuntuCompatibility; exports.checkForUnstableAptRepos = checkForUnstableAptRepos; +exports.checkForRosGz = checkForRosGz; const actions_exec = __importStar(__nccwpck_require__(1514)); const core = __importStar(__nccwpck_require__(2186)); // List of Valid Gazebo distributions with compatible @@ -26798,22 +26811,27 @@ const validGazeboDistroList = [ { name: "citadel", compatibleUbuntuDistros: ["focal"], + compatibleRosDistros: ["foxy"], }, { name: "fortress", compatibleUbuntuDistros: ["focal", "jammy"], + compatibleRosDistros: ["humble", "iron"], }, { name: "garden", compatibleUbuntuDistros: ["focal", "jammy"], + compatibleRosDistros: [], }, { name: "harmonic", compatibleUbuntuDistros: ["jammy", "noble"], + compatibleRosDistros: ["jazzy", "rolling"], }, { name: "ionic", compatibleUbuntuDistros: ["noble"], + compatibleRosDistros: [], }, ]; /** @@ -26925,6 +26943,10 @@ function checkForUnstableAptRepos() { } return unstableRepos; } +function checkForRosGz() { + const installRosGz = core.getInput("install-ros-gz") === "true"; + return installRosGz; +} /***/ }), diff --git a/src/setup-gazebo-linux.ts b/src/setup-gazebo-linux.ts index 9595bea..68fc4a6 100644 --- a/src/setup-gazebo-linux.ts +++ b/src/setup-gazebo-linux.ts @@ -1,5 +1,6 @@ import * as core from "@actions/core"; import * as io from "@actions/io"; +import * as actions_exec from "@actions/exec"; import * as apt from "./package_manager/apt"; import * as utils from "./utils"; @@ -92,6 +93,15 @@ async function addAptRepo(ubuntuCodename: string): Promise { await utils.exec("sudo", ["apt-get", "update"]); } +async function installRosGz(): Promise { + await utils.exec("bash", ["-c", `distros=($(ls /opt/ros -1))`]); + const output = await actions_exec.getExecOutput("bash", [ + "-c", + `echo $distros`, + ]); + console.log(output.stdout); +} + /** * Install Gazebo on a Linux worker. */ @@ -110,4 +120,5 @@ export async function runLinux(): Promise { for (const gazeboDistro of utils.getRequiredGazeboDistributions()) { await apt.runAptGetInstall([`gz-${gazeboDistro}`]); } + await installRosGz(); } diff --git a/src/utils.ts b/src/utils.ts index 1af41bf..2db4b1d 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -7,26 +7,32 @@ import * as im from "@actions/exec/lib/interfaces"; const validGazeboDistroList: { name: string; compatibleUbuntuDistros: string[]; + compatibleRosDistros: string[]; }[] = [ { name: "citadel", compatibleUbuntuDistros: ["focal"], + compatibleRosDistros: ["foxy"], }, { name: "fortress", compatibleUbuntuDistros: ["focal", "jammy"], + compatibleRosDistros: ["humble", "iron"], }, { name: "garden", compatibleUbuntuDistros: ["focal", "jammy"], + compatibleRosDistros: [], }, { name: "harmonic", compatibleUbuntuDistros: ["jammy", "noble"], + compatibleRosDistros: ["jazzy", "rolling"], }, { name: "ionic", compatibleUbuntuDistros: ["noble"], + compatibleRosDistros: [], }, ]; @@ -161,3 +167,8 @@ export function checkForUnstableAptRepos(): string[] { } return unstableRepos; } + +export function checkForRosGz(): boolean { + const installRosGz = core.getInput("install-ros-gz") === "true"; + return installRosGz; +} From 9b7fe39ef443dded9e09b8b3b6c7c3ab8649e587 Mon Sep 17 00:00:00 2001 From: Saurabh Kamat Date: Thu, 15 Aug 2024 20:09:45 +0800 Subject: [PATCH 2/4] Changed command to use callback for stdout output Signed-off-by: Saurabh Kamat --- dist/index.js | 18 ++++++++++++------ src/setup-gazebo-linux.ts | 20 ++++++++++++++------ 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/dist/index.js b/dist/index.js index 11ce59b..f2493f0 100644 --- a/dist/index.js +++ b/dist/index.js @@ -26387,7 +26387,6 @@ Object.defineProperty(exports, "__esModule", ({ value: true })); exports.runLinux = runLinux; const core = __importStar(__nccwpck_require__(2186)); const io = __importStar(__nccwpck_require__(7436)); -const actions_exec = __importStar(__nccwpck_require__(1514)); const apt = __importStar(__nccwpck_require__(4671)); const utils = __importStar(__nccwpck_require__(1314)); /** @@ -26480,12 +26479,18 @@ function addAptRepo(ubuntuCodename) { } function installRosGz() { return __awaiter(this, void 0, void 0, function* () { - yield utils.exec("bash", ["-c", `distros=($(ls /opt/ros -1))`]); - const output = yield actions_exec.getExecOutput("bash", [ + let rosDistros = ""; + const options = {}; + options.listeners = { + stdout: (data) => { + rosDistros += data.toString(); + }, + }; + yield utils.exec("bash", [ "-c", - `echo $distros`, + `distros=($(ls /opt/ros -1)) ; echo -n "$distros"`, ]); - console.log(output.stdout); + return rosDistros; }); } /** @@ -26503,7 +26508,8 @@ function runLinux() { for (const gazeboDistro of utils.getRequiredGazeboDistributions()) { yield apt.runAptGetInstall([`gz-${gazeboDistro}`]); } - yield installRosGz(); + const rosDistros = yield installRosGz(); + console.log(rosDistros); }); } diff --git a/src/setup-gazebo-linux.ts b/src/setup-gazebo-linux.ts index 68fc4a6..6aeb6d4 100644 --- a/src/setup-gazebo-linux.ts +++ b/src/setup-gazebo-linux.ts @@ -1,6 +1,7 @@ import * as core from "@actions/core"; import * as io from "@actions/io"; import * as actions_exec from "@actions/exec"; +import * as im from "@actions/exec/lib/interfaces"; import * as apt from "./package_manager/apt"; import * as utils from "./utils"; @@ -93,13 +94,19 @@ async function addAptRepo(ubuntuCodename: string): Promise { await utils.exec("sudo", ["apt-get", "update"]); } -async function installRosGz(): Promise { - await utils.exec("bash", ["-c", `distros=($(ls /opt/ros -1))`]); - const output = await actions_exec.getExecOutput("bash", [ +async function installRosGz(): Promise { + let rosDistros: string = ""; + const options: im.ExecOptions = {}; + options.listeners = { + stdout: (data: Buffer) => { + rosDistros += data.toString(); + }, + }; + await utils.exec("bash", [ "-c", - `echo $distros`, + `distros=($(ls /opt/ros -1)) ; echo -n "$distros"`, ]); - console.log(output.stdout); + return rosDistros; } /** @@ -120,5 +127,6 @@ export async function runLinux(): Promise { for (const gazeboDistro of utils.getRequiredGazeboDistributions()) { await apt.runAptGetInstall([`gz-${gazeboDistro}`]); } - await installRosGz(); + const rosDistros = await installRosGz(); + console.log(rosDistros); } From a79c6c6267e147897efc00fb0893d9c9e78880ba Mon Sep 17 00:00:00 2001 From: Saurabh Kamat Date: Thu, 15 Aug 2024 20:16:47 +0800 Subject: [PATCH 3/4] Added exec options for getting ros distros Signed-off-by: Saurabh Kamat --- dist/index.js | 7 ++----- src/setup-gazebo-linux.ts | 11 ++++++----- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/dist/index.js b/dist/index.js index f2493f0..172a827 100644 --- a/dist/index.js +++ b/dist/index.js @@ -26486,10 +26486,7 @@ function installRosGz() { rosDistros += data.toString(); }, }; - yield utils.exec("bash", [ - "-c", - `distros=($(ls /opt/ros -1)) ; echo -n "$distros"`, - ]); + yield utils.exec("bash", ["-c", `distros=($(ls /opt/ros -1)) ; echo -n "$distros"`], options); return rosDistros; }); } @@ -26505,7 +26502,7 @@ function runLinux() { yield addAptRepo(ubuntuCodename); const gazeboDistros = utils.getRequiredGazeboDistributions(); utils.checkUbuntuCompatibility(gazeboDistros, ubuntuCodename); - for (const gazeboDistro of utils.getRequiredGazeboDistributions()) { + for (const gazeboDistro of gazeboDistros) { yield apt.runAptGetInstall([`gz-${gazeboDistro}`]); } const rosDistros = yield installRosGz(); diff --git a/src/setup-gazebo-linux.ts b/src/setup-gazebo-linux.ts index 6aeb6d4..91cbbd9 100644 --- a/src/setup-gazebo-linux.ts +++ b/src/setup-gazebo-linux.ts @@ -102,10 +102,11 @@ async function installRosGz(): Promise { rosDistros += data.toString(); }, }; - await utils.exec("bash", [ - "-c", - `distros=($(ls /opt/ros -1)) ; echo -n "$distros"`, - ]); + await utils.exec( + "bash", + ["-c", `distros=($(ls /opt/ros -1)) ; echo -n "$distros"`], + options, + ); return rosDistros; } @@ -124,7 +125,7 @@ export async function runLinux(): Promise { utils.checkUbuntuCompatibility(gazeboDistros, ubuntuCodename); - for (const gazeboDistro of utils.getRequiredGazeboDistributions()) { + for (const gazeboDistro of gazeboDistros) { await apt.runAptGetInstall([`gz-${gazeboDistro}`]); } const rosDistros = await installRosGz(); From 640a2fbbbca0cc7bc99cd425369fa079a575448d Mon Sep 17 00:00:00 2001 From: Saurabh Kamat Date: Thu, 15 Aug 2024 20:28:23 +0800 Subject: [PATCH 4/4] Added apt install on ros distros Signed-off-by: Saurabh Kamat --- dist/index.js | 14 +++++++++----- src/setup-gazebo-linux.ts | 18 ++++++++++++------ 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/dist/index.js b/dist/index.js index 172a827..98ad363 100644 --- a/dist/index.js +++ b/dist/index.js @@ -26479,15 +26479,18 @@ function addAptRepo(ubuntuCodename) { } function installRosGz() { return __awaiter(this, void 0, void 0, function* () { - let rosDistros = ""; + let rosDistroStr = ""; const options = {}; options.listeners = { stdout: (data) => { - rosDistros += data.toString(); + rosDistroStr += data.toString(); }, }; yield utils.exec("bash", ["-c", `distros=($(ls /opt/ros -1)) ; echo -n "$distros"`], options); - return rosDistros; + const rosDistros = rosDistroStr.split(" "); + for (const rosDistro of rosDistros) { + apt.runAptGetInstall([`ros-${rosDistro}-ros-gz`]); + } }); } /** @@ -26505,8 +26508,9 @@ function runLinux() { for (const gazeboDistro of gazeboDistros) { yield apt.runAptGetInstall([`gz-${gazeboDistro}`]); } - const rosDistros = yield installRosGz(); - console.log(rosDistros); + if (utils.checkForRosGz()) { + yield installRosGz(); + } }); } diff --git a/src/setup-gazebo-linux.ts b/src/setup-gazebo-linux.ts index 91cbbd9..60358f6 100644 --- a/src/setup-gazebo-linux.ts +++ b/src/setup-gazebo-linux.ts @@ -94,12 +94,12 @@ async function addAptRepo(ubuntuCodename: string): Promise { await utils.exec("sudo", ["apt-get", "update"]); } -async function installRosGz(): Promise { - let rosDistros: string = ""; +async function installRosGz(): Promise { + let rosDistroStr: string = ""; const options: im.ExecOptions = {}; options.listeners = { stdout: (data: Buffer) => { - rosDistros += data.toString(); + rosDistroStr += data.toString(); }, }; await utils.exec( @@ -107,7 +107,11 @@ async function installRosGz(): Promise { ["-c", `distros=($(ls /opt/ros -1)) ; echo -n "$distros"`], options, ); - return rosDistros; + + const rosDistros: string[] = rosDistroStr.split(" "); + for (const rosDistro of rosDistros) { + apt.runAptGetInstall([`ros-${rosDistro}-ros-gz`]); + } } /** @@ -128,6 +132,8 @@ export async function runLinux(): Promise { for (const gazeboDistro of gazeboDistros) { await apt.runAptGetInstall([`gz-${gazeboDistro}`]); } - const rosDistros = await installRosGz(); - console.log(rosDistros); + + if (utils.checkForRosGz()) { + await installRosGz(); + } }