From 846973d5dda67d56d4a6b1d75319a633bfc8275f Mon Sep 17 00:00:00 2001 From: Walter Oggioni Date: Sat, 11 Jan 2025 12:37:02 +0800 Subject: [PATCH] added Docker image build to Gitea --- .gitea/workflows/build.yaml | 69 ++++++++++++++++--------------------- build.gradle | 2 ++ docker/Dockerfile | 21 +++++++++++ docker/build.gradle | 52 ++++++++++++++++++++++++++++ gbcs-cli/build.gradle | 14 ++++++++ gbcs-memcached/build.gradle | 12 +++++++ gradle.properties | 1 + settings.gradle | 1 + 8 files changed, 132 insertions(+), 40 deletions(-) create mode 100644 docker/Dockerfile create mode 100644 docker/build.gradle diff --git a/.gitea/workflows/build.yaml b/.gitea/workflows/build.yaml index 0ce4d19..e7f7a2f 100644 --- a/.gitea/workflows/build.yaml +++ b/.gitea/workflows/build.yaml @@ -19,49 +19,38 @@ jobs: - name: Setup Gradle uses: gradle/actions/setup-gradle@v3 - name: Execute Gradle build + run: ./gradlew build + - name: Prepare Docker image build + run: ./gradlew prepareDockerBuild + - + name: Build gbcs Docker image + uses: docker/build-push-action@v5.3.0 + with: + context: "{{defaultContext}}:docker/build/docker" + platforms: linux/amd64,linux/arm64 + push: true + pull: true + tags: gitea.woggioni.net/woggioni/gbcs:latest + target: release + cache-from: type=registry,ref=gitea.woggioni.net/woggioni/gbcs:buildx + - + name: Build gbcs memcached Docker image + uses: docker/build-push-action@v5.3.0 + with: + context: "{{defaultContext}}:docker/build/docker" + platforms: linux/amd64,linux/arm64 + push: true + pull: true + tags: gitea.woggioni.net/woggioni/gbcs:memcached + target: release-memcached + cache-from: type=registry,ref=gitea.woggioni.net/woggioni/gbcs:buildx + cache-to: type=registry,mode=max,compression=zstd,image-manifest=true,oci-mediatypes=true,ref=gitea.woggioni.net/woggioni/gbcs:buildx + - name: Publish Docker image env: PUBLISHER_TOKEN: ${{ secrets.PUBLISHER_TOKEN }} - run: ./gradlew build + run: ./gradlew dockerPushImage - name: Publish artifacts env: PUBLISHER_TOKEN: ${{ secrets.PUBLISHER_TOKEN }} run: ./gradlew publish - build-docker: - name: "Build Docker images" - runs-on: hostinger - steps: - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3.4.0 - with: - driver: docker-container - - - name: Login to Gitea container registry - uses: docker/login-action@v3 - with: - registry: gitea.woggioni.net - username: woggioni - password: ${{ secrets.PUBLISHER_TOKEN }} - - - name: Build and push gbcs images - uses: docker/build-push-action@v6 - with: - push: true - pull: true - tags: | - "gitea.woggioni.net/woggioni/gbcs:slim" - cache-from: type=registry,ref=gitea.woggioni.net/woggioni/gbcs:buildx - cache-to: type=registry,mode=max,compression=zstd,image-manifest=true,oci-mediatypes=true,ref=gitea.woggioni.net/woggioni/gbcs:buildx - target: release - - - name: Build and push gbcs memcached image - uses: docker/build-push-action@v6 - with: - push: true - pull: true - tags: | - "gitea.woggioni.net/woggioni/gbcs:latest" - "gitea.woggioni.net/woggioni/gbcs:memcached" - cache-from: type=registry,ref=gitea.woggioni.net/woggioni/gbcs:buildx - cache-to: type=registry,mode=max,compression=zstd,image-manifest=true,oci-mediatypes=true,ref=gitea.woggioni.net/woggioni/gbcs:buildx - target: release-memcached + diff --git a/build.gradle b/build.gradle index b7681cb..7ec65cf 100644 --- a/build.gradle +++ b/build.gradle @@ -130,3 +130,5 @@ publishing { } } + + diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 0000000..5c57268 --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,21 @@ +FROM alpine:latest AS base-release +RUN --mount=type=cache,target=/var/cache/apk apk update +RUN --mount=type=cache,target=/var/cache/apk apk add openjdk21-jre +RUN adduser -D luser +USER luser +WORKDIR /home/luser + +FROM base-release AS release +ADD gbcs-cli-envelope-*.jar gbcs.jar +ENTRYPOINT ["java", "-jar", "/home/luser/gbcs.jar"] + +FROM base-release AS release-memcached +ADD --chown=luser:luser gbcs-cli-envelope-*.jar gbcs.jar +RUN mkdir plugins +WORKDIR /home/luser/plugins +RUN --mount=type=bind,source=.,target=/build/distributions tar -xf /build/distributions/gbcs-memcached*.tar +WORKDIR /home/luser +ENTRYPOINT ["java", "-jar", "/home/luser/gbcs.jar"] + +FROM release-memcached as compose +COPY --chown=luser:luser conf/gbcs-memcached.xml /home/luser/.config/gbcs/gbcs.xml \ No newline at end of file diff --git a/docker/build.gradle b/docker/build.gradle new file mode 100644 index 0000000..81685a9 --- /dev/null +++ b/docker/build.gradle @@ -0,0 +1,52 @@ +plugins { + id 'base' + alias(catalog.plugins.gradle.docker) +} + +import com.bmuschko.gradle.docker.tasks.image.DockerBuildImage +import com.bmuschko.gradle.docker.tasks.image.DockerPushImage + + +configurations { + docker { + canBeResolved = true + transitive = false + visible = false + canBeConsumed = false + } +} + +dependencies { + docker project(path: ':gbcs-cli', configuration: 'release') + docker project(path: ':gbcs-memcached', configuration: 'release') +} + +Provider cleanTaskProvider = tasks.named(BasePlugin.CLEAN_TASK_NAME) {} + +Provider prepareDockerBuild = tasks.register('prepareDockerBuild', Copy) { + dependsOn cleanTaskProvider + group = 'docker' + into project.layout.buildDirectory.file('docker') + from(configurations.docker) + from(file('Dockerfile')) +} + +Provider dockerBuild = tasks.register('dockerBuildImage', DockerBuildImage) { + group = 'docker' + dependsOn prepareDockerBuild + images.add('gitea.woggioni.net/woggioni/gbcs:latest') + images.add("gitea.woggioni.net/woggioni/gbcs:${version}") +} + +Provider dockerPush = tasks.register('dockerPushImage', DockerPushImage) { + group = 'docker' + dependsOn dockerBuild + registryCredentials { + url = getProperty('docker.registry.url') + username = 'woggioni' + password = System.getenv().get("PUBLISHER_TOKEN") + } + images = dockerBuild.flatMap { it.images } +} + + diff --git a/gbcs-cli/build.gradle b/gbcs-cli/build.gradle index 58cda27..7067b7e 100644 --- a/gbcs-cli/build.gradle +++ b/gbcs-cli/build.gradle @@ -21,6 +21,15 @@ tasks.named(JavaPlugin.COMPILE_JAVA_TASK_NAME, JavaCompile) { options.javaModuleMainClass = mainClassName } +configurations { + release { + transitive = false + canBeConsumed = true + canBeResolved = true + visible = true + } +} + envelopeJar { mainModule = 'net.woggioni.gbcs.cli' mainClass = mainClassName @@ -56,6 +65,10 @@ tasks.named(NativeImagePlugin.NATIVE_IMAGE_TASK_NAME, NativeImageTask) { buildStaticImage = true } +artifacts { + release(envelopeJarTaskProvider) +} + publishing { publications { maven(MavenPublication) { @@ -64,3 +77,4 @@ publishing { } } + diff --git a/gbcs-memcached/build.gradle b/gbcs-memcached/build.gradle index abd2869..2714820 100644 --- a/gbcs-memcached/build.gradle +++ b/gbcs-memcached/build.gradle @@ -22,7 +22,15 @@ configurations { } } } + + release { + transitive = false + canBeConsumed = true + canBeResolved = true + visible = true + } } + dependencies { compileOnly project(':gbcs-base') compileOnly project(':gbcs-api') @@ -40,6 +48,10 @@ tasks.named(BasePlugin.ASSEMBLE_TASK_NAME) { dependsOn(bundleTask) } +artifacts { + release(bundleTask) +} + publishing { publications { maven(MavenPublication) { diff --git a/gradle.properties b/gradle.properties index 6af0cd9..83092ab 100644 --- a/gradle.properties +++ b/gradle.properties @@ -7,3 +7,4 @@ gbcs.version = 0.0.1 lys.version = 2025.01.10 gitea.maven.url = https://gitea.woggioni.net/api/packages/woggioni/maven +docker.registry.url=gitea.woggioni.net diff --git a/settings.gradle b/settings.gradle index 9122d9b..2742140 100644 --- a/settings.gradle +++ b/settings.gradle @@ -30,5 +30,6 @@ include 'gbcs-api' include 'gbcs-base' include 'gbcs-memcached' include 'gbcs-cli' +include 'docker'