From 8b9059fbe24a5123dfe3970f054108f0eecd7f41 Mon Sep 17 00:00:00 2001 From: Abhishek Kumar Date: Tue, 2 Jun 2026 13:42:55 +0530 Subject: [PATCH] chore: format release please changelogs --- .github/release.yml | 25 +++++++++ .github/workflows/pr-conventional-labeler.yml | 54 +++++++++++++++++++ .../telephony/providers/telnyx/strategies.py | 4 +- .../telephony/test_call_transfer_manager.py | 12 ++--- api/tests/test_public_signaling_origin.py | 8 +-- release-please-config.json | 1 + 6 files changed, 86 insertions(+), 18 deletions(-) create mode 100644 .github/release.yml create mode 100644 .github/workflows/pr-conventional-labeler.yml diff --git a/.github/release.yml b/.github/release.yml new file mode 100644 index 0000000..4eadcef --- /dev/null +++ b/.github/release.yml @@ -0,0 +1,25 @@ +changelog: + exclude: + labels: + - chore + - "autorelease: pending" + - "autorelease: tagged" + categories: + - title: Features + labels: + - feat + - title: Bug Fixes + labels: + - fix + - title: Documentation + labels: + - docs + - title: Performance Improvements + labels: + - perf + - title: Code Refactoring + labels: + - refactor + - title: Other Changes + labels: + - "*" diff --git a/.github/workflows/pr-conventional-labeler.yml b/.github/workflows/pr-conventional-labeler.yml new file mode 100644 index 0000000..3f76c77 --- /dev/null +++ b/.github/workflows/pr-conventional-labeler.yml @@ -0,0 +1,54 @@ +name: PR Conventional Labeler + +# Labels each PR with its conventional-commit type (feat, fix, docs, perf, +# refactor, chore) derived from the PR title. These labels drive the changelog +# categories in .github/release.yml when release-please generates notes. +# chore is labeled but excluded from the changelog (see .github/release.yml), +# preserving the previous "chore hidden" behavior. + +on: + pull_request_target: + types: [opened, edited, reopened, ready_for_review] + +permissions: + contents: read + pull-requests: write + +jobs: + label: + runs-on: ubuntu-latest + steps: + - uses: actions/github-script@v7 + with: + script: | + // Conventional-commit types we manage as labels. + const managedLabels = ['feat', 'fix', 'docs', 'perf', 'refactor', 'chore']; + + const pr = context.payload.pull_request; + const title = pr.title || ''; + + // Matches: feat:, fix(scope):, perf!:, refactor(api)!: ... + const match = title.match(/^([a-zA-Z]+)(\([^)]*\))?!?:/); + const type = match ? match[1].toLowerCase() : null; + const target = managedLabels.includes(type) ? type : null; + + const { owner, repo } = context.repo; + const issue_number = pr.number; + const current = pr.labels.map(l => l.name); + + // Remove any managed label that no longer matches the title + // (e.g. PR retitled from feat: to fix:). + for (const label of current) { + if (managedLabels.includes(label) && label !== target) { + await github.rest.issues + .removeLabel({ owner, repo, issue_number, name: label }) + .catch(() => {}); + } + } + + // Apply the matching label if not already present. + if (target && !current.includes(target)) { + await github.rest.issues.addLabels({ + owner, repo, issue_number, labels: [target], + }); + } diff --git a/api/services/telephony/providers/telnyx/strategies.py b/api/services/telephony/providers/telnyx/strategies.py index 0f01c64..1f6143a 100644 --- a/api/services/telephony/providers/telnyx/strategies.py +++ b/api/services/telephony/providers/telnyx/strategies.py @@ -121,9 +121,7 @@ class TelnyxConferenceStrategy(TransferStrategy): ) manager = await get_call_transfer_manager() - return await manager.find_transfer_context_for_call( - caller_call_control_id - ) + return await manager.find_transfer_context_for_call(caller_call_control_id) except Exception as e: logger.error(f"[Telnyx Transfer] Error finding transfer context: {e}") diff --git a/api/tests/telephony/test_call_transfer_manager.py b/api/tests/telephony/test_call_transfer_manager.py index dce422b..5f7ecdc 100644 --- a/api/tests/telephony/test_call_transfer_manager.py +++ b/api/tests/telephony/test_call_transfer_manager.py @@ -65,9 +65,7 @@ class TestFindTransferContextByCallSid: fake = _FakeRedis() manager = CallTransferManager(redis_client=fake) - await manager.store_transfer_context( - _build_context("tx-1", "caller-abc") - ) + await manager.store_transfer_context(_build_context("tx-1", "caller-abc")) found = await manager.find_transfer_context_for_call("caller-abc") @@ -84,9 +82,7 @@ class TestFindTransferContextByCallSid: fake = _FakeRedis() manager = CallTransferManager(redis_client=fake) - await manager.store_transfer_context( - _build_context("tx-1", "caller-abc") - ) + await manager.store_transfer_context(_build_context("tx-1", "caller-abc")) found = await manager.find_transfer_context_for_call("not-a-caller") @@ -100,9 +96,7 @@ class TestFindTransferContextByCallSid: fake = _FakeRedis() manager = CallTransferManager(redis_client=fake) - await manager.store_transfer_context( - _build_context("tx-1", "caller-abc") - ) + await manager.store_transfer_context(_build_context("tx-1", "caller-abc")) await manager.remove_transfer_context("tx-1") found = await manager.find_transfer_context_for_call("caller-abc") diff --git a/api/tests/test_public_signaling_origin.py b/api/tests/test_public_signaling_origin.py index ad893c6..e181ad4 100644 --- a/api/tests/test_public_signaling_origin.py +++ b/api/tests/test_public_signaling_origin.py @@ -26,9 +26,7 @@ def _embed_session(): def _embed_token(allowed_domains): - return SimpleNamespace( - allowed_domains=allowed_domains, created_by=7, workflow_id=3 - ) + return SimpleNamespace(allowed_domains=allowed_domains, created_by=7, workflow_id=3) def _patch_deps(): @@ -36,9 +34,7 @@ def _patch_deps(): db = patch("api.routes.webrtc_signaling.db_client").start() mgr = patch("api.routes.webrtc_signaling.signaling_manager").start() db.get_embed_session_by_token = AsyncMock(return_value=_embed_session()) - db.get_embed_token_by_id = AsyncMock( - return_value=_embed_token(["example.com"]) - ) + db.get_embed_token_by_id = AsyncMock(return_value=_embed_token(["example.com"])) db.get_user_by_id = AsyncMock(return_value=SimpleNamespace(id=7)) mgr.handle_websocket = AsyncMock() return db, mgr diff --git a/release-please-config.json b/release-please-config.json index d83f604..a5cf378 100644 --- a/release-please-config.json +++ b/release-please-config.json @@ -3,6 +3,7 @@ ".": { "release-type": "simple", "package-name": "dograh", + "changelog-type": "github", "changelog-sections": [ { "type": "feat",