Skip to content

Commit b1227e4

Browse files
committed
ignore
1 parent c01ee12 commit b1227e4

3 files changed

Lines changed: 60 additions & 21 deletions

File tree

.github/workflows/pre_release_push.yml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,9 @@ name: Build and Release Alpha APK
33
on:
44
push:
55
tags:
6-
- "alpha-*"
7-
workflow_dispatch:
6+
- "v*-debug*"
7+
- "v*-alpha*"
8+
- "v*-beta*"
89

910
jobs:
1011
build:

.github/workflows/release.yml

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,19 @@ on:
44
push:
55
tags:
66
- "v*" # Runs when a tag like "v6.0.1" is pushed
7-
workflow_dispatch:
87

98
jobs:
109
build:
1110
name: Build and Sign APK
11+
if: startsWith(github.ref, 'refs/tags/v') && !contains(github.ref_name, '-')
1212
runs-on: ubuntu-latest
1313

1414
steps:
1515
- name: Checkout Repository
1616
uses: actions/checkout@v6
1717
with:
18-
submodules: recursive
19-
fetch-depth: 0
18+
submodules: recursive
19+
fetch-depth: 0
2020

2121
- name: Set up JDK
2222
uses: actions/setup-java@v5
@@ -57,7 +57,7 @@ jobs:
5757
release:
5858
name: Create GitHub Release
5959
needs: build
60-
if: startsWith(github.ref, 'refs/tags/v')
60+
if: startsWith(github.ref, 'refs/tags/v') && !contains(github.ref_name, '-')
6161
runs-on: ubuntu-latest
6262

6363
steps:
@@ -86,10 +86,10 @@ jobs:
8686
8787
# Convert \n to newline + bullet
8888
CHANGELOG=$(echo "$CHANGELOG" | sed 's/\\n/\n* /g')
89-
89+
9090
# Add heading cleanly
9191
CHANGELOG="### Changelog\n\n$CHANGELOG"
92-
92+
9393
# Write to file
9494
echo -e "$CHANGELOG" > changelog.txt
9595
@@ -116,8 +116,8 @@ jobs:
116116
- name: Notify Telegram of New Release
117117
env:
118118
TELEGRAM_TOKEN: ${{ secrets.TELEGRAM_TOKEN }}
119-
CHAT_ID: ${{ secrets.CHAT_ID }}
120-
THREAD_ID: ${{ secrets.RELEASE_THREAD_ID }}
119+
CHAT_ID: ${{ secrets.CHAT_ID }}
120+
THREAD_ID: ${{ secrets.RELEASE_THREAD_ID }}
121121
run: |
122122
TAG=${{ github.ref_name }}
123123
URL="https://github.com/${{ github.repository }}/releases/tag/${TAG}"
Lines changed: 49 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,17 @@
11
package `in`.hridayan.ashell.settings.domain.usecase
22

3-
import `in`.hridayan.ashell.settings.domain.model.UpdateResult
43
import `in`.hridayan.ashell.core.domain.repository.GithubDataRepository
4+
import `in`.hridayan.ashell.settings.domain.model.UpdateResult
55
import javax.inject.Inject
66

77
class CheckUpdateUseCase @Inject constructor(
88
private val repository: GithubDataRepository
99
) {
10-
suspend operator fun invoke(currentVersion: String, includePrerelease: Boolean, releaseType: Int): UpdateResult {
10+
suspend operator fun invoke(
11+
currentVersion: String,
12+
includePrerelease: Boolean,
13+
releaseType: Int
14+
): UpdateResult {
1115
return when (val result = repository.fetchLatestRelease(includePrerelease, releaseType)) {
1216
is UpdateResult.Success -> {
1317
val isNewer = isNewerVersion(result.release.tagName, currentVersion)
@@ -20,17 +24,51 @@ class CheckUpdateUseCase @Inject constructor(
2024
}
2125
}
2226

27+
private data class ParsedVersion(
28+
val numbers: List<Int>,
29+
val stage: Int,
30+
val stageNumber: Int
31+
)
32+
2333
private fun isNewerVersion(latest: String, current: String): Boolean {
24-
val latestParts = latest.trimStart('v').split(".")
25-
val currentParts = current.removeSuffix("-debug").trimStart('v').split(".")
26-
27-
for (i in 0 until maxOf(latestParts.size, currentParts.size)) {
28-
val l = latestParts.getOrNull(i)?.toIntOrNull() ?: 0
29-
val c = currentParts.getOrNull(i)?.toIntOrNull() ?: 0
30-
if (l > c) return true
31-
if (l < c) return false
34+
val l = parseVersion(latest)
35+
val c = parseVersion(current)
36+
37+
for (i in 0 until maxOf(l.numbers.size, c.numbers.size)) {
38+
val lv = l.numbers.getOrElse(i) { 0 }
39+
val cv = c.numbers.getOrElse(i) { 0 }
40+
41+
if (lv > cv) return true
42+
if (lv < cv) return false
3243
}
33-
return false
44+
45+
if (l.stage > c.stage) return true
46+
if (l.stage < c.stage) return false
47+
48+
return l.stageNumber > c.stageNumber
49+
}
50+
51+
private fun parseVersion(version: String): ParsedVersion {
52+
val cleaned = version.trim().trimStart('v')
53+
54+
val regex = Regex("""^(\d+(?:\.\d+)*)(?:-(alpha|beta|debug)(\d+)?)?$""")
55+
val match = regex.matchEntire(cleaned)
56+
?: return ParsedVersion(emptyList(), 0, 0)
57+
58+
val numbers = match.groupValues[1]
59+
.split(".")
60+
.map { it.toInt() }
61+
62+
val stage = when (match.groupValues[2]) {
63+
"debug" -> 0
64+
"alpha" -> 1
65+
"beta" -> 2
66+
else -> 3 // stable
67+
}
68+
69+
val stageNumber = match.groupValues[3].toIntOrNull() ?: 0
70+
71+
return ParsedVersion(numbers, stage, stageNumber)
3472
}
3573
}
3674

0 commit comments

Comments
 (0)