{"id":51582459,"url":"https://github.com/modern-python/semvertag","last_synced_at":"2026-07-11T07:03:33.830Z","repository":{"id":361697652,"uuid":"1255240408","full_name":"modern-python/semvertag","owner":"modern-python","description":"Auto-tag GitHub \u0026 GitLab repos with semantic version tags from CI","archived":false,"fork":false,"pushed_at":"2026-07-01T20:44:14.000Z","size":1566,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-07-01T22:25:28.945Z","etag":null,"topics":["auto-tag","ci","cli","conventional-commits","git","github","gitlab","python","semver","versioning"],"latest_commit_sha":null,"homepage":"https://semvertag.modern-python.org","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/modern-python.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-31T15:29:37.000Z","updated_at":"2026-07-01T20:42:32.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/modern-python/semvertag","commit_stats":null,"previous_names":["modern-python/semvertag"],"tags_count":15,"template":false,"template_full_name":null,"purl":"pkg:github/modern-python/semvertag","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/modern-python%2Fsemvertag","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/modern-python%2Fsemvertag/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/modern-python%2Fsemvertag/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/modern-python%2Fsemvertag/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/modern-python","download_url":"https://codeload.github.com/modern-python/semvertag/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/modern-python%2Fsemvertag/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35353670,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-11T02:00:05.354Z","response_time":104,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["auto-tag","ci","cli","conventional-commits","git","github","gitlab","python","semver","versioning"],"created_at":"2026-07-11T07:03:33.765Z","updated_at":"2026-07-11T07:03:33.825Z","avatar_url":"https://github.com/modern-python.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cpicture\u003e\n    \u003csource media=\"(prefers-color-scheme: dark)\"  srcset=\"https://raw.githubusercontent.com/modern-python/.github/main/brand/projects/semvertag/lockup-dark.svg\"\u003e\n    \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"https://raw.githubusercontent.com/modern-python/.github/main/brand/projects/semvertag/lockup-light.svg\"\u003e\n    \u003cimg alt=\"semvertag\" src=\"https://raw.githubusercontent.com/modern-python/.github/main/brand/projects/semvertag/lockup.png\" width=\"420\"\u003e\n  \u003c/picture\u003e\n\u003c/p\u003e\n\n[![PyPI version](https://img.shields.io/pypi/v/semvertag.svg)](https://pypi.org/project/semvertag/)\n[![Supported Python versions](https://img.shields.io/pypi/pyversions/semvertag.svg)](https://pypi.org/project/semvertag/)\n[![Downloads](https://static.pepy.tech/badge/semvertag/month)](https://pepy.tech/projects/semvertag)\n[![Coverage](https://img.shields.io/badge/coverage-100%25-brightgreen.svg)](https://github.com/modern-python/semvertag/actions/workflows/ci.yml)\n[![CI](https://github.com/modern-python/semvertag/actions/workflows/ci.yml/badge.svg)](https://github.com/modern-python/semvertag/actions/workflows/ci.yml)\n[![License](https://img.shields.io/github/license/modern-python/semvertag.svg)](https://github.com/modern-python/semvertag/blob/main/LICENSE)\n[![GitHub stars](https://img.shields.io/github/stars/modern-python/semvertag)](https://github.com/modern-python/semvertag/stargazers)\n[![Context7](https://img.shields.io/badge/Context7-docs-blue)](https://context7.com/modern-python/semvertag)\n[![uv](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/uv/main/assets/badge/v0.json)](https://github.com/astral-sh/uv)\n[![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)\n[![ty](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ty/main/assets/badge/v0.json)](https://github.com/astral-sh/ty)\n\nAuto-tag your GitLab or GitHub repository with semantic version tags from CI — one tool, two strategies, two providers.\n\n## Install\n\n```sh\nuvx semvertag tag\n```\n\n## Use it in GitLab CI\n\nPaste this job into your `.gitlab-ci.yml`:\n\n```yaml\nstages: [tag]\n\nsemvertag:\n  stage: tag\n  image: python:3.13-slim\n  variables:\n    SEMVERTAG_STRATEGY: branch-prefix  # or: conventional-commits\n  before_script:\n    - pip install --quiet 'uv\u003e=0.4,\u003c1'\n  script:\n    - uvx 'semvertag\u003e=0.5.0,\u003c1' tag\n  rules:\n    - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'\n```\n\nIt runs `uvx semvertag tag` against your repo on the default branch.\nsemvertag inspects the latest commit + tag history, decides the\nappropriate semver bump, and creates the new tag via the GitLab API.\n\n\u003e A one-line `include: - component: …` via the GitLab CI Catalog will\n\u003e replace this snippet once the component is published. For now, paste\n\u003e the job inline.\n\n## Use it in GitHub Actions\n\nPaste this workflow into `.github/workflows/semvertag.yml`:\n\n```yaml\nname: semvertag\non:\n  push:\n    branches: [main]\n\npermissions:\n  contents: write\n\njobs:\n  tag:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n        with:\n          fetch-depth: 0\n      - uses: modern-python/semvertag@v0\n```\n\nsemvertag auto-detects GitHub Actions, picks the bump from the latest\ncommit, and creates the tag ref via the GitHub API. `fetch-depth: 0`\nmatters — the default `1` misses tag-relative history. See\n[GitHub Actions docs](docs/providers/github.md) for token scopes,\nGitHub Enterprise setup, outputs, and troubleshooting.\n\n## Strategies\n\n- **branch-prefix** (default): the latest commit on the default branch\n  must be a merge commit whose source branch starts with `feature/`\n  (minor), `bugfix/`, or `hotfix/` (patch).\n- **conventional-commits**: parses the latest commit's\n  [Conventional Commits](https://www.conventionalcommits.org/)\n  header (`feat:` minor, `fix:`/`perf:` patch, `!` or `BREAKING\n  CHANGE:` major).\n\nBoth are configurable via env vars. See [docs](https://semvertag.modern-python.org)\nfor the full configuration surface.\n\n## Built with\n\nsemvertag stands on other `modern-python` libraries:\n\n- **[modern-di-typer](https://github.com/modern-python/modern-di-typer)** —\n  dependency-injection wiring for the Typer CLI. semvertag resolves its\n  settings, API providers, and bump strategies through a `modern_di` container\n  ([`semvertag/ioc.py`](semvertag/ioc.py)).\n- **[httpware](https://github.com/modern-python/httpware)** — the resilient\n  HTTP client both providers use for the GitLab/GitHub REST calls (retries,\n  timeouts, typed decoding, secret redaction).\n\n## 📚 [Documentation](https://semvertag.modern-python.org)\n\n## 📦 [PyPI](https://pypi.org/project/semvertag)\n\n## 📝 [License](LICENSE)\n\n## Part of `modern-python`\n\nBrowse the full list of templates and libraries in\n[`modern-python`](https://github.com/modern-python) — see the org profile for the categorized index.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmodern-python%2Fsemvertag","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmodern-python%2Fsemvertag","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmodern-python%2Fsemvertag/lists"}