Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@ module github.com/containifyci/java

go 1.25.0

// replace github.com/containifyci/engine-ci => ../engine-ci

require (
github.com/containifyci/engine-ci v0.23.0
github.com/containifyci/engine-ci v0.24.2
github.com/stretchr/testify v1.11.1
)

Expand Down
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -70,8 +70,8 @@ github.com/containers/psgo v1.9.0 h1:eJ74jzSaCHnWt26OlKZROSyUyRcGDf+gYBdXnxrMW4g
github.com/containers/psgo v1.9.0/go.mod h1:0YoluUm43Mz2UnBIh1P+6V6NWcbpTL5uRtXyOcH0B5A=
github.com/containers/storage v1.58.0 h1:Q7SyyCCjqgT3wYNgRNIL8o/wUS92heIj2/cc8Sewvcc=
github.com/containers/storage v1.58.0/go.mod h1:w7Jl6oG+OpeLGLzlLyOZPkmUso40kjpzgrHUk5tyBlo=
github.com/containifyci/engine-ci v0.23.0 h1:buMLR+dOqct9vVYx4S35rkyT8iJuzqHJHjH7xO+2iog=
github.com/containifyci/engine-ci v0.23.0/go.mod h1:SWRTTkF3IADlTwY0w20hCukdeJKOsuS8XmbmoWZE1kw=
github.com/containifyci/engine-ci v0.24.2 h1:TTiPVgY0F2NR0OHq8xO9H45lhpkZQL2Da5M8Irt5x5k=
github.com/containifyci/engine-ci v0.24.2/go.mod h1:SWRTTkF3IADlTwY0w20hCukdeJKOsuS8XmbmoWZE1kw=
github.com/containifyci/engine-ci/protos2 v0.15.2 h1:CjUuYqXt0gAakiUCDWn5JaO+oTesFMeyGj0Vs7A24qc=
github.com/containifyci/engine-ci/protos2 v0.15.2/go.mod h1:k7k6Zego6VwwYFYHM4LcBR34E6NDxY1OO8lgVQzMpQ0=
github.com/containifyci/go-self-update v0.2.2 h1:qbactPBL9Ad90bS6v5dIjulNFwqxj/C+IK8ZdFxe9CM=
Expand Down
12 changes: 6 additions & 6 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,15 +24,15 @@ func main() {
slog.Info("Version", "version", v)

arg := cmd.GetBuild()
// // cmd.Init(arg)

bld := cmd.Init(arg[0].Builds[0])

bs := build.NewBuildSteps(
append(maven.Steps(arg[0].Builds[0]),
sonarcloud.New(*arg[0].Builds[0]),
trivy.New(*arg[0].Builds[0]),
github.New(*arg[0].Builds[0]))...,
append(maven.Steps(bld),
sonarcloud.New(*bld),
trivy.New(*bld),
github.New(*bld))...,
)

cmd.InitBuildSteps(bs)
err := cmd.Execute()
if err != nil {
Expand Down
13 changes: 12 additions & 1 deletion pkg/maven/Dockerfile.maven
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,18 @@ FROM eclipse-temurin:17-jdk-jammy
# iproute2 needed for the testcontainers to work within a container (DIND)
RUN apt update && \
apt -y upgrade && \
apt -y install protobuf-compiler iproute2 && \
apt -y install protobuf-compiler iproute2 curl tar && \
apt -y autoremove && \
apt -y clean && \
rm -rf /var/lib/apt/lists/*

# Install Maven
ARG MAVEN_VERSION=3.9.11

RUN curl -fsSL https://dlcdn.apache.org/maven/maven-3/${MAVEN_VERSION}/binaries/apache-maven-${MAVEN_VERSION}-bin.tar.gz \
| tar -xz -C /opt \
&& mv /opt/apache-maven-${MAVEN_VERSION} /opt/maven \
&& ln -s /opt/maven/bin/mvn /usr/local/bin/mvn

ENV MAVEN_HOME=/opt/maven \
MAVEN_CONFIG=/root/.m2
11 changes: 11 additions & 0 deletions pkg/maven/Dockerfile.maven_17-jdk-jammy
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,14 @@ RUN apt update && \
apt -y autoremove && \
apt -y clean && \
rm -rf /var/lib/apt/lists/*

# Install Maven
ARG MAVEN_VERSION=3.9.11

RUN curl -fsSL https://dlcdn.apache.org/maven/maven-3/${MAVEN_VERSION}/binaries/apache-maven-${MAVEN_VERSION}-bin.tar.gz \
| tar -xz -C /opt \
&& mv /opt/apache-maven-${MAVEN_VERSION} /opt/maven \
&& ln -s /opt/maven/bin/mvn /usr/local/bin/mvn

ENV MAVEN_HOME=/opt/maven \
MAVEN_CONFIG=/root/.m2
11 changes: 11 additions & 0 deletions pkg/maven/Dockerfile.maven_21-jdk-jammy
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,14 @@ RUN apt update && \
apt -y autoremove && \
apt -y clean && \
rm -rf /var/lib/apt/lists/*

# Install Maven
ARG MAVEN_VERSION=3.9.11

RUN curl -fsSL https://dlcdn.apache.org/maven/maven-3/${MAVEN_VERSION}/binaries/apache-maven-${MAVEN_VERSION}-bin.tar.gz \
| tar -xz -C /opt \
&& mv /opt/apache-maven-${MAVEN_VERSION} /opt/maven \
&& ln -s /opt/maven/bin/mvn /usr/local/bin/mvn

ENV MAVEN_HOME=/opt/maven \
MAVEN_CONFIG=/root/.m2
4 changes: 2 additions & 2 deletions pkg/maven/buildscript.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,13 @@ func Script(bs *BuildScript) string {
func simpleScript(bs *BuildScript) string {
return `#!/bin/sh
set -xe
./mvnw --batch-mode package
mvn --batch-mode package
`
}

func verboseScript(bs *BuildScript) string {
return `#!/bin/sh
set -xe
./mvnw --batch-mode package -X
mvn --batch-mode package -X
`
}
4 changes: 2 additions & 2 deletions pkg/maven/buildscript_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,12 @@ func TestSimpleScript(t *testing.T) {
bs := NewBuildScript(false, "localhost")
script := Script(bs)

assert.Equal(t, "#!/bin/sh\nset -xe\n./mvnw --batch-mode package\n", script)
assert.Equal(t, "#!/bin/sh\nset -xe\nmvn --batch-mode package\n", script)
}

func TestVerboseScript(t *testing.T) {
bs := NewBuildScript(true, "localhost")
script := Script(bs)

assert.Equal(t, "#!/bin/sh\nset -xe\n./mvnw --batch-mode package -X\n", script)
assert.Equal(t, "#!/bin/sh\nset -xe\nmvn --batch-mode package -X\n", script)
}
48 changes: 21 additions & 27 deletions pkg/maven/maven.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,34 +21,41 @@ import (
)

const (
ProdImage = "registry.access.redhat.com/ubi8/openjdk-%s:latest"
ProdImage = "tomcat:latest"
CacheLocation = "/root/.m2/"
)

//go:embed Dockerfile.*
var f embed.FS

type MavenContainer struct {
App string
File string
Folder string
Image string
ImageTag string
Platform types.Platform
App string
File u.SrcFile
Folder string
Image string
ImageTag string
Platform types.Platform
ProdImage string

Version string
*container.Container
}

func New(build *container.Build, version string) *MavenContainer {
prodImage := build.Custom.String("image")
if prodImage == "" {
prodImage = ProdImage
}
return &MavenContainer{
App: build.App,
Container: container.New(*build),
Image: build.Image,
Folder: build.Folder,
File: u.SrcFile(build.File),
ImageTag: build.ImageTag,
Platform: build.Platform,
Version: version,
ProdImage: prodImage,
}
}

Expand Down Expand Up @@ -80,11 +87,11 @@ func CacheFolder() string {
}

func (c *MavenContainer) Pull() error {
return c.Container.Pull(fmt.Sprintf(ProdImage, c.Version))
return c.Container.Pull(c.ProdImage)
}

func (c *MavenContainer) Images() []string {
return []string{c.MavenImage(), fmt.Sprintf(ProdImage, c.Version)}
return []string{c.MavenImage(), c.ProdImage}
}

// TODO: provide a shorter checksum
Expand All @@ -103,7 +110,6 @@ func (c *MavenContainer) MavenImage() string {
tag := ComputeChecksum(dockerFile)
image := fmt.Sprintf("maven-3-eclipse-temurin-%s-alpine", c.Version)
return utils.ImageURI(c.GetBuild().ContainifyRegistry, image, tag)
// return fmt.Sprintf("%s/%s/%s:%s", build.Registry, "containifyci", "maven-3-eclipse-temurin-17-alpine", tag)
}

func (c *MavenContainer) BuildMavenImage() error {
Expand Down Expand Up @@ -247,22 +253,16 @@ func NewProd(arg *container.Build, version string) build.Build {
return container.Prod()
},
name: "maven-prod",
images: []string{fmt.Sprintf(ProdImage, version)},
images: []string{container.ProdImage},
async: false,
}
}

func (c *MavenContainer) Prod() error {
opts := types.ContainerConfig{}
opts.Image = fmt.Sprintf(ProdImage, c.Version)
opts.Env = []string{
"JAVA_OPTS=-javaagent:/deployments/dd-java-agent.jar -Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager",
"JAVA_APP_JAR=/deployments/quarkus-run.jar",
}
opts.Image = c.ProdImage
opts.Platform = types.AutoPlatform
opts.Cmd = []string{"sleep", "300"}
opts.User = "185"
opts.WorkingDir = "/src"

err := c.Create(opts)
if err != nil {
Expand All @@ -276,19 +276,13 @@ func (c *MavenContainer) Prod() error {
os.Exit(1)
}

err = c.Exec("curl", "-Lo", "/deployments/dd-java-agent.jar", "https://dtdg.co/latest-java-tracer")
if err != nil {
slog.Error("Failed to execute command: %s", "error", err)
os.Exit(1)
}

err = c.CopyDirectoryTo(c.Folder, "/deployments")
err = c.CopyFileTo(c.File.Host(), "/usr/local/tomcat/webapps/jpetstore.war")
if err != nil {
slog.Error("Failed to copy directory to container: %s", "error", err)
slog.Error("Failed to copy file to container", "error", err, "file", c.File)
os.Exit(1)
}

imageId, err := c.Commit(fmt.Sprintf("%s:%s", c.Image, c.ImageTag), "Created from container", "CMD [\"/usr/local/s2i/run\"]", "USER 185")
imageId, err := c.Commit(fmt.Sprintf("%s:%s", c.Image, c.ImageTag), "Created from container", "CMD [\"catalina.sh\", \"run\"]")
if err != nil {
slog.Error("Failed to commit container: %s", "error", err)
os.Exit(1)
Expand Down
37 changes: 18 additions & 19 deletions pkg/maven/maven_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import (
"github.com/containifyci/engine-ci/pkg/logger"
"github.com/containifyci/engine-ci/pkg/network"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)

func InitTest(t *testing.T) *container.Build {
Expand Down Expand Up @@ -43,7 +44,7 @@ func TestNew(t *testing.T) {
assert.False(t, mc.IsAsync())
assert.Equal(t, "test-image", mc.Image)
assert.Equal(t, "17", mc.Version)
assert.Equal(t, []string{"containifyci/maven-3-eclipse-temurin-17-alpine:214f702cd3dee211717ca17936aca88df6913e1db40f822ef9918e4369ea927d", "registry.access.redhat.com/ubi8/openjdk-17:latest"}, mc.Images())
assert.Equal(t, []string{"containifyci/maven-3-eclipse-temurin-17-alpine:cdbe73779492603b08a3e880bf25754e3a8e865811c51c0b45e2c5edfc5a8476", "tomcat:latest"}, mc.Images())
}

func TestNewProd(t *testing.T) {
Expand All @@ -52,7 +53,7 @@ func TestNewProd(t *testing.T) {
mc := NewProd(build, "17")
assert.Equal(t, "maven-prod", mc.Name())
assert.False(t, mc.IsAsync())
assert.Equal(t, []string{"registry.access.redhat.com/ubi8/openjdk-17:latest"}, mc.Images())
assert.Equal(t, []string{"tomcat:latest"}, mc.Images())
}

func TestPull(t *testing.T) {
Expand All @@ -66,7 +67,7 @@ func TestPull(t *testing.T) {
assert.NoError(t, err)

if v, ok := cRuntime.(*critest.MockContainerManager); ok {
assert.Equal(t, "registry.access.redhat.com/ubi8/openjdk-17:latest pulled", v.ImagesLogEntries[0])
assert.Equal(t, "tomcat:latest pulled", v.ImagesLogEntries[0])
}
}

Expand All @@ -85,14 +86,14 @@ func TestBuildLinuxPodman(t *testing.T) {

mc := New(arg, "17")
err := mc.Build()
assert.NoError(t, err)
require.NoError(t, err)

cRuntime, err := cri.InitContainerRuntime()
assert.NoError(t, err)

if v, ok := cRuntime.(*critest.MockContainerManager); ok {
img := "containifyci/maven-3-eclipse-temurin-17-alpine:214f702cd3dee211717ca17936aca88df6913e1db40f822ef9918e4369ea927d"
assert.Len(t, v.ContainerLogsEntries[img], 2)
img := "containifyci/maven-3-eclipse-temurin-17-alpine:cdbe73779492603b08a3e880bf25754e3a8e865811c51c0b45e2c5edfc5a8476"
require.Len(t, v.ContainerLogsEntries[img], 2)
assert.Equal(t, []string{"container starting", "container running"}, v.ContainerLogsEntries[img])

assert.Equal(t, "started", v.GetContainerByImage(img).State)
Expand Down Expand Up @@ -125,20 +126,20 @@ func TestBuildDarwinPodman(t *testing.T) {
assert.NoError(t, err)

if v, ok := cRuntime.(*critest.MockContainerManager); ok {
v.Errors["containifyci/maven-3-eclipse-temurin-17-alpine:214f702cd3dee211717ca17936aca88df6913e1db40f822ef9918e4369ea927d"] = errors.New("image not found")
v.Errors["containifyci/maven-3-eclipse-temurin-17-alpine:cdbe73779492603b08a3e880bf25754e3a8e865811c51c0b45e2c5edfc5a8476"] = errors.New("image not found")

err := mc.Run()
assert.NoError(t, err)

img := "containifyci/maven-3-eclipse-temurin-17-alpine:214f702cd3dee211717ca17936aca88df6913e1db40f822ef9918e4369ea927d"
img := "containifyci/maven-3-eclipse-temurin-17-alpine:cdbe73779492603b08a3e880bf25754e3a8e865811c51c0b45e2c5edfc5a8476"
assert.Len(t, v.ContainerLogsEntries[img], 2)
assert.Equal(t, []string{"container starting", "container running"}, v.ContainerLogsEntries[img])

assert.Equal(t, "started", v.GetContainerByImage(img).State)
assert.Equal(t, []string{"sh", "/tmp/script.sh"}, v.GetContainerByImage(img).Opts.Cmd)
assert.Equal(t, "#!/bin/sh\nset -xe\n./mvnw --batch-mode package\n", v.GetContainerByImage(img).Opts.Script)
assert.Equal(t, "#!/bin/sh\nset -xe\nmvn --batch-mode package\n", v.GetContainerByImage(img).Opts.Script)
assert.Equal(t, "/src", v.GetContainerByImage(img).Opts.WorkingDir)
assert.Equal(t, "containifyci/maven-3-eclipse-temurin-17-alpine:214f702cd3dee211717ca17936aca88df6913e1db40f822ef9918e4369ea927d", v.GetContainerByImage(img).Opts.Image)
assert.Equal(t, "containifyci/maven-3-eclipse-temurin-17-alpine:cdbe73779492603b08a3e880bf25754e3a8e865811c51c0b45e2c5edfc5a8476", v.GetContainerByImage(img).Opts.Image)
assert.Equal(t, int64(4073741824), v.GetContainerByImage(img).Opts.Memory)
assert.Equal(t, uint64(2048), v.GetContainerByImage(img).Opts.CPU)

Expand All @@ -149,16 +150,16 @@ func TestBuildDarwinPodman(t *testing.T) {

//expect 3 images opnejdk image and maven-3-eclipse-temurin-17-alpine twice for both platforms amd64 and arm64
assert.Len(t, v.Images, 3)
assert.NotNil(t, v.Images["registry.access.redhat.com/ubi8/openjdk-17:latest"])
assert.Equal(t, "linux/amd64", v.Images["containifyci/maven-3-eclipse-temurin-17-alpine:214f702cd3dee211717ca17936aca88df6913e1db40f822ef9918e4369ea927d-linux/amd64"].Opts.Platform.String())
assert.Equal(t, "linux/arm64", v.Images["containifyci/maven-3-eclipse-temurin-17-alpine:214f702cd3dee211717ca17936aca88df6913e1db40f822ef9918e4369ea927d-linux/arm64"].Opts.Platform.String())
assert.NotNil(t, v.Images["tomcat:latest"])
assert.Equal(t, "linux/amd64", v.Images["containifyci/maven-3-eclipse-temurin-17-alpine:cdbe73779492603b08a3e880bf25754e3a8e865811c51c0b45e2c5edfc5a8476-linux/amd64"].Opts.Platform.String())
assert.Equal(t, "linux/arm64", v.Images["containifyci/maven-3-eclipse-temurin-17-alpine:cdbe73779492603b08a3e880bf25754e3a8e865811c51c0b45e2c5edfc5a8476-linux/arm64"].Opts.Platform.String())
}
}

func TestProd(t *testing.T) {
expectedEnvs := []string{
"JAVA_OPTS=-javaagent:/deployments/dd-java-agent.jar -Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager",
"JAVA_APP_JAR=/deployments/quarkus-run.jar",
// "JAVA_OPTS=-javaagent:/deployments/dd-java-agent.jar -Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager",
// "JAVA_APP_JAR=/deployments/quarkus-run.jar",
}

arg := InitTest(t)
Expand All @@ -174,15 +175,13 @@ func TestProd(t *testing.T) {
err := mc.Run()
assert.NoError(t, err)

img := "registry.access.redhat.com/ubi8/openjdk-17:latest"
img := "tomcat:latest"
assert.Len(t, v.ContainerLogsEntries[img], 3)
assert.Equal(t, []string{"container starting", "container running", "container stopped"}, v.ContainerLogsEntries[img])

assert.Equal(t, "stopped", v.GetContainerByImage(img).State)
assert.Equal(t, []string{"sleep", "300"}, v.GetContainerByImage(img).Opts.Cmd)
assert.Equal(t, "185", v.GetContainerByImage(img).Opts.User)
assert.Equal(t, "/src", v.GetContainerByImage(img).Opts.WorkingDir)
assert.Equal(t, "registry.access.redhat.com/ubi8/openjdk-17:latest", v.GetContainerByImage(img).Opts.Image)
assert.Equal(t, "tomcat:latest", v.GetContainerByImage(img).Opts.Image)

fmt.Printf("Envs %+v\n", v.GetContainerByImage(img).Opts.Env)
for _, env := range expectedEnvs {
Expand Down
6 changes: 3 additions & 3 deletions pkg/maven/steps_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ func TestStepsv17(t *testing.T) {
images := append(steps[0].Images(), steps[1].Images()...)

assert.Equal(t, []string{"maven", "maven-prod"}, names)
assert.Equal(t, []string{"containifyci/maven-3-eclipse-temurin-17-alpine:214f702cd3dee211717ca17936aca88df6913e1db40f822ef9918e4369ea927d", "registry.access.redhat.com/ubi8/openjdk-17:latest", "registry.access.redhat.com/ubi8/openjdk-17:latest"}, images)
assert.Equal(t, []string{"containifyci/maven-3-eclipse-temurin-17-alpine:cdbe73779492603b08a3e880bf25754e3a8e865811c51c0b45e2c5edfc5a8476", "tomcat:latest", "tomcat:latest"}, images)
}

func TestStepsv21(t *testing.T) {
Expand All @@ -29,7 +29,7 @@ func TestStepsv21(t *testing.T) {
images := append(steps[0].Images(), steps[1].Images()...)

assert.Equal(t, []string{"maven", "maven-prod"}, names)
assert.Equal(t, []string{"containifyci/maven-3-eclipse-temurin-21-alpine:98108b284d14233f76bb9ce91e7932734b135f899654e48306ab07e4ca3e35d8", "registry.access.redhat.com/ubi8/openjdk-21:latest", "registry.access.redhat.com/ubi8/openjdk-21:latest"}, images)
assert.Equal(t, []string{"containifyci/maven-3-eclipse-temurin-21-alpine:889a67acb64eb60e00023503d6337c5455d2b4086d194103bd83a801dc39ec52", "tomcat:latest", "tomcat:latest"}, images)
}

func TestStepsDefault(t *testing.T) {
Expand All @@ -41,7 +41,7 @@ func TestStepsDefault(t *testing.T) {
images := append(steps[0].Images(), steps[1].Images()...)

assert.Equal(t, []string{"maven", "maven-prod"}, names)
assert.Equal(t, []string{"containifyci/maven-3-eclipse-temurin-17-alpine:214f702cd3dee211717ca17936aca88df6913e1db40f822ef9918e4369ea927d", "registry.access.redhat.com/ubi8/openjdk-17:latest", "registry.access.redhat.com/ubi8/openjdk-17:latest"}, images)
assert.Equal(t, []string{"containifyci/maven-3-eclipse-temurin-17-alpine:cdbe73779492603b08a3e880bf25754e3a8e865811c51c0b45e2c5edfc5a8476", "tomcat:latest", "tomcat:latest"}, images)
}

func TestStepsUnknown(t *testing.T) {
Expand Down
Loading