v1.27.1 #499
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 for Linux | |
| on: | |
| # Enable manual run | |
| workflow_dispatch: | |
| push: | |
| tags: | |
| - "**" | |
| branches: | |
| - "**" | |
| paths: | |
| - .github/workflows/linux.yml | |
| - appimage/AppImageBuilder.yml | |
| jobs: | |
| build-linux: | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| arch: | |
| - runs-on: ubuntu-latest | |
| cache-name: saber | |
| target-platform: linux-x64 | |
| flutter-output-folder: build/linux/x64/release/bundle | |
| archive-suffix: x86_64 | |
| - runs-on: ubuntu-24.04-arm | |
| cache-name: saberarm64 | |
| target-platform: linux-arm64 | |
| flutter-output-folder: build/linux/arm64/release/bundle | |
| archive-suffix: arm64 | |
| runs-on: ${{ matrix.arch.runs-on }} | |
| permissions: | |
| contents: write | |
| timeout-minutes: 20 | |
| name: Build Linux (${{ matrix.arch.target-platform }}) | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v5 | |
| - uses: "./.github/shared_workflows/install_apt_dependencies" | |
| - name: Setup cache | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| .dart_tool/ | |
| build/ | |
| linux/flutter/ephemeral/ | |
| macos/Flutter/ephemeral/ | |
| windows/flutter/ephemeral/ | |
| .flutter-plugins-dependencies | |
| pubspec.lock | |
| key: ${{ runner.OS }}-${{ matrix.arch.cache-name }}-${{ hashFiles('**/pubspec.lock') }}-${{ hashFiles('**/*.dart') }} | |
| restore-keys: | | |
| ${{ runner.OS }}-${{ matrix.arch.cache-name }}- | |
| - name: Setup Flutter | |
| uses: adil192/setup-flutter-submodule@v1 | |
| with: | |
| flutter-path: submodules/flutter | |
| - name: Disable Flutter CLI animations | |
| run: flutter config --no-cli-animations | |
| - run: flutter pub get | |
| - name: Remove proprietary dependencies | |
| run: ./patches/remove_proprietary_dependencies.sh | |
| - name: Remove development dependencies | |
| run: ./patches/remove_dev_dependencies.sh | |
| - name: Build Linux (${{ matrix.arch.target-platform }}) | |
| run: | | |
| flutter build linux \ | |
| --target-platform ${{ matrix.arch.target-platform }} \ | |
| --dart-define=DIRTY=${{ !startsWith(github.ref, 'refs/tags/') }} | |
| - name: Compress Flutter build | |
| id: compress | |
| run: | | |
| buildName=$(grep -oP "(?<=buildName = ').*(?=')" lib/data/version.dart) | |
| archiveName="Saber_v${buildName}_Linux_${{ matrix.arch.archive-suffix }}.tar.gz" | |
| echo "archiveName=$archiveName" >> $GITHUB_OUTPUT | |
| mkdir -p AppDir | |
| mv ${{ matrix.arch.flutter-output-folder }}/* AppDir | |
| chmod +x AppDir/saber | |
| install -Dm644 flatpak/com.adilhanney.saber.metainfo.xml -t AppDir/share/metainfo/ | |
| install -Dm644 flatpak/com.adilhanney.saber.metainfo.xml -t AppDir/usr/share/metainfo/ | |
| install -Dm644 assets/icon/icon_linux.svg AppDir/share/icons/hicolor/scalable/apps/com.adilhanney.saber.svg | |
| install -Dm644 assets/icon/icon_linux.svg AppDir/usr/share/icons/hicolor/scalable/apps/com.adilhanney.saber.svg | |
| install -Dm644 flatpak/com.adilhanney.saber.desktop -t AppDir/share/applications/ | |
| tar -C AppDir -czvf $archiveName . | |
| - name: Upload artifact | |
| uses: actions/upload-artifact@v5 | |
| with: | |
| name: Saber-Archive-${{ matrix.arch.archive-suffix }} | |
| path: ${{ steps.compress.outputs.archiveName }} | |
| - name: Upload to GitHub release | |
| uses: svenstaro/upload-release-action@v2 | |
| if: ${{ startsWith(github.ref, 'refs/tags/') }} | |
| with: | |
| repo_token: ${{ secrets.GITHUB_TOKEN }} | |
| file: ${{ steps.compress.outputs.archiveName }} | |
| build-appimage: | |
| name: Build AppImage | |
| needs: build-linux | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write | |
| timeout-minutes: 10 | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v5 | |
| - name: Install AppImage dependencies | |
| run: | | |
| sudo add-apt-repository universe | |
| sudo apt install libfuse2 | |
| - name: Download app archive | |
| uses: actions/download-artifact@v6 | |
| with: | |
| name: Saber-Archive-x86_64 | |
| - name: Rename app archive | |
| run: | | |
| mv Saber_*.tar.gz Saber-Linux-Portable.tar.gz | |
| - name: Install appimage-builder | |
| run: | | |
| sudo pip3 install --ignore-installed git+https://github.com/AppImageCrafters/appimage-builder.git | |
| - name: Prepare build files | |
| working-directory: appimage | |
| run: | | |
| mkdir AppDir | |
| tar -xzvf ../Saber-Linux-Portable.tar.gz -C AppDir | |
| - name: Set AppImage version | |
| working-directory: appimage | |
| run: | | |
| # replace line with "version: latest" with "version: $buildName" | |
| buildName=$(grep -oP "(?<=buildName = ').*(?=')" ../lib/data/version.dart) | |
| sed -i "s/version: latest/version: ${buildName}/" AppImageBuilder.yml | |
| - name: Build AppImage | |
| working-directory: appimage | |
| run: | | |
| appimage-builder --skip-test | |
| - name: Upload artifact | |
| uses: actions/upload-artifact@v5 | |
| with: | |
| name: AppImage artifact | |
| path: appimage/Saber-*-x86_64.AppImage* | |
| - name: Upload to GitHub release | |
| uses: svenstaro/upload-release-action@v2 | |
| if: ${{ startsWith(github.ref, 'refs/tags/') }} | |
| with: | |
| repo_token: ${{ secrets.GITHUB_TOKEN }} | |
| file: appimage/Saber-*-x86_64.AppImage* | |
| file_glob: true | |
| build-flatpak: | |
| name: Build Flatpak | |
| needs: build-linux | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 15 | |
| container: | |
| image: ghcr.io/flathub-infra/flatpak-github-actions:gnome-48 | |
| options: --privileged | |
| steps: | |
| - name: Checkout flathub repo | |
| uses: actions/checkout@v5 | |
| with: | |
| repository: flathub/com.adilhanney.saber | |
| submodules: recursive | |
| - name: Download app archive | |
| uses: actions/download-artifact@v6 | |
| with: | |
| name: Saber-Archive-x86_64 | |
| - name: Rename app archive | |
| run: | | |
| mv Saber_*.tar.gz Saber_snapshot.tar.gz | |
| - name: Patch manifest to use local archive | |
| run: | | |
| # Add --no-same-owner to tar in build-commands | |
| jq '.modules? |= map(if type=="object" and .name=="saber" then .["build-commands"] |= map(if type=="string" then sub("tar -xf "; "tar --no-same-owner -xf ") else . end) else . end)' com.adilhanney.saber.json > tmp.json && mv tmp.json com.adilhanney.saber.json | |
| # Replace sources with local archive | |
| jq '.modules[]? |= if type=="object" and .name=="saber" then .sources = [ {"type":"file","path":"./Saber_snapshot.tar.gz"} ] else . end' com.adilhanney.saber.json > tmp.json && mv tmp.json com.adilhanney.saber.json | |
| - name: Build Flatpak | |
| uses: flatpak/flatpak-github-actions/flatpak-builder@v6 | |
| with: | |
| bundle: Saber_snapshot.flatpak | |
| manifest-path: com.adilhanney.saber.json | |
| upload-artifact: true |