Unity Actions

The fastest and **easiest** way to automatically test and build any Unity project! Part of the Unity CI open source project.

[![Actions status](https://github.com/webbertakken/unity-actions/workflows/Actions%20%F0%9F%98%8E/badge.svg?event=push&branch=master)](https://github.com/webbertakken/unity-actions/actions?query=branch%3Amaster+event%3Apush+workflow%3A"Actions%20%F0%9F%98%8E")

#### Supported versions Unity Actions are based on the [unity3d](https://gitlab.com/gableroux/unity3d) images from [GabLeRoux](https://github.com/GabLeRoux). Any version in this [list](https://hub.docker.com/r/gableroux/unity3d/tags) can be used to test and build projects. ## Project Status #### Checkout | Description | Done | Status | |-------------------------|------|--------| | [Checkout project](https://github.com/actions/checkout) | ✔ | Native support | #### Configure | Description | Done | Status | |-------------------------|------|--------| | [Request activation file](https://github.com/marketplace/actions/unity-request-activation-file) | ✔ | [![Actions status](https://github.com/webbertakken/unity-request-manual-activation-file/workflows/Actions%20%F0%9F%98%8E/badge.svg?event=push&branch=master)](https://github.com/webbertakken/unity-request-manual-activation-file) | | [Activate license](https://github.com/marketplace/actions/unity-activate) | ✔ | [![Actions status](https://github.com/webbertakken/unity-activate/workflows/Actions%20%F0%9F%98%8E/badge.svg?event=push&branch=master)](https://github.com/webbertakken/unity-activate) | | [Return license](https://github.com/marketplace/actions/unity-return-license) | ✔ | [![Actions status](https://github.com/webbertakken/unity-return-license/workflows/Actions%20%F0%9F%98%8E/badge.svg?event=push&branch=master)](https://github.com/webbertakken/unity-return-license) | | [Caching dependencies](https://github.com/marketplace/actions/cache) | ✔ | Native support | #### Test | Description | Done | Status | |-------------------------|------|--------| | [Test edit mode](https://github.com/marketplace/actions/unity-test-runner) | ✔ | [![Actions status](https://github.com/webbertakken/unity-test-runner/workflows/Actions%20%F0%9F%98%8E/badge.svg?event=push&branch=master)](https://github.com/webbertakken/unity-test-runner#edit-mode) | | [Test play mode](https://github.com/marketplace/actions/unity-test-runner) | ✔ | [![Actions status](https://github.com/webbertakken/unity-test-runner/workflows/Actions%20%F0%9F%98%8E/badge.svg?event=push&branch=master)](https://github.com/webbertakken/unity-test-runner#play-mode) | | [Test all in one](https://github.com/marketplace/actions/unity-test-runner) | ✔ | [![Actions status](https://github.com/webbertakken/unity-test-runner/workflows/Actions%20%F0%9F%98%8E/badge.svg?event=push&branch=master)](https://github.com/webbertakken/unity-test-runner#all-in-one-mode) | #### Build | Description | Done | Status | |-------------------------|------|--------| | [Build for WebGL](https://github.com/marketplace/actions/unity-builder) | ✔ | [![Actions status](https://github.com/webbertakken/unity-builder/workflows/Actions%20%F0%9F%98%8E/badge.svg?event=push&branch=master)](https://github.com/webbertakken/unity-builder#webgl) | | [Build for Windows](https://github.com/marketplace/actions/unity-builder) | ✔ | [![Actions status](https://github.com/webbertakken/unity-builder/workflows/Actions%20%F0%9F%98%8E/badge.svg?event=push&branch=master)](https://github.com/webbertakken/unity-builder#windows) | | [Build for Linux](https://github.com/marketplace/actions/unity-builder) | ✔ | [![Actions status](https://github.com/webbertakken/unity-builder/workflows/Actions%20%F0%9F%98%8E/badge.svg?event=push&branch=master)](https://github.com/webbertakken/unity-builder#linux) | | [Build for MacOS](https://github.com/marketplace/actions/unity-builder) | ✔ | [![Actions status](https://github.com/webbertakken/unity-builder/workflows/Actions%20%F0%9F%98%8E/badge.svg?event=push&branch=master)](https://github.com/webbertakken/unity-builder#macos) | | [Build for Android](https://github.com/marketplace/actions/unity-builder) | ✔ | [![Actions status](https://github.com/webbertakken/unity-builder/workflows/Actions%20%F0%9F%98%8E/badge.svg?event=push&branch=master)](https://github.com/webbertakken/unity-builder#android) | | [Build for iOS](https://github.com/marketplace/actions/unity-builder) | ✔ | [![Actions status](https://github.com/webbertakken/unity-builder/workflows/Actions%20%F0%9F%98%8E/badge.svg?event=push&branch=master)](https://github.com/webbertakken/unity-builder#ios) | | [Build for Windows store](https://github.com/marketplace/actions/unity-builder) | ❌ | In progress | | [Build for PS4](https://github.com/marketplace/actions/unity-builder) | ❌ | In progress | | [Build for XboxOne](https://github.com/marketplace/actions/unity-builder) | ❌ | In progress | | [Build for tvOS](https://github.com/marketplace/actions/unity-builder) | ❌ | In progress | | [Build for Switch](https://github.com/marketplace/actions/unity-builder) | ❌ | In progress | ## Setup #### Mental model There are two parts to setting up Unity Actions; - Understand how Github Actions works - Configuring a license from Unity - Setting up a workflow for your project **Detailed setup instructions can be found in the [docs](https://unity-ci.com/docs) at [unity-ci.com](https://unity-ci.com).** #### First time using GitHub Actions? Read the official documentation on how to setup a [workflow](https://help.github.com/en/actions/automating-your-workflow-with-github-actions/configuring-a-workflow). Any subsequent steps assume you have read the above. ### Setting up license All actions utilize an installment of Unity, and as such need to be activated. It's generally considered good practice to use the same Unity version for Unity Actions as you do to develop your project. To set up your license for use in Unity Actions, create a file called `.github/workflows/activate.yml` in your repository and follow the steps for either `personal` or `professoinal` license below. ##### Personal license 1. Request your activation file for usage on GitHub using [Request Manual Activation File](https://github.com/marketplace/actions/unity-request-activation-file). 3. Request your license on [license.unity3d.com](https://license.unity3d.com/manual). 4. Open `Github` > `` > `Settings` > `Secrets` 5. Create a secret called `UNITY_LICENSE` and add the contents of the obtained license file. ##### Professional license 1. Open `Github` > `` > `Settings` > `Secrets` 2. Create the following secrets; - `UNITY_SERIAL` - _(Add the code that looks like `XX-XXXX-XXXX-XXXX-XXXX-XXXX`)_ - `UNITY_EMAIL` - _(Add the email address that you use to login to Unity)_ - `UNITY_PASSWORD` - _(Add the password that you use to login to Unity)_ ##### Optional steps - Verify your license using [Activate](https://github.com/marketplace/actions/unity-activate) and for pro licenses also [Return License](https://github.com/marketplace/actions/unity-return-license). This is to free up the license allocation after usage. > _Note: Test runner and Builder already include these steps._ ### Setting up a workflow Setting up a workflow is easy! Create a file called `.github/workflows/main.yml` in your repository and configure the following steps; 1. Checkout a repository using [Checkout](https://github.com/marketplace/actions/checkout). 2. Cache your library folder using [Cache](https://github.com/marketplace/actions/cache). 3. Configure your test job using [Test Runner](https://github.com/marketplace/actions/unity-test-runner). 4. Configure your build job using [Builder](https://github.com/marketplace/actions/unity-builder). 5. Deploy your application. Detailed instructions for each step can be found in the corresponding actions. ## Simple example Below is a simple example. It is __recommended__ to start from here. This example assumes that your Unity project is in the root of your repository. > _Note: this repository tests this workflow_ > ```yaml name: Actions 😎 on: pull_request: {} push: { branches: [master] } env: UNITY_LICENSE: ${{ secrets.UNITY_LICENSE }} jobs: build: name: Build my project ✨ runs-on: ubuntu-latest steps: # Checkout - name: Checkout repository uses: actions/checkout@v2 with: lfs: true # Cache - uses: actions/cache@v1.1.0 with: path: Library key: Library # Test - name: Run tests uses: webbertakken/unity-test-runner@v1.3 with: unityVersion: 2019.2.11f1 # Build - name: Build project uses: webbertakken/unity-builder@v0.10 with: unityVersion: 2019.2.11f1 targetPlatform: WebGL # Output - uses: actions/upload-artifact@v1 with: name: Build path: build ``` ## Advanced example To get an idea of how to create a more advanced workflows, have a look at the example below. > _Note: this repository tests this workflow_ ```yaml name: Actions 😎 on: pull_request: {} push: { branches: [master] } env: UNITY_LICENSE: ${{ secrets.UNITY_LICENSE }} jobs: buildAndTestForSomePlatforms: name: Build for ${{ matrix.targetPlatform }} on version ${{ matrix.unityVersion }} runs-on: ubuntu-latest strategy: fail-fast: false matrix: projectPath: - test-project unityVersion: - 2019.2.11f1 targetPlatform: - StandaloneOSX # Build a macOS standalone (Intel 64-bit). - StandaloneWindows64 # Build a Windows 64-bit standalone. - StandaloneLinux64 # Build a Linux 64-bit standalone. - iOS # Build an iOS player. - WebGL # WebGL. steps: - uses: actions/checkout@v2 with: lfs: true - uses: actions/cache@v1.1.0 with: path: ${{ matrix.projectPath }}/Library key: Library-${{ matrix.projectPath }}-${{ matrix.targetPlatform }} restore-keys: | Library-${{ matrix.projectPath }}- Library- - uses: webbertakken/unity-test-runner@v1.3 id: testRunner with: projectPath: ${{ matrix.projectPath }} unityVersion: ${{ matrix.unityVersion }} - uses: actions/upload-artifact@v1 with: name: Test results (all modes) path: ${{ steps.testRunner.outputs.artifactsPath }} - uses: webbertakken/unity-builder@v0.10 with: projectPath: ${{ matrix.projectPath }} unityVersion: ${{ matrix.unityVersion }} targetPlatform: ${{ matrix.targetPlatform }} customParameters: "-myParameter myValue -myBoolean -ThirdParameter andItsValue" - uses: actions/upload-artifact@v1 with: name: Build path: build ``` Have any questions or comments? Feel free to create an issue! ## Contributions To contribute please follow the contribution [guide](./CONTRIBUTING.md) to get set up quickly. This repository, and all related actions are open for your suggested changes! Feel free to submit a pull request with the suggested changes. ## Licence This repository is licensed under the [MIT](./LICENSE) license. This also includes contributions from the community.