diff --git a/.github/workflows/astralrinth-build.yml b/.github/workflows/astralrinth-build.yml
index b5ede000f..c5a263d74 100644
--- a/.github/workflows/astralrinth-build.yml
+++ b/.github/workflows/astralrinth-build.yml
@@ -16,6 +16,7 @@ on:
- 'packages/assets/**'
- 'packages/ui/**'
- 'packages/utils/**'
+ workflow_dispatch:
jobs:
build:
@@ -24,12 +25,12 @@ jobs:
fail-fast: false
matrix:
# platform: [macos-latest, windows-latest, ubuntu-latest]
- platform: [ubuntu-latest]
+ platform: [windows-latest, ubuntu-latest]
include:
# - platform: macos-latest
# artifact-target-name: universal-apple-darwin
- # - platform: windows-latest
- # artifact-target-name: x86_64-pc-windows-msvc
+ - platform: windows-latest
+ artifact-target-name: x86_64-pc-windows-msvc
- platform: ubuntu-latest
artifact-target-name: x86_64-unknown-linux-gnu
@@ -41,6 +42,35 @@ jobs:
with:
fetch-depth: 2
+ - name: 🔍 Validate Git config does not introduce CRLF
+ shell: bash
+ run: |
+ echo "🔍 Checking Git config for CRLF settings..."
+
+ autocrlf=$(git config --get core.autocrlf || echo "unset")
+ eol_setting=$(git config --get core.eol || echo "unset")
+
+ echo "core.autocrlf = $autocrlf"
+ echo "core.eol = $eol_setting"
+
+ if [ "$autocrlf" = "true" ]; then
+ echo "⚠️ WARNING: core.autocrlf is set to 'true'. Consider setting it to 'input' or 'false'."
+ fi
+
+ if [ "$eol_setting" = "crlf" ]; then
+ echo "⚠️ WARNING: core.eol is set to 'crlf'. Consider unsetting it or setting to 'lf'."
+ fi
+
+ - name: 🔍 Check migration files line endings (LF only)
+ shell: bash
+ run: |
+ echo "🔍 Scanning migration SQL files for CR characters (\\r)..."
+ if grep -Iq $'\r' packages/app-lib/migrations/*.sql; then
+ echo "❌ ERROR: Some migration files contain CR (\\r) characters — expected only LF line endings."
+ exit 1
+ fi
+ echo "✅ All migration files use LF line endings"
+
- name: 🧰 Setup Rust toolchain
uses: actions-rust-lang/setup-rust-toolchain@v1
with:
@@ -73,11 +103,11 @@ jobs:
- name: 🧰 Install dependencies
run: pnpm install
- # - name: ✍️ Set up Windows code signing (jsign)
- # if: matrix.platform == 'windows-latest' && env.SIGN_WINDOWS_BINARIES == 'true'
- # shell: bash
- # run: |
- # choco install jsign --ignore-dependencies
+ - name: ✍️ Set up Windows code signing (jsign)
+ if: matrix.platform == 'windows-latest' && env.SIGN_WINDOWS_BINARIES == 'true'
+ shell: bash
+ run: |
+ choco install jsign --ignore-dependencies
- name: 🗑️ Clean up cached bundles
shell: bash
@@ -99,15 +129,15 @@ jobs:
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }}
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }}
- # - name: 🔨 Build Windows app
- # if: matrix.platform == 'windows-latest'
- # shell: pwsh
- # run: |
- # $env:JAVA_HOME = "$env:JAVA_HOME_11_X64"
- # pnpm --filter=@modrinth/app run tauri build --config tauri-release.conf.json --verbose --bundles 'nsis'
- # env:
- # TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }}
- # TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }}
+ - name: 🔨 Build Windows app
+ if: matrix.platform == 'windows-latest'
+ shell: pwsh
+ run: |
+ $env:JAVA_HOME = "$env:JAVA_HOME_11_X64"
+ pnpm --filter=@modrinth/app run tauri build --config tauri-release.conf.json --verbose --bundles 'nsis'
+ env:
+ TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }}
+ TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }}
- name: 📤 Upload app bundles
uses: actions/upload-artifact@v3
diff --git a/apps/app-frontend/src/App.vue b/apps/app-frontend/src/App.vue
index a8a76db24..c837744c9 100644
--- a/apps/app-frontend/src/App.vue
+++ b/apps/app-frontend/src/App.vue
@@ -42,7 +42,7 @@ import ModrinthLoadingIndicator from '@/components/LoadingIndicatorBar.vue'
import { handleError, useNotifications } from '@/store/notifications.js'
import { command_listener, warning_listener } from '@/helpers/events.js'
import { type } from '@tauri-apps/plugin-os'
-import { getOS, isDev, restartApp } from '@/helpers/utils.js'
+import { getOS, isDev } from '@/helpers/utils.js'
import { debugAnalytics, initAnalytics, optOutAnalytics, trackEvent } from '@/helpers/analytics'
import { getCurrentWindow } from '@tauri-apps/api/window'
import { getVersion } from '@tauri-apps/api/app'
@@ -72,6 +72,9 @@ import QuickInstanceSwitcher from '@/components/ui/QuickInstanceSwitcher.vue'
import { get_available_capes, get_available_skins } from './helpers/skins'
import { generateSkinPreviews } from './helpers/rendering/batch-skin-renderer'
+// [AR] Feature
+import { getRemote, updateState } from '@/helpers/update.js'
+
const themeStore = useTheming()
const news = ref([])
@@ -99,6 +102,7 @@ const isMaximized = ref(false)
onMounted(async () => {
await useCheckDisableMouseover()
+ await getRemote(false) // [AR] Check for updates
document.querySelector('body').addEventListener('click', handleClick)
document.querySelector('body').addEventListener('auxclick', handleAuxClick)
@@ -161,11 +165,11 @@ async function setupApp() {
initAnalytics()
if (!telemetry) {
- console.info("[AR] Telemetry disabled by default (Hard patched).")
+ console.info("[AR] • Telemetry disabled by default (Hard patched).")
optOutAnalytics()
}
if (!personalized_ads) {
- console.info("[AR] Personalized ads disabled by default (Hard patched).")
+ console.info("[AR] • Personalized ads disabled by default (Hard patched).")
}
if (dev) debugAnalytics()
@@ -188,7 +192,7 @@ async function setupApp() {
}),
)
- // Patched by AstralRinth
+ /// [AR] Patch
// useFetch(
// `https://api.modrinth.com/appCriticalAnnouncement.json?version=${version}`,
// 'criticalAnnouncements',
@@ -465,12 +469,20 @@ function handleAuxClick(e) {
+ ✅ + {{ language === 'en' + ? 'The migration fix has been applied successfully. Please restart the launcher and try to log in to the game :)' + : 'Исправление миграции успешно применено. Пожалуйста, перезапустите лаунчер и попробуйте снова авторизоваться в игре :)' }} +
++ {{ language === 'en' + ? 'If the problem persists, please try the other fix.' + : 'Если проблема сохраняется, пожалуйста, попробуйте другой способ.' }} +
+ + + ++ ❌ + {{ language === 'en' + ? 'The migration fix failed or had no effect.' + : 'Исправление миграции не было успешно применено или не имело эффекта.' }} +
++ {{ language === 'en' + ? 'If the problem persists, please try the other fix.' + : 'Если проблема сохраняется, пожалуйста, попробуйте другой способ.' }} +
+ +