mirror of
https://github.com/KRTirtho/spotube.git
synced 2026-11-06 11:14:00 +00:00
Compare commits
1 Commits
c46212c7ee
...
4101c113f6
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4101c113f6 |
76
.github/workflows/spotube-release-binary.yml
vendored
76
.github/workflows/spotube-release-binary.yml
vendored
@ -22,20 +22,17 @@ on:
|
|||||||
type: boolean
|
type: boolean
|
||||||
default: false
|
default: false
|
||||||
|
|
||||||
# Read-only by default; only create-release gets write access
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
# Never cancel a running release when another is dispatched, and let stable and nightly run side by side
|
|
||||||
concurrency:
|
concurrency:
|
||||||
group: ${{ github.workflow }}-${{ github.ref }}-${{ inputs.release_type }}
|
group: ${{ github.workflow }}-${{ github.ref }}
|
||||||
cancel-in-progress: false
|
cancel-in-progress: true
|
||||||
|
|
||||||
env:
|
env:
|
||||||
COMPOSE_WEBVIEW_REPO: KRTirtho/ComposeNativeWebview
|
COMPOSE_WEBVIEW_REPO: KRTirtho/ComposeNativeWebview
|
||||||
COMPOSE_WEBVIEW_COMMIT: cbd36f88927298a28a2d64c6acf7ec3b2def6f9d
|
COMPOSE_WEBVIEW_COMMIT: cbd36f88927298a28a2d64c6acf7ec3b2def6f9d
|
||||||
GRADLE_PLUGIN_REPO: team-spotube/gradle-plugin
|
GRADLE_PLUGIN_REPO: team-spotube/gradle-plugin
|
||||||
VLCJ_BUNDLER_REPO: team-spotube/vlcj-bundler-gradle-plugin
|
VLCJ_BUNDLER_REPO: team-spotube/vlcj-bundler-gradle-plugin
|
||||||
|
# Nucleus lists GraalVM CE releases via the GitHub API; unauthenticated calls hit the 60/hour limit on shared runners
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
prepare-deps:
|
prepare-deps:
|
||||||
@ -106,7 +103,6 @@ jobs:
|
|||||||
build-android:
|
build-android:
|
||||||
name: Android
|
name: Android
|
||||||
needs: prepare-deps
|
needs: prepare-deps
|
||||||
timeout-minutes: 120
|
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v7
|
- uses: actions/checkout@v7
|
||||||
@ -133,23 +129,17 @@ jobs:
|
|||||||
run: chmod +x gradlew
|
run: chmod +x gradlew
|
||||||
|
|
||||||
- name: Decode keystore
|
- name: Decode keystore
|
||||||
env:
|
|
||||||
KEYSTORE: ${{ secrets.KEYSTORE }}
|
|
||||||
run: |
|
run: |
|
||||||
echo "$KEYSTORE" | base64 --decode > "${{ github.workspace }}/composeApp/upload-keystore.jks"
|
echo '${{ secrets.KEYSTORE }}' | base64 --decode > "${{ github.workspace }}/composeApp/upload-keystore.jks"
|
||||||
|
|
||||||
- name: Configure Android signing
|
- name: Configure Android signing
|
||||||
working-directory: composeApp
|
working-directory: composeApp
|
||||||
env:
|
|
||||||
KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }}
|
|
||||||
KEYSTORE_KEY_ALIAS: ${{ secrets.KEYSTORE_KEY_ALIAS }}
|
|
||||||
KEYSTORE_KEY_PASSWORD: ${{ secrets.KEYSTORE_KEY_PASSWORD }}
|
|
||||||
run: |
|
run: |
|
||||||
cat >> local.properties <<EOF
|
cat >> local.properties <<EOF
|
||||||
release.signing.storeFile=${{ github.workspace }}/composeApp/upload-keystore.jks
|
release.signing.storeFile=${{ github.workspace }}/composeApp/upload-keystore.jks
|
||||||
release.signing.storePassword=${KEYSTORE_PASSWORD}
|
release.signing.storePassword=${{ secrets.KEYSTORE_PASSWORD }}
|
||||||
release.signing.keyAlias=${KEYSTORE_KEY_ALIAS}
|
release.signing.keyAlias=${{ secrets.KEYSTORE_KEY_ALIAS }}
|
||||||
release.signing.keyPassword=${KEYSTORE_KEY_PASSWORD}
|
release.signing.keyPassword=${{ secrets.KEYSTORE_KEY_PASSWORD }}
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
- name: Assemble Release
|
- name: Assemble Release
|
||||||
@ -180,7 +170,6 @@ jobs:
|
|||||||
build-linux:
|
build-linux:
|
||||||
name: Linux Desktop
|
name: Linux Desktop
|
||||||
needs: prepare-deps
|
needs: prepare-deps
|
||||||
timeout-minutes: 120
|
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v7
|
- uses: actions/checkout@v7
|
||||||
@ -215,13 +204,9 @@ jobs:
|
|||||||
uses: actions/cache@v6
|
uses: actions/cache@v6
|
||||||
with:
|
with:
|
||||||
path: ~/.gradle/nucleus/graalvm
|
path: ~/.gradle/nucleus/graalvm
|
||||||
key: graalvm-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('gradle/libs.versions.toml', 'composeApp/build.gradle.kts') }}
|
key: graalvm-${{ runner.os }}-${{ runner.arch }}
|
||||||
restore-keys: graalvm-${{ runner.os }}-${{ runner.arch }}-
|
|
||||||
|
|
||||||
- name: Package Linux
|
- name: Package Linux
|
||||||
env:
|
|
||||||
# Nucleus lists GraalVM CE releases via the GitHub API; unauthenticated calls hit the 60/hour limit
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
run: ./gradlew :composeApp:packageGraalvmDeb :composeApp:packageGraalvmRpm -Pnightly=${{ inputs.release_type == 'nightly' }} -PbuildNumber=${{ github.run_number }}
|
run: ./gradlew :composeApp:packageGraalvmDeb :composeApp:packageGraalvmRpm -Pnightly=${{ inputs.release_type == 'nightly' }} -PbuildNumber=${{ github.run_number }}
|
||||||
|
|
||||||
- name: Rename Linux artifacts
|
- name: Rename Linux artifacts
|
||||||
@ -252,17 +237,13 @@ jobs:
|
|||||||
build-linux-arm64:
|
build-linux-arm64:
|
||||||
name: Linux Desktop (aarch64)
|
name: Linux Desktop (aarch64)
|
||||||
needs: prepare-deps
|
needs: prepare-deps
|
||||||
timeout-minutes: 120
|
|
||||||
runs-on: ubuntu-24.04-arm
|
runs-on: ubuntu-24.04-arm
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v7
|
- uses: actions/checkout@v7
|
||||||
|
|
||||||
# The arm64 runner image ships without an Android SDK/NDK, but :composeApp configuration needs both
|
# The arm64 runner image ships without an Android SDK, but :composeApp configuration requires one
|
||||||
# (Gobley's cargo plugin resolves the NDK directory for the Android Rust targets)
|
|
||||||
- name: Set up Android SDK
|
- name: Set up Android SDK
|
||||||
uses: android-actions/setup-android@v4
|
uses: android-actions/setup-android@v4
|
||||||
with:
|
|
||||||
packages: tools platform-tools ndk;28.2.13676358
|
|
||||||
|
|
||||||
- name: Download maven local
|
- name: Download maven local
|
||||||
uses: actions/download-artifact@v8
|
uses: actions/download-artifact@v8
|
||||||
@ -294,13 +275,9 @@ jobs:
|
|||||||
uses: actions/cache@v6
|
uses: actions/cache@v6
|
||||||
with:
|
with:
|
||||||
path: ~/.gradle/nucleus/graalvm
|
path: ~/.gradle/nucleus/graalvm
|
||||||
key: graalvm-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('gradle/libs.versions.toml', 'composeApp/build.gradle.kts') }}
|
key: graalvm-${{ runner.os }}-${{ runner.arch }}
|
||||||
restore-keys: graalvm-${{ runner.os }}-${{ runner.arch }}-
|
|
||||||
|
|
||||||
- name: Package Linux
|
- name: Package Linux
|
||||||
env:
|
|
||||||
# Nucleus lists GraalVM CE releases via the GitHub API; unauthenticated calls hit the 60/hour limit
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
run: ./gradlew :composeApp:packageGraalvmDeb :composeApp:packageGraalvmRpm -Pnightly=${{ inputs.release_type == 'nightly' }} -PbuildNumber=${{ github.run_number }}
|
run: ./gradlew :composeApp:packageGraalvmDeb :composeApp:packageGraalvmRpm -Pnightly=${{ inputs.release_type == 'nightly' }} -PbuildNumber=${{ github.run_number }}
|
||||||
|
|
||||||
- name: Rename Linux artifacts
|
- name: Rename Linux artifacts
|
||||||
@ -331,7 +308,6 @@ jobs:
|
|||||||
build-windows:
|
build-windows:
|
||||||
name: Windows Desktop
|
name: Windows Desktop
|
||||||
needs: prepare-deps
|
needs: prepare-deps
|
||||||
timeout-minutes: 120
|
|
||||||
runs-on: windows-latest
|
runs-on: windows-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v7
|
- uses: actions/checkout@v7
|
||||||
@ -362,13 +338,9 @@ jobs:
|
|||||||
uses: actions/cache@v6
|
uses: actions/cache@v6
|
||||||
with:
|
with:
|
||||||
path: ~/.gradle/nucleus/graalvm
|
path: ~/.gradle/nucleus/graalvm
|
||||||
key: graalvm-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('gradle/libs.versions.toml', 'composeApp/build.gradle.kts') }}
|
key: graalvm-${{ runner.os }}-${{ runner.arch }}
|
||||||
restore-keys: graalvm-${{ runner.os }}-${{ runner.arch }}-
|
|
||||||
|
|
||||||
- name: Package EXE
|
- name: Package EXE
|
||||||
env:
|
|
||||||
# Nucleus lists GraalVM CE releases via the GitHub API; unauthenticated calls hit the 60/hour limit
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
run: ./gradlew :composeApp:packageGraalvmExe -Pnightly=${{ inputs.release_type == 'nightly' }} -PbuildNumber=${{ github.run_number }}
|
run: ./gradlew :composeApp:packageGraalvmExe -Pnightly=${{ inputs.release_type == 'nightly' }} -PbuildNumber=${{ github.run_number }}
|
||||||
|
|
||||||
- name: Rename Windows artifacts
|
- name: Rename Windows artifacts
|
||||||
@ -394,7 +366,6 @@ jobs:
|
|||||||
build-macos:
|
build-macos:
|
||||||
name: macOS Desktop
|
name: macOS Desktop
|
||||||
needs: prepare-deps
|
needs: prepare-deps
|
||||||
timeout-minutes: 120
|
|
||||||
runs-on: macos-latest
|
runs-on: macos-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v7
|
- uses: actions/checkout@v7
|
||||||
@ -424,13 +395,9 @@ jobs:
|
|||||||
uses: actions/cache@v6
|
uses: actions/cache@v6
|
||||||
with:
|
with:
|
||||||
path: ~/.gradle/nucleus/graalvm
|
path: ~/.gradle/nucleus/graalvm
|
||||||
key: graalvm-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('gradle/libs.versions.toml', 'composeApp/build.gradle.kts') }}
|
key: graalvm-${{ runner.os }}-${{ runner.arch }}
|
||||||
restore-keys: graalvm-${{ runner.os }}-${{ runner.arch }}-
|
|
||||||
|
|
||||||
- name: Package DMG
|
- name: Package DMG
|
||||||
env:
|
|
||||||
# Nucleus lists GraalVM CE releases via the GitHub API; unauthenticated calls hit the 60/hour limit
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
run: ./gradlew :composeApp:packageGraalvmDmg -Pnightly=${{ inputs.release_type == 'nightly' }} -PbuildNumber=${{ github.run_number }}
|
run: ./gradlew :composeApp:packageGraalvmDmg -Pnightly=${{ inputs.release_type == 'nightly' }} -PbuildNumber=${{ github.run_number }}
|
||||||
|
|
||||||
- name: Rename macOS artifact
|
- name: Rename macOS artifact
|
||||||
@ -460,8 +427,6 @@ jobs:
|
|||||||
- build-windows
|
- build-windows
|
||||||
- build-macos
|
- build-macos
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
permissions:
|
|
||||||
contents: write
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v7
|
- uses: actions/checkout@v7
|
||||||
|
|
||||||
@ -507,7 +472,7 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
echo "## Downloads" > release-notes.md
|
echo "## Downloads" > release-notes.md
|
||||||
echo "" >> release-notes.md
|
echo "" >> release-notes.md
|
||||||
for dir in android-apk linux-deb linux-rpm linux-deb-arm64 linux-rpm-arm64 windows-exe macos-dmg; do
|
for dir in android-apk android-aab linux-deb linux-rpm linux-appimage linux-deb-arm64 linux-rpm-arm64 windows-msi windows-exe macos-dmg; do
|
||||||
if [ -d "$dir" ]; then
|
if [ -d "$dir" ]; then
|
||||||
echo "### $dir" >> release-notes.md
|
echo "### $dir" >> release-notes.md
|
||||||
for f in "$dir"/*; do
|
for f in "$dir"/*; do
|
||||||
@ -517,29 +482,22 @@ jobs:
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
# The rolling nightly tag already exists, and the release action never moves an existing tag
|
|
||||||
- name: Move nightly tag to this commit
|
|
||||||
if: ${{ inputs.release_type == 'nightly' }}
|
|
||||||
run: |
|
|
||||||
git tag -f nightly "$GITHUB_SHA"
|
|
||||||
git push -f origin refs/tags/nightly
|
|
||||||
|
|
||||||
- name: Create Release
|
- name: Create Release
|
||||||
uses: softprops/action-gh-release@v3
|
uses: softprops/action-gh-release@v3
|
||||||
with:
|
with:
|
||||||
tag_name: ${{ steps.vars.outputs.tag }}
|
tag_name: ${{ steps.vars.outputs.tag }}
|
||||||
# A new tag (stable) would otherwise point at the default branch instead of the built commit
|
|
||||||
target_commitish: ${{ github.sha }}
|
|
||||||
fail_on_unmatched_files: true
|
|
||||||
name: ${{ steps.vars.outputs.release_name }}
|
name: ${{ steps.vars.outputs.release_name }}
|
||||||
body_path: release-notes.md
|
body_path: release-notes.md
|
||||||
draft: ${{ steps.vars.outputs.is_draft }}
|
draft: ${{ steps.vars.outputs.is_draft }}
|
||||||
prerelease: ${{ steps.vars.outputs.is_prerelease }}
|
prerelease: ${{ steps.vars.outputs.is_prerelease }}
|
||||||
files: |
|
files: |
|
||||||
android-apk/*.apk
|
android-apk/*.apk
|
||||||
|
android-aab/*.aab
|
||||||
linux-deb/*.deb
|
linux-deb/*.deb
|
||||||
linux-rpm/*.rpm
|
linux-rpm/*.rpm
|
||||||
|
linux-appimage/*.AppImage
|
||||||
linux-deb-arm64/*.deb
|
linux-deb-arm64/*.deb
|
||||||
linux-rpm-arm64/*.rpm
|
linux-rpm-arm64/*.rpm
|
||||||
|
windows-msi/*.msi
|
||||||
windows-exe/*.exe
|
windows-exe/*.exe
|
||||||
macos-dmg/*.dmg
|
macos-dmg/*.dmg
|
||||||
|
|||||||
@ -543,20 +543,3 @@ cargo {
|
|||||||
embedRustLibrary = (rustTarget == GobleyHost.current.rustTarget)
|
embedRustLibrary = (rustTarget == GobleyHost.current.rustTarget)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Google only ships x86_64 Linux NDK toolchains, so on a Linux arm64 host the Android Rust targets can never
|
|
||||||
// link (clang: "Exec format error"). Desktop packaging doesn't need them; Android is built on x86_64 runners.
|
|
||||||
run {
|
|
||||||
val isLinuxArm64Host = System.getProperty("os.name").lowercase().contains("linux") &&
|
|
||||||
System.getProperty("os.arch").lowercase() in setOf("aarch64", "arm64")
|
|
||||||
if (isLinuxArm64Host) {
|
|
||||||
// Gobley generates the UniFFI bindings from the first Android build's library by default; use the host's.
|
|
||||||
uniffi {
|
|
||||||
generateFromLibrary {
|
|
||||||
build = GobleyHost.current.rustTarget
|
|
||||||
}
|
|
||||||
}
|
|
||||||
tasks.matching { it.name.startsWith("cargoBuildAndroid") || it.name.startsWith("rustUpTargetAddAndroid") }
|
|
||||||
.configureEach { enabled = false }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user