From da3e14c434702abefb6a8110c0f90b68deb4fa8a Mon Sep 17 00:00:00 2001 From: Fazri Gading Date: Sun, 25 Jan 2026 16:45:39 +0800 Subject: [PATCH 01/15] fix: update tar to 7.5.6 --- package-lock.json | 166 ++++++++++++++++------------------------------ package.json | 9 ++- 2 files changed, 65 insertions(+), 110 deletions(-) diff --git a/package-lock.json b/package-lock.json index f7ad214..122e6c8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,21 +1,20 @@ { "name": "hytale-f2p-launcher", - "version": "2.0.11", + "version": "2.1.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "hytale-f2p-launcher", - "version": "2.0.11", + "version": "2.1.0", "license": "MIT", "dependencies": { "adm-zip": "^0.5.10", "axios": "^1.6.0", "discord-rpc": "^4.0.1", - "dotenv": "^17.2.3", "electron-updater": "^6.7.3", "fs-extra": "^11.3.3", - "tar": "^6.2.1", + "tar": "^7.5.6", "uuid": "^9.0.1" }, "devDependencies": { @@ -384,6 +383,7 @@ "dev": true, "license": "BSD-2-Clause", "optional": true, + "peer": true, "dependencies": { "cross-dirname": "^0.1.0", "debug": "^4.3.4", @@ -524,6 +524,18 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, "node_modules/@malept/cross-spawn-promise": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-2.0.0.tgz", @@ -849,7 +861,6 @@ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -1416,12 +1427,12 @@ } }, "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "license": "ISC", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "license": "BlueOak-1.0.0", "engines": { - "node": ">=10" + "node": ">=18" } }, "node_modules/chromium-pickle-js": { @@ -1613,7 +1624,8 @@ "integrity": "sha512-+R08/oI0nl3vfPcqftZRpytksBXDzOUveBq/NBVx0sUp1axwzPQrKinNx5yd5sxPu8j1wIy8AfnVQ+5eFdha6Q==", "dev": true, "license": "MIT", - "optional": true + "optional": true, + "peer": true }, "node_modules/cross-spawn": { "version": "7.0.6", @@ -1830,7 +1842,6 @@ "integrity": "sha512-ce4Ogns4VMeisIuCSK0C62umG0lFy012jd8LMZ6w/veHUeX4fqfDrGe+HTWALAEwK6JwKP+dhPvizhArSOsFbg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "app-builder-lib": "26.4.0", "builder-util": "26.3.4", @@ -1907,18 +1918,6 @@ "node": ">=8" } }, - "node_modules/dotenv": { - "version": "17.2.3", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.2.3.tgz", - "integrity": "sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, "node_modules/dotenv-expand": { "version": "11.0.7", "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.7.tgz", @@ -2206,6 +2205,7 @@ "dev": true, "hasInstallScript": true, "license": "MIT", + "peer": true, "dependencies": { "@electron/asar": "^3.2.1", "debug": "^4.1.1", @@ -2226,6 +2226,7 @@ "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "graceful-fs": "^4.1.2", "jsonfile": "^4.0.0", @@ -2242,6 +2243,16 @@ "dev": true, "license": "MIT" }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, "node_modules/end-of-stream": { "version": "1.4.5", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", @@ -3180,9 +3191,9 @@ "license": "MIT" }, "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", + "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", "dev": true, "license": "MIT" }, @@ -3369,7 +3380,6 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" @@ -3488,7 +3498,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", - "dev": true, "license": "MIT", "dependencies": { "minipass": "^7.1.2" @@ -3503,6 +3512,7 @@ "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "minimist": "^1.2.6" }, @@ -3855,7 +3865,6 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -3885,6 +3894,7 @@ "dev": true, "license": "MIT", "optional": true, + "peer": true, "dependencies": { "commander": "^9.4.0" }, @@ -3902,6 +3912,7 @@ "dev": true, "license": "MIT", "optional": true, + "peer": true, "engines": { "node": "^12.20.0 || >=14" } @@ -4098,6 +4109,7 @@ "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, "license": "ISC", + "peer": true, "dependencies": { "glob": "^7.1.3" }, @@ -4466,90 +4478,28 @@ } }, "node_modules/tar": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", - "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", - "license": "ISC", + "version": "7.5.6", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.6.tgz", + "integrity": "sha512-xqUeu2JAIJpXyvskvU3uvQW8PAmHrtXp2KDuMJwQqW8Sqq0CaZBAQ+dKS3RBXVhU4wC5NjAdKrmh84241gO9cA==", + "license": "BlueOak-1.0.0", "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" }, "engines": { - "node": ">=10" + "node": ">=18" } }, - "node_modules/tar/node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tar/node_modules/minipass": { + "node_modules/tar/node_modules/yallist": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "license": "ISC", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "license": "BlueOak-1.0.0", "engines": { - "node": ">=8" - } - }, - "node_modules/tar/node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "license": "MIT", - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/tar/node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tar/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" + "node": ">=18" } }, "node_modules/temp": { @@ -4558,6 +4508,7 @@ "integrity": "sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "mkdirp": "^0.5.1", "rimraf": "~2.6.2" @@ -4935,6 +4886,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, "license": "ISC" }, "node_modules/yargs": { diff --git a/package.json b/package.json index 25ffa20..759326f 100644 --- a/package.json +++ b/package.json @@ -48,10 +48,9 @@ "adm-zip": "^0.5.10", "axios": "^1.6.0", "discord-rpc": "^4.0.1", - "dotenv": "^17.2.3", "electron-updater": "^6.7.3", "fs-extra": "^11.3.3", - "tar": "^6.2.1", + "tar": "^7.5.6", "uuid": "^9.0.1" }, "overrides": { @@ -81,7 +80,7 @@ ] } ], - "icon": "icon.ico" + "icon": "build/icon.ico" }, "linux": { "target": [ @@ -117,6 +116,10 @@ "icon": "build/icon.png", "category": "Game" }, + "pacman": { + "compression": "zstd", + "artifactName": "${productName}-${version}-${arch}.pkg.tar.zst" + }, "mac": { "target": [ { From 151b0176533bacbb73790589195e00770c0f74e6 Mon Sep 17 00:00:00 2001 From: Fazri Gading Date: Sun, 25 Jan 2026 16:46:26 +0800 Subject: [PATCH 02/15] test: release on main branch using tag --- .github/workflows/release.yml | 230 ++++++++++++++++++++++------------ 1 file changed, 151 insertions(+), 79 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 9678519..d78763d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -3,122 +3,194 @@ name: Build and Release on: push: branches: - - release + - main tags: - 'v*' workflow_dispatch: jobs: - build-linux: - runs-on: ubuntu-latest + build: + strategy: + matrix: + include: + - os: ubuntu-latest + platform: linux + - os: windows-latest + platform: win + - os: macos-latest + platform: mac + + runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 - # Not needed anymore due to the removal of Pacman builds - # - name: Install build dependencies - # run: | - # sudo apt-get update - # sudo apt-get install -y libarchive-tools - - uses: actions/setup-node@v4 with: node-version: '22' - cache: 'npm' + cache: 'npm' - run: npm ci - - name: Build Linux Packages - run: | - npx electron-builder --linux --x64 --arm64 --publish never - - uses: actions/upload-artifact@v4 + - name: Build for ${{ matrix.os }} + run: npm run build:${{ matrix.platform }} + + - name: Upload Artifacts for ${{ matrix.os }} + uses: actions/upload-artifact@v4 with: - name: linux-builds + name: ${{ matrix.os }}-builds path: | + dist/*.exe + dist/*.exe.blockmap + dist/*.dmg + dist/*.zip dist/*.AppImage dist/*.AppImage.blockmap dist/*.deb dist/*.rpm dist/*.pkg.tar.zst - dist/latest-linux.yml - - build-windows: - runs-on: windows-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: '22' - cache: 'npm' - - run: npm ci - - - name: Build Windows Packages - run: npx electron-builder --win --publish never - - uses: actions/upload-artifact@v4 - with: - name: windows-builds - path: | - dist/*.exe - dist/*.exe.blockmap - dist/latest.yml - - build-macos: - runs-on: macos-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: '22' - cache: 'npm' - - run: npm ci - - - name: Build macOS Packages - run: npx electron-builder --mac --publish never - - uses: actions/upload-artifact@v4 - with: - name: macos-builds - path: | - dist/*.dmg - dist/*.zip - dist/latest-mac.yml + dist/latest*.yml release: - needs: [build-linux, build-windows, build-macos] + needs: build runs-on: ubuntu-latest if: | - startsWith(github.ref, 'refs/tags/v') || - github.ref == 'refs/heads/release' || - github.event_name == 'workflow_dispatch' - - permissions: - contents: write - + startsWith(github.ref, 'refs/tags/v') steps: - # FIX: './package.json' Module Not Found in `Get version` step - - name: Checkout code - uses: actions/checkout@v4 - - name: Download all artifacts uses: actions/download-artifact@v4 with: path: artifacts - + merge-multiple: true - name: Display structure of downloaded files run: ls -R artifacts - - name: Get version from package.json id: pkg_version run: echo "VERSION=$(node -p "require('./package.json').version")" >> $GITHUB_OUTPUT - - name: Create Release uses: softprops/action-gh-release@v2 with: - # If it's a tag, use the tag. tag_name: ${{ github.ref_type == 'tag' && github.ref_name || format('v{0}.r{1}', steps.pkg_version.outputs.VERSION, github.run_number) }} - # If it's the 'release' branch, use 'v2.0.2-beta.r42' - name: ${{ github.ref_type == 'tag' && github.ref_name || format('v{0}-beta.r{1}', steps.pkg_version.outputs.VERSION, github.run_number) }} files: | - artifacts/linux-builds/**/* - artifacts/windows-builds/**/* - artifacts/macos-builds/**/* + artifacts/ubuntu-latest-builds/**/* + artifacts/windows-latest-builds/**/* + artifacts/macos-latest-builds/**/* generate_release_notes: true draft: true - # DYNAMIC FLAGS: Mark as pre-release ONLY IF it's NOT a tag (meaning it's a branch push) - prerelease: ${{ github.ref_type != 'tag' }} + prerelease: false + + + + + + # BACKUP + # build-linux: + # runs-on: ubuntu-latest + # steps: + # - uses: actions/checkout@v4 + # # Not needed anymore due to the removal of Pacman builds + # # - name: Install build dependencies + # # run: | + # # sudo apt-get update + # # sudo apt-get install -y libarchive-tools + + # - uses: actions/setup-node@v4 + # with: + # node-version: '22' + # cache: 'npm' + # - run: npm ci + + # - name: Build Linux Packages + # run: | + # npx electron-builder --linux --x64 --arm64 --publish never + # - uses: actions/upload-artifact@v4 + # with: + # name: linux-builds + # path: | + # dist/*.AppImage + # dist/*.AppImage.blockmap + # dist/*.deb + # dist/*.rpm + # dist/*.pkg.tar.zst + # dist/latest-linux.yml + + # build-windows: + # runs-on: windows-latest + # steps: + # - uses: actions/checkout@v4 + # - uses: actions/setup-node@v4 + # with: + # node-version: '22' + # cache: 'npm' + # - run: npm ci + + # - name: Build Windows Packages + # run: npx electron-builder --win --publish never + # - uses: actions/upload-artifact@v4 + # with: + # name: windows-builds + # path: | + # dist/*.exe + # dist/*.exe.blockmap + # dist/latest.yml + + # build-macos: + # runs-on: macos-latest + # steps: + # - uses: actions/checkout@v4 + # - uses: actions/setup-node@v4 + # with: + # node-version: '22' + # cache: 'npm' + # - run: npm ci + + # - name: Build macOS Packages + # run: npx electron-builder --mac --publish never + # - uses: actions/upload-artifact@v4 + # with: + # name: macos-builds + # path: | + # dist/*.dmg + # dist/*.zip + # dist/latest-mac.yml + + # release: + # needs: [build-linux, build-windows, build-macos] + # runs-on: ubuntu-latest + # if: | + # startsWith(github.ref, 'refs/tags/v') || + # github.ref == 'refs/heads/release' || + # github.event_name == 'workflow_dispatch' + + # permissions: + # contents: write + + # steps: + # # FIX: './package.json' Module Not Found in `Get version` step + # - name: Checkout code + # uses: actions/checkout@v4 + + # - name: Download all artifacts + # uses: actions/download-artifact@v4 + # with: + # path: artifacts + + # - name: Display structure of downloaded files + # run: ls -R artifacts + + # - name: Get version from package.json + # id: pkg_version + # run: echo "VERSION=$(node -p "require('./package.json').version")" >> $GITHUB_OUTPUT + + # - name: Create Release + # uses: softprops/action-gh-release@v2 + # with: + # # If it's a tag, use the tag. + # tag_name: ${{ github.ref_type == 'tag' && github.ref_name || format('v{0}.r{1}', steps.pkg_version.outputs.VERSION, github.run_number) }} + # # If it's the 'release' branch, use 'v2.0.2-beta.r42' + # name: ${{ github.ref_type == 'tag' && github.ref_name || format('v{0}-beta.r{1}', steps.pkg_version.outputs.VERSION, github.run_number) }} + # files: | + # artifacts/linux-builds/**/* + # artifacts/windows-builds/**/* + # artifacts/macos-builds/**/* + # generate_release_notes: true + # draft: true + # # DYNAMIC FLAGS: Mark as pre-release ONLY IF it's NOT a tag (meaning it's a branch push) + # prerelease: ${{ github.ref_type != 'tag' }} From e7bd20a1ec5f91afc9563785551bd3e1e9796339 Mon Sep 17 00:00:00 2001 From: Fazri Gading Date: Sun, 25 Jan 2026 16:50:28 +0800 Subject: [PATCH 03/15] chore: remove previous release branch part --- .github/workflows/release.yml | 119 ---------------------------------- 1 file changed, 119 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index d78763d..d004eef 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -75,122 +75,3 @@ jobs: generate_release_notes: true draft: true prerelease: false - - - - - - # BACKUP - # build-linux: - # runs-on: ubuntu-latest - # steps: - # - uses: actions/checkout@v4 - # # Not needed anymore due to the removal of Pacman builds - # # - name: Install build dependencies - # # run: | - # # sudo apt-get update - # # sudo apt-get install -y libarchive-tools - - # - uses: actions/setup-node@v4 - # with: - # node-version: '22' - # cache: 'npm' - # - run: npm ci - - # - name: Build Linux Packages - # run: | - # npx electron-builder --linux --x64 --arm64 --publish never - # - uses: actions/upload-artifact@v4 - # with: - # name: linux-builds - # path: | - # dist/*.AppImage - # dist/*.AppImage.blockmap - # dist/*.deb - # dist/*.rpm - # dist/*.pkg.tar.zst - # dist/latest-linux.yml - - # build-windows: - # runs-on: windows-latest - # steps: - # - uses: actions/checkout@v4 - # - uses: actions/setup-node@v4 - # with: - # node-version: '22' - # cache: 'npm' - # - run: npm ci - - # - name: Build Windows Packages - # run: npx electron-builder --win --publish never - # - uses: actions/upload-artifact@v4 - # with: - # name: windows-builds - # path: | - # dist/*.exe - # dist/*.exe.blockmap - # dist/latest.yml - - # build-macos: - # runs-on: macos-latest - # steps: - # - uses: actions/checkout@v4 - # - uses: actions/setup-node@v4 - # with: - # node-version: '22' - # cache: 'npm' - # - run: npm ci - - # - name: Build macOS Packages - # run: npx electron-builder --mac --publish never - # - uses: actions/upload-artifact@v4 - # with: - # name: macos-builds - # path: | - # dist/*.dmg - # dist/*.zip - # dist/latest-mac.yml - - # release: - # needs: [build-linux, build-windows, build-macos] - # runs-on: ubuntu-latest - # if: | - # startsWith(github.ref, 'refs/tags/v') || - # github.ref == 'refs/heads/release' || - # github.event_name == 'workflow_dispatch' - - # permissions: - # contents: write - - # steps: - # # FIX: './package.json' Module Not Found in `Get version` step - # - name: Checkout code - # uses: actions/checkout@v4 - - # - name: Download all artifacts - # uses: actions/download-artifact@v4 - # with: - # path: artifacts - - # - name: Display structure of downloaded files - # run: ls -R artifacts - - # - name: Get version from package.json - # id: pkg_version - # run: echo "VERSION=$(node -p "require('./package.json').version")" >> $GITHUB_OUTPUT - - # - name: Create Release - # uses: softprops/action-gh-release@v2 - # with: - # # If it's a tag, use the tag. - # tag_name: ${{ github.ref_type == 'tag' && github.ref_name || format('v{0}.r{1}', steps.pkg_version.outputs.VERSION, github.run_number) }} - # # If it's the 'release' branch, use 'v2.0.2-beta.r42' - # name: ${{ github.ref_type == 'tag' && github.ref_name || format('v{0}-beta.r{1}', steps.pkg_version.outputs.VERSION, github.run_number) }} - # files: | - # artifacts/linux-builds/**/* - # artifacts/windows-builds/**/* - # artifacts/macos-builds/**/* - # generate_release_notes: true - # draft: true - # # DYNAMIC FLAGS: Mark as pre-release ONLY IF it's NOT a tag (meaning it's a branch push) - # prerelease: ${{ github.ref_type != 'tag' }} From b94b45681b80822e36c60c86d45dfe00a7bff3ff Mon Sep 17 00:00:00 2001 From: Fazri Gading Date: Sun, 25 Jan 2026 17:14:34 +0800 Subject: [PATCH 04/15] fix: add deps for bsdtar --- .github/workflows/release.yml | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index d004eef..55b39d1 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -22,12 +22,21 @@ jobs: runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 with: node-version: '22' - cache: 'npm' - - run: npm ci + cache: 'npm' + + # ONLY RUNS ON LINUX: Required for pacman/bsdtar + - name: Install Linux build dependencies + if: matrix.os == 'ubuntu-latest' + run: | + sudo apt-get update + sudo apt-get install -y libarchive-tools - name: Build for ${{ matrix.os }} run: npm run build:${{ matrix.platform }} From 0a97ac95fc5944e639dd10448f292a8f0ab0c208 Mon Sep 17 00:00:00 2001 From: Fazri Gading Date: Sun, 25 Jan 2026 17:27:55 +0800 Subject: [PATCH 05/15] fix: fix build tar.zst for arch --- package.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 759326f..cf80bae 100644 --- a/package.json +++ b/package.json @@ -114,11 +114,11 @@ } ], "icon": "build/icon.png", - "category": "Game" - }, - "pacman": { - "compression": "zstd", - "artifactName": "${productName}-${version}-${arch}.pkg.tar.zst" + "category": "Game", + "pacman": { + "compression": "zstd", + "artifactName": "${productName}-${version}-${arch}.pkg.tar.zst" + } }, "mac": { "target": [ From 86d617a4d34bde3cdefb8c024078c955b40da663 Mon Sep 17 00:00:00 2001 From: Fazri Gading Date: Sun, 25 Jan 2026 17:40:26 +0800 Subject: [PATCH 06/15] fix: missing npm ci on release yml --- .github/workflows/release.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 55b39d1..c634521 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -30,6 +30,7 @@ jobs: with: node-version: '22' cache: 'npm' + - run: npm ci # ONLY RUNS ON LINUX: Required for pacman/bsdtar - name: Install Linux build dependencies From a3f4d8e9d8781385410fd340fb827b3f713ce56e Mon Sep 17 00:00:00 2001 From: Fazri Gading Date: Sun, 25 Jan 2026 18:01:45 +0800 Subject: [PATCH 07/15] fix: remove pacman package json --- package.json | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/package.json b/package.json index cf80bae..42f89dc 100644 --- a/package.json +++ b/package.json @@ -114,11 +114,7 @@ } ], "icon": "build/icon.png", - "category": "Game", - "pacman": { - "compression": "zstd", - "artifactName": "${productName}-${version}-${arch}.pkg.tar.zst" - } + "category": "Game" }, "mac": { "target": [ From 52313910dcded55c7b17539d79dec16958446c5d Mon Sep 17 00:00:00 2001 From: Fazri Gading Date: Sun, 25 Jan 2026 18:05:43 +0800 Subject: [PATCH 08/15] fix: revert tar version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 42f89dc..e097c84 100644 --- a/package.json +++ b/package.json @@ -50,7 +50,7 @@ "discord-rpc": "^4.0.1", "electron-updater": "^6.7.3", "fs-extra": "^11.3.3", - "tar": "^7.5.6", + "tar": "^6.2.1", "uuid": "^9.0.1" }, "overrides": { From 790d4d3f2964ee84863f4ce979b04893f1223e92 Mon Sep 17 00:00:00 2001 From: Fazri Gading Date: Sun, 25 Jan 2026 18:07:34 +0800 Subject: [PATCH 09/15] fix: revert tar in package-lock.json --- package-lock.json | 122 +++++++++++++++++++++++++++++++++------------- 1 file changed, 87 insertions(+), 35 deletions(-) diff --git a/package-lock.json b/package-lock.json index 122e6c8..2da2ede 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,7 +14,7 @@ "discord-rpc": "^4.0.1", "electron-updater": "^6.7.3", "fs-extra": "^11.3.3", - "tar": "^7.5.6", + "tar": "^6.2.1", "uuid": "^9.0.1" }, "devDependencies": { @@ -524,18 +524,6 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/@isaacs/fs-minipass": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", - "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", - "license": "ISC", - "dependencies": { - "minipass": "^7.0.4" - }, - "engines": { - "node": ">=18.0.0" - } - }, "node_modules/@malept/cross-spawn-promise": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-2.0.0.tgz", @@ -1427,12 +1415,12 @@ } }, "node_modules/chownr": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", - "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", - "license": "BlueOak-1.0.0", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "license": "ISC", "engines": { - "node": ">=18" + "node": ">=10" } }, "node_modules/chromium-pickle-js": { @@ -3380,6 +3368,7 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" @@ -3498,6 +3487,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", + "dev": true, "license": "MIT", "dependencies": { "minipass": "^7.1.2" @@ -4478,28 +4468,91 @@ } }, "node_modules/tar": { - "version": "7.5.6", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.6.tgz", - "integrity": "sha512-xqUeu2JAIJpXyvskvU3uvQW8PAmHrtXp2KDuMJwQqW8Sqq0CaZBAQ+dKS3RBXVhU4wC5NjAdKrmh84241gO9cA==", - "license": "BlueOak-1.0.0", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "deprecated": "Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exhorbitant rates) by contacting i@izs.me", + "license": "ISC", "dependencies": { - "@isaacs/fs-minipass": "^4.0.0", - "chownr": "^3.0.0", - "minipass": "^7.1.2", - "minizlib": "^3.1.0", - "yallist": "^5.0.0" + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" }, "engines": { - "node": ">=18" + "node": ">=10" } }, - "node_modules/tar/node_modules/yallist": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", - "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", - "license": "BlueOak-1.0.0", + "node_modules/tar/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, "engines": { - "node": ">=18" + "node": ">= 8" + } + }, + "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "license": "MIT", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/tar/node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" } }, "node_modules/temp": { @@ -4886,7 +4939,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, "license": "ISC" }, "node_modules/yargs": { From 589c5b457f7e3227d834e8b6048037b028fab178 Mon Sep 17 00:00:00 2001 From: Fazri Gading Date: Sun, 25 Jan 2026 18:34:01 +0800 Subject: [PATCH 10/15] Update release.yml --- .github/workflows/release.yml | 116 ++++++++++++++++++++++------------ 1 file changed, 76 insertions(+), 40 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index c634521..65bbe02 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -9,79 +9,115 @@ on: workflow_dispatch: jobs: - build: - strategy: - matrix: - include: - - os: ubuntu-latest - platform: linux - - os: windows-latest - platform: win - - os: macos-latest - platform: mac - - runs-on: ${{ matrix.os }} + build-linux: + runs-on: ubuntu-latest steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Setup Node.js - uses: actions/setup-node@v4 + - uses: actions/checkout@v4 + - name: Install build dependencies + run: | + sudo apt-get update + sudo apt-get install -y libarchive-tools + + - uses: actions/setup-node@v4 with: node-version: '22' cache: 'npm' - run: npm ci - # ONLY RUNS ON LINUX: Required for pacman/bsdtar - - name: Install Linux build dependencies - if: matrix.os == 'ubuntu-latest' + - name: Build Linux Packages run: | - sudo apt-get update - sudo apt-get install -y libarchive-tools - - - name: Build for ${{ matrix.os }} - run: npm run build:${{ matrix.platform }} - - - name: Upload Artifacts for ${{ matrix.os }} - uses: actions/upload-artifact@v4 + npx electron-builder --linux --x64 --arm64 --publish never + - uses: actions/upload-artifact@v4 with: - name: ${{ matrix.os }}-builds + name: linux-builds path: | - dist/*.exe - dist/*.exe.blockmap - dist/*.dmg - dist/*.zip dist/*.AppImage dist/*.AppImage.blockmap dist/*.deb dist/*.rpm dist/*.pkg.tar.zst - dist/latest*.yml + dist/latest-linux.yml + + build-windows: + runs-on: windows-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: '22' + cache: 'npm' + - run: npm ci + + - name: Build Windows Packages + run: npx electron-builder --win --publish never + - uses: actions/upload-artifact@v4 + with: + name: windows-builds + path: | + dist/*.exe + dist/*.exe.blockmap + dist/latest.yml + + build-macos: + runs-on: macos-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: '22' + cache: 'npm' + - run: npm ci + + - name: Build macOS Packages + run: npx electron-builder --mac --publish never + - uses: actions/upload-artifact@v4 + with: + name: macos-builds + path: | + dist/*.dmg + dist/*.zip + dist/latest-mac.yml release: - needs: build + needs: [build-linux, build-windows, build-macos] runs-on: ubuntu-latest if: | - startsWith(github.ref, 'refs/tags/v') + startsWith(github.ref, 'refs/tags/v') || + github.ref == 'refs/heads/release' || + github.event_name == 'workflow_dispatch' + + permissions: + contents: write + steps: + # FIX: './package.json' Module Not Found in `Get version` step + - name: Checkout code + uses: actions/checkout@v4 + - name: Download all artifacts uses: actions/download-artifact@v4 with: path: artifacts - merge-multiple: true + - name: Display structure of downloaded files run: ls -R artifacts + - name: Get version from package.json id: pkg_version run: echo "VERSION=$(node -p "require('./package.json').version")" >> $GITHUB_OUTPUT + - name: Create Release uses: softprops/action-gh-release@v2 with: + # If it's a tag, use the tag. tag_name: ${{ github.ref_type == 'tag' && github.ref_name || format('v{0}.r{1}', steps.pkg_version.outputs.VERSION, github.run_number) }} + # If it's the 'release' branch, use 'v2.0.2-beta.r42' + # name: ${{ github.ref_type == 'tag' && github.ref_name || format('v{0}-beta.r{1}', steps.pkg_version.outputs.VERSION, github.run_number) }} files: | - artifacts/ubuntu-latest-builds/**/* - artifacts/windows-latest-builds/**/* - artifacts/macos-latest-builds/**/* + artifacts/linux-builds/**/* + artifacts/windows-builds/**/* + artifacts/macos-builds/**/* generate_release_notes: true draft: true prerelease: false + From c6a9d0ae071d4d2921787d5408e5cf90717a090b Mon Sep 17 00:00:00 2001 From: Fazri Gading Date: Sun, 25 Jan 2026 18:36:40 +0800 Subject: [PATCH 11/15] merge last two commits to develop (#165) * Add correct auto-detect version and commit If a person uses PKGBUILD, it will automatically determine the latest version and commit. * Remove maintainer and change to npm ci --------- Co-authored-by: Terromur <79866197+Terromur@users.noreply.github.com> --- PKGBUILD | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/PKGBUILD b/PKGBUILD index 1f6c73e..4f05e42 100644 --- a/PKGBUILD +++ b/PKGBUILD @@ -1,8 +1,7 @@ # Maintainer: Terromur -# Maintainer: Fazri Gading pkgname=Hytale-F2P-git _pkgname=Hytale-F2P -pkgver=2.0.11.r120.gb05aeef +pkgver=2.0.12.r150.gb62ffc1 pkgrel=1 pkgdesc="Hytale-F2P - unofficial Hytale Launcher for free to play with multiplayer support" arch=('x86_64') @@ -14,12 +13,15 @@ sha256sums=('SKIP' '46488fada4775d9976d7b7b62f8d1f1f8d9a9a9d8f8aa9af4f2e2153019f pkgver() { cd "$_pkgname" - printf "2.0.11.r%s.g%s" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)" + version=$(git describe --abbrev=0 --tags --match "v[0-9]*") + commits=$(git rev-list --count HEAD) + hash=$(git rev-parse --short HEAD) + printf "%s.r%s.g%s" "${version#v}" "$commits" "$hash" } build() { cd "$_pkgname" - npm install + npm ci npm run build:linux } From b27860a65581dd0d2ff7ef48f5dbe9efabcbb746 Mon Sep 17 00:00:00 2001 From: Fazri Gading Date: Sun, 25 Jan 2026 23:25:33 +0800 Subject: [PATCH 12/15] fix: adds back dotenv in package-lock.json --- package-lock.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/package-lock.json b/package-lock.json index 2da2ede..12d6ac3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,6 +12,7 @@ "adm-zip": "^0.5.10", "axios": "^1.6.0", "discord-rpc": "^4.0.1", + "dotenv": "^17.2.3", "electron-updater": "^6.7.3", "fs-extra": "^11.3.3", "tar": "^6.2.1", @@ -1906,6 +1907,18 @@ "node": ">=8" } }, + "node_modules/dotenv": { + "version": "17.2.3", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.2.3.tgz", + "integrity": "sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, "node_modules/dotenv-expand": { "version": "11.0.7", "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.7.tgz", From 43d5d20351baa5372522ad90adf6cc827ff8ed98 Mon Sep 17 00:00:00 2001 From: Fazri Gading Date: Mon, 26 Jan 2026 01:52:54 +0800 Subject: [PATCH 13/15] chore: disable patcher log to reduce logging length --- backend/managers/gameLauncher.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/managers/gameLauncher.js b/backend/managers/gameLauncher.js index d1274b8..6a7a379 100644 --- a/backend/managers/gameLauncher.js +++ b/backend/managers/gameLauncher.js @@ -162,7 +162,7 @@ async function launchGame(playerName = 'Player', progressCallback, javaPathOverr console.log(`Force patching game binaries for ${authDomain}...`); const patchResult = await clientPatcher.ensureClientPatched(gameLatest, (msg, percent) => { - console.log(`[Patcher] ${msg}`); + // console.log(`[Patcher] ${msg}`); if (progressCallback && msg) { progressCallback(msg, percent, null, null, null); } From 45314620e4b51048e64b948620ca410ba1764651 Mon Sep 17 00:00:00 2001 From: Fazri Gading Date: Mon, 26 Jan 2026 02:16:33 +0800 Subject: [PATCH 14/15] fix: Discord ID int to str, duplicate run of cleanupDiscordRPC function, and dismiss setTimeout on discordRPC destroy --- main.js | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/main.js b/main.js index 2a856ad..697095c 100644 --- a/main.js +++ b/main.js @@ -30,7 +30,7 @@ let mainWindow; let discordRPC = null; // Discord Rich Presence setup -const DISCORD_CLIENT_ID = 1462244937868513373; +const DISCORD_CLIENT_ID = "1462244937868513373"; function initDiscordRPC() { try { @@ -372,14 +372,9 @@ function cleanupDiscordRPC() { try { console.log('Cleaning up Discord RPC...'); discordRPC.clearActivity(); - setTimeout(() => { - try { - discordRPC.destroy(); - } catch (error) { - console.log('Error during final Discord RPC cleanup:', error.message); - } - }, 100); + discordRPC.destroy(); discordRPC = null; + console.log('Discord RPC cleaned up successfully'); } catch (error) { console.log('Error cleaning up Discord RPC:', error.message); discordRPC = null; @@ -394,9 +389,6 @@ app.on('before-quit', () => { app.on('window-all-closed', () => { console.log('=== LAUNCHER CLOSING ==='); - - cleanupDiscordRPC(); - app.quit(); }); From 8781025df9bc55e6406834beb18e2ac340ddcbc5 Mon Sep 17 00:00:00 2001 From: Fazri Gading Date: Mon, 26 Jan 2026 03:28:30 +0800 Subject: [PATCH 15/15] chore: update readme.md, todo changelog --- README.md | 147 +++++++++++++++++++++++++++++++++++------------------- 1 file changed, 96 insertions(+), 51 deletions(-) diff --git a/README.md b/README.md index 379f3c5..ba9db7f 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ ⭐ **If you find this project useful, please give it a STAR!** ⭐ -⚠️ **READ [QUICK START](https://github.com/amiayweb/Hytale-F2P/tree/main?tab=readme-ov-file#-quick-start) before Downloading & Installing the Launcher!** ⚠️ +### ⚠️ **READ [QUICK START](https://github.com/amiayweb/Hytale-F2P/tree/main?tab=readme-ov-file#-quick-start) before Downloading & Installing the Launcher!** ⚠️ 🛑 **Found a problem? Join the Discord and Select #Open-A-Ticket!: https://discord.gg/gME8rUy3MB** 🛑 @@ -27,7 +27,7 @@
Hytale F2P Launcher
- View Hytale F2P Gallery + View Gallery @@ -89,7 +89,7 @@ ### 🎮 Hytale Hardware Requirements -> [!INFO] +> [!IMPORTANT] > Hytale is designed to be accessible while scaling for high-end performance. > Below are the [official system requirements for the Early Access](https://hytale.com/news/2025/12/hytale-hardware-requirements) release. @@ -171,27 +171,77 @@ ## 📥 Installation -### 🪟 Windows -1. Make sure you have installed all [**Windows Prequisites**](https://github.com/amiayweb/Hytale-F2P/tree/main?tab=readme-ov-file#-windows-prequisites) above. -2. Download the latest `Hytale-F2P-Launcher.exe` from [**Releases**](https://github.com/amiayweb/Hytale-F2P/releases/latest/). -3. Run the EXE. -4. Launch from Desktop or Start menu. +### 🪟 Windows Installation -### 🐧 Linux -1. Make sure you have installed all [**Linux Prequisites**](https://github.com/amiayweb/Hytale-F2P/tree/main?tab=readme-ov-file#-linux-prequisites) above. -2. Download the latest `Hytale-F2P-Launcher.AppImage` or any specific-packages in accordance with your distro from [**Releases**](https://github.com/amiayweb/Hytale-F2P/releases/latest/). -3. Give permission to the file (`chmod +x `). -4. Run the file by double-clicking, or via Terminal (`./`), or find it via Desktop/App Library. +1. **Prerequisites:** Ensure you have installed all [**Windows Prerequisites**](https://github.com/amiayweb/Hytale-F2P/tree/main?tab=readme-ov-file#-windows-prequisites) listed above. +2. **Download:** Get the latest `Hytale-F2P-Launcher.exe` from the [**Releases**](https://github.com/amiayweb/Hytale-F2P/releases/latest/) page. +3. **SmartScreen Note:** Since the executable is currently unsigned, Windows may show a "Windows protected your PC" popup. + * Click **More info**. + * Click **Run anyway**. +4. **Launch:** Once installed, you can launch the app directly from your Desktop or the Start menu. -### 🍎 macOS -1. Download .DMG file from the from [**Releases**](https://github.com/amiayweb/Hytale-F2P/releases/latest/). -2. Run the file. -3. If says "Apple could not verify ...", go to System Settings > Privacy & Security > Scroll to bottom, find "Hytale F2P Launcher" > press Open Anyway. -4. Advanced: You can also use the .zip. // TODO: NEEDS MORE INFORMATION +--- + +### 🐧 Linux Installation + +1. **Prerequisites:** Ensure you have installed all [**Linux Prerequisites**](https://github.com/amiayweb/Hytale-F2P/tree/main?tab=readme-ov-file#-linux-prequisites) above. +2. **Download:** Choose the package that fits your distribution from the [**Releases**](https://github.com/amiayweb/Hytale-F2P/releases/latest/) page: + * **Universal:** `.AppImage` + * **Arch Linux:** `.pkg.tar.zst` + * **Fedora/RHEL/openSUSE:** `.rpm` + * **Debian/Ubuntu:** `.deb` +3. **Permissions & Execution:** + * **AppImage:** Make the file executable and run it: + ```bash + chmod +x Hytale-F2P-Launcher.AppImage + ./Hytale-F2P-Launcher.AppImage + ``` + * **Fedora (dnf):** Install the RPM: + ```bash + sudo dnf install ./Hytale-F2P-Launcher.rpm + ``` + * **Debian/Ubuntu (apt):** Install the DEB: + ```bash + sudo apt install ./Hytale-F2P-Launcher.deb + ``` + * **Arch Linux (pacman):** Install the package using: + ```bash + sudo pacman -U /path/to/Hytale-F2P-Launcher.pkg.tar.zst + ``` +4. **Troubleshooting:** + * **FUSE:** If the AppImage fails to launch on newer distributions, ensure `libfuse2` (or `fuse2` on Arch/Fedora) is installed. + * **Desktop Entry:** After installing via `.rpm`, `.deb`, or `.pkg.tar.zst`, the launcher should automatically appear in your App Library/Grid. + +--- + +### 🍎 macOS Installation + +> [!NOTE] +> Apple Silicon Users: If you are on an M1, M2, or M3 Mac, you may be prompted to install Rosetta 2 the first time you run the launcher. This is normal and required for compatibility. + +1. **Download:** Get the latest `.dmg` file from the [**Releases**](https://github.com/amiayweb/Hytale-F2P/releases/latest/) page. +2. **Mount:** Double-click the `.dmg` file to open it. +3. **Install:** Drag the **Hytale F2P Launcher** icon into your **Applications** folder. +4. **First Run:** If macOS prevents the app from opening because it is from an "unidentified developer": + * Open **System Settings** > **Privacy & Security**. + * Scroll down to the **Security** section. + * Look for the message regarding "Hytale F2P Launcher" and click **Open Anyway**. + * Authenticate with your password and click **Open**. + +#### **Advanced: Manual Installation (.zip)** +The `.zip` version is useful for users who prefer a portable installation or need to bypass specific permission issues. + +1. **Extract:** Download and unzip the file to your desired location (e.g., `~/Applications`). +2. **Remove Quarantine:** macOS often "quarantines" apps downloaded via browser. If the app won't open, open **Terminal** and run: + ```bash + xattr -rd com.apple.quarantine /path/to/Hytale-F2P-Launcher.app + ``` +> [!TIP] +> Type the first part of the command, then drag the app icon into the Terminal window to auto-fill the path. --- -# Server +# How to Host a Server ## Host your Singleplayer Server (Online-Play Feature) @@ -205,15 +255,17 @@ ## Dedicated Server > [!NOTE] -> Only Hytale-F2P-Server.rar file is needed to set it up on non-playing hardware (such as VPS/server hosting). -> Only HytaleServer.jar needed to use your "Server" folder made by the launcher to host local dedicated server. -> Use services like Playit.gg, Tailscale, Radmin VPN to share UDP connection if setting up router is not possible. +> If you have already `HytaleServer.jar` in `HytaleF2P/{release/pre-release}/package/game/latest/Server`, you can use it to host local dedicated server. + +> [!TIP] +> Use services like Playit.gg, Tailscale, Radmin VPN to share UDP connection if setting up router as an admin is not possible. + +> [!WARNING] +> `Hytale-F2P-Server.rar` file is needed to set up a server on non-playing hardware (such as VPS/server hosting). > [!IMPORTANT] > See detailed information of setting up a server here: [SERVER.md](SERVER.md) -// TODO: Server.md would be used as a detailed information to avoid confuses) - --- ## 🛠️ Building from Source @@ -222,29 +274,21 @@ See [BUILD.md](BUILD.md) for comprehensive build instructions. --- -// TODO: this part needs to be written in dev notes - -## 📌 Versioning Policy - -**⚠️ Important: Semantic Versioning Required** - -This project follows **strict semantic versioning** with **numerical versions only**: - -- ✅ **Valid**: `2.0.1`, `2.0.11`, `2.1.0`, `3.0.0` -- ❌ **Invalid**: `2.0.2b`, `2.0.2a`, `2.0.1-beta`, `v2.0.2b` - -**Format**: `MAJOR.MINOR.PATCH` (e.g., `2.0.11`) - -- **MAJOR**: Breaking changes -- **MINOR**: New features (backward compatible) -- **PATCH**: Bug fixes (backward compatible) - -**Why?** The auto-update system requires semantic versioning for proper version comparison. Letter suffixes (like `2.0.2b`) are not supported and will cause update detection issues. - ---- - ## 📋 Changelog -// TODO: CHANGELOG SHOULD BE IN `CHANGELOG.MD` + +### 🆕 v2.1.0 + +- 🚨 **Auto-Retry Downloads and Auto-Patch Files** — +- ⚡ **Hardware Acceleration** — +- 👨‍💻 **In-App Logging** — +- 🛠️ **Repair Button** — Y +- 🔎 **Browse CurseForge Mods** — Browsing mods now easier with our dedicated CurseForge API Key. +- 🌎 **Fixes and Release New Translation** — Fixed 🇪🇸 🇧🇷 and added more translation for current build. Turkish 🇹🇷 language now added. + + + +
+Click here to see older Changelogs ### 🆕 v2.0.2b *(Minor Update: Performance & Utilities)* - 🌎 **Language Translation** — A big welcome for Spanish 🇪🇸 and Portuguese (Brazil) 🇧🇷 players! **Language setting can be found in the bottom part of Settings pane.** @@ -253,14 +297,15 @@ This project follows **strict semantic versioning** with **numerical versions on - 🛠️ **Repair Button** — Your game's broken? One button will fix them, go to Settings pane to Repair your game in one-click, **without losing any data**. If doing so did not fix your issue, please report it to us immediately! - 🐛 **Fixed Bugs** — Fixed issue [#84](https://github.com/amiayweb/Hytale-F2P/issues/84) where mods disappearing when game starts in previous launcher (v2.0.2a). -### 🆕 v2.0.2a *(Minor Update)* + +### 🔄 v2.0.2a *(Minor Update)* - 🧑‍🚀 **Profiles System** — Added proper profile management: create, switch, and delete profiles. Each profile now has its own **isolated mod list**. - 🔒 **Mod Isolation** — Fixed ModManager so mods are **strictly scoped to the active profile**. Browsing and installing now only affects the selected profile. - 🚨 **Critical Path Fix** — Resolved a macOS bug where mods were being saved to a Windows path (`~/AppData/Local`) instead of `~/Library/Application Support`. - 🛡️ **Stability Improvements** — Added an **auto-sync step before every launch** to ensure the physical mods folder always matches the active profile. - 🎨 **UI Enhancements** — Added a **profile selector dropdown** and a **profile management modal**. -### 🆕 v2.0.2 +### 🔄 v2.0.2 - 🎮 **Discord RPC Integration** - Added Discord Rich Presence with toggle in settings (enabled by default) - 🌐 **Cross-Platform Multiplayer** - Added multiplayer patch support for Windows, Linux, and macOS - 🎨 **Chat Improvements** - Simplified chat color system @@ -305,7 +350,7 @@ This project follows **strict semantic versioning** with **numerical versions on - ☕ **Java Management** - Automatic Java runtime handling - 🎨 **Modern Interface** - Clean, intuitive design - 🌟 **First Release** - Core launcher functionality - +
--- ## 👥 Contributors
@@ -51,11 +51,11 @@
- In-Game Screenshot-1
+ In-Game Screenshot - Spawn Point
Hytale F2P In-Game Screenshot-1
- In-Game Screenshot-2
+ In-Game Screenshot - Gameplay Terrain
Hytale F2P In-Game Screenshot-2