aboutsummaryrefslogtreecommitdiff
path: root/.github/workflows/build.yml
blob: 97f8e3b6450a4e31949af9b1544a92057c452d34 (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
141
142
143
name: Build
on:
    push:
        branches: [ main ]
    pull_request:

concurrency:
    group: "${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}"
    cancel-in-progress: true

jobs:
    build:
        name: Build
        runs-on: ubuntu-latest
        outputs:
            version: ${{ steps.properties.outputs.version }}
            changelog: ${{ steps.properties.outputs.changelog }}
            pluginVerifierHomeDir: ${{ steps.properties.outputs.pluginVerifierHomeDir }}
        steps:
            - name: Fetch Sources
              uses: actions/checkout@v4

            - name: Gradle Wrapper Validation
              uses: gradle/wrapper-validation-action@v2

            - name: Setup Java
              uses: actions/setup-java@v4
              with:
                  distribution: zulu
                  java-version: 17

            - name: Setup Gradle
              uses: gradle/actions/setup-gradle@v3
              with:
                  gradle-home-cache-cleanup: true

            - name: Export Properties
              id: properties
              shell: bash
              run: |
                  PROPERTIES="$(./gradlew properties --console=plain -q)"
                  VERSION="$(echo "$PROPERTIES" | grep "^version:" | cut -f2- -d ' ')"
                  CHANGELOG="$(./gradlew getChangelog --unreleased --no-header --console=plain -q)"

                  echo "version=$VERSION" >> $GITHUB_OUTPUT
                  echo "pluginVerifierHomeDir=~/.pluginVerifier" >> $GITHUB_OUTPUT

                  echo "changelog<<EOF" >> $GITHUB_OUTPUT
                  echo "$CHANGELOG" >> $GITHUB_OUTPUT
                  echo "EOF" >> $GITHUB_OUTPUT

                  ./gradlew listProductsReleases # prepare list of IDEs for Plugin Verifier

            - name: Build plugin
              run: ./gradlew buildPlugin

            - name: Prepare Plugin Artifact
              id: artifact
              shell: bash
              run: |
                  cd ${{ github.workspace }}/build/distributions
                  FILENAME=`ls *.zip`
                  unzip "$FILENAME" -d content

                  echo "filename=${FILENAME:0:-4}" >> $GITHUB_OUTPUT

            - name: Upload artifact
              uses: actions/upload-artifact@v4
              with:
                  name: ${{ steps.artifact.outputs.filename }}
                  path: ./build/distributions/content/*/*

    verify:
        name: Verify plugin
        needs: [ build ]
        runs-on: ubuntu-latest
        steps:
            - name: Maximize Build Space
              uses: jlumbroso/free-disk-space@main
              with:
                  tool-cache: false
                  large-packages: false

            - name: Fetch Sources
              uses: actions/checkout@v4

            - name: Setup Java
              uses: actions/setup-java@v4
              with:
                  distribution: zulu
                  java-version: 17

            - name: Setup Gradle
              uses: gradle/actions/setup-gradle@v3
              with:
                  gradle-home-cache-cleanup: true

            - name: Setup Plugin Verifier IDEs Cache
              uses: actions/cache@v4
              with:
                  path: ${{ needs.build.outputs.pluginVerifierHomeDir }}/ides
                  key: plugin-verifier-${{ hashFiles('build/listProductsReleases.txt') }}

            - name: Run Plugin Verification tasks
              run: ./gradlew runPluginVerifier -Dplugin.verifier.home.dir=${{ needs.build.outputs.pluginVerifierHomeDir }}

            - name: Collect Plugin Verifier Result
              if: ${{ always() }}
              uses: actions/upload-artifact@v4
              with:
                  name: pluginVerifier-result
                  path: ${{ github.workspace }}/build/reports/pluginVerifier

    releaseDraft:
        name: Release draft
        if: github.event_name != 'pull_request'
        needs: [ build, verify ]
        runs-on: ubuntu-latest
        permissions:
            contents: write
        steps:
            - name: Fetch Sources
              uses: actions/checkout@v4

            - name: Remove Old Release Drafts
              env:
                  GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
              run: |
                  gh api repos/{owner}/{repo}/releases \
                    --jq '.[] | select(.draft == true) | .id' \
                    | xargs -I '{}' gh api -X DELETE repos/{owner}/{repo}/releases/{}

            - name: Create Release Draft
              env:
                  GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
              run: |
                  gh release create "v${{ needs.build.outputs.version }}" \
                    --draft \
                    --title "v${{ needs.build.outputs.version }}" \
                    --notes "$(cat << 'EOM'
                  ${{ needs.build.outputs.changelog }}
                  EOM
                  )"