mirror of
https://github.com/KRTirtho/spotube.git
synced 2026-08-05 19:59:51 +00:00
Compare commits
6 Commits
f012defd79
...
b26928a8a0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b26928a8a0 | ||
|
|
4d1480dd4b | ||
|
|
71d6a04109 | ||
|
|
812d2b1eae | ||
|
|
a213e39907 | ||
|
|
e520a020c7 |
@ -1,7 +1,21 @@
|
||||
name: Build All Platforms
|
||||
name: Release
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
release_type:
|
||||
description: 'Release type'
|
||||
required: true
|
||||
type: choice
|
||||
default: 'stable'
|
||||
options:
|
||||
- stable
|
||||
- nightly
|
||||
dry_run:
|
||||
description: 'Dry run (build & upload artifacts only, skip creating release)'
|
||||
required: false
|
||||
type: boolean
|
||||
default: false
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
@ -22,13 +36,14 @@ jobs:
|
||||
with:
|
||||
repository: ${{ env.COMPOSE_WEBVIEW_REPO }}
|
||||
ref: ${{ env.COMPOSE_WEBVIEW_COMMIT }}
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
path: compose-webview
|
||||
|
||||
- name: Checkout gradle-plugin
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
repository: ${{ env.GRADLE_PLUGIN_REPO }}
|
||||
token: ${{ secrets.GH_PAT }}
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
path: gradle-plugin
|
||||
|
||||
- name: Set up JDK 21
|
||||
@ -68,12 +83,14 @@ jobs:
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: maven-local-gradle-plugin
|
||||
path: ~/.m2/repository/dev/krtirtho/spotube/
|
||||
path: ~/.m2/repository/dev/krtirtho/
|
||||
|
||||
build-android:
|
||||
name: Android
|
||||
needs: prepare-deps
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
GRADLE_FLAGS: ${{ inputs.release_type == 'nightly' && '-PversionName=nightly' || '' }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
@ -87,7 +104,7 @@ jobs:
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: maven-local-gradle-plugin
|
||||
path: ~/.m2/repository/dev/krtirtho/spotube/
|
||||
path: ~/.m2/repository/dev/krtirtho/
|
||||
|
||||
- name: Set up JDK 21
|
||||
uses: actions/setup-java@v4
|
||||
@ -97,8 +114,26 @@ jobs:
|
||||
|
||||
- name: Set up Gradle
|
||||
uses: gradle/actions/setup-gradle@v4
|
||||
|
||||
- name: Make gradlew executable
|
||||
run: chmod +x gradlew
|
||||
|
||||
- name: Decode keystore
|
||||
run: |
|
||||
echo '${{ secrets.KEYSTORE }}' | base64 --decode > "${{ github.workspace }}/composeApp/upload-keystore.jks"
|
||||
|
||||
- name: Configure Android signing
|
||||
working-directory: composeApp
|
||||
run: |
|
||||
cat >> local.properties <<EOF
|
||||
release.signing.storeFile=${{ github.workspace }}/composeApp/upload-keystore.jks
|
||||
release.signing.storePassword=${{ secrets.KEYSTORE_PASSWORD }}
|
||||
release.signing.keyAlias=${{ secrets.KEYSTORE_KEY_ALIAS }}
|
||||
release.signing.keyPassword=${{ secrets.KEYSTORE_KEY_PASSWORD }}
|
||||
EOF
|
||||
|
||||
- name: Assemble Release
|
||||
run: ./gradlew :composeApp:assembleRelease
|
||||
run: ./gradlew :composeApp:assembleRelease ${{ env.GRADLE_FLAGS }}
|
||||
|
||||
- name: Upload APK
|
||||
uses: actions/upload-artifact@v4
|
||||
@ -116,6 +151,8 @@ jobs:
|
||||
name: Linux Desktop
|
||||
needs: prepare-deps
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
GRADLE_FLAGS: ${{ inputs.release_type == 'nightly' && '-PversionName=nightly' || '' }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
@ -129,7 +166,7 @@ jobs:
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: maven-local-gradle-plugin
|
||||
path: ~/.m2/repository/dev/krtirtho/spotube/
|
||||
path: ~/.m2/repository/dev/krtirtho/
|
||||
|
||||
- name: Install packaging tools
|
||||
run: |
|
||||
@ -145,14 +182,17 @@ jobs:
|
||||
- name: Set up Gradle
|
||||
uses: gradle/actions/setup-gradle@v4
|
||||
|
||||
- name: Make gradlew executable
|
||||
run: chmod +x gradlew
|
||||
|
||||
- name: Package DEB
|
||||
run: ./gradlew :composeApp:packageReleaseDeb
|
||||
run: ./gradlew :composeApp:packageReleaseDeb ${{ env.GRADLE_FLAGS }}
|
||||
|
||||
- name: Package RPM
|
||||
run: ./gradlew :composeApp:packageReleaseRpm
|
||||
run: ./gradlew :composeApp:packageReleaseRpm ${{ env.GRADLE_FLAGS }}
|
||||
|
||||
- name: Package AppImage
|
||||
run: ./gradlew :composeApp:packageReleaseAppImage
|
||||
run: ./gradlew :composeApp:packageReleaseAppImage ${{ env.GRADLE_FLAGS }}
|
||||
|
||||
- name: Upload DEB
|
||||
uses: actions/upload-artifact@v4
|
||||
@ -176,6 +216,8 @@ jobs:
|
||||
name: Windows Desktop
|
||||
needs: prepare-deps
|
||||
runs-on: windows-latest
|
||||
env:
|
||||
GRADLE_FLAGS: ${{ inputs.release_type == 'nightly' && '-PversionName=nightly' || '' }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
@ -189,7 +231,7 @@ jobs:
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: maven-local-gradle-plugin
|
||||
path: ~/.m2/repository/dev/krtirtho/spotube/
|
||||
path: ~/.m2/repository/dev/krtirtho/
|
||||
|
||||
- name: Set up JDK 21
|
||||
uses: actions/setup-java@v4
|
||||
@ -201,10 +243,10 @@ jobs:
|
||||
uses: gradle/actions/setup-gradle@v4
|
||||
|
||||
- name: Package MSI
|
||||
run: ./gradlew :composeApp:packageReleaseMsi
|
||||
run: ./gradlew :composeApp:packageReleaseMsi ${{ env.GRADLE_FLAGS }}
|
||||
|
||||
- name: Package EXE
|
||||
run: ./gradlew :composeApp:packageReleaseExe
|
||||
run: ./gradlew :composeApp:packageReleaseExe ${{ env.GRADLE_FLAGS }}
|
||||
|
||||
- name: Upload MSI
|
||||
uses: actions/upload-artifact@v4
|
||||
@ -222,6 +264,8 @@ jobs:
|
||||
name: macOS Desktop
|
||||
needs: prepare-deps
|
||||
runs-on: macos-latest
|
||||
env:
|
||||
GRADLE_FLAGS: ${{ inputs.release_type == 'nightly' && '-PversionName=nightly' || '' }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
@ -235,7 +279,7 @@ jobs:
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: maven-local-gradle-plugin
|
||||
path: ~/.m2/repository/dev/krtirtho/spotube/
|
||||
path: ~/.m2/repository/dev/krtirtho/
|
||||
|
||||
- name: Set up JDK 21
|
||||
uses: actions/setup-java@v4
|
||||
@ -246,8 +290,11 @@ jobs:
|
||||
- name: Set up Gradle
|
||||
uses: gradle/actions/setup-gradle@v4
|
||||
|
||||
- name: Make gradlew executable
|
||||
run: chmod +x gradlew
|
||||
|
||||
- name: Package DMG
|
||||
run: ./gradlew :composeApp:packageReleaseDmg
|
||||
run: ./gradlew :composeApp:packageReleaseDmg ${{ env.GRADLE_FLAGS }}
|
||||
|
||||
- name: Upload DMG
|
||||
uses: actions/upload-artifact@v4
|
||||
@ -255,53 +302,67 @@ jobs:
|
||||
name: macos-dmg
|
||||
path: composeApp/build/compose/binaries/main-release/**/*.dmg
|
||||
|
||||
build-ios:
|
||||
name: iOS
|
||||
needs: prepare-deps
|
||||
runs-on: macos-latest
|
||||
create-release:
|
||||
name: Create GitHub Release
|
||||
if: ${{ !inputs.dry_run }}
|
||||
needs:
|
||||
- build-android
|
||||
- build-linux
|
||||
- build-windows
|
||||
- build-macos
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Download compose-webview artifacts
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: maven-local-composewebview
|
||||
path: ~/.m2/repository/io/github/kdroidfilter/
|
||||
|
||||
- name: Download gradle-plugin artifacts
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: maven-local-gradle-plugin
|
||||
path: ~/.m2/repository/dev/krtirtho/spotube/
|
||||
|
||||
- name: Set up JDK 21
|
||||
uses: actions/setup-java@v4
|
||||
with:
|
||||
distribution: temurin
|
||||
java-version: 21
|
||||
|
||||
- name: Set up Gradle
|
||||
uses: gradle/actions/setup-gradle@v4
|
||||
|
||||
- name: Build Kotlin framework
|
||||
run: ./gradlew :composeApp:linkReleaseFrameworkIosArm64
|
||||
|
||||
- name: Build iOS app
|
||||
- name: Set release variables
|
||||
id: vars
|
||||
run: |
|
||||
xcodebuild \
|
||||
-project iosApp/iosApp.xcodeproj \
|
||||
-scheme iosApp \
|
||||
-sdk iphoneos \
|
||||
-configuration Release \
|
||||
-destination 'generic/platform=iOS' \
|
||||
CODE_SIGN_IDENTITY="" \
|
||||
CODE_SIGNING_REQUIRED=NO \
|
||||
CODE_SIGNING_ALLOWED=NO \
|
||||
CONFIGURATION_BUILD_DIR="${{ github.workspace }}/build/ios" \
|
||||
build
|
||||
if [ "${{ inputs.release_type }}" = "stable" ]; then
|
||||
VERSION=$(grep 'versionName' composeApp/build.gradle.kts | head -1 | sed 's/.*"\(.*\)".*/\1/')
|
||||
TAG="v${VERSION}"
|
||||
echo "is_prerelease=false" >> "$GITHUB_OUTPUT"
|
||||
echo "is_draft=true" >> "$GITHUB_OUTPUT"
|
||||
echo "release_name=Spotube ${TAG}" >> "$GITHUB_OUTPUT"
|
||||
else
|
||||
TAG="nightly"
|
||||
VERSION="$(date +%Y-%m-%d)"
|
||||
echo "is_prerelease=true" >> "$GITHUB_OUTPUT"
|
||||
echo "is_draft=false" >> "$GITHUB_OUTPUT"
|
||||
echo "release_name=Nightly ${VERSION}" >> "$GITHUB_OUTPUT"
|
||||
fi
|
||||
echo "tag=${TAG}" >> "$GITHUB_OUTPUT"
|
||||
|
||||
- name: Upload .app
|
||||
uses: actions/upload-artifact@v4
|
||||
- name: Download all artifacts
|
||||
uses: actions/download-artifact@v4
|
||||
|
||||
- name: Generate release notes
|
||||
run: |
|
||||
echo "## Downloads" > release-notes.md
|
||||
echo "" >> release-notes.md
|
||||
for dir in android-apk android-aab linux-deb linux-rpm linux-appimage windows-msi windows-exe macos-dmg; do
|
||||
if [ -d "$dir" ]; then
|
||||
echo "### $dir" >> release-notes.md
|
||||
for f in "$dir"/*; do
|
||||
echo "- \`$(basename "$f")\`" >> release-notes.md
|
||||
done
|
||||
echo "" >> release-notes.md
|
||||
fi
|
||||
done
|
||||
|
||||
- name: Create Release
|
||||
uses: softprops/action-gh-release@v2
|
||||
with:
|
||||
name: ios-app
|
||||
path: build/ios/*.app
|
||||
tag_name: ${{ steps.vars.outputs.tag }}
|
||||
name: ${{ steps.vars.outputs.release_name }}
|
||||
body_path: release-notes.md
|
||||
draft: ${{ steps.vars.outputs.is_draft }}
|
||||
prerelease: ${{ steps.vars.outputs.is_prerelease }}
|
||||
files: |
|
||||
android-apk/*.apk
|
||||
android-aab/*.aab
|
||||
linux-deb/*.deb
|
||||
linux-rpm/*.rpm
|
||||
linux-appimage/*.AppImage
|
||||
windows-msi/*.msi
|
||||
windows-exe/*.exe
|
||||
macos-dmg/*.dmg
|
||||
11
AGENTS.md
11
AGENTS.md
@ -41,3 +41,14 @@
|
||||
|
||||
## Current testing reality
|
||||
- No committed `*Test*.kt` files; test tasks may run zero tests unless new tests are added.
|
||||
|
||||
## Release workflow (`.github/workflows/release.yml`)
|
||||
- Triggered by `workflow_dispatch` with a `release_type` choice input (`stable` | `nightly`).
|
||||
- `prepare-deps` job checks out & publishes to `mavenLocal`:
|
||||
- `kdroidFilter/ComposeNativeWebview` (compose-webview)
|
||||
- `team-spotube/gradle-plugin` (spotubeGradle + vlcjBundler plugins)
|
||||
- Build jobs per platform (Android, Linux, Windows, macOS), all `needs: prepare-deps`.
|
||||
- **Stable**: reads `versionName` from `composeApp/build.gradle.kts`, tag = `v{version}`, draft release.
|
||||
- **Nightly**: builds with `-PversionName=nightly`, tag = `nightly` (updates existing), prerelease.
|
||||
- **Android signing**: decodes `secrets.KEYSTORE` (base64) → `composeApp/upload-keystore.jks`, writes signing config into `local.properties` from secrets.
|
||||
- `create-release` job (depends on all builds) uses `softprops/action-gh-release@v2` to create the GitHub release with all artifacts attached.
|
||||
@ -228,7 +228,7 @@ android {
|
||||
minSdk = libs.versions.android.minSdk.get().toInt()
|
||||
targetSdk = libs.versions.android.targetSdk.get().toInt()
|
||||
versionCode = 1
|
||||
versionName = "1.0"
|
||||
versionName = project.findProperty("versionName") as String? ?: "1.0"
|
||||
}
|
||||
packaging {
|
||||
resources {
|
||||
@ -289,7 +289,7 @@ compose.desktop {
|
||||
|
||||
nativeDistributions {
|
||||
packageName = "dev.krtirtho.spotube"
|
||||
packageVersion = "6.0.0"
|
||||
packageVersion = project.findProperty("versionName") as String? ?: "6.0.0"
|
||||
licenseFile = project.file("../LICENSE")
|
||||
|
||||
targetFormats(
|
||||
|
||||
Loading…
Reference in New Issue
Block a user