diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..a2f5928 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,143 @@ +name: Build and Package Oraset + +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + release: + types: [ created ] + +jobs: + build: + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest, windows-latest, macos-latest] + + steps: + - uses: actions/checkout@v3 + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: '3.10' + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install pyinstaller + + - name: Build with PyInstaller + run: | + pyinstaller --onefile --name oraset oraset.py + + - name: Create Debian package (Ubuntu only) + if: matrix.os == 'ubuntu-latest' + run: | + mkdir -p oraset_1.0.0_amd64/usr/bin + cp dist/oraset oraset_1.0.0_amd64/usr/bin/ + mkdir -p oraset_1.0.0_amd64/DEBIAN + echo 'Package: oraset' > oraset_1.0.0_amd64/DEBIAN/control + echo 'Version: 1.0.0' >> oraset_1.0.0_amd64/DEBIAN/control + echo 'Section: utils' >> oraset_1.0.0_amd64/DEBIAN/control + echo 'Priority: optional' >> oraset_1.0.0_amd64/DEBIAN/control + echo 'Architecture: amd64' >> oraset_1.0.0_amd64/DEBIAN/control + echo 'Depends: python3' >> oraset_1.0.0_amd64/DEBIAN/control + echo 'Maintainer: Oraset Team ' >> oraset_1.0.0_amd64/DEBIAN/control + echo 'Description: Oraset programming language interpreter' >> oraset_1.0.0_amd64/DEBIAN/control + dpkg-deb --build oraset_1.0.0_amd64 + + - name: Create DMG package (macOS only) + if: matrix.os == 'macos-latest' + run: | + mkdir -p Oraset.app/Contents/MacOS + cp dist/oraset Oraset.app/Contents/MacOS/ + echo '' > Oraset.app/Contents/Info.plist + echo '' >> Oraset.app/Contents/Info.plist + echo '' >> Oraset.app/Contents/Info.plist + echo '' >> Oraset.app/Contents/Info.plist + echo ' CFBundleExecutable' >> Oraset.app/Contents/Info.plist + echo ' oraset' >> Oraset.app/Contents/Info.plist + echo ' CFBundleName' >> Oraset.app/Contents/Info.plist + echo ' Oraset' >> Oraset.app/Contents/Info.plist + echo ' CFBundleIdentifier' >> Oraset.app/Contents/Info.plist + echo ' org.oraset.interpreter' >> Oraset.app/Contents/Info.plist + echo ' CFBundleVersion' >> Oraset.app/Contents/Info.plist + echo ' 1.0.0' >> Oraset.app/Contents/Info.plist + echo '' >> Oraset.app/Contents/Info.plist + echo '' >> Oraset.app/Contents/Info.plist + hdiutil create -srcfolder Oraset.app -volname Oraset -ov -format UDZO oraset.dmg + + - name: Upload artifacts + uses: actions/upload-artifact@v3 + with: + name: oraset-${{ matrix.os }} + path: | + ${{ matrix.os == 'windows-latest' && 'dist/oraset.exe' || '' }} + ${{ matrix.os == 'ubuntu-latest' && 'dist/oraset' || '' }} + ${{ matrix.os == 'ubuntu-latest' && 'oraset_1.0.0_amd64.deb' || '' }} + ${{ matrix.os == 'macos-latest' && 'dist/oraset' || '' }} + ${{ matrix.os == 'macos-latest' && 'oraset.dmg' || '' }} + + release: + needs: build + runs-on: ubuntu-latest + if: github.event_name == 'release' + steps: + - uses: actions/checkout@v3 + + - name: Download all artifacts + uses: actions/download-artifact@v3 + with: + path: artifacts + + - name: Upload release assets + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ github.event.release.upload_url }} + asset_path: artifacts/oraset-windows-latest/oraset.exe + asset_name: oraset-windows.exe + asset_content_type: application/octet-stream + + - name: Upload Linux binary + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ github.event.release.upload_url }} + asset_path: artifacts/oraset-ubuntu-latest/oraset + asset_name: oraset-linux + asset_content_type: application/octet-stream + + - name: Upload Debian package + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ github.event.release.upload_url }} + asset_path: artifacts/oraset-ubuntu-latest/oraset_1.0.0_amd64.deb + asset_name: oraset-linux.deb + asset_content_type: application/vnd.debian.binary-package + + - name: Upload macOS binary + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ github.event.release.upload_url }} + asset_path: artifacts/oraset-macos-latest/oraset + asset_name: oraset-macos + asset_content_type: application/octet-stream + + - name: Upload macOS DMG + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ github.event.release.upload_url }} + asset_path: artifacts/oraset-macos-latest/oraset.dmg + asset_name: oraset-macos.dmg + asset_content_type: application/x-apple-diskimage \ No newline at end of file