spotube/.github/workflows/build.yml
2026-06-30 17:00:13 +06:00

308 lines
8.4 KiB
YAML

name: Build All Platforms
on:
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
env:
COMPOSE_WEBVIEW_REPO: kdroidFilter/ComposeNativeWebview
COMPOSE_WEBVIEW_COMMIT: 5aeb268a2c37ff4dbfb76924573344a7c4f763ce
GRADLE_PLUGIN_REPO: team-spotube/gradle-plugin
jobs:
prepare-deps:
name: Prepare Dependencies
runs-on: macos-latest
steps:
- name: Checkout ComposeNativeWebview
uses: actions/checkout@v4
with:
repository: ${{ env.COMPOSE_WEBVIEW_REPO }}
ref: ${{ env.COMPOSE_WEBVIEW_COMMIT }}
path: compose-webview
- name: Checkout gradle-plugin
uses: actions/checkout@v4
with:
repository: ${{ env.GRADLE_PLUGIN_REPO }}
token: ${{ secrets.GH_PAT }}
path: gradle-plugin
- name: Set up JDK 21
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 21
- name: Set up Android SDK
uses: android-actions/setup-android@v3
- name: Set up Rust
uses: dtolnay/rust-toolchain@stable
- name: Set up Gradle
uses: gradle/actions/setup-gradle@v4
- name: Publish compose-webview to mavenLocal
working-directory: compose-webview
run: |
chmod +x gradlew
./gradlew publishToMavenLocal
- name: Publish gradle-plugin to mavenLocal
working-directory: gradle-plugin
run: |
chmod +x gradlew
./gradlew publishToMavenLocal
- name: Upload compose-webview artifacts
uses: actions/upload-artifact@v4
with:
name: maven-local-composewebview
path: ~/.m2/repository/io/github/kdroidfilter/
- name: Upload gradle-plugin artifacts
uses: actions/upload-artifact@v4
with:
name: maven-local-gradle-plugin
path: ~/.m2/repository/dev/krtirtho/spotube/
build-android:
name: Android
needs: prepare-deps
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: Assemble Release
run: ./gradlew :composeApp:assembleRelease
- name: Upload APK
uses: actions/upload-artifact@v4
with:
name: android-apk
path: composeApp/build/outputs/apk/release/*.apk
- name: Upload AAB
uses: actions/upload-artifact@v4
with:
name: android-aab
path: composeApp/build/outputs/bundle/release/*.aab
build-linux:
name: Linux Desktop
needs: prepare-deps
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: Install packaging tools
run: |
sudo apt-get update
sudo apt-get install -y rpm fuse
- 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: Package DEB
run: ./gradlew :composeApp:packageReleaseDeb
- name: Package RPM
run: ./gradlew :composeApp:packageReleaseRpm
- name: Package AppImage
run: ./gradlew :composeApp:packageReleaseAppImage
- name: Upload DEB
uses: actions/upload-artifact@v4
with:
name: linux-deb
path: composeApp/build/compose/binaries/main-release/**/*.deb
- name: Upload RPM
uses: actions/upload-artifact@v4
with:
name: linux-rpm
path: composeApp/build/compose/binaries/main-release/**/*.rpm
- name: Upload AppImage
uses: actions/upload-artifact@v4
with:
name: linux-appimage
path: composeApp/build/compose/binaries/main-release/**/*.AppImage
build-windows:
name: Windows Desktop
needs: prepare-deps
runs-on: windows-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: Package MSI
run: ./gradlew :composeApp:packageReleaseMsi
- name: Package EXE
run: ./gradlew :composeApp:packageReleaseExe
- name: Upload MSI
uses: actions/upload-artifact@v4
with:
name: windows-msi
path: composeApp/build/compose/binaries/main-release/**/*.msi
- name: Upload EXE
uses: actions/upload-artifact@v4
with:
name: windows-exe
path: composeApp/build/compose/binaries/main-release/**/*.exe
build-macos:
name: macOS Desktop
needs: prepare-deps
runs-on: macos-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: Package DMG
run: ./gradlew :composeApp:packageReleaseDmg
- name: Upload DMG
uses: actions/upload-artifact@v4
with:
name: macos-dmg
path: composeApp/build/compose/binaries/main-release/**/*.dmg
build-ios:
name: iOS
needs: prepare-deps
runs-on: macos-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
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
- name: Upload .app
uses: actions/upload-artifact@v4
with:
name: ios-app
path: build/ios/*.app