Merge pull request #89 from JSchmie/pyproject.toml

Pyproject.toml
This commit is contained in:
Jacob Schmieder
2024-05-21 13:35:48 +02:00
committed by GitHub
12 changed files with 174 additions and 275 deletions
+44 -83
View File
@@ -1,112 +1,73 @@
name: Publish Python 🐍 distribution 📦 to PyPI and TestPyPI name: Publish Python 🐍 distribution 📦 to PyPI and TestPyPI
# on:
# workflow_dispatch:
# inputs:
# branch_name:
# description: 'Branch to build from (default is main)'
# required: false
# default: 'main'
# workflow_run:
# workflows: ["Run Tests"]
# types:
# - completed
# branches: [main, develop] # This ensures it only triggers for these branches
on: on:
push: push:
branches: branches:
- develop - develop
tags:
- v* # Push tags to trigger the workflow
workflow_dispatch: workflow_dispatch:
inputs: inputs:
branch_name: test:
description: 'Branch to build from (default is main)' description: "Push to TestPyPI not PyPI"
required: false default: true
default: 'main' type: boolean
env:
TestPyPI_URL: https://test.pypi.org/p/scraibe
PyPI_URL: https://pypi.org/p/scraibe
PyPI_DEV_URL: https://pypi.org/p/scraibe-nightly
ISRELEASED: true
jobs: jobs:
Build-and-publish-to-Test-PyPI:
build:
name: Build distribution 📦
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v4
with: with:
python-version: "3.x" fetch-depth: '0'
- name: Install dependencies - name: Set up Poetry 📦
run: | uses: JRubics/poetry-publish@v1.16
python3 -m pip install --upgrade pip
pip install setuptools wheel
- name: Build source distribution
run: |
python3 -c "import os; print('ISRELEASED' in os.environ)"
python3 setup.py sdist
- name: Store the distribution packages
uses: actions/upload-artifact@v3
with: with:
name: python-package-distributions pypi_token: ${{ secrets.TEST_PYPI_API_TOKEN }}
path: dist/ plugins: "poetry-dynamic-versioning"
repository_name: "scraibe"
publish-to-testpypi: repository_url: "https://test.pypi.org/legacy/"
name: Publish Python 🐍 distribution 📦 to TestPyPI
needs: build
runs-on: ubuntu-latest
environment:
name: testpypi
url: env.TestPyPI_URL
permissions:
id-token: write
steps:
- name: Download all the dists
uses: actions/download-artifact@v3
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/
skip-existing: true
test-install: test-install:
name: Test Installation from TestPyPI name: Test Installation from TestPyPI
needs: publish-to-testpypi needs: Build-and-publish-to-Test-PyPI
runs-on: ubuntu-latest runs-on: ubuntu-latest
strategy:
matrix:
python-version: [3.9, 3.11, 3.12]
steps: steps:
- name: Set up Python - uses: actions/checkout@v4
uses: actions/setup-python@v4 - name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with: with:
python-version: "3.x" python-version: ${{ matrix.python-version }}
- name: Install package - name: Install package
run: | run: |
python3 -m pip install setuptools pip install -U setuptools
python3 -m pip install --index-url https://test.pypi.org/simple/ scraibe pip install -r requirements.txt
python3 -m pip install --no-deps --pre --index-url https://test.pypi.org/simple/ scraibe>=0.1.3
python3 -c "import scraibe; print(scraibe.__version__)"
publish-to-pypi: publish-to-pypi:
name: Conditional Publish to PyPI or Dev Repository name: Publish to PyPI
needs: [build, test-install] needs: test-install
runs-on: ubuntu-latest runs-on: ubuntu-latest
environment:
name: pypi
url: env.PyPI_URL
permissions:
id-token: write
steps: steps:
- name: Download all the dists - name: Checkout Repository Tags
uses: actions/download-artifact@v3 uses: actions/checkout@v4
if: github.ref == 'refs/tags/v*'
with: with:
name: python-package-distributions fetch-depth: '0'
path: dist/ branch: 'main'
- name: Publish distribution 📦 to PyPI or Dev Repository - name: Checkout Repository (Develop)
uses: pypa/gh-action-pypi-publish@release/v1 uses: actions/checkout@v4
if: github.ref == "refs/heads/develop"
with: with:
repository-url: ${{ github.ref == 'refs/heads/main' && 'env.PyPI_URL' || ' env.PyPI_DEV_URL' }} fetch-depth: '0'
password: ${{ secrets.PYPI_API_TOKEN}} branch: 'develop'
- name: Set up Poetry 📦
uses: JRubics/poetry-publish@v1.16
with:
pypi_token: ${{ secrets.PYPI_API_TOKEN }}
plugins: "poetry-dynamic-versioning"
repository_name: "scraibe"
+2 -5
View File
@@ -1,8 +1,6 @@
name: Run Tests name: Run Tests
on: on:
#push:
pull_request: pull_request:
branches: ['main', 'develop'] branches: ['main', 'develop']
workflow_dispatch: workflow_dispatch:
@@ -14,6 +12,8 @@ jobs:
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v3 uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Setup Python - name: Setup Python
uses: actions/setup-python@v3 uses: actions/setup-python@v3
@@ -31,9 +31,6 @@ jobs:
sudo apt-get install ffmpeg sudo apt-get install ffmpeg
pip install pytest pip install pytest
- name: Run pytest - name: Run pytest
env: env:
HF_TOKEN : ${{ secrets.HF_TOKEN }} HF_TOKEN : ${{ secrets.HF_TOKEN }}
+1
View File
@@ -3,6 +3,7 @@ on: [ push, pull_request ]
jobs: jobs:
ruff: ruff:
runs-on: ubuntu-latest runs-on: ubuntu-latest
if: ${{ github.event_name == 'pull_request' || (github.event_name == 'push') }}
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- uses: chartboost/ruff-action@v1 - uses: chartboost/ruff-action@v1
+48
View File
@@ -0,0 +1,48 @@
name: Semantic Versioning for Tags
on:
pull_request:
types: [closed]
branches:
- main
jobs:
bump-version:
if: ${{ github.event.pull_request.merged == true $$ github.event.pull_request.base.ref == 'main' }}
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Bump Version and Tag
run: |
# Fetch the latest tags from the remote
git fetch --tags
# Get the latest tag
latest_tag=$(git describe --tags `git rev-list --tags --max-count=1`)
# Split the latest tag into parts
IFS='.' read -r -a parts <<< "${latest_tag#v}"
# Increment the patch version
major=${parts[0]}
minor=${parts[1]}
patch=${parts[2]}
new_patch=$((patch + 1))
# Create a new tag
new_tag="v$major.$minor.$new_patch"
echo "Bumping version from $latest_tag to $new_tag"
# Tag the new version
git tag $new_tag
# Configure GitHub token authentication
git remote set-url origin https://x-access-token:${{ secrets.GH_TOKEN }}@github.com/${{ github.repository }}.git
# Push the new tag to the remote repository
git push origin $new_tag
-2
View File
@@ -1,2 +0,0 @@
[lint.extend-per-file-ignores]
"__init__.py" = ["E402","F403"]
-6
View File
@@ -1,6 +0,0 @@
recursive-include scraibe *.py
recursive-include scraibe *.yaml
recursive-exclude test/*
global-include requirements.txt
global-exclude *.pyc
global-exclude __pycache__
+72
View File
@@ -0,0 +1,72 @@
[build-system]
requires = ["poetry-core>=1.8.0", "poetry-dynamic-versioning>=1.0.0,<2.0.0"]
build-backend = "poetry_dynamic_versioning.backend"
[tool.poetry]
name = "scraibe"
version = "0.0.0"
description = "Transcription tool for audio files based on Whisper and Pyannote"
authors = ["Schmieder, Jacob <jacob.schmieder@dbfz.de>"]
license = "GPL-3.0-or-later"
readme = ["README.md", "LICENSE"]
repository = "https://github.com/JSchmie/ScAIbe"
documentation = "https://jschmie.github.io/ScrAIbe/"
keywords = ["transcription", "audio", "whisper", "pyannote", "speech-to-text", "speech-recognition"]
classifiers = [
'Development Status :: 4 - Beta',
'Intended Audience :: Developers',
'License :: OSI Approved :: GNU General Public License v3 (GPLv3)',
'Programming Language :: Python :: 3.8',
'Programming Language :: Python :: 3.9',
'Programming Language :: Python :: 3.10',
'Programming Language :: Python :: 3.11',
'Environment :: GPU :: NVIDIA CUDA :: 12 :: 12.1',
'Topic :: Scientific/Engineering :: Artificial Intelligence'
]
packages = [{include = "scraibe"}]
exclude =[
"__pycache__",
"*.pyc",
"test"
]
[tool.poetry.dependencies]
python = "^3.9"
tqdm = "^4.66.4"
numpy = "^1.26.4"
openai-whisper = "^20231117"
"pyannote.audio" = "^3.2.0"
torch = "^2.3.0"
[tool.poetry.group.dev.dependencies]
pytest = "^8.1.1"
[tool.poetry-dynamic-versioning]
enable = true
vcs = "git"
strict = true
format-jinja = """
{%- if distance == 0 -%}
{{ serialize_pep440(base) }}
{%- elif branch == 'pyproject.toml' -%}
{{ serialize_pep440(bump_version(base), dev = distance) }}
{%- else -%}
{{ serialize_pep440(bump_version(base), dev=distance, metadata=[commit]) }}
{%- endif -%}
"""
[tool.poetry.group.docs.dependencies]
sphinx = "^7.3.7"
sphinx-rtd-theme = "^2.0.0"
markdown-it-py = {version = "~3.0.0", extras = ["plugins"]}
myst-parser = "^3.0.1"
mdit-py-plugins = "^0.4.1"
[tool.poetry.scripts]
scraibe = "scraibe.cli:cli"
[tool.poetry.extras]
app = ["scraibe-webui"]
[tool.ruff.lint.extend-per-file-ignores]
"__init__.py" = ["E402","F403",'F401']
"scraibe/misc.py" = ["E722"]
+1 -2
View File
@@ -4,9 +4,8 @@ from .audio import *
from .transcript_exporter import * from .transcript_exporter import *
from .diarisation import * from .diarisation import *
from .version import get_version as _get_version
from .misc import * from .misc import *
from .cli import * from .cli import *
__version__ = _get_version() from ._version import __version__
+1
View File
@@ -0,0 +1 @@
__version__ = "0.0.0"
-71
View File
@@ -1,71 +0,0 @@
import os
import subprocess as sp
MAJOR = 0
MINOR = 1
MICRO = 1
NANO = 2
ISRELEASED = False
VERSION = '%d.%d.%d.%d' % (MAJOR, MINOR, MICRO, NANO)
# Return the git revision as a string
# taken from numpy/numpy
def git_version():
def _minimal_ext_cmd(cmd):
# construct minimal environment
env = {}
for k in ['SYSTEMROOT', 'PATH', 'HOME']:
v = os.environ.get(k)
if v is not None:
env[k] = v
# LANGUAGE is used on win32
env['LANGUAGE'] = 'C'
env['LANG'] = 'C'
env['LC_ALL'] = 'C'
out = sp.Popen(cmd, stdout=sp.PIPE, stderr=sp.PIPE,
env=env).communicate()[0]
return out
try:
out = _minimal_ext_cmd(['git', 'rev-parse', 'HEAD'])
GIT_REVISION = out.strip().decode('ascii')
except OSError:
GIT_REVISION = "Unknown"
return GIT_REVISION
def _get_git_version():
cwd = os.getcwd()
# go to the main directory
fdir = os.path.dirname(os.path.abspath(__file__))
maindir = os.path.abspath(os.path.join(fdir, ".."))
# maindir = fdir # os.path.join(fdir, "..")
os.chdir(maindir)
# get git version
res = git_version()
# restore the cwd
os.chdir(cwd)
return res
def get_version(build_version=False):
if ISRELEASED:
return VERSION
# unreleased version
GIT_REVISION = _get_git_version()
if build_version:
import datetime as dt
date = dt.date.strftime(dt.datetime.now(), "%Y%m%d%H%M%S")
return VERSION + ".dev" + date
else:
return VERSION + ".dev0+" + GIT_REVISION[:7]
-32
View File
@@ -1,32 +0,0 @@
[metadata]
name = scraibe
version = attr: scraibe.__version__
author = Jacob Schmieder
author_email = Jacob.Schmieder@dbfz.de
description = My package description
long_description = file: README.md, file: LICENSE
long_description_content_type = text/markdown; charset=UTF-8; variant=GFM
platforms = Linux
keywords = transcription speech recognition whisper pyannote audio speech-to-text speech-to-text transcription speech-to-text recognition voice-to-speech
license = GPL-3.0
classifiers =
Development Status :: 3 - Alpha
Environment :: GPU :: NVIDIA CUDA :: 11.2
License :: OSI Approved :: Open Software License 3.0 (OSL-3.0)
Topic :: Scientific/Engineering :: Artificial Intelligence
Programming Language :: Python :: 3.8
Programming Language :: Python :: 3.9
Programming Language :: Python :: 3.10
[options]
zip_safe = False
include_package_data = True
packages = find:
python_requires = >=3.7
install_requires =
requests
importlib-metadata; python_version<"3.8"
[options.entry_points]
console_scripts =
executable-name = scraibe.cli:cli
-69
View File
@@ -1,69 +0,0 @@
import os
from setuptools import setup, find_packages
module_name = "scraibe"
github_url = "https://github.com/JSchmie/ScAIbe"
file_dir = os.path.dirname(os.path.realpath(__file__))
absdir = lambda p: os.path.join(file_dir, p)
############### versioning ###############
verfile = os.path.abspath(os.path.join(module_name, "version.py"))
version = {"__file__": verfile}
with open(verfile, "r") as fp:
exec(fp.read(), version)
############### setup ###############
build_version = "SCRAIBE_BUILD" in os.environ
version["ISRELEASED"] = True if "ISRELEASED" in os.environ else False
############### load requirements ###############
with open(os.path.join(os.path.dirname(__file__), "requirements.txt")) as f:
requirements = [line.strip() for line in f if line.strip() and not line.startswith('#')]
print(f"Launch Version: {version['get_version'](build_version)}")
if __name__ == "__main__":
setup(
name = module_name,
version = version["get_version"](build_version),
packages = find_packages(),
python_requires = ">=3.8",
readme = "README.md",
install_requires = requirements,
extras_require = {
"app" : ["scraibe-webui"],
},
# dependency_links=[
# 'https://download.pytorch.org/whl/cu113',
# ],
url = github_url,
license = 'GPL-3',
author = 'Jacob Schmieder',
author_email = 'Jacob.Schmieder@dbfz.de',
description = 'Transcription tool for audio files based on Whisper and Pyannote',
classifiers = [
'Development Status :: 3 - Alpha',
'Environment :: GPU :: NVIDIA CUDA :: 11.2',
'License :: OSI Approved :: Open Software License 3.0 (OSL-3.0)',
'Topic :: Scientific/Engineering :: Artificial Intelligence',
'Programming Language :: Python :: 3.8',
'Programming Language :: Python :: 3.9',
'Programming Language :: Python :: 3.10'],
keywords = ['transcription', 'speech recognition', 'whisper', 'pyannote', 'audio', 'ScrAIbe', 'scraibe',
'speech-to-text', 'speech-to-text transcription', 'speech-to-text recognition',
'voice-to-speech'],
include_package_data=True,
package_data = {'scraibe.app' : ["*.html", "*.svg","*.yml"]},
entry_points = {'console_scripts':
['scraibe = scraibe.cli:cli']}
)