-
Notifications
You must be signed in to change notification settings - Fork 16
159 lines (130 loc) · 4.74 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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
name: Build and run tests
on:
push:
branches:
- develop
- neo
pull_request:
branches:
- develop
- neo
workflow_dispatch:
permissions:
contents: read
checks: write
pull-requests: write
jobs:
build:
# Skip duplicate build when pushing to already existing PR
# Note: we decided NOT to skip duplicate builds,
# since we upload test results via 'EnricoMi/publish-unit-test-result-action',
# which requires 'pull_request' trigger for the bot to be able to add a comment to PR.
# if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository
name: Run tests on JDK ${{ matrix.jdk }}
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
jdk: [8, 11, 19]
env:
main_jdk: 8
steps:
- uses: actions/checkout@v3
- name: Set up Java
uses: actions/setup-java@v3
with:
java-version: ${{ matrix.jdk }}
distribution: 'zulu'
- name: Set up Gradle
uses: gradle/gradle-build-action@v2
with:
# Only write to the cache for builds on the specific branches. (Default is 'main' only.)
# Builds on other branches will only read existing entries from the cache.
cache-read-only: ${{ github.ref != 'refs/heads/main' && github.ref != 'refs/heads/develop' }}
- name: Set up Node
uses: actions/setup-node@v4
with:
node-version: '22'
- name: Set up ArkAnalyzer
run: |
REPO_URL="https://gitee.com/openharmony-sig/arkanalyzer.git"
DEST_DIR="arkanalyzer"
MAX_RETRIES=10
RETRY_DELAY=3 # Delay between retries in seconds
for ((i=1; i<=MAX_RETRIES; i++)); do
git clone --depth=1 $REPO_URL $DEST_DIR && break
echo "Clone failed, retrying in $RETRY_DELAY seconds..."
sleep "$RETRY_DELAY"
done
if [[ $i -gt $MAX_RETRIES ]]; then
echo "Failed to clone the repository after $MAX_RETRIES attempts."
exit 1
else
echo "Repository cloned successfully."
fi
echo "ARKANALYZER_DIR=$(realpath $DEST_DIR)" >> $GITHUB_ENV
cd $DEST_DIR
# checkout master on 2024-07-17
rev=a9d9fd6070fce5896d8e760ed7fd175b62b16605
for ((i=1; i<=MAX_RETRIES; i++)); do
git fetch --depth=1 origin $rev && break
echo "Fetch failed, retrying in $RETRY_DELAY seconds..."
sleep "$RETRY_DELAY"
done
git switch --detach $rev
npm install
npm run build
- name: Run ETS tests first
run: ./gradlew :jacodb-ets:test --scan
- name: Build and run tests
run: ./gradlew build --stacktrace --scan
- name: Publish test results
uses: EnricoMi/publish-unit-test-result-action@v2
if: always()
with:
files: "**/build/test-results/**/*.xml"
check_name: "Test results on JDK ${{ matrix.jdk }}"
- name: Upload coverage reports to Codecov
uses: codecov/codecov-action@v3
with:
token: ${{ secrets.CODECOV_TOKEN }}
# - name: Upload test results
# uses: actions/upload-artifact@v3
# with:
# name: test-results
# path: build/test-results/
- name: Upload Gradle reports
if: (!cancelled()) && matrix.jdk == env.main_jdk
uses: actions/upload-artifact@v3
with:
name: gradle-reports
path: '**/build/reports/'
retention-days: 1
lifecycleTests:
name: Run lifecycle tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Java
uses: actions/setup-java@v3
with:
java-version: 8
distribution: 'zulu'
- name: Set up Gradle
uses: gradle/gradle-build-action@v2
with:
# Only write to the cache for builds on the specific branches. (Default is 'main' only.)
# Builds on other branches will only read existing entries from the cache.
cache-read-only: ${{ github.ref != 'refs/heads/main' && github.ref != 'refs/heads/develop' }}
- name: Build and run lifecycle tests
run: ./gradlew lifecycleTest --stacktrace --scan
- name: Upload coverage reports to Codecov
uses: codecov/codecov-action@v3
with:
token: ${{ secrets.CODECOV_TOKEN }}
- name: Publish test results
uses: EnricoMi/publish-unit-test-result-action@v2
if: always()
with:
files: "**/build/test-results/**/*.xml"
check_name: "Lifecycle test results"