Compare commits
31 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d4fb6a25be | ||
|
|
2eeebee36d | ||
|
|
616a7a9a95 | ||
|
|
d0887d88ba | ||
|
|
ae845d422c | ||
|
|
5c1b8b3cc8 | ||
|
|
3e2fcf87a8 | ||
|
|
03b90e2afe | ||
|
|
58f493e561 | ||
|
|
629ae6899a | ||
|
|
f6d754ff0a | ||
|
|
2ccdb02ba7 | ||
|
|
0784d7ce3f | ||
|
|
9a9b42a88c | ||
|
|
8bc24446fa | ||
|
|
fc4451bfbc | ||
|
|
6e5fd227bf | ||
|
|
e873f14a7b | ||
|
|
b7bff1a7bd | ||
|
|
7056758728 | ||
|
|
65962f3581 | ||
|
|
472654180a | ||
|
|
3a7a92800b | ||
|
|
892448c57f | ||
|
|
5be2247cb4 | ||
|
|
5b4798b7b2 | ||
|
|
88e64b25c8 | ||
|
|
0ea2067e42 | ||
|
|
033febece6 | ||
|
|
12e6a6f94b | ||
|
|
31a3cbc327 |
10 changed files with 113 additions and 43 deletions
32
.github/workflows/release.yml
vendored
32
.github/workflows/release.yml
vendored
|
|
@ -154,7 +154,7 @@ jobs:
|
|||
#### Available Packages
|
||||
- **macOS**: \`.dmg\` installer (Apple Silicon & Intel)
|
||||
- **Windows**: \`.msi\` Windows Installer
|
||||
- **Linux**: \`.deb\` package (Debian / Ubuntu)
|
||||
- **Linux (Experimental)**: \`.deb\` package (Debian / Ubuntu)
|
||||
|
||||
---
|
||||
For detailed setup and installation notes, please refer to [INSTALL.md](https://git.asarius.site/rukira/wow-backup/src/tag/${RELEASE_TAG}/INSTALL.md)."
|
||||
|
|
@ -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."
|
||||
|
|
|
|||
72
INSTALL.md
72
INSTALL.md
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
## Download
|
||||
|
||||
Download the appropriate installer for your platform from the **[latest release](https://git.asarius.site/rukira/wow-backup/releases)**:
|
||||
Download the appropriate installer for your platform from the **[latest release](https://git.asarius.site/rukira/wow-backup/releases/latest)**:
|
||||
|
||||
| Platform | Package Format | Installer File Pattern |
|
||||
|--------------------------|---|---|
|
||||
|
|
@ -10,23 +10,7 @@ Download the appropriate installer for your platform from the **[latest release]
|
|||
| **Windows** | Windows Installer (MSI) | `WoW Backup-<version>.msi` |
|
||||
| **Linux** (Experimental) | Debian Package (DEB) | `wow-backup_<version>_amd64.deb` |
|
||||
|
||||
---
|
||||
|
||||
## 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.
|
||||
_Note: The Linux version is untested and experimental. Use at your own risk._
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -44,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.
|
||||
|
|
|
|||
|
|
@ -1,8 +1,4 @@
|
|||
# WoW Backup
|
||||
|
||||
A lightweight, native-feeling desktop application to automatically backup World of Warcraft configuration data (WTF and Interface directories).
|
||||
|
||||
World of Warcraft stores all UI configurations, macros, keybindings, and addon data in the `WTF/` and `Interface/` folders. Losing this data due to game corruption, accidental deletion, or addon errors can mean losing years of customized setups. **WoW Backup** runs discreetly in the system tray, and automatically performs scheduled, timestamped backups (optionally compressed as ZIP archives).
|
||||

|
||||
|
||||
## Installation & Download
|
||||
|
||||
|
|
@ -75,4 +71,4 @@ The app uses a configuration file to store user preferences. This file and runti
|
|||
|
||||
## License
|
||||
|
||||
This project is released into the public domain. See the [LICENSE](LICENSE) file or [unlicense.org](https://unlicense.org/) for details.
|
||||
This project is released into the public domain. See the [UNLICENSE](UNLICENSE) file or [unlicense.org](https://unlicense.org/) for details.
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
@ -77,7 +78,7 @@ compose.desktop {
|
|||
packageName = "WoW Backup"
|
||||
packageVersion = appVersion
|
||||
|
||||
modules("java.naming", "java.sql", "java.instrument", "jdk.unsupported")
|
||||
modules("java.naming", "java.sql", "java.instrument", "jdk.unsupported", "java.net.http")
|
||||
|
||||
macOS {
|
||||
bundleID = "com.rukira.wowbackup"
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ fun WoWBackupTheme(
|
|||
|
||||
DynamicMaterialTheme(
|
||||
seedColor = accentColor.seedColor,
|
||||
useDarkTheme = useDarkTheme,
|
||||
isDark = useDarkTheme,
|
||||
content = content,
|
||||
)
|
||||
}
|
||||
|
|
|
|||
BIN
docs/screenshots/hero.png
Normal file
BIN
docs/screenshots/hero.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 259 KiB |
BIN
docs/screenshots/wow-backup-hero.xcf
Normal file
BIN
docs/screenshots/wow-backup-hero.xcf
Normal file
Binary file not shown.
|
|
@ -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" }
|
||||
|
|
|
|||
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue