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
21 changes: 21 additions & 0 deletions .github/workflows/Sonar.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
name: Sonar
on: [pull_request, workflow_dispatch]
jobs:
build:
name: Run Sonar Scan
runs-on: ubuntu-latest
permissions:
pull-requests: write
env:
ZCMI_SANDBOX_URL: ${{ secrets.ZCMI_SANDBOX_URL }}
ZCMI_ADMIN_EMAIL: ${{ secrets.ZCMI_ADMIN_EMAIL }}
ZCMI_ADMIN_TOKEN: ${{ secrets.ZCMI_ADMIN_TOKEN }}
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1
- uses: graalvm/setup-graalvm@54b4f5a65c1a84b2fdfdc2078fe43df32819e4b1 # v1.4.5
with:
java-version: '21'
distribution: 'graalvm'
- name: call gradle to run tests and then compile native image
run: ./gradlew test sonar
41 changes: 41 additions & 0 deletions .github/workflows/TestAndCompile.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
name: GraalVM Native Image Test run and build tests
on: [pull_request, workflow_dispatch]
jobs:
build:
name: test and compile on ${{ matrix.os }}
runs-on: ${{ matrix.os }}
permissions:
pull-requests: write
strategy:
matrix:
os: [macos-latest, windows-latest, ubuntu-latest]
env:
ZCMI_SANDBOX_URL: ${{ secrets.ZCMI_SANDBOX_URL }}
ZCMI_ADMIN_EMAIL: ${{ secrets.ZCMI_ADMIN_EMAIL }}
ZCMI_ADMIN_TOKEN: ${{ secrets.ZCMI_ADMIN_TOKEN }}
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1
- uses: graalvm/setup-graalvm@54b4f5a65c1a84b2fdfdc2078fe43df32819e4b1 # v1.4.5
with:
java-version: '21'
distribution: 'graalvm'
github-token: ${{ secrets.GITHUB_TOKEN }}
native-image-job-reports: 'true'
native-image-pr-reports: 'true'
- name: call gradle to run tests and then compile (WINDOWS)
if: matrix.os == 'windows-latest'
env:
# This solution found at https://github.com/graalvm/native-build-tools/issues/754#issuecomment-3450913085
# Needed for Windows; to resolve issue with temp folder during native image build, due to relativization
# problem when different drives are used, such as in GHA runners.
# https://github.com/graalvm/native-build-tools/issues/754
GRADLE_OPTS: -Djava.io.tmpdir=${{ runner.temp }}
run: ./gradlew test nativeCompile
- name: call gradle to run tests and then compile
run: ./gradlew test nativeCompile
- name: upload binary
uses: actions/upload-artifact@v4
with:
name: zcmi-${{ matrix.os }}
path: build/native/nativeCompile/zcmi*
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,4 @@ out/
.settings
.classpath
.factorypath
.env
76 changes: 36 additions & 40 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -8,18 +8,13 @@ plugins {
id("it.nicolasfarabegoli.conventional-commits") version "3.1.3"
id("org.sonarqube") version "latest.release"
id("jacoco")
id("org.jetbrains.kotlin.jvm") version "1.9.25"
id("org.jetbrains.kotlin.kapt") version "1.9.25"
id("org.jetbrains.kotlin.plugin.allopen") version "1.9.25"
id("groovy")
id("groovy")
id("io.micronaut.application") version "4.6.1"
id("com.gradleup.shadow") version "8.3.9"
}

version = project.properties["zcmiVersion"]!!
group = "lol.pbu"

val kotlinVersion = project.properties["kotlinVersion"]!!
val z4jVersion = project.properties["z4jVersion"]!!
val jansiGraalVersion = project.properties["jansiGraalVersion"]!!
val jansiVersion = project.properties["jansiVersion"]!!
Expand All @@ -31,49 +26,52 @@ repositories {
}

dependencies {
kapt("info.picocli:picocli-codegen")
kapt("io.micronaut.serde:micronaut-serde-processor")
annotationProcessor("info.picocli:picocli-codegen")
annotationProcessor("io.micronaut.serde:micronaut-serde-processor")
implementation("info.picocli:picocli")
implementation("lol.pbu:z4j:${z4jVersion}")
implementation("io.micronaut.kotlin:micronaut-kotlin-runtime")
implementation("io.micronaut.picocli:micronaut-picocli")
implementation("info.picocli:picocli-jansi-graalvm:${jansiGraalVersion}")
implementation("org.fusesource.jansi:jansi:${jansiVersion}")
implementation("info.picocli:picocli-shell-jline3:${picoJlineVersion}")
implementation("org.jline:jline:${jlineVersion}")
implementation("io.micronaut.serde:micronaut-serde-jackson")
implementation("org.jetbrains.kotlin:kotlin-reflect:${kotlinVersion}")
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:${kotlinVersion}")
runtimeOnly("ch.qos.logback:logback-classic")
runtimeOnly("com.fasterxml.jackson.module:jackson-module-kotlin")
runtimeOnly("org.yaml:snakeyaml")
}

tasks.withType<ProcessResources> {
val props = Properties()
file("gradle.properties").inputStream().use { props.load(it) }
filesMatching("**/application.yml") {
filter(mapOf("tokens" to props), ReplaceTokens::class.java)
}
}

application {
mainClass = "lol.pbu.ZcmiCommand"
}

java {
sourceCompatibility = JavaVersion.toVersion("21")
targetCompatibility = JavaVersion.toVersion("21")
}

kotlin {
jvmToolchain {
languageVersion.set(JavaLanguageVersion.of(21))
micronaut {
testRuntime("spock2")
processing {
incremental(true)
annotations("lol.pbu.*")
}
}

sonarqube {
properties {
property("sonar.tests", "src/test/groovy")
tasks.named<io.micronaut.gradle.docker.NativeImageDockerfile>("dockerfileNative") {
jdkVersion = "21"
}

tasks.withType<ProcessResources> {
val props = Properties()
file("gradle.properties").inputStream().use { props.load(it) }
filesMatching("**/application.yml") {
filter(mapOf("tokens" to props), ReplaceTokens::class.java)
}
}

tasks.jacocoTestReport {
reports {
xml.required.set(true)
}
}

Expand All @@ -88,25 +86,23 @@ tasks.test {
finalizedBy(tasks.jacocoTestReport)
}

micronaut {
testRuntime("spock2")
processing {
incremental(true)
annotations("lol.pbu.*")
}
}

tasks.named<io.micronaut.gradle.docker.NativeImageDockerfile>("dockerfileNative") {
jdkVersion = "21"
}

graalvmNative.binaries {
named("main") {
imageName.set("zcmi")
buildArgs.add("--color=always")
buildArgs.add("-march=native")
// buildArgs.add("-0b")
// buildArgs.add("-Ob")
}
}


sonar {
properties {
property("sonar.projectKey", "PeanutButter-Unicorn_zcmi")
property("sonar.organization", "peanutbutter-unicorn")
property("sonar.host.url", "https://sonarcloud.io")
property("sonar.coverage.jacoco.xmlReportPaths", "build/reports/jacoco/test/jacocoTestReport.xml")
property("sonar.tests", "src/test/groovy")
property("sonar.junit.reportPaths", "build/reports/jacoco/test")
property("sonar.coverage.jacoco.xmlReportPaths", "build/reports/jacoco/test/jacocoTestReport.xml")
}
}
17 changes: 3 additions & 14 deletions gradle.properties
Original file line number Diff line number Diff line change
@@ -1,19 +1,8 @@
org.gradle.console=rich
micronautVersion=4.10.7
kotlin.daemon.jvmargs=--add-opens=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED \
--add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED \
--add-opens=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED \
--add-opens=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED \
--add-opens=jdk.compiler/com.sun.tools.javac.jvm=ALL-UNNAMED \
--add-opens=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED \
--add-opens=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED \
--add-opens=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED \
--add-opens=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED \
--add-opens=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED
kotlinVersion=1.9.25
zcmiVersion=0.0.1
z4jVersion=0.0.8
jansiGraalVersion=1.2.0
jansiVersion=2.4.2
org.gradle.console=rich
picoJlineVersion=4.7.6
jlineVersion=3.30.5
zcmiVersion=0.0.1
jlineVersion=3.30.5
4 changes: 2 additions & 2 deletions micronaut-cli.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
applicationType: cli
defaultPackage: lol.pbu
testFramework: spock
sourceLanguage: kotlin
sourceLanguage: java
buildTool: gradle_kotlin
features: [app-name, graalvm, gradle, http-client-test, kapt, kotlin, logback, micronaut-build, picocli, picocli-kotlin-application, picocli-spock, readme, serialization-jackson, shade, spock, yaml, yaml-build]
features: [app-name, gradle, http-client-test, java, logback, micronaut-build, picocli, picocli-java-application, picocli-spock, readme, serialization-jackson, shade, spock, yaml, yaml-build]
34 changes: 34 additions & 0 deletions src/main/java/lol/pbu/BaseCommand.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package lol.pbu;

import io.micronaut.core.annotation.NonNull;
import io.micronaut.core.annotation.ReflectiveAccess;
import picocli.CommandLine.Command;
import picocli.CommandLine.Model.CommandSpec;
import picocli.CommandLine.Spec;

import java.io.PrintWriter;
import java.util.Optional;

import static picocli.CommandLine.Help.Ansi.AUTO;

@Command
public class BaseCommand {

@Spec
@ReflectiveAccess
protected CommandSpec spec;

public void err(String message) {
errWriter().ifPresent(writer -> writer.println(AUTO.string("@|bold,red " + message + "|@")));
}

@NonNull
public Optional<PrintWriter> errWriter() {
return getSpec().map(commandSpec -> commandSpec.commandLine().getErr());
}

@NonNull
public Optional<CommandSpec> getSpec() {
return Optional.ofNullable(spec);
}
}
16 changes: 16 additions & 0 deletions src/main/java/lol/pbu/Generated.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package lol.pbu;

import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;

import static java.lang.annotation.ElementType.CONSTRUCTOR;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

@Documented
@Retention(RUNTIME)
@Target({TYPE, METHOD, CONSTRUCTOR})
public @interface Generated {
}
33 changes: 33 additions & 0 deletions src/main/java/lol/pbu/ZcmiCommand.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package lol.pbu;

import io.micronaut.configuration.picocli.PicocliRunner;

import io.micronaut.context.annotation.Value;
import picocli.CommandLine;
import picocli.CommandLine.Command;
import picocli.jansi.graalvm.AnsiConsole;

@Command(name = "zcmi", description = "...", versionProvider = ZcmiCommand.ZcmiVersionProvider.class, mixinStandardHelpOptions = true)
public class ZcmiCommand extends BaseCommand implements Runnable {

@Generated
public static void main(String[] args) {
try (AnsiConsole ignored = AnsiConsole.windowsInstall()) {
PicocliRunner.run(ZcmiCommand.class, args);
}
}

public void run() {
err("No Command Given");
}

static class ZcmiVersionProvider implements CommandLine.IVersionProvider {
@Value("${micronaut.application.version}")
String version;

@Override
public String[] getVersion() {
return new String[]{version};
}
}
}
29 changes: 0 additions & 29 deletions src/main/kotlin/lol/pbu/BaseCommand.kt

This file was deleted.

35 changes: 0 additions & 35 deletions src/main/kotlin/lol/pbu/ZcmiCommand.kt

This file was deleted.

Loading