Skip to content

chore: CI-Add executable permission to gradlew #8

chore: CI-Add executable permission to gradlew

chore: CI-Add executable permission to gradlew #8

Workflow file for this run

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