Merge pull request #18 from buildrun-tech/feature/validate-new-feature #54
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: CD | |
on: | |
push: | |
branches: [ "main" ] | |
jobs: | |
re-build: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Set up JDK 21 | |
uses: actions/setup-java@v3 | |
with: | |
java-version: '21' | |
distribution: 'temurin' | |
cache: maven | |
- name: Build with Maven | |
run: mvn -B package --file app/pom.xml | |
re-test: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Set up JDK 21 | |
uses: actions/setup-java@v3 | |
with: | |
java-version: '21' | |
distribution: 'temurin' | |
cache: maven | |
- name: Test with Maven | |
run: mvn test --file app/pom.xml | |
generate-release: | |
needs: [re-test, re-build] | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 # Fetch all history and tags | |
- uses: graalvm/setup-graalvm@v1 | |
with: | |
java-version: '21' | |
distribution: 'graalvm' # See 'Options' for all available distributions | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Debug step | |
run: | | |
echo "GRAALVM_HOME: $GRAALVM_HOME" | |
echo "JAVA_HOME: $JAVA_HOME" | |
java --version | |
native-image --version | |
# - name: Compile to native image | |
# run: | | |
# pwd | |
# ls | |
# mvn -Pnative native:compile --file app/pom.xml | |
- name: Set Git user | |
run: | | |
git config --global user.email "actions@github.com" | |
git config --global user.name "GitHub Actions" | |
- name: Get previous tag | |
id: previous_tag | |
run: | | |
git fetch --tags | |
previous_tag=$(git describe --abbrev=0 --tags $(git rev-list --tags --max-count=1)) | |
echo "PREVIOUS TAG => $previous_tag" | |
echo "::set-output name=previous_tag::$previous_tag" | |
- name: Determine next version | |
id: version | |
run: | | |
git fetch | |
last_tag=${{ steps.previous_tag.outputs.previous_tag }} | |
commit_range=$(git rev-list --abbrev-commit --reverse ${last_tag}..HEAD) | |
major=$(echo "$last_tag" | cut -d. -f1) | |
minor=$(echo "$last_tag" | cut -d. -f2) | |
patch=$(echo "$last_tag" | cut -d. -f3) | |
has_feat=false | |
has_breaking_change=false | |
for hash in $commit_range; do | |
subject=$(git log --format="%s" -n 1 $hash) | |
case "$subject" in | |
*'feat:'*) | |
echo "has_feat=true because of [$subject]" | |
has_feat=true | |
;; | |
*'BREAKING CHANGE:'*) | |
echo "has_breaking_change=true because of [$subject]" | |
has_breaking_change=true | |
;; | |
*) | |
echo "not feat not breaking change, commit -> [$subject]" | |
;; | |
esac | |
done | |
if [ "$has_breaking_change" = true ]; then | |
major=$((major + 1)) | |
minor=0 | |
patch=0 | |
elif [ "$has_feat" = true ]; then | |
minor=$((minor + 1)) | |
patch=0 | |
else | |
patch=$((patch + 1)) | |
fi | |
new_version="$major.$minor.$patch" | |
echo "NEW VERSION SHOULD BE => $new_version" | |
echo "::set-output name=new_version::$new_version" | |
- name: Create new tag | |
id: new_tag | |
if: steps.commits.outputs.new_version != '0.0.0' | |
run: git tag -a ${{ steps.version.outputs.new_version }} -m "Version ${{ steps.version.outputs.new_version }}" | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: Push new tag | |
if: steps.commits.outputs.new_version != '0.0.0' | |
run: git push origin ${{ steps.version.outputs.new_version }} | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: Generate release notes | |
id: release_notes | |
run: | | |
git fetch | |
commit_range=$(git rev-list --abbrev-commit --reverse ${{ steps.previous_tag.outputs.previous_tag }}..HEAD) | |
echo "## What's changed" > release_notes.md | |
for hash in $commit_range; do | |
subject=$(git log --format="%s by @%an - %h" -n 1 $hash) | |
case "$subject" in | |
*'BREAKING CHANGE:'*) | |
echo "* **Breaking Change:** $(echo "$subject" | awk -F: '{print $2}')" >> release_notes.md | |
;; | |
*'feat:'*) | |
echo "* **Feature:** $(echo "$subject" | awk -F: '{print $2}')" >> release_notes.md | |
has_feat=true | |
;; | |
*'fix:'*) | |
echo "* **Fix:** $(echo "$subject" | awk -F: '{print $2}')" >> release_notes.md | |
;; | |
*) | |
echo "* $(echo "$subject" | awk -F: '{print $2}')" >> release_notes.md | |
;; | |
esac | |
done | |
echo "" >> release_notes.md | |
echo "" >> release_notes.md | |
echo "**Full Changelog**: https://github.com/buildrun-tech/brc-cli/commits/${{ steps.version.outputs.new_version }}" >> release_notes.md | |
continue-on-error: false | |
- name: Debug release notes | |
id: debug_release_notes | |
run: | | |
cat release_notes.md | |
continue-on-error: false | |
- name: Create Release | |
id: create_release | |
uses: softprops/action-gh-release@v1 | |
with: | |
files: | | |
${{ github.workspace }} | |
tag_name: ${{ steps.version.outputs.new_version }} | |
release_name: Release ${{ steps.version.outputs.new_version }} | |
body_path: release_notes.md | |
token: ${{ secrets.GITHUB_TOKEN }} |