fix: 修复绝对路径执行问题 #13
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 GUI Packages | |
| on: | |
| push: | |
| tags: | |
| - 'v*' | |
| workflow_dispatch: | |
| inputs: | |
| version: | |
| description: 'Version number (e.g., 1.0.0)' | |
| required: false | |
| default: '1.0.0' | |
| jobs: | |
| build-linux-x64: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.11' | |
| - name: Install dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y libfuse2 rpm | |
| pip install flet pyinstaller pillow | |
| pip install -r requirements-gui.txt | |
| - name: Build with Flet Pack | |
| run: | | |
| flet pack cloudflare_speedtest_gui.py --name yx-tools-gui --icon icon/icon.png --add-data "cloudflare_speedtest.py:." --add-data "icon:icon" | |
| - name: Create desktop file | |
| run: | | |
| cat > yx-tools-gui.desktop << 'DESKTOP_EOF' | |
| [Desktop Entry] | |
| Name=yx-tools-gui | |
| Comment=Cloudflare IP Speed Test Tool | |
| Exec=yx-tools-gui | |
| Icon=yx-tools-gui | |
| Terminal=false | |
| Type=Application | |
| Categories=Network; | |
| DESKTOP_EOF | |
| sed -i 's/^ //' yx-tools-gui.desktop | |
| - name: Create packages | |
| run: | | |
| VERSION=${{ github.event.inputs.version || '1.0.0' }} | |
| # AppImage | |
| wget -q https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage -O appimagetool | |
| chmod +x appimagetool | |
| mkdir -p AppDir/usr/{bin,share/{applications,icons/hicolor/256x256/apps}} | |
| cp dist/yx-tools-gui AppDir/usr/bin/ | |
| cp icon/icon.png AppDir/yx-tools-gui.png | |
| cp icon/icon.png AppDir/usr/share/icons/hicolor/256x256/apps/yx-tools-gui.png | |
| cp yx-tools-gui.desktop AppDir/ | |
| cp yx-tools-gui.desktop AppDir/usr/share/applications/ | |
| echo '#!/bin/bash' > AppDir/AppRun | |
| echo 'HERE=$(dirname "$(readlink -f "$0")")' >> AppDir/AppRun | |
| echo 'exec "${HERE}/usr/bin/yx-tools-gui" "$@"' >> AppDir/AppRun | |
| chmod +x AppDir/AppRun | |
| ARCH=x86_64 ./appimagetool AppDir yx-tools-gui-x86_64.AppImage | |
| # DEB | |
| mkdir -p deb-pkg/{DEBIAN,opt/yx-tools-gui,usr/{bin,share/{applications,icons/hicolor/256x256/apps}}} | |
| cp dist/yx-tools-gui deb-pkg/opt/yx-tools-gui/ | |
| cp icon/icon.png deb-pkg/usr/share/icons/hicolor/256x256/apps/yx-tools-gui.png | |
| echo '#!/bin/bash' > deb-pkg/usr/bin/yx-tools-gui | |
| echo 'exec /opt/yx-tools-gui/yx-tools-gui "$@"' >> deb-pkg/usr/bin/yx-tools-gui | |
| chmod +x deb-pkg/usr/bin/yx-tools-gui | |
| sed 's|Exec=yx-tools-gui|Exec=/usr/bin/yx-tools-gui|' yx-tools-gui.desktop > deb-pkg/usr/share/applications/yx-tools-gui.desktop | |
| echo "Package: yx-tools-gui" > deb-pkg/DEBIAN/control | |
| echo "Version: ${VERSION}" >> deb-pkg/DEBIAN/control | |
| echo "Architecture: amd64" >> deb-pkg/DEBIAN/control | |
| echo "Maintainer: Joey and Zag" >> deb-pkg/DEBIAN/control | |
| echo "Description: Cloudflare IP Speed Test Tool" >> deb-pkg/DEBIAN/control | |
| dpkg-deb --build deb-pkg yx-tools-gui_${VERSION}_amd64.deb | |
| # RPM | |
| mkdir -p rpmbuild/{BUILD,RPMS,SPECS,SOURCES} | |
| cp dist/yx-tools-gui rpmbuild/SOURCES/ | |
| cp icon/icon.png rpmbuild/SOURCES/ | |
| sed 's|Exec=yx-tools-gui|Exec=/usr/bin/yx-tools-gui|' yx-tools-gui.desktop > rpmbuild/SOURCES/yx-tools-gui.desktop | |
| cat > rpmbuild/SPECS/yx-tools-gui.spec << SPEC_EOF | |
| Name: yx-tools-gui | |
| Version: ${VERSION} | |
| Release: 1 | |
| Summary: Cloudflare IP Speed Test Tool | |
| License: MIT | |
| %description | |
| Cloudflare IP Speed Test Tool | |
| %install | |
| mkdir -p %{buildroot}/opt/yx-tools-gui %{buildroot}/usr/bin %{buildroot}/usr/share/applications %{buildroot}/usr/share/icons/hicolor/256x256/apps | |
| cp %{_sourcedir}/yx-tools-gui %{buildroot}/opt/yx-tools-gui/ | |
| chmod +x %{buildroot}/opt/yx-tools-gui/yx-tools-gui | |
| cp %{_sourcedir}/icon.png %{buildroot}/usr/share/icons/hicolor/256x256/apps/yx-tools-gui.png | |
| echo '#!/bin/bash' > %{buildroot}/usr/bin/yx-tools-gui | |
| echo 'exec /opt/yx-tools-gui/yx-tools-gui "\$@"' >> %{buildroot}/usr/bin/yx-tools-gui | |
| chmod +x %{buildroot}/usr/bin/yx-tools-gui | |
| cp %{_sourcedir}/yx-tools-gui.desktop %{buildroot}/usr/share/applications/ | |
| %files | |
| /opt/yx-tools-gui/yx-tools-gui | |
| /usr/bin/yx-tools-gui | |
| /usr/share/applications/yx-tools-gui.desktop | |
| /usr/share/icons/hicolor/256x256/apps/yx-tools-gui.png | |
| SPEC_EOF | |
| sed -i 's/^ //' rpmbuild/SPECS/yx-tools-gui.spec | |
| rpmbuild --define "_topdir ${GITHUB_WORKSPACE}/rpmbuild" -bb rpmbuild/SPECS/yx-tools-gui.spec | |
| cp rpmbuild/RPMS/x86_64/*.rpm yx-tools-gui-${VERSION}.x86_64.rpm | |
| - uses: actions/upload-artifact@v4 | |
| with: | |
| name: linux-x64-packages | |
| path: | | |
| yx-tools-gui-*.x86_64.rpm | |
| yx-tools-gui_*_amd64.deb | |
| yx-tools-gui-x86_64.AppImage | |
| compression-level: 0 | |
| build-linux-arm64: | |
| runs-on: ubuntu-24.04-arm | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.11' | |
| - name: Install dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y libfuse2 rpm | |
| pip install flet pyinstaller pillow | |
| pip install -r requirements-gui.txt | |
| - name: Build with Flet Pack | |
| run: | | |
| flet pack cloudflare_speedtest_gui.py --name yx-tools-gui --icon icon/icon.png --add-data "cloudflare_speedtest.py:." --add-data "icon:icon" | |
| - name: Create desktop file | |
| run: | | |
| cat > yx-tools-gui.desktop << 'DESKTOP_EOF' | |
| [Desktop Entry] | |
| Name=yx-tools-gui | |
| Comment=Cloudflare IP Speed Test Tool | |
| Exec=yx-tools-gui | |
| Icon=yx-tools-gui | |
| Terminal=false | |
| Type=Application | |
| Categories=Network; | |
| DESKTOP_EOF | |
| sed -i 's/^ //' yx-tools-gui.desktop | |
| - name: Create packages | |
| run: | | |
| VERSION=${{ github.event.inputs.version || '1.0.0' }} | |
| # AppImage (may fail on arm64) | |
| wget -q https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-aarch64.AppImage -O linuxdeploy || true | |
| if [ -f linuxdeploy ]; then | |
| chmod +x linuxdeploy | |
| ./linuxdeploy --appimage-extract || true | |
| mkdir -p AppDir/usr/bin | |
| cp dist/yx-tools-gui AppDir/usr/bin/ | |
| cp icon/icon.png yx-tools-gui.png | |
| ./squashfs-root/AppRun --appdir AppDir -e dist/yx-tools-gui -i yx-tools-gui.png -d yx-tools-gui.desktop --output appimage || true | |
| mv *.AppImage yx-tools-gui-aarch64.AppImage 2>/dev/null || touch yx-tools-gui-aarch64.AppImage.skip | |
| else | |
| touch yx-tools-gui-aarch64.AppImage.skip | |
| fi | |
| # DEB | |
| mkdir -p deb-pkg/{DEBIAN,opt/yx-tools-gui,usr/{bin,share/{applications,icons/hicolor/256x256/apps}}} | |
| cp dist/yx-tools-gui deb-pkg/opt/yx-tools-gui/ | |
| cp icon/icon.png deb-pkg/usr/share/icons/hicolor/256x256/apps/yx-tools-gui.png | |
| echo '#!/bin/bash' > deb-pkg/usr/bin/yx-tools-gui | |
| echo 'exec /opt/yx-tools-gui/yx-tools-gui "$@"' >> deb-pkg/usr/bin/yx-tools-gui | |
| chmod +x deb-pkg/usr/bin/yx-tools-gui | |
| sed 's|Exec=yx-tools-gui|Exec=/usr/bin/yx-tools-gui|' yx-tools-gui.desktop > deb-pkg/usr/share/applications/yx-tools-gui.desktop | |
| echo "Package: yx-tools-gui" > deb-pkg/DEBIAN/control | |
| echo "Version: ${VERSION}" >> deb-pkg/DEBIAN/control | |
| echo "Architecture: arm64" >> deb-pkg/DEBIAN/control | |
| echo "Maintainer: Joey and Zag" >> deb-pkg/DEBIAN/control | |
| echo "Description: Cloudflare IP Speed Test Tool" >> deb-pkg/DEBIAN/control | |
| dpkg-deb --build deb-pkg yx-tools-gui_${VERSION}_arm64.deb | |
| # RPM | |
| mkdir -p rpmbuild/{BUILD,RPMS,SPECS,SOURCES} | |
| cp dist/yx-tools-gui rpmbuild/SOURCES/ | |
| cp icon/icon.png rpmbuild/SOURCES/ | |
| sed 's|Exec=yx-tools-gui|Exec=/usr/bin/yx-tools-gui|' yx-tools-gui.desktop > rpmbuild/SOURCES/yx-tools-gui.desktop | |
| cat > rpmbuild/SPECS/yx-tools-gui.spec << SPEC_EOF | |
| Name: yx-tools-gui | |
| Version: ${VERSION} | |
| Release: 1 | |
| Summary: Cloudflare IP Speed Test Tool | |
| License: MIT | |
| %description | |
| Cloudflare IP Speed Test Tool | |
| %install | |
| mkdir -p %{buildroot}/opt/yx-tools-gui %{buildroot}/usr/bin %{buildroot}/usr/share/applications %{buildroot}/usr/share/icons/hicolor/256x256/apps | |
| cp %{_sourcedir}/yx-tools-gui %{buildroot}/opt/yx-tools-gui/ | |
| chmod +x %{buildroot}/opt/yx-tools-gui/yx-tools-gui | |
| cp %{_sourcedir}/icon.png %{buildroot}/usr/share/icons/hicolor/256x256/apps/yx-tools-gui.png | |
| echo '#!/bin/bash' > %{buildroot}/usr/bin/yx-tools-gui | |
| echo 'exec /opt/yx-tools-gui/yx-tools-gui "\$@"' >> %{buildroot}/usr/bin/yx-tools-gui | |
| chmod +x %{buildroot}/usr/bin/yx-tools-gui | |
| cp %{_sourcedir}/yx-tools-gui.desktop %{buildroot}/usr/share/applications/ | |
| %files | |
| /opt/yx-tools-gui/yx-tools-gui | |
| /usr/bin/yx-tools-gui | |
| /usr/share/applications/yx-tools-gui.desktop | |
| /usr/share/icons/hicolor/256x256/apps/yx-tools-gui.png | |
| SPEC_EOF | |
| sed -i 's/^ //' rpmbuild/SPECS/yx-tools-gui.spec | |
| rpmbuild --define "_topdir ${GITHUB_WORKSPACE}/rpmbuild" -bb rpmbuild/SPECS/yx-tools-gui.spec | |
| cp rpmbuild/RPMS/aarch64/*.rpm yx-tools-gui-${VERSION}.aarch64.rpm | |
| - uses: actions/upload-artifact@v4 | |
| with: | |
| name: linux-arm64-packages | |
| path: | | |
| yx-tools-gui-*.aarch64.rpm | |
| yx-tools-gui_*_arm64.deb | |
| yx-tools-gui-aarch64.AppImage* | |
| compression-level: 0 | |
| build-windows-x64: | |
| runs-on: windows-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.11' | |
| - name: Install dependencies | |
| run: | | |
| pip install flet pyinstaller pillow | |
| pip install -r requirements-gui.txt | |
| - name: Build with Flet Pack | |
| run: | | |
| flet pack cloudflare_speedtest_gui.py --name yx-tools-gui --icon icon/icon.png --add-data "cloudflare_speedtest.py;." --add-data "icon;icon" | |
| - name: Package | |
| run: | | |
| Copy-Item "dist/yx-tools-gui.exe" -Destination "yx-tools-gui-x64.exe" | |
| shell: pwsh | |
| - uses: actions/upload-artifact@v4 | |
| with: | |
| name: exe-x64 | |
| path: yx-tools-gui-x64.exe | |
| compression-level: 0 | |
| build-windows-arm64: | |
| runs-on: windows-11-arm | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.11' | |
| - name: Install dependencies | |
| run: | | |
| pip install flet pyinstaller pillow | |
| pip install -r requirements-gui.txt | |
| - name: Build with Flet Pack | |
| run: | | |
| flet pack cloudflare_speedtest_gui.py --name yx-tools-gui --icon icon/icon.png --add-data "cloudflare_speedtest.py;." --add-data "icon;icon" | |
| - name: Package | |
| run: | | |
| Copy-Item "dist/yx-tools-gui.exe" -Destination "yx-tools-gui-arm64.exe" | |
| shell: pwsh | |
| - uses: actions/upload-artifact@v4 | |
| with: | |
| name: exe-arm64 | |
| path: yx-tools-gui-arm64.exe | |
| compression-level: 0 | |
| build-macos-intel: | |
| runs-on: macos-13 | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.11' | |
| - name: Install Flutter | |
| uses: subosito/flutter-action@v2 | |
| with: | |
| flutter-version: '3.24.0' | |
| channel: 'stable' | |
| - name: Install dependencies | |
| run: | | |
| pip install flet | |
| pip install -r requirements-gui.txt | |
| - name: Prepare assets | |
| run: | | |
| mkdir -p assets | |
| cp icon/icon.png assets/icon.png | |
| - name: Build with Flet | |
| run: flet build macos --project "yx-tools-gui" --product "yx-tools-gui" --org "com.yxtools" --build-version "${{ github.event.inputs.version || '1.0.0' }}" -v | |
| - name: Create DMG | |
| run: | | |
| VERSION=${{ github.event.inputs.version || '1.0.0' }} | |
| APP_PATH=$(find build -name "*.app" -type d | head -1) | |
| if [ -z "$APP_PATH" ]; then | |
| echo "Error: App bundle not found" | |
| find build -type d | |
| exit 1 | |
| fi | |
| echo "Found app: $APP_PATH" | |
| brew install create-dmg | |
| create-dmg --volname "yx-tools-gui" --window-size 600 400 --icon-size 100 --icon "$(basename $APP_PATH)" 150 185 --app-drop-link 450 185 "yx-tools-gui-${VERSION}-intel.dmg" "$APP_PATH" || hdiutil create -volname "yx-tools-gui" -srcfolder "$APP_PATH" -ov -format UDZO "yx-tools-gui-${VERSION}-intel.dmg" | |
| - uses: actions/upload-artifact@v4 | |
| with: | |
| name: dmg-intel | |
| path: yx-tools-gui-*-intel.dmg | |
| compression-level: 0 | |
| build-macos-arm: | |
| runs-on: macos-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.11' | |
| - name: Install Flutter | |
| uses: subosito/flutter-action@v2 | |
| with: | |
| flutter-version: '3.24.0' | |
| channel: 'stable' | |
| - name: Install dependencies | |
| run: | | |
| pip install flet | |
| pip install -r requirements-gui.txt | |
| - name: Prepare assets | |
| run: | | |
| mkdir -p assets | |
| cp icon/icon.png assets/icon.png | |
| - name: Build with Flet | |
| run: flet build macos --project "yx-tools-gui" --product "yx-tools-gui" --org "com.yxtools" --build-version "${{ github.event.inputs.version || '1.0.0' }}" -v | |
| - name: Create DMG | |
| run: | | |
| VERSION=${{ github.event.inputs.version || '1.0.0' }} | |
| APP_PATH=$(find build -name "*.app" -type d | head -1) | |
| if [ -z "$APP_PATH" ]; then | |
| echo "Error: App bundle not found" | |
| find build -type d | |
| exit 1 | |
| fi | |
| echo "Found app: $APP_PATH" | |
| brew install create-dmg | |
| create-dmg --volname "yx-tools-gui" --window-size 600 400 --icon-size 100 --icon "$(basename $APP_PATH)" 150 185 --app-drop-link 450 185 "yx-tools-gui-${VERSION}-apple-silicon.dmg" "$APP_PATH" || hdiutil create -volname "yx-tools-gui" -srcfolder "$APP_PATH" -ov -format UDZO "yx-tools-gui-${VERSION}-apple-silicon.dmg" | |
| - uses: actions/upload-artifact@v4 | |
| with: | |
| name: dmg-apple-silicon | |
| path: yx-tools-gui-*-apple-silicon.dmg | |
| compression-level: 0 | |
| release: | |
| needs: [build-linux-x64, build-linux-arm64, build-windows-x64, build-windows-arm64, build-macos-intel, build-macos-arm] | |
| runs-on: ubuntu-latest | |
| if: startsWith(github.ref, 'refs/tags/') | |
| steps: | |
| - uses: actions/download-artifact@v4 | |
| with: | |
| path: artifacts | |
| merge-multiple: true | |
| - run: ls -la artifacts/ | |
| - uses: softprops/action-gh-release@v1 | |
| with: | |
| files: artifacts/* | |
| draft: false | |
| generate_release_notes: true | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |