name: Build and Release on: push jobs: build: name: Build on ${{ matrix.os }} runs-on: ${{ matrix.os }} strategy: matrix: os: [ubuntu-latest, windows-latest, macos-latest] steps: - name: Check-out repository uses: actions/checkout@v4 - name: Setup Python uses: actions/setup-python@v5 with: python-version: "3.11" architecture: "x64" cache: "pip" cache-dependency-path: | **/requirements*.txt - name: Install Dependencies run: pip install -r requirements.txt - name: Build Executable uses: Nuitka/Nuitka-Action@main with: nuitka-version: main script-name: run.py nofollow-import-to: "*tk*,_codecs,encodings,multiprocessing,gi" disable-plugins: tk-inter,dill-compat,eventlet,gevent,pyqt5,pyqt6,pyside2,pyside6,delvewheel,pywebview,matplotlib,spacy,enum-compat,pbr-compat,gevent,pmw-freezer,transformers,upx,kivy,options-nanny,multiprocessing,gi include-data-dir: assets=assets include-data-files: CREDITS=CREDITS mode: standalone output-file: FractalViewer - name: Zip Build Output shell: bash run: | mkdir -p zip_output if [ "${{ runner.os }}" = "Windows" ]; then powershell.exe -Command "Compress-Archive -Path 'build/run.dist/*' -DestinationPath 'zip_output/FractalViewer-${{ runner.os }}.zip'" else cd build/run.dist zip -r "../../zip_output/FractalViewer-${{ runner.os }}.zip" . fi - name: Upload Zipped Build Artifact uses: actions/upload-artifact@v4 with: name: FractalViewer-${{ runner.os }}.zip path: zip_output/FractalViewer-${{ runner.os }}.zip release: name: Create GitHub Release needs: build runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 with: fetch-depth: 0 - name: Download All Zipped Builds uses: actions/download-artifact@v4 with: path: downloads - name: Delete Old Release (if exists) continue-on-error: true run: gh release delete latest -y env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Delete Git tag (if exists) continue-on-error: true run: | git push origin :refs/tags/latest git tag -d latest - name: Recreate Git tag at HEAD run: | git tag latest git push origin latest - name: Create the new release run: gh release create latest downloads/**/FractalViewer-*.zip --title "Latest Build" --notes "Most recent multi-platform builds of FractalViewer" env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}