-
Notifications
You must be signed in to change notification settings - Fork 174
121 lines (117 loc) · 4.71 KB
/
build-test-gumtree.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
name: Build, Test and Deploy GumTree
on:
push:
branches: [ main ]
tags:
- 'v*'
pull_request:
branches: [ main ]
schedule:
- cron: '59 23 * * SUN'
workflow_dispatch:
concurrency:
group: "build-${{ github.head_ref || github.ref }}"
cancel-in-progress: true
jobs:
build-test-deploy:
runs-on: ubuntu-latest
container: gumtreediff/gumtree:latest
environment: MavenCentral
if: ${{ !(contains(github.event.head_commit.message, '[no ci]') || startsWith(github.event.head_commit.message, 'doc')) }}
steps:
- name: checkout gumtree
uses: actions/checkout@v4
with:
submodules: recursive
show-progress: ''
- name: retrieve gumtree version
id: version
run: echo "VERSION=$(cat build.gradle | grep "projectsVersion =" | cut -f 2 -d "'")" >> $GITHUB_OUTPUT
shell: bash
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v3
- name: build gumtree and run benchmarks
run: ./gradlew -PtestNative build :benchmark:runOnDefects4J :benchmark:runOnGhJava :benchmark:execNotebook
- name: upload benchmarks results
uses: actions/upload-artifact@v4
with:
name: benchmark-report
path: benchmark/build/reports/analysis.html
- name: generate jacoco report
run: ./gradlew jacocoRootReport
- name: upload coverage report
uses: actions/upload-artifact@v4
with:
name: coverage-report
path: build/reports/jacoco/jacocoRootReport/html/
- name: generate test report
run: ./gradlew testReport
- name: upload test report
uses: actions/upload-artifact@v4
with:
name: test-report
path: build/reports/tests
- name: upload snapshot package
env:
ORG_GRADLE_PROJECT_sonatypeUsername: ${{ secrets.ORG_GRADLE_PROJECT_SONATYPEUSERNAME }}
ORG_GRADLE_PROJECT_sonatypePassword: ${{ secrets.ORG_GRADLE_PROJECT_SONATYPEPASSWORD }}
if: ${{ github.event_name == 'schedule' && contains(steps.version.outputs.VERSION, 'SNAPSHOT') }}
run: ./gradlew publish
- name: upload release package
if: ${{ github.event_name == 'push' && !contains(steps.version.outputs.VERSION, 'SNAPSHOT') && endsWith(github.ref, steps.version.outputs.VERSION) }}
run: ./gradlew publishToSonatype closeAndReleaseSonatypeStagingRepository
env:
ORG_GRADLE_PROJECT_sonatypeUsername: ${{ secrets.ORG_GRADLE_PROJECT_SONATYPEUSERNAME }}
ORG_GRADLE_PROJECT_sonatypePassword: ${{ secrets.ORG_GRADLE_PROJECT_SONATYPEPASSWORD }}
ORG_GRADLE_PROJECT_gumtreeKey: ${{ secrets.GUMTREE_KEY }}
ORG_GRADLE_PROJECT_gumtreeKeyPassphrase: ${{ secrets.GUMTREE_KEY_PASSPHRASE }}
- name: create github release
if: ${{ github.event_name == 'push' && !contains(steps.version.outputs.VERSION, 'SNAPSHOT') && endsWith(github.ref, steps.version.outputs.VERSION) }}
uses: ncipollo/release-action@v1
with:
artifacts: "dist-native/build/distributions/gumtree*.zip"
bodyFile: "CHANGELOG.md"
token: ${{ secrets.GITHUB_TOKEN }}
docker:
runs-on: ubuntu-latest
needs: build-test-deploy
if: ${{ github.event_name == 'schedule' && !(contains(github.event.head_commit.message, '[no ci]') || startsWith(github.event.head_commit.message, 'doc')) }}
steps:
- name: set up docker buildx
uses: docker/setup-buildx-action@v3
- name: Cache Docker layers
uses: actions/cache@v3
with:
path: /tmp/.buildx-cache
key: ${{ runner.os }}-buildx
- name: set docker image tag
id: set-tag
run: |
if [[ $GITHUB_REF == refs/tags/v* ]]; then
echo "IMAGE_TAG=$(echo $GITHUB_REF | sed 's/refs\/tags\///')" >> $GITHUB_ENV
else
echo "IMAGE_TAG=latest" >> $GITHUB_ENV
fi
- name: check secrets presence
id: checksecrets
shell: bash
run: |
if [ "$SECRET" == "" ]; then
echo "secretspresent=false" >> $GITHUB_OUTPUT
else
echo "secretspresent=true" >> $GITHUB_OUTPUT
fi
env:
SECRET: ${{ secrets.DOCKERHUB_TOKEN }}
- name: login to Docker Hub
uses: docker/login-action@v3
if: (steps.checksecrets.outputs.secretspresent == 'true')
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: build and push docker image
uses: docker/build-push-action@v5
with:
file: 'docker/Dockerfile'
push: ${{ steps.checksecrets.outputs.secretspresent }}
tags: gumtreediff/gumtree:${{ env.IMAGE_TAG }}