-
Notifications
You must be signed in to change notification settings - Fork 156
129 lines (110 loc) · 5.05 KB
/
Copy pathcreate-github-release.yml
File metadata and controls
129 lines (110 loc) · 5.05 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
name: Create GitHub Release
on:
push:
tags:
- 'v?[0-9]+.[0-9]+.[0-9]+*' # Trigger on tags like v1.0.0, 1.2.3, v1.2.3.Alpha1 etc.
jobs:
create-release:
# Only run this job for the main repository, not for forks
if: github.repository == 'a2aproject/a2a-java'
runs-on: ubuntu-latest
permissions:
contents: write # Required to create releases
steps:
- name: Checkout repository
uses: actions/checkout@v7
with:
fetch-depth: 0 # Fetch all history for changelog generation
- name: Extract version from tag
id: version
run: |
# Remove 'v' prefix if present
VERSION=${GITHUB_REF_NAME#v}
echo "version=$VERSION" >> $GITHUB_OUTPUT
echo "Version: $VERSION"
- name: Generate release notes
id: release_notes
uses: actions/github-script@v9
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const version = '${{ steps.version.outputs.version }}';
// Get the previous tag
let previousTag = '';
try {
const { data: tags } = await github.rest.repos.listTags({
owner: context.repo.owner,
repo: context.repo.repo,
per_page: 100
});
// Find current tag index
const currentIndex = tags.findIndex(tag => tag.name === context.ref.replace('refs/tags/', ''));
// Get previous tag (next in list)
if (currentIndex >= 0 && currentIndex < tags.length - 1) {
previousTag = tags[currentIndex + 1].name;
}
} catch (error) {
console.log('Could not fetch previous tag:', error.message);
}
// Build release notes
let releaseNotes = `## A2A Java SDK ${version}\n\n`;
// Add Maven Central installation instructions
releaseNotes += `### Installation\n\n`;
releaseNotes += `**Maven**:\n\`\`\`xml\n<dependency>\n`;
releaseNotes += ` <groupId>org.a2aproject.sdk</groupId>\n`;
releaseNotes += ` <artifactId>a2a-java-sdk-client</artifactId>\n`;
releaseNotes += ` <version>${version}</version>\n`;
releaseNotes += `</dependency>\n\`\`\`\n\n`;
releaseNotes += `**Gradle**:\n\`\`\`gradle\n`;
releaseNotes += `implementation 'org.a2aproject.sdk:a2a-java-sdk-client:${version}'\n`;
releaseNotes += `\`\`\`\n\n`;
// Add links
releaseNotes += `### Links\n\n`;
releaseNotes += `- [Maven Central](https://central.sonatype.com/artifact/org.a2aproject.sdk/a2a-java-sdk-parent/${version})\n`;
releaseNotes += `- [JavaDoc](https://javadoc.io/doc/org.a2aproject.sdk/a2a-java-sdk-parent/${version})\n`;
releaseNotes += `- [GitHub](https://github.com/a2aproject/a2a-java/tree/v${version})\n\n`;
// Add changelog header
if (previousTag) {
releaseNotes += `### Changes since ${previousTag}\n\n`;
releaseNotes += `[Full Changelog](https://github.com/a2aproject/a2a-java/compare/${previousTag}...v${version})\n\n`;
} else {
releaseNotes += `### Changes\n\n`;
}
return releaseNotes;
- name: Create GitHub Release
uses: actions/github-script@v9
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const version = '${{ steps.version.outputs.version }}';
const tag = context.ref.replace('refs/tags/', '');
const releaseNotes = ${{ steps.release_notes.outputs.result }};
// Determine if this is a pre-release
const isPrerelease = version.includes('Alpha') ||
version.includes('Beta') ||
version.includes('RC') ||
version.includes('SNAPSHOT');
try {
const { data: release } = await github.rest.repos.createRelease({
owner: context.repo.owner,
repo: context.repo.repo,
tag_name: tag,
name: `v${version}`,
body: releaseNotes,
draft: false,
prerelease: isPrerelease,
generate_release_notes: true // GitHub will append auto-generated notes
});
console.log(`✅ Created release: ${release.html_url}`);
core.summary
.addHeading(`Release v${version} Created`)
.addLink('View Release', release.html_url)
.addLink('Maven Central', `https://central.sonatype.com/artifact/org.a2aproject.sdk/a2a-java-sdk-parent/${version}`)
.write();
} catch (error) {
if (error.status === 422 && error.message.includes('already_exists')) {
console.log('⚠️ Release already exists for this tag');
} else {
throw error;
}
}