Skip to content

Commit 777e343

Browse files
Make Java Smoke Test PR workflow generic
* so that it can be used for every Java samples
1 parent 413f419 commit 777e343

File tree

22 files changed

+180
-164
lines changed

22 files changed

+180
-164
lines changed

.github/workflows/test-pull-request-java-akka.yml

Lines changed: 0 additions & 29 deletions
This file was deleted.
Lines changed: 66 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,63 +1,78 @@
1-
name: Test Pull Request (Java)
1+
name: Smoke Test Pull Request (Java)
22

33
on:
44
merge_group:
55
pull_request:
66
branches:
7-
- main
7+
- main
88
paths:
9-
- 'java/**'
10-
- '!java/native-image/**'
11-
- '!java/java-node/**'
9+
- 'java/**'
1210

1311
jobs:
12+
prepare:
13+
name: Prepare
14+
runs-on: ubuntu-latest
15+
outputs:
16+
matrix: ${{ steps.paths.outputs.matrix }}
17+
steps:
18+
- name: Checkout
19+
uses: actions/checkout@v4
20+
with:
21+
fetch-depth: 0
22+
- name: Discover changed paths
23+
id: paths
24+
run: |
25+
env
26+
# see: https://stackoverflow.com/a/8721550/24069 for usage of paste
27+
changed_java_folders=$( git diff --name-only --merge-base origin/$GITHUB_BASE_REF $GITHUB_SHA | xargs -n 1 dirname | sort -k 2 | uniq | grep -v "^\." )
28+
29+
smoke_test_folders=""
30+
while read -r changed_folder
31+
do
32+
echo "working on $changed_folder"
33+
smoke_test=""
34+
current_folder=$changed_folder
35+
while [ -z "$smoke_test" ] && [ "$current_folder" != "." ]
36+
do
37+
echo "--smoke_test is $smoke_test"
38+
echo "--current_folder is $current_folder"
39+
if [[ -s $current_folder/smoke_test ]]; then
40+
smoke_test="$current_folder/smoke_test"
41+
else
42+
current_folder=$(dirname $current_folder)
43+
fi
44+
done
45+
if [ "$current_folder" != "." ]; then
46+
smoke_test_folders="$smoke_test_folders\"$smoke_test\"\n"
47+
fi
48+
done <<<"$changed_java_folders"
49+
50+
smoke_test_folders=$( echo -e $smoke_test_folders | uniq | grep "\S" | paste -s -d, -)
51+
52+
echo "These are the Java folders where we found changes for this PR : $changed_java_folders" >> $GITHUB_STEP_SUMMARY
53+
echo "These are the Java folders where we found changes AND the presence of smoke tests for this PR : $smoke_test_folders" >> $GITHUB_STEP_SUMMARY
54+
echo "matrix={\"java_sample_folder\":[$smoke_test_folders]}" >> $GITHUB_OUTPUT
55+
echo "This is how the matrix will look like: $(cat $GITHUB_OUTPUT)"
56+
1457
smoke:
58+
needs: prepare
1559
name: Smoke Tests
1660
runs-on: ubuntu-latest
61+
strategy:
62+
matrix: ${{ fromJSON(needs.prepare.outputs.matrix) }}
63+
1764
steps:
18-
- name: Setup Go
19-
uses: actions/setup-go@v4
20-
with:
21-
go-version: 1.18.x
22-
23-
- name: Checkout
24-
uses: actions/checkout@v4
25-
26-
- name: Cache local Gradle repository
27-
uses: actions/cache@v3
28-
with:
29-
path: |
30-
~/.gradle/caches
31-
~/.gradle/wrapper
32-
key: ${{ runner.os }}-gradle-${{ hashFiles('java/**/*.gradle*', 'java/**/gradle-wrapper.properties') }}
33-
restore-keys: |
34-
${{ runner.os }}-gradle-
35-
36-
- name: Cache local Maven repository
37-
uses: actions/cache@v3
38-
with:
39-
path: |
40-
~/.m2/repository
41-
~/.m2/wrapper
42-
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml', 'java/**/maven-wrapper.properties') }}
43-
restore-keys: |
44-
${{ runner.os }}-maven-
45-
46-
- name: Setup Directories
47-
run: |
48-
#!/usr/bin/env bash
49-
set -euo pipefail
50-
51-
mkdir -p ~/.m2/repository
52-
mkdir -p ~/.m2/repository/wrapper/dists
53-
mkdir -p ~/.gradle/caches
54-
mkdir -p ~/.gradle/wrapper/dists
55-
chmod -R 775 ~/.m2
56-
chmod -R 775 ~/.gradle
57-
58-
- name: Test Java Samples
59-
run: |
60-
./scripts/smoke.sh --suite java \
61-
--builder paketobuildpacks/builder:full \
62-
--builder paketobuildpacks/builder:base \
63-
--builder paketobuildpacks/builder:tiny
65+
- name: Setup Go
66+
uses: actions/setup-go@v4
67+
with:
68+
go-version: 1.20.x
69+
70+
- name: Checkout
71+
uses: actions/checkout@v4
72+
73+
- name: Smoke Test Java samples
74+
run: |
75+
echo "About to run the smoke test script against this suite folder: ${{ matrix.java_sample_folder }}/smoke_test"
76+
./scripts/smoke.sh --suite ${{ matrix.java_sample_folder }} \
77+
--builder paketobuildpacks/builder:base \
78+
--builder paketobuildpacks/builder:tiny

java/akka/smoke_test/akka_test.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@ func testAkkaWithBuilder(builder string) func(*testing.T, spec.G, spec.S) {
4646

4747
pack occam.Pack
4848
docker occam.Docker
49-
home string = os.Getenv("HOME")
5049
)
5150

5251
it.Before(func() {
@@ -81,7 +80,7 @@ func testAkkaWithBuilder(builder string) func(*testing.T, spec.G, spec.S) {
8180

8281
err = docker.Image.Remove.Execute(image.ID)
8382
if err != nil {
84-
Expect(err.Error()).To(ContainSubstring("failed to remove docker image: exit status 1: Error"))
83+
Expect(err).To(MatchError(ContainSubstring("failed to remove docker image: exit status 1: Error")))
8584
} else {
8685
Expect(err).ToNot(HaveOccurred())
8786
}
@@ -96,14 +95,13 @@ func testAkkaWithBuilder(builder string) func(*testing.T, spec.G, spec.S) {
9695
}
9796

9897
var err error
99-
source, err = occam.Source(filepath.Join("../../", "akka"))
98+
source, err = occam.Source(filepath.Join("../"))
10099
Expect(err).NotTo(HaveOccurred())
101100

102101
var logs fmt.Stringer
103102
image, logs, err = pack.Build.
104103
WithPullPolicy("never").
105104
WithBuilder(builder).
106-
WithVolumes(fmt.Sprintf("%s/.m2:/home/cnb/.m2:rw", home)).
107105
WithGID("123").
108106
Execute(name, source)
109107
Expect(err).ToNot(HaveOccurred(), logs.String)

java/application-insights/smoke_test/application_insights_test.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@ func testApplicationInsightsWithBuilders(builder string) func(*testing.T, spec.G
4545

4646
pack occam.Pack
4747
docker occam.Docker
48-
home string = os.Getenv("HOME")
4948
)
5049

5150
it.Before(func() {
@@ -80,7 +79,7 @@ func testApplicationInsightsWithBuilders(builder string) func(*testing.T, spec.G
8079

8180
err = docker.Image.Remove.Execute(image.ID)
8281
if err != nil {
83-
Expect(err).To(MatchError("failed to remove docker image: exit status 1: Error: No such image:"))
82+
Expect(err).To(MatchError(ContainSubstring("failed to remove docker image: exit status 1: Error")))
8483
} else {
8584
Expect(err).ToNot(HaveOccurred())
8685
}
@@ -91,14 +90,13 @@ func testApplicationInsightsWithBuilders(builder string) func(*testing.T, spec.G
9190
context("app uses application insights", func() {
9291
it("builds successfully", func() {
9392
var err error
94-
source, err = occam.Source(filepath.Join("../java", "application-insights"))
93+
source, err = occam.Source(filepath.Join("../"))
9594
Expect(err).NotTo(HaveOccurred())
9695

9796
var logs fmt.Stringer
9897
image, logs, err = pack.Build.
9998
WithPullPolicy("never").
10099
WithBuilder(builder).
101-
WithVolumes(fmt.Sprintf("%s/.m2:/home/cnb/.m2:rw", home)).
102100
WithGID("123").
103101
Execute(name, source)
104102
Expect(err).ToNot(HaveOccurred(), logs.String)

java/aspectj_test.go renamed to java/aspectj/smoke_test/aspectj_test.go

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1-
package java_test
1+
package aspectj_test
22

33
import (
4+
"flag"
45
"fmt"
6+
"github.com/paketo-buildpacks/samples/tests"
57
"os"
68
"path/filepath"
79
"testing"
@@ -15,6 +17,11 @@ import (
1517
. "github.com/paketo-buildpacks/occam/matchers"
1618
)
1719

20+
var builders tests.BuilderFlags
21+
22+
func init() {
23+
flag.Var(&builders, "name", "the name a builder to test with")
24+
}
1825
func TestAspectJ(t *testing.T) {
1926
Expect := NewWithT(t).Expect
2027

@@ -37,7 +44,6 @@ func testAspectJWithBuilder(builder string) func(*testing.T, spec.G, spec.S) {
3744

3845
pack occam.Pack
3946
docker occam.Docker
40-
home string = os.Getenv("HOME")
4147
)
4248

4349
it.Before(func() {
@@ -72,7 +78,7 @@ func testAspectJWithBuilder(builder string) func(*testing.T, spec.G, spec.S) {
7278

7379
err = docker.Image.Remove.Execute(image.ID)
7480
if err != nil {
75-
Expect(err).To(MatchError("failed to remove docker image: exit status 1: Error: No such image:"))
81+
Expect(err).To(MatchError(ContainSubstring("failed to remove docker image: exit status 1: Error")))
7682
} else {
7783
Expect(err).ToNot(HaveOccurred())
7884
}
@@ -83,14 +89,13 @@ func testAspectJWithBuilder(builder string) func(*testing.T, spec.G, spec.S) {
8389
context("app uses aspectj", func() {
8490
it("builds successfully", func() {
8591
var err error
86-
source, err = occam.Source(filepath.Join("../java", "aspectj"))
92+
source, err = occam.Source(filepath.Join("../"))
8793
Expect(err).NotTo(HaveOccurred())
8894

8995
var logs fmt.Stringer
9096
image, logs, err = pack.Build.
9197
WithPullPolicy("never").
9298
WithBuilder(builder).
93-
WithVolumes(fmt.Sprintf("%s/.m2:/home/cnb/.m2:rw", home)).
9499
WithGID("123").
95100
Execute(name, source)
96101
Expect(err).ToNot(HaveOccurred(), logs.String)

java/deps_test.go renamed to java/deps/smoke_test/deps_test.go

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1-
package java_test
1+
package deps_test
22

33
import (
4+
"flag"
45
"fmt"
6+
"github.com/paketo-buildpacks/samples/tests"
57
"os"
68
"path/filepath"
79
"testing"
@@ -15,6 +17,11 @@ import (
1517
. "github.com/paketo-buildpacks/occam/matchers"
1618
)
1719

20+
var builders tests.BuilderFlags
21+
22+
func init() {
23+
flag.Var(&builders, "name", "the name a builder to test with")
24+
}
1825
func TestDeps(t *testing.T) {
1926
Expect := NewWithT(t).Expect
2027

@@ -37,7 +44,6 @@ func testDepsWithBuilder(builder string) func(*testing.T, spec.G, spec.S) {
3744

3845
pack occam.Pack
3946
docker occam.Docker
40-
home string = os.Getenv("HOME")
4147
)
4248

4349
it.Before(func() {
@@ -72,7 +78,7 @@ func testDepsWithBuilder(builder string) func(*testing.T, spec.G, spec.S) {
7278

7379
err = docker.Image.Remove.Execute(image.ID)
7480
if err != nil {
75-
Expect(err).To(MatchError("failed to remove docker image: exit status 1: Error: No such image:"))
81+
Expect(err).To(MatchError(ContainSubstring("failed to remove docker image: exit status 1: Error")))
7682
} else {
7783
Expect(err).ToNot(HaveOccurred())
7884
}
@@ -83,7 +89,7 @@ func testDepsWithBuilder(builder string) func(*testing.T, spec.G, spec.S) {
8389
context("app uses clojure tools with deps", func() {
8490
it("builds successfully", func() {
8591
var err error
86-
source, err = occam.Source(filepath.Join("../java", "deps"))
92+
source, err = occam.Source(filepath.Join("../"))
8793
Expect(err).NotTo(HaveOccurred())
8894

8995
var logs fmt.Stringer
@@ -93,7 +99,6 @@ func testDepsWithBuilder(builder string) func(*testing.T, spec.G, spec.S) {
9399
"JAVA_TOOL_OPTIONS": "-XX:MaxMetaspaceSize=100M",
94100
}).
95101
WithBuilder(builder).
96-
WithVolumes(fmt.Sprintf("%s/.m2:/home/cnb/.m2:rw", home)).
97102
WithGID("123").
98103
Execute(name, source)
99104
Expect(err).ToNot(HaveOccurred(), logs.String)

java/dist_zip_test.go renamed to java/dist-zip/smoke_test/dist_zip_test.go

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1-
package java_test
1+
package dist_zip_test
22

33
import (
4+
"flag"
45
"fmt"
6+
"github.com/paketo-buildpacks/samples/tests"
57
"os"
68
"path/filepath"
79
"strings"
@@ -16,6 +18,11 @@ import (
1618
. "github.com/paketo-buildpacks/occam/matchers"
1719
)
1820

21+
var builders tests.BuilderFlags
22+
23+
func init() {
24+
flag.Var(&builders, "name", "the name a builder to test with")
25+
}
1926
func TestDistZip(t *testing.T) {
2027
Expect := NewWithT(t).Expect
2128

@@ -38,7 +45,6 @@ func testDistZipWithBuilder(builder string) func(*testing.T, spec.G, spec.S) {
3845

3946
pack occam.Pack
4047
docker occam.Docker
41-
home string = os.Getenv("HOME")
4248
)
4349

4450
it.Before(func() {
@@ -73,7 +79,7 @@ func testDistZipWithBuilder(builder string) func(*testing.T, spec.G, spec.S) {
7379

7480
err = docker.Image.Remove.Execute(image.ID)
7581
if err != nil {
76-
Expect(err).To(MatchError("failed to remove docker image: exit status 1: Error: No such image:"))
82+
Expect(err).To(MatchError(ContainSubstring("failed to remove docker image: exit status 1: Error")))
7783
} else {
7884
Expect(err).ToNot(HaveOccurred())
7985
}
@@ -88,7 +94,7 @@ func testDistZipWithBuilder(builder string) func(*testing.T, spec.G, spec.S) {
8894
}
8995

9096
var err error
91-
source, err = occam.Source(filepath.Join("../java", "dist-zip"))
97+
source, err = occam.Source(filepath.Join("../"))
9298
Expect(err).NotTo(HaveOccurred())
9399

94100
var logs fmt.Stringer
@@ -99,7 +105,6 @@ func testDistZipWithBuilder(builder string) func(*testing.T, spec.G, spec.S) {
99105
"BP_GRADLE_BUILD_ARGUMENTS": "--no-daemon -x test bootDistZip",
100106
"BP_GRADLE_BUILT_ARTIFACT": "build/distributions/*.zip"}).
101107
WithBuilder(builder).
102-
WithVolumes(fmt.Sprintf("%s/.gradle:/home/cnb/.gradle:rw", home)).
103108
WithGID("123").
104109
Execute(name, source)
105110
Expect(err).ToNot(HaveOccurred(), logs.String)

0 commit comments

Comments
 (0)