diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000..409a7e5 --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,93 @@ +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" + include-package: arcade.gl.backends + 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: GameOfLife + + - 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/GameOfLife-${{ runner.os }}.zip'" + else + cd build/run.dist + zip -r "../../zip_output/GameOfLife-${{ runner.os }}.zip" . + fi + + - name: Upload Zipped Build Artifact + uses: actions/upload-artifact@v4 + with: + name: GameOfLife-${{ runner.os }}.zip + path: zip_output/GameOfLife-${{ 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/**/GameOfLife-*.zip --title "Latest Build" --notes "Most recent multi-platform builds of ShatterStack" + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}