ci: adopt python-semantic-release, fix hardcoded version strings

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Justin Visser 2026-02-27 00:07:25 +01:00
parent 3866c6d6f0
commit 6c31b331f7
3 changed files with 41 additions and 3 deletions

27
.github/workflows/release.yml vendored Normal file
View file

@ -0,0 +1,27 @@
name: Release
on:
push:
branches: [main]
jobs:
release:
runs-on: ubuntu-latest
if: github.repository == 'JustinZeus/scholarr'
permissions:
contents: write
id-token: write
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
token: ${{ secrets.GITHUB_TOKEN }}
- uses: actions/setup-python@v5
with:
python-version: "3.12"
- run: pip install python-semantic-release
- name: Semantic Release
id: release
run: semantic-release publish
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View file

@ -5,16 +5,19 @@ import logging
import re
import threading
import time
from importlib.metadata import version as pkg_version
from typing import TYPE_CHECKING
from crossref.restful import Etiquette, Works
from app.logging_utils import structured_log
from app.services.domains.doi.normalize import normalize_doi
from app.services.doi.normalize import normalize_doi
from app.settings import settings
_APP_VERSION = pkg_version("scholarr")
if TYPE_CHECKING:
from app.services.domains.publications.types import PublicationListItem, UnreadPublicationItem
from app.services.publications.types import PublicationListItem, UnreadPublicationItem
TOKEN_RE = re.compile(r"[a-z0-9]+")
NON_ALNUM_RE = re.compile(r"[^a-z0-9\\s]+")
@ -292,7 +295,7 @@ def _best_candidate_doi(
def _works_client(email: str | None) -> Works:
if email:
etiquette = Etiquette(settings.app_name, "0.1.0", "https://scholarr.local", email)
etiquette = Etiquette(settings.app_name, _APP_VERSION, "https://scholarr.local", email)
return Works(etiquette=etiquette)
return Works()

View file

@ -27,6 +27,7 @@ dependencies = [
dev = [
"pytest>=8.3,<9.0",
"pytest-asyncio>=0.25,<0.26",
"python-semantic-release>=9.0,<10.0",
"ruff>=0.9",
"mypy>=1.14",
]
@ -61,6 +62,13 @@ ignore_missing_imports = true
check_untyped_defs = false
warn_unused_ignores = true
[tool.semantic_release]
version_toml = ["pyproject.toml:project.version"]
version_variables = ["frontend/package.json:version"]
branch = "main"
build_command = ""
commit_message = "chore(release): v{version}"
[tool.setuptools]
include-package-data = true