Skip to content

Commit cb9d32d

Browse files
authored
构建时创建 deb 包 (#5981)
1 parent 36568df commit cb9d32d

9 files changed

Lines changed: 418 additions & 10 deletions

File tree

.github/workflows/gradle.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,3 +48,9 @@ jobs:
4848
name: HMCL-${{ env.SHORT_SHA }}-sh
4949
path: HMCL/build/libs/HMCL-*.sh
5050
archive: false
51+
- name: Upload DEB
52+
uses: actions/upload-artifact@v7
53+
with:
54+
name: HMCL-${{ env.SHORT_SHA }}-deb
55+
path: HMCL/build/libs/HMCL-*.deb
56+
archive: false

.github/workflows/release.yml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,16 +46,20 @@ jobs:
4646
wget "$HMCL_CI_DOWNLOAD_BASE_URI/HMCL-$HMCL_VERSION.jar.sha256"
4747
wget "$HMCL_CI_DOWNLOAD_BASE_URI/HMCL-$HMCL_VERSION.sh"
4848
wget "$HMCL_CI_DOWNLOAD_BASE_URI/HMCL-$HMCL_VERSION.sh.sha256"
49+
wget "$HMCL_CI_DOWNLOAD_BASE_URI/HMCL-$HMCL_VERSION.deb"
50+
wget "$HMCL_CI_DOWNLOAD_BASE_URI/HMCL-$HMCL_VERSION.deb.sha256"
4951
- name: Verify artifacts
5052
if: ${{ env.continue == 'true' }}
5153
run: |
5254
export JAR_SHA256=$(cat HMCL-$HMCL_VERSION.jar.sha256 | tr -d '\n')
5355
export EXE_SHA256=$(cat HMCL-$HMCL_VERSION.exe.sha256 | tr -d '\n')
5456
export SH_SHA256=$(cat HMCL-$HMCL_VERSION.sh.sha256 | tr -d '\n')
57+
export DEB_SHA256=$(cat HMCL-$HMCL_VERSION.deb.sha256 | tr -d '\n')
5558
5659
echo "$JAR_SHA256 HMCL-$HMCL_VERSION.jar" | sha256sum -c
5760
echo "$EXE_SHA256 HMCL-$HMCL_VERSION.exe" | sha256sum -c
5861
echo "$SH_SHA256 HMCL-$HMCL_VERSION.sh" | sha256sum -c
62+
echo "$DEB_SHA256 HMCL-$HMCL_VERSION.deb" | sha256sum -c
5963
- name: Generate release note
6064
if: ${{ env.continue == 'true' }}
6165
run: |
@@ -67,6 +71,7 @@ jobs:
6771
echo "| [HMCL-$HMCL_VERSION.exe]($GH_DOWNLOAD_BASE_URL/v$HMCL_VERSION/HMCL-$HMCL_VERSION.exe) | \`$(cat HMCL-$HMCL_VERSION.exe.sha256)\` |" >> RELEASE_NOTE
6872
echo "| [HMCL-$HMCL_VERSION.jar]($GH_DOWNLOAD_BASE_URL/v$HMCL_VERSION/HMCL-$HMCL_VERSION.jar) | \`$(cat HMCL-$HMCL_VERSION.jar.sha256)\` |" >> RELEASE_NOTE
6973
echo "| [HMCL-$HMCL_VERSION.sh]($GH_DOWNLOAD_BASE_URL/v$HMCL_VERSION/HMCL-$HMCL_VERSION.sh) | \`$(cat HMCL-$HMCL_VERSION.sh.sha256)\` |" >> RELEASE_NOTE
74+
echo "| [HMCL-$HMCL_VERSION.deb]($GH_DOWNLOAD_BASE_URL/v$HMCL_VERSION/HMCL-$HMCL_VERSION.deb) | \`$(cat HMCL-$HMCL_VERSION.deb.sha256)\` |" >> RELEASE_NOTE
7075
7176
# CNB Release Note
7277
echo "[更新日志](https://docs.hmcl.net/changelog/${{ matrix.channel }}.html#HMCL-$HMCL_VERSION)" >> CNB_RELEASE_NOTE
@@ -76,6 +81,8 @@ jobs:
7681
echo "| [HMCL-$HMCL_VERSION.exe]($CNB_DOWNLOAD_BASE_URL/v$HMCL_VERSION/HMCL-$HMCL_VERSION.exe) | \`$(cat HMCL-$HMCL_VERSION.exe.sha256)\` |" >> CNB_RELEASE_NOTE
7782
echo "| [HMCL-$HMCL_VERSION.jar]($CNB_DOWNLOAD_BASE_URL/v$HMCL_VERSION/HMCL-$HMCL_VERSION.jar) | \`$(cat HMCL-$HMCL_VERSION.jar.sha256)\` |" >> CNB_RELEASE_NOTE
7883
echo "| [HMCL-$HMCL_VERSION.sh]($CNB_DOWNLOAD_BASE_URL/v$HMCL_VERSION/HMCL-$HMCL_VERSION.sh) | \`$(cat HMCL-$HMCL_VERSION.sh.sha256)\` |" >> CNB_RELEASE_NOTE
84+
echo "| [HMCL-$HMCL_VERSION.deb]($CNB_DOWNLOAD_BASE_URL/v$HMCL_VERSION/HMCL-$HMCL_VERSION.deb) | \`$(cat HMCL-$HMCL_VERSION.deb.sha256)\` |" >> CNB_RELEASE_NOTE
85+
7986
env:
8087
GH_DOWNLOAD_BASE_URL: https://github.com/${{ github.repository }}/releases/download
8188
CNB_DOWNLOAD_BASE_URL: https://cnb.cool/HMCL-dev/HMCL/-/releases/download
@@ -86,6 +93,7 @@ jobs:
8693
"HMCL-${{ env.HMCL_VERSION }}.exe" \
8794
"HMCL-${{ env.HMCL_VERSION }}.jar" \
8895
"HMCL-${{ env.HMCL_VERSION }}.sh" \
96+
"HMCL-${{ env.HMCL_VERSION }}.deb" \
8997
--target "${{ env.HMCL_COMMIT_SHA }}" \
9098
--title "${{ env.HMCL_TAG_NAME }}" \
9199
--notes-file RELEASE_NOTE \
@@ -120,6 +128,9 @@ jobs:
120128
121129
echo "Uploading HMCL-$HMCL_VERSION.sh"
122130
~/go/bin/git-cnb release asset-upload --repo="$CNB_REPO" --tag-name "$HMCL_TAG_NAME" --file-name "HMCL-$HMCL_VERSION.sh"
131+
132+
echo "Uploading HMCL-$HMCL_VERSION.deb"
133+
~/go/bin/git-cnb release asset-upload --repo="$CNB_REPO" --tag-name "$HMCL_TAG_NAME" --file-name "HMCL-$HMCL_VERSION.deb"
123134
env:
124135
CNB_TOKEN: ${{ secrets.CNB_SYNC_TOKEN }}
125136
CNB_REPO: HMCL-dev/HMCL

HMCL/build.gradle.kts

Lines changed: 37 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import org.jackhuang.hmcl.gradle.l10n.CreateLanguageList
66
import org.jackhuang.hmcl.gradle.l10n.CreateLocaleNamesResourceBundle
77
import org.jackhuang.hmcl.gradle.l10n.UpsideDownTranslate
88
import org.jackhuang.hmcl.gradle.mod.ParseModDataTask
9+
import org.jackhuang.hmcl.gradle.pack.CreateDeb
10+
import org.jackhuang.hmcl.gradle.pack.ReleaseType
911
import org.jackhuang.hmcl.gradle.utils.PropertiesUtils
1012
import java.net.URI
1113
import java.nio.file.FileSystems
@@ -251,20 +253,22 @@ tasks.processResources {
251253
}
252254
}
253255

256+
fun artifactFile(ext: String) = jarPath.resolveSibling(jarPath.nameWithoutExtension + '.' + ext)
257+
254258
val makeExecutables by tasks.registering {
255259
val extensions = listOf("exe", "sh")
256260

257261
dependsOn(tasks.jar)
258262

259263
inputs.file(jarPath)
260-
outputs.files(extensions.map { File(jarPath.parentFile, jarPath.nameWithoutExtension + '.' + it) })
264+
outputs.files(extensions.map { artifactFile(it) })
261265

262266
doLast {
263267
val jarContent = jarPath.readBytes()
264268

265269
ZipFile(jarPath).use { zipFile ->
266270
for (extension in extensions) {
267-
val output = File(jarPath.parentFile, jarPath.nameWithoutExtension + '.' + extension)
271+
val output = artifactFile(extension)
268272
val entry = zipFile.getEntry("assets/HMCLauncher.$extension")
269273
?: throw GradleException("HMCLauncher.$extension not found")
270274

@@ -279,8 +283,31 @@ val makeExecutables by tasks.registering {
279283
}
280284
}
281285

286+
val makeDeb by tasks.registering(CreateDeb::class) {
287+
dependsOn(makeExecutables)
288+
289+
val debFile = layout.file(provider { artifactFile("deb") })
290+
291+
val debChannel = when (versionType) {
292+
"stable" -> ReleaseType.STABLE
293+
"dev" -> ReleaseType.DEVELOPMENT
294+
else -> ReleaseType.NIGHTLY
295+
}
296+
297+
version.set(project.version.toString())
298+
releaseType.set(debChannel)
299+
appShFile.set(layout.file(provider { artifactFile("sh") }))
300+
iconFile.set(layout.projectDirectory.file("image/hmcl.png"))
301+
outputFile.set(debFile)
302+
303+
doLast {
304+
createChecksum(debFile.get().asFile)
305+
}
306+
}
307+
282308
tasks.build {
283309
dependsOn(makeExecutables)
310+
dependsOn(makeDeb)
284311
}
285312

286313
fun parseToolOptions(options: String?): MutableList<String> {
@@ -377,12 +404,14 @@ val upgradeTerracottaConfig = tasks.register<TerracottaConfigUpgradeTask>("upgra
377404
val destination = layout.projectDirectory.file("src/main/resources/assets/terracotta.json")
378405
val source = layout.projectDirectory.file("terracotta-template.json");
379406

380-
classifiers.set(listOf(
381-
"windows-x86_64", "windows-arm64",
382-
"macos-x86_64", "macos-arm64",
383-
"linux-x86_64", "linux-arm64", "linux-loongarch64", "linux-riscv64",
384-
"freebsd-x86_64"
385-
))
407+
classifiers.set(
408+
listOf(
409+
"windows-x86_64", "windows-arm64",
410+
"macos-x86_64", "macos-arm64",
411+
"linux-x86_64", "linux-arm64", "linux-loongarch64", "linux-riscv64",
412+
"freebsd-x86_64"
413+
)
414+
)
386415

387416
version.set(libs.versions.terracotta)
388417
downloadURL.set($$"https://github.com/burningtnt/Terracotta/releases/download/v${version}/terracotta-${version}-${classifier}-pkg.tar.gz")

buildSrc/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ dependencies {
1111
implementation(libs.gson)
1212
implementation(libs.jna)
1313
implementation(libs.kala.compress.tar)
14+
implementation(libs.kala.compress.ar)
1415
}
1516

1617
java {

0 commit comments

Comments
 (0)