cd: fix the workflow with usernames #32
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="${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 | |
while IFS= read -r line; do | |
subject=$(echo "$line" | cut -d' ' -f2-) # Extract the commit subject | |
case "$subject" in | |
*'feat:'*) | |
has_feat=true | |
;; | |
*'fix:'*) | |
patch=$((patch + 1)) | |
;; | |
*'BREAKING CHANGE:'*) | |
has_breaking_change=true | |
;; | |
esac | |
done < <(git log --pretty=format:"%h %s" "$commit_range") | |
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: Generate release notes | |
id: release_notes | |
run: | | |
echo "## What's changed" > release_notes.md | |
git log --pretty=format:"%h %s by @%an" ${{ steps.previous_tag.outputs.previous_tag }}..${{ steps.version.outputs.new_version }} | \ | |
while read line; do | |
case "$line" in | |
*'feat:'*) | |
echo "* **Feature:** ${line#*:}" >> release_notes.md | |
;; | |
*'fix:'*) | |
echo "* **Fix:** ${line#*:}" >> release_notes.md | |
;; | |
*'BREAKING CHANGE:'*) | |
echo "* **Breaking Change:** ${line#*:}" >> release_notes.md | |
;; | |
*) | |
echo "* ${line#*:}" >> release_notes.md | |
;; | |
esac | |
done | |
echo "" >> release_notes.md | |
echo "## Contributors" >> release_notes.md | |
git log --pretty=format:"@%an" ${{ steps.previous_tag.outputs.previous_tag }}..${{ steps.version.outputs.new_version }} | sort -u >> release_notes.md | |
echo "" >> release_notes.md | |
echo "**Full Changelog**: https://github.com/buildrun-tech/brc-cli/commits/${{ steps.latest_tag.outputs.latest_tag }}" >> 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: 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: 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 }} |