diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..3bc70fff --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,82 @@ +name: Continuous Integration +on: + workflow_call: + push: + pull_request: + merge_group: + +jobs: + build: + strategy: + fail-fast: false + matrix: + # Test a few selected combinations of parameters + # See https://docs.github.com/en/actions/reference/workflows-and-actions/workflow-syntax + include: + - target: { platform: linux, arch: x86_64, os: ubuntu-22.04 } + target-type: template_debug + float-precision: double + - target: { platform: windows, arch: x86_64, os: windows-latest } + target-type: template_release + float-precision: single + - target: { platform: macos, arch: universal, os: macos-latest } + target-type: template_debug + float-precision: single + - target: { platform: android, arch: arm64, os: ubuntu-22.04 } + target-type: template_debug + float-precision: single + - target: { platform: web, arch: wasm32, os: ubuntu-22.04 } + target-type: template_release + float-precision: double + + runs-on: ${{ matrix.target.os }} + steps: + # Clone this repository + - name: Checkout + uses: actions/checkout@v4 + with: + submodules: true + + # Lint + #- name: Setup clang-format + # shell: bash + # run: | + # python -m pip install clang-format + #- name: Run clang-format + # shell: bash + # run: | + # clang-format src/** --dry-run --Werror + + # Add linux x86_32 toolchain + - name: Install multilib support + if: ${{ matrix.target.platform == 'linux' && matrix.target.arch == 'x86_32' }} + run: | + sudo apt-get update && sudo apt-get install -y gcc-multilib g++-multilib + + # Setup dependencies + - name: Setup godot-cpp + uses: ./godot-cpp/.github/actions/setup-godot-cpp + with: + platform: ${{ matrix.target.platform }} + em-version: 3.1.62 + + # Build GDExtension (with caches) + + - name: Restore .scons_cache + uses: ./godot-cpp/.github/actions/godot-cache-restore + with: + scons-cache: ${{ github.workspace }}/.scons-cache/ + cache-name: ${{ matrix.target.platform }}_${{ matrix.target.arch }}_${{ matrix.float-precision }}_${{ matrix.target-type }} + + - name: Build GDExtension Debug Build + shell: sh + env: + SCONS_CACHE: ${{ github.workspace }}/.scons-cache/ + run: | + scons target=${{ matrix.target-type }} platform=${{ matrix.target.platform }} arch=${{ matrix.target.arch }} precision=${{ matrix.float-precision }} + + - name: Save .scons_cache + uses: ./godot-cpp/.github/actions/godot-cache-save + with: + scons-cache: ${{ github.workspace }}/.scons-cache/ + cache-name: ${{ matrix.target.platform }}_${{ matrix.target.arch }}_${{ matrix.float-precision }}_${{ matrix.target-type }} diff --git a/.github/workflows/builds.yml b/.github/workflows/make_build.yml similarity index 91% rename from .github/workflows/builds.yml rename to .github/workflows/make_build.yml index f22d0554..aa6459a7 100644 --- a/.github/workflows/builds.yml +++ b/.github/workflows/make_build.yml @@ -1,9 +1,6 @@ -name: Build GDExtension +name: Make a GDExtension build for all supported platforms on: - workflow_call: - push: - pull_request: - merge_group: + workflow_dispatch: jobs: build: @@ -31,7 +28,7 @@ jobs: { platform: web, arch: wasm32, os: ubuntu-22.04 }, ] target-type: [template_debug, template_release] - float-precision: [single, double] + float-precision: [single] runs-on: ${{ matrix.target.os }} steps: @@ -41,16 +38,6 @@ jobs: with: submodules: true - # Lint - #- name: Setup clang-format - # shell: bash - # run: | - # python -m pip install clang-format - #- name: Run clang-format - # shell: bash - # run: | - # clang-format src/** --dry-run --Werror - # Add linux x86_32 toolchain - name: Install multilib support if: ${{ matrix.target.platform == 'linux' && matrix.target.arch == 'x86_32' }} diff --git a/README.md b/README.md index d268b61f..a1e9a514 100644 --- a/README.md +++ b/README.md @@ -36,5 +36,9 @@ scons compiledb=yes compile_commands.json ## Usage - Actions -This repository comes with a GitHub action that builds the GDExtension for cross-platform use. It triggers automatically for each pushed change. You can find and edit it in [builds.yml](.github/workflows/builds.yml). -After a workflow run is complete, you can find the file `godot-cpp-template.zip` on the `Actions` tab on GitHub. +This repository comes with continuous integration (CI) through a GitHub action that tests building the GDExtension. +It triggers automatically for each pushed change. You can find and edit it in [builds.yml](.github/workflows/ci.yml). + +There is also a workflow ([make_build.yml](.github/workflows/make_build.yml)) that builds the GDExtension for all supported platforms that you can use to create releases. +You can trigger this workflow manually from the `Actions` tab on GitHub. +After it is complete, you can find the file `godot-cpp-template.zip` in the `Artifacts` section of the workflow run.