mirror of
https://github.com/git/git.git
synced 2024-05-09 19:36:10 +02:00
githubci: add a workflow for creating GitHub release notes
GitHub now allows users to subscribe only to "release" notifications of a repository. So, users can be notified of new releases and their changelog/release notes automatically. This workflow works whenever: a new version tag (with the format following the regex "v\d+\..*") is pushed to the repository AND the commit that the tag points to, created/modified a release notes file from Doumentation/RelNotes/ directory. The script for generating the temporary changelog file is written in Kotlin language which can be a much better alternative to shell scripts in terms of features and readability (it is like a python script but with static typing support). The Kotlin runner is pre-installed in GitHub Actions environments; for more information see https://github.com/actions/virtual-environments/ https://stackoverflow.com/a/69116750/8583692 The "Release Notes (yyyy-MM-dd)" link in https://git-scm.com/ website can also link to these GitHub release pages instead of to the raw .txt release note file in the repository. See the issue related to GitHub release notifications: https://github.com/isaacs/github/issues/410 Also see GitHub announcement for this feature: https://github.blog/changelog/2018-11-27-watch-releases/ Signed-off-by: Mahdi Hosseinzadeh <mdihosseinzadeh@gmail.com>
This commit is contained in:
parent
5f439a0ecf
commit
e2cf34363d
|
@ -0,0 +1,21 @@
|
|||
#!/usr/bin/env kotlin
|
||||
|
||||
/**
|
||||
* Copies contents of the release notes file created/modified
|
||||
* in this commit to a new file to be used by the workflow.
|
||||
*/
|
||||
|
||||
import java.io.File
|
||||
|
||||
println("Files modified in this commit:")
|
||||
args.forEachIndexed { index, name ->
|
||||
println("\t${index + 1}- $name")
|
||||
}
|
||||
|
||||
val notesFile = args
|
||||
.map(::File)
|
||||
.singleOrNull { "RelNotes" in it.parent }
|
||||
|
||||
notesFile
|
||||
?.copyTo(File("changelog.txt"))
|
||||
?: println("No release notes file modified in this commit")
|
|
@ -0,0 +1,40 @@
|
|||
name: Create GH release
|
||||
|
||||
# Create a GitHub release for each new tag.
|
||||
# The release notes are taken from the release notes file
|
||||
# modified in that commit located in Documentation/RelNotes directory.
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- v[0-9]+.*
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
jobs:
|
||||
create-gh-release:
|
||||
name: Create a new release or update an existing release in the GitHub repository
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout the repository
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 2 # OR '0' To retrieve all preceding commit.
|
||||
- name: Get changed files
|
||||
uses: tj-actions/changed-files@v11.7
|
||||
id: changed-files
|
||||
with:
|
||||
separator: ' '
|
||||
- name: Generate the changelog
|
||||
run: kotlin .github/scripts/generate-github-changelog.main.kts ${{ steps.changed-files.outputs.all_changed_and_modified_files }}
|
||||
- name: Create the release
|
||||
uses: actions/create-release@v1
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
tag_name: ${{ github.ref_name }}
|
||||
release_name: ${{ github.ref_name }}
|
||||
body_path: changelog.txt
|
||||
draft: false
|
||||
prerelease: false
|
Loading…
Reference in New Issue