# This is a basic workflow to help you get started with Actions name: Build Release # Controls when the action will run. Triggers the workflow on push or pull request # events but only for the master branch on: release: types: [created] workflow_dispatch: jobs: # This workflow contains a single job called "build" build: # The type of runner that the job will run on runs-on: ubuntu-latest # Steps represent a sequence of tasks that will be executed as part of the job steps: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - uses: actions/checkout@v3 - name: Set up JDK 17 uses: actions/setup-java@v2 with: distribution: 'adopt' java-version: '17' - name: Grant execute permission for gradlew run: chmod +x gradlew - name: Build with Gradle run: ./gradlew build - uses: actions/upload-artifact@v3 with: name: Artifacts path: build/libs/ - name: Read Changelog id: read_changelog shell: bash run: | CHANGELOG=$(sed '/___/Q' CHANGELOG.md) CHANGELOG=$(echo "$CHANGELOG" | sed 1d) CHANGELOGtmp="${CHANGELOG//'%'/'%25'}" CHANGELOGtmp="${CHANGELOGtmp//$'\n'/'%0A'}" CHANGELOGtmp="${CHANGELOGtmp//$'\r'/'%0D'}" echo "::set-output name=changelog::$CHANGELOGtmp" echo "Changelog:\n$CHANGELOG" changelog="${CHANGELOG}" # Because of the 2000 char limit in Discord shorten the changelog # Calculate the number of characters to delete delete_chars=$((${#changelog} + 350 - 2000 - 15)) # Check if delete_chars is greater than 0 if [ $delete_chars -gt 0 ]; then # Extract the "What's Changed" section from the changelog changed_section=$(echo "$changelog" | awk '/## What'\''s Changed/{flag=1;next}/^$/{flag=0}flag') # Trim the changed_section based on the delete_chars value and remove the last line modified_section="${changed_section::-delete_chars}" modified_section=$(echo "$modified_section" | sed '$d') # Add "[...] and more" at the end of modified_section modified_section+="\n[...] and more" # Format modified_section with printf modified_section=$(printf "%s" "$modified_section") # Generate the modified_changelog by inserting modified_section after the "What's Changed" section modified_changelog=$(awk -v modified_section="$modified_section" ' /^## What'\''s Changed/ { print; print modified_section; f=1; next } f && /^$/ { f=0 } !f { print } END { if (f) print "" } ' ORS='\n' <<< "$changelog") # Format the modified_changelog by removing "@" characters and enclosing URLs in "<>" modified_changelog=$(echo "$modified_changelog" | sed -e 's/@//g' -e 's|https\?://[^[:space:]]*|<\0>|g') # Store the modified_changelog in the CHANGELOG variable CHANGELOG=$(echo -n "$modified_changelog") fi CHANGELOG="${CHANGELOG//'%'/'%25'}" CHANGELOG="${CHANGELOG//$'\n'/'%0A'}" CHANGELOG="${CHANGELOG//$'\r'/'%0D'}" echo "::set-output name=changelog_discord::$CHANGELOG" - uses: actions/github-script@v6 id: fname with: result-encoding: string script: | const fs = require("fs") return fs.readdirSync("build/libs/").filter(e => !e.endsWith("dev.jar") && !e.endsWith("sources.jar") && e.endsWith(".jar"))[0] - name: Release id: uploadrelease uses: softprops/action-gh-release@v1 with: body: ${{ steps.read_changelog.outputs.changelog }} token: ${{ secrets.GH_RELEASE }} files: build/libs/${{ steps.fname.outputs.result }} - name: Publish to Modrinth id: modrinth env: MODRINTH_TOKEN: ${{ secrets.MODRINTH_TOKEN }} CHANGELOG: ${{ steps.read_changelog.outputs.changelog }} run: ./gradlew modrinth - name: Get version tag id: version_tag run: | [[ ! "$GITHUB_REF" =~ refs/tags ]] && exit echo "::set-output name=value::${GITHUB_REF#refs/tags/}" - name: Discord notification env: DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }} uses: Ilshidur/action-discord@master with: args: | "@Update-Notification" "## Skyblocker ${{ steps.version_tag.outputs.value }}" "" "${{ steps.read_changelog.outputs.changelog_discord }}" ":inbox_tray: Download latest version on Modrinth or Github:" "<:modrinth:900697862206287882> <${{ steps.modrinth.outputs.url }}>" "<:github:900697885706952725> <${{ steps.uploadrelease.outputs.url }}>" "" ""