diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 81ec626..e03cd05 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -1,15 +1,15 @@ name: Build and Release -on: - push: - tags: - - "v*" +on: push jobs: build: + name: >- + Build and Package 📦 + if: ${{ startsWith(github.ref, 'refs/tags/') || github.ref == 'refs/heads/release' }} strategy: matrix: - os: [macos-latest, ubuntu-latest, windows-latest] + os: [windows-latest, ubuntu-latest, macos-latest] runs-on: ${{ matrix.os }} @@ -17,17 +17,34 @@ jobs: - name: Check-out repository uses: actions/checkout@v4 + - name: Install uv + uses: astral-sh/setup-uv@v3 + with: + enable-cache: true + - name: Setup Python uses: actions/setup-python@v5 with: - python-version: "3.11" + python-version-file: ".python-version" cache: "pip" cache-dependency-path: | **/requirements*.txt - - name: Install your Dependencies + - name: Install the project + run: pip install . + + - name: Build a binary wheel and a source tarball + if: matrix.os == 'ubuntu-latest' run: | - pip install -r requirements.txt + uv build + + - name: Store the distribution packages + if: matrix.os == 'ubuntu-latest' + uses: actions/upload-artifact@v4 + with: + name: python-package-distributions + path: dist/ + overwrite: true - name: Build Executable with Nuitka uses: Nuitka/Nuitka-Action@main @@ -60,40 +77,84 @@ jobs: build/*.bin build/*.app/**/* overwrite: true - + + publish-to-pypi: + name: >- + Publish Python 🐍 distribution 📦 to PyPI + if: startsWith(github.ref, 'refs/tags/') # only publish to PyPI on tag pushes + needs: + - build + runs-on: ubuntu-latest + environment: + name: pypi + url: https://pypi.org/p/ytm2spt + permissions: + id-token: write # IMPORTANT: mandatory for trusted publishing + + steps: + - name: Download all the dists + uses: actions/download-artifact@v4 + with: + name: python-package-distributions + path: dist/ + - name: Publish distribution 📦 to PyPI + uses: pypa/gh-action-pypi-publish@release/v1 + release: - if: startsWith(github.ref, 'refs/tags/') - needs: build + name: >- + Create a GitHub Release 🚀 + needs: + - build + - publish-to-pypi runs-on: ubuntu-latest + + permissions: + contents: write # IMPORTANT: mandatory for making GitHub Releases + id-token: write # IMPORTANT: mandatory for sigstore + steps: - - name: Download All Artifacts - uses: actions/download-artifact@v4 - - run: ls -R + - name: Download all the dists + uses: actions/download-artifact@v4 + with: + name: python-package-distributions + path: dist/ + - name: Sign the dists with Sigstore + uses: sigstore/gh-action-sigstore-python@v2.1.1 + with: + inputs: >- + ./dist/*.tar.gz + ./dist/*.whl + + - name: Download All Artifacts + uses: actions/download-artifact@v4 + - run: ls -R - - name: Add Executable Permissions - run: | - chmod +x *build/*.bin *build/*.exe *build/*.app/Contents/MacOS/* - - - name: Zip Windows Executable - run: | - cd *windows-build - zip -9 ytm2spt-${{ github.ref_name }}-windows.zip *-installer.exe - - - name: Tar Linux Executable - run: | - cd *linux-build - tar -cavf ytm2spt-${{ github.ref_name }}-linux.tar.gz *.bin - - - name: Zip MacOS Executable - run: | - cd *macos-build - zip -r -9 ytm2spt-${{ github.ref_name }}-macos.zip *.app + - name: Add Executable Permissions + run: | + chmod +x *build/*.bin *build/*.exe *build/*.app/Contents/MacOS/* + + - name: Zip Windows Executable + run: | + cd *windows-build + zip -9 ytm2spt-windows.zip *-installer.exe + + - name: Zip Linux Executable + run: | + cd *linux-build + tar -cavf ytm2spt-linux.tar.gz *.bin + + - name: Zip MacOS Executable + run: | + cd *macos-build + zip -r -9 ytm2spt-macos.zip *.app - - name: Release - uses: softprops/action-gh-release@v2 - with: - draft: true - files: | - *build/ytm2spt-${{ github.ref_name }}-windows.zip - *build/ytm2spt-${{ github.ref_name }}-linux.tar.gz - *build/ytm2spt-${{ github.ref_name }}-macos.zip + - name: GitHub Release + uses: softprops/action-gh-release@v2 + with: + draft: true + generate_release_notes: true + files: | + *build/ytm2spt-windows.zip + *build/ytm2spt-linux.tar.gz + *build/ytm2spt-macos.zip + dist/* diff --git a/.gitignore b/.gitignore index 53fb7f9..56b04ac 100644 --- a/.gitignore +++ b/.gitignore @@ -18,3 +18,4 @@ ytmusicapi-oauth.json *.exe venv dist +build diff --git a/pyproject.toml b/pyproject.toml index 2810b92..e17c861 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "ytm2spt" -version = "1.0.2" +version = "1.1.0" authors = [ { name="Abhishek M J", email="abhishekmj303@gmail.com" }, ] diff --git a/src/ytm2spt/__init__.py b/src/ytm2spt/__init__.py index ca90222..579e174 100644 --- a/src/ytm2spt/__init__.py +++ b/src/ytm2spt/__init__.py @@ -1,22 +1,3 @@ -# Nuitka Configuration -# nuitka-project: --enable-plugins=pyside6 -# nuitka-project: --user-package-configuration-file=ytmusicapi.nuitka-package.config.yaml -# -# Compilation mode, standalone everywhere, except on macOS there app bundle -# nuitka-project-if: {OS} in ("Linux", "FreeBSD"): -# nuitka-project: --onefile -# nuitka-project-if: {OS} == "Windows": -# nuitka-project: --standalone -# nuitka-project-if: {OS} == "Darwin": -# nuitka-project: --standalone -# nuitka-project: --macos-create-app-bundle -# -# Debugging options, controlled via environment variable at compile time. -# nuitka-project-if: os.getenv("DEBUG_COMPILATION", "yes") == "yes": -# nuitka-project: --enable-console -# nuitka-project-else: -# nuitka-project: --disable-console - import sys diff --git a/uv.lock b/uv.lock index 61b5bcf..662b041 100644 --- a/uv.lock +++ b/uv.lock @@ -328,7 +328,7 @@ wheels = [ [[package]] name = "ytm2spt" -version = "1.0.2" +version = "1.0.3rc1" source = { editable = "." } dependencies = [ { name = "pyside6" }, diff --git a/ytm2spt.py b/ytm2spt.py index e46132b..a2fb7e4 100644 --- a/ytm2spt.py +++ b/ytm2spt.py @@ -1,3 +1,22 @@ +# Nuitka Configuration +# nuitka-project: --enable-plugins=pyside6 +# nuitka-project: --user-package-configuration-file=ytmusicapi.nuitka-package.config.yaml +# +# Compilation mode, standalone everywhere, except on macOS there app bundle +# nuitka-project-if: {OS} in ("Linux", "FreeBSD"): +# nuitka-project: --onefile +# nuitka-project-if: {OS} == "Windows": +# nuitka-project: --standalone +# nuitka-project-if: {OS} == "Darwin": +# nuitka-project: --standalone +# nuitka-project: --macos-create-app-bundle +# +# Debugging options, controlled via environment variable at compile time. +# nuitka-project-if: os.getenv("DEBUG_COMPILATION", "yes") == "yes": +# nuitka-project: --enable-console +# nuitka-project-else: +# nuitka-project: --disable-console + from src.ytm2spt import main main()