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
176 changes: 143 additions & 33 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,49 +2,132 @@ 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@v6

- 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"
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: Setup Gradle
uses: gradle/actions/setup-gradle@v5
- 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:
cache-read-only: false
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: |
Expand All @@ -58,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
4 changes: 1 addition & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,7 @@ Thank you for your continued support!
## PIX

Sua contribuição ajudará a impulsionar o desenvolvimento de ferramentas de
qualidade para a comunidade de desenvolvedores Flutter e Dart. Qualquer quantia
será apreciada.
qualidade para a comunidade de desenvolvedores. Qualquer quantia será apreciada.
Obrigado pelo seu apoio contínuo!

[![PIX](helpers/pix.png)](https://nubank.com.br/pagar/2bt2q/RBr4Szfuwr)
Expand Down Expand Up @@ -92,5 +91,4 @@ openssl req \
- /openapi
- /swagger-ui
- /health
- /metrics
- /info
15 changes: 3 additions & 12 deletions build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
plugins {
kotlin("jvm") version "2.2.21"
kotlin("plugin.allopen") version "2.2.21"
kotlin("jvm") version "2.3.10"
kotlin("plugin.allopen") version "2.3.10"
id("io.quarkus")
}

Expand All @@ -20,12 +20,10 @@ dependencies {
),
)
implementation("io.smallrye.config:smallrye-config-source-file-system")
implementation("io.quarkus:quarkus-micrometer-registry-prometheus")
implementation("io.quarkus:quarkus-smallrye-openapi")
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,21 +35,14 @@ dependencies {
}

group = "com.testainers"
version = "0.3.0"
version = "0.4.0"

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

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

jvmArgs("--add-opens", "java.base/java.lang=ALL-UNNAMED")

testLogging {
events(
"PASSED",
Expand Down
14 changes: 4 additions & 10 deletions gradle.properties
Original file line number Diff line number Diff line change
@@ -1,17 +1,11 @@
# Gradle properties

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

# Executa tasks em paralelo (ex: compila modulo A e B ao mesmo tempo)
org.gradle.parallel=true

# Habilita o cache local de build (reutiliza outputs de tasks)
org.gradle.caching=true

# Aumenta a mem�ria da JVM (ajuste conforme a capacidade do runner do GitHub)
# O runner padr�o tem 7GB de RAM total. N�o aloque tudo para o Gradle.
org.gradle.jvmargs=-Xmx3g -XX:+UseParallelGC
org.gradle.configuration-cache=true
org.gradle.configuration-cache.parallel=true
6 changes: 3 additions & 3 deletions gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
# https://gradle.org/release-checksums/
distributionSha256Sum=f86344275d1b194688dd330abf9f6f2344cd02872ffee035f2d1ea2fd60cf7f3
distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.1-all.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
2 changes: 1 addition & 1 deletion 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/ubi9/openjdk-21:1.23
FROM registry.access.redhat.com/ubi9/openjdk-21:1.24

ENV LANGUAGE='en_US:en'

Expand Down
2 changes: 1 addition & 1 deletion src/main/docker/Dockerfile.legacy-jar
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/ubi9/openjdk-21:1.23
FROM registry.access.redhat.com/ubi9/openjdk-21:1.24

ENV LANGUAGE='en_US:en'

Expand Down
19 changes: 19 additions & 0 deletions src/main/docker/Dockerfile.native-multi-arch
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
FROM quay.io/quarkus/ubi9-quarkus-micro-image:2.0

ARG TARGETARCH

WORKDIR /work/
RUN chown 1001 /work \
&& chmod "g+rwX" /work \
&& chown 1001:root /work

COPY --chown=1001:root build/${TARGETARCH}/*-runner /work/httpbucket
RUN chmod +x /work/httpbucket
COPY --chown=1001:root cert.pem /work/cert.pem
COPY --chown=1001:root key.pem /work/key.pem

EXPOSE 8080
EXPOSE 8443
USER 1001

ENTRYPOINT ["./httpbucket", "-Dquarkus.http.host=0.0.0.0"]
4 changes: 0 additions & 4 deletions src/main/resources/application.properties
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,13 @@ quarkus.application.name=httpbucket
quarkus.ssl.native=true
%dev.quarkus.http.host=0.0.0.0
#
quarkus.docker.dockerfile-native-path=src/main/docker/Dockerfile.native-micro
#
quarkus.http.ssl.certificate.files=${httpbucket.ssl.cert:cert.pem}
quarkus.http.ssl.certificate.key-files=${httpbucket.ssl.key:key.pem}
#
quarkus.info.path=/info
#
quarkus.smallrye-health.root-path=/health
#
quarkus.micrometer.export.prometheus.path=/metrics
#
quarkus.smallrye-openapi.path=/openapi
quarkus.smallrye-openapi.info-title=httpbucket
quarkus.smallrye-openapi.security-scheme=basic
Expand Down