-
Notifications
You must be signed in to change notification settings - Fork 1
131 lines (106 loc) · 3.49 KB
/
build-and-test.yml
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
name: Build and Test
on:
pull_request:
branches:
- dev
- beta
- "epic/**"
types: [opened, synchronize, reopened, ready_for_review]
jobs:
check:
name: "Check"
if: github.event.pull_request.draft == false
runs-on: ubuntu-latest
outputs:
testing_needed: ${{ steps.check.outputs.testing_needed }}
steps:
- name: "Checkout Branch"
uses: actions/checkout@v3
### Checks if there are any file changes that are not in the .github/ or doc/ directories
- name: "Check for changes outside CI and docs"
id: check
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
changed_files=$(gh pr diff --name-only ${{ github.event.pull_request.number }})
changesOutsideDocsCI=false
for file in $changed_files; do
if [[ $file -ne ".github/"* && $file -ne "doc/"* ]]; then
echo "file: $file is not part of CI or docs"
echo "Start testing pipeline."
changesOutsideDocsCI=true
break
else
echo "file: $file is part of CI or docs"
fi
done
if [[ $changesOutsideDocsCI == true ]]; then
echo "testing_needed=true" >> "$GITHUB_OUTPUT"
else
echo "testing_needed=false" >> "$GITHUB_OUTPUT"
echo "No need for the build and test pipeline to run. Exiting."
fi
build:
name: "Build"
timeout-minutes: 10
needs: check
if: |
(github.event.pull_request.draft == false)
&& (needs.check.outputs.worth_testing == true)
runs-on: ubuntu-latest
steps:
- name: "Checkout Branch"
uses: actions/checkout@v3
- name: "Setup Java"
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: 17
cache: 'gradle'
- name: Setup Gradle cache
uses: actions/cache@v3
with:
path: ~/.gradle
key: ${{ runner.os }}-gradle-${{ hashFiles('versions.properties') }}-${{ github.sha }}
- name: "prepare libs for build"
run: ./prepare.sh
- name: "build backend"
run: ./gradlew --build-cache build -x test
- name: Upload build reports
uses: actions/upload-artifact@v3
if: ${{ failure() || contains(github.event.pull_request.labels.*.name, 'force reports') }}
with:
name: Build Reports
path: "**/build/reports"
test:
name: "Test"
timeout-minutes: 120
needs: build
if: |
(github.event.pull_request.draft == false)
&& (needs.check.outputs.testing_needed == true)
runs-on: ubuntu-latest
steps:
- name: "Checkout Branch"
uses: actions/checkout@v3
- name: "Setup Java"
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: 17
cache: 'gradle'
- name: Setup Gradle cache
uses: actions/cache@v3
with:
path: ~/.gradle
key: ${{ runner.os }}-gradle-${{ hashFiles('versions.properties') }}-${{ github.sha }}
- name: "prepare libs for tests"
run: ./prepare.sh
- name: "test backend"
run: ./gradlew --build-cache check
- name: Upload test reports
uses: actions/upload-artifact@v3
if: ${{ failure() || contains(github.event.pull_request.labels.*.name, 'force reports') }}
with:
name: Test Reports
path: "**/build/reports"