aboutsummaryrefslogtreecommitdiff
path: root/.github/workflows/buildrelease.yml
blob: 66b4bf70f3df008275c527755e8acb57236b45d5 (plain)
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
130
131
132
133
134
135
136
137
138
139
140
# 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@v2
      - 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@v2
        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@v2
        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 }}>"
            ""
            "<https://hysky.de/>"