Skip to content

Commit ab4617f

Browse files
committed
refactor(workflow): update discord notification workflow (#101)
* ci(workflow): make notify pr can be run manually * ci(workflow): exclude author from reviewer and mention author * ci(workflow): remove unused lcov pattern * ci(workflow): remove unused lcov pattern from main.yaml * ci(workflow): fix typo base network interceptor * ci(workflow): remove more unused pattern * ci(workflow): exclude generated file * ci(workflow): add more codeowner * ci(workflow): auto publish to pub.dev
1 parent 5f9b10a commit ab4617f

File tree

6 files changed

+74
-34
lines changed

6 files changed

+74
-34
lines changed

.github/CODEOWNERS

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,4 @@
1-
* @ryanaidilp @rii92
1+
* @ryanaidilp
2+
3+
app/* @rii92 @gerigeri00000 @devara46
4+
packages/* @rii92 @gerigeri00000 @devara46

.github/scripts/notify_discord.py

Lines changed: 33 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -11,36 +11,50 @@ def main():
1111
repo_name = os.getenv("REPO_NAME")
1212
discord_map_json = os.getenv("DISCORD_MAP")
1313

14-
# Parse mapping from secret
14+
# Parse GitHub -> Discord map from secrets
1515
discord_map = json.loads(discord_map_json)
1616

17-
# Read CODEOWNERS
17+
# Mention the PR author
18+
pr_author_mention = f"<@{discord_map.get(pr_author)}>" if pr_author in discord_map else f"@{pr_author}"
19+
20+
# Read .github/CODEOWNERS
1821
codeowners_path = Path(".github/CODEOWNERS")
19-
owner_lines = codeowners_path.read_text().splitlines()
20-
21-
github_mentions = set()
22-
for line in owner_lines:
23-
if line.strip().startswith("#") or not line.strip():
24-
continue
25-
owners = re.findall(r"@([a-zA-Z0-9_-]+)", line)
26-
github_mentions.update(owners)
27-
28-
discord_mentions = []
29-
for gh_user in github_mentions:
30-
discord_id = discord_map.get(gh_user)
31-
if discord_id:
32-
discord_mentions.append(f"<@{discord_id}>")
33-
34-
mentions = " ".join(discord_mentions) if discord_mentions else "Tidak ada code owner terdeteksi."
22+
if not codeowners_path.exists():
23+
print("⚠️ No CODEOWNERS file found.")
24+
owners = []
25+
else:
26+
lines = codeowners_path.read_text().splitlines()
27+
owners = set()
28+
for line in lines:
29+
if line.strip().startswith("#") or not line.strip():
30+
continue
31+
owners.update(re.findall(r"@([a-zA-Z0-9_-]+)", line))
32+
33+
# Remove the author from the list of codeowners
34+
reviewers = owners - {pr_author}
35+
36+
# Convert GitHub usernames to Discord mentions if available
37+
if reviewers:
38+
reviewer_mentions = [
39+
f"<@{discord_map.get(user)}>" if user in discord_map else f"@{user}"
40+
for user in reviewers
41+
]
42+
mentions = " ".join(reviewer_mentions)
43+
else:
44+
mentions = "Tidak ada reviewer lain yang terdeteksi."
45+
46+
# Compose the message
3547
message = (
36-
f"📣 Pull Request Baru di **{repo_name}** oleh **{pr_author}**\n"
48+
f"📣 Pull Request Baru di **{repo_name}** oleh {pr_author_mention}\n"
3749
f"🔗 [{pr_title}]({pr_url})\n"
3850
f"{mentions} mohon review ya 🙏"
3951
)
4052

53+
# Send to Discord
4154
webhook = os.getenv("DISCORD_WEBHOOK")
4255
response = requests.post(webhook, json={"content": message})
4356
response.raise_for_status()
57+
print("✅ Notifikasi dikirim ke Discord.")
4458

4559
if __name__ == "__main__":
4660
main()

.github/workflows/codecov.yaml

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -41,25 +41,18 @@ jobs:
4141
- name: Cleaning lcov.info
4242
run: |
4343
lcov --remove ./coverage/lcov.info \
44-
"**/*.config.dart" \
4544
"**/base_entity_*.dart" \
4645
"**/base_entity.dart" \
4746
"**/network_client.dart" \
4847
"**/request_data.dart" \
4948
"**/response_data.dart" \
5049
"**/*_model.dart" \
51-
"**/base_network_injector.dart" \
50+
"**/base_network_interceptor.dart" \
5251
"**/result.dart" \
5352
"**/stadata_flutter_sdk.dart" \
5453
"**/register_module.dart" \
55-
"**/http_*.dart" \
56-
"**/*_http_module.dart" \
5754
"**/*_log_*.dart" \
58-
"**/*.g.dart" \
59-
"**/*.freezed.dart" \
60-
"**/*_serializer.dart" \
6155
"**/*_converter.dart" \
62-
"**/service_locator.dart" \
6356
"**/retry_interceptor.dart" \
6457
"**/env.dart" \
6558
"**/api_config.dart" \

.github/workflows/main.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,4 @@ jobs:
2727
working_directory: packages/stadata_flutter_sdk
2828
flutter_channel: stable
2929
min_coverage: 80
30-
coverage_excludes: "**/*.config.dart **/base_entity_*.dart **/base_entity.dart **/stadata_flutter_sdk.dart **/register_module.dart **/http_*.dart **/*_http_module.dart **/*_log_*.dart **/*.g.dart **/*.freezed.dart **/*_serializer.dart **/*_converter.dart **/service_locator.dart **/env.dart **/usecase.dart **/injector.dart **/*_injector.dart **/network_client.dart **/request_data.dart **/response_data.dart **/api_config.dart **/base_network_injector.dart **/result.dart **/*_model.dart **/retry_interceptor.dart"
30+
coverage_excludes: "**/base_entity_*.dart **/base_entity.dart **/stadata_flutter_sdk.dart **/register_module.dart **/*_log_*.dart **/*_converter.dart **/env.dart **/usecase.dart **/injector.dart **/*_injector.dart **/network_client.dart **/request_data.dart **/response_data.dart **/api_config.dart **/base_network_interceptor.dart **/result.dart **/*_model.dart **/retry_interceptor.dart"

.github/workflows/notify-discord-pr.yml

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,21 @@ name: Notify Discord on PR
22

33
on:
44
pull_request:
5-
types: [opened]
5+
types: [opened, ready_for_review]
6+
workflow_dispatch:
7+
inputs:
8+
pr_title:
9+
description: "Pull Request Title"
10+
required: true
11+
pr_url:
12+
description: "Pull Request URL"
13+
required: true
14+
pr_author:
15+
description: "Pull Request Author"
16+
required: true
17+
repo_name:
18+
description: "Repository Name"
19+
required: true
620

721
jobs:
822
notify:
@@ -23,8 +37,8 @@ jobs:
2337
env:
2438
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}
2539
DISCORD_MAP: ${{ secrets.DISCORD_MAP }}
26-
PR_TITLE: ${{ github.event.pull_request.title }}
27-
PR_URL: ${{ github.event.pull_request.html_url }}
28-
PR_AUTHOR: ${{ github.actor }}
29-
REPO_NAME: ${{ github.repository }}
40+
PR_TITLE: ${{ github.event.pull_request.title || inputs.pr_title }}
41+
PR_URL: ${{ github.event.pull_request.html_url || inputs.pr_url }}
42+
PR_AUTHOR: ${{ github.actor || inputs.pr_author }}
43+
REPO_NAME: ${{ github.repository || inputs.repo_name }}
3044
run: python .github/scripts/notify_discord.py

.github/workflows/publish.yml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
name: Publish to pub.dev
2+
3+
on:
4+
push:
5+
tags:
6+
- "[0-9]+.[0-9]+.[0-9]+" # for tags like: '1.2.3'
7+
8+
jobs:
9+
publish:
10+
permissions:
11+
id-token: write # Required for authentication using OIDC
12+
uses: dart-lang/setup-dart/.github/workflows/publish.yml@v1
13+
with:
14+
# Specify the github actions deployment environment
15+
environment: pub.dev
16+
working-directory: packages/stadata_fllutter_sdk

0 commit comments

Comments
 (0)