Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
abe80e5
migrated pem.xml configs to workflow plugins
VenaNocta Feb 10, 2026
d822031
updated date
VenaNocta Feb 10, 2026
240e77d
replaced maven profiles in Jenkinsfile with new versions
VenaNocta Feb 10, 2026
77bcdcc
updated Jenkinsfile
VenaNocta Feb 11, 2026
8ffd0f7
added plugin repos to maven repo-profiles
VenaNocta Feb 11, 2026
c7efcd7
changed maven pre-caching in Jenkinsfile
VenaNocta Feb 11, 2026
3236bd0
changed maven pre-caching in Jenkinsfile (2)
VenaNocta Feb 11, 2026
f66a17a
fixed unit test execution in Jenkins
VenaNocta Feb 13, 2026
585f977
updated Jenkinsfile
VenaNocta Feb 13, 2026
22a6f9a
[java-utils-common] fixed bugs in CollectionUtils & added unit tests …
VenaNocta Feb 15, 2026
1fa04d5
updated ci pipeline
VenaNocta Feb 15, 2026
48f8303
Merge branch 'task-17-build-process-rework' into bug-18-java-utils-co…
VenaNocta Feb 15, 2026
ec03c55
[java-utils-bom] updated bom version
VenaNocta Feb 15, 2026
2e324af
added build helper file .build/update-pom-property
VenaNocta Feb 15, 2026
9e24ed9
added maven-dependency-plugin to workflow
VenaNocta Feb 15, 2026
3d01436
added forced BOM update for testing to Jenkinsfile
VenaNocta Feb 15, 2026
fff670a
Merge branch 'task-17-build-process-rework' into bug-18-java-utils-co…
VenaNocta Feb 15, 2026
c980fa8
changed bom force update for tests to user defined override
VenaNocta Feb 15, 2026
a42b0a2
Merge branch 'task-17-build-process-rework' into bug-18-java-utils-co…
VenaNocta Feb 15, 2026
fc38388
[java-utils-common] updated bom version
VenaNocta Feb 16, 2026
990be94
[java-utils-common] Unit Tests & Bugfixes, move to RC v2.0.1 (#19)
VenaNocta Feb 20, 2026
288c883
[java-utils-maven3-ext] incremented patch version
VenaNocta Feb 20, 2026
540b557
[java-utils-maven3-ext-api] incremented patch version
VenaNocta Feb 20, 2026
f666254
[java-utils-maven3-ext(-api)] added ExtensionType & added eclipse Cla…
VenaNocta Feb 21, 2026
49e7a7a
[java-utils-maven3-ext] improved m2e compatibility (fixes #20)
VenaNocta Feb 21, 2026
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
25 changes: 25 additions & 0 deletions .build/update-pom-property
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
#!/usr/bin/sh

set -e

if [ $# -lt 2 ] || [ $# -gt 3 ]; then
printf "Usage: %s <property> <new-value> [path]\n" "$0"
printf " path defaults to current directory\n"
exit 1
fi

PROP_NAME="$1"
NEW_VALUE="$2"
SEARCH_PATH="${3:-.}"

find "$SEARCH_PATH" \
\( -type d -name src -o -type d -name target \) -prune -o \
-type f -name pom.xml -print |
while read -r pom; do
sed -i \
"s|\(<[[:space:]]*${PROP_NAME}[[:space:]]*>[[:space:]]*\)[^<]*\([[:space:]]*</[[:space:]]*${PROP_NAME}[[:space:]]*>\)|\1${NEW_VALUE}\2|g" \
"$pom"
done

printf "Updated %s to %s under %s\n" "${PROP_NAME}" "${NEW_VALUE}" "${SEARCH_PATH}"

2 changes: 1 addition & 1 deletion .mvn/extensions.xml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,6 @@
<extension>
<groupId>net.runeduniverse.tools.maven.r4m</groupId>
<artifactId>r4m-maven-extension</artifactId>
<version>1.0.1</version>
<version>1.1.1</version>
</extension>
</extensions>
143 changes: 90 additions & 53 deletions Jenkinsfile
Original file line number Diff line number Diff line change
@@ -1,22 +1,29 @@
def evalValue(expression, path) {
def evalValue(expression, path = null) {
return sh( returnStdout: true,
script: "mvn org.apache.maven.plugins:maven-help-plugin:evaluate -Dexpression=${ expression } -q -DforceStdout -pl=${ path } | tail -1")
script: "mvn org.apache.maven.plugins:maven-help-plugin:evaluate -Dexpression=${ expression } -q -DforceStdout ${ path==null ? '' : ('-pl='+path) } | tail -1")
}

def installArtifact(mod) {
def getToolchainId(mod) {
if(mod.hasTag('jdk-11'))
return 'toolchain-openjdk-11';
return 'toolchain-openjdk-1-8-0';
}

def installArtifact(mod, parent = null) {
if(!mod.active()) {
skipStage()
return
}
def relPath = (parent == null ? '.' : mod.relPathFrom(parent))
// get module metadata
def groupId = evalValue('project.groupId', mod.relPathFrom('maven-parent'))
def artifactId = evalValue('project.artifactId', mod.relPathFrom('maven-parent'))
def version = evalValue('project.version', mod.relPathFrom('maven-parent'))
def groupId = evalValue('project.groupId', relPath)
def artifactId = evalValue('project.artifactId', relPath)
def version = evalValue('project.version', relPath)
echo "Building: ${ groupId }:${ artifactId }:${ version }"
try {
sh "mvn-dev -P ${ REPOS },toolchain-openjdk-1-8-0,install -pl=${ mod.relPathFrom('maven-parent') }"
sh "mvn-dev -P ${ REPOS },${ getToolchainId(mod) },ci-install -pl=${ relPath }"
} finally {
def baseName="${ artifactId }-${ version }"
def baseName = "${ artifactId }-${ version }"
// create spec .pom in target/ path
sh "cp -T '${ mod.path() }/pom.xml' '${ mod.path() }/target/${ baseName }.pom'"
// archive artifacts
Expand Down Expand Up @@ -45,7 +52,29 @@ def installArtifact(mod) {
}
}

node {
def testArtifacts(toolchainId, tag, parent, flags = []) {
stage(tag) {
def mods = getModules(withTags: [ 'test', tag ]);

if(!mods) {
skipStage()
return
}

def modPaths = mods.collect({ it.relPathFrom(parent) }).join(',');
def testFlags = flags.collect({ "-D${ it }" }).join(' ');

sh "mvn-dev -P ${ REPOS },${ toolchainId },ci-test-build -pl=${ modPaths } ${ testFlags }"
sh "mvn-dev --fail-never -P ${ REPOS },${ toolchainId },ci-test-exec,test-system -pl=${ modPaths } ${ testFlags }"
// check tests, archive reports in case junit flags errors
junit '*/target/surefire-reports/*.xml'
if(currentBuild.resultIsWorseOrEqualTo('UNSTABLE')) {
archiveArtifacts artifacts: '*/target/surefire-reports/*.xml'
}
}
}

node( label: 'linux' ) {
withModules {
tool(name: 'maven-latest', type: 'maven')

Expand All @@ -72,27 +101,29 @@ node {

addModule id: 'maven-parent', path: '.', name: 'Maven Parent', tags: [ 'parent' ]
addModule id: 'java-utils-bom', path: 'java-utils-bom', name: 'Bill of Materials', tags: [ 'bom' ]
addModule id: 'java-utils-async-api', path: 'java-utils-async-api', name: 'Java Async Utils [API]', tags: [ 'build1a', 'pack-jar' ]
addModule id: 'java-utils-async', path: 'java-utils-async', name: 'Java Async Utils', tags: [ 'test', 'build1', 'pack-jar' ]
addModule id: 'java-utils-chain-api', path: 'java-utils-chain-api', name: 'Java Chain Library [API]', tags: [ 'build2a', 'pack-jar' ]
addModule id: 'java-utils-chain', path: 'java-utils-chain', name: 'Java Chain Library', tags: [ 'test', 'build2', 'pack-jar' ]
addModule id: 'java-utils-common-api', path: 'java-utils-common-api', name: 'Java Common Utils [API]', tags: [ 'build1a', 'pack-jar' ]
addModule id: 'java-utils-common', path: 'java-utils-common', name: 'Java Common Utils', tags: [ 'test', 'build1', 'pack-jar' ]
addModule id: 'java-utils-conditional-api', path: 'java-utils-conditional-api', name: 'Java Conditional Utils [API]', tags: [ 'build2a', 'pack-jar' ]
addModule id: 'java-utils-conditional', path: 'java-utils-conditional', name: 'Java Conditional Utils', tags: [ 'test', 'build2', 'pack-jar' ]
addModule id: 'java-utils-config-api', path: 'java-utils-config-api', name: 'Java Config Utils [API]', tags: [ 'build1a', 'pack-jar' ]
addModule id: 'java-utils-config', path: 'java-utils-config', name: 'Java Config Utils', tags: [ 'test', 'build1', 'pack-jar' ]
addModule id: 'java-utils-errors', path: 'java-utils-errors', name: 'Java Error Handling Library', tags: [ 'test', 'build1', 'pack-jar' ]
addModule id: 'java-utils-logging-api', path: 'java-utils-logging-api', name: 'Java Logging Tools [API]', tags: [ 'build1a', 'pack-jar' ]
addModule id: 'java-utils-logging', path: 'java-utils-logging', name: 'Java Logging Tools', tags: [ 'test', 'build1', 'pack-jar' ]
addModule id: 'java-utils-maven3-api', path: 'java-utils-maven3-api', name: 'Java Maven3 Utils [API]', tags: [ 'build1a', 'pack-jar' ]
addModule id: 'java-utils-maven3', path: 'java-utils-maven3', name: 'Java Maven3 Utils', tags: [ 'test', 'build1', 'pack-jar' ]
addModule id: 'java-utils-maven3-ext-api', path: 'java-utils-maven3-ext-api', name: 'Java Maven3 Extension Utils [API]', tags: [ 'build3a', 'pack-jar' ]
addModule id: 'java-utils-maven3-ext', path: 'java-utils-maven3-ext', name: 'Java Maven3 Extension Utils', tags: [ 'test', 'build3', 'pack-jar' ]
addModule id: 'java-utils-plexus', path: 'java-utils-plexus', name: 'Java Plexus Utils', tags: [ 'test', 'build2', 'pack-jar' ]
addModule id: 'java-utils-scanner-api', path: 'java-utils-scanner-api', name: 'Java Scanner [API]', tags: [ 'build2a', 'pack-jar' ]
addModule id: 'java-utils-scanner', path: 'java-utils-scanner', name: 'Java Scanner', tags: [ 'test', 'build2', 'pack-jar' ]
addModule id: 'java-utils-async-api', path: 'java-utils-async-api', name: 'Java Async Utils [API]', tags: [ 'build1a', 'pack-jar', 'jdk-1.8.0' ]
addModule id: 'java-utils-async', path: 'java-utils-async', name: 'Java Async Utils', tags: [ 'test', 'build1', 'pack-jar', 'jdk-1.8.0' ]
addModule id: 'java-utils-chain-api', path: 'java-utils-chain-api', name: 'Java Chain Library [API]', tags: [ 'build2a', 'pack-jar', 'jdk-1.8.0' ]
addModule id: 'java-utils-chain', path: 'java-utils-chain', name: 'Java Chain Library', tags: [ 'test', 'build2', 'pack-jar', 'jdk-1.8.0' ]
addModule id: 'java-utils-common-api', path: 'java-utils-common-api', name: 'Java Common Utils [API]', tags: [ 'build1a', 'pack-jar', 'jdk-1.8.0' ]
addModule id: 'java-utils-common', path: 'java-utils-common', name: 'Java Common Utils', tags: [ 'test', 'build1', 'pack-jar', 'jdk-1.8.0' ]
addModule id: 'java-utils-conditional-api', path: 'java-utils-conditional-api', name: 'Java Conditional Utils [API]', tags: [ 'build2a', 'pack-jar', 'jdk-1.8.0' ]
addModule id: 'java-utils-conditional', path: 'java-utils-conditional', name: 'Java Conditional Utils', tags: [ 'test', 'build2', 'pack-jar', 'jdk-1.8.0' ]
addModule id: 'java-utils-config-api', path: 'java-utils-config-api', name: 'Java Config Utils [API]', tags: [ 'build1a', 'pack-jar', 'jdk-1.8.0' ]
addModule id: 'java-utils-config', path: 'java-utils-config', name: 'Java Config Utils', tags: [ 'test', 'build1', 'pack-jar', 'jdk-1.8.0' ]
addModule id: 'java-utils-errors', path: 'java-utils-errors', name: 'Java Error Handling Library', tags: [ 'test', 'build1', 'pack-jar', 'jdk-1.8.0' ]
addModule id: 'java-utils-logging-api', path: 'java-utils-logging-api', name: 'Java Logging Tools [API]', tags: [ 'build1a', 'pack-jar', 'jdk-1.8.0' ]
addModule id: 'java-utils-logging', path: 'java-utils-logging', name: 'Java Logging Tools', tags: [ 'test', 'build1', 'pack-jar', 'jdk-1.8.0' ]
addModule id: 'java-utils-maven3-api', path: 'java-utils-maven3-api', name: 'Java Maven3 Utils [API]', tags: [ 'build1a', 'pack-jar', 'jdk-1.8.0' ]
addModule id: 'java-utils-maven3', path: 'java-utils-maven3', name: 'Java Maven3 Utils', tags: [ 'test', 'build1', 'pack-jar', 'jdk-1.8.0' ]
addModule id: 'java-utils-maven3-ext-api', path: 'java-utils-maven3-ext-api', name: 'Java Maven3 Extension Utils [API]', tags: [ 'build3a', 'pack-jar', 'jdk-1.8.0' ]
addModule id: 'java-utils-maven3-ext', path: 'java-utils-maven3-ext', name: 'Java Maven3 Extension Utils', tags: [ 'test', 'build3', 'pack-jar', 'jdk-1.8.0' ]
addModule id: 'java-utils-plexus', path: 'java-utils-plexus', name: 'Java Plexus Utils', tags: [ 'test', 'build2', 'pack-jar', 'jdk-1.8.0' ]
addModule id: 'java-utils-scanner-api', path: 'java-utils-scanner-api', name: 'Java Scanner [API]', tags: [ 'build2a', 'pack-jar', 'jdk-1.8.0' ]
addModule id: 'java-utils-scanner', path: 'java-utils-scanner', name: 'Java Scanner', tags: [ 'test', 'build2', 'pack-jar', 'jdk-1.8.0' ]
}
def parentMod = getModule(id: 'maven-parent');
def bomMod = getModule(id: 'java-utils-bom');

stage('Init Modules') {
sshagent (credentials: ['RunedUniverse-Jenkins']) {
Expand All @@ -101,7 +132,7 @@ node {
mod.activate(
!mod.hasTag('skip') && sh(
returnStdout: true,
script: "git-check-version-tag ${ mod.id() } ${ mod.relPathFrom('maven-parent') }"
script: "git-check-version-tag ${ mod.id() } ${ mod.relPathFrom(parentMod) }"
) == '1'
);
}
Expand All @@ -112,50 +143,56 @@ node {
}

stage('Update Maven Repo') {
echo 'purging local maven repository'
sh "mvn-dev -P ${ REPOS } dependency:purge-local-repository -DactTransitively=false -DreResolve=false"

echo 'caching validation dependencies'
sh "mvn-dev -P ${ REPOS },ci-validate dependency:resolve-plugins dependency:resolve -U --fail-never"

if(checkAllModules(match: 'all', active: false)) {
skipStage()
return
echo 'skipping build dependency download » unused'
} else {
echo 'caching build dependencies'
sh "mvn-dev -P ${ REPOS },ci-install dependency:resolve -U --fail-never"
}
sh "mvn-dev -P ${ REPOS } dependency:purge-local-repository -DactTransitively=false -DreResolve=false"
sh "mvn-dev -P ${ REPOS },install,validate dependency:go-offline -U --fail-never"
}

stage('Code Validation') {
sh "mvn-dev -P ${ REPOS },validate,license-apache2-approve,license-epl-v10-approve --fail-at-end -T1C"
sh "mvn-dev -P ${ REPOS },ci-validate,license-apache2-approve,license-epl-v10-approve --fail-at-end -T1C"
}

bundleContext {
stage('Install Maven Parent') {
installArtifact( getModule(id: 'maven-parent') );
installArtifact( parentMod );
}
stage('Install - BOMs') {
perModule(withTagIn: [ 'bom' ]) {
installArtifact( module );
installArtifact( getModule(), parentMod );
}
}

stage('Build [1st Level]') {
perModule(withTagIn: [ 'build1a' ]) {
installArtifact( module );
installArtifact( getModule(), parentMod );
}
perModule(withTagIn: [ 'build1' ]) {
installArtifact( module );
installArtifact( getModule(), parentMod );
}
}
stage('Build [2nd Level]') {
perModule(withTagIn: [ 'build2a' ]) {
installArtifact( module );
installArtifact( getModule(), parentMod );
}
perModule(withTagIn: [ 'build2' ]) {
installArtifact( module );
installArtifact( getModule(), parentMod );
}
}
stage('Build [3rd Level]') {
perModule(withTagIn: [ 'build3a' ]) {
installArtifact( module );
installArtifact( getModule(), parentMod );
}
perModule(withTagIn: [ 'build3' ]) {
installArtifact( module );
installArtifact( getModule(), parentMod );
}
}

Expand All @@ -164,13 +201,13 @@ node {
skipStage()
return
}
sh "mvn-dev -P ${ REPOS },toolchain-openjdk-1-8-0,build-tests"
sh "mvn-dev --fail-never -P ${ REPOS },toolchain-openjdk-1-8-0,test-junit-jupiter,test-system"
// check tests, archive reports in case junit flags errors
junit '*/target/surefire-reports/*.xml'
if(currentBuild.resultIsWorseOrEqualTo('UNSTABLE')) {
archiveArtifacts artifacts: '*/target/surefire-reports/*.xml'
}

echo 'force update bom version for tests -> test for possible collisions caused by this update'
def bomVersion = evalValue('project.version', bomMod.relPathFrom(parentMod));
def flags = [ "runeduniverse-utils-bom-version=${ bomVersion }" ];

testArtifacts('toolchain-openjdk-1-8-0', 'jdk-1.8.0', parentMod, flags);
testArtifacts('toolchain-openjdk-11', 'jdk-11', parentMod, flags);
}

stage('Package Build Result') {
Expand Down Expand Up @@ -209,9 +246,9 @@ node {
return
}
deployArtifacts( bundle: mod.id(), repo: 'nexus-runeduniverse>maven-releases' )
def groupId = evalValue('project.groupId', mod.relPathFrom('maven-parent'))
def artifactId = evalValue('project.artifactId', mod.relPathFrom('maven-parent'))
def version = evalValue('project.version', mod.relPathFrom('maven-parent'))
def groupId = evalValue('project.groupId', mod.relPathFrom(parentMod))
def artifactId = evalValue('project.artifactId', mod.relPathFrom(parentMod))
def version = evalValue('project.version', mod.relPathFrom(parentMod))
sshagent (credentials: ['RunedUniverse-Jenkins']) {
sh "git tag -a ${ mod.id() }/v${ version } -f -m '[artifact] ${ groupId }:${ artifactId }:${ version }'"
sh "git push origin ${ mod.id() }/v${ version }"
Expand Down
2 changes: 1 addition & 1 deletion java-utils-async-api/pom.xml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<!--

Copyright © 2025 VenaNocta (venanocta@gmail.com)
Copyright © 2026 VenaNocta (venanocta@gmail.com)

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright © 2025 VenaNocta (venanocta@gmail.com)
* Copyright © 2026 VenaNocta (venanocta@gmail.com)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright © 2025 VenaNocta (venanocta@gmail.com)
* Copyright © 2026 VenaNocta (venanocta@gmail.com)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright © 2025 VenaNocta (venanocta@gmail.com)
* Copyright © 2026 VenaNocta (venanocta@gmail.com)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright © 2025 VenaNocta (venanocta@gmail.com)
* Copyright © 2026 VenaNocta (venanocta@gmail.com)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down
2 changes: 1 addition & 1 deletion java-utils-async/pom.xml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<!--

Copyright © 2025 VenaNocta (venanocta@gmail.com)
Copyright © 2026 VenaNocta (venanocta@gmail.com)

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright © 2025 VenaNocta (venanocta@gmail.com)
* Copyright © 2026 VenaNocta (venanocta@gmail.com)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright © 2025 VenaNocta (venanocta@gmail.com)
* Copyright © 2026 VenaNocta (venanocta@gmail.com)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright © 2025 VenaNocta (venanocta@gmail.com)
* Copyright © 2026 VenaNocta (venanocta@gmail.com)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright © 2025 VenaNocta (venanocta@gmail.com)
* Copyright © 2026 VenaNocta (venanocta@gmail.com)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright © 2025 VenaNocta (venanocta@gmail.com)
* Copyright © 2026 VenaNocta (venanocta@gmail.com)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright © 2025 VenaNocta (venanocta@gmail.com)
* Copyright © 2026 VenaNocta (venanocta@gmail.com)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright © 2025 VenaNocta (venanocta@gmail.com)
* Copyright © 2026 VenaNocta (venanocta@gmail.com)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright © 2025 VenaNocta (venanocta@gmail.com)
* Copyright © 2026 VenaNocta (venanocta@gmail.com)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright © 2025 VenaNocta (venanocta@gmail.com)
* Copyright © 2026 VenaNocta (venanocta@gmail.com)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright © 2025 VenaNocta (venanocta@gmail.com)
* Copyright © 2026 VenaNocta (venanocta@gmail.com)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down
Loading