name: Build for Linux on: pull_request: types: - opened - synchronize - reopened - ready_for_review paths-ignore: - "**.md" workflow_dispatch: inputs: branch: required: false default: "main" jobs: build-linux-app: name: Release Linux runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v5 with: ref: ${{ github.event.inputs.branch }} fetch-depth: 0 - name: Install dependencies run: | sudo apt-get update sudo apt-get install -y clang cmake libgtk-3-dev ninja-build libayatana-appindicator3-dev unzip webkit2gtk-4.1 libasound2-dev sudo apt-get install -y gcc g++ autoconf automake debhelper glslang-dev ladspa-sdk xutils-dev libasound2-dev \ libarchive-dev libbluray-dev libbs2b-dev libcaca-dev libcdio-paranoia-dev libdrm-dev \ libdav1d-dev libdvdnav-dev libegl1-mesa-dev libepoxy-dev libfontconfig-dev libfreetype6-dev \ libfribidi-dev libgl1-mesa-dev libgbm-dev libgme-dev libgsm1-dev libharfbuzz-dev libjpeg-dev \ libbrotli-dev liblcms2-dev libmodplug-dev libmp3lame-dev libopenal-dev \ libopus-dev libopencore-amrnb-dev libopencore-amrwb-dev libpulse-dev librtmp-dev \ libsdl2-dev libsixel-dev libssh-dev libsoxr-dev libspeex-dev libtool \ libv4l-dev libva-dev libvdpau-dev libvorbis-dev libvo-amrwbenc-dev \ libunwind-dev libvpx-dev libwayland-dev libx11-dev libxext-dev \ libxkbcommon-dev libxrandr-dev libxss-dev libxv-dev libxvidcore-dev \ linux-libc-dev nasm ninja-build pkg-config python3 python3-docutils wayland-protocols \ x11proto-core-dev zlib1g-dev libfdk-aac-dev libtheora-dev libwebp-dev \ unixodbc-dev libpq-dev libxxhash-dev libaom-dev \ libgtk-3-0 libblkid1 liblzma5 libmpv-dev shell: bash - name: Setup flutter uses: subosito/flutter-action@v2 with: channel: stable flutter-version-file: pubspec.yaml cache: true - name: Set and Extract version run: | dart lib/scripts/build.dart VERSION=$(cat pubspec.yaml | grep 'version:' | sed 's/version: //g' | tr -d '[:space:]') echo "version=$VERSION" >> $GITHUB_ENV shell: bash #TODO: deb and rpm packages need to be build - name: Build Linux run: flutter build linux --release -v --pub - name: Package .tar.gz run: tar -zcvf PiliPlus_linux_${{ env.version }}_amd64.tar.gz -C build/linux/x64/release/bundle . - name: Packege deb run: | printf "建立构建目录...\n" mkdir "PiliPlus_linux_${{ env.version }}_amd64" pushd "PiliPlus_linux_${{ env.version }}_amd64" mkdir -p opt/PiliPlus mkdir -p usr/share/applications mkdir -p usr/share/icons/hicolor/512x512/apps printf "复制文件...\n" cp -r ../build/linux/x64/release/bundle/* opt/PiliPlus cp -r ../assets/linux/DEBIAN . cp ../assets/linux/piliplus.desktop usr/share/applications cp ../assets/images/logo/logo.png usr/share/icons/hicolor/512x512/apps/piliplus.png printf "修改控制文件...\n" # 替换版本号 sed -i "2s/version_need_change/${{ env.version }}/g" DEBIAN/control # 计算安装大小并替换 SIZE_KB=$(du -s -b --apparent-size . | awk '{print int($1)}') SIZE_KB=$(($SIZE_KB - $(du -s -b --apparent-size DEBIAN | awk '{print int($1)}'))) SIZE_KB=$(echo $SIZE_KB | awk '{print int($1/1024 + 0.999)}') printf "\t安装大小: %s KB\n" "$SIZE_KB" sed -i "9s/size_need_change/${SIZE_KB}/g" DEBIAN/control printf "生成并写入 md5sums ...\n" md5sum opt/PiliPlus/piliplus >> DEBIAN/md5sums md5sum opt/PiliPlus/lib/* >> DEBIAN/md5sums md5sum opt/PiliPlus/data/icudtl.dat >> DEBIAN/md5sums printf "设置权限...\n" chmod 0644 DEBIAN/control chmod 0644 DEBIAN/md5sums chmod 0755 DEBIAN/postinst chmod 0755 DEBIAN/postrm chmod 0755 DEBIAN/prerm printf "打包 deb 文件...\n" popd dpkg-deb --build --verbose --root-owner-group "PiliPlus_linux_${{ env.version }}_amd64" printf "完成: PiliPlus_linux_%s_amd64.deb\n" "${{ env.version }}" shell: bash - name: Upload linux targz package uses: actions/upload-artifact@v4 with: name: Linux_targz_packege path: PiliPlus_linux_*.tar.gz - name: Upload linux deb package uses: actions/upload-artifact@v4 with: name: Linux_deb_package path: PiliPlus_linux_*.deb