From 0b50dd47c113e890de6e29e5ff64b946228f6ff0 Mon Sep 17 00:00:00 2001 From: phoenixbackrooms Date: Sat, 13 Sep 2025 11:09:26 +0300 Subject: [PATCH 01/17] splitting up builds --- .github/workflows/build-flumi.yml | 149 +++++++++++++++++++++ .github/workflows/build-gdextension.yml | 78 +++++++++++ .github/workflows/build-gurtca.yml | 108 +++++++++++++++ .github/workflows/build-gurty.yml | 73 ++++++++++ .github/workflows/package-release.yml | 171 ++++++++++++++++++++++++ 5 files changed, 579 insertions(+) create mode 100644 .github/workflows/build-flumi.yml create mode 100644 .github/workflows/build-gdextension.yml create mode 100644 .github/workflows/build-gurtca.yml create mode 100644 .github/workflows/build-gurty.yml create mode 100644 .github/workflows/package-release.yml diff --git a/.github/workflows/build-flumi.yml b/.github/workflows/build-flumi.yml new file mode 100644 index 0000000..49c8b62 --- /dev/null +++ b/.github/workflows/build-flumi.yml @@ -0,0 +1,149 @@ +name: Build Flumi + +on: + push: + paths: + - 'flumi/**' + - '.github/workflows/build-flumi.yml' + pull_request: + paths: + - 'flumi/**' + - '.github/workflows/build-flumi.yml' + workflow_dispatch: + inputs: + use_latest_gdextension: + description: 'Use latest GDExtension artifacts from main branch' + required: false + default: 'false' + type: boolean + +jobs: + build-flumi: + name: Build Flumi + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + include: + - os: ubuntu-latest + platform: linux + godot-version: "4.4.1" + export-preset: "Linux" + - os: windows-latest + platform: windows + godot-version: "4.4.1" + export-preset: "Windows Desktop" + + steps: + - uses: actions/checkout@v4 + + - name: Download GDExtension artifacts (if available) + if: github.event.inputs.use_latest_gdextension == 'true' + uses: dawidd6/action-download-artifact@v6 + with: + workflow: build-gdextension.yml + name: gdextension-${{ matrix.platform }} + path: gdextension-artifacts + if_no_artifact_found: warn + continue-on-error: true + + - name: Cache Godot installation + uses: actions/cache@v4 + with: + path: | + ~/.local/share/godot + ~/AppData/Roaming/Godot + key: ${{ runner.os }}-godot-${{ matrix.godot-version }} + + - name: Setup Godot + uses: chickensoft-games/setup-godot@v2.3.0 + with: + version: ${{ matrix.godot-version }} + include-templates: true + + - name: Prepare GDExtension addon (if artifacts available) + if: hashFiles('gdextension-artifacts/*') != '' + shell: bash + run: | + mkdir -p flumi/addons/gurt-protocol/bin/${{ matrix.platform }} + + # Copy GDExtension files + cp gdextension-artifacts/gurt_godot.gdextension flumi/addons/gurt-protocol/ + cp gdextension-artifacts/plugin.cfg flumi/addons/gurt-protocol/ + cp gdextension-artifacts/plugin.gd flumi/addons/gurt-protocol/ + + # Copy the built library + case "${{ matrix.platform }}" in + windows) + cp gdextension-artifacts/gurt_godot.dll flumi/addons/gurt-protocol/bin/${{ matrix.platform }}/ + ;; + linux) + cp gdextension-artifacts/libgurt_godot.so flumi/addons/gurt-protocol/bin/${{ matrix.platform }}/ + ;; + esac + + - name: Cache Godot import files + uses: actions/cache@v4 + with: + path: | + flumi/.godot/ + key: ${{ runner.os }}-flumi-import-${{ hashFiles('flumi/**/*.tscn', 'flumi/**/*.tres', 'flumi/**/*.gd') }} + restore-keys: | + ${{ runner.os }}-flumi-import- + + - name: Import Godot project + run: | + cd flumi + godot --headless --import + + - name: Verify export presets + shell: bash + run: | + cd flumi + echo "Available export presets:" + if [ -f export_presets.cfg ]; then + grep -E '^\[preset\.' export_presets.cfg || echo "No presets found in config" + else + echo "export_presets.cfg not found" + fi + + - name: Export Flumi + shell: bash + run: | + cd flumi + mkdir -p ../flumi-builds/${{ matrix.platform }} + + case "${{ matrix.platform }}" in + windows) + echo "Exporting for Windows..." + godot --headless --export-release "${{ matrix.export-preset }}" ../flumi-builds/${{ matrix.platform }}/Flumi.exe --verbose || { + echo "Export failed with exit code $?" + echo "Trying without --verbose flag..." + godot --headless --export-release "${{ matrix.export-preset }}" ../flumi-builds/${{ matrix.platform }}/Flumi.exe + } + ;; + linux) + echo "Exporting for Linux..." + godot --headless --export-release "${{ matrix.export-preset }}" ../flumi-builds/${{ matrix.platform }}/Flumi --verbose || { + echo "Export failed with exit code $?" + echo "Trying without --verbose flag..." + godot --headless --export-release "${{ matrix.export-preset }}" ../flumi-builds/${{ matrix.platform }}/Flumi + } + ;; + esac + + # Verify the export was successful + if [ -f "../flumi-builds/${{ matrix.platform }}/Flumi${{ matrix.platform == 'windows' && '.exe' || '' }}" ]; then + echo "Export successful!" + ls -la ../flumi-builds/${{ matrix.platform }}/ + else + echo "Export failed - no output file found" + exit 1 + fi + + - name: Upload Flumi artifacts + uses: actions/upload-artifact@v4 + with: + name: flumi-${{ matrix.platform }} + path: flumi-builds/${{ matrix.platform }} + retention-days: 30 \ No newline at end of file diff --git a/.github/workflows/build-gdextension.yml b/.github/workflows/build-gdextension.yml new file mode 100644 index 0000000..8785d6e --- /dev/null +++ b/.github/workflows/build-gdextension.yml @@ -0,0 +1,78 @@ +name: Build GDExtension + +on: + push: + paths: + - 'protocol/gdextension/**' + - 'protocol/library/**' + - '.github/workflows/build-gdextension.yml' + pull_request: + paths: + - 'protocol/gdextension/**' + - 'protocol/library/**' + - '.github/workflows/build-gdextension.yml' + workflow_dispatch: + +env: + CARGO_TERM_COLOR: always + +jobs: + build-gdextension: + name: Build GDExtension + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + include: + - os: ubuntu-latest + target: x86_64-unknown-linux-gnu + platform: linux + lib_name: libgurt_godot.so + - os: windows-latest + target: x86_64-pc-windows-msvc + platform: windows + lib_name: gurt_godot.dll + + steps: + - uses: actions/checkout@v4 + + - name: Install Rust + uses: dtolnay/rust-toolchain@stable + with: + targets: ${{ matrix.target }} + + - name: Cache cargo dependencies + uses: actions/cache@v4 + with: + path: | + ~/.cargo/registry/index/ + ~/.cargo/registry/cache/ + ~/.cargo/git/db/ + protocol/target/ + key: ${{ runner.os }}-gdextension-${{ hashFiles('protocol/gdextension/Cargo.lock', 'protocol/library/Cargo.toml') }} + restore-keys: | + ${{ runner.os }}-gdextension- + ${{ runner.os }}-cargo- + + - name: Build GDExtension + run: | + cd protocol/gdextension + cargo build --release --target ${{ matrix.target }} + + - name: Prepare artifacts + shell: bash + run: | + mkdir -p artifacts/${{ matrix.platform }} + cp protocol/gdextension/target/${{ matrix.target }}/release/${{ matrix.lib_name }} artifacts/${{ matrix.platform }}/ + + # Also copy the extension configuration files + cp protocol/gdextension/gurt_godot.gdextension artifacts/${{ matrix.platform }}/ + cp protocol/gdextension/plugin.cfg artifacts/${{ matrix.platform }}/ + cp protocol/gdextension/plugin.gd artifacts/${{ matrix.platform }}/ + + - name: Upload GDExtension artifacts + uses: actions/upload-artifact@v4 + with: + name: gdextension-${{ matrix.platform }} + path: artifacts/${{ matrix.platform }} + retention-days: 30 \ No newline at end of file diff --git a/.github/workflows/build-gurtca.yml b/.github/workflows/build-gurtca.yml new file mode 100644 index 0000000..63f42f8 --- /dev/null +++ b/.github/workflows/build-gurtca.yml @@ -0,0 +1,108 @@ +name: Build GurtCA + +on: + push: + paths: + - 'protocol/gurtca/**' + - 'protocol/library/**' + - '.github/workflows/build-gurtca.yml' + pull_request: + paths: + - 'protocol/gurtca/**' + - 'protocol/library/**' + - '.github/workflows/build-gurtca.yml' + workflow_dispatch: + +env: + CARGO_TERM_COLOR: always + +jobs: + build-gurtca: + name: Build GurtCA + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + include: + - os: ubuntu-latest + target: x86_64-unknown-linux-gnu + platform: linux + ext: "" + - os: windows-latest + target: x86_64-pc-windows-msvc + platform: windows + ext: ".exe" + + steps: + - uses: actions/checkout@v4 + + - name: Install Rust + uses: dtolnay/rust-toolchain@stable + with: + targets: ${{ matrix.target }} + + - name: Cache cargo dependencies + uses: actions/cache@v4 + with: + path: | + ~/.cargo/registry/index/ + ~/.cargo/registry/cache/ + ~/.cargo/git/db/ + protocol/target/ + key: ${{ runner.os }}-gurtca-${{ hashFiles('protocol/gurtca/Cargo.lock', 'protocol/library/Cargo.toml') }} + restore-keys: | + ${{ runner.os }}-gurtca- + ${{ runner.os }}-cargo- + + - name: Install OpenSSL (Ubuntu) + if: matrix.os == 'ubuntu-latest' + run: | + sudo apt-get update + sudo apt-get install -y pkg-config libssl-dev + + - name: Cache vcpkg (Windows) + if: matrix.os == 'windows-latest' + uses: actions/cache@v4 + with: + path: C:\vcpkg + key: ${{ runner.os }}-vcpkg-openssl + restore-keys: | + ${{ runner.os }}-vcpkg- + + - name: Install OpenSSL (Windows) + if: matrix.os == 'windows-latest' + run: | + if (!(Test-Path "C:\vcpkg")) { + git clone https://github.com/Microsoft/vcpkg.git C:\vcpkg + cd C:\vcpkg + .\bootstrap-vcpkg.bat + .\vcpkg.exe integrate install + } + cd C:\vcpkg + .\vcpkg.exe install openssl:x64-windows-static-md + shell: pwsh + + - name: Set OpenSSL environment variables (Windows) + if: matrix.os == 'windows-latest' + shell: pwsh + run: | + echo "VCPKG_ROOT=C:\vcpkg" >> $env:GITHUB_ENV + echo "OPENSSL_DIR=C:\vcpkg\installed\x64-windows-static-md" >> $env:GITHUB_ENV + + - name: Build GurtCA + run: | + cd protocol/gurtca + cargo build --release --target ${{ matrix.target }} + + - name: Prepare artifacts + shell: bash + run: | + mkdir -p artifacts/${{ matrix.platform }} + cp protocol/gurtca/target/${{ matrix.target }}/release/gurtca${{ matrix.ext }} artifacts/${{ matrix.platform }}/ + + - name: Upload GurtCA artifacts + uses: actions/upload-artifact@v4 + with: + name: gurtca-${{ matrix.platform }} + path: artifacts/${{ matrix.platform }} + retention-days: 30 \ No newline at end of file diff --git a/.github/workflows/build-gurty.yml b/.github/workflows/build-gurty.yml new file mode 100644 index 0000000..532cfc3 --- /dev/null +++ b/.github/workflows/build-gurty.yml @@ -0,0 +1,73 @@ +name: Build Gurty + +on: + push: + paths: + - 'protocol/cli/**' + - 'protocol/library/**' + - '.github/workflows/build-gurty.yml' + pull_request: + paths: + - 'protocol/cli/**' + - 'protocol/library/**' + - '.github/workflows/build-gurty.yml' + workflow_dispatch: + +env: + CARGO_TERM_COLOR: always + +jobs: + build-gurty: + name: Build Gurty + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + include: + - os: ubuntu-latest + target: x86_64-unknown-linux-gnu + platform: linux + ext: "" + - os: windows-latest + target: x86_64-pc-windows-msvc + platform: windows + ext: ".exe" + + steps: + - uses: actions/checkout@v4 + + - name: Install Rust + uses: dtolnay/rust-toolchain@stable + with: + targets: ${{ matrix.target }} + + - name: Cache cargo dependencies + uses: actions/cache@v4 + with: + path: | + ~/.cargo/registry/index/ + ~/.cargo/registry/cache/ + ~/.cargo/git/db/ + protocol/target/ + key: ${{ runner.os }}-gurty-${{ hashFiles('protocol/cli/Cargo.lock', 'protocol/library/Cargo.toml') }} + restore-keys: | + ${{ runner.os }}-gurty- + ${{ runner.os }}-cargo- + + - name: Build Gurty + run: | + cd protocol/cli + cargo build --release --target ${{ matrix.target }} + + - name: Prepare artifacts + shell: bash + run: | + mkdir -p artifacts/${{ matrix.platform }} + cp protocol/cli/target/${{ matrix.target }}/release/gurty${{ matrix.ext }} artifacts/${{ matrix.platform }}/ + + - name: Upload Gurty artifacts + uses: actions/upload-artifact@v4 + with: + name: gurty-${{ matrix.platform }} + path: artifacts/${{ matrix.platform }} + retention-days: 30 \ No newline at end of file diff --git a/.github/workflows/package-release.yml b/.github/workflows/package-release.yml new file mode 100644 index 0000000..5092654 --- /dev/null +++ b/.github/workflows/package-release.yml @@ -0,0 +1,171 @@ +name: Package Release + +on: + push: + tags: + - 'v*' + workflow_dispatch: + inputs: + tag: + description: 'Release tag' + required: true + default: 'v0.1.0' + download_artifacts: + description: 'Download latest artifacts from main branch' + required: false + default: 'true' + type: boolean + +jobs: + package-release: + name: Package Release + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Download GurtCA artifacts + if: github.event.inputs.download_artifacts == 'true' || github.event_name == 'push' + uses: dawidd6/action-download-artifact@v6 + with: + workflow: build-gurtca.yml + name_is_regexp: true + name: gurtca-.* + path: artifacts/ + if_no_artifact_found: warn + continue-on-error: true + + - name: Download Gurty artifacts + if: github.event.inputs.download_artifacts == 'true' || github.event_name == 'push' + uses: dawidd6/action-download-artifact@v6 + with: + workflow: build-gurty.yml + name_is_regexp: true + name: gurty-.* + path: artifacts/ + if_no_artifact_found: warn + continue-on-error: true + + - name: Download GDExtension artifacts + if: github.event.inputs.download_artifacts == 'true' || github.event_name == 'push' + uses: dawidd6/action-download-artifact@v6 + with: + workflow: build-gdextension.yml + name_is_regexp: true + name: gdextension-.* + path: artifacts/ + if_no_artifact_found: warn + continue-on-error: true + + - name: Download Flumi artifacts + if: github.event.inputs.download_artifacts == 'true' || github.event_name == 'push' + uses: dawidd6/action-download-artifact@v6 + with: + workflow: build-flumi.yml + name_is_regexp: true + name: flumi-.* + path: artifacts/ + if_no_artifact_found: warn + continue-on-error: true + + - name: List downloaded artifacts + run: | + echo "Downloaded artifacts:" + find artifacts/ -type f -name "*" | sort + + - name: Prepare release assets + run: | + mkdir -p release-assets + + # Package Rust binaries (GurtCA + Gurty) + for platform in linux windows; do + mkdir -p "temp-tools-$platform" + + # Copy GurtCA if available + if [ -d "artifacts/gurtca-$platform" ]; then + cp artifacts/gurtca-$platform/* "temp-tools-$platform/" + fi + + # Copy Gurty if available + if [ -d "artifacts/gurty-$platform" ]; then + cp artifacts/gurty-$platform/* "temp-tools-$platform/" + fi + + # Package if we have any files + if [ "$(ls -A temp-tools-$platform)" ]; then + cd "temp-tools-$platform" + if [ "$platform" = "windows" ]; then + zip -r "../release-assets/gurted-tools-$platform.zip" . + else + tar -czf "../release-assets/gurted-tools-$platform.tar.gz" . + fi + cd .. + fi + + rm -rf "temp-tools-$platform" + done + + # Package Flumi builds + for platform in linux windows; do + if [ -d "artifacts/flumi-$platform" ]; then + cd "artifacts/flumi-$platform" + if [ "$platform" = "windows" ]; then + zip -r "../../release-assets/flumi-$platform.zip" . + else + tar -czf "../../release-assets/flumi-$platform.tar.gz" . + fi + cd ../.. + fi + done + + # Package GDExtension separately for developers + for platform in linux windows; do + if [ -d "artifacts/gdextension-$platform" ]; then + cd "artifacts/gdextension-$platform" + if [ "$platform" = "windows" ]; then + zip -r "../../release-assets/gdextension-$platform.zip" . + else + tar -czf "../../release-assets/gdextension-$platform.tar.gz" . + fi + cd ../.. + fi + done + + - name: Get release tag + id: get_tag + run: | + if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then + echo "tag=${{ github.event.inputs.tag }}" >> $GITHUB_OUTPUT + else + echo "tag=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT + fi + + - name: Create Release + uses: softprops/action-gh-release@v2 + with: + tag_name: ${{ steps.get_tag.outputs.tag }} + name: Gurted ${{ steps.get_tag.outputs.tag }} + body: | + ## Gurted Release ${{ steps.get_tag.outputs.tag }} + + This release includes: + - **GurtCA**: Certificate Authority for TLS certificates + - **Gurty**: CLI tool for managing GURT protocol servers + - **Flumi**: The official wayfinder (browser) for the GURT ecosystem + - **GDExtension**: Godot extension for GURT protocol integration + + ### Downloads + - `gurted-tools-*.zip/tar.gz`: Contains GurtCA and Gurty binaries + - `flumi-*.zip/tar.gz`: Contains the Flumi wayfinder application + - `gdextension-*.zip/tar.gz`: Contains the GDExtension library for developers + + ### Platform Support + - Linux (x86_64) + - Windows (x86_64) + + For documentation and usage instructions, visit [docs.gurted.com](https://docs.gurted.com) + files: release-assets/* + draft: false + prerelease: false + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file From ff54c6364a22d09e65424024d1ba1511036bf0f8 Mon Sep 17 00:00:00 2001 From: phoenixbackrooms Date: Sat, 13 Sep 2025 17:05:39 +0300 Subject: [PATCH 02/17] Update package-release.yml --- .github/workflows/package-release.yml | 80 ++++++++++++++++++++++++++- 1 file changed, 77 insertions(+), 3 deletions(-) diff --git a/.github/workflows/package-release.yml b/.github/workflows/package-release.yml index 5092654..f4daf13 100644 --- a/.github/workflows/package-release.yml +++ b/.github/workflows/package-release.yml @@ -73,6 +73,67 @@ jobs: echo "Downloaded artifacts:" find artifacts/ -type f -name "*" | sort + - name: Download UPX for Windows compression + if: github.event.inputs.download_artifacts == 'true' || github.event_name == 'push' + run: | + wget https://github.com/upx/upx/releases/download/v4.2.4/upx-4.2.4-win64.zip + unzip upx-4.2.4-win64.zip + chmod +x upx-4.2.4-win64/upx.exe + + - name: Setup Wine for running Windows executables + if: github.event.inputs.download_artifacts == 'true' || github.event_name == 'push' + run: | + sudo apt-get update + sudo apt-get install -y wine64 + + - name: Compress Windows Flumi binaries with UPX + if: github.event.inputs.download_artifacts == 'true' || github.event_name == 'push' + run: | + if [ -d "artifacts/flumi-windows" ]; then + echo "Compressing Windows Flumi binaries..." + # Create build-scripts/Windows structure expected by UPX command + mkdir -p build-scripts/Windows + cp artifacts/flumi-windows/* build-scripts/Windows/ + + # Run UPX compression using Wine + wine ./upx-4.2.4-win64/upx.exe --best --ultra-brute build-scripts/Windows/*.exe build-scripts/Windows/*.dll || echo "UPX compression completed with warnings" + + # Copy compressed files back + cp build-scripts/Windows/* artifacts/flumi-windows/ + fi + + - name: Setup Inno Setup + if: github.event.inputs.download_artifacts == 'true' || github.event_name == 'push' + run: | + # Download and setup Inno Setup + wget https://jrsoftware.org/download.php/is.exe -O innosetup.exe + wine innosetup.exe /VERYSILENT /NORESTART /DIR="$HOME/.wine/drive_c/InnoSetup" + + - name: Build Windows installer + if: github.event.inputs.download_artifacts == 'true' || github.event_name == 'push' + run: | + if [ -d "artifacts/flumi-windows" ]; then + echo "Building Windows installer..." + + # Setup directory structure for installer + mkdir -p build-scripts/Windows + cp artifacts/flumi-windows/* build-scripts/Windows/ + + # Copy the installer script + cp flumi/build-scripts/flumi-installer.iss build-scripts/ + + # Create installer output directory + mkdir -p build-scripts/Windows/installer + + # Build installer using Inno Setup + wine "$HOME/.wine/drive_c/InnoSetup/ISCC.exe" build-scripts/flumi-installer.iss || echo "Installer build completed" + + # Copy installer to artifacts + if [ -f "build-scripts/Windows/installer/Flumi-Setup-1.0.2.exe" ]; then + cp build-scripts/Windows/installer/Flumi-Setup-*.exe artifacts/flumi-windows/ + fi + fi + - name: Prepare release assets run: | mkdir -p release-assets @@ -109,8 +170,16 @@ jobs: for platform in linux windows; do if [ -d "artifacts/flumi-$platform" ]; then cd "artifacts/flumi-$platform" + + # For Windows, create both compressed binaries package and installer if [ "$platform" = "windows" ]; then - zip -r "../../release-assets/flumi-$platform.zip" . + # Create compressed binaries package + zip -r "../../release-assets/flumi-$platform-binaries.zip" . --exclude="*.exe" # Exclude installer from binaries + + # Copy installer separately if it exists + if ls Flumi-Setup-*.exe 1> /dev/null 2>&1; then + cp Flumi-Setup-*.exe "../../release-assets/" + fi else tar -czf "../../release-assets/flumi-$platform.tar.gz" . fi @@ -156,16 +225,21 @@ jobs: ### Downloads - `gurted-tools-*.zip/tar.gz`: Contains GurtCA and Gurty binaries - - `flumi-*.zip/tar.gz`: Contains the Flumi wayfinder application + - `flumi-linux.tar.gz`: Contains the Flumi wayfinder application for Linux + - `flumi-windows-binaries.zip`: Contains compressed Flumi binaries for Windows + - `Flumi-Setup-*.exe`: Windows installer for Flumi (recommended for Windows users) - `gdextension-*.zip/tar.gz`: Contains the GDExtension library for developers ### Platform Support - Linux (x86_64) - Windows (x86_64) + ### Windows Users + For the best experience on Windows, download and run the `Flumi-Setup-*.exe` installer. + For documentation and usage instructions, visit [docs.gurted.com](https://docs.gurted.com) files: release-assets/* draft: false prerelease: false env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From bbe2c70cde9493e8777050812e5e5ace242f0662 Mon Sep 17 00:00:00 2001 From: phoenixbackrooms Date: Sat, 13 Sep 2025 17:14:45 +0300 Subject: [PATCH 03/17] Update package-release.yml --- .github/workflows/package-release.yml | 222 +++++++++++++++----------- 1 file changed, 126 insertions(+), 96 deletions(-) diff --git a/.github/workflows/package-release.yml b/.github/workflows/package-release.yml index f4daf13..2f5adc0 100644 --- a/.github/workflows/package-release.yml +++ b/.github/workflows/package-release.yml @@ -19,7 +19,7 @@ on: jobs: package-release: name: Package Release - runs-on: ubuntu-latest + runs-on: windows-latest steps: - uses: actions/checkout@v4 @@ -69,145 +69,175 @@ jobs: continue-on-error: true - name: List downloaded artifacts + shell: powershell run: | - echo "Downloaded artifacts:" - find artifacts/ -type f -name "*" | sort + Write-Output "Downloaded artifacts:" + Get-ChildItem -Path artifacts -Recurse -File | Sort-Object FullName - - name: Download UPX for Windows compression + - name: Download and setup UPX if: github.event.inputs.download_artifacts == 'true' || github.event_name == 'push' + shell: powershell run: | - wget https://github.com/upx/upx/releases/download/v4.2.4/upx-4.2.4-win64.zip - unzip upx-4.2.4-win64.zip - chmod +x upx-4.2.4-win64/upx.exe - - - name: Setup Wine for running Windows executables - if: github.event.inputs.download_artifacts == 'true' || github.event_name == 'push' - run: | - sudo apt-get update - sudo apt-get install -y wine64 + Invoke-WebRequest -Uri "https://github.com/upx/upx/releases/download/v4.2.4/upx-4.2.4-win64.zip" -OutFile "upx.zip" + Expand-Archive -Path "upx.zip" -DestinationPath "." - name: Compress Windows Flumi binaries with UPX if: github.event.inputs.download_artifacts == 'true' || github.event_name == 'push' + shell: powershell run: | - if [ -d "artifacts/flumi-windows" ]; then - echo "Compressing Windows Flumi binaries..." - # Create build-scripts/Windows structure expected by UPX command - mkdir -p build-scripts/Windows - cp artifacts/flumi-windows/* build-scripts/Windows/ + if (Test-Path "artifacts/flumi-windows") { + Write-Output "Compressing Windows Flumi binaries..." - # Run UPX compression using Wine - wine ./upx-4.2.4-win64/upx.exe --best --ultra-brute build-scripts/Windows/*.exe build-scripts/Windows/*.dll || echo "UPX compression completed with warnings" + # Create build-scripts/Windows structure + New-Item -ItemType Directory -Path "build-scripts/Windows" -Force + Copy-Item "artifacts/flumi-windows/*" "build-scripts/Windows/" -Force + + # Run UPX compression + try { + & ".\upx-4.2.4-win64\upx.exe" --best --ultra-brute build-scripts/Windows/*.exe build-scripts/Windows/*.dll + Write-Output "UPX compression completed successfully" + } catch { + Write-Output "UPX compression completed with warnings: $($_.Exception.Message)" + } # Copy compressed files back - cp build-scripts/Windows/* artifacts/flumi-windows/ - fi + Copy-Item "build-scripts/Windows/*" "artifacts/flumi-windows/" -Force + } - - name: Setup Inno Setup + - name: Download and setup Inno Setup if: github.event.inputs.download_artifacts == 'true' || github.event_name == 'push' + shell: powershell run: | - # Download and setup Inno Setup - wget https://jrsoftware.org/download.php/is.exe -O innosetup.exe - wine innosetup.exe /VERYSILENT /NORESTART /DIR="$HOME/.wine/drive_c/InnoSetup" + Invoke-WebRequest -Uri "https://files.jrsoftware.org/is/6/innosetup-6.2.2.exe" -OutFile "innosetup.exe" + Start-Process -FilePath ".\innosetup.exe" -ArgumentList "/VERYSILENT", "/NORESTART", "/DIR=C:\InnoSetup" -Wait - name: Build Windows installer if: github.event.inputs.download_artifacts == 'true' || github.event_name == 'push' + shell: powershell run: | - if [ -d "artifacts/flumi-windows" ]; then - echo "Building Windows installer..." + if (Test-Path "artifacts/flumi-windows") { + Write-Output "Building Windows installer..." # Setup directory structure for installer - mkdir -p build-scripts/Windows - cp artifacts/flumi-windows/* build-scripts/Windows/ - - # Copy the installer script - cp flumi/build-scripts/flumi-installer.iss build-scripts/ + New-Item -ItemType Directory -Path "build-scripts/Windows" -Force + Copy-Item "artifacts/flumi-windows/*" "build-scripts/Windows/" -Force # Create installer output directory - mkdir -p build-scripts/Windows/installer + New-Item -ItemType Directory -Path "build-scripts/Windows/installer" -Force - # Build installer using Inno Setup - wine "$HOME/.wine/drive_c/InnoSetup/ISCC.exe" build-scripts/flumi-installer.iss || echo "Installer build completed" + # Build installer using your existing .iss file + $issPath = Resolve-Path "flumi/build-scripts/flumi-installer.iss" + & "C:\InnoSetup\ISCC.exe" $issPath.Path - # Copy installer to artifacts - if [ -f "build-scripts/Windows/installer/Flumi-Setup-1.0.2.exe" ]; then - cp build-scripts/Windows/installer/Flumi-Setup-*.exe artifacts/flumi-windows/ - fi - fi + # Copy installer to artifacts if it exists + if (Test-Path "build-scripts/Windows/installer/Flumi-Setup-*.exe") { + Copy-Item "build-scripts/Windows/installer/Flumi-Setup-*.exe" "artifacts/flumi-windows/" -Force + Write-Output "Installer created and copied successfully" + } else { + Write-Output "Warning: Installer was not created" + } + } - name: Prepare release assets + shell: powershell run: | - mkdir -p release-assets + New-Item -ItemType Directory -Path "release-assets" -Force # Package Rust binaries (GurtCA + Gurty) - for platform in linux windows; do - mkdir -p "temp-tools-$platform" + foreach ($platform in @("linux", "windows")) { + $tempDir = "temp-tools-$platform" + New-Item -ItemType Directory -Path $tempDir -Force # Copy GurtCA if available - if [ -d "artifacts/gurtca-$platform" ]; then - cp artifacts/gurtca-$platform/* "temp-tools-$platform/" - fi + if (Test-Path "artifacts/gurtca-$platform") { + Copy-Item "artifacts/gurtca-$platform/*" $tempDir -Force + } # Copy Gurty if available - if [ -d "artifacts/gurty-$platform" ]; then - cp artifacts/gurty-$platform/* "temp-tools-$platform/" - fi + if (Test-Path "artifacts/gurty-$platform") { + Copy-Item "artifacts/gurty-$platform/*" $tempDir -Force + } # Package if we have any files - if [ "$(ls -A temp-tools-$platform)" ]; then - cd "temp-tools-$platform" - if [ "$platform" = "windows" ]; then - zip -r "../release-assets/gurted-tools-$platform.zip" . - else - tar -czf "../release-assets/gurted-tools-$platform.tar.gz" . - fi - cd .. - fi + $files = Get-ChildItem $tempDir -ErrorAction SilentlyContinue + if ($files.Count -gt 0) { + if ($platform -eq "windows") { + Compress-Archive -Path "$tempDir/*" -DestinationPath "release-assets/gurted-tools-$platform.zip" -Force + } else { + # For Linux files, we'll use 7zip if available, otherwise skip tar.gz creation on Windows + if (Get-Command "7z" -ErrorAction SilentlyContinue) { + & "7z" a -ttar "release-assets/gurted-tools-$platform.tar" "$tempDir/*" + & "7z" a -tgzip "release-assets/gurted-tools-$platform.tar.gz" "release-assets/gurted-tools-$platform.tar" + Remove-Item "release-assets/gurted-tools-$platform.tar" -Force + } else { + # Fallback to zip for Linux binaries too + Compress-Archive -Path "$tempDir/*" -DestinationPath "release-assets/gurted-tools-$platform.zip" -Force + } + } + } - rm -rf "temp-tools-$platform" - done + Remove-Item $tempDir -Recurse -Force -ErrorAction SilentlyContinue + } # Package Flumi builds - for platform in linux windows; do - if [ -d "artifacts/flumi-$platform" ]; then - cd "artifacts/flumi-$platform" + foreach ($platform in @("linux", "windows")) { + if (Test-Path "artifacts/flumi-$platform") { + Push-Location "artifacts/flumi-$platform" - # For Windows, create both compressed binaries package and installer - if [ "$platform" = "windows" ]; then - # Create compressed binaries package - zip -r "../../release-assets/flumi-$platform-binaries.zip" . --exclude="*.exe" # Exclude installer from binaries + if ($platform -eq "windows") { + # Create compressed binaries package (exclude installer files) + $filesToZip = Get-ChildItem -Exclude "Flumi-Setup-*.exe" + if ($filesToZip.Count -gt 0) { + Compress-Archive -Path $filesToZip -DestinationPath "../../release-assets/flumi-$platform-binaries.zip" -Force + } # Copy installer separately if it exists - if ls Flumi-Setup-*.exe 1> /dev/null 2>&1; then - cp Flumi-Setup-*.exe "../../release-assets/" - fi - else - tar -czf "../../release-assets/flumi-$platform.tar.gz" . - fi - cd ../.. - fi - done + $installer = Get-ChildItem "Flumi-Setup-*.exe" -ErrorAction SilentlyContinue + if ($installer) { + Copy-Item $installer "../../release-assets/" -Force + } + } else { + if (Get-Command "7z" -ErrorAction SilentlyContinue) { + & "7z" a -ttar "../../release-assets/flumi-$platform.tar" "*" + & "7z" a -tgzip "../../release-assets/flumi-$platform.tar.gz" "../../release-assets/flumi-$platform.tar" + Remove-Item "../../release-assets/flumi-$platform.tar" -Force + } else { + Compress-Archive -Path "*" -DestinationPath "../../release-assets/flumi-$platform.zip" -Force + } + } + Pop-Location + } + } # Package GDExtension separately for developers - for platform in linux windows; do - if [ -d "artifacts/gdextension-$platform" ]; then - cd "artifacts/gdextension-$platform" - if [ "$platform" = "windows" ]; then - zip -r "../../release-assets/gdextension-$platform.zip" . - else - tar -czf "../../release-assets/gdextension-$platform.tar.gz" . - fi - cd ../.. - fi - done + foreach ($platform in @("linux", "windows")) { + if (Test-Path "artifacts/gdextension-$platform") { + Push-Location "artifacts/gdextension-$platform" + if ($platform -eq "windows") { + Compress-Archive -Path "*" -DestinationPath "../../release-assets/gdextension-$platform.zip" -Force + } else { + if (Get-Command "7z" -ErrorAction SilentlyContinue) { + & "7z" a -ttar "../../release-assets/gdextension-$platform.tar" "*" + & "7z" a -tgzip "../../release-assets/gdextension-$platform.tar.gz" "../../release-assets/gdextension-$platform.tar" + Remove-Item "../../release-assets/gdextension-$platform.tar" -Force + } else { + Compress-Archive -Path "*" -DestinationPath "../../release-assets/gdextension-$platform.zip" -Force + } + } + Pop-Location + } + } - name: Get release tag id: get_tag + shell: powershell run: | - if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then - echo "tag=${{ github.event.inputs.tag }}" >> $GITHUB_OUTPUT - else - echo "tag=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT - fi + if ("${{ github.event_name }}" -eq "workflow_dispatch") { + echo "tag=${{ github.event.inputs.tag }}" >> $env:GITHUB_OUTPUT + } else { + $tag = "${{ github.ref }}" -replace "refs/tags/", "" + echo "tag=$tag" >> $env:GITHUB_OUTPUT + } - name: Create Release uses: softprops/action-gh-release@v2 @@ -224,11 +254,11 @@ jobs: - **GDExtension**: Godot extension for GURT protocol integration ### Downloads - - `gurted-tools-*.zip/tar.gz`: Contains GurtCA and Gurty binaries - - `flumi-linux.tar.gz`: Contains the Flumi wayfinder application for Linux + - `gurted-tools-*.zip`: Contains GurtCA and Gurty binaries + - `flumi-linux.*`: Contains the Flumi wayfinder application for Linux - `flumi-windows-binaries.zip`: Contains compressed Flumi binaries for Windows - `Flumi-Setup-*.exe`: Windows installer for Flumi (recommended for Windows users) - - `gdextension-*.zip/tar.gz`: Contains the GDExtension library for developers + - `gdextension-*.zip`: Contains the GDExtension library for developers ### Platform Support - Linux (x86_64) From a72b7bab459a509fb5fa108dcf72028337f713e5 Mon Sep 17 00:00:00 2001 From: phoenixbackrooms Date: Sat, 13 Sep 2025 17:27:31 +0300 Subject: [PATCH 04/17] Speeding up compression? --- .github/workflows/package-release.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/package-release.yml b/.github/workflows/package-release.yml index 2f5adc0..e87b7bb 100644 --- a/.github/workflows/package-release.yml +++ b/.github/workflows/package-release.yml @@ -94,7 +94,7 @@ jobs: # Run UPX compression try { - & ".\upx-4.2.4-win64\upx.exe" --best --ultra-brute build-scripts/Windows/*.exe build-scripts/Windows/*.dll + & ".\upx-4.2.4-win64\upx.exe" --lzma --best build-scripts/Windows/*.exe build-scripts/Windows/*.dll Write-Output "UPX compression completed successfully" } catch { Write-Output "UPX compression completed with warnings: $($_.Exception.Message)" @@ -273,3 +273,4 @@ jobs: prerelease: false env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + From a27ebf6c468630ab420380513ac4231427800b58 Mon Sep 17 00:00:00 2001 From: phoenixbackrooms Date: Sat, 13 Sep 2025 17:37:41 +0300 Subject: [PATCH 05/17] update inno setup --- .github/workflows/package-release.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/package-release.yml b/.github/workflows/package-release.yml index e87b7bb..f5ba3e0 100644 --- a/.github/workflows/package-release.yml +++ b/.github/workflows/package-release.yml @@ -108,7 +108,7 @@ jobs: if: github.event.inputs.download_artifacts == 'true' || github.event_name == 'push' shell: powershell run: | - Invoke-WebRequest -Uri "https://files.jrsoftware.org/is/6/innosetup-6.2.2.exe" -OutFile "innosetup.exe" + Invoke-WebRequest -Uri "https://files.jrsoftware.org/is/6/innosetup-6.5.3.exe" -OutFile "innosetup.exe" Start-Process -FilePath ".\innosetup.exe" -ArgumentList "/VERYSILENT", "/NORESTART", "/DIR=C:\InnoSetup" -Wait - name: Build Windows installer @@ -274,3 +274,4 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + From 35a9e08e87cd136077743c014c64101e85398bb8 Mon Sep 17 00:00:00 2001 From: phoenixbackrooms Date: Sat, 13 Sep 2025 21:09:56 +0300 Subject: [PATCH 06/17] maybe working installer??? --- .github/workflows/package-release.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/package-release.yml b/.github/workflows/package-release.yml index f5ba3e0..b60375c 100644 --- a/.github/workflows/package-release.yml +++ b/.github/workflows/package-release.yml @@ -120,10 +120,10 @@ jobs: # Setup directory structure for installer New-Item -ItemType Directory -Path "build-scripts/Windows" -Force - Copy-Item "artifacts/flumi-windows/*" "build-scripts/Windows/" -Force + Copy-Item "artifacts/flumi-windows/*" "flumi/build-scripts/Windows/" -Force # Create installer output directory - New-Item -ItemType Directory -Path "build-scripts/Windows/installer" -Force + New-Item -ItemType Directory -Path "flumi/build-scripts/Windows/installer" -Force # Build installer using your existing .iss file $issPath = Resolve-Path "flumi/build-scripts/flumi-installer.iss" @@ -275,3 +275,4 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + From 945b80f1d3bfdf5e0f90c0007c5d55e711c2f735 Mon Sep 17 00:00:00 2001 From: phoenixbackrooms Date: Sat, 13 Sep 2025 21:17:49 +0300 Subject: [PATCH 07/17] ah shit here we go again --- .github/workflows/package-release.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/package-release.yml b/.github/workflows/package-release.yml index b60375c..4637987 100644 --- a/.github/workflows/package-release.yml +++ b/.github/workflows/package-release.yml @@ -119,8 +119,8 @@ jobs: Write-Output "Building Windows installer..." # Setup directory structure for installer - New-Item -ItemType Directory -Path "build-scripts/Windows" -Force - Copy-Item "artifacts/flumi-windows/*" "flumi/build-scripts/Windows/" -Force + New-Item -ItemType Directory -Path "build-scripts\Windows" -Force + Copy-Item "artifacts\flumi-windows\*" "flumi\build-scripts\Windows\" -Force # Create installer output directory New-Item -ItemType Directory -Path "flumi/build-scripts/Windows/installer" -Force @@ -276,3 +276,4 @@ jobs: + From cd64557f86a0ea57f61e33d77e7672e153d42408 Mon Sep 17 00:00:00 2001 From: phoenixbackrooms Date: Sat, 13 Sep 2025 21:37:13 +0300 Subject: [PATCH 08/17] you didn't have to cut me o- --- .github/workflows/package-release.yml | 37 +++++++++++++++------------ 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/.github/workflows/package-release.yml b/.github/workflows/package-release.yml index 4637987..e2ed525 100644 --- a/.github/workflows/package-release.yml +++ b/.github/workflows/package-release.yml @@ -115,29 +115,33 @@ jobs: if: github.event.inputs.download_artifacts == 'true' || github.event_name == 'push' shell: powershell run: | - if (Test-Path "artifacts/flumi-windows") { + if (Test-Path "artifacts\flumi-windows") { Write-Output "Building Windows installer..." - - # Setup directory structure for installer - New-Item -ItemType Directory -Path "build-scripts\Windows" -Force - Copy-Item "artifacts\flumi-windows\*" "flumi\build-scripts\Windows\" -Force - - # Create installer output directory - New-Item -ItemType Directory -Path "flumi/build-scripts/Windows/installer" -Force - - # Build installer using your existing .iss file - $issPath = Resolve-Path "flumi/build-scripts/flumi-installer.iss" + + # Ensure the path relative to the .iss exists + New-Item -ItemType Directory -Path "flumi\build-scripts\Windows" -Force | Out-Null + + # Copy files from artifacts into flumi\build-scripts\Windows (robust enumeration) + Get-ChildItem -Path "artifacts\flumi-windows" -File | ForEach-Object { + Copy-Item -Path $_.FullName -Destination "flumi\build-scripts\Windows" -Force + } + + # Ensure installer output dir matches OutputDir=Windows\installer in .iss + New-Item -ItemType Directory -Path "flumi\build-scripts\Windows\installer" -Force | Out-Null + + # Compile using .iss (paths resolved relative to flumi/build-scripts) + $issPath = Resolve-Path "flumi\build-scripts\flumi-installer.iss" & "C:\InnoSetup\ISCC.exe" $issPath.Path - - # Copy installer to artifacts if it exists - if (Test-Path "build-scripts/Windows/installer/Flumi-Setup-*.exe") { - Copy-Item "build-scripts/Windows/installer/Flumi-Setup-*.exe" "artifacts/flumi-windows/" -Force + + # Copy installer to artifacts + $built = Get-ChildItem "flumi\build-scripts\Windows\installer" -Filter "Flumi-Setup-*.exe" -ErrorAction SilentlyContinue + if ($built) { + Copy-Item $built.FullName "artifacts\flumi-windows" -Force Write-Output "Installer created and copied successfully" } else { Write-Output "Warning: Installer was not created" } } - - name: Prepare release assets shell: powershell run: | @@ -277,3 +281,4 @@ jobs: + From 848a68e6c2bfdf0507038880bf06d07606a9ba16 Mon Sep 17 00:00:00 2001 From: phoenixbackrooms Date: Sun, 14 Sep 2025 21:05:05 +0300 Subject: [PATCH 09/17] update packagin Update the packaging to remove gdscript packaging and to stop releasing flumi as a zip file --- .github/workflows/package-release.yml | 89 +++++++-------------------- 1 file changed, 21 insertions(+), 68 deletions(-) diff --git a/.github/workflows/package-release.yml b/.github/workflows/package-release.yml index e2ed525..a786a43 100644 --- a/.github/workflows/package-release.yml +++ b/.github/workflows/package-release.yml @@ -147,40 +147,23 @@ jobs: run: | New-Item -ItemType Directory -Path "release-assets" -Force - # Package Rust binaries (GurtCA + Gurty) + # Copy Rust binaries directly (GurtCA + Gurty) foreach ($platform in @("linux", "windows")) { - $tempDir = "temp-tools-$platform" - New-Item -ItemType Directory -Path $tempDir -Force - - # Copy GurtCA if available + # Copy GurtCA binaries if (Test-Path "artifacts/gurtca-$platform") { - Copy-Item "artifacts/gurtca-$platform/*" $tempDir -Force - } - - # Copy Gurty if available - if (Test-Path "artifacts/gurty-$platform") { - Copy-Item "artifacts/gurty-$platform/*" $tempDir -Force - } - - # Package if we have any files - $files = Get-ChildItem $tempDir -ErrorAction SilentlyContinue - if ($files.Count -gt 0) { - if ($platform -eq "windows") { - Compress-Archive -Path "$tempDir/*" -DestinationPath "release-assets/gurted-tools-$platform.zip" -Force - } else { - # For Linux files, we'll use 7zip if available, otherwise skip tar.gz creation on Windows - if (Get-Command "7z" -ErrorAction SilentlyContinue) { - & "7z" a -ttar "release-assets/gurted-tools-$platform.tar" "$tempDir/*" - & "7z" a -tgzip "release-assets/gurted-tools-$platform.tar.gz" "release-assets/gurted-tools-$platform.tar" - Remove-Item "release-assets/gurted-tools-$platform.tar" -Force - } else { - # Fallback to zip for Linux binaries too - Compress-Archive -Path "$tempDir/*" -DestinationPath "release-assets/gurted-tools-$platform.zip" -Force - } + Get-ChildItem "artifacts/gurtca-$platform" -File | ForEach-Object { + $newName = $_.BaseName + Copy-Item $_.FullName "release-assets/$newName" -Force } } - Remove-Item $tempDir -Recurse -Force -ErrorAction SilentlyContinue + # Copy Gurty binaries + if (Test-Path "artifacts/gurty-$platform") { + Get-ChildItem "artifacts/gurty-$platform" -File | ForEach-Object { + $newName = $_.BaseName + Copy-Item $_.FullName "release-assets/$newName" -Force + } + } } # Package Flumi builds @@ -189,11 +172,6 @@ jobs: Push-Location "artifacts/flumi-$platform" if ($platform -eq "windows") { - # Create compressed binaries package (exclude installer files) - $filesToZip = Get-ChildItem -Exclude "Flumi-Setup-*.exe" - if ($filesToZip.Count -gt 0) { - Compress-Archive -Path $filesToZip -DestinationPath "../../release-assets/flumi-$platform-binaries.zip" -Force - } # Copy installer separately if it exists $installer = Get-ChildItem "Flumi-Setup-*.exe" -ErrorAction SilentlyContinue @@ -213,24 +191,6 @@ jobs: } } - # Package GDExtension separately for developers - foreach ($platform in @("linux", "windows")) { - if (Test-Path "artifacts/gdextension-$platform") { - Push-Location "artifacts/gdextension-$platform" - if ($platform -eq "windows") { - Compress-Archive -Path "*" -DestinationPath "../../release-assets/gdextension-$platform.zip" -Force - } else { - if (Get-Command "7z" -ErrorAction SilentlyContinue) { - & "7z" a -ttar "../../release-assets/gdextension-$platform.tar" "*" - & "7z" a -tgzip "../../release-assets/gdextension-$platform.tar.gz" "../../release-assets/gdextension-$platform.tar" - Remove-Item "../../release-assets/gdextension-$platform.tar" -Force - } else { - Compress-Archive -Path "*" -DestinationPath "../../release-assets/gdextension-$platform.zip" -Force - } - } - Pop-Location - } - } - name: Get release tag id: get_tag @@ -250,35 +210,28 @@ jobs: name: Gurted ${{ steps.get_tag.outputs.tag }} body: | ## Gurted Release ${{ steps.get_tag.outputs.tag }} - + + ### NOTICE: THESE BUILDS ARE NOT OFFICIAL AND CONTAIN DIFFIRENCES FROM UPSTREAM. This release includes: - **GurtCA**: Certificate Authority for TLS certificates - **Gurty**: CLI tool for managing GURT protocol servers - - **Flumi**: The official wayfinder (browser) for the GURT ecosystem - - **GDExtension**: Godot extension for GURT protocol integration + - **Flumi**: The official browser for the GURT ecosystem ### Downloads - - `gurted-tools-*.zip`: Contains GurtCA and Gurty binaries - - `flumi-linux.*`: Contains the Flumi wayfinder application for Linux - - `flumi-windows-binaries.zip`: Contains compressed Flumi binaries for Windows - - `Flumi-Setup-*.exe`: Windows installer for Flumi (recommended for Windows users) - - `gdextension-*.zip`: Contains the GDExtension library for developers + - `gurtca`: GurtCA binaries for Linux + - `gurty`: Gurty binaries for Linux + - `gurtca`: GurtCA binaries for Windows + - `gurty`: Gurty binaries for Windows + - `flumi-linux.*`: Contains the Flumi browser for Linux + - `Flumi-Setup-*.exe`: Windows installer for Flumi ### Platform Support - Linux (x86_64) - Windows (x86_64) - ### Windows Users - For the best experience on Windows, download and run the `Flumi-Setup-*.exe` installer. - For documentation and usage instructions, visit [docs.gurted.com](https://docs.gurted.com) files: release-assets/* draft: false prerelease: false env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - - - - From 88fde37455cbcb3fad99503a3aab971b2e2417cc Mon Sep 17 00:00:00 2001 From: phoenixbackrooms Date: Wed, 17 Sep 2025 20:34:17 +0300 Subject: [PATCH 10/17] make packaging make sense this is for upstream, the warning is not required nor desired --- .github/workflows/package-release.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/package-release.yml b/.github/workflows/package-release.yml index a786a43..ff701d3 100644 --- a/.github/workflows/package-release.yml +++ b/.github/workflows/package-release.yml @@ -9,7 +9,7 @@ on: tag: description: 'Release tag' required: true - default: 'v0.1.0' + default: 'v1.0.2' download_artifacts: description: 'Download latest artifacts from main branch' required: false @@ -211,7 +211,6 @@ jobs: body: | ## Gurted Release ${{ steps.get_tag.outputs.tag }} - ### NOTICE: THESE BUILDS ARE NOT OFFICIAL AND CONTAIN DIFFIRENCES FROM UPSTREAM. This release includes: - **GurtCA**: Certificate Authority for TLS certificates - **Gurty**: CLI tool for managing GURT protocol servers @@ -235,3 +234,4 @@ jobs: prerelease: false env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + From 0133243183e06a3f9661baf9625cf79bd75af37e Mon Sep 17 00:00:00 2001 From: phoenixbackrooms Date: Sun, 28 Sep 2025 10:33:09 +0300 Subject: [PATCH 11/17] Update package-release.yml --- .github/workflows/package-release.yml | 55 +++++++++++++++++---------- 1 file changed, 34 insertions(+), 21 deletions(-) diff --git a/.github/workflows/package-release.yml b/.github/workflows/package-release.yml index ff701d3..6b17591 100644 --- a/.github/workflows/package-release.yml +++ b/.github/workflows/package-release.yml @@ -9,7 +9,7 @@ on: tag: description: 'Release tag' required: true - default: 'v1.0.2' + default: 'v1.0.3' download_artifacts: description: 'Download latest artifacts from main branch' required: false @@ -147,23 +147,40 @@ jobs: run: | New-Item -ItemType Directory -Path "release-assets" -Force - # Copy Rust binaries directly (GurtCA + Gurty) + # Package Rust binaries (GurtCA + Gurty) foreach ($platform in @("linux", "windows")) { - # Copy GurtCA binaries + $tempDir = "temp-tools-$platform" + New-Item -ItemType Directory -Path $tempDir -Force + + # Copy GurtCA if available if (Test-Path "artifacts/gurtca-$platform") { - Get-ChildItem "artifacts/gurtca-$platform" -File | ForEach-Object { - $newName = $_.BaseName - Copy-Item $_.FullName "release-assets/$newName" -Force + Copy-Item "artifacts/gurtca-$platform/*" $tempDir -Force + } + + # Copy Gurty if available + if (Test-Path "artifacts/gurty-$platform") { + Copy-Item "artifacts/gurty-$platform/*" $tempDir -Force + } + + # Package if we have any files + $files = Get-ChildItem $tempDir -ErrorAction SilentlyContinue + if ($files.Count -gt 0) { + if ($platform -eq "windows") { + Compress-Archive -Path "$tempDir/*" -DestinationPath "release-assets/gurted-tools-$platform.zip" -Force + } else { + # For Linux files, we'll use 7zip if available, otherwise skip tar.gz creation on Windows + if (Get-Command "7z" -ErrorAction SilentlyContinue) { + & "7z" a -ttar "release-assets/gurted-tools-$platform.tar" "$tempDir/*" + & "7z" a -tgzip "release-assets/gurted-tools-$platform.tar.gz" "release-assets/gurted-tools-$platform.tar" + Remove-Item "release-assets/gurted-tools-$platform.tar" -Force + } else { + # Fallback to zip for Linux binaries too + Compress-Archive -Path "$tempDir/*" -DestinationPath "release-assets/gurted-tools-$platform.zip" -Force + } } } - # Copy Gurty binaries - if (Test-Path "artifacts/gurty-$platform") { - Get-ChildItem "artifacts/gurty-$platform" -File | ForEach-Object { - $newName = $_.BaseName - Copy-Item $_.FullName "release-assets/$newName" -Force - } - } + Remove-Item $tempDir -Recurse -Force -ErrorAction SilentlyContinue } # Package Flumi builds @@ -212,17 +229,14 @@ jobs: ## Gurted Release ${{ steps.get_tag.outputs.tag }} This release includes: - - **GurtCA**: Certificate Authority for TLS certificates + - **GurtCA**: CLI tool for obtaining TLS certificates - **Gurty**: CLI tool for managing GURT protocol servers - **Flumi**: The official browser for the GURT ecosystem ### Downloads - - `gurtca`: GurtCA binaries for Linux - - `gurty`: Gurty binaries for Linux - - `gurtca`: GurtCA binaries for Windows - - `gurty`: Gurty binaries for Windows - - `flumi-linux.*`: Contains the Flumi browser for Linux - - `Flumi-Setup-*.exe`: Windows installer for Flumi + - `gurted-tools-*.zip`: Contains GurtCA and Gurty binaries + - `flumi-linux.*`: Contains the Flumi wayfinder application for Linux + - `Flumi-Setup-*.exe`: Windows installer for Flumi (recommended for Windows users) ### Platform Support - Linux (x86_64) @@ -234,4 +248,3 @@ jobs: prerelease: false env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - From c43ebebba381eb27828f07e01241f8332cbe602e Mon Sep 17 00:00:00 2001 From: phoenixbackrooms Date: Sun, 28 Sep 2025 10:40:15 +0300 Subject: [PATCH 12/17] make build more secure --- .github/workflows/build-flumi.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build-flumi.yml b/.github/workflows/build-flumi.yml index 49c8b62..7022785 100644 --- a/.github/workflows/build-flumi.yml +++ b/.github/workflows/build-flumi.yml @@ -45,6 +45,7 @@ jobs: name: gdextension-${{ matrix.platform }} path: gdextension-artifacts if_no_artifact_found: warn + branch: main continue-on-error: true - name: Cache Godot installation @@ -146,4 +147,5 @@ jobs: with: name: flumi-${{ matrix.platform }} path: flumi-builds/${{ matrix.platform }} - retention-days: 30 \ No newline at end of file + + retention-days: 30 From 040aea61b29a29811a2204325ded61fcf7158e16 Mon Sep 17 00:00:00 2001 From: phoenixbackrooms Date: Sun, 28 Sep 2025 10:41:35 +0300 Subject: [PATCH 13/17] Fix potential security issue --- .github/workflows/package-release.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/package-release.yml b/.github/workflows/package-release.yml index 6b17591..f5eb7d1 100644 --- a/.github/workflows/package-release.yml +++ b/.github/workflows/package-release.yml @@ -33,6 +33,7 @@ jobs: name: gurtca-.* path: artifacts/ if_no_artifact_found: warn + branch: main continue-on-error: true - name: Download Gurty artifacts @@ -44,6 +45,7 @@ jobs: name: gurty-.* path: artifacts/ if_no_artifact_found: warn + branch: main continue-on-error: true - name: Download GDExtension artifacts @@ -55,6 +57,7 @@ jobs: name: gdextension-.* path: artifacts/ if_no_artifact_found: warn + branch: main continue-on-error: true - name: Download Flumi artifacts @@ -66,6 +69,7 @@ jobs: name: flumi-.* path: artifacts/ if_no_artifact_found: warn + branch: main continue-on-error: true - name: List downloaded artifacts @@ -248,3 +252,4 @@ jobs: prerelease: false env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + From 6fe67bce760384faab313a4fc8b946bb23025c2e Mon Sep 17 00:00:00 2001 From: phoenixbackrooms Date: Sun, 28 Sep 2025 11:50:01 +0300 Subject: [PATCH 14/17] Speed up windows builds --- .github/workflows/build-gurtca.yml | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-gurtca.yml b/.github/workflows/build-gurtca.yml index 63f42f8..8f01a7b 100644 --- a/.github/workflows/build-gurtca.yml +++ b/.github/workflows/build-gurtca.yml @@ -79,7 +79,13 @@ jobs: .\vcpkg.exe integrate install } cd C:\vcpkg - .\vcpkg.exe install openssl:x64-windows-static-md + $installed = .\vcpkg.exe list | Select-String "openssl:x64-windows-static-md" + if (!$installed) { + Write-Host "Installing OpenSSL..." + .\vcpkg.exe install openssl:x64-windows-static-md + } else { + Write-Host "OpenSSL already installed: $installed" + } shell: pwsh - name: Set OpenSSL environment variables (Windows) @@ -105,4 +111,5 @@ jobs: with: name: gurtca-${{ matrix.platform }} path: artifacts/${{ matrix.platform }} - retention-days: 30 \ No newline at end of file + + retention-days: 30 From 39e1c8c0863e2ed2ab1087934b332dcf2f598f9b Mon Sep 17 00:00:00 2001 From: phoenixbackrooms Date: Sun, 28 Sep 2025 11:53:11 +0300 Subject: [PATCH 15/17] speed up v2 --- .github/workflows/build-gurtca.yml | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/.github/workflows/build-gurtca.yml b/.github/workflows/build-gurtca.yml index 8f01a7b..295004c 100644 --- a/.github/workflows/build-gurtca.yml +++ b/.github/workflows/build-gurtca.yml @@ -60,31 +60,40 @@ jobs: sudo apt-get update sudo apt-get install -y pkg-config libssl-dev - - name: Cache vcpkg (Windows) + - name: Cache vcpkg and OpenSSL (Windows) if: matrix.os == 'windows-latest' uses: actions/cache@v4 with: - path: C:\vcpkg - key: ${{ runner.os }}-vcpkg-openssl + path: | + C:\vcpkg + C:\vcpkg\installed\x64-windows-static-md + key: ${{ runner.os }}-vcpkg-openssl-${{ hashFiles('.github/workflows/build-gurtca.yml') }} restore-keys: | + ${{ runner.os }}-vcpkg-openssl- ${{ runner.os }}-vcpkg- - name: Install OpenSSL (Windows) if: matrix.os == 'windows-latest' run: | if (!(Test-Path "C:\vcpkg")) { + Write-Host "Installing vcpkg..." git clone https://github.com/Microsoft/vcpkg.git C:\vcpkg cd C:\vcpkg .\bootstrap-vcpkg.bat .\vcpkg.exe integrate install } - cd C:\vcpkg - $installed = .\vcpkg.exe list | Select-String "openssl:x64-windows-static-md" - if (!$installed) { - Write-Host "Installing OpenSSL..." - .\vcpkg.exe install openssl:x64-windows-static-md + + # Check if OpenSSL is properly installed + $opensslInstalled = (Test-Path "C:\vcpkg\installed\x64-windows-static-md\lib\libssl.lib") -and + (Test-Path "C:\vcpkg\installed\x64-windows-static-md\lib\libcrypto.lib") -and + (Test-Path "C:\vcpkg\installed\x64-windows-static-md\include\openssl\opensslv.h") + + if ($opensslInstalled) { + Write-Host "OpenSSL already installed, skipping..." } else { - Write-Host "OpenSSL already installed: $installed" + Write-Host "Installing OpenSSL..." + cd C:\vcpkg + .\vcpkg.exe install openssl:x64-windows-static-md } shell: pwsh @@ -113,3 +122,4 @@ jobs: path: artifacts/${{ matrix.platform }} retention-days: 30 + From 7717e61371778bfaf15176063b3b8868fa3e6510 Mon Sep 17 00:00:00 2001 From: Face <69168154+face-hh@users.noreply.github.com> Date: Sun, 28 Sep 2025 19:06:13 +0300 Subject: [PATCH 16/17] Update .github/workflows/build-flumi.yml Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .github/workflows/build-flumi.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/build-flumi.yml b/.github/workflows/build-flumi.yml index 7022785..8645310 100644 --- a/.github/workflows/build-flumi.yml +++ b/.github/workflows/build-flumi.yml @@ -147,5 +147,4 @@ jobs: with: name: flumi-${{ matrix.platform }} path: flumi-builds/${{ matrix.platform }} - retention-days: 30 From 759e28bea531e55b777b4779f6a81a58849ef37e Mon Sep 17 00:00:00 2001 From: Face <69168154+face-hh@users.noreply.github.com> Date: Sun, 28 Sep 2025 19:06:22 +0300 Subject: [PATCH 17/17] Update .github/workflows/build-gurtca.yml Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .github/workflows/build-gurtca.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/build-gurtca.yml b/.github/workflows/build-gurtca.yml index 295004c..b1749c7 100644 --- a/.github/workflows/build-gurtca.yml +++ b/.github/workflows/build-gurtca.yml @@ -120,6 +120,5 @@ jobs: with: name: gurtca-${{ matrix.platform }} path: artifacts/${{ matrix.platform }} - retention-days: 30