Compare commits
2 Commits
Author | SHA1 | Date | |
---|---|---|---|
696cb74740
|
|||
59f267426c
|
@@ -5,8 +5,6 @@ on:
|
|||||||
- '*'
|
- '*'
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
env:
|
|
||||||
RUNNER_TOOL_CACHE: /toolcache
|
|
||||||
runs-on: hostinger
|
runs-on: hostinger
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout sources
|
- name: Checkout sources
|
||||||
@@ -19,49 +17,53 @@ jobs:
|
|||||||
- name: Setup Gradle
|
- name: Setup Gradle
|
||||||
uses: gradle/actions/setup-gradle@v3
|
uses: gradle/actions/setup-gradle@v3
|
||||||
- name: Execute Gradle build
|
- name: Execute Gradle build
|
||||||
env:
|
|
||||||
PUBLISHER_TOKEN: ${{ secrets.PUBLISHER_TOKEN }}
|
|
||||||
run: ./gradlew build
|
run: ./gradlew build
|
||||||
- name: Publish artifacts
|
- name: Prepare Docker image build
|
||||||
env:
|
run: ./gradlew prepareDockerBuild
|
||||||
PUBLISHER_TOKEN: ${{ secrets.PUBLISHER_TOKEN }}
|
- name: Get project version
|
||||||
run: ./gradlew publish
|
id: retrieve-version
|
||||||
build-docker:
|
run: ./gradlew -q version >> "$GITHUB_OUTPUT"
|
||||||
name: "Build Docker images"
|
- name: Set up QEMU
|
||||||
runs-on: hostinger
|
uses: docker/setup-qemu-action@v3
|
||||||
steps:
|
- name: Set up Docker Buildx
|
||||||
-
|
uses: docker/setup-buildx-action@v3
|
||||||
name: Set up Docker Buildx
|
|
||||||
uses: docker/setup-buildx-action@v3.4.0
|
|
||||||
with:
|
with:
|
||||||
driver: docker-container
|
driver: docker-container
|
||||||
-
|
- name: Login to Gitea container registry
|
||||||
name: Login to Gitea container registry
|
|
||||||
uses: docker/login-action@v3
|
uses: docker/login-action@v3
|
||||||
with:
|
with:
|
||||||
registry: gitea.woggioni.net
|
registry: gitea.woggioni.net
|
||||||
username: woggioni
|
username: woggioni
|
||||||
password: ${{ secrets.PUBLISHER_TOKEN }}
|
password: ${{ secrets.PUBLISHER_TOKEN }}
|
||||||
-
|
-
|
||||||
name: Build and push gbcs images
|
name: Build gbcs Docker image
|
||||||
uses: docker/build-push-action@v6
|
uses: docker/build-push-action@v5.3.0
|
||||||
with:
|
with:
|
||||||
|
context: "docker/build/docker"
|
||||||
|
platforms: linux/amd64,linux/arm64
|
||||||
push: true
|
push: true
|
||||||
pull: true
|
pull: true
|
||||||
tags: |
|
tags: |
|
||||||
"gitea.woggioni.net/woggioni/gbcs:slim"
|
gitea.woggioni.net/woggioni/gbcs:latest
|
||||||
cache-from: type=registry,ref=gitea.woggioni.net/woggioni/gbcs:buildx
|
gitea.woggioni.net/woggioni/gbcs:${{ steps.retrieve-version.outputs.VERSION }}
|
||||||
cache-to: type=registry,mode=max,compression=zstd,image-manifest=true,oci-mediatypes=true,ref=gitea.woggioni.net/woggioni/gbcs:buildx
|
|
||||||
target: release
|
target: release
|
||||||
|
cache-from: type=registry,ref=gitea.woggioni.net/woggioni/gbcs:buildx
|
||||||
-
|
-
|
||||||
name: Build and push gbcs memcached image
|
name: Build gbcs memcached Docker image
|
||||||
uses: docker/build-push-action@v6
|
uses: docker/build-push-action@v5.3.0
|
||||||
with:
|
with:
|
||||||
|
context: "docker/build/docker"
|
||||||
|
platforms: linux/amd64,linux/arm64
|
||||||
push: true
|
push: true
|
||||||
pull: true
|
pull: true
|
||||||
tags: |
|
tags: |
|
||||||
"gitea.woggioni.net/woggioni/gbcs:latest"
|
gitea.woggioni.net/woggioni/gbcs:memcached
|
||||||
"gitea.woggioni.net/woggioni/gbcs:memcached"
|
gitea.woggioni.net/woggioni/gbcs:memcached-${{ steps.retrieve-version.outputs.VERSION }}
|
||||||
|
target: release-memcached
|
||||||
cache-from: type=registry,ref=gitea.woggioni.net/woggioni/gbcs:buildx
|
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
|
cache-to: type=registry,mode=max,compression=zstd,image-manifest=true,oci-mediatypes=true,ref=gitea.woggioni.net/woggioni/gbcs:buildx
|
||||||
target: release-memcached
|
- name: Publish artifacts
|
||||||
|
env:
|
||||||
|
PUBLISHER_TOKEN: ${{ secrets.PUBLISHER_TOKEN }}
|
||||||
|
run: ./gradlew publish
|
||||||
|
|
||||||
|
48
Dockerfile
48
Dockerfile
@@ -1,46 +1,2 @@
|
|||||||
FROM container-registry.oracle.com/graalvm/native-image:21 AS oracle
|
FROM gitea.woggioni.net/woggioni/gbcs:memcached
|
||||||
|
COPY --chown=luser:luser conf/gbcs-memcached.xml /home/luser/.config/gbcs/gbcs.xml
|
||||||
FROM ubuntu:24.04 AS build
|
|
||||||
COPY --from=oracle /usr/lib64/graalvm/ /usr/lib64/graalvm/
|
|
||||||
ENV JAVA_HOME=/usr/lib64/graalvm/graalvm-java21
|
|
||||||
USER ubuntu
|
|
||||||
WORKDIR /home/ubuntu
|
|
||||||
|
|
||||||
RUN mkdir gbcs
|
|
||||||
WORKDIR /home/ubuntu/gbcs
|
|
||||||
|
|
||||||
COPY --chown=ubuntu:users ./.git ./.git
|
|
||||||
COPY --chown=ubuntu:users gbcs-base gbcs-base
|
|
||||||
COPY --chown=ubuntu:users gbcs-api gbcs-api
|
|
||||||
COPY --chown=ubuntu:users gbcs-memcached gbcs-memcached
|
|
||||||
COPY --chown=ubuntu:users gbcs-cli gbcs-cli
|
|
||||||
COPY --chown=ubuntu:users src src
|
|
||||||
COPY --chown=ubuntu:users settings.gradle settings.gradle
|
|
||||||
COPY --chown=ubuntu:users build.gradle build.gradle
|
|
||||||
COPY --chown=ubuntu:users gradle.properties gradle.properties
|
|
||||||
COPY --chown=ubuntu:users gradle gradle
|
|
||||||
COPY --chown=ubuntu:users gradlew gradlew
|
|
||||||
|
|
||||||
RUN --mount=type=cache,target=/home/ubuntu/.gradle,uid=1000,gid=1000 ./gradlew --no-daemon clean assemble
|
|
||||||
|
|
||||||
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
|
|
||||||
RUN --mount=type=bind,from=build,source=/home/ubuntu/gbcs/gbcs-cli/build,target=/home/luser/build cp build/libs/gbcs-cli-envelope-*.jar gbcs.jar
|
|
||||||
ENTRYPOINT ["java", "-jar", "/home/luser/gbcs.jar"]
|
|
||||||
|
|
||||||
FROM base-release AS release-memcached
|
|
||||||
RUN --mount=type=bind,from=build,source=/home/ubuntu/gbcs/gbcs-cli/build,target=/home/luser/build cp build/libs/gbcs-cli-envelope-*.jar gbcs.jar
|
|
||||||
RUN mkdir plugins
|
|
||||||
WORKDIR /home/luser/plugins
|
|
||||||
RUN --mount=type=bind,from=build,source=/home/ubuntu/gbcs/gbcs-memcached/build/distributions,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
|
|
||||||
|
26
benchmark/build.gradle
Normal file
26
benchmark/build.gradle
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
plugins {
|
||||||
|
alias catalog.plugins.gradle.jmh
|
||||||
|
alias catalog.plugins.lombok
|
||||||
|
}
|
||||||
|
|
||||||
|
import me.champeau.jmh.JMHTask
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
implementation rootProject
|
||||||
|
|
||||||
|
implementation catalog.jwo
|
||||||
|
implementation catalog.xz
|
||||||
|
implementation catalog.jackson.databind
|
||||||
|
|
||||||
|
jmhAnnotationProcessor catalog.lombok
|
||||||
|
}
|
||||||
|
|
||||||
|
jmh {
|
||||||
|
threads = 4
|
||||||
|
iterations = 2
|
||||||
|
fork = 1
|
||||||
|
warmupIterations = 1
|
||||||
|
warmupForks = 0
|
||||||
|
resultFormat = 'JSON'
|
||||||
|
}
|
||||||
|
|
170
benchmark/src/jmh/java/net/woggioni/gbcs/benchmark/Main.java
Normal file
170
benchmark/src/jmh/java/net/woggioni/gbcs/benchmark/Main.java
Normal file
@@ -0,0 +1,170 @@
|
|||||||
|
package net.woggioni.gbcs.benchmark;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.SneakyThrows;
|
||||||
|
import org.openjdk.jmh.annotations.Benchmark;
|
||||||
|
import org.openjdk.jmh.annotations.BenchmarkMode;
|
||||||
|
import org.openjdk.jmh.annotations.Level;
|
||||||
|
import org.openjdk.jmh.annotations.Mode;
|
||||||
|
import org.openjdk.jmh.annotations.OutputTimeUnit;
|
||||||
|
import org.openjdk.jmh.annotations.Scope;
|
||||||
|
import org.openjdk.jmh.annotations.Setup;
|
||||||
|
import org.openjdk.jmh.annotations.State;
|
||||||
|
|
||||||
|
import java.net.URI;
|
||||||
|
import java.net.http.HttpClient;
|
||||||
|
import java.net.http.HttpRequest;
|
||||||
|
import java.net.http.HttpResponse;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Base64;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.Properties;
|
||||||
|
import java.util.Random;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
import java.util.function.Predicate;
|
||||||
|
|
||||||
|
public class Main {
|
||||||
|
|
||||||
|
@SneakyThrows
|
||||||
|
private static Properties loadProperties() {
|
||||||
|
Properties properties = new Properties();
|
||||||
|
try (final var is = Main.class.getResourceAsStream("/benchmark.properties")) {
|
||||||
|
properties.load(is);
|
||||||
|
}
|
||||||
|
return properties;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static final Properties properties = loadProperties();
|
||||||
|
|
||||||
|
@State(Scope.Thread)
|
||||||
|
public static class ExecutionPlan {
|
||||||
|
private final Random random = new Random(101325);
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
private final HttpClient client = HttpClient.newHttpClient();
|
||||||
|
|
||||||
|
private final Map<String, byte[]> entries = new HashMap<>();
|
||||||
|
|
||||||
|
public final Map<String, byte[]> getEntries() {
|
||||||
|
return Collections.unmodifiableMap(entries);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map.Entry<String, byte[]> newEntry() {
|
||||||
|
final var keyBuffer = new byte[0x20];
|
||||||
|
random.nextBytes(keyBuffer);
|
||||||
|
final var key = Base64.getUrlEncoder().encodeToString(keyBuffer);
|
||||||
|
final var value = new byte[0x1000];
|
||||||
|
random.nextBytes(value);
|
||||||
|
return Map.entry(key, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
@SneakyThrows
|
||||||
|
public HttpRequest.Builder newRequestBuilder(String key) {
|
||||||
|
final var requestBuilder = HttpRequest.newBuilder()
|
||||||
|
.uri(getServerURI().resolve(key));
|
||||||
|
String user = getUser();
|
||||||
|
if (user != null) {
|
||||||
|
requestBuilder.header("Authorization", buildAuthorizationHeader(user, getPassword()));
|
||||||
|
}
|
||||||
|
return requestBuilder;
|
||||||
|
}
|
||||||
|
|
||||||
|
@SneakyThrows
|
||||||
|
public URI getServerURI() {
|
||||||
|
return new URI(properties.getProperty("gbcs.server.url"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@SneakyThrows
|
||||||
|
public String getUser() {
|
||||||
|
return Optional.ofNullable(properties.getProperty("gbcs.server.username"))
|
||||||
|
.filter(Predicate.not(String::isEmpty))
|
||||||
|
.orElse(null);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@SneakyThrows
|
||||||
|
public String getPassword() {
|
||||||
|
return Optional.ofNullable(properties.getProperty("gbcs.server.password"))
|
||||||
|
.filter(Predicate.not(String::isEmpty))
|
||||||
|
.orElse(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
private String buildAuthorizationHeader(String user, String password) {
|
||||||
|
final var b64 = Base64.getEncoder().encode(String.format("%s:%s", user, password).getBytes(StandardCharsets.UTF_8));
|
||||||
|
return "Basic " + new String(b64);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@SneakyThrows
|
||||||
|
@Setup(Level.Trial)
|
||||||
|
public void setUp() {
|
||||||
|
try (final var client = HttpClient.newHttpClient()) {
|
||||||
|
for (int i = 0; i < 10000; i++) {
|
||||||
|
final var pair = newEntry();
|
||||||
|
final var requestBuilder = newRequestBuilder(pair.getKey())
|
||||||
|
.header("Content-Type", "application/octet-stream")
|
||||||
|
.PUT(HttpRequest.BodyPublishers.ofByteArray(pair.getValue()));
|
||||||
|
final var response = client.send(requestBuilder.build(), HttpResponse.BodyHandlers.ofString());
|
||||||
|
if (201 != response.statusCode()) {
|
||||||
|
throw new IllegalStateException(Integer.toString(response.statusCode()));
|
||||||
|
} else {
|
||||||
|
entries.put(pair.getKey(), pair.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private Iterator<Map.Entry<String, byte[]>> it = null;
|
||||||
|
|
||||||
|
private Map.Entry<String, byte[]> nextEntry() {
|
||||||
|
if (it == null || !it.hasNext()) {
|
||||||
|
it = getEntries().entrySet().iterator();
|
||||||
|
}
|
||||||
|
return it.next();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@SneakyThrows
|
||||||
|
@Benchmark
|
||||||
|
@BenchmarkMode(Mode.Throughput)
|
||||||
|
@OutputTimeUnit(TimeUnit.SECONDS)
|
||||||
|
public void get(ExecutionPlan plan) {
|
||||||
|
final var client = plan.getClient();
|
||||||
|
final var entry = plan.nextEntry();
|
||||||
|
final var requestBuilder = plan.newRequestBuilder(entry.getKey())
|
||||||
|
.header("Accept", "application/octet-stream")
|
||||||
|
.GET();
|
||||||
|
final var response = client.send(requestBuilder.build(), HttpResponse.BodyHandlers.ofByteArray());
|
||||||
|
if (200 != response.statusCode()) {
|
||||||
|
throw new IllegalStateException(Integer.toString(response.statusCode()));
|
||||||
|
} else {
|
||||||
|
if (!Arrays.equals(entry.getValue(), response.body())) {
|
||||||
|
throw new IllegalStateException("Retrieved unexpected value");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@SneakyThrows
|
||||||
|
@Benchmark
|
||||||
|
@BenchmarkMode(Mode.Throughput)
|
||||||
|
@OutputTimeUnit(TimeUnit.SECONDS)
|
||||||
|
public void put(Main.ExecutionPlan plan) {
|
||||||
|
final var client = plan.getClient();
|
||||||
|
final var entry = plan.nextEntry();
|
||||||
|
|
||||||
|
final var requestBuilder = plan.newRequestBuilder(entry.getKey())
|
||||||
|
.header("Content-Type", "application/octet-stream")
|
||||||
|
.PUT(HttpRequest.BodyPublishers.ofByteArray(entry.getValue()));
|
||||||
|
|
||||||
|
final var response = client.send(requestBuilder.build(), HttpResponse.BodyHandlers.ofByteArray());
|
||||||
|
if (201 != response.statusCode()) {
|
||||||
|
throw new IllegalStateException(Integer.toString(response.statusCode()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
1
benchmark/src/jmh/resources/benchmark.properties
Normal file
1
benchmark/src/jmh/resources/benchmark.properties
Normal file
@@ -0,0 +1 @@
|
|||||||
|
gbcs.server.url= http://localhost:8080
|
@@ -130,3 +130,9 @@ publishing {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tasks.register('version') {
|
||||||
|
doLast {
|
||||||
|
println("VERSION=$version")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
21
conf/logback.xml
Normal file
21
conf/logback.xml
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<!DOCTYPE configuration>
|
||||||
|
|
||||||
|
<configuration>
|
||||||
|
<import class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"/>
|
||||||
|
<import class="ch.qos.logback.core.ConsoleAppender"/>
|
||||||
|
|
||||||
|
<appender name="console" class="ConsoleAppender">
|
||||||
|
<target>System.err</target>
|
||||||
|
<encoder class="PatternLayoutEncoder">
|
||||||
|
<pattern>%d [%highlight(%-5level)] \(%thread\) %logger{36} -%kvp- %msg %n</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="info">
|
||||||
|
<appender-ref ref="console"/>
|
||||||
|
</root>
|
||||||
|
<logger name="io.netty" level="debug"/>
|
||||||
|
<logger name="com.google.code.yanf4j" level="warn"/>
|
||||||
|
<logger name="net.rubyeye.xmemcached" level="warn"/>
|
||||||
|
</configuration>
|
@@ -11,7 +11,6 @@ services:
|
|||||||
gbcs:
|
gbcs:
|
||||||
build:
|
build:
|
||||||
context: .
|
context: .
|
||||||
target: compose
|
|
||||||
container_name: gbcs
|
container_name: gbcs
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
ports:
|
ports:
|
||||||
|
21
docker/Dockerfile
Normal file
21
docker/Dockerfile
Normal file
@@ -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
|
67
docker/build.gradle
Normal file
67
docker/build.gradle
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
plugins {
|
||||||
|
id 'base'
|
||||||
|
alias(catalog.plugins.gradle.docker)
|
||||||
|
}
|
||||||
|
|
||||||
|
import com.bmuschko.gradle.docker.tasks.image.DockerBuildImage
|
||||||
|
import com.bmuschko.gradle.docker.tasks.image.DockerPushImage
|
||||||
|
import com.bmuschko.gradle.docker.tasks.image.DockerTagImage
|
||||||
|
|
||||||
|
|
||||||
|
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<Task> cleanTaskProvider = tasks.named(BasePlugin.CLEAN_TASK_NAME) {}
|
||||||
|
|
||||||
|
Provider<Copy> prepareDockerBuild = tasks.register('prepareDockerBuild', Copy) {
|
||||||
|
dependsOn cleanTaskProvider
|
||||||
|
group = 'docker'
|
||||||
|
into project.layout.buildDirectory.file('docker')
|
||||||
|
from(configurations.docker)
|
||||||
|
from(file('Dockerfile'))
|
||||||
|
}
|
||||||
|
|
||||||
|
Provider<DockerBuildImage> 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<DockerTagImage> dockerTag = tasks.register('dockerTagImage', DockerTagImage) {
|
||||||
|
group = 'docker'
|
||||||
|
repository = 'gitea.woggioni.net/woggioni/gbcs'
|
||||||
|
imageId = 'gitea.woggioni.net/woggioni/gbcs:latest'
|
||||||
|
tag = version
|
||||||
|
}
|
||||||
|
|
||||||
|
Provider<DockerTagImage> dockerTagMemcached = tasks.register('dockerTagMemcachedImage', DockerTagImage) {
|
||||||
|
group = 'docker'
|
||||||
|
repository = 'gitea.woggioni.net/woggioni/gbcs'
|
||||||
|
imageId = 'gitea.woggioni.net/woggioni/gbcs:memcached'
|
||||||
|
tag = "${version}-memcached"
|
||||||
|
}
|
||||||
|
|
||||||
|
Provider<DockerPushImage> dockerPush = tasks.register('dockerPushImage', DockerPushImage) {
|
||||||
|
group = 'docker'
|
||||||
|
dependsOn dockerTag, dockerTagMemcached
|
||||||
|
registryCredentials {
|
||||||
|
url = getProperty('docker.registry.url')
|
||||||
|
username = 'woggioni'
|
||||||
|
password = System.getenv().get("PUBLISHER_TOKEN")
|
||||||
|
}
|
||||||
|
images = [dockerTag.flatMap{ it.tag }, dockerTagMemcached.flatMap{ it.tag }]
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@@ -21,6 +21,15 @@ tasks.named(JavaPlugin.COMPILE_JAVA_TASK_NAME, JavaCompile) {
|
|||||||
options.javaModuleMainClass = mainClassName
|
options.javaModuleMainClass = mainClassName
|
||||||
}
|
}
|
||||||
|
|
||||||
|
configurations {
|
||||||
|
release {
|
||||||
|
transitive = false
|
||||||
|
canBeConsumed = true
|
||||||
|
canBeResolved = true
|
||||||
|
visible = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
envelopeJar {
|
envelopeJar {
|
||||||
mainModule = 'net.woggioni.gbcs.cli'
|
mainModule = 'net.woggioni.gbcs.cli'
|
||||||
mainClass = mainClassName
|
mainClass = mainClassName
|
||||||
@@ -56,6 +65,10 @@ tasks.named(NativeImagePlugin.NATIVE_IMAGE_TASK_NAME, NativeImageTask) {
|
|||||||
buildStaticImage = true
|
buildStaticImage = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
artifacts {
|
||||||
|
release(envelopeJarTaskProvider)
|
||||||
|
}
|
||||||
|
|
||||||
publishing {
|
publishing {
|
||||||
publications {
|
publications {
|
||||||
maven(MavenPublication) {
|
maven(MavenPublication) {
|
||||||
@@ -64,3 +77,4 @@ publishing {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -22,7 +22,15 @@ configurations {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
release {
|
||||||
|
transitive = false
|
||||||
|
canBeConsumed = true
|
||||||
|
canBeResolved = true
|
||||||
|
visible = true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
compileOnly project(':gbcs-base')
|
compileOnly project(':gbcs-base')
|
||||||
compileOnly project(':gbcs-api')
|
compileOnly project(':gbcs-api')
|
||||||
@@ -40,6 +48,10 @@ tasks.named(BasePlugin.ASSEMBLE_TASK_NAME) {
|
|||||||
dependsOn(bundleTask)
|
dependsOn(bundleTask)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
artifacts {
|
||||||
|
release(bundleTask)
|
||||||
|
}
|
||||||
|
|
||||||
publishing {
|
publishing {
|
||||||
publications {
|
publications {
|
||||||
maven(MavenPublication) {
|
maven(MavenPublication) {
|
||||||
|
@@ -7,3 +7,4 @@ gbcs.version = 0.0.1
|
|||||||
lys.version = 2025.01.10
|
lys.version = 2025.01.10
|
||||||
|
|
||||||
gitea.maven.url = https://gitea.woggioni.net/api/packages/woggioni/maven
|
gitea.maven.url = https://gitea.woggioni.net/api/packages/woggioni/maven
|
||||||
|
docker.registry.url=gitea.woggioni.net
|
||||||
|
@@ -30,5 +30,6 @@ include 'gbcs-api'
|
|||||||
include 'gbcs-base'
|
include 'gbcs-base'
|
||||||
include 'gbcs-memcached'
|
include 'gbcs-memcached'
|
||||||
include 'gbcs-cli'
|
include 'gbcs-cli'
|
||||||
|
include 'docker'
|
||||||
|
include 'benchmark'
|
||||||
|
|
||||||
|
@@ -190,7 +190,7 @@ class GradleBuildCacheServer(private val cfg: Configuration) {
|
|||||||
} else {
|
} else {
|
||||||
val javaKeyStore = loadKeystore(keyStore.file, keyStore.password)
|
val javaKeyStore = loadKeystore(keyStore.file, keyStore.password)
|
||||||
val serverKey = javaKeyStore.getKey(
|
val serverKey = javaKeyStore.getKey(
|
||||||
keyStore.keyAlias, keyStore.keyPassword?.let(String::toCharArray)
|
keyStore.keyAlias, (keyStore.keyPassword ?: "").let(String::toCharArray)
|
||||||
) as PrivateKey
|
) as PrivateKey
|
||||||
val serverCert: Array<X509Certificate> =
|
val serverCert: Array<X509Certificate> =
|
||||||
Arrays.stream(javaKeyStore.getCertificateChain(keyStore.keyAlias))
|
Arrays.stream(javaKeyStore.getCertificateChain(keyStore.keyAlias))
|
||||||
|
Reference in New Issue
Block a user