Skip to content

Fix action

Fix action #92

Workflow file for this run

name: Build and Release
on:
push:
tags:
- 'v*'
permissions:
contents: write
jobs:
apk:
name: Generate APK
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup JDK
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: "17"
- name: Set execution flag for gradlew
run: chmod +x gradlew
- name: Setup Android SDK
uses: android-actions/setup-android@v3
- name: Install Android Build Tools
run: sdkmanager "build-tools;29.0.3"
- name: Run common unit tests
run: bash ./gradlew :common:cleanTestDebugUnitTest :common:testDebugUnitTest --stacktrace
- name: Build APK
run: bash ./gradlew assembleRelease --stacktrace
- name: Sign APK
uses: r0adkll/sign-android-release@v1
with:
releaseDirectory: android/build/outputs/apk/release
signingKeyBase64: ${{ secrets.KEYSTORE_B64 }}
alias: ${{ secrets.KEY_ALIAS }}
keyStorePassword: ${{ secrets.KEYSTORE_PASSWORD }}
keyPassword: ${{ secrets.KEYSTORE_PASSWORD }}
- name: Upload APK Artifact
uses: actions/upload-artifact@v4
with:
name: signed-apk
path: android/build/outputs/apk/release/android-release-unsigned-signed.apk
- name: Build cli JAR
run: bash ./gradlew :cli:createJar --stacktrace
- name: Upload cli JAR Artifact
uses: actions/upload-artifact@v4
with:
name: cli-jar
path: cli/build/libs/linuxcommandlibrary.jar
dmg:
name: Generate DMG
runs-on: macos-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup JDK
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: "17"
- name: Set execution flag for gradlew
run: chmod +x gradlew
- name: Build DMG
run: bash ./gradlew :desktopApp:packageDmg --stacktrace
- name: Upload DMG Artifact
uses: actions/upload-artifact@v4
with:
name: dmg-package
path: desktopApp/build/compose/binaries/main/dmg/*.dmg
msi:
name: Generate MSI
runs-on: windows-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup JDK
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: "17"
- name: Build MSI
run: ./gradlew :desktopApp:packageMsi --stacktrace
- name: Upload MSI Artifact
uses: actions/upload-artifact@v4
with:
name: msi-package
path: desktopApp/build/compose/binaries/main/msi/*.msi
deb:
name: Generate DEB
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup JDK
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: "17"
- name: Set execution flag for gradlew
run: chmod +x gradlew
- name: Build DEB
run: ./gradlew :desktopApp:packageDeb --stacktrace
- name: Upload DEB Artifact
uses: actions/upload-artifact@v4
with:
name: deb-package
path: desktopApp/build/compose/binaries/main/deb/*.deb
rpm:
name: Generate RPM
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup JDK
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: "17"
- name: Set execution flag for gradlew
run: chmod +x gradlew
- name: Install RPM build tools
run: sudo apt-get update && sudo apt-get install -y rpm
- name: Build RPM
run: ./gradlew :desktopApp:packageRpm --stacktrace
- name: Upload RPM Artifact
uses: actions/upload-artifact@v4
with:
name: rpm-package
path: desktopApp/build/compose/binaries/main/rpm/*.rpm
appimage:
name: Generate AppImage
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup JDK
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: "17"
- name: Set execution flag for gradlew
run: chmod +x gradlew
- name: Install AppImage tools
run: |
sudo apt-get update
sudo apt-get install -y libfuse2 file
wget -q https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage
chmod +x appimagetool-x86_64.AppImage
- name: Build application distribution
run: ./gradlew :desktopApp:createDistributable --stacktrace
- name: Create AppDir structure
run: |
mkdir -p AppDir/usr/bin
mkdir -p AppDir/usr/lib
mkdir -p AppDir/usr/share/applications
mkdir -p AppDir/usr/share/icons/hicolor/256x256/apps
# Copy distributable contents
cp -r desktopApp/build/compose/binaries/main/app/LinuxCommandLibrary/* AppDir/usr/lib/
# Copy icon
cp desktopApp/icon.png AppDir/usr/share/icons/hicolor/256x256/apps/linuxcommandlibrary.png
cp desktopApp/icon.png AppDir/linuxcommandlibrary.png
# Create desktop file
cat > AppDir/linuxcommandlibrary.desktop << 'EOF'
[Desktop Entry]
Name=Linux Command Library
Comment=Linux Command Reference
Exec=linuxcommandlibrary
Icon=linuxcommandlibrary
Type=Application
Categories=Utility;
Terminal=false
EOF
cp AppDir/linuxcommandlibrary.desktop AppDir/usr/share/applications/
# Create AppRun
cat > AppDir/AppRun << 'EOF'
#!/bin/bash
SELF=$(readlink -f "$0")
HERE=${SELF%/*}
export PATH="${HERE}/usr/lib/bin:${PATH}"
export LD_LIBRARY_PATH="${HERE}/usr/lib/lib/runtime/lib:${LD_LIBRARY_PATH}"
exec "${HERE}/usr/lib/bin/LinuxCommandLibrary" "$@"
EOF
chmod +x AppDir/AppRun
- name: Build AppImage
run: |
ARCH=x86_64 ./appimagetool-x86_64.AppImage --appimage-extract-and-run AppDir LinuxCommandLibrary-x86_64.AppImage
- name: Upload AppImage Artifact
uses: actions/upload-artifact@v4
with:
name: appimage-package
path: LinuxCommandLibrary-*.AppImage
release:
name: Release All Platforms
needs: [apk, dmg, msi, deb, rpm, appimage]
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Download APK Artifact
uses: actions/download-artifact@v4.1.7
with:
name: signed-apk
- name: Download JAR Artifact
uses: actions/download-artifact@v4.1.7
with:
name: cli-jar
- name: Download DMG Artifact
uses: actions/download-artifact@v4.1.7
with:
name: dmg-package
- name: Download MSI Artifact
uses: actions/download-artifact@v4.1.7
with:
name: msi-package
- name: Download DEB Artifact
uses: actions/download-artifact@v4.1.7
with:
name: deb-package
- name: Download RPM Artifact
uses: actions/download-artifact@v4.1.7
with:
name: rpm-package
- name: Download AppImage Artifact
uses: actions/download-artifact@v4.1.7
with:
name: appimage-package
- name: List downloaded files (for debugging)
run: ls -la
- name: Get DMG filename
id: dmg
run: echo "file=$(ls *.dmg | head -n1)" >> $GITHUB_OUTPUT
- name: Get MSI filename
id: msi
run: echo "file=$(ls *.msi | head -n1)" >> $GITHUB_OUTPUT
- name: Get DEB filename
id: deb
run: echo "file=$(ls *.deb | head -n1)" >> $GITHUB_OUTPUT
- name: Get RPM filename
id: rpm
run: echo "file=$(ls *.rpm | head -n1)" >> $GITHUB_OUTPUT
- name: Get AppImage filename
id: appimage
run: echo "file=$(ls *.AppImage | head -n1)" >> $GITHUB_OUTPUT
- name: Get version
id: get_version
run: echo "version=${GITHUB_REF_NAME#v}" >> $GITHUB_OUTPUT
- name: Create Github Release
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ github.ref }}
release_name: Release ${{ github.ref }}
- name: Upload APK to Github Release
uses: actions/upload-release-asset@v1.0.1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: android-release-unsigned-signed.apk
asset_name: LinuxCommandLibrary-${{ steps.get_version.outputs.version }}-android.apk
asset_content_type: application/zip
- name: Upload JAR to Github Release
uses: actions/upload-release-asset@v1.0.1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: linuxcommandlibrary.jar
asset_name: linuxcommandlibrary-${{ steps.get_version.outputs.version }}-cli.jar
asset_content_type: application/java-archive
- name: Upload DMG to Github Release
uses: actions/upload-release-asset@v1.0.1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ${{ steps.dmg.outputs.file }}
asset_name: LinuxCommandLibrary-${{ steps.get_version.outputs.version }}-macos.dmg
asset_content_type: application/octet-stream
- name: Upload MSI to Github Release
uses: actions/upload-release-asset@v1.0.1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ${{ steps.msi.outputs.file }}
asset_name: LinuxCommandLibrary-${{ steps.get_version.outputs.version }}-windows.msi
asset_content_type: application/octet-stream
- name: Upload DEB to Github Release
uses: actions/upload-release-asset@v1.0.1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ${{ steps.deb.outputs.file }}
asset_name: LinuxCommandLibrary-${{ steps.get_version.outputs.version }}-linux.deb
asset_content_type: application/octet-stream
- name: Upload RPM to Github Release
uses: actions/upload-release-asset@v1.0.1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ${{ steps.rpm.outputs.file }}
asset_name: LinuxCommandLibrary-${{ steps.get_version.outputs.version }}-linux.rpm
asset_content_type: application/octet-stream
- name: Upload AppImage to Github Release
uses: actions/upload-release-asset@v1.0.1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ${{ steps.appimage.outputs.file }}
asset_name: LinuxCommandLibrary-${{ steps.get_version.outputs.version }}-linux.AppImage
asset_content_type: application/octet-stream