-
Notifications
You must be signed in to change notification settings - Fork 1.9k
88 lines (84 loc) · 3.6 KB
/
groovy-build-coverage.yml
File metadata and controls
88 lines (84 loc) · 3.6 KB
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
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
name: Build and test for coverage
on: [push, pull_request]
permissions:
contents: read
jobs:
test:
if: >-
contains(github.event.head_commit.message || '', 'GROOVY-') ||
contains(github.event.pull_request.title || '', 'GROOVY-')
strategy:
fail-fast: false
runs-on: ubuntu-latest
env:
DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }}
steps:
- uses: actions/checkout@v6
- uses: actions/setup-java@v5
with:
distribution: 'zulu'
java-version: 21
check-latest: true
# `setup-gradle` caches ~/.gradle/caches but NOT ~/.groovy/grapes,
# which is where @Grab-resolved artifacts (used by tests like
# GenericsSTCTest, MethodReferenceTest, …) land. Caching it makes
# the build resilient to transient Maven Central / CDN outages:
# once an artifact has been resolved on any prior run, subsequent
# runs reuse it from cache and don't re-hit the network.
#
# Same key prefix as `groovy-build-test.yml` so the two workflows
# share their accumulated Grape cache.
- name: "🍇 Cache @Grab artifacts (~/.groovy/grapes + ~/.m2/repository)"
uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
with:
path: |
~/.groovy/grapes
~/.m2/repository
key: ${{ runner.os }}-grape-${{ github.run_id }}
restore-keys: |
${{ runner.os }}-grape-
- uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5.0.2
- name: "🌡 Pre-warm @Grab artifacts via Maven"
shell: bash
run: |
set +e
coords=$(grep -rhEo "@Grab\(\s*(value\s*=\s*)?['\"][^'\"]+['\"]" src/test subprojects/*/src/test 2>/dev/null \
| sed -E "s/.*@Grab\(\s*(value\s*=\s*)?['\"]([^'\"]+)['\"].*/\2/" \
| grep -E '^[a-zA-Z0-9._-]+:[a-zA-Z0-9._-]+:[a-zA-Z0-9._+-]+$' \
| sort -u)
[ -z "$coords" ] && { echo "No @Grab coords — skipping"; exit 0; }
n=$(printf '%s\n' "$coords" | wc -l | tr -d ' ')
echo "Pre-warming $n coords"
ok=0; fail=0
while IFS= read -r c; do
if mvn -B -q dependency:get -Dartifact="$c" -Dtransitive=true >/dev/null 2>&1; then
ok=$((ok+1))
else
fail=$((fail+1)); echo " ⚠ $c"
fi
done <<< "$coords"
echo "Pre-warm: $ok ok / $fail failed"
exit 0
timeout-minutes: 15
- name: Test with Gradle
run: ./gradlew -Pgroovy.grape.bridge-cache=true -Pcoverage=true jacocoAllReport
timeout-minutes: 60
- name: Upload coverage to Codecov
uses: codecov/codecov-action@57e3a136b779b570ffcdbf80b3bdc90e7fab3de2 # v6.0.0
with:
token: ${{ secrets.CODECOV_TOKEN }}
verbose: true