Skip to content

Commit 5a0ab3f

Browse files
committed
Merge branch 'develop' into update-from-template-merged
2 parents b1b8bf9 + 11820ca commit 5a0ab3f

File tree

22 files changed

+1245
-40
lines changed

22 files changed

+1245
-40
lines changed

.github/ISSUE_TEMPLATE/bug_report.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@ body:
1515
attributes:
1616
label: "Checklist"
1717
options:
18-
- label: "I am able to reproduce the bug with the [latest version](https://github.com/xdev-software/template-placeholder/releases/latest)"
18+
- label: "I am able to reproduce the bug with the [latest version](https://github.com/xdev-software/testcontainers-advanced-imagebuilder/releases/latest)"
1919
required: true
20-
- label: "I made sure that there are *no existing issues* - [open](https://github.com/xdev-software/template-placeholder/issues) or [closed](https://github.com/xdev-software/template-placeholder/issues?q=is%3Aissue+is%3Aclosed) - which I could contribute my information to."
20+
- label: "I made sure that there are *no existing issues* - [open](https://github.com/xdev-software/testcontainers-advanced-imagebuilder/issues) or [closed](https://github.com/xdev-software/testcontainers-advanced-imagebuilder/issues?q=is%3Aissue+is%3Aclosed) - which I could contribute my information to."
2121
required: true
2222
- label: "I have taken the time to fill in all the required details. I understand that the bug report will be dismissed otherwise."
2323
required: true

.github/ISSUE_TEMPLATE/enhancement.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ body:
1313
attributes:
1414
label: "Checklist"
1515
options:
16-
- label: "I made sure that there are *no existing issues* - [open](https://github.com/xdev-software/template-placeholder/issues) or [closed](https://github.com/xdev-software/template-placeholder/issues?q=is%3Aissue+is%3Aclosed) - which I could contribute my information to."
16+
- label: "I made sure that there are *no existing issues* - [open](https://github.com/xdev-software/testcontainers-advanced-imagebuilder/issues) or [closed](https://github.com/xdev-software/testcontainers-advanced-imagebuilder/issues?q=is%3Aissue+is%3Aclosed) - which I could contribute my information to."
1717
required: true
1818
- label: "I have taken the time to fill in all the required details. I understand that the feature request will be dismissed otherwise."
1919
required: true

.github/ISSUE_TEMPLATE/question.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ body:
1212
attributes:
1313
label: "Checklist"
1414
options:
15-
- label: "I made sure that there are *no existing issues* - [open](https://github.com/xdev-software/template-placeholder/issues) or [closed](https://github.com/xdev-software/template-placeholder/issues?q=is%3Aissue+is%3Aclosed) - which I could contribute my information to."
15+
- label: "I made sure that there are *no existing issues* - [open](https://github.com/xdev-software/testcontainers-advanced-imagebuilder/issues) or [closed](https://github.com/xdev-software/testcontainers-advanced-imagebuilder/issues?q=is%3Aissue+is%3Aclosed) - which I could contribute my information to."
1616
required: true
1717
- label: "I have taken the time to fill in all the required details. I understand that the question will be dismissed otherwise."
1818
required: true

.github/workflows/check-build.yml

+1-8
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ jobs:
4444
cache: 'maven'
4545

4646
- name: Build with Maven
47-
run: ./mvnw -B clean package
47+
run: ./mvnw -B clean package -P run-integration-tests
4848

4949
- name: Check for uncommited changes
5050
run: |
@@ -64,13 +64,6 @@ jobs:
6464
exit 1
6565
fi
6666
67-
- name: Upload demo files
68-
uses: actions/upload-artifact@v4
69-
with:
70-
name: demo-files-java-${{ matrix.java }}
71-
path: ${{ env.DEMO_MAVEN_MODULE }}/target/${{ env.DEMO_MAVEN_MODULE }}.jar
72-
if-no-files-found: error
73-
7467
checkstyle:
7568
runs-on: ubuntu-latest
7669
if: ${{ github.event_name != 'pull_request' || !startsWith(github.head_ref, 'renovate/') }}

.run/Run Demo.run.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<component name="ProjectRunConfigurationManager">
22
<configuration default="false" name="Run Demo" type="Application" factoryName="Application">
33
<option name="MAIN_CLASS_NAME" value="software.xdev.Application" />
4-
<module name="template-placeholder-demo" />
4+
<module name="testcontainers-advanced-imagebuilder-demo" />
55
<option name="WORKING_DIRECTORY" value="$MODULE_DIR$" />
66
<extension name="coverage">
77
<pattern>

CHANGELOG.md

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# 1.0.2
2+
* Do not pull images that are declared inside the Dockerfile (Multi-Stage build)
3+
4+
# 1.0.1
5+
* Minor improvements in cleanup behavior (backported from upstream)
6+
7+
# 1.0.0
8+
_Initial release_

CONTRIBUTING.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,10 @@ You should have the following things installed:
3434
* Ensure that the JDK/Java-Version is correct
3535

3636

37-
## Releasing [![Build](https://img.shields.io/github/actions/workflow/status/xdev-software/template-placeholder/release.yml?branch=master)](https://github.com/xdev-software/template-placeholder/actions/workflows/release.yml)
37+
## Releasing [![Build](https://img.shields.io/github/actions/workflow/status/xdev-software/testcontainers-advanced-imagebuilder/release.yml?branch=master)](https://github.com/xdev-software/testcontainers-advanced-imagebuilder/actions/workflows/release.yml)
3838

3939
Before releasing:
40-
* Consider doing a [test-deployment](https://github.com/xdev-software/template-placeholder/actions/workflows/test-deploy.yml?query=branch%3Adevelop) before actually releasing.
40+
* Consider doing a [test-deployment](https://github.com/xdev-software/testcontainers-advanced-imagebuilder/actions/workflows/test-deploy.yml?query=branch%3Adevelop) before actually releasing.
4141
* Check the [changelog](CHANGELOG.md)
4242

4343
If the ``develop`` is ready for release, create a pull request to the ``master``-Branch and merge the changes

README.md

+21-6
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,25 @@
1-
[![Latest version](https://img.shields.io/maven-central/v/software.xdev/template-placeholder?logo=apache%20maven)](https://mvnrepository.com/artifact/software.xdev/template-placeholder)
2-
[![Build](https://img.shields.io/github/actions/workflow/status/xdev-software/template-placeholder/check-build.yml?branch=develop)](https://github.com/xdev-software/template-placeholder/actions/workflows/check-build.yml?query=branch%3Adevelop)
3-
[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=xdev-software_template-placeholder&metric=alert_status)](https://sonarcloud.io/dashboard?id=xdev-software_template-placeholder)
1+
[![Latest version](https://img.shields.io/maven-central/v/software.xdev/testcontainers-advanced-imagebuilder?logo=apache%20maven)](https://mvnrepository.com/artifact/software.xdev/testcontainers-advanced-imagebuilder)
2+
[![Build](https://img.shields.io/github/actions/workflow/status/xdev-software/testcontainers-advanced-imagebuilder/check-build.yml?branch=develop)](https://github.com/xdev-software/testcontainers-advanced-imagebuilder/actions/workflows/check-build.yml?query=branch%3Adevelop)
3+
[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=xdev-software_testcontainers-advanced-imagebuilder&metric=alert_status)](https://sonarcloud.io/dashboard?id=xdev-software_testcontainers-advanced-imagebuilder)
44

5-
# template-placeholder
5+
# Advanced Image-Builder for Testcontainers Java
66

7+
A re-implementation of [Testcontainers Image-Builder](https://java.testcontainers.org/features/creating_images/) with the following improvements:
8+
* Allows passing a custom logger to the image build - [testcontainers-java#3093](https://github.com/testcontainers/testcontainers-java/issues/3093)
9+
* Allows using ``ARG``s for ``FROM`` - [testcontainers-java#3238](https://github.com/testcontainers/testcontainers-java/issues/3238)
10+
* Brings a custom [build-context](https://docs.docker.com/build/building/context/) processor
11+
* Works more efficient and reliable than the default implementation (however likely still not perfect)
12+
* uses ``.gitignore`` if available
13+
* Allows adding custom ignores
14+
* This way the build-context can be fine tuned in a way that the build cache works very efficiently (e.g. only re-built when actual code that matters changes)
15+
* Do not pull images that are declared inside the Dockerfile
16+
* Makes logger non generic and therefore controllable
17+
* Did some general code cleanup
18+
19+
A common use case - that can also be seen [inside the demo](./testcontainers-advanced-imagebuilder-demo/src/main/java/software/xdev/Application.java) - is for creating an image - used in e.g. Integration tests - for an application that is also inside the same repo.
720

821
## Installation
9-
[Installation guide for the latest release](https://github.com/xdev-software/template-placeholder/releases/latest#Installation)
22+
[Installation guide for the latest release](https://github.com/xdev-software/testcontainers-advanced-imagebuilder/releases/latest#Installation)
1023

1124
## Support
1225
If you need support as soon as possible and you can't wait for any pull request, feel free to use [our support](https://xdev.software/en/services/support).
@@ -15,4 +28,6 @@ If you need support as soon as possible and you can't wait for any pull request,
1528
See the [contributing guide](./CONTRIBUTING.md) for detailed instructions on how to get started with our project.
1629

1730
## Dependencies and Licenses
18-
View the [license of the current project](LICENSE) or the [summary including all dependencies](https://xdev-software.github.io/template-placeholder/dependencies)
31+
View the [license of the current project](LICENSE) or the [summary including all dependencies](https://xdev-software.github.io/testcontainers-advanced-imagebuilder/dependencies)
32+
33+
<sub>Disclaimer: This is not an official Testcontainers product and not associated</sub>

SECURITY.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@
22

33
## Reporting a Vulnerability
44

5-
Please report a security vulnerability [on GitHub Security Advisories](https://github.com/xdev-software/template-placeholder/security/advisories/new).
5+
Please report a security vulnerability [on GitHub Security Advisories](https://github.com/xdev-software/testcontainers-advanced-imagebuilder/security/advisories/new).

pom.xml

+5-4
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
<modelVersion>4.0.0</modelVersion>
66

77
<groupId>software.xdev</groupId>
8-
<artifactId>template-placeholder-root</artifactId>
9-
<version>1.0.0-SNAPSHOT</version>
8+
<artifactId>testcontainers-advanced-imagebuilder-root</artifactId>
9+
<version>1.0.3-SNAPSHOT</version>
1010
<packaging>pom</packaging>
1111

1212
<organization>
@@ -15,8 +15,9 @@
1515
</organization>
1616

1717
<modules>
18-
<module>template-placeholder</module>
19-
<module>template-placeholder-demo</module>
18+
<module>testcontainers-advanced-imagebuilder</module>
19+
<module>testcontainers-advanced-imagebuilder-dummy-app</module>
20+
<module>testcontainers-advanced-imagebuilder-demo</module>
2021
</modules>
2122

2223
<properties>

renovate.json5

+9-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
"packageRules": [
55
{
66
"description": "Ignore project internal dependencies",
7-
"packagePattern": "^software.xdev:template-placeholder",
7+
"packagePattern": "^software.xdev:testcontainers-advanced-imagebuilder",
88
"datasources": [
99
"maven"
1010
],
@@ -19,6 +19,14 @@
1919
"maven"
2020
],
2121
"groupName": "net.sourceforge.pmd"
22+
},
23+
{
24+
"description": "Docker - Java LTS",
25+
"packagePattern": "^eclipse-temurin",
26+
"matchDatasources": [
27+
"docker"
28+
],
29+
"allowedVersions": "/^21\\-alpine$/"
2230
}
2331
]
2432
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
# Stage 1: Build the dummy app
2+
ARG JAVA_VERSION=21
3+
FROM eclipse-temurin:$JAVA_VERSION-jdk-alpine AS build-env
4+
5+
RUN apk add --no-cache git bash
6+
7+
# Create non root user
8+
ARG userName=limitedbuild
9+
ARG groupName=limitedbuild
10+
ARG userId=1000
11+
12+
RUN addgroup --system ${groupName} \
13+
&& adduser --uid ${userId} --system --disabled-password --shell /bin/bash ${userName} \
14+
&& adduser ${userName} ${groupName}
15+
16+
# Create build dir
17+
RUN mkdir /build \
18+
&& chown ${userName}:${groupName} /build
19+
WORKDIR /build
20+
21+
USER ${userName}
22+
23+
# Copying context is prepared by Testcontainers
24+
COPY --chown=${userName}:${groupName} . ./
25+
26+
# RUN chmod +x ./mvnw
27+
ARG mvncmd='clean package -pl "testcontainers-advanced-imagebuilder-dummy-app" -am -T2C -Dmaven.test.skip'
28+
29+
RUN echo "Executing '$mvncmd'"
30+
RUN chmod +x ./mvnw \
31+
&& ./mvnw -B ${mvncmd}
32+
33+
# Stage 2: Build the executable image
34+
FROM eclipse-temurin:21-jre-alpine
35+
36+
ARG user=dummy-app
37+
ARG group=dummy-app
38+
ARG uid=1000
39+
ARG gid=1000
40+
ARG APP_DIR=/opt/dummy-app
41+
42+
# Create user + group + home
43+
RUN mkdir -p ${APP_DIR} \
44+
&& chown ${uid}:${gid} ${APP_DIR} \
45+
&& addgroup -g ${gid} ${group} \
46+
&& adduser -h "$APP_DIR" -u ${uid} -G ${group} -s /bin/bash -D ${user}
47+
48+
EXPOSE 8080
49+
50+
USER ${user}
51+
52+
COPY --from=build-env --chown=${user}:${group} build/testcontainers-advanced-imagebuilder-dummy-app/target/dummy-app.jar ${APP_DIR}/dummy-app.jar
53+
54+
CMD java ${JAVA_OPTS} -jar /opt/dummy-app/dummy-app.jar

template-placeholder-demo/pom.xml renamed to testcontainers-advanced-imagebuilder-demo/pom.xml

+11-5
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,12 @@
66

77
<parent>
88
<groupId>software.xdev</groupId>
9-
<artifactId>template-placeholder-root</artifactId>
10-
<version>1.0.0-SNAPSHOT</version>
9+
<artifactId>testcontainers-advanced-imagebuilder-root</artifactId>
10+
<version>1.0.3-SNAPSHOT</version>
1111
</parent>
1212

13-
<artifactId>template-placeholder-demo</artifactId>
14-
<version>1.0.0-SNAPSHOT</version>
13+
<artifactId>testcontainers-advanced-imagebuilder-demo</artifactId>
14+
<version>1.0.3-SNAPSHOT</version>
1515
<packaging>jar</packaging>
1616

1717
<organization>
@@ -32,9 +32,15 @@
3232
<dependencies>
3333
<dependency>
3434
<groupId>software.xdev</groupId>
35-
<artifactId>template-placeholder</artifactId>
35+
<artifactId>testcontainers-advanced-imagebuilder</artifactId>
3636
<version>${project.version}</version>
3737
</dependency>
38+
39+
<dependency>
40+
<groupId>org.slf4j</groupId>
41+
<artifactId>slf4j-simple</artifactId>
42+
<version>2.0.16</version>
43+
</dependency>
3844
</dependencies>
3945

4046
<build>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package software.xdev;
2+
3+
import java.nio.file.Paths;
4+
5+
import org.slf4j.LoggerFactory;
6+
7+
import software.xdev.testcontainers.imagebuilder.AdvancedImageFromDockerFile;
8+
9+
10+
public final class Application
11+
{
12+
@SuppressWarnings("java:S106")
13+
public static void main(final String[] args)
14+
{
15+
final AdvancedImageFromDockerFile builder = new AdvancedImageFromDockerFile("dynamically-built")
16+
.withLoggerForBuild(LoggerFactory.getLogger("container.build"))
17+
.withAdditionalIgnoreLines(
18+
// Ignore files that aren't related to the built code
19+
".git/**",
20+
".config/**",
21+
".github/**",
22+
".idea/**",
23+
".run/**",
24+
".md",
25+
".cmd",
26+
"/renovate.json5",
27+
// We need to keep the pom.xml as maven can't resolve the modules otherwise
28+
"testcontainers-advanced-imagebuilder/src/**",
29+
"testcontainers-advanced-imagebuilder/test/**",
30+
"testcontainers-advanced-imagebuilder-demo/src/**"
31+
)
32+
.withDockerFilePath(Paths.get("../testcontainers-advanced-imagebuilder-demo/Dockerfile"))
33+
.withBaseDir(Paths.get("../"));
34+
35+
final String imageName = builder.get();
36+
37+
System.out.println("Successfully build " + imageName);
38+
}
39+
40+
private Application()
41+
{
42+
}
43+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
This is a dummy application that can be started as a container

0 commit comments

Comments
 (0)