diff options
Diffstat (limited to '.github')
-rw-r--r-- | .github/CODEOWNERS | 13 | ||||
-rw-r--r-- | .github/ISSUE_TEMPLATE/bug_report.yml | 7 | ||||
-rw-r--r-- | .github/PULL_REQUEST_TEMPLATE.md | 12 | ||||
-rw-r--r-- | .github/actions/godot-build/action.yml | 20 | ||||
-rw-r--r-- | .github/actions/godot-cache/action.yml | 2 | ||||
-rw-r--r-- | .github/actions/godot-deps/action.yml | 2 | ||||
-rw-r--r-- | .github/actions/upload-artifact/action.yml | 2 | ||||
-rw-r--r-- | .github/workflows/android_builds.yml | 29 | ||||
-rw-r--r-- | .github/workflows/ios_builds.yml | 12 | ||||
-rw-r--r-- | .github/workflows/linux_builds.yml | 154 | ||||
-rw-r--r-- | .github/workflows/macos_builds.yml | 25 | ||||
-rw-r--r-- | .github/workflows/static_checks.yml | 58 | ||||
-rw-r--r-- | .github/workflows/web_builds.yml (renamed from .github/workflows/javascript_builds.yml) | 28 | ||||
-rw-r--r-- | .github/workflows/windows_builds.yml | 27 |
14 files changed, 205 insertions, 186 deletions
diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index ebbbe345fd..031582bc63 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -15,6 +15,7 @@ SCsub @godotengine/buildsystem /core/ @godotengine/core /core/crypto/ @godotengine/network /core/debugger/ @godotengine/debugger +/core/extension/ @godotengine/gdextension /core/input/ @godotengine/input # Doc @@ -36,6 +37,7 @@ doc_classes/* @godotengine/documentation ## Rendering /drivers/dummy/ @godotengine/rendering +/drivers/gles3/ @godotengine/rendering /drivers/spirv-reflect/ @godotengine/rendering /drivers/vulkan/ @godotengine/rendering @@ -110,21 +112,18 @@ doc_classes/* @godotengine/documentation /modules/xatlas_unwrap/ @godotengine/rendering ## Scripting -/modules/gdnative/ @godotengine/gdnative /modules/gdscript/ @godotengine/gdscript /modules/jsonrpc/ @godotengine/gdscript -/modules/mono/ @godotengine/mono -/modules/visual_script/ @godotengine/visualscript +/modules/mono/ @godotengine/dotnet ## Text /modules/freetype/ @godotengine/buildsystem -/modules/gdnative/text/ @godotengine/gui-nodes /modules/text_server_adv/ @godotengine/gui-nodes /modules/text_server_fb/ @godotengine/gui-nodes ## XR /modules/camera/ @godotengine/xr -/modules/gdnative/xr/ @godotengine/xr +/modules/gdextension/xr/ @godotengine/xr /modules/mobile_vr/ @godotengine/xr /modules/webxr/ @godotengine/xr @@ -139,10 +138,10 @@ doc_classes/* @godotengine/documentation # Platform /platform/android/ @godotengine/android -/platform/iphone/ @godotengine/ios +/platform/ios/ @godotengine/ios /platform/javascript/ @godotengine/html5 /platform/linuxbsd/ @godotengine/linux-bsd -/platform/osx/ @godotengine/macos +/platform/macos/ @godotengine/macos /platform/uwp/ @godotengine/uwp /platform/windows/ @godotengine/windows diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 2c2a963a26..0b4abac1af 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -52,5 +52,8 @@ body: attributes: label: Minimal reproduction project description: | - A small Godot project which reproduces the issue. Highly recommended to speed up troubleshooting. - Drag and drop a ZIP archive to upload it. + A small Godot project which reproduces the issue, with no unnecessary files included. Be sure to not include the `.godot` folder in the archive (but keep `project.godot`). + Required, unless the reproduction steps are trivial and don't require any project files to be followed. In this case, write "N/A" in the field. + Drag and drop a ZIP archive to upload it. **Do not select another field until the project is done uploading.** + validations: + required: true diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 332ed2b72f..8dc712c78d 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,11 +1,7 @@ <!-- -Pull requests should always be made for the `master` branch first, as that's -where development happens and the source of all future stable release branches. +Please target the `master` branch in priority. +PRs can target `3.x` if the same change was done in `master`, or is not relevant there. -Relevant fixes are cherry-picked for stable branches as needed. - -Do not create a pull request for stable branches unless the change is already -available in the `master` branch and it cannot be easily cherry-picked. -Alternatively, if the change is only relevant for that branch (e.g. rendering -fixes for the 3.2 branch). +Relevant fixes are cherry-picked for stable branches as needed by maintainers. +You can mention in the description if the change is compatible with `3.x`. --> diff --git a/.github/actions/godot-build/action.yml b/.github/actions/godot-build/action.yml index 5ed64e7de2..377480b123 100644 --- a/.github/actions/godot-build/action.yml +++ b/.github/actions/godot-build/action.yml @@ -2,16 +2,13 @@ name: Build Godot description: Build Godot with the provided options. inputs: target: - description: The scons target (debug/release_debug/release). - default: "debug" - tools: - description: If tools are to be built. - default: false + description: Build target (editor, template_release, template_debug). + default: "editor" tests: - description: If tests are to be built. + description: Unit tests. default: false platform: - description: The Godot platform to build. + description: Target platform. required: false sconsflags: default: "" @@ -20,7 +17,9 @@ inputs: default: "${{ github.workspace }}/.scons-cache/" scons-cache-limit: description: The scons cache size limit. - default: 4096 + # actions/cache has 10 GiB limit, and GitHub runners have a 14 GiB disk. + # Limit to 7 GiB to avoid having the extracted cache fill the disk. + default: 7168 runs: using: "composite" steps: @@ -31,6 +30,7 @@ runs: SCONS_CACHE: ${{ inputs.scons-cache }} SCONS_CACHE_LIMIT: ${{ inputs.scons-cache-limit }} run: | - echo "Building with flags:" ${{ env.SCONSFLAGS }} - scons p=${{ inputs.platform }} target=${{ inputs.target }} tools=${{ inputs.tools }} tests=${{ inputs.tests }} --jobs=2 ${{ env.SCONSFLAGS }} + echo "Building with flags:" platform=${{ inputs.platform }} target=${{ inputs.target }} tests=${{ inputs.tests }} ${{ env.SCONSFLAGS }} + if [ "${{ inputs.target }}" != "editor" ]; then rm -rf editor; fi # Ensure we don't include editor code. + scons platform=${{ inputs.platform }} target=${{ inputs.target }} tests=${{ inputs.tests }} ${{ env.SCONSFLAGS }} ls -l bin/ diff --git a/.github/actions/godot-cache/action.yml b/.github/actions/godot-cache/action.yml index db14a0b97a..2d7afc8514 100644 --- a/.github/actions/godot-cache/action.yml +++ b/.github/actions/godot-cache/action.yml @@ -12,7 +12,7 @@ runs: steps: # Upload cache on completion and check it out now - name: Load .scons_cache directory - uses: actions/cache@v2 + uses: actions/cache@v3 with: path: ${{inputs.scons-cache}} key: ${{inputs.cache-name}}-${{env.GODOT_BASE_BRANCH}}-${{github.ref}}-${{github.sha}} diff --git a/.github/actions/godot-deps/action.yml b/.github/actions/godot-deps/action.yml index ee4d7d3751..e99167ff2b 100644 --- a/.github/actions/godot-deps/action.yml +++ b/.github/actions/godot-deps/action.yml @@ -12,7 +12,7 @@ runs: steps: # Use python 3.x release (works cross platform) - name: Set up Python 3.x - uses: actions/setup-python@v2 + uses: actions/setup-python@v4 with: # Semantic version range syntax or exact version of a Python version python-version: ${{ inputs.python-version }} diff --git a/.github/actions/upload-artifact/action.yml b/.github/actions/upload-artifact/action.yml index bc1871b914..ae0e634cbf 100644 --- a/.github/actions/upload-artifact/action.yml +++ b/.github/actions/upload-artifact/action.yml @@ -12,7 +12,7 @@ runs: using: "composite" steps: - name: Upload Godot Artifact - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: ${{ inputs.name }} path: ${{ inputs.path }} diff --git a/.github/workflows/android_builds.yml b/.github/workflows/android_builds.yml index dd3622f1f0..666b10d016 100644 --- a/.github/workflows/android_builds.yml +++ b/.github/workflows/android_builds.yml @@ -3,6 +3,7 @@ on: [push, pull_request] # Global Settings env: + # Only used for the cache key. Increment version to force clean build. GODOT_BASE_BRANCH: master SCONSFLAGS: verbose=yes warnings=extra werror=yes debug_symbols=no module_text_server_fb_enabled=yes @@ -13,21 +14,15 @@ concurrency: jobs: android-template: runs-on: "ubuntu-20.04" - name: Template (target=release, tools=no) + name: Template (target=template_release) steps: - - uses: actions/checkout@v2 - - # Azure repositories are not reliable, we need to prevent azure giving us packages. - - name: Make apt sources.list use the default Ubuntu repositories - run: | - sudo rm -f /etc/apt/sources.list.d/* - sudo cp -f misc/ci/sources.list /etc/apt/sources.list - sudo apt-get update + - uses: actions/checkout@v3 - name: Set up Java 11 - uses: actions/setup-java@v1 + uses: actions/setup-java@v3 with: + distribution: temurin java-version: 11 - name: Setup Godot build cache @@ -37,22 +32,20 @@ jobs: - name: Setup python and scons uses: ./.github/actions/godot-deps - - name: Compilation (armv7) + - name: Compilation (arm32) uses: ./.github/actions/godot-build with: - sconsflags: ${{ env.SCONSFLAGS }} android_arch=armv7 + sconsflags: ${{ env.SCONSFLAGS }} arch=arm32 platform: android - target: release - tools: false + target: template_release tests: false - - name: Compilation (arm64v8) + - name: Compilation (arm64) uses: ./.github/actions/godot-build with: - sconsflags: ${{ env.SCONSFLAGS }} android_arch=arm64v8 + sconsflags: ${{ env.SCONSFLAGS }} arch=arm64 platform: android - target: release - tools: false + target: template_release tests: false - name: Generate Godot templates diff --git a/.github/workflows/ios_builds.yml b/.github/workflows/ios_builds.yml index 721d574dbe..0ea7a4ccc3 100644 --- a/.github/workflows/ios_builds.yml +++ b/.github/workflows/ios_builds.yml @@ -3,6 +3,7 @@ on: [push, pull_request] # Global Settings env: + # Only used for the cache key. Increment version to force clean build. GODOT_BASE_BRANCH: master SCONSFLAGS: verbose=yes warnings=extra werror=yes debug_symbols=no module_text_server_fb_enabled=yes @@ -13,10 +14,10 @@ concurrency: jobs: ios-template: runs-on: "macos-latest" - name: Template (target=release, tools=no) + name: Template (target=template_release) steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Setup Godot build cache uses: ./.github/actions/godot-cache @@ -25,13 +26,12 @@ jobs: - name: Setup python and scons uses: ./.github/actions/godot-deps - - name: Compilation (armv7) + - name: Compilation (arm64) uses: ./.github/actions/godot-build with: sconsflags: ${{ env.SCONSFLAGS }} - platform: iphone - target: release - tools: false + platform: ios + target: template_release tests: false - name: Upload artifact diff --git a/.github/workflows/linux_builds.yml b/.github/workflows/linux_builds.yml index 92c2e3c516..0000a061d7 100644 --- a/.github/workflows/linux_builds.yml +++ b/.github/workflows/linux_builds.yml @@ -3,8 +3,11 @@ on: [push, pull_request] # Global Settings env: + # Only used for the cache key. Increment version to force clean build. GODOT_BASE_BRANCH: master SCONSFLAGS: verbose=yes warnings=extra werror=yes module_text_server_fb_enabled=yes + DOTNET_NOLOGO: true + DOTNET_CLI_TELEMETRY_OPTOUT: true concurrency: group: ci-${{github.actor}}-${{github.head_ref || github.run_number}}-${{github.ref}}-linux @@ -18,61 +21,66 @@ jobs: fail-fast: false matrix: include: - - name: Editor w/ Mono (target=release_debug, tools=yes, tests=yes) + - name: Editor w/ Mono (target=editor) cache-name: linux-editor-mono - target: release_debug - tools: true + target: editor tests: false # Disabled due freeze caused by mix Mono build and CI - sconsflags: module_mono_enabled=yes mono_glue=no + sconsflags: module_mono_enabled=yes doc-test: true - bin: "./bin/godot.linuxbsd.opt.tools.64.mono" + bin: "./bin/godot.linuxbsd.editor.x86_64.mono" build-mono: true + proj-conv: true artifact: true - - name: Editor with doubles and sanitizers (target=debug, tools=yes, float=64, tests=yes, use_asan=yes, use_ubsan=yes) + - name: Editor with doubles and GCC sanitizers (target=editor, tests=yes, dev_build=yes, precision=double, use_asan=yes, use_ubsan=yes, linker=gold) cache-name: linux-editor-double-sanitizers - target: debug - tools: true + target: editor tests: true - sconsflags: float=64 use_asan=yes use_ubsan=yes + sconsflags: dev_build=yes precision=double use_asan=yes use_ubsan=yes linker=gold proj-test: true + # Can be turned off for PRs that intentionally break compat with godot-cpp, + # until both the upstream PR and the matching godot-cpp changes are merged. godot-cpp-test: true - bin: "./bin/godot.linuxbsd.double.tools.64.san" + bin: "./bin/godot.linuxbsd.editor.dev.double.x86_64.san" build-mono: false # Skip 2GiB artifact speeding up action. artifact: false - - name: Template w/ Mono (target=release, tools=no) + - name: Editor with clang sanitizers (target=editor, tests=yes, dev_build=yes, use_asan=yes, use_ubsan=yes, use_llvm=yes, linker=lld) + cache-name: linux-editor-llvm-sanitizers + target: editor + tests: true + sconsflags: dev_build=yes use_asan=yes use_ubsan=yes use_llvm=yes linker=lld + bin: "./bin/godot.linuxbsd.editor.dev.x86_64.llvm.san" + build-mono: false + # Skip 2GiB artifact speeding up action. + artifact: false + + - name: Template w/ Mono (target=template_release) cache-name: linux-template-mono - target: release - tools: false + target: template_release tests: false - sconsflags: module_mono_enabled=yes mono_glue=no debug_symbols=no + sconsflags: module_mono_enabled=yes build-mono: false artifact: true - - name: Minimal Template (target=release, tools=no, everything disabled) + - name: Minimal template (target=template_release, everything disabled) cache-name: linux-template-minimal - target: release - tools: false + target: template_release tests: false sconsflags: modules_enabled_by_default=no disable_3d=yes disable_advanced_gui=yes deprecated=no minizip=no artifact: true steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - - name: Linux dependencies - shell: bash + # Need newer mesa for lavapipe to work properly. + - name: Linux dependencies for tests + if: ${{ matrix.proj-test }} run: | - # Azure repositories are not reliable, we need to prevent azure giving us packages. - sudo rm -f /etc/apt/sources.list.d/* - sudo cp -f misc/ci/sources.list /etc/apt/sources.list - sudo apt-get update - # The actual dependencies - sudo apt-get install build-essential pkg-config libx11-dev libxcursor-dev \ - libxinerama-dev libgl1-mesa-dev libglu-dev libasound2-dev libpulse-dev \ - libdbus-1-dev libudev-dev libxi-dev libxrandr-dev yasm xvfb wget unzip + sudo rm -f /etc/apt/sources.list.d/microsoft-prod.list + sudo add-apt-repository ppa:kisak/kisak-mesa + sudo apt-get install -qq mesa-vulkan-drivers - name: Setup Godot build cache uses: ./.github/actions/godot-cache @@ -83,34 +91,39 @@ jobs: - name: Setup python and scons uses: ./.github/actions/godot-deps + - name: Set up .NET Sdk + uses: actions/setup-dotnet@v2 + if: ${{ matrix.build-mono }} + with: + dotnet-version: '6.0.x' + + - name: Setup GCC problem matcher + uses: ammaraskar/gcc-problem-matcher@master + - name: Compilation uses: ./.github/actions/godot-build with: sconsflags: ${{ env.SCONSFLAGS }} ${{ matrix.sconsflags }} platform: linuxbsd target: ${{ matrix.target }} - tools: ${{ matrix.tools }} tests: ${{ matrix.tests }} - - name: Generate Mono glue + - name: Generate C# glue if: ${{ matrix.build-mono }} run: | - ${{ matrix.bin }} --headless --generate-mono-glue modules/mono/glue || true + ${{ matrix.bin }} --headless --generate-mono-glue ./modules/mono/glue || true - # Rebuild with mono - - name: Compilation (mono_glue=yes) - uses: ./.github/actions/godot-build + - name: Build .NET solutions if: ${{ matrix.build-mono }} - with: - sconsflags: ${{ env.SCONSFLAGS }} ${{ matrix.sconsflags }} mono_glue=yes - platform: linuxbsd - target: ${{ matrix.target }} - tools: ${{ matrix.tools }} + run: | + ./modules/mono/build_scripts/build_assemblies.py --godot-output-dir=./bin --godot-platform=linuxbsd # Execute unit tests for the editor - name: Unit tests if: ${{ matrix.tests }} run: | + ${{ matrix.bin }} --version + ${{ matrix.bin }} --help ${{ matrix.bin }} --test --headless # Check class reference @@ -122,82 +135,75 @@ jobs: ${{ matrix.bin }} --doctool --headless 2>&1 > /dev/null || true git diff --color --exit-code && ! git ls-files --others --exclude-standard | sed -e 's/^/New doc file missing in PR: /' | grep 'xml$' - # Download, unzip and setup SwiftShader library [4466040] - - name: Download SwiftShader - if: ${{ matrix.tests }} + # Test 3.x -> 4.x project converter + - name: Test project converter + if: ${{ matrix.proj-conv }} run: | - wget https://github.com/qarmin/gtk_library_store/releases/download/3.24.0/swiftshader2.zip - unzip swiftshader2.zip - rm swiftshader2.zip - curr="$(pwd)/libvk_swiftshader.so" - sed -i "s|PATH_TO_CHANGE|$curr|" vk_swiftshader_icd.json + mkdir converter_test + cd converter_test + touch project.godot + ../${{ matrix.bin }} --headless --validate-conversion-3to4 + cd .. + rm converter_test -rf # Download and extract zip archive with project, folder is renamed to be able to easy change used project - name: Download test project if: ${{ matrix.proj-test }} run: | - wget https://github.com/qarmin/RegressionTestProject/archive/4.0.zip + wget https://github.com/godotengine/regression-test-project/archive/4.0.zip unzip 4.0.zip - mv "RegressionTestProject-4.0" "test_project" + mv "regression-test-project-4.0" "test_project" # Editor is quite complicated piece of software, so it is easy to introduce bug here - - name: Open and close editor + - name: Open and close editor (Vulkan) + if: ${{ matrix.proj-test }} + run: | + xvfb-run ${{ matrix.bin }} --audio-driver Dummy --editor --quit --path test_project 2>&1 | tee sanitizers_log.txt || true + misc/scripts/check_ci_log.py sanitizers_log.txt + + - name: Open and close editor (GLES3) if: ${{ matrix.proj-test }} run: | - VK_ICD_FILENAMES=$(pwd)/vk_swiftshader_icd.json DRI_PRIME=0 xvfb-run ${{ matrix.bin }} --audio-driver Dummy -e -q --path test_project 2>&1 | tee sanitizers_log.txt || true + DRI_PRIME=0 xvfb-run ${{ matrix.bin }} --audio-driver Dummy --rendering-driver opengl3 --editor --quit --path test_project 2>&1 | tee sanitizers_log.txt || true misc/scripts/check_ci_log.py sanitizers_log.txt # Run test project - name: Run project if: ${{ matrix.proj-test }} run: | - VK_ICD_FILENAMES=$(pwd)/vk_swiftshader_icd.json DRI_PRIME=0 xvfb-run ${{ matrix.bin }} 40 --audio-driver Dummy --path test_project 2>&1 | tee sanitizers_log.txt || true + xvfb-run ${{ matrix.bin }} 40 --audio-driver Dummy --path test_project 2>&1 | tee sanitizers_log.txt || true misc/scripts/check_ci_log.py sanitizers_log.txt # Checkout godot-cpp - name: Checkout godot-cpp if: ${{ matrix.godot-cpp-test }} - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: repository: godotengine/godot-cpp submodules: 'recursive' path: 'godot-cpp' - # Check extension API - - name: Check for extension api updates + # Dump GDExtension interface and API + - name: Dump GDExtension interface and API for godot-cpp build if: ${{ matrix.godot-cpp-test }} run: | - echo "Running --dump-extension-api to create extensions api." - VK_ICD_FILENAMES=$(pwd)/vk_swiftshader_icd.json DRI_PRIME=0 xvfb-run ${{ matrix.bin }} --audio-driver Dummy --dump-extension-api 2>&1 > /dev/null || true - misc/scripts/compare_extension_api.py godot-cpp/godot-headers/extension_api.json extension_api.json - - # Copy new extension API files into place - - name: Copy new extension API files into place - if: ${{ matrix.godot-cpp-test }} - run: | - cp -f extension_api.json godot-cpp/godot-headers/ - cp -f core/extension/gdnative_interface.h godot-cpp/godot-headers/godot/ - - # Build godot-cpp library - - name: Build godot-cpp library - if: ${{ matrix.godot-cpp-test }} - run: | - cd godot-cpp - scons target=${{ matrix.target }} generate_bindings=yes -j2 - cd .. + ${{ matrix.bin }} --headless --dump-gdextension-interface --dump-extension-api + cp -f gdextension_interface.h godot-cpp/gdextension/ + cp -f extension_api.json godot-cpp/gdextension/ # Build godot-cpp test extension - name: Build godot-cpp test extension if: ${{ matrix.godot-cpp-test }} run: | cd godot-cpp/test - scons target=${{ matrix.target }} -j2 + scons target=template_debug dev_build=yes cd ../.. - name: Prepare artifact if: ${{ matrix.artifact }} run: | strip bin/godot.* + chmod +x bin/godot.* - name: Upload artifact uses: ./.github/actions/upload-artifact diff --git a/.github/workflows/macos_builds.yml b/.github/workflows/macos_builds.yml index dec3abe52b..dd3db3270b 100644 --- a/.github/workflows/macos_builds.yml +++ b/.github/workflows/macos_builds.yml @@ -3,6 +3,7 @@ on: [push, pull_request] # Global Settings env: + # Only used for the cache key. Increment version to force clean build. GODOT_BASE_BRANCH: master SCONSFLAGS: verbose=yes warnings=extra werror=yes module_text_server_fb_enabled=yes @@ -18,22 +19,20 @@ jobs: fail-fast: false matrix: include: - - name: Editor (target=release_debug, tools=yes, tests=yes) + - name: Editor (target=editor, tests=yes) cache-name: macos-editor - target: release_debug - tools: true + target: editor tests: true - bin: "./bin/godot.osx.opt.tools.64" + bin: "./bin/godot.macos.editor.x86_64" - - name: Template (target=release, tools=no) + - name: Template (target=template_release) cache-name: macos-template - target: release - tools: false + target: template_release tests: false sconsflags: debug_symbols=no steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Setup Godot build cache uses: ./.github/actions/godot-cache @@ -44,24 +43,30 @@ jobs: - name: Setup python and scons uses: ./.github/actions/godot-deps + - name: Setup Vulkan SDK + run: | + sh misc/scripts/install_vulkan_sdk_macos.sh + - name: Compilation uses: ./.github/actions/godot-build with: sconsflags: ${{ env.SCONSFLAGS }} - platform: osx + platform: macos target: ${{ matrix.target }} - tools: ${{ matrix.tools }} tests: ${{ matrix.tests }} # Execute unit tests for the editor - name: Unit tests if: ${{ matrix.tests }} run: | + ${{ matrix.bin }} --version + ${{ matrix.bin }} --help ${{ matrix.bin }} --test - name: Prepare artifact run: | strip bin/godot.* + chmod +x bin/godot.* - name: Upload artifact uses: ./.github/actions/upload-artifact diff --git a/.github/workflows/static_checks.yml b/.github/workflows/static_checks.yml index 1f8888885a..6c92922185 100644 --- a/.github/workflows/static_checks.yml +++ b/.github/workflows/static_checks.yml @@ -11,43 +11,65 @@ jobs: runs-on: ubuntu-20.04 steps: - name: Checkout - uses: actions/checkout@v2 - - # Azure repositories are not reliable, we need to prevent Azure giving us packages. - - name: Make apt sources.list use the default Ubuntu repositories - run: | - sudo rm -f /etc/apt/sources.list.d/* - sudo cp -f misc/ci/sources.list /etc/apt/sources.list - wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add - - sudo apt-add-repository "deb http://apt.llvm.org/focal/ llvm-toolchain-focal-13 main" - sudo apt-get update + uses: actions/checkout@v3 - name: Install dependencies run: | - sudo apt-get install -qq dos2unix recode clang-format-13 - sudo update-alternatives --remove-all clang-format - sudo update-alternatives --install /usr/bin/clang-format clang-format /usr/bin/clang-format-13 100 - sudo pip3 install black==21.10b0 pygments + sudo rm -f /etc/apt/sources.list.d/microsoft-prod.list + wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add - + sudo apt-add-repository "deb http://apt.llvm.org/focal/ llvm-toolchain-focal-15 main" + sudo apt-get install -qq dos2unix clang-format-15 libxml2-utils python3-pip moreutils + sudo update-alternatives --remove-all clang-format || true + sudo update-alternatives --install /usr/bin/clang-format clang-format /usr/bin/clang-format-15 100 + sudo pip3 install black==22.3.0 pygments pytest==7.1.2 mypy==0.971 - name: File formatting checks (file_format.sh) run: | bash ./misc/scripts/file_format.sh - - name: Style checks via clang-format (clang_format.sh) + - name: Header guards formatting checks (header_guards.sh) run: | - bash ./misc/scripts/clang_format.sh + bash ./misc/scripts/header_guards.sh - name: Python style checks via black (black_format.sh) run: | bash ./misc/scripts/black_format.sh + - name: Python scripts static analysis (mypy_check.sh) + run: | + bash ./misc/scripts/mypy_check.sh + + - name: Python builders checks via pytest (pytest_builders.sh) + run: | + bash ./misc/scripts/pytest_builders.sh + - name: JavaScript style and documentation checks via ESLint and JSDoc run: | - cd platform/javascript + cd platform/web npm ci npm run lint npm run docs -- -d dry-run + - name: Class reference schema checks + run: | + xmllint --noout --schema doc/class.xsd doc/classes/*.xml modules/*/doc_classes/*.xml + - name: Documentation checks run: | - doc/tools/make_rst.py --dry-run doc/classes modules + doc/tools/make_rst.py --dry-run --color doc/classes modules + + - name: Style checks via clang-format (clang_format.sh) + run: | + bash ./misc/scripts/clang_format.sh + + - name: Style checks via dotnet format (dotnet_format.sh) + run: | + bash ./misc/scripts/dotnet_format.sh + + - name: Spell checks via codespell + uses: codespell-project/actions-codespell@v1 + with: + skip: ./.*,./**/.*,./bin,./thirdparty,*.desktop,*.gen.*,*.po,*.pot,*.rc,./AUTHORS.md,./COPYRIGHT.txt,./DONORS.md,./core/input/gamecontrollerdb.txt,./core/string/locales.h,./editor/project_converter_3_to_4.cpp,./misc/scripts/codespell.sh,./platform/android/java/lib/src/com,./platform/web/node_modules,./platform/web/package-lock.json + check_hidden: false + ignore_words_list: curvelinear,doubleclick,expct,findn,gird,hel,inout,lod,nd,numer,ot,te + only_warn: true diff --git a/.github/workflows/javascript_builds.yml b/.github/workflows/web_builds.yml index 9163baab0f..f684b838e1 100644 --- a/.github/workflows/javascript_builds.yml +++ b/.github/workflows/web_builds.yml @@ -1,35 +1,28 @@ -name: 🌐 JavaScript Builds +name: 🌐 Web Builds on: [push, pull_request] # Global Settings env: + # Only used for the cache key. Increment version to force clean build. GODOT_BASE_BRANCH: master SCONSFLAGS: verbose=yes warnings=extra werror=yes debug_symbols=no - EM_VERSION: 2.0.27 + EM_VERSION: 3.1.18 EM_CACHE_FOLDER: "emsdk-cache" concurrency: - group: ci-${{github.actor}}-${{github.head_ref || github.run_number}}-${{github.ref}}-javascript + group: ci-${{github.actor}}-${{github.head_ref || github.run_number}}-${{github.ref}}-web cancel-in-progress: true jobs: - javascript-template: + web-template: runs-on: "ubuntu-20.04" - name: Template (target=release, tools=no) + name: Template (target=template_release) steps: - - uses: actions/checkout@v2 - - # Additional cache for Emscripten generated system libraries - - name: Load Emscripten cache - id: javascript-template-emscripten-cache - uses: actions/cache@v2 - with: - path: ${{env.EM_CACHE_FOLDER}} - key: ${{env.EM_VERSION}}-${{github.job}} + - uses: actions/checkout@v3 - name: Set up Emscripten latest - uses: mymindstorm/setup-emsdk@v10 + uses: mymindstorm/setup-emsdk@v11 with: version: ${{env.EM_VERSION}} actions-cache-folder: ${{env.EM_CACHE_FOLDER}} @@ -49,9 +42,8 @@ jobs: uses: ./.github/actions/godot-build with: sconsflags: ${{ env.SCONSFLAGS }} - platform: javascript - target: release - tools: false + platform: web + target: template_release tests: false - name: Upload artifact diff --git a/.github/workflows/windows_builds.yml b/.github/workflows/windows_builds.yml index ad870ae58f..7f04c3475e 100644 --- a/.github/workflows/windows_builds.yml +++ b/.github/workflows/windows_builds.yml @@ -4,8 +4,9 @@ on: [push, pull_request] # Global Settings # SCONS_CACHE for windows must be set in the build environment env: + # Only used for the cache key. Increment version to force clean build. GODOT_BASE_BRANCH: master - SCONSFLAGS: verbose=yes warnings=all werror=yes module_text_server_fb_enabled=yes + SCONSFLAGS: verbose=yes warnings=extra werror=yes module_text_server_fb_enabled=yes SCONS_CACHE_MSVC_CONFIG: true concurrency: @@ -21,22 +22,22 @@ jobs: fail-fast: false matrix: include: - - name: Editor (target=release_debug, tools=yes, tests=yes) + - name: Editor (target=editor, tests=yes) cache-name: windows-editor - target: release_debug - tools: true + target: editor tests: true - bin: "./bin/godot.windows.opt.tools.64.exe" + # Skip debug symbols, they're way too big with MSVC. + sconsflags: debug_symbols=no vsproj=yes + bin: "./bin/godot.windows.editor.x86_64.exe" - - name: Template (target=release, tools=no) + - name: Template (target=template_release, tools=no) cache-name: windows-template - target: release - tools: false + target: template_release tests: false sconsflags: debug_symbols=no steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Setup Godot build cache uses: ./.github/actions/godot-cache @@ -44,24 +45,26 @@ jobs: cache-name: ${{ matrix.cache-name }} continue-on-error: true - - name: Setup python and scons uses: ./.github/actions/godot-deps + - name: Setup MSVC problem matcher + uses: ammaraskar/msvc-problem-matcher@master + - name: Compilation uses: ./.github/actions/godot-build with: sconsflags: ${{ env.SCONSFLAGS }} ${{ matrix.sconsflags }} platform: windows target: ${{ matrix.target }} - tools: ${{ matrix.tools }} tests: ${{ matrix.tests }} - scons-cache-limit: 3072 # Execute unit tests for the editor - name: Unit tests if: ${{ matrix.tests }} run: | + ${{ matrix.bin }} --version + ${{ matrix.bin }} --help ${{ matrix.bin }} --test - name: Prepare artifact |