From 8773b8377352e5738db87dc4615dadc32c2753b2 Mon Sep 17 00:00:00 2001 From: Fabio Alessandrelli Date: Wed, 1 Sep 2021 17:26:01 +0200 Subject: [PATCH] [CI] Refactor CI actions, use sub-actions, matrices. --- .github/actions/godot-build/action.yml | 36 +++ .github/actions/godot-cache/action.yml | 22 ++ .github/actions/godot-deps/action.yml | 27 ++ .github/actions/upload-artifact/action.yml | 19 ++ .github/workflows/android_builds.yml | 62 ++--- .github/workflows/ios_builds.yml | 60 ++--- .github/workflows/javascript_builds.yml | 71 ++---- .github/workflows/linux_builds.yml | 271 +++++++-------------- .github/workflows/macos_builds.yml | 124 +++------- .github/workflows/server_builds.yml | 135 +++------- .github/workflows/windows_builds.yml | 149 ++++------- 11 files changed, 379 insertions(+), 597 deletions(-) create mode 100644 .github/actions/godot-build/action.yml create mode 100644 .github/actions/godot-cache/action.yml create mode 100644 .github/actions/godot-deps/action.yml create mode 100644 .github/actions/upload-artifact/action.yml diff --git a/.github/actions/godot-build/action.yml b/.github/actions/godot-build/action.yml new file mode 100644 index 000000000000..5ed64e7de260 --- /dev/null +++ b/.github/actions/godot-build/action.yml @@ -0,0 +1,36 @@ +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 + tests: + description: If tests are to be built. + default: false + platform: + description: The Godot platform to build. + required: false + sconsflags: + default: "" + scons-cache: + description: The scons cache path. + default: "${{ github.workspace }}/.scons-cache/" + scons-cache-limit: + description: The scons cache size limit. + default: 4096 +runs: + using: "composite" + steps: + - name: Scons Build + shell: sh + env: + SCONSFLAGS: ${{ inputs.sconsflags }} + 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 }} + ls -l bin/ diff --git a/.github/actions/godot-cache/action.yml b/.github/actions/godot-cache/action.yml new file mode 100644 index 000000000000..db14a0b97af3 --- /dev/null +++ b/.github/actions/godot-cache/action.yml @@ -0,0 +1,22 @@ +name: Setup Godot build cache +description: Setup Godot build cache. +inputs: + cache-name: + description: The cache base name (job name by default). + default: "${{github.job}}" + scons-cache: + description: The scons cache path. + default: "${{github.workspace}}/.scons-cache/" +runs: + using: "composite" + steps: + # Upload cache on completion and check it out now + - name: Load .scons_cache directory + uses: actions/cache@v2 + with: + path: ${{inputs.scons-cache}} + key: ${{inputs.cache-name}}-${{env.GODOT_BASE_BRANCH}}-${{github.ref}}-${{github.sha}} + restore-keys: | + ${{inputs.cache-name}}-${{env.GODOT_BASE_BRANCH}}-${{github.ref}}-${{github.sha}} + ${{inputs.cache-name}}-${{env.GODOT_BASE_BRANCH}}-${{github.ref}} + ${{inputs.cache-name}}-${{env.GODOT_BASE_BRANCH}} diff --git a/.github/actions/godot-deps/action.yml b/.github/actions/godot-deps/action.yml new file mode 100644 index 000000000000..ee4d7d375159 --- /dev/null +++ b/.github/actions/godot-deps/action.yml @@ -0,0 +1,27 @@ +name: Setup python and scons +description: Setup python, install the pip version of scons. +inputs: + python-version: + description: The python version to use. + default: "3.x" + python-arch: + description: The python architecture. + default: "x64" +runs: + using: "composite" + steps: + # Use python 3.x release (works cross platform) + - name: Set up Python 3.x + uses: actions/setup-python@v2 + with: + # Semantic version range syntax or exact version of a Python version + python-version: ${{ inputs.python-version }} + # Optional - x64 or x86 architecture, defaults to x64 + architecture: ${{ inputs.python-arch }} + + - name: Setup scons + shell: bash + run: | + python -c "import sys; print(sys.version)" + python -m pip install scons + scons --version diff --git a/.github/actions/upload-artifact/action.yml b/.github/actions/upload-artifact/action.yml new file mode 100644 index 000000000000..bc1871b9148d --- /dev/null +++ b/.github/actions/upload-artifact/action.yml @@ -0,0 +1,19 @@ +name: Upload Godot artifact +description: Upload the Godot artifact. +inputs: + name: + description: The artifact name. + default: "${{ github.job }}" + path: + description: The path to upload. + required: true + default: "bin/*" +runs: + using: "composite" + steps: + - name: Upload Godot Artifact + uses: actions/upload-artifact@v2 + with: + name: ${{ inputs.name }} + path: ${{ inputs.path }} + retention-days: 14 diff --git a/.github/workflows/android_builds.yml b/.github/workflows/android_builds.yml index f28a6073d138..ff880cfc4536 100644 --- a/.github/workflows/android_builds.yml +++ b/.github/workflows/android_builds.yml @@ -4,8 +4,11 @@ on: [push, pull_request] # Global Settings env: GODOT_BASE_BRANCH: 3.x - SCONSFLAGS: platform=android verbose=yes warnings=all werror=yes debug_symbols=no --jobs=2 - SCONS_CACHE_LIMIT: 4096 + SCONSFLAGS: verbose=yes warnings=all werror=yes debug_symbols=no + +concurrency: + group: ci-${{github.actor}}-${{github.head_ref || github.run_number}}-${{github.ref}}-android + cancel-in-progress: true jobs: android-template: @@ -28,48 +31,35 @@ jobs: with: java-version: 8 - # Upload cache on completion and check it out now - - name: Load .scons_cache directory - id: android-template-cache - uses: actions/cache@v2 - with: - path: ${{github.workspace}}/.scons_cache/ - key: ${{github.job}}-${{env.GODOT_BASE_BRANCH}}-${{github.ref}}-${{github.sha}} - restore-keys: | - ${{github.job}}-${{env.GODOT_BASE_BRANCH}}-${{github.ref}}-${{github.sha}} - ${{github.job}}-${{env.GODOT_BASE_BRANCH}}-${{github.ref}} - ${{github.job}}-${{env.GODOT_BASE_BRANCH}} + - name: Setup Godot build cache + uses: ./.github/actions/godot-cache continue-on-error: true - # Use python 3.x release (works cross platform) - - name: Set up Python 3.x - uses: actions/setup-python@v2 + - name: Setup python and scons + uses: ./.github/actions/godot-deps + + - name: Compilation (armv7) + uses: ./.github/actions/godot-build with: - # Semantic version range syntax or exact version of a Python version - python-version: '3.x' - # Optional - x64 or x86 architecture, defaults to x64 - architecture: 'x64' + sconsflags: ${{ env.SCONSFLAGS }} android_arch=armv7 + platform: android + target: release + tools: false - - name: Configuring Python packages - run: | - python -c "import sys; print(sys.version)" - python -m pip install scons - python --version - scons --version + - name: Compilation (arm64v8) + uses: ./.github/actions/godot-build + with: + sconsflags: ${{ env.SCONSFLAGS }} android_arch=arm64v8 + platform: android + target: release + tools: false - - name: Compilation - env: - SCONS_CACHE: ${{github.workspace}}/.scons_cache/ + - name: Generate Godot templates run: | - scons target=release tools=no android_arch=armv7 - scons target=release tools=no android_arch=arm64v8 cd platform/android/java ./gradlew generateGodotTemplates cd ../../.. ls -l bin/ - - uses: actions/upload-artifact@v2 - with: - name: ${{ github.job }} - path: bin/* - retention-days: 14 + - name: Upload artifact + uses: ./.github/actions/upload-artifact diff --git a/.github/workflows/ios_builds.yml b/.github/workflows/ios_builds.yml index c0fea948a78b..2e228b188346 100644 --- a/.github/workflows/ios_builds.yml +++ b/.github/workflows/ios_builds.yml @@ -4,8 +4,11 @@ on: [push, pull_request] # Global Settings env: GODOT_BASE_BRANCH: 3.x - SCONSFLAGS: platform=iphone verbose=yes warnings=all werror=yes debug_symbols=no --jobs=2 - SCONS_CACHE_LIMIT: 4096 + SCONSFLAGS: verbose=yes warnings=all werror=yes debug_symbols=no + +concurrency: + group: ci-${{github.actor}}-${{github.head_ref || github.run_number}}-${{github.ref}}-ios + cancel-in-progress: true jobs: ios-template: @@ -15,45 +18,20 @@ jobs: steps: - uses: actions/checkout@v2 - # Upload cache on completion and check it out now - - name: Load .scons_cache directory - id: ios-template-cache - uses: actions/cache@v2 - with: - path: ${{github.workspace}}/.scons_cache/ - key: ${{github.job}}-${{env.GODOT_BASE_BRANCH}}-${{github.ref}}-${{github.sha}} - restore-keys: | - ${{github.job}}-${{env.GODOT_BASE_BRANCH}}-${{github.ref}}-${{github.sha}} - ${{github.job}}-${{env.GODOT_BASE_BRANCH}}-${{github.ref}} - ${{github.job}}-${{env.GODOT_BASE_BRANCH}} + - name: Setup Godot build cache + uses: ./.github/actions/godot-cache continue-on-error: true - # Use python 3.x release (works cross platform) - - name: Set up Python 3.x - uses: actions/setup-python@v2 - with: - # Semantic version range syntax or exact version of a Python version - python-version: '3.x' - # Optional - x64 or x86 architecture, defaults to x64 - architecture: 'x64' - - # You can test your matrix by printing the current Python version - - name: Configuring Python packages - run: | - python -c "import sys; print(sys.version)" - python -m pip install scons - python --version - scons --version - - - name: Compilation - env: - SCONS_CACHE: ${{github.workspace}}/.scons_cache/ - run: | - scons target=release tools=no - ls -l bin/ - - - uses: actions/upload-artifact@v2 + - name: Setup python and scons + uses: ./.github/actions/godot-deps + + - name: Compilation (armv7) + uses: ./.github/actions/godot-build with: - name: ${{ github.job }} - path: bin/* - retention-days: 14 + sconsflags: ${{ env.SCONSFLAGS }} + platform: iphone + target: release + tools: false + + - name: Upload artifact + uses: ./.github/actions/upload-artifact diff --git a/.github/workflows/javascript_builds.yml b/.github/workflows/javascript_builds.yml index 5e8260468f53..df26cdd2abbc 100644 --- a/.github/workflows/javascript_builds.yml +++ b/.github/workflows/javascript_builds.yml @@ -4,10 +4,13 @@ on: [push, pull_request] # Global Settings env: GODOT_BASE_BRANCH: 3.x - SCONSFLAGS: platform=javascript verbose=yes warnings=all werror=yes debug_symbols=no --jobs=2 - SCONS_CACHE_LIMIT: 4096 + SCONSFLAGS: verbose=yes warnings=all werror=yes debug_symbols=no EM_VERSION: 2.0.25 - EM_CACHE_FOLDER: 'emsdk-cache' + EM_CACHE_FOLDER: "emsdk-cache" + +concurrency: + group: ci-${{github.actor}}-${{github.head_ref || github.run_number}}-${{github.ref}}-javascript + cancel-in-progress: true jobs: javascript-template: @@ -17,26 +20,6 @@ jobs: 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 - - # Upload cache on completion and check it out now - - name: Load .scons_cache directory - id: javascript-template-cache - uses: actions/cache@v2 - with: - path: ${{github.workspace}}/.scons_cache/ - key: ${{github.job}}-${{env.GODOT_BASE_BRANCH}}-${{github.ref}}-${{github.sha}} - restore-keys: | - ${{github.job}}-${{env.GODOT_BASE_BRANCH}}-${{github.ref}}-${{github.sha}} - ${{github.job}}-${{env.GODOT_BASE_BRANCH}}-${{github.ref}} - ${{github.job}}-${{env.GODOT_BASE_BRANCH}} - continue-on-error: true - # Additional cache for Emscripten generated system libraries - name: Load Emscripten cache id: javascript-template-emscripten-cache @@ -45,23 +28,6 @@ jobs: path: ${{env.EM_CACHE_FOLDER}} key: ${{env.EM_VERSION}}-${{github.job}} - # Use python 3.x release (works cross platform) - - name: Set up Python 3.x - uses: actions/setup-python@v2 - with: - # Semantic version range syntax or exact version of a Python version - python-version: '3.x' - # Optional - x64 or x86 architecture, defaults to x64 - architecture: 'x64' - - # You can test your matrix by printing the current Python version - - name: Configuring Python packages - run: | - python -c "import sys; print(sys.version)" - python -m pip install scons - python --version - scons --version - - name: Set up Emscripten latest uses: mymindstorm/setup-emsdk@v10 with: @@ -72,15 +38,20 @@ jobs: run: | emcc -v - - name: Compilation - env: - SCONS_CACHE: ${{github.workspace}}/.scons_cache/ - run: | - scons target=release tools=no use_closure_compiler=yes - ls -l bin/ + - name: Setup Godot build cache + uses: ./.github/actions/godot-cache + continue-on-error: true + + - name: Setup python and scons + uses: ./.github/actions/godot-deps - - uses: actions/upload-artifact@v2 + - name: Compilation + uses: ./.github/actions/godot-build with: - name: ${{ github.job }} - path: bin/* - retention-days: 14 + sconsflags: ${{ env.SCONSFLAGS }} + platform: javascript + target: release + tools: false + + - name: Upload artifact + uses: ./.github/actions/upload-artifact diff --git a/.github/workflows/linux_builds.yml b/.github/workflows/linux_builds.yml index 8cf963a6bb83..810c70c988d3 100644 --- a/.github/workflows/linux_builds.yml +++ b/.github/workflows/linux_builds.yml @@ -4,218 +4,129 @@ on: [push, pull_request] # Global Settings env: GODOT_BASE_BRANCH: 3.x - SCONSFLAGS: platform=linuxbsd verbose=yes warnings=all werror=yes debug_symbols=no --jobs=2 - SCONS_CACHE_LIMIT: 4096 + SCONSFLAGS: verbose=yes warnings=all werror=yes debug_symbols=no -jobs: - linux-editor-mono: - runs-on: "ubuntu-20.04" - name: Editor w/ Mono (target=release_debug, tools=yes) - - 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 - - # Install all packages (except scons) - - name: Configure dependencies - run: | - sudo apt-get install build-essential pkg-config libx11-dev libxcursor-dev xvfb \ - libxinerama-dev libgl1-mesa-dev libglu-dev libasound2-dev libpulse-dev libudev-dev libxi-dev libxrandr-dev yasm - - # Upload cache on completion and check it out now - - name: Load .scons_cache directory - id: linux-editor-cache - uses: actions/cache@v2 - with: - path: ${{github.workspace}}/.scons_cache/ - key: ${{github.job}}-${{env.GODOT_BASE_BRANCH}}-${{github.ref}}-${{github.sha}} - restore-keys: | - ${{github.job}}-${{env.GODOT_BASE_BRANCH}}-${{github.ref}}-${{github.sha}} - ${{github.job}}-${{env.GODOT_BASE_BRANCH}}-${{github.ref}} - ${{github.job}}-${{env.GODOT_BASE_BRANCH}} - continue-on-error: true +concurrency: + group: ci-${{github.actor}}-${{github.head_ref || github.run_number}}-${{github.ref}}-linux + cancel-in-progress: true - # Use python 3.x release (works cross platform; best to keep self contained in it's own step) - - name: Set up Python 3.x - uses: actions/setup-python@v2 - with: - # Semantic version range syntax or exact version of a Python version - python-version: '3.x' - # Optional - x64 or x86 architecture, defaults to x64 - architecture: 'x64' - - # Setup scons, print python version and scons version info, so if anything is broken it won't run the build. - - name: Configuring Python packages - run: | - python -c "import sys; print(sys.version)" - python -m pip install scons - python --version - scons --version - - # We should always be explicit with our flags usage here since it's gonna be sure to always set those flags - - name: Compilation - env: - SCONS_CACHE: ${{github.workspace}}/.scons_cache/ - run: | - scons tools=yes target=release_debug module_mono_enabled=yes mono_glue=no - xvfb-run ./bin/godot.x11.opt.tools.64.mono --generate-mono-glue modules/mono/glue || true - scons tools=yes target=release_debug module_mono_enabled=yes mono_glue=yes - ls -l bin/ - - - uses: actions/upload-artifact@v2 - with: - name: ${{ github.job }} - path: bin/* - retention-days: 14 - - linux-template-mono: +jobs: + build-linux: runs-on: "ubuntu-20.04" - name: Template w/ Mono (target=release, tools=no) + name: ${{ matrix.name }} + strategy: + fail-fast: false + matrix: + include: + - name: Editor w/ Mono (target=release_debug, tools=yes) + cache-name: linux-editor-mono + target: release_debug + tools: true + sconsflags: module_mono_enabled=yes mono_glue=no + bin: "./bin/godot.x11.opt.tools.64.mono" + build-mono: true + artifact: true + + - name: Editor and sanitizers (target=debug, tools=yes, use_asan=yes, use_ubsan=yes) + cache-name: linux-editor-sanitizers + target: debug + tools: true + sconsflags: use_asan=yes use_ubsan=yes + test: true + bin: "./bin/godot.x11.tools.64s" + build-mono: false + # Skip 2GiB artifact speeding up action. + artifact: false + + - name: Template w/ Mono (target=release, tools=no) + cache-name: linux-template-mono + target: release + tools: false + sconsflags: module_mono_enabled=yes mono_glue=no + build-mono: false + artifact: true 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 + - name: Linux dependencies + shell: bash 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 - - # Install all packages (except scons) - - name: Configure dependencies - run: | + # 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 libudev-dev libxi-dev libxrandr-dev yasm + libxinerama-dev libgl1-mesa-dev libglu-dev libasound2-dev libpulse-dev \ + libdbus-1-dev libudev-dev libxi-dev libxrandr-dev yasm xvfb wget unzip - # Upload cache on completion and check it out now - - name: Load .scons_cache directory - id: linux-template-cache - uses: actions/cache@v2 + - name: Setup Godot build cache + uses: ./.github/actions/godot-cache with: - path: ${{github.workspace}}/.scons_cache/ - key: ${{github.job}}-${{env.GODOT_BASE_BRANCH}}-${{github.ref}}-${{github.sha}} - restore-keys: | - ${{github.job}}-${{env.GODOT_BASE_BRANCH}}-${{github.ref}}-${{github.sha}} - ${{github.job}}-${{env.GODOT_BASE_BRANCH}}-${{github.ref}} - ${{github.job}}-${{env.GODOT_BASE_BRANCH}} + cache-name: ${{ matrix.cache-name }} continue-on-error: true - # Use python 3.x release (works cross platform) - - name: Set up Python 3.x - uses: actions/setup-python@v2 - with: - # Semantic version range syntax or exact version of a Python version - python-version: '3.x' - # Optional - x64 or x86 architecture, defaults to x64 - architecture: 'x64' - - # You can test your matrix by printing the current Python version - - name: Configuring Python packages - run: | - python -c "import sys; print(sys.version)" - python -m pip install scons - python --version - scons --version + - name: Setup python and scons + uses: ./.github/actions/godot-deps - name: Compilation - env: - SCONS_CACHE: ${{github.workspace}}/.scons_cache/ - run: | - scons target=release tools=no module_mono_enabled=yes mono_glue=no - ls -l bin/ - - - uses: actions/upload-artifact@v2 + uses: ./.github/actions/godot-build with: - name: ${{ github.job }} - path: bin/* - retention-days: 14 - - linux-editor-sanitizers: - runs-on: "ubuntu-20.04" - name: Editor and exported project with sanitizers (target=debug/release, tools=yes/no, use_ubsan=yes, use_asan=yes) - - 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 - - # Install all packages (except scons) - - name: Configure dependencies + sconsflags: ${{ env.SCONSFLAGS }} ${{ matrix.sconsflags }} + platform: linuxbsd + target: ${{ matrix.target }} + tools: ${{ matrix.tools }} + + # Generate mono glue + - name: Generate Mono glue code + if: ${{ matrix.build-mono }} run: | - sudo apt-get install build-essential pkg-config libx11-dev libxcursor-dev \ - libxinerama-dev libgl1-mesa-dev libglu-dev libasound2-dev libpulse-dev libudev-dev libxi-dev libxrandr-dev yasm \ - xvfb wget2 unzip - - # Upload cache on completion and check it out now - - name: Load .scons_cache directory - id: linux-sanitizer-cache - uses: actions/cache@v2 - with: - path: ${{github.workspace}}/.scons_cache/ - key: ${{github.job}}-${{env.GODOT_BASE_BRANCH}}-${{github.ref}}-${{github.sha}} - restore-keys: | - ${{github.job}}-${{env.GODOT_BASE_BRANCH}}-${{github.ref}}-${{github.sha}} - ${{github.job}}-${{env.GODOT_BASE_BRANCH}}-${{github.ref}} - ${{github.job}}-${{env.GODOT_BASE_BRANCH}} - continue-on-error: true + DRI_PRIME=0 xvfb-run ${{ matrix.bin }} --generate-mono-glue modules/mono/glue || true - # Use python 3.x release (works cross platform; best to keep self contained in it's own step) - - name: Set up Python 3.x - uses: actions/setup-python@v2 + # Rebuild with mono + - name: Compilation (mono_glue=yes) + uses: ./.github/actions/godot-build + if: ${{ matrix.build-mono }} with: - # Semantic version range syntax or exact version of a Python version - python-version: '3.x' - # Optional - x64 or x86 architecture, defaults to x64 - architecture: 'x64' - - # Setup scons, print python version and scons version info, so if anything is broken it won't run the build. - - name: Configuring Python packages - run: | - python -c "import sys; print(sys.version)" - python -m pip install scons - python --version - scons --version - - # We should always be explicit with our flags usage here since it's gonna be sure to always set those flags - - name: Compilation - env: - SCONS_CACHE: ${{github.workspace}}/.scons_cache/ - run: | - scons tools=yes target=debug use_asan=yes use_ubsan=yes - ls -l bin/ - - # Download and test project to check leaks and invalid memory usage. - # CI has no audio device, so use the Dummy audio driver to avoid spurious error messages. - - name: Importing and running project project + sconsflags: ${{ env.SCONSFLAGS }} ${{ matrix.sconsflags }} mono_glue=yes + platform: linuxbsd + target: ${{ matrix.target }} + tools: ${{ matrix.tools }} + + # Download and extract zip archive with project, folder is renamed to be able to easy change used project + - name: Download test project + if: ${{ matrix.test }} run: | - wget2 https://github.com/qarmin/RegressionTestProject/archive/3.x.zip + wget https://github.com/qarmin/RegressionTestProject/archive/3.x.zip unzip 3.x.zip mv "RegressionTestProject-3.x" "test_project" - echo "----- Open editor to check for memory leaks -----" - DRI_PRIME=0 xvfb-run bin/godot.x11.tools.64s --audio-driver Dummy -e -q --path test_project 2>&1 | tee sanitizers_log.txt || true + # Editor is quite complicated piece of software, so it is easy to introduce bug here + - name: Open and close editor + if: ${{ matrix.test }} + run: | + DRI_PRIME=0 xvfb-run ${{ matrix.bin }} --audio-driver Dummy -e -q --path test_project 2>&1 | tee sanitizers_log.txt || true misc/scripts/check_ci_log.py sanitizers_log.txt - echo "----- Run and test project -----" - DRI_PRIME=0 xvfb-run bin/godot.x11.tools.64s 30 --video-driver GLES3 --audio-driver Dummy --path test_project 2>&1 | tee sanitizers_log.txt || true + # Run test project + - name: Run project + if: ${{ matrix.test }} + run: | + DRI_PRIME=0 xvfb-run ${{ matrix.bin }} 30 --video-driver GLES3 --audio-driver Dummy --path test_project 2>&1 | tee sanitizers_log.txt || true misc/scripts/check_ci_log.py sanitizers_log.txt # Check class reference - name: Check for class reference updates + if: ${{ matrix.test }} run: | echo "Running --doctool to see if this changes the public API without updating the documentation." echo -e "If a diff is shown, it means that your code/doc changes are incomplete and you should update the class reference with --doctool.\n\n" - DRI_PRIME=0 xvfb-run bin/godot.x11.tools.64s --doctool . 2>&1 > /dev/null || true - git diff --color --exit-code + DRI_PRIME=0 xvfb-run ${{ matrix.bin }} --doctool . 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$' + + - name: Upload artifact + uses: ./.github/actions/upload-artifact + if: ${{ matrix.artifact }} + with: + name: ${{ matrix.cache-name }} diff --git a/.github/workflows/macos_builds.yml b/.github/workflows/macos_builds.yml index 6760b5819b6f..cab505cd27a1 100644 --- a/.github/workflows/macos_builds.yml +++ b/.github/workflows/macos_builds.yml @@ -4,108 +4,52 @@ on: [push, pull_request] # Global Settings env: GODOT_BASE_BRANCH: 3.x - SCONSFLAGS: platform=osx verbose=yes warnings=all werror=yes debug_symbols=no --jobs=2 - SCONS_CACHE_LIMIT: 4096 + SCONSFLAGS: verbose=yes warnings=all werror=yes debug_symbols=no + +concurrency: + group: ci-${{github.actor}}-${{github.head_ref || github.run_number}}-${{github.ref}}-macos + cancel-in-progress: true jobs: - macos-editor: + build-macos: runs-on: "macos-latest" - - name: Editor (target=release_debug, tools=yes) + name: ${{ matrix.name }} + strategy: + fail-fast: false + matrix: + include: + - name: Editor (target=release_debug, tools=yes) + cache-name: macos-editor + target: release_debug + tools: true + bin: "./bin/godot.osx.opt.tools.64" + + - name: Template (target=release, tools=no) + cache-name: macos-template + target: release + tools: false steps: - uses: actions/checkout@v2 - # Upload cache on completion and check it out now - - name: Load .scons_cache directory - id: macos-editor-cache - uses: actions/cache@v2 + - name: Setup Godot build cache + uses: ./.github/actions/godot-cache with: - path: ${{github.workspace}}/.scons_cache/ - key: ${{github.job}}-${{env.GODOT_BASE_BRANCH}}-${{github.ref}}-${{github.sha}} - restore-keys: | - ${{github.job}}-${{env.GODOT_BASE_BRANCH}}-${{github.ref}}-${{github.sha}} - ${{github.job}}-${{env.GODOT_BASE_BRANCH}}-${{github.ref}} - ${{github.job}}-${{env.GODOT_BASE_BRANCH}} + cache-name: ${{ matrix.cache-name }} continue-on-error: true - # Use python 3.x release (works cross platform; best to keep self contained in it's own step) - - name: Set up Python 3.x - uses: actions/setup-python@v2 - with: - # Semantic version range syntax or exact version of a Python version - python-version: '3.x' - # Optional - x64 or x86 architecture, defaults to x64 - architecture: 'x64' + - name: Setup python and scons + uses: ./.github/actions/godot-deps - # Setup scons, print python version and scons version info, so if anything is broken it won't run the build. - - name: Configuring Python packages - run: | - python -c "import sys; print(sys.version)" - python -m pip install scons - python --version - scons --version - - # We should always be explicit with our flags usage here since it's gonna be sure to always set those flags - name: Compilation - env: - SCONS_CACHE: ${{github.workspace}}/.scons_cache/ - run: | - scons tools=yes target=release_debug - ls -l bin/ - - - uses: actions/upload-artifact@v2 - with: - name: ${{ github.job }} - path: bin/* - retention-days: 14 - - macos-template: - runs-on: "macos-latest" - name: Template (target=release, tools=no) - - steps: - - uses: actions/checkout@v2 - - # Upload cache on completion and check it out now - - name: Load .scons_cache directory - id: macos-template-cache - uses: actions/cache@v2 + uses: ./.github/actions/godot-build with: - path: ${{github.workspace}}/.scons_cache/ - key: ${{github.job}}-${{env.GODOT_BASE_BRANCH}}-${{github.ref}}-${{github.sha}} - restore-keys: | - ${{github.job}}-${{env.GODOT_BASE_BRANCH}}-${{github.ref}}-${{github.sha}} - ${{github.job}}-${{env.GODOT_BASE_BRANCH}}-${{github.ref}} - ${{github.job}}-${{env.GODOT_BASE_BRANCH}} - continue-on-error: true - - # Use python 3.x release (works cross platform) - - name: Set up Python 3.x - uses: actions/setup-python@v2 - with: - # Semantic version range syntax or exact version of a Python version - python-version: '3.x' - # Optional - x64 or x86 architecture, defaults to x64 - architecture: 'x64' - - # You can test your matrix by printing the current Python version - - name: Configuring Python packages - run: | - python -c "import sys; print(sys.version)" - python -m pip install scons - python --version - scons --version - - - name: Compilation - env: - SCONS_CACHE: ${{github.workspace}}/.scons_cache/ - run: | - scons target=release tools=no - ls -l bin/ + sconsflags: ${{ env.SCONSFLAGS }} + platform: osx + target: ${{ matrix.target }} + tools: ${{ matrix.tools }} - - uses: actions/upload-artifact@v2 + - name: Upload artifact + uses: ./.github/actions/upload-artifact with: - name: ${{ github.job }} - path: bin/* - retention-days: 14 + name: ${{ matrix.cache-name }} diff --git a/.github/workflows/server_builds.yml b/.github/workflows/server_builds.yml index e8da9b722aee..a223b84e6979 100644 --- a/.github/workflows/server_builds.yml +++ b/.github/workflows/server_builds.yml @@ -1,120 +1,61 @@ name: ☁ Server Builds on: [push, pull_request] -# Global Cache Settings +# Global Settings env: GODOT_BASE_BRANCH: 3.x - SCONSFLAGS: platform=server verbose=yes warnings=all werror=yes debug_symbols=no --jobs=2 - SCONS_CACHE_LIMIT: 4096 + SCONSFLAGS: verbose=yes warnings=all werror=yes debug_symbols=no module_mono_enabled=yes mono_glue=no + +concurrency: + group: ci-${{github.actor}}-${{github.head_ref || github.run_number}}-${{github.ref}}-server + cancel-in-progress: true jobs: - linux-editor: + build-server: runs-on: "ubuntu-20.04" - name: Linux Headless w/ Mono (target=release_debug, tools=yes) + name: ${{ matrix.name }} + strategy: + fail-fast: false + matrix: + include: + - name: Linux Headless w/ Mono (target=release_debug, tools=yes) + cache-name: server-editor-mono + target: release_debug + tools: true + + - name: Linux Server w/ Mono (target=release, tools=no) + cache-name: server-template-mono + target: release + tools: false 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 + - name: Linux dependencies + shell: bash 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 - - # Install all packages (except scons) - - name: Configure dependencies - run: | + # 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 libudev-dev libxi-dev libxrandr-dev yasm + libxinerama-dev libgl1-mesa-dev libglu-dev libasound2-dev libpulse-dev \ + libdbus-1-dev libudev-dev libxi-dev libxrandr-dev yasm xvfb wget unzip - # Upload cache on completion and check it out now - - name: Load .scons_cache directory - id: linux-headless-cache - uses: actions/cache@v2 + - name: Setup Godot build cache + uses: ./.github/actions/godot-cache with: - path: ${{github.workspace}}/.scons_cache/ - key: ${{github.job}}-${{env.GODOT_BASE_BRANCH}}-${{github.ref}}-${{github.sha}} - restore-keys: | - ${{github.job}}-${{env.GODOT_BASE_BRANCH}}-${{github.ref}}-${{github.sha}} - ${{github.job}}-${{env.GODOT_BASE_BRANCH}}-${{github.ref}} - ${{github.job}}-${{env.GODOT_BASE_BRANCH}} + cache-name: ${{ matrix.cache-name }} continue-on-error: true - # Use python 3.x release (works cross platform; best to keep self contained in it's own step) - - name: Set up Python 3.x - uses: actions/setup-python@v2 - with: - # Semantic version range syntax or exact version of a Python version - python-version: '3.x' - # Optional - x64 or x86 architecture, defaults to x64 - architecture: 'x64' + - name: Setup python and scons + uses: ./.github/actions/godot-deps - # Setup scons, print python version and scons version info, so if anything is broken it won't run the build. - - name: Configuring Python packages - run: | - python -c "import sys; print(sys.version)" - python -m pip install scons - python --version - scons --version - - # We should always be explicit with our flags usage here since it's gonna be sure to always set those flags - name: Compilation - env: - SCONS_CACHE: ${{github.workspace}}/.scons_cache/ - run: | - scons -j2 verbose=yes warnings=all werror=yes platform=server tools=yes target=release_debug module_mono_enabled=yes mono_glue=no - - linux-server: - runs-on: "ubuntu-20.04" - name: Linux Server w/ Mono (target=release, tools=no) - - 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 cp -f misc/ci/sources.list /etc/apt/sources.list - sudo apt-get update - - # Install all packages (except scons) - - name: Configure dependencies - run: | - sudo apt-get install build-essential pkg-config libx11-dev libxcursor-dev \ - libxinerama-dev libgl1-mesa-dev libglu-dev libasound2-dev libpulse-dev libudev-dev libxi-dev libxrandr-dev yasm - - # Upload cache on completion and check it out now - - name: Load .scons_cache directory - id: linux-server-cache - uses: actions/cache@v2 - with: - path: ${{github.workspace}}/.scons_cache/ - key: ${{github.job}}-${{env.GODOT_BASE_BRANCH}}-${{github.ref}}-${{github.sha}} - restore-keys: | - ${{github.job}}-${{env.GODOT_BASE_BRANCH}}-${{github.ref}}-${{github.sha}} - ${{github.job}}-${{env.GODOT_BASE_BRANCH}}-${{github.ref}} - ${{github.job}}-${{env.GODOT_BASE_BRANCH}} - continue-on-error: true - - # Use python 3.x release (works cross platform) - - name: Set up Python 3.x - uses: actions/setup-python@v2 + uses: ./.github/actions/godot-build with: - # Semantic version range syntax or exact version of a Python version - python-version: '3.x' - # Optional - x64 or x86 architecture, defaults to x64 - architecture: 'x64' - - # You can test your matrix by printing the current Python version - - name: Configuring Python packages - run: | - python -c "import sys; print(sys.version)" - python -m pip install scons - python --version - scons --version - - - name: Compilation - env: - SCONS_CACHE: ${{github.workspace}}/.scons_cache/ - run: | - scons -j2 target=release tools=no module_mono_enabled=yes mono_glue=no + sconsflags: ${{ env.SCONSFLAGS }} ${{ matrix.sconsflags }} + platform: server + target: ${{ matrix.target }} + tools: ${{ matrix.tools }} diff --git a/.github/workflows/windows_builds.yml b/.github/workflows/windows_builds.yml index 9b1e4cee1cac..041fe837f4df 100644 --- a/.github/workflows/windows_builds.yml +++ b/.github/workflows/windows_builds.yml @@ -5,113 +5,56 @@ on: [push, pull_request] # SCONS_CACHE for windows must be set in the build environment env: GODOT_BASE_BRANCH: 3.x - SCONSFLAGS: platform=windows verbose=yes warnings=all werror=yes debug_symbols=no --jobs=2 + SCONSFLAGS: verbose=yes warnings=all werror=yes debug_symbols=no SCONS_CACHE_MSVC_CONFIG: true - SCONS_CACHE_LIMIT: 4096 + +concurrency: + group: ci-${{github.actor}}-${{github.head_ref || github.run_number}}-${{github.ref}}-windows + cancel-in-progress: true jobs: - windows-editor: + build-windows: # Windows 10 with latest image runs-on: "windows-latest" - - # Windows Editor - checkout with the plugin - name: Editor (target=release_debug, tools=yes) - - steps: - - uses: actions/checkout@v2 - - # Upload cache on completion and check it out now - # Editing this is pretty dangerous for Windows since it can break and needs to be properly tested with a fresh cache. - - name: Load .scons_cache directory - id: windows-editor-cache - uses: actions/cache@v2 - with: - path: /.scons_cache/ - key: ${{github.job}}-${{env.GODOT_BASE_BRANCH}}-${{github.ref}}-${{github.sha}} - restore-keys: | - ${{github.job}}-${{env.GODOT_BASE_BRANCH}}-${{github.ref}}-${{github.sha}} - ${{github.job}}-${{env.GODOT_BASE_BRANCH}}-${{github.ref}} - ${{github.job}}-${{env.GODOT_BASE_BRANCH}} - continue-on-error: true - - # Use python 3.x release (works cross platform; best to keep self contained in it's own step) - - name: Set up Python 3.x - uses: actions/setup-python@v2 - with: - # Semantic version range syntax or exact version of a Python version - python-version: '3.x' - # Optional - x64 or x86 architecture, defaults to x64 - architecture: 'x64' - - # Setup scons, print python version and scons version info, so if anything is broken it won't run the build. - - name: Configuring Python packages - run: | - python -c "import sys; print(sys.version)" - python -m pip install scons - python --version - scons --version - - # We should always be explicit with our flags usage here since it's gonna be sure to always set those flags - - name: Compilation - env: - SCONS_CACHE: /.scons_cache/ - run: | - scons tools=yes target=release_debug - ls -l bin/ - - - uses: actions/upload-artifact@v2 - with: - name: ${{ github.job }} - path: bin/* - retention-days: 14 - - windows-template: - runs-on: "windows-latest" - name: Template (target=release, tools=no) + name: ${{ matrix.name }} + strategy: + fail-fast: false + matrix: + include: + - name: Editor (target=release_debug, tools=yes) + cache-name: windows-editor + target: release_debug + tools: true + bin: "./bin/godot.windows.opt.tools.64.exe" + + - name: Template (target=release, tools=no) + cache-name: windows-template + target: release + tools: false steps: - - uses: actions/checkout@v2 - - # Upload cache on completion and check it out now - # Editing this is pretty dangerous for Windows since it can break and needs to be properly tested with a fresh cache. - - name: Load .scons_cache directory - id: windows-template-cache - uses: RevoluPowered/cache@v2.1 - with: - path: /.scons_cache/ - key: ${{github.job}}-${{env.GODOT_BASE_BRANCH}}-${{github.ref}}-${{github.sha}} - restore-keys: | - ${{github.job}}-${{env.GODOT_BASE_BRANCH}}-${{github.ref}}-${{github.sha}} - ${{github.job}}-${{env.GODOT_BASE_BRANCH}}-${{github.ref}} - ${{github.job}}-${{env.GODOT_BASE_BRANCH}} - continue-on-error: true - - # Use python 3.x release (works cross platform) - - name: Set up Python 3.x - uses: actions/setup-python@v2 - with: - # Semantic version range syntax or exact version of a Python version - python-version: '3.x' - # Optional - x64 or x86 architecture, defaults to x64 - architecture: 'x64' - - # You can test your matrix by printing the current Python version - - name: Configuring Python packages - run: | - python -c "import sys; print(sys.version)" - python -m pip install scons - python --version - scons --version - - - name: Compilation - env: - SCONS_CACHE: /.scons_cache/ - run: | - scons target=release tools=no - ls -l bin/ - - - uses: actions/upload-artifact@v2 - with: - name: ${{ github.job }} - path: bin/* - retention-days: 14 + - uses: actions/checkout@v2 + + - name: Setup Godot build cache + uses: ./.github/actions/godot-cache + with: + cache-name: ${{ matrix.cache-name }} + continue-on-error: true + + + - name: Setup python and scons + uses: ./.github/actions/godot-deps + + - name: Compilation + uses: ./.github/actions/godot-build + with: + sconsflags: ${{ env.SCONSFLAGS }} + platform: windows + target: ${{ matrix.target }} + tools: ${{ matrix.tools }} + scons-cache-limit: 3072 + + - name: Upload artifact + uses: ./.github/actions/upload-artifact + with: + name: ${{ matrix.cache-name }}