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
1 change: 1 addition & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
*
!build/*-runner
!build/**/*-runner
!build/*-runner.jar
!build/lib/*
!build/quarkus-app/*
Expand Down
2 changes: 1 addition & 1 deletion .editorconfig
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ root = true
insert_final_newline = true

[{*.kt,*.kts}]
ident_size = 4
indent_size = 4
max_line_length = 80
ktlint_code_style = ktlint_official
ktlint_experimental = enabled
Expand Down
193 changes: 154 additions & 39 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,45 +2,133 @@ name: CI Build

on:
push:
branches: [ main ]
branches:
- main
- alpha
- beta

jobs:
build:
name: Build
prepare:
timeout-minutes: 5
runs-on: ubuntu-latest
timeout-minutes: 15
permissions:
contents: write
outputs:
VERSION: ${{ steps.version.outputs.VERSION }}
DOCKER_TAG: ${{ steps.version.outputs.DOCKER_TAG }}
steps:
- name: Code Checkout
uses: actions/checkout@v4

- name: Setup Java
uses: actions/setup-java@v4
with:
distribution: 'adopt'
java-version: '21'
uses: actions/checkout@v6

- name: Get Gradle Version
- name: Get release attributes
id: version
run: |
echo "TAGS=latest" >> $GITHUB_ENV
SUFFIX=""
VERSION=$(grep 'version =' build.gradle.kts | cut -f 2 -d '"')$SUFFIX
echo "VERSION=$VERSION" >> $GITHUB_ENV
REPO=$(echo $GITHUB_REPOSITORY | cut -f 2 -d "/")
echo "REPO=$REPO" >> $GITHUB_ENV
echo "OWNER=$GITHUB_REPOSITORY_OWNER" >> $GITHUB_ENV
DOCKER_TAG=$GITHUB_REF_NAME
case $GITHUB_REF_NAME in
main) DOCKER_TAG="latest";;
alpha) SUFFIX="A";;
beta) SUFFIX="B";;
esac
echo "DOCKER_TAG=$DOCKER_TAG" >> $GITHUB_OUTPUT
VERSION=$(grep 'version = ' build.gradle.kts | cut -f 2 -d "\"")$SUFFIX
echo "VERSION=$VERSION" >> $GITHUB_OUTPUT

- name: Check if version is used
run: |
URL=$GITHUB_API_URL/repos/$GITHUB_REPOSITORY/releases/tags/${{ env.VERSION }}
echo "$URL"
CODE=$(curl -s -o /dev/null -w "%{http_code}" "$URL")
URL=$GITHUB_API_URL/repos/$GITHUB_REPOSITORY/releases/tags/${{ steps.version.outputs.VERSION }}
CODE=$(curl -s -H "Authorization: Bearer ${{ github.token }}" -o /dev/null -w "%{http_code}" "$URL")
if [ "$CODE" != 404 ]; then
echo "Release '$VERSION' already exists. ($CODE)"
echo "Release '${{ steps.version.outputs.VERSION }}' already exists. ($CODE)"
exit 1
fi

- name: Setup ktlint
run: |
curl -sSLO https://github.com/pinterest/ktlint/releases/download/1.8.0/ktlint
chmod a+x ktlint
sudo mv ktlint /usr/local/bin/

- name: Run linter
run: ktlint

- name: Setup Java
uses: actions/setup-java@v5
with:
distribution: 'adopt'
java-version: '21'

- name: Generating self-signed certificate
run: |
openssl req \
-newkey rsa:2048 \
-new \
-nodes \
-x509 \
-days 2 \
-keyout key.pem \
-out cert.pem \
-subj "/CN=localhost"

- name: Tests
run: ./gradlew test

- name: Upload Jacoco Report
uses: actions/upload-artifact@v7
with:
name: jacoco-report
path: build/jacoco-report
if-no-files-found: error
retention-days: 1

build-native:
needs: prepare
timeout-minutes: 10
strategy:
matrix:
include:
- os: ubuntu-latest
arch: amd64
- os: ubuntu-24.04-arm
arch: arm64
runs-on: ${{ matrix.os }}
steps:
- name: Code Checkout
uses: actions/checkout@v6

- name: Setup GraalVM
uses: graalvm/setup-graalvm@v1
with:
java-version: '21'
distribution: 'graalvm-community'
github-token: ${{ secrets.GITHUB_TOKEN }}
cache: 'gradle'

- name: Build Native Executable
run: |
./gradlew build -Dquarkus.package.jar.enabled=false \
-Dquarkus.native.enabled=true \
-Dquarkus.native.compression.level=5 \
-x test

- name: Upload Native Binary
uses: actions/upload-artifact@v7
with:
name: native-executable-${{ matrix.arch }}
path: build/*-runner
if-no-files-found: error
retention-days: 1

publish:
needs:
- prepare
- build-native
timeout-minutes: 5
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Code checkout
uses: actions/checkout@v6

- name: Generating self-signed certificate
run: |
openssl req \
Expand All @@ -53,31 +141,58 @@ jobs:
-out cert.pem \
-subj "/C=US/ST=SC/L=Hometown/O=IT/emailAddress=root@localhost/CN=localhost"

- name: Test & Build
run: |
./gradlew build --no-daemon \
-Dquarkus.package.type=native \
-Dquarkus.native.container-build=true \
-Dquarkus.container-image.build=true \
-Dquarkus.container-image.push=true \
-Dquarkus.container-image.username=${{ env.OWNER }} \
-Dquarkus.container-image.password=${{ secrets.DOCKER_TOKEN }} \
-Dquarkus.container-image.group=${{ env.OWNER }} \
-Dquarkus.container-image.name=${{ env.REPO }} \
-Dquarkus.container-image.tag=${{ env.VERSION }} \
-Dquarkus.container-image.additional-tags=${{ env.TAGS }}
- name: Download Jacoco Report
uses: actions/download-artifact@v8
with:
name: jacoco-report
path: build/jacoco-report

- name: Download AMD64 Binary
uses: actions/download-artifact@v8
with:
name: native-executable-amd64
path: build/amd64

- name: Download ARM64 Binary
uses: actions/download-artifact@v8
with:
name: native-executable-arm64
path: build/arm64

- name: Set up QEMU
uses: docker/setup-qemu-action@v3

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Login to Registry
uses: docker/login-action@v3
with:
username: ${{ github.repository_owner }}
password: ${{ secrets.DOCKER_TOKEN }}

- name: Docker Build & Push
uses: docker/build-push-action@v6
with:
push: true
context: .
file: src/main/docker/Dockerfile.native-multi-arch
platforms: linux/amd64,linux/arm64
tags: |
${{ github.repository }}:${{ needs.prepare.outputs.VERSION }}
${{ github.repository }}:${{ needs.prepare.outputs.DOCKER_TAG }}

- name: Creating GitHub Tag
uses: mathieudutour/github-tag-action@v6.2
with:
custom_tag: ${{ env.VERSION }}
custom_tag: ${{ needs.prepare.outputs.VERSION }}
tag_prefix: ''
github_token: ${{ secrets.GITHUB_TOKEN }}

- name: Create GitHub Release
uses: ncipollo/release-action@v1
with:
tag: ${{ env.VERSION }}
tag: ${{ needs.prepare.outputs.VERSION }}
token: ${{ secrets.GITHUB_TOKEN }}

- name: Overwrite Coverage Theme
Expand Down
11 changes: 8 additions & 3 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,19 @@ jobs:
timeout-minutes: 20
steps:
- name: Code Checkout
uses: actions/checkout@v4
uses: actions/checkout@v6

- name: Setup Java
uses: actions/setup-java@v4
uses: actions/setup-java@v5
with:
distribution: 'adopt'
java-version: '21'

- name: Setup Gradle
uses: gradle/actions/setup-gradle@v5
with:
cache-read-only: false

- name: Generating self-signed certificate
run: |
openssl req \
Expand All @@ -30,4 +35,4 @@ jobs:
-subj "/CN=localhost"

- name: Tests
run: ./gradlew test --no-daemon
run: ./gradlew test
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -40,3 +40,5 @@ nb-configuration.xml

# Certificates
*.pem

ktlint
9 changes: 7 additions & 2 deletions build-image.sh
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,15 @@ if [ ! -f "build/httpbucket-$VERSION-runner" ]
then
./gradlew clean

./gradlew build -Dquarkus.package.type=native \
-Dquarkus.native.container-build=true
./gradlew build -Dquarkus.package.jar.enabled=false \
-Dquarkus.native.enabled=true \
-Dquarkus.native.compression.level=5
fi

docker build . -f src/main/docker/Dockerfile.native-micro \
-t "httpbucket-local:$VERSION" \
-t "httpbucket-local:latest"

docker run --rm --name httpbucket \
-p 8080:8080 -p 8443:8443 \
"httpbucket-local:$VERSION"
12 changes: 3 additions & 9 deletions build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
plugins {
kotlin("jvm") version "2.1.21"
kotlin("plugin.allopen") version "2.1.21"
kotlin("jvm") version "2.3.10"
kotlin("plugin.allopen") version "2.3.10"
id("io.quarkus")
}

Expand All @@ -25,7 +25,6 @@ dependencies {
implementation("io.quarkus:quarkus-smallrye-health")
implementation("io.quarkus:quarkus-rest")
implementation("io.quarkus:quarkus-rest-jackson")
implementation("io.quarkus:quarkus-container-image-docker")
implementation("io.quarkus:quarkus-info")
implementation("io.quarkus:quarkus-kotlin")
implementation("io.quarkus:quarkus-arc")
Expand All @@ -37,19 +36,14 @@ dependencies {
}

group = "com.testainers"
version = "0.2.0"
version = "0.3.5"

java {
sourceCompatibility = JavaVersion.VERSION_21
targetCompatibility = JavaVersion.VERSION_21
}

tasks.withType<Test> {
systemProperty(
"java.util.logging.manager",
"org.jboss.logmanager.LogManager",
)

testLogging {
events(
"PASSED",
Expand Down
2 changes: 1 addition & 1 deletion coverage.sh
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,4 @@ set -e

/bin/cp -rf helpers/jacoco-report/* build/jacoco-report/.

# /opt/google/chrome/google-chrome build/coverage/index.html
# /opt/google/chrome/google-chrome "file://$(pwd)/build/jacoco-report/index.html"
11 changes: 8 additions & 3 deletions gradle.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
#Gradle properties
# Gradle properties

quarkusPluginId=io.quarkus
quarkusPluginVersion=3.23.4
quarkusPluginVersion=3.32.1
quarkusPlatformGroupId=io.quarkus.platform
quarkusPlatformArtifactId=quarkus-bom
quarkusPlatformVersion=3.23.4
quarkusPlatformVersion=3.32.1

org.gradle.jvmargs=-Xmx3g -XX:+UseParallelGC
org.gradle.configuration-cache=true
org.gradle.configuration-cache.parallel=true
Binary file modified gradle/wrapper/gradle-wrapper.jar
Binary file not shown.
5 changes: 4 additions & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip
distributionSha256Sum=17f277867f6914d61b1aa02efab1ba7bb439ad652ca485cd8ca6842fccec6e43
distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.1-all.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
4 changes: 1 addition & 3 deletions src/main/docker/Dockerfile.jvm
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@
# accessed directly. (example: "foo.example.com,bar.example.com")
#
###
FROM registry.access.redhat.com/ubi8/openjdk-21:1.21
FROM registry.access.redhat.com/ubi9/openjdk-21:1.24

ENV LANGUAGE='en_US:en'

Expand All @@ -88,9 +88,7 @@ COPY --chown=185 build/quarkus-app/app/ /deployments/app/
COPY --chown=185 build/quarkus-app/quarkus/ /deployments/quarkus/

EXPOSE 8080

USER 185

ENV JAVA_OPTS_APPEND="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager"
ENV JAVA_APP_JAR="/deployments/quarkus-run.jar"

Expand Down
Loading