diff --git a/.gitea/workflows/release.yml b/.gitea/workflows/release.yml index 6412caf..f8bb3c6 100644 --- a/.gitea/workflows/release.yml +++ b/.gitea/workflows/release.yml @@ -6,56 +6,197 @@ on: pull_request: branches: [release] +env: + GODOT_VERSION: 4.6.1 + EXPORT_NAME: Experements + PROJECT_PATH: . + BLENDER_VERSION: 5.0.0 + jobs: - build: - runs-on: ubuntu-latest - strategy: - fail-fast: false - matrix: - preset: ["Windows Desktop", "Linux/X11", "macOS"] - + export-windows: + name: Windows Export + runs-on: ubuntu-24.04 # Use 24.04 with godot 4 + container: barichello/godot-ci:4.6 steps: - - uses: actions/checkout@v5 + - name: Update and install dependencies + run: | + apt-get update + apt-get install -y curl gnupg + apt-get install -y blender - - name: Extract version from CHANGELOG + - name: Install Node.js + run: | + curl -fsSL https://deb.nodesource.com/setup_20.x | bash - + apt-get install -y nodejs + + - name: Checkout + uses: actions/checkout@v4 + with: + lfs: true + + - name: Setup + shell: bash + run: | + set -Eeuo pipefail + BLENDER_PATH="/usr/bin/blender" + mkdir -pv ~/.config/godot + mkdir -pv ~/.local/share/godot/export_templates/ + GODOT_CFG="$(find ~/.config/godot -name "editor_settings-*.tres" | head -n 1 || true)" + + if [ -z "$GODOT_CFG" ]; then + echo "# Missing Godot editor settings" > "$GODOT_CFG" + exit 1 + fi + + # Set the Blender path + if [ -n "${BLENDER_PATH:-}" ]; then + if grep -q '^filesystem/import/blender/blender_path' "$GODOT_CFG"; then + # Replace existing path + sed -i "s|^filesystem/import/blender/blender_path = .*|filesystem/import/blender/blender_path = \"$BLENDER_PATH\"|" "$GODOT_CFG" + else + # Append new path + echo "filesystem/import/blender/blender_path = \"$BLENDER_PATH\"" >> "$GODOT_CFG" + fi + fi + echo "Blender path configured in $GODOT_CFG" + + - name: Windows Build + shell: bash + run: | + set -Eeuo pipefail + mkdir -v -p build/windows + EXPORT_DIR="$(readlink -f build)" + cd $PROJECT_PATH + godot --headless --export-release "Windows" "$EXPORT_DIR/windows/$EXPORT_NAME.exe" + - name: Upload Artifact + uses: actions/upload-artifact@v3 + with: + name: windows + path: build/windows + + export-linux: + name: Linux Export + runs-on: ubuntu-24.04 # Use 24.04 with godot 4 + container: barichello/godot-ci:4.6 + steps: + - name: Update and install dependencies + run: | + apt-get update + apt-get install -y curl gnupg + + - name: Install Node.js + run: | + curl -fsSL https://deb.nodesource.com/setup_20.x | bash - + apt-get install -y nodejs + + - name: Checkout + uses: actions/checkout@v4 + with: + lfs: true + - name: Setup + shell: bash + run: | + set -Eeuo pipefail + BLENDER_PATH="/usr/bin/blender" + mkdir -pv ~/.config/godot + mkdir -pv ~/.local/share/godot/export_templates/ + GODOT_CFG="$(find ~/.config/godot -name "editor_settings-*.tres" | head -n 1 || true)" + + if [ -z "$GODOT_CFG" ]; then + echo "# Missing Godot editor settings" > "$GODOT_CFG" + exit 1 + fi + + # Set the Blender path + if [ -n "${BLENDER_PATH:-}" ]; then + if grep -q '^filesystem/import/blender/blender_path' "$GODOT_CFG"; then + # Replace existing path + sed -i "s|^filesystem/import/blender/blender_path = .*|filesystem/import/blender/blender_path = \"$BLENDER_PATH\"|" "$GODOT_CFG" + else + # Append new path + echo "filesystem/import/blender/blender_path = \"$BLENDER_PATH\"" >> "$GODOT_CFG" + fi + fi + echo "Blender path configured in $GODOT_CFG" + + - name: Linux Build + shell: bash + run: | + set -Eeuo pipefail + mkdir -v -p build/linux + EXPORT_DIR="$(readlink -f build)" + cd $PROJECT_PATH + godot --headless --export-release "Linux/X11" "$EXPORT_DIR/linux/$EXPORT_NAME.x86_64" + + - name: Upload Artifact + uses: actions/upload-artifact@v3 + with: + name: linux + path: build/linux + + create-release: + name: Create Release + runs-on: ubuntu-latest + needs: [export-linux, export-windows] + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Download Windows Artifact + uses: actions/download-artifact@v3 + with: + name: windows + path: build/windows + + - name: Download Linux Artifact + uses: actions/download-artifact@v3 + with: + name: linux + path: build/linux + + - name: Extract version and body from CHANGELOG id: changelog - uses: release-drafter/release-drafter@v5 - with: - changelog-file: CHANGELOG.md - template: | - name: ${{ version }} - body: | - ${{ description }} - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + # Extract the latest released version (skip Unreleased) + LATEST=$(grep -E '^## \[[0-9]+\.[0-9]+\.[0-9]+\]' CHANGELOG.md | head -n1 | sed -E 's/^## \[([0-9]+\.[0-9]+\.[0-9]+)\].*/\1/') - # Create Release also creates an Tag - # - name: Create git tag - # uses: alazhar/gitea-action-autotag@v1 - # with: - # tag: ${{ steps.changelog.outputs.version }} + if [ -z "$LATEST" ]; then + echo "No released version found in CHANGELOG.md" + exit 1 + fi - - name: Build - id: build - uses: mlm-games/godot-build-action@v1 - with: - EXPORT_PRESET_NAME: ${{ matrix.preset }} + echo "Released version found: $LATEST" + echo "version=$LATEST" >> $GITHUB_OUTPUT - - name: Upload builds - uses: actions/upload-artifact@v5 - with: - name: godot-${{ matrix.preset }}-v${{ steps.changelog.outputs.version }} - path: godot-${{ matrix.preset }}-v${{ steps.changelog.outputs.version }}.tar.gz + # Extract the body: lines until the next ## header + BODY=$(awk -v ver="$LATEST" ' + $0 ~ "^## \\[" ver "\\]" {found=1; next} + found && $0 ~ "^## \\[" {exit} + found {print} + ' CHANGELOG.md) + + # Trim leading/trailing empty lines + BODY=$(echo "$BODY" | sed '/^\s*$/d') + + # Output body safely for GitHub Actions + echo "body<> $GITHUB_OUTPUT + echo "$BODY" >> $GITHUB_OUTPUT + echo "EOF" >> $GITHUB_OUTPUT + + - name: Zipping exports + run: | + zip -r windows-${{ steps.changelog.outputs.version }}.zip build/windows + zip -r linux-${{ steps.changelog.outputs.version }}.zip build/linux - name: Create Release uses: akkuman/gitea-release-action@v1 with: - server_url: ${{ SERVER_URL }} + server_url: ${{ vars.SERVER_URL }} tag_name: ${{ steps.changelog.outputs.version }} - name: "Release ${{ steps.changelog.outputs.version }}" - body: ${{ steps.changelog.outputs.description }} + name: "${{ steps.changelog.outputs.version }}" + body: ${{ steps.changelog.outputs.body }} + draft: false + token: ${{ secrets.GITEA_TOKEN }} files: | - godot-Windows Desktop-v${{ steps.changelog.outputs.version }}.tar.gz - godot-Linux/X11-v${{ steps.changelog.outputs.version }}.tar.gz - godot-macOS-v${{ steps.changelog.outputs.version }}.tar.gz - draft: false + windows-${{ steps.changelog.outputs.version }}.zip + linux-${{ steps.changelog.outputs.version }}.zip diff --git a/export_presets.cfg b/export_presets.cfg index b4d760d..d4b4995 100644 --- a/export_presets.cfg +++ b/export_presets.cfg @@ -1,16 +1,20 @@ [preset.0] -name="Godot Experiments" +name="Web" platform="Web" -runnable=true -advanced_options=false +runnable=false dedicated_server=false custom_features="" export_filter="all_resources" include_filter="" -exclude_filter="" -export_path="dist/Experements.html" +exclude_filter="*.blend" +export_path="" patches=PackedStringArray() +patch_delta_encoding=false +patch_delta_compression_level_zstd=19 +patch_delta_min_reduction=0.1 +patch_delta_include_filters="*" +patch_delta_exclude_filters="" encryption_include_filters="" encryption_exclude_filters="" seed=0 @@ -42,4 +46,123 @@ progressive_web_app/icon_180x180="" progressive_web_app/icon_512x512="" progressive_web_app/background_color=Color(0, 0, 0, 1) threads/emscripten_pool_size=8 -threads/godot_pool_size=4 \ No newline at end of file +threads/godot_pool_size=4 + +[preset.1] + +name="Linux/X11" +platform="Linux" +runnable=true +dedicated_server=false +custom_features="" +export_filter="all_resources" +include_filter="" +exclude_filter="*.blend" +export_path="" +patches=PackedStringArray() +patch_delta_encoding=false +patch_delta_compression_level_zstd=19 +patch_delta_min_reduction=0.1 +patch_delta_include_filters="*" +patch_delta_exclude_filters="" +encryption_include_filters="" +encryption_exclude_filters="" +seed=0 +encrypt_pck=false +encrypt_directory=false +script_export_mode=2 + +[preset.1.options] + +custom_template/debug="" +custom_template/release="" +debug/export_console_wrapper=1 +binary_format/embed_pck=false +texture_format/s3tc_bptc=true +texture_format/etc2_astc=false +shader_baker/enabled=false +binary_format/architecture="x86_64" +ssh_remote_deploy/enabled=false +ssh_remote_deploy/host="user@host_ip" +ssh_remote_deploy/port="22" +ssh_remote_deploy/extra_args_ssh="" +ssh_remote_deploy/extra_args_scp="" +ssh_remote_deploy/run_script="#!/usr/bin/env bash +export DISPLAY=:0 +unzip -o -q \"{temp_dir}/{archive_name}\" -d \"{temp_dir}\" +\"{temp_dir}/{exe_name}\" {cmd_args}" +ssh_remote_deploy/cleanup_script="#!/usr/bin/env bash +pkill -x -f \"{temp_dir}/{exe_name} {cmd_args}\" +rm -rf \"{temp_dir}\"" + +[preset.2] + +name="Windows" +platform="Windows Desktop" +runnable=true +dedicated_server=false +custom_features="" +export_filter="all_resources" +include_filter="" +exclude_filter="*.blend" +export_path="" +patches=PackedStringArray() +patch_delta_encoding=false +patch_delta_compression_level_zstd=19 +patch_delta_min_reduction=0.1 +patch_delta_include_filters="*" +patch_delta_exclude_filters="" +encryption_include_filters="" +encryption_exclude_filters="" +seed=0 +encrypt_pck=false +encrypt_directory=false +script_export_mode=2 + +[preset.2.options] + +custom_template/debug="" +custom_template/release="" +debug/export_console_wrapper=1 +binary_format/embed_pck=false +texture_format/s3tc_bptc=true +texture_format/etc2_astc=false +shader_baker/enabled=false +binary_format/architecture="x86_64" +codesign/enable=false +codesign/timestamp=true +codesign/timestamp_server_url="" +codesign/digest_algorithm=1 +codesign/description="" +codesign/custom_options=PackedStringArray() +application/modify_resources=true +application/icon="" +application/console_wrapper_icon="" +application/icon_interpolation=4 +application/file_version="" +application/product_version="" +application/company_name="" +application/product_name="" +application/file_description="" +application/copyright="" +application/trademarks="" +application/export_angle=0 +application/export_d3d12=0 +application/d3d12_agility_sdk_multiarch=true +ssh_remote_deploy/enabled=false +ssh_remote_deploy/host="user@host_ip" +ssh_remote_deploy/port="22" +ssh_remote_deploy/extra_args_ssh="" +ssh_remote_deploy/extra_args_scp="" +ssh_remote_deploy/run_script="Expand-Archive -LiteralPath '{temp_dir}\\{archive_name}' -DestinationPath '{temp_dir}' +$action = New-ScheduledTaskAction -Execute '{temp_dir}\\{exe_name}' -Argument '{cmd_args}' +$trigger = New-ScheduledTaskTrigger -Once -At 00:00 +$settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries +$task = New-ScheduledTask -Action $action -Trigger $trigger -Settings $settings +Register-ScheduledTask godot_remote_debug -InputObject $task -Force:$true +Start-ScheduledTask -TaskName godot_remote_debug +while (Get-ScheduledTask -TaskName godot_remote_debug | ? State -eq running) { Start-Sleep -Milliseconds 100 } +Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue" +ssh_remote_deploy/cleanup_script="Stop-ScheduledTask -TaskName godot_remote_debug -ErrorAction:SilentlyContinue +Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue +Remove-Item -Recurse -Force '{temp_dir}'" diff --git a/project.godot b/project.godot index e70e06b..a586555 100644 --- a/project.godot +++ b/project.godot @@ -24,6 +24,11 @@ config/icon="res://icon.svg" BackToMain="*res://back_to_main.gd" +[filesystem] + +import/blender/enabled.android=true +import/blender/enabled.web=true + [input] w={