name: Build and Release on: push: branches: [ main ] workflow_dispatch: jobs: create-release: runs-on: ubuntu-latest outputs: upload_url: ${{ steps.create_release.outputs.upload_url }} version: ${{ steps.version.outputs.version }} steps: - uses: actions/checkout@v3 - name: Generate version number id: version run: | SHA_SHORT=$(git rev-parse --short HEAD) echo "version=1.0.0-${SHA_SHORT}" >> $GITHUB_OUTPUT - name: Create Release id: create_release uses: actions/create-release@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: tag_name: v${{ steps.version.outputs.version }} release_name: Release v${{ steps.version.outputs.version }} draft: false prerelease: false build-windows: needs: create-release runs-on: windows-latest steps: - uses: actions/checkout@v3 - name: Set up Python uses: actions/setup-python@v4 with: python-version: '3.10' - name: Download FFmpeg run: | mkdir ffmpeg curl -L https://github.com/BtbN/FFmpeg-Builds/releases/download/latest/ffmpeg-master-latest-win64-gpl.zip -o ffmpeg.zip 7z x ffmpeg.zip -offmpeg move ffmpeg\ffmpeg-master-latest-win64-gpl\bin\ffmpeg.exe ffmpeg\ move ffmpeg\ffmpeg-master-latest-win64-gpl\bin\ffprobe.exe ffmpeg\ - name: Install dependencies run: | python -m pip install --upgrade pip pip install -r requirements.txt pip install pyinstaller # 创建启动器脚本 - name: Create launcher script run: | echo 'import os, sys; os.environ["PATH"] = os.path.join(os.path.dirname(sys.executable), "ffmpeg") + os.pathsep + os.environ["PATH"]' > launcher.py type gui.py >> launcher.py - name: Build with PyInstaller run: | pyinstaller --name video2gif --onefile --windowed --add-data "ffmpeg/ffmpeg.exe;ffmpeg" --add-data "ffmpeg/ffprobe.exe;ffmpeg" --add-data "README.md;." launcher.py - name: Upload Release Asset uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ needs.create-release.outputs.upload_url }} asset_path: ./dist/video2gif.exe asset_name: video2gif-windows-${{ needs.create-release.outputs.version }}.exe asset_content_type: application/octet-stream build-macos: needs: create-release runs-on: macos-latest steps: - uses: actions/checkout@v3 - name: Set up Python uses: actions/setup-python@v4 with: python-version: '3.10' - name: Download FFmpeg run: | mkdir ffmpeg curl -L https://evermeet.cx/ffmpeg/getrelease/zip -o ffmpeg.zip unzip ffmpeg.zip -d ffmpeg curl -L https://evermeet.cx/ffmpeg/getrelease/zip/ffprobe -o ffprobe.zip unzip ffprobe.zip -d ffmpeg chmod +x ffmpeg/ffmpeg ffmpeg/ffprobe - name: Install dependencies run: | python -m pip install --upgrade pip pip install -r requirements.txt pip install pyinstaller # 创建启动器脚本 - name: Create launcher script run: | echo 'import os, sys; os.environ["PATH"] = os.path.join(os.path.dirname(sys.executable), "ffmpeg") + os.pathsep + os.environ["PATH"]' > launcher.py cat gui.py >> launcher.py - name: Build with PyInstaller run: | pyinstaller --name video2gif --onefile --windowed --add-data "ffmpeg/ffmpeg:ffmpeg" --add-data "ffmpeg/ffprobe:ffmpeg" --add-data "README.md:." launcher.py - name: Create DMG run: | cd dist mkdir -p video2gif.app/Contents/MacOS mkdir -p video2gif.app/Contents/Resources/ffmpeg mv video2gif video2gif.app/Contents/MacOS/ hdiutil create -volname "Video2Gif" -srcfolder video2gif.app -ov -format UDZO video2gif.dmg - name: Upload Release Asset uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ needs.create-release.outputs.upload_url }} asset_path: ./dist/video2gif.dmg asset_name: video2gif-macos-${{ needs.create-release.outputs.version }}.dmg asset_content_type: application/x-apple-diskimage