From f7fe16ea2931d972721b12f660167f467c764e9c Mon Sep 17 00:00:00 2001 From: Abhishek M J Date: Sat, 12 Oct 2024 17:26:17 +0530 Subject: [PATCH 1/2] Add testpypi build and release with uv - use pip install . --- .github/workflows/build.yaml | 137 +++++++++++++++++++++++++---------- .gitignore | 1 + pyproject.toml | 2 +- src/ytm2spt/__init__.py | 19 ----- uv.lock | 2 +- ytm2spt.py | 19 +++++ 6 files changed, 120 insertions(+), 60 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 81ec626..6c4334c 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -1,15 +1,13 @@ name: Build and Release -on: - push: - tags: - - "v*" +on: push jobs: build: + 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 +15,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 +75,84 @@ jobs: build/*.bin build/*.app/**/* overwrite: true + + publish-to-testpypi: + name: Publish Python 🐍 distribution 📦 to TestPyPI + needs: + - build + runs-on: ubuntu-latest + + environment: + name: testpypi + url: https://test.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 TestPyPI + uses: pypa/gh-action-pypi-publish@release/v1 + with: + repository-url: https://test.pypi.org/legacy/ release: - if: startsWith(github.ref, 'refs/tags/') - needs: build + needs: + - build + - publish-to-testpypi 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-${{ github.ref_name }}-windows.zip *-installer.exe + + - name: Zip 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: 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-${{ github.ref_name }}-windows.zip + *build/ytm2spt-${{ github.ref_name }}-linux.tar.gz + *build/ytm2spt-${{ github.ref_name }}-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..6a86398 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "ytm2spt" -version = "1.0.2" +version = "1.0.3-rc1" 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() From 2705c7021f04bdc81be213fb04a73903d07c9c9a Mon Sep 17 00:00:00 2001 From: Abhishek M J Date: Sat, 12 Oct 2024 19:24:14 +0530 Subject: [PATCH 2/2] Release package to pypi --- .github/workflows/build.yaml | 36 +++++++++++++++++++----------------- pyproject.toml | 2 +- 2 files changed, 20 insertions(+), 18 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 6c4334c..e03cd05 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -4,6 +4,8 @@ on: push jobs: build: + name: >- + Build and Package 📦 if: ${{ startsWith(github.ref, 'refs/tags/') || github.ref == 'refs/heads/release' }} strategy: matrix: @@ -76,16 +78,16 @@ jobs: build/*.app/**/* overwrite: true - publish-to-testpypi: - name: Publish Python 🐍 distribution 📦 to TestPyPI + 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: testpypi - url: https://test.pypi.org/p/ytm2spt - + name: pypi + url: https://pypi.org/p/ytm2spt permissions: id-token: write # IMPORTANT: mandatory for trusted publishing @@ -95,15 +97,15 @@ jobs: with: name: python-package-distributions path: dist/ - - name: Publish distribution 📦 to TestPyPI + - name: Publish distribution 📦 to PyPI uses: pypa/gh-action-pypi-publish@release/v1 - with: - repository-url: https://test.pypi.org/legacy/ - + release: + name: >- + Create a GitHub Release 🚀 needs: - build - - publish-to-testpypi + - publish-to-pypi runs-on: ubuntu-latest permissions: @@ -134,17 +136,17 @@ jobs: - name: Zip Windows Executable run: | cd *windows-build - zip -9 ytm2spt-${{ github.ref_name }}-windows.zip *-installer.exe + zip -9 ytm2spt-windows.zip *-installer.exe - name: Zip Linux Executable run: | cd *linux-build - tar -cavf ytm2spt-${{ github.ref_name }}-linux.tar.gz *.bin + tar -cavf ytm2spt-linux.tar.gz *.bin - name: Zip MacOS Executable run: | cd *macos-build - zip -r -9 ytm2spt-${{ github.ref_name }}-macos.zip *.app + zip -r -9 ytm2spt-macos.zip *.app - name: GitHub Release uses: softprops/action-gh-release@v2 @@ -152,7 +154,7 @@ jobs: draft: true generate_release_notes: true files: | - *build/ytm2spt-${{ github.ref_name }}-windows.zip - *build/ytm2spt-${{ github.ref_name }}-linux.tar.gz - *build/ytm2spt-${{ github.ref_name }}-macos.zip + *build/ytm2spt-windows.zip + *build/ytm2spt-linux.tar.gz + *build/ytm2spt-macos.zip dist/* diff --git a/pyproject.toml b/pyproject.toml index 6a86398..e17c861 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "ytm2spt" -version = "1.0.3-rc1" +version = "1.1.0" authors = [ { name="Abhishek M J", email="abhishekmj303@gmail.com" }, ]