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

Added support for prerelease and nightly repos #20

Merged
merged 10 commits into from
Jun 18, 2024
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/[email protected]
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
sauk2 marked this conversation as resolved.
Show resolved Hide resolved
steps:
- uses: actions/checkout@v4
- uses: actions/[email protected]
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/[email protected]
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/[email protected]
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/[email protected]
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/[email protected]
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