chore: CI-Add executable permission to gradlew #8
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Build | |
| on: | |
| push: | |
| workflow_call: | |
| jobs: | |
| test: | |
| runs-on: ubuntu-latest | |
| name: Run tests | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| submodules: 'recursive' | |
| - name: Validate Gradle Wrapper | |
| uses: gradle/actions/wrapper-validation@v5 | |
| - name: Setup JDK | |
| uses: actions/setup-java@v5 | |
| with: | |
| distribution: 'zulu' | |
| java-version: 21 | |
| - name: Setup Gradle | |
| uses: gradle/actions/setup-gradle@v5 | |
| - name: Run tests | |
| run: ./gradlew jvmTest | |
| build-desktop: | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - name: macos-aarch64 | |
| runner: macos-latest | |
| task: ./gradlew packageReleaseDmg | |
| - name: macos-x86_64 | |
| runner: macos-15-intel | |
| task: ./gradlew packageReleaseDmg | |
| - name: linux-x86_64 | |
| runner: ubuntu-latest | |
| task: ./gradlew createReleaseDistributable packageReleaseDeb packageReleaseRpm | |
| - name: linux-aarch64 | |
| runner: ubuntu-24.04-arm | |
| task: ./gradlew createReleaseDistributable packageReleaseDeb packageReleaseRpm | |
| - name: windows-x86_64 | |
| runner: windows-latest | |
| task: ./gradlew.bat createReleaseDistributable packageReleaseMsi packageReleaseExe | |
| - name: windows-arm64 | |
| runner: windows-11-arm | |
| task: ./gradlew.bat createReleaseDistributable packageReleaseMsi packageReleaseExe | |
| runs-on: ${{ matrix.runner }} | |
| name: Build ${{ matrix.name }} | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| submodules: 'recursive' | |
| - name: Validate Gradle Wrapper | |
| uses: gradle/actions/wrapper-validation@v5 | |
| - name: Setup JDK | |
| uses: actions/setup-java@v5 | |
| with: | |
| distribution: ${{ startsWith(matrix.name, 'windows') && 'jetbrains' || 'zulu' }} | |
| java-version: 21 | |
| - name: Setup Gradle | |
| uses: gradle/actions/setup-gradle@v5 | |
| - name: Build | |
| run: ${{ matrix.task }} | |
| - name: Upload artifact | |
| if: success() | |
| uses: actions/upload-artifact@v5 | |
| with: | |
| name: ${{ matrix.name }} | |
| path: composeApp/build/compose/binaries/main-release | |
| build-mobile: | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| # - name: ios | |
| # task: ./gradlew buildReleaseIpa | |
| # path: composeApp/build/archives/release/*.ipa | |
| - name: android | |
| task: ./gradlew assembleRelease | |
| path: composeApp/build/outputs/apk/release/*.apk | |
| runs-on: macos-latest | |
| name: Build ${{ matrix.name }} | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| submodules: 'recursive' | |
| - name: Validate Gradle Wrapper | |
| uses: gradle/actions/wrapper-validation@v5 | |
| - name: Setup JDK | |
| uses: actions/setup-java@v5 | |
| with: | |
| distribution: 'zulu' | |
| java-version: 21 | |
| - name: Setup Gradle | |
| uses: gradle/actions/setup-gradle@v5 | |
| - name: Setup Signing | |
| id: sign | |
| if: ${{ matrix.name == 'android' }} | |
| run: | | |
| base64 --decode <<< "${{ secrets.RELEASE_KEY }}" > composeApp/release-key.jks | |
| grep -q '[^[:space:]]' composeApp/release-key.jks && echo release_key_exists=true >> $GITHUB_OUTPUT || echo release_key_exists=false >> $GITHUB_OUTPUT | |
| - name: Build | |
| env: | |
| RELEASE_KEY_EXISTS: ${{ steps.sign.outputs.release_key_exists }} | |
| RELEASE_KEY_STORE_PASSWORD: ${{ secrets.RELEASE_KEY_STORE_PASSWORD }} | |
| RELEASE_KEY_PASSWORD: ${{ secrets.RELEASE_KEY_PASSWORD }} | |
| run: ${{ matrix.task }} | |
| - name: Upload artifact | |
| if: success() | |
| uses: actions/upload-artifact@v5 | |
| with: | |
| name: ${{ matrix.name }} | |
| path: ${{ matrix.path }} | |
| package: | |
| needs: build-desktop | |
| runs-on: ubuntu-latest | |
| name: Package artifacts | |
| steps: | |
| # 下载所有需要的 artifacts | |
| - name: Download macOS aarch64 artifact | |
| uses: actions/download-artifact@v5 | |
| with: | |
| name: macos-aarch64 | |
| path: macos-aarch64 | |
| - name: Download macOS x86_64 artifact | |
| uses: actions/download-artifact@v5 | |
| with: | |
| name: macos-x86_64 | |
| path: macos-x86_64 | |
| - name: Download Linux x86_64 artifact | |
| uses: actions/download-artifact@v5 | |
| with: | |
| name: linux-x86_64 | |
| path: linux-x86_64 | |
| - name: Download Linux aarch64 artifact | |
| uses: actions/download-artifact@v5 | |
| with: | |
| name: linux-aarch64 | |
| path: linux-aarch64 | |
| - name: Download Windows x86_64 artifact | |
| uses: actions/download-artifact@v5 | |
| with: | |
| name: windows-x86_64 | |
| path: windows-x86_64 | |
| - name: Download Windows arm64 artifact | |
| uses: actions/download-artifact@v5 | |
| with: | |
| name: windows-arm64 | |
| path: windows-arm64 | |
| # 重命名文件 | |
| - name: Rename artifacts | |
| run: | | |
| # Get base filename from macOS DMG | |
| DMG_FILE=$(find macos-aarch64/dmg -name "*.dmg" -type f | head -n 1) | |
| BASE_NAME=$(basename "$DMG_FILE" .dmg) | |
| echo "Base filename: $BASE_NAME" | |
| # macOS | |
| for arch in aarch64 x86_64; do | |
| if [ -d "macos-${arch}/dmg" ]; then | |
| for file in macos-${arch}/dmg/*.dmg; do | |
| if [ -f "$file" ]; then | |
| filename=$(basename "$file" .dmg) | |
| mv "$file" "macos-${arch}/dmg/${filename}-macos-${arch}.dmg" | |
| fi | |
| done | |
| fi | |
| done | |
| # Windows | |
| for arch in x86_64 arm64; do | |
| if [ -d "windows-${arch}/msi" ]; then | |
| for file in windows-${arch}/msi/*.msi; do | |
| if [ -f "$file" ]; then | |
| filename=$(basename "$file" .msi) | |
| mv "$file" "windows-${arch}/msi/${filename}-windows-${arch}.msi" | |
| fi | |
| done | |
| fi | |
| if [ -d "windows-${arch}/exe" ]; then | |
| for file in windows-${arch}/exe/*.exe; do | |
| if [ -f "$file" ]; then | |
| filename=$(basename "$file" .exe) | |
| mv "$file" "windows-${arch}/exe/${filename}-windows-${arch}.exe" | |
| fi | |
| done | |
| fi | |
| # Package portable as zip | |
| if [ -d "windows-${arch}/app/KMP-MineStableDiffusion" ]; then | |
| cd windows-${arch}/app | |
| zip -r "../../${BASE_NAME}-windows-${arch}.zip" KMP-MineStableDiffusion | |
| cd ../.. | |
| fi | |
| done | |
| # 上传新的 artifacts | |
| - name: Upload macOS aarch64 DMG | |
| uses: actions/upload-artifact@v5 | |
| with: | |
| name: macos-aarch64-dmg | |
| path: macos-aarch64/dmg/*.dmg | |
| - name: Upload macOS x86_64 DMG | |
| uses: actions/upload-artifact@v5 | |
| with: | |
| name: macos-x86_64-dmg | |
| path: macos-x86_64/dmg/*.dmg | |
| - name: Upload Linux x86_64 DEB | |
| uses: actions/upload-artifact@v5 | |
| with: | |
| name: linux-x86_64-deb | |
| path: linux-x86_64/deb/*.deb | |
| - name: Upload Linux x86_64 RPM | |
| uses: actions/upload-artifact@v5 | |
| with: | |
| name: linux-x86_64-rpm | |
| path: linux-x86_64/rpm/*.rpm | |
| - name: Upload Linux aarch64 DEB | |
| uses: actions/upload-artifact@v5 | |
| with: | |
| name: linux-aarch64-deb | |
| path: linux-aarch64/deb/*.deb | |
| - name: Upload Linux aarch64 RPM | |
| uses: actions/upload-artifact@v5 | |
| with: | |
| name: linux-aarch64-rpm | |
| path: linux-aarch64/rpm/*.rpm | |
| - name: Upload Windows x86_64 MSI | |
| uses: actions/upload-artifact@v5 | |
| with: | |
| name: windows-x86_64-msi | |
| path: windows-x86_64/msi/*.msi | |
| - name: Upload Windows x86_64 EXE | |
| uses: actions/upload-artifact@v5 | |
| with: | |
| name: windows-x86_64-exe | |
| path: windows-x86_64/exe/*.exe | |
| - name: Upload Windows x86_64 Portable | |
| uses: actions/upload-artifact@v5 | |
| with: | |
| name: windows-x86_64-portable | |
| path: '*-windows-x86_64.zip' | |
| - name: Upload Windows arm64 MSI | |
| uses: actions/upload-artifact@v5 | |
| with: | |
| name: windows-arm64-msi | |
| path: windows-arm64/msi/*.msi | |
| - name: Upload Windows arm64 EXE | |
| uses: actions/upload-artifact@v5 | |
| with: | |
| name: windows-arm64-exe | |
| path: windows-arm64/exe/*.exe | |
| - name: Upload Windows arm64 Portable | |
| uses: actions/upload-artifact@v5 | |
| with: | |
| name: windows-arm64-portable | |
| path: '*-windows-arm64.zip' | |
| package-appimage: | |
| needs: build-desktop | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - arch: x86_64 | |
| runner: ubuntu-latest | |
| appimagetool: appimagetool-x86_64.AppImage | |
| - arch: aarch64 | |
| runner: ubuntu-24.04-arm | |
| appimagetool: appimagetool-aarch64.AppImage | |
| runs-on: ${{ matrix.runner }} | |
| name: Build Linux ${{ matrix.arch }} AppImage | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| submodules: 'recursive' | |
| - name: Download macOS aarch64 artifact | |
| uses: actions/download-artifact@v5 | |
| with: | |
| name: macos-aarch64 | |
| path: macos-aarch64 | |
| - name: Download Linux ${{ matrix.arch }} artifact | |
| uses: actions/download-artifact@v5 | |
| with: | |
| name: linux-${{ matrix.arch }} | |
| path: linux-${{ matrix.arch }} | |
| - name: Build AppImage | |
| run: | | |
| # Get base filename from macOS DMG | |
| DMG_FILE=$(find macos-aarch64/dmg -name "*.dmg" -type f | head -n 1) | |
| BASE_NAME=$(basename "$DMG_FILE" .dmg) | |
| echo "Base filename: $BASE_NAME" | |
| # Download appimagetool | |
| wget https://github.com/AppImage/appimagetool/releases/download/continuous/${{ matrix.appimagetool }} | |
| chmod +x ${{ matrix.appimagetool }} | |
| # Prepare AppDir | |
| mkdir -p AppDir/usr | |
| cp -r linux-${{ matrix.arch }}/app/KMP-MineStableDiffusion/* AppDir/usr | |
| # Create desktop file | |
| cat > AppDir/KMP-MineStableDiffusion.desktop << 'EOF' | |
| [Desktop Entry] | |
| Name=KMP-MineStableDiffusion | |
| Exec=KMP-MineStableDiffusion | |
| Icon=KMP-MineStableDiffusion | |
| Terminal=false | |
| Type=Application | |
| Categories=Utility; | |
| EOF | |
| # Create AppRun script | |
| cat > AppDir/AppRun << 'EOF' | |
| #!/bin/bash | |
| SELF=$(readlink -f "$0") | |
| HERE=${SELF%/*} | |
| export PATH="${HERE}/usr/bin/:${PATH}" | |
| export LD_LIBRARY_PATH="${HERE}/usr/lib/:${LD_LIBRARY_PATH}" | |
| exec "${HERE}/usr/bin/KMP-MineStableDiffusion" "$@" | |
| EOF | |
| # Copy icon if exists | |
| if [ -f "docs/AppIcon.png" ]; then | |
| cp docs/AppIcon.png AppDir/KMP-MineStableDiffusion.png | |
| fi | |
| # Fix permissions | |
| chmod a+x AppDir/AppRun | |
| chmod a+x AppDir/usr/bin/KMP-MineStableDiffusion | |
| # Build AppImage | |
| ARCH=${{ matrix.arch }} ./${{ matrix.appimagetool }} AppDir | |
| # Rename AppImage with base name from DMG | |
| mv KMP-MineStableDiffusion-${{ matrix.arch }}.AppImage ${BASE_NAME}-linux-${{ matrix.arch }}.AppImage | |
| chmod a+x ${BASE_NAME}-linux-${{ matrix.arch }}.AppImage | |
| - name: Upload AppImage artifact | |
| uses: actions/upload-artifact@v5 | |
| with: | |
| name: linux-${{ matrix.arch }}-appimage | |
| path: '*-linux-${{ matrix.arch }}.AppImage' | |
| cleanup: | |
| needs: [ package-appimage, package ] | |
| runs-on: ubuntu-latest | |
| name: Cleanup original artifacts | |
| steps: | |
| - name: Delete original artifacts | |
| uses: geekyeggo/delete-artifact@v5 | |
| with: | |
| name: | | |
| macos-aarch64 | |
| macos-x86_64 | |
| linux-x86_64 | |
| linux-aarch64 | |
| windows-x86_64 | |
| windows-arm64 |