diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1dd8b91..ead52c6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -17,6 +17,7 @@ jobs: - name: ๐Ÿงช tox -e ${{ matrix.tox_env }} run: uv run tox -e ${{ matrix.tox_env }} - name: "๐Ÿ” codecov: upload test coverage" + continue-on-error: true uses: codecov/codecov-action@v4.2.0 with: flags: ${{ matrix.tox_env }} diff --git a/.github/workflows/doc.yml b/.github/workflows/doc.yml index 0400ea3..e42778e 100644 --- a/.github/workflows/doc.yml +++ b/.github/workflows/doc.yml @@ -2,20 +2,21 @@ name: Build & Publish Doc on: push: - tags: - - '*' branches: + - main - docs/** workflow_dispatch: +concurrency: + group: docs + cancel-in-progress: true + jobs: Build-Doc: runs-on: ubuntu-latest - concurrency: release permissions: - contents: write - id-token: write + contents: read steps: - name: ๐Ÿ“ฅ checkout uses: actions/checkout@v7 @@ -24,7 +25,7 @@ jobs: - name: ๐Ÿ”ง setup uv uses: ./.github/uv - name: โš™๏ธ install deps - run: uv sync --extra docs + run: uv sync --group docs - name: ๐Ÿ“™ mkdocs build run: uv run mkdocs build - name: ๐Ÿ“ฆ Upload artifacts @@ -44,4 +45,4 @@ jobs: uses: actions/deploy-pages@v4 environment: name: github-pages - url: ${{ steps.deployment.outputs.page_url }} \ No newline at end of file + url: ${{ steps.deployment.outputs.page_url }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 59dddb9..1a62228 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -18,20 +18,19 @@ jobs: uses: actions/checkout@v7 with: fetch-depth: 0 + token: ${{ secrets.GH_PERSONAL_ACCESS_TOKEN }} - name: ๐Ÿ”ง setup uv uses: ./.github/uv - name: ๐Ÿ“œ semantic release version & publish on PyPI run: | - RET_CODE=0 - uv run semantic-release --strict version || RET_CODE=$? - if [ $RET_CODE -ne 0 ]; then + next_version=$(uv run semantic-release version --print) + last_released_version=$(uv run semantic-release version --print-last-released) + if [[ "$next_version" == "$last_released_version" ]]; then echo "๐Ÿ™…๐Ÿฝ Nothing to publish" else - echo "๐Ÿ™†๐Ÿฝ Publishing on PyPI" - uv build - uv run twine upload dist/* + uv run semantic-release --strict version fi env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GH_TOKEN: ${{ secrets.GH_PERSONAL_ACCESS_TOKEN }} TWINE_USERNAME: ${{ secrets.TWINE_USERNAME }} TWINE_PASSWORD: ${{ secrets.TWINE_PASSWORD }} diff --git a/pyproject.toml b/pyproject.toml index 09bc3ad..a01bda8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -44,6 +44,12 @@ Changelog = "https://github.com/hadrien/fastsqla/releases" license-files = [] [project.optional-dependencies] +sqlmodel = ["sqlmodel>=0.0.22"] + +[tool.uv] +package = true + +[dependency-groups] docs = [ "mkdocs-glightbox>=0.5.2", "mkdocs-llmstxt>=0.5.0", @@ -51,12 +57,6 @@ docs = [ "mkdocstrings[python]>=1.0.0", "pygments @ git+https://github.com/pygments/pygments.git@b6f6dab78e13652741d5e5811b4256b4dcb5fcd8", ] -sqlmodel = ["sqlmodel>=0.0.22"] - -[tool.uv] -package = true - -[dependency-groups] dev = [ "asgi-lifespan>=2.1.0", "coverage>=7.6.1", @@ -94,9 +94,24 @@ env = "GH_TOKEN" [tool.semantic_release] version_toml = ["pyproject.toml:project.version"] allow_zero_version = true +build_command_env = ["TWINE_USERNAME", "TWINE_PASSWORD"] +build_command = """ +uv lock && +git add uv.lock && +uv build && +uv run twine check dist/* && +uv run twine upload --non-interactive --skip-existing --verbose dist/* +""" +commit_message = """\ +chore(release): v{version} + +Automatically generated by python-semantic-release +""" [tool.semantic_release.commit_parser_options] -patch_tags = ["fix", "perf", "build"] +minor_tags = ["feat"] +patch_tags = ["build", "ci", "docs", "fix", "perf", "refactor", "style", "test"] +other_allowed_tags = ["chore"] [tool.semantic_release.changelog] mode = "init" diff --git a/uv.lock b/uv.lock index 87b6000..60dd4a3 100644 --- a/uv.lock +++ b/uv.lock @@ -399,13 +399,6 @@ dependencies = [ ] [package.optional-dependencies] -docs = [ - { name = "mkdocs-glightbox" }, - { name = "mkdocs-llmstxt" }, - { name = "mkdocs-material" }, - { name = "mkdocstrings", extra = ["python"] }, - { name = "pygments" }, -] sqlmodel = [ { name = "sqlmodel" }, ] @@ -427,20 +420,22 @@ dev = [ { name = "toml" }, { name = "twine" }, ] +docs = [ + { name = "mkdocs-glightbox" }, + { name = "mkdocs-llmstxt" }, + { name = "mkdocs-material" }, + { name = "mkdocstrings", extra = ["python"] }, + { name = "pygments" }, +] [package.metadata] requires-dist = [ { name = "fastapi", specifier = ">=0.115.6" }, - { name = "mkdocs-glightbox", marker = "extra == 'docs'", specifier = ">=0.5.2" }, - { name = "mkdocs-llmstxt", marker = "extra == 'docs'", specifier = ">=0.5.0" }, - { name = "mkdocs-material", marker = "extra == 'docs'", specifier = ">=9.7.1" }, - { name = "mkdocstrings", extras = ["python"], marker = "extra == 'docs'", specifier = ">=1.0.0" }, - { name = "pygments", marker = "extra == 'docs'", git = "https://github.com/pygments/pygments.git?rev=b6f6dab78e13652741d5e5811b4256b4dcb5fcd8" }, { name = "sqlalchemy", extras = ["asyncio"], specifier = ">=2.0.37" }, { name = "sqlmodel", marker = "extra == 'sqlmodel'", specifier = ">=0.0.22" }, { name = "structlog", specifier = ">=24.4.0" }, ] -provides-extras = ["docs", "sqlmodel"] +provides-extras = ["sqlmodel"] [package.metadata.requires-dev] dev = [ @@ -459,6 +454,13 @@ dev = [ { name = "toml", specifier = ">=0.10.2" }, { name = "twine", specifier = ">=5.1.1" }, ] +docs = [ + { name = "mkdocs-glightbox", specifier = ">=0.5.2" }, + { name = "mkdocs-llmstxt", specifier = ">=0.5.0" }, + { name = "mkdocs-material", specifier = ">=9.7.1" }, + { name = "mkdocstrings", extras = ["python"], specifier = ">=1.0.0" }, + { name = "pygments", git = "https://github.com/pygments/pygments.git?rev=b6f6dab78e13652741d5e5811b4256b4dcb5fcd8" }, +] [[package]] name = "ghp-import"