Skip to content

Commit

Permalink
Added support for prerelease and nightly repos (#20)
Browse files Browse the repository at this point in the history
* Added support for prerelease and nightly
* Testing prerelease installation action
* Updated README with prerelease and nightly instructions

---------
Signed-off-by: Saurabh Kamat <kamatsaurabh01@gmail.com>
  • Loading branch information
sauk2 authored Jun 18, 2024
1 parent 0852966 commit 6d7c719
Show file tree
Hide file tree
Showing 8 changed files with 260 additions and 69 deletions.
43 changes: 43 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -79,3 +79,46 @@ jobs:
echo "Neither ign nor gz command found"
exit 1
fi
test_gazebo_install_ubuntu_prerelease:
name: 'Check installation of Gazebo pre-release binary on Ubuntu'
runs-on: ubuntu-latest
container:
image: ${{ matrix.docker_image }}
strategy:
fail-fast: false
matrix:
docker_image:
- ubuntu:jammy
- ubuntu:noble
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4.0.2
with:
node-version: '20.x'
- name: 'Check Gazebo installation on Ubuntu runner'
uses: ./
with:
required-gazebo-distributions: 'harmonic'
use-gazebo-prerelease: 'true'
- name: 'Test Gazebo installation'
run: 'gz sim --versions'

test_gazebo_install_ubuntu_nightly:
name: 'Check installation of Gazebo nightly binary on Ubuntu'
runs-on: ubuntu-latest
container:
# Ionic should be running on Noble but existing bug is releasing it into Jammy
image: ubuntu:jammy
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4.0.2
with:
node-version: '20.x'
- name: 'Check Gazebo installation on Ubuntu runner'
uses: ./
with:
required-gazebo-distributions: 'ionic'
use-gazebo-nightly: 'true'
- name: 'Test Gazebo installation'
run: 'gz sim --versions'
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -127,3 +127,5 @@ out
.yarn/build-state.yml
.yarn/install-state.gz
.pnp.*

.vscode
139 changes: 87 additions & 52 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ This action sets up a Gazebo release inside a Linux environment.
1. [Usage](#Usage)
1. [Setting up worker and installing a compatible Gazebo and Ubuntu combination](#Setting-up-worker-and-installing-a-compatible-Gazebo-and-Ubuntu-combination)
1. [Iterating on all Gazebo and Ubuntu combinations](#Iterating-on-all-gazebo-ubuntu-combinations)
1. [Using pre-release and/or nightly Gazebo binaries](#Using-pre-release-and/or-nightly-Gazebo-binaries)
1. [License](#License)

## Overview
Expand Down Expand Up @@ -47,74 +48,106 @@ See [action.yml](action.yml)

This workflow shows how to spawn a job to install Gazebo using the action. The action needs an input in the `required-gazebo-distributions` field and requires a Docker configuration to run seamlessly.

The following code snippet shows the installation of Gazebo Garden on Ubuntu Focal.
The following code snippet shows the installation of Gazebo Harmonic on Ubuntu Noble.

```yaml
jobs:
build_docker:
test_gazebo:
runs-on: ubuntu-latest
container:
image: ubuntu:noble
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4.0.2
with:
node-version: '20.x'
- name: 'Setup Gazebo'
uses: gazebo-tooling/setup-gazebo@<full_commit_hash>
with:
required-gazebo-distributions: harmonic
- run: 'gz sim --versions'
- name: 'Test Gazebo installation'
run: 'gz sim --versions'
```
### Iterating on all Gazebo and Ubuntu combinations
This workflow shows how to spawn one job per Gazebo release. It iterates over all specified Gazebo and Ubuntu combinations using Docker. For example, Gazebo Garden requires Ubuntu Focal while Gazebo Harmonic requires Ubuntu Jammy.
This workflow shows how to spawn one job per Gazebo release. It iterates over all specified Gazebo and Ubuntu combinations using Docker. For example, Gazebo Garden is paired with Ubuntu Focal while Gazebo Harmonic is paired with Ubuntu Jammy.
```yaml
jobs:
test_gazebo:
runs-on: ubuntu-latest
container:
image: ${{ matrix.docker_image }}
strategy:
fail-fast: false
matrix:
gazebo_distribution:
- citadel
- fortress
- garden
- harmonic
include:
# Gazebo Citadel (Dec 2019 - Dec 2024)
- docker_image: ubuntu:focal
gazebo_distribution: citadel

# Gazebo Fortress (Sep 2021 - Sep 2026)
- docker_image: ubuntu:focal
gazebo_distribution: fortress

# Gazebo Garden (Sep 2022 - Nov 2024)
- docker_image: ubuntu:focal
gazebo_distribution: garden

# Gazebo Harmonic (Sep 2023 - Sep 2028)
- docker_image: ubuntu:jammy
gazebo_distribution: harmonic
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4.0.2
with:
node-version: '20.x'
- name: 'Check Gazebo installation on Ubuntu runner'
uses: gazebo-tooling/setup-gazebo@<full_commit_hash>
with:
required-gazebo-distributions: ${{ matrix.gazebo_distribution }}
- name: 'Test Gazebo installation'
run: |
if command -v ign > /dev/null; then
ign gazebo --versions
elif command -v gz > /dev/null; then
gz sim --versions
else
echo "Neither ign nor gz command found"
exit 1
fi
```
### Using pre-release and/or nightly Gazebo binaries
This workflow shows how to use binaries from [pre-release] or [nightly] Gazebo repositories instead of the stable repository by setting the `use-gazebo-prerelease` or `use-gazebo-nightly` to `true`.

```yaml
test_gazebo:
runs-on: ubuntu-latest
container:
image: ${{ matrix.docker_image }}
strategy:
fail-fast: false
matrix:
gazebo_distribution:
- citadel
- fortress
- garden
- harmonic
include:
# Gazebo Citadel (Dec 2019 - Dec 2024)
- docker_image: ubuntu:focal
gazebo_distribution: citadel

# Gazebo Fortress (Sep 2021 - Sep 2026)
- docker_image: ubuntu:focal
gazebo_distribution: fortress

# Gazebo Garden (Sep 2022 - Nov 2024)
- docker_image: ubuntu:focal
gazebo_distribution: garden

# Gazebo Harmonic (Sep 2023 - Sep 2028)
- docker_image: ubuntu:jammy
gazebo_distribution: harmonic
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4.0.2
with:
node-version: '20.x'
- name: 'Check Gazebo installation on Ubuntu runner'
uses: gazebo-tooling/setup-gazebo@<full_commit_hash>
with:
required-gazebo-distributions: ${{ matrix.gazebo_distribution }}
- name: 'Test Gazebo installation'
run: |
if command -v ign > /dev/null; then
ign gazebo --versions
elif command -v gz > /dev/null; then
gz sim --versions
else
echo "Neither ign nor gz command found"
exit 1
fi
jobs:
test_gazebo:
name: 'Check installation of Gazebo nightly binary on Ubuntu'
runs-on: ubuntu-latest
container:
image: ubuntu:noble
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4.0.2
with:
node-version: '20.x'
- name: 'Check Gazebo installation on Ubuntu runner'
uses: gazebo-tooling/setup-gazebo@<full_commit_hash>
with:
required-gazebo-distributions: 'harmonic'
use-gazebo-prerelease: 'true'
use-gazebo-nightly: 'true'
- name: 'Test Gazebo installation'
run: 'gz sim --versions'
```

## License
Expand All @@ -123,4 +156,6 @@ The scripts and documentation in this project are released under the [Apache 2](

[releases]: https://gazebosim.org/docs/all/releases
[officially]: https://gazebosim.org/docs/harmonic/releases#supported-platforms
[best-effort]: https://gazebosim.org/docs/harmonic/releases#supported-platforms
[best-effort]: https://gazebosim.org/docs/harmonic/releases#supported-platforms
[pre-release]: https://packages.osrfoundation.org/gazebo/ubuntu-prerelease/
[nightly]: https://packages.osrfoundation.org/gazebo/ubuntu-nightly/
38 changes: 35 additions & 3 deletions __test__/main.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ describe("workflow test without input", () => {
jest.resetAllMocks();
});

it("run Linux workflow without", async () => {
it("run Linux workflow without input", async () => {
await expect(linux.runLinux()).rejects.toThrow();
});
});
Expand All @@ -28,7 +28,7 @@ describe("workflow test with a invalid distro input", () => {
jest.resetAllMocks();
});

it("run Linux workflow without", async () => {
it("run Linux workflow with invalid distro input", async () => {
await expect(linux.runLinux()).rejects.toThrow();
});
});
Expand All @@ -43,7 +43,7 @@ describe("workflow test with a valid distro input", () => {
jest.resetAllMocks();
});

it("run Linux workflow without", async () => {
it("run Linux workflow with valid distro input", async () => {
await expect(linux.runLinux()).resolves.not.toThrow();
});
});
Expand All @@ -68,3 +68,35 @@ describe("validate distribution test", () => {
);
});
});

describe("check for unstable repositories input", () => {
beforeAll(() => {
jest.spyOn(exec, "exec").mockImplementation(jest.fn());
jest
.spyOn(utils, "checkForUnstableAptRepos")
.mockReturnValueOnce(["prerelease"]);
jest
.spyOn(utils, "checkForUnstableAptRepos")
.mockReturnValueOnce(["nightly"]);
jest
.spyOn(utils, "checkForUnstableAptRepos")
.mockReturnValueOnce(["prerelease", "nightly"]);
jest.spyOn(core, "getInput").mockReturnValue("harmonic");
});

afterAll(() => {
jest.resetAllMocks();
});

it("run Linux workflow with unstable repo prerelease", async () => {
await expect(linux.runLinux()).resolves.not.toThrow();
});

it("run Linux workflow with unstable repo nightly", async () => {
await expect(linux.runLinux()).resolves.not.toThrow();
});

it("run Linux workflow with both unstable repos", async () => {
await expect(linux.runLinux()).resolves.not.toThrow();
});
});
33 changes: 22 additions & 11 deletions action.yml
Original file line number Diff line number Diff line change
@@ -1,20 +1,31 @@
name: 'Setup Gazebo release'
description: |
Install a Gazebo release on a Linux system
required-gazebo-distributions:
description: |
List of Gazebo distributions to be installed.
inputs:
required-gazebo-distributions:
description: |
List of Gazebo distributions to be installed.
Allowed Gazebo distributions
- citadel
- fortress
- garden
- harmonic
Allowed Gazebo distributions
- citadel
- fortress
- garden
- harmonic
Multiple values can be passed using a whitespace delimited list
"fortress garden".
Multiple values can be passed using a whitespace delimited list
"fortress garden".
required: false
default: ''
use-gazebo-prerelease:
description: |
Use pre-release binaries from OSRF repository
required: false
default: 'false'
use-gazebo-nightly:
description: |
Use nightly binaries from OSRF repository
required: false
default: ''
default: 'false'
runs:
using: node20
main: dist/index.js
Loading

0 comments on commit 6d7c719

Please sign in to comment.