GitHub Actions Workflows
This document describes each GitHub Actions workflow in .github/workflows/, covering what it does, when it runs, and which tools it relies on.
Android Build (android-build.yml)
Trigger: Pull requests targeting main that touch any of the following paths:
common/config/**common/*.gradle.ktsandroid/src/**android/*.gradle.kts
Runner: ubuntu-22.04
Purpose:
Check that the Android plugin build completes successfully after each PR submission.
What it does:
Builds a debug Android AAR by invoking the buildAndroidDebug Gradle task from the common project directory. Before running the build, the workflow sets up the full toolchain: Node.js 22 (via actions/setup-node, or a manual tarball download when run locally with act), JDK 17 (Temurin distribution), and the Android SDK.
Steps summary:
| Step | Description |
|---|---|
| Checkout | Checks out the repository |
| Install Node (act) | Manual Node.js 22 install for local act runs |
| Setup Node (GitHub) | Standard Node.js 22 setup for GitHub-hosted runners |
| Set up JDK | Installs Temurin JDK 17 |
| Setup Android SDK | Installs the Android SDK via android-actions/setup-android |
| Build Android debug | Runs ./gradlew buildAndroidDebug from common/ |
Android Code Style (android-style.yml)
Trigger: Pull requests targeting main that touch any of the following paths:
android/src/**/*.javaandroid/src/**/*.ktandroid/src/**/*.xml
Runner: ubuntu-22.04
What it does:
Enforces code style on all Android source files. Four independent checks are run in sequence:
- ktlint — validates Kotlin source files against the project's ktlint rules.
- Checkstyle — validates Java source files using the project's Checkstyle configuration at
.github/config/checkstyle.xml. Checkstyle is downloaded directly from its GitHub releases at version 13.3.0. - Prettier + XML plugin — validates Android XML resource files using Prettier with the
@prettier/plugin-xmlplugin, configured by.github/config/prettier.xml.json. - editorconfig-checker — verifies that all
.java,.kt, and.xmlfiles comply with the repository's EditorConfig rules (final newlines, no trailing whitespace).
Steps summary:
| Step | Description |
|---|---|
| Checkout | Checks out the repository |
| Set up Java | Installs Temurin JDK 21 |
| Install ktlint | Uses the shared .github/actions/install-ktlint composite action |
| Run ktlint | Lints android/src/**/*.kt |
| Run Checkstyle | Downloads and runs Checkstyle 13.3.0 against android/src |
| Install Node | Uses the shared .github/actions/install-node composite action |
| Install Prettier and XML plugin | Runs npm install --save-dev prettier @prettier/plugin-xml |
| Check XML formatting | Runs npx prettier --check on android/src/**/*.xml |
| Install editorconfig-checker | Uses the shared .github/actions/install-ec composite action |
| Verify EditorConfig | Runs editorconfig-checker on all .java, .kt, and .xml files under android/src |
Documentation (docs.yml)
Trigger: Pushes to main that touch any of the following paths:
docs/content/**.github/workflows/docs.ymldocs/zensical.toml
Runner: ubuntu-22.04
Permissions: contents: read, pages: write, id-token: write
Concurrency: Only one deployment runs at a time (group: pages); any in-progress run is cancelled when a new one starts.
What it does:
Builds and deploys the project's documentation site to GitHub Pages using the Zensical static site generator. The built site is written to docs/site/, uploaded as a Pages artifact, and then deployed.
Steps summary:
| Step | Description |
|---|---|
| Configure Pages | Configures the GitHub Pages environment |
| Checkout | Checks out the repository |
| Setup Python | Installs Python 3.x |
| Install Dependencies | Upgrades pip and installs zensical |
| Build Documentation | Runs zensical build --clean --config-file docs/zensical.toml |
| Upload Pages | Uploads docs/site as a Pages artifact |
| Deploy Pages | Deploys the uploaded artifact to GitHub Pages |
GDScript Code Style (gdscript-style.yml)
Trigger: Pull requests targeting main that touch any of the following paths:
addon/src/**/*.gddemo/**/*.gd
Runner: ubuntu-22.04
What it does:
Validates GDScript formatting across the addon and demo directories using two tools:
- gdformat (from gdtoolkit) — checks formatting compliance with
--check(dry run). The.gdformatrcconfiguration file is copied from.github/config/to the working directory before checking. Certain auto-generated files are excluded:AdmobPlugin.gdandMediationNetwork.gdin the addon, andMain.gdin the demo. Files underdemo/addons/are also excluded. - editorconfig-checker — verifies final newlines and no trailing whitespace on all
.gdfiles (same exclusion fordemo/addons/).
Steps summary:
| Step | Description |
|---|---|
| Checkout | Checks out the repository |
| Install gdtoolkit | Creates a Python venv at /opt/gdtoolkit, installs gdtoolkit, adds it to $GITHUB_PATH |
| Verify Formatting | Copies .gdformatrc, runs gdformat --check on addon and demo .gd files |
| Install editorconfig-checker | Uses the shared .github/actions/install-ec composite action |
| Verify EditorConfig | Runs editorconfig-checker on all .gd files in addon and demo |
Gradle Kotlin DSL Style (gradle-kts-style.yml)
Trigger: Pull requests targeting main that touch any of the following paths:
addon/*.gradle.ktsandroid/*.gradle.ktscommon/*.gradle.kts
Runner: ubuntu-22.04
What it does:
Validates formatting of all Gradle Kotlin DSL build files using two tools:
- ktlint 1.8.0 — checks all
*.gradle.ktsfiles at the root ofaddon/,android/, andcommon/. - editorconfig-checker 3.6.1 — verifies final newlines and no trailing whitespace on the same set of files.
Steps summary:
| Step | Description |
|---|---|
| Checkout | Checks out the repository |
| Install Node | Uses the shared .github/actions/install-node composite action |
| Set up JDK | Installs Temurin JDK 17 |
| Install ktlint | Uses the shared .github/actions/install-ktlint composite action with version 1.8.0 |
| Run ktlint | Runs ktlint on all *.gradle.kts files in addon/, android/, and common/ |
| Install editorconfig-checker | Uses the shared .github/actions/install-ec composite action with version 3.6.1 |
| Verify EditorConfig | Runs editorconfig-checker on the same set of files |
iOS Build (ios-build.yml)
Trigger: Pull requests targeting main that touch any of the following paths:
common/config/**common/*.gradle.ktsios/src/**ios/config/**ios/*.gradle.ktsios/*.xcodeproj/**
Runner: macos-latest
Purpose:
Check that the iOS plugin build completes successfully after each PR submission.
What it does:
Builds a debug iOS xcframework. The workflow first downloads the Godot engine sources and generates the Godot header files (both via dedicated Gradle tasks that delegate to script/build_ios.sh), then runs the full buildiOSDebug Gradle task. This task depends on GDScript generation, iOS config generation, SPM dependency management, and the Xcode build itself.
Steps summary:
| Step | Description |
|---|---|
| Checkout | Checks out the repository |
| Install Node | Uses the shared .github/actions/install-node composite action |
| Set up JDK | Installs Temurin JDK 17 |
| Download Godot | Runs ./gradlew downloadGodot from common/ |
| Generate Godot Headers | Runs ./gradlew generateGodotHeaders from common/ |
| Build iOS debug | Runs ./gradlew buildiOSDebug from common/ |
iOS Code Style (ios-style.yml)
Trigger: Pull requests targeting main that touch any of the following paths:
ios/src/**/*.mios/src/**/*.mmios/src/**/*.hios/src/**/*.swift
Runner: macos-latest
What it does:
Validates code style on all iOS source files. Three independent checks are run:
- SwiftLint — lints Swift files under
ios/src/using the configuration at.github/config/.swiftlint.yml. Output is formatted for GitHub Actions annotations. - clang-format — performs a dry-run check (
--dry-run --Werror) on all Objective-C and Objective-C++ files (.m,.mm,.h) using the style rules in.github/config/.clang-format. - editorconfig-checker — verifies final newlines and no trailing whitespace on all
.m,.mm,.h, and.swiftfiles (installed via Homebrew).
Steps summary:
| Step | Description |
|---|---|
| Checkout | Checks out the repository |
| Install SwiftLint | Runs brew install swiftlint |
| Install clang-format | Runs brew install clang-format |
| Run SwiftLint | Runs swiftlint lint on all *.swift files under ios/src |
| Run clang-format check | Runs clang-format --dry-run --Werror on all .m, .mm, .h files under ios/src |
| Install editorconfig-checker | Runs brew install editorconfig-checker |
| Verify EditorConfig | Runs editorconfig-checker on all iOS source files |
Properties File Style (properties-style.yml)
Trigger: Pull requests targeting main that touch any of the following paths:
common/config/*.propertiesios/config/*.properties
Runner: ubuntu-22.04
What it does:
Validates that all .properties configuration files comply with the repository's EditorConfig rules (final newlines and no trailing whitespace) using editorconfig-checker.
Steps summary:
| Step | Description |
|---|---|
| Checkout | Checks out the repository |
| Install editorconfig-checker | Uses the shared .github/actions/install-ec composite action |
| Validate properties formatting | Runs editorconfig-checker on common/config/*.properties and ios/config/*.properties |
Script Code Style (script-style.yml)
Trigger: Pull requests targeting main that touch any of the following paths:
script/**/*.shscript/**/*.rb
Runner: ubuntu-22.04
What it does:
Validates coding style for all shell and Ruby scripts under script/. Three tools are run in sequence:
- ShellCheck (v0.10.0) — static analysis for shell scripts (
*.sh). Downloaded as a pre-built binary. - RuboCop (1.85.0) — lints Ruby scripts using the configuration at
.github/config/.rubocop.yml. - editorconfig-checker — verifies final newlines and no trailing whitespace on all
.shand.rbfiles.
Steps summary:
| Step | Description |
|---|---|
| Checkout | Checks out the repository |
| Install Node | Uses the shared .github/actions/install-node composite action |
| Install ShellCheck | Downloads ShellCheck v0.10.0 binary and adds it to $GITHUB_PATH |
| Run ShellCheck | Runs shellcheck on all *.sh files under script/ |
| Set up Ruby | Installs Ruby 3.2 via ruby/setup-ruby with bundler cache |
| Install RuboCop | Runs gem install rubocop -v 1.85.0 |
| Run RuboCop | Runs rubocop --config .github/config/.rubocop.yml script |
| Install editorconfig-checker | Uses the shared .github/actions/install-ec composite action |
| Verify EditorConfig | Runs editorconfig-checker on all .sh and .rb files under script/ |
Shared Composite Actions
Several workflows reference local composite actions under .github/actions/ rather than repeating installation steps inline. The following shared actions are used across multiple workflows:
| Action | Used by |
|---|---|
install-node |
android-style, gradle-kts-style, ios-build, script-style |
install-ktlint |
android-style, gradle-kts-style |
install-ec |
android-style, gdscript-style, gradle-kts-style, properties-style, script-style |