diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 1a22ca1..b2360d9 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -206,3 +206,33 @@ jobs: done echo "Forgejo release published successfully." + + - name: Update Homebrew Tap Cask + env: + FORGEJO_PAT: ${{ secrets.FORGEJO_PAT }} + RELEASE_VERSION: ${{ needs.bump-version.outputs.version }} + run: | + DMG_FILE=$(find dist -name "*.dmg" | head -n 1) + if [ -z "$DMG_FILE" ] || [ ! -f "$DMG_FILE" ]; then + echo "::error::No DMG file found in dist/ to update Homebrew Cask." + exit 1 + fi + + SHA256=$(sha256sum "$DMG_FILE" | awk '{print $1}') + echo "Calculated DMG SHA256: ${SHA256} for version ${RELEASE_VERSION}" + + echo "Cloning homebrew-tap repository..." + git clone "https://rukira:${FORGEJO_PAT}@git.asarius.site/rukira/homebrew-tap.git" tap-repo + cd tap-repo + + echo "Updating Casks/wow-backup.rb..." + sed -i "s/version \".*\"/version \"${RELEASE_VERSION}\"/" Casks/wow-backup.rb + sed -i "s/sha256 \".*\"/sha256 \"${SHA256}\"/" Casks/wow-backup.rb + + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + git add Casks/wow-backup.rb + git commit -m "chore(cask): update wow-backup to v${RELEASE_VERSION}" || echo "No changes to commit" + git push origin main + + echo "Homebrew tap updated successfully." diff --git a/INSTALL.md b/INSTALL.md index 1463ea0..1e39ff3 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -14,24 +14,6 @@ _Note: The Linux version is untested and experimental. Use at your own risk._ --- -## macOS - -1. Download the `.dmg` file from the latest release. -2. Double-click the `.dmg` file to mount the disk image. -3. Drag **WoW Backup.app** into your `/Applications` folder. -4. Eject the disk image. - -### Unsigned Application / Gatekeeper Notice -Because WoW Backup is distributed without Apple Developer ID code-signing notarization, macOS Gatekeeper may show a warning on first launch (*"WoW Backup cannot be opened because the developer cannot be verified"* or *"Apple could not verify that WoW Backup is free of malware"*). - -To launch the app for the first time: -1. Open **System Settings** -2. Navigate to **Security & Privacy**. -3. Click **Open Anyway** under **Allow apps downloaded from**. -4. Restart WoW Backup. - ---- - ## Windows 1. Download the `.msi` installer from the latest release. @@ -46,6 +28,58 @@ If Windows Defender SmartScreen flags the installer (*"Windows protected your PC --- +## macOS + +### Option 1: Manual DMG Download + +1. Download the `.dmg` file from the **[latest release](https://git.asarius.site/rukira/wow-backup/releases/latest)**. +2. Double-click the `.dmg` file to mount the disk image. +3. Drag **WoW Backup.app** into your `/Applications` folder. +4. Eject the disk image. + +#### Unsigned Application / Gatekeeper Notice +Because WoW Backup is distributed without Apple Developer ID code-signing notarization, macOS Gatekeeper may show a warning on first launch (*"WoW Backup cannot be opened because the developer cannot be verified"* or *"Apple could not verify that WoW Backup is free of malware"*). + +To launch the app: + +- **Terminal (Fastest):** Run the following command to strip the quarantine attribute: + ```shell + xattr -cr "/Applications/WoW Backup.app" + ``` +- **macOS System Settings:** + 1. Open **System Settings** → **Privacy & Security**. + 2. Scroll down to the **Security** section. + 3. Click **Open Anyway** next to the WoW Backup notice. + 4. Confirm and launch the app. + +--- + +### Option 2: Install via [Homebrew](https://brew.sh/) + +**Install:** +1. Add the tap: + ```shell + brew tap rukira/tap https://git.asarius.site/rukira/homebrew-tap.git + ``` + +2. Install WoW Backup: + ```shell + brew install --cask wow-backup + ``` + +**Update:** + ```shell + brew update + brew upgrade --cask wow-backup + ``` + +**Uninstall:** + ```shell + brew uninstall --cask --zap wow-backup + ``` + +--- + ## Linux (Experimental) 1. Download the `.deb` package from the latest release. diff --git a/composeApp/build.gradle.kts b/composeApp/build.gradle.kts index 1a4b2e4..c7891ab 100644 --- a/composeApp/build.gradle.kts +++ b/composeApp/build.gradle.kts @@ -12,12 +12,12 @@ kotlin { sourceSets { commonMain.dependencies { - implementation(compose.runtime) - implementation(compose.foundation) - implementation(compose.material3) - implementation(compose.ui) - implementation(compose.components.resources) - implementation(compose.components.uiToolingPreview) + implementation(libs.compose.runtime) + implementation(libs.compose.foundation) + implementation(libs.compose.material3) + implementation(libs.compose.ui) + implementation(libs.compose.components.resources) + implementation(libs.compose.components.uiToolingPreview) implementation(libs.androidx.lifecycle.viewmodelCompose) implementation(libs.androidx.lifecycle.runtimeCompose) } @@ -42,7 +42,8 @@ val appVersion = providers.gradleProperty("appVersion").orNull?.takeIf { it.isNo val generatedSrcDir = layout.buildDirectory.dir("generated/src/jvmMain/kotlin") -val generateBuildConfig by tasks.registering { +val generateBuildConfig = tasks.register("generateBuildConfig") { + description = "Generates BuildConfig.kt" val outputDir = generatedSrcDir val version = appVersion inputs.property("version", version) diff --git a/composeApp/src/jvmMain/kotlin/com/rukira/wowbackup/ui/theme/Theme.kt b/composeApp/src/jvmMain/kotlin/com/rukira/wowbackup/ui/theme/Theme.kt index 9b4c7e7..0f5fd4d 100644 --- a/composeApp/src/jvmMain/kotlin/com/rukira/wowbackup/ui/theme/Theme.kt +++ b/composeApp/src/jvmMain/kotlin/com/rukira/wowbackup/ui/theme/Theme.kt @@ -20,7 +20,7 @@ fun WoWBackupTheme( DynamicMaterialTheme( seedColor = accentColor.seedColor, - useDarkTheme = useDarkTheme, + isDark = useDarkTheme, content = content, ) } diff --git a/docs/screenshots/hero.png b/docs/screenshots/hero.png index 54c80a7..be71afb 100644 Binary files a/docs/screenshots/hero.png and b/docs/screenshots/hero.png differ diff --git a/docs/screenshots/wow-backup-hero.xcf b/docs/screenshots/wow-backup-hero.xcf new file mode 100644 index 0000000..acca288 Binary files /dev/null and b/docs/screenshots/wow-backup-hero.xcf differ diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index c8a2a2a..b5a27d6 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,18 +1,25 @@ [versions] -androidx-lifecycle = "2.10.0-alpha08" -composeMultiplatform = "1.11.0-alpha03" +androidx-lifecycle = "2.11.0" +composeMaterial3 = "1.9.0" +composeMultiplatform = "1.11.1" kotlin = "2.2.21" -kotlinx-coroutines = "1.10.2" -kotlinx-datetime = "0.6.2" -kotlinx-serialization = "1.10.0" +kotlinx-coroutines = "1.11.0" +kotlinx-datetime = "0.8.0" +kotlinx-serialization = "1.11.0" cardiologist = "0.8.0" -kotlin-logging = "7.0.3" -logback = "1.5.18" -materialKolor = "2.0.0" +kotlin-logging = "8.0.4" +logback = "1.5.38" +materialKolor = "4.0.5" [libraries] androidx-lifecycle-viewmodelCompose = { module = "org.jetbrains.androidx.lifecycle:lifecycle-viewmodel-compose", version.ref = "androidx-lifecycle" } androidx-lifecycle-runtimeCompose = { module = "org.jetbrains.androidx.lifecycle:lifecycle-runtime-compose", version.ref = "androidx-lifecycle" } +compose-runtime = { module = "org.jetbrains.compose.runtime:runtime", version.ref = "composeMultiplatform" } +compose-foundation = { module = "org.jetbrains.compose.foundation:foundation", version.ref = "composeMultiplatform" } +compose-material3 = { module = "org.jetbrains.compose.material3:material3", version.ref = "composeMaterial3" } +compose-ui = { module = "org.jetbrains.compose.ui:ui", version.ref = "composeMultiplatform" } +compose-components-resources = { module = "org.jetbrains.compose.components:components-resources", version.ref = "composeMultiplatform" } +compose-components-uiToolingPreview = { module = "org.jetbrains.compose.components:components-ui-tooling-preview", version.ref = "composeMultiplatform" } kotlinx-coroutinesSwing = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-swing", version.ref = "kotlinx-coroutines" } kotlinx-coroutinesTest = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "kotlinx-coroutines" } kotlinx-datetime = { module = "org.jetbrains.kotlinx:kotlinx-datetime", version.ref = "kotlinx-datetime" } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 19a6bde..c42672d 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.0-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.7.1-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME