diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 027d3c6f..d468b2b6 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -36,7 +36,10 @@ jobs: - name: Determine new tag id: newtag - run: echo "::set-output name=tag::$(date +'%Y%m%dT%H%M%S')" + run: | + VERSION=$(java -jar build/libs/codeanalyzer.jar --version | awk '{print $2}') + TAG="v$VERSION" + echo "tag=$TAG" >> $GITHUB_OUTPUT - name: Create Git Tag run: | diff --git a/build.gradle b/build.gradle index 7e6734d1..162a3fd7 100644 --- a/build.gradle +++ b/build.gradle @@ -18,7 +18,11 @@ plugins { id 'org.graalvm.buildtools.native' version '0.9.28' } -version = 'latest' +// Get the version from the property file first +version = new Properties().with {property -> + file("gradle.properties").withInputStream {property.load(it)} + property.getProperty("version") +} repositories { mavenCentral() @@ -30,7 +34,7 @@ if (project.hasProperty('mainClass')) { mainClassName = project.getProperty('mainClass') } else { // use a default - mainClassName =("com.ibm.northstar.CodeAnalyzer") + mainClassName =("com.ibm.cldk.CodeAnalyzer") } sourceSets { @@ -124,9 +128,9 @@ task fatJar(type: Jar) { duplicatesStrategy = DuplicatesStrategy.EXCLUDE manifest { attributes( - 'Implementation-Title': 'Northstar Codeanalyzer', + 'Implementation-Title': 'codeanalyzer', 'Implementation-Version': project.version, - 'Main-Class': 'com.ibm.northstar.CodeAnalyzer' + 'Main-Class': 'com.ibm.cldk.CodeAnalyzer' ) } @@ -148,7 +152,7 @@ graalvmNative { binaries { main { imageName = "codeanalyzer" - mainClass = "com.ibm.northstar.CodeAnalyzer" + mainClass = "com.ibm.cldk.CodeAnalyzer" buildArgs.add("-Ob") buildArgs.add("-march=compatibility") buildArgs.add("--no-fallback") @@ -185,7 +189,7 @@ task createRelease { doLast { def releaseTitle = 'latest' def hostName = 'git@github.ibm.com' - def repo = 'northstar/codeanalyzer' + def repo = 'cldk/codeanalyzer' // Command to create release def delete = "gh release delete latest --cleanup-tag --yes -R ${hostName}:${repo}"// @@ -207,4 +211,48 @@ task createRelease { } +tasks.register('bumpVersion') { + description = 'Bumps the version number (patch, minor, or major)' + group = 'Versioning' + + doLast { + def versionFile = file('gradle.properties') + def versionFileText = versionFile.text + def versionPattern = /version\s*=\s*(\d+)\.(\d+)\.(\d+)/ + def matcher = (versionFileText =~ versionPattern) + + if (matcher.find()) { + def major = matcher.group(1) as int + def minor = matcher.group(2) as int + def patch = matcher.group(3) as int + + def bumpType = project.hasProperty('bumpType') ? project.bumpType : 'patch' + + switch (bumpType) { + case 'major': + major++ + minor = 0 + patch = 0 + break + case 'minor': + minor++ + patch = 0 + break + case 'patch': + default: + patch++ + break + } + + def newVersion = "${major}.${minor}.${patch}" + def updatedContent = versionFileText.replaceFirst(versionPattern, "version=$newVersion") + versionFile.text = updatedContent + + println "Version bumped to $newVersion" + } else { + throw new GradleException("Version not found in gradle.properties") + } + } +} + nativeCompile.finalizedBy copyNativeExecutable diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 00000000..beb72cc4 --- /dev/null +++ b/gradle.properties @@ -0,0 +1 @@ +version=1.0.0 \ No newline at end of file diff --git a/src/main/java/com/ibm/northstar/CodeAnalyzer.java b/src/main/java/com/ibm/cldk/CodeAnalyzer.java similarity index 95% rename from src/main/java/com/ibm/northstar/CodeAnalyzer.java rename to src/main/java/com/ibm/cldk/CodeAnalyzer.java index 10ecc6f8..81badccb 100644 --- a/src/main/java/com/ibm/northstar/CodeAnalyzer.java +++ b/src/main/java/com/ibm/cldk/CodeAnalyzer.java @@ -11,14 +11,14 @@ limitations under the License. */ -package com.ibm.northstar; +package com.ibm.cldk; import com.github.javaparser.Problem; import com.google.common.reflect.TypeToken; import com.google.gson.*; -import com.ibm.northstar.entities.JavaCompilationUnit; -import com.ibm.northstar.utils.BuildProject; -import com.ibm.northstar.utils.Log; +import com.ibm.cldk.entities.JavaCompilationUnit; +import com.ibm.cldk.utils.BuildProject; +import com.ibm.cldk.utils.Log; import com.ibm.wala.ipa.callgraph.CallGraphBuilderCancelException; import com.ibm.wala.ipa.cha.ClassHierarchyException; import org.apache.commons.lang3.tuple.Pair; @@ -38,10 +38,17 @@ import java.util.Map; import java.util.stream.Collectors; + +class VersionProvider implements CommandLine.IVersionProvider { + public String[] getVersion() throws Exception { + String version = getClass().getPackage().getImplementationVersion(); + return new String[]{ "codeanalyzer " + (version != null ? version : "unknown") }; + } +} /** * The type Code analyzer. */ -@Command(name = "codeanalyzer", mixinStandardHelpOptions = true, sortOptions = false, version = "codeanalyzer v1.1", description = "Convert java binary into a comprehensive system dependency graph.") +@Command(name = "codeanalyzer", mixinStandardHelpOptions = true, sortOptions = false, versionProvider = VersionProvider.class, description = "Analyze java application.") public class CodeAnalyzer implements Runnable { @Option(names = {"-i", "--input"}, description = "Path to the project root directory.") @@ -62,6 +69,7 @@ public class CodeAnalyzer implements Runnable { @Option(names = {"--no-build"}, description = "Do not build your application. Use this option if you have already built your application.") private static boolean noBuild = false; + @Option(names = {"-a", "--analysis-level"}, description = "Level of analysis to perform. Options: 1 (for just symbol table) or 2 (for call graph). Default: 1") private static int analysisLevel = 1; @@ -70,7 +78,6 @@ public class CodeAnalyzer implements Runnable { private static final String outputFileName = "analysis.json"; - public static Gson gson = new GsonBuilder() .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES) .setPrettyPrinting() diff --git a/src/main/java/com/ibm/northstar/SymbolTable.java b/src/main/java/com/ibm/cldk/SymbolTable.java similarity index 99% rename from src/main/java/com/ibm/northstar/SymbolTable.java rename to src/main/java/com/ibm/cldk/SymbolTable.java index 7b437226..7abe086d 100644 --- a/src/main/java/com/ibm/northstar/SymbolTable.java +++ b/src/main/java/com/ibm/cldk/SymbolTable.java @@ -1,4 +1,4 @@ -package com.ibm.northstar; +package com.ibm.cldk; import com.github.javaparser.JavaParser; import com.github.javaparser.ParseResult; @@ -23,8 +23,8 @@ import com.github.javaparser.utils.SourceRoot; import com.google.common.collect.Table; import com.google.common.collect.Tables; -import com.ibm.northstar.entities.*; -import com.ibm.northstar.utils.Log; +import com.ibm.cldk.entities.*; +import com.ibm.cldk.utils.Log; import org.apache.commons.lang3.tuple.Pair; import java.io.IOException; @@ -106,7 +106,7 @@ private static JavaCompilationUnit processCompilationUnit(CompilationUnit parseR .map(typeDecl -> { // get type name and initialize the type object String typeName = typeDecl.getFullyQualifiedName().get().toString(); - com.ibm.northstar.entities.Type typeNode = new com.ibm.northstar.entities.Type(); + com.ibm.cldk.entities.Type typeNode = new com.ibm.cldk.entities.Type(); if (typeDecl instanceof ClassOrInterfaceDeclaration) { ClassOrInterfaceDeclaration classDecl = (ClassOrInterfaceDeclaration)typeDecl; @@ -156,7 +156,7 @@ private static JavaCompilationUnit processCompilationUnit(CompilationUnit parseR // TODO: handle AnnotationDeclaration, RecordDeclaration // set the common type attributes only Log.warn("Found unsupported type declaration: "+typeDecl.toString()); - typeNode = new com.ibm.northstar.entities.Type(); + typeNode = new com.ibm.cldk.entities.Type(); } /* set common attributes of types that available in type declarations: diff --git a/src/main/java/com/ibm/northstar/SystemDependencyGraph.java b/src/main/java/com/ibm/cldk/SystemDependencyGraph.java similarity index 96% rename from src/main/java/com/ibm/northstar/SystemDependencyGraph.java rename to src/main/java/com/ibm/cldk/SystemDependencyGraph.java index 854a48d3..950c3c6d 100644 --- a/src/main/java/com/ibm/northstar/SystemDependencyGraph.java +++ b/src/main/java/com/ibm/cldk/SystemDependencyGraph.java @@ -11,15 +11,15 @@ limitations under the License. */ -package com.ibm.northstar; - -import com.ibm.northstar.entities.AbstractGraphEdge; -import com.ibm.northstar.entities.CallEdge; -import com.ibm.northstar.entities.Callable; -import com.ibm.northstar.entities.SystemDepEdge; -import com.ibm.northstar.utils.AnalysisUtils; -import com.ibm.northstar.utils.Log; -import com.ibm.northstar.utils.ScopeUtils; +package com.ibm.cldk; + +import com.ibm.cldk.entities.AbstractGraphEdge; +import com.ibm.cldk.entities.CallEdge; +import com.ibm.cldk.entities.Callable; +import com.ibm.cldk.entities.SystemDepEdge; +import com.ibm.cldk.utils.AnalysisUtils; +import com.ibm.cldk.utils.Log; +import com.ibm.cldk.utils.ScopeUtils; import com.ibm.wala.cast.ir.ssa.AstIRFactory; import com.ibm.wala.cast.java.translator.jdt.ecj.ECJClassLoaderFactory; import com.ibm.wala.classLoader.CallSiteReference; @@ -52,8 +52,8 @@ import java.util.function.BiFunction; import java.util.function.Supplier; -import static com.ibm.northstar.CodeAnalyzer.gson; -import static com.ibm.northstar.utils.AnalysisUtils.*; +import static com.ibm.cldk.CodeAnalyzer.gson; +import static com.ibm.cldk.utils.AnalysisUtils.*; /** * The type Sdg 2 json. diff --git a/src/main/java/com/ibm/northstar/entities/AbstractGraphEdge.java b/src/main/java/com/ibm/cldk/entities/AbstractGraphEdge.java similarity index 98% rename from src/main/java/com/ibm/northstar/entities/AbstractGraphEdge.java rename to src/main/java/com/ibm/cldk/entities/AbstractGraphEdge.java index b4ee79d9..eb604294 100644 --- a/src/main/java/com/ibm/northstar/entities/AbstractGraphEdge.java +++ b/src/main/java/com/ibm/cldk/entities/AbstractGraphEdge.java @@ -11,7 +11,7 @@ limitations under the License. */ -package com.ibm.northstar.entities; +package com.ibm.cldk.entities; import com.ibm.wala.ipa.callgraph.CGNode; import com.ibm.wala.ipa.slicer.Statement; diff --git a/src/main/java/com/ibm/northstar/entities/CallEdge.java b/src/main/java/com/ibm/cldk/entities/CallEdge.java similarity index 97% rename from src/main/java/com/ibm/northstar/entities/CallEdge.java rename to src/main/java/com/ibm/cldk/entities/CallEdge.java index 5d30ec0d..ebd63e3f 100644 --- a/src/main/java/com/ibm/northstar/entities/CallEdge.java +++ b/src/main/java/com/ibm/cldk/entities/CallEdge.java @@ -11,7 +11,7 @@ limitations under the License. */ -package com.ibm.northstar.entities; +package com.ibm.cldk.entities; import org.jgrapht.nio.Attribute; import org.jgrapht.nio.DefaultAttribute; diff --git a/src/main/java/com/ibm/northstar/entities/CallSite.java b/src/main/java/com/ibm/cldk/entities/CallSite.java similarity index 94% rename from src/main/java/com/ibm/northstar/entities/CallSite.java rename to src/main/java/com/ibm/cldk/entities/CallSite.java index cc7e3d7f..83dd5ba5 100644 --- a/src/main/java/com/ibm/northstar/entities/CallSite.java +++ b/src/main/java/com/ibm/cldk/entities/CallSite.java @@ -1,4 +1,4 @@ -package com.ibm.northstar.entities; +package com.ibm.cldk.entities; import lombok.Data; diff --git a/src/main/java/com/ibm/northstar/entities/Callable.java b/src/main/java/com/ibm/cldk/entities/Callable.java similarity index 95% rename from src/main/java/com/ibm/northstar/entities/Callable.java rename to src/main/java/com/ibm/cldk/entities/Callable.java index a165b984..214cb4ea 100644 --- a/src/main/java/com/ibm/northstar/entities/Callable.java +++ b/src/main/java/com/ibm/cldk/entities/Callable.java @@ -1,4 +1,4 @@ -package com.ibm.northstar.entities; +package com.ibm.cldk.entities; import lombok.Data; diff --git a/src/main/java/com/ibm/northstar/entities/EnumConstant.java b/src/main/java/com/ibm/cldk/entities/EnumConstant.java similarity index 79% rename from src/main/java/com/ibm/northstar/entities/EnumConstant.java rename to src/main/java/com/ibm/cldk/entities/EnumConstant.java index d39d0ff0..5509c997 100644 --- a/src/main/java/com/ibm/northstar/entities/EnumConstant.java +++ b/src/main/java/com/ibm/cldk/entities/EnumConstant.java @@ -1,4 +1,4 @@ -package com.ibm.northstar.entities; +package com.ibm.cldk.entities; import lombok.Data; diff --git a/src/main/java/com/ibm/northstar/entities/Field.java b/src/main/java/com/ibm/cldk/entities/Field.java similarity index 89% rename from src/main/java/com/ibm/northstar/entities/Field.java rename to src/main/java/com/ibm/cldk/entities/Field.java index ce10091c..40a8bba9 100644 --- a/src/main/java/com/ibm/northstar/entities/Field.java +++ b/src/main/java/com/ibm/cldk/entities/Field.java @@ -1,4 +1,4 @@ -package com.ibm.northstar.entities; +package com.ibm.cldk.entities; import lombok.Data; import java.util.List; diff --git a/src/main/java/com/ibm/northstar/entities/JavaCompilationUnit.java b/src/main/java/com/ibm/cldk/entities/JavaCompilationUnit.java similarity index 88% rename from src/main/java/com/ibm/northstar/entities/JavaCompilationUnit.java rename to src/main/java/com/ibm/cldk/entities/JavaCompilationUnit.java index 86ca0f7f..2ed0095e 100644 --- a/src/main/java/com/ibm/northstar/entities/JavaCompilationUnit.java +++ b/src/main/java/com/ibm/cldk/entities/JavaCompilationUnit.java @@ -1,4 +1,4 @@ -package com.ibm.northstar.entities; +package com.ibm.cldk.entities; import lombok.Data; import java.util.List; diff --git a/src/main/java/com/ibm/northstar/entities/ParameterInCallable.java b/src/main/java/com/ibm/cldk/entities/ParameterInCallable.java similarity index 57% rename from src/main/java/com/ibm/northstar/entities/ParameterInCallable.java rename to src/main/java/com/ibm/cldk/entities/ParameterInCallable.java index cb2ea52b..89659ef4 100644 --- a/src/main/java/com/ibm/northstar/entities/ParameterInCallable.java +++ b/src/main/java/com/ibm/cldk/entities/ParameterInCallable.java @@ -1,12 +1,8 @@ -package com.ibm.northstar.entities; +package com.ibm.cldk.entities; import lombok.Data; -import org.jgrapht.nio.Attribute; -import org.jgrapht.nio.DefaultAttribute; -import java.util.HashMap; import java.util.List; -import java.util.Map; @Data public class ParameterInCallable { diff --git a/src/main/java/com/ibm/northstar/entities/SystemDepEdge.java b/src/main/java/com/ibm/cldk/entities/SystemDepEdge.java similarity index 98% rename from src/main/java/com/ibm/northstar/entities/SystemDepEdge.java rename to src/main/java/com/ibm/cldk/entities/SystemDepEdge.java index a53192b7..a77709c8 100644 --- a/src/main/java/com/ibm/northstar/entities/SystemDepEdge.java +++ b/src/main/java/com/ibm/cldk/entities/SystemDepEdge.java @@ -11,7 +11,7 @@ limitations under the License. */ -package com.ibm.northstar.entities; +package com.ibm.cldk.entities; import com.ibm.wala.ipa.slicer.Statement; import org.apache.commons.lang3.builder.HashCodeBuilder; diff --git a/src/main/java/com/ibm/northstar/entities/Type.java b/src/main/java/com/ibm/cldk/entities/Type.java similarity index 95% rename from src/main/java/com/ibm/northstar/entities/Type.java rename to src/main/java/com/ibm/cldk/entities/Type.java index 36717715..a27b6585 100644 --- a/src/main/java/com/ibm/northstar/entities/Type.java +++ b/src/main/java/com/ibm/cldk/entities/Type.java @@ -1,4 +1,4 @@ -package com.ibm.northstar.entities; +package com.ibm.cldk.entities; import lombok.Data; diff --git a/src/main/java/com/ibm/northstar/entities/VariableDeclaration.java b/src/main/java/com/ibm/cldk/entities/VariableDeclaration.java similarity index 80% rename from src/main/java/com/ibm/northstar/entities/VariableDeclaration.java rename to src/main/java/com/ibm/cldk/entities/VariableDeclaration.java index 531127dd..6263c6e4 100644 --- a/src/main/java/com/ibm/northstar/entities/VariableDeclaration.java +++ b/src/main/java/com/ibm/cldk/entities/VariableDeclaration.java @@ -1,9 +1,7 @@ -package com.ibm.northstar.entities; +package com.ibm.cldk.entities; import lombok.Data; -import java.util.List; - @Data public class VariableDeclaration { private String name; diff --git a/src/main/java/com/ibm/northstar/utils/AnalysisUtils.java b/src/main/java/com/ibm/cldk/utils/AnalysisUtils.java similarity index 96% rename from src/main/java/com/ibm/northstar/utils/AnalysisUtils.java rename to src/main/java/com/ibm/cldk/utils/AnalysisUtils.java index 14eb93fa..811883ce 100644 --- a/src/main/java/com/ibm/northstar/utils/AnalysisUtils.java +++ b/src/main/java/com/ibm/cldk/utils/AnalysisUtils.java @@ -11,12 +11,12 @@ limitations under the License. */ -package com.ibm.northstar.utils; +package com.ibm.cldk.utils; -import static com.ibm.northstar.SymbolTable.declaredMethodsAndConstructors; +import static com.ibm.cldk.SymbolTable.declaredMethodsAndConstructors; -import com.ibm.northstar.entities.Callable; -import com.ibm.northstar.entities.ParameterInCallable; +import com.ibm.cldk.entities.Callable; +import com.ibm.cldk.entities.ParameterInCallable; import com.ibm.wala.classLoader.IClass; import com.ibm.wala.classLoader.IMethod; import com.ibm.wala.ipa.callgraph.Entrypoint; diff --git a/src/main/java/com/ibm/northstar/utils/BuildProject.java b/src/main/java/com/ibm/cldk/utils/BuildProject.java similarity index 98% rename from src/main/java/com/ibm/northstar/utils/BuildProject.java rename to src/main/java/com/ibm/cldk/utils/BuildProject.java index 317e7c6f..ed0ce653 100644 --- a/src/main/java/com/ibm/northstar/utils/BuildProject.java +++ b/src/main/java/com/ibm/cldk/utils/BuildProject.java @@ -1,4 +1,4 @@ -package com.ibm.northstar.utils; +package com.ibm.cldk.utils; import java.io.BufferedReader; import java.io.File; @@ -10,7 +10,7 @@ import java.util.Arrays; import java.util.List; -import static com.ibm.northstar.utils.ProjectDirectoryScanner.classFilesStream; +import static com.ibm.cldk.utils.ProjectDirectoryScanner.classFilesStream; public class BuildProject { diff --git a/src/main/java/com/ibm/northstar/utils/Log.java b/src/main/java/com/ibm/cldk/utils/Log.java similarity index 98% rename from src/main/java/com/ibm/northstar/utils/Log.java rename to src/main/java/com/ibm/cldk/utils/Log.java index d5348937..d0946ee1 100644 --- a/src/main/java/com/ibm/northstar/utils/Log.java +++ b/src/main/java/com/ibm/cldk/utils/Log.java @@ -11,7 +11,7 @@ limitations under the License. */ -package com.ibm.northstar.utils; +package com.ibm.cldk.utils; import java.time.LocalDateTime; diff --git a/src/main/java/com/ibm/northstar/utils/ProjectDirectoryScanner.java b/src/main/java/com/ibm/cldk/utils/ProjectDirectoryScanner.java similarity index 98% rename from src/main/java/com/ibm/northstar/utils/ProjectDirectoryScanner.java rename to src/main/java/com/ibm/cldk/utils/ProjectDirectoryScanner.java index e2835f9e..d6178a15 100644 --- a/src/main/java/com/ibm/northstar/utils/ProjectDirectoryScanner.java +++ b/src/main/java/com/ibm/cldk/utils/ProjectDirectoryScanner.java @@ -1,4 +1,4 @@ -package com.ibm.northstar.utils; +package com.ibm.cldk.utils; import java.io.IOException; import java.nio.file.Files; diff --git a/src/main/java/com/ibm/northstar/utils/ScopeUtils.java b/src/main/java/com/ibm/cldk/utils/ScopeUtils.java similarity index 96% rename from src/main/java/com/ibm/northstar/utils/ScopeUtils.java rename to src/main/java/com/ibm/cldk/utils/ScopeUtils.java index 5005630a..fe233e9a 100644 --- a/src/main/java/com/ibm/northstar/utils/ScopeUtils.java +++ b/src/main/java/com/ibm/cldk/utils/ScopeUtils.java @@ -11,7 +11,7 @@ limitations under the License. */ -package com.ibm.northstar.utils; +package com.ibm.cldk.utils; import com.ibm.wala.cast.java.ipa.callgraph.JavaSourceAnalysisScope; import com.ibm.wala.ipa.callgraph.AnalysisScope; @@ -19,14 +19,11 @@ import com.ibm.wala.types.ClassLoaderReference; import com.ibm.wala.util.config.FileOfClasses; import java.io.ByteArrayInputStream; -import java.io.File; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; -import java.sql.Struct; -import java.util.Arrays; import java.util.List; import java.util.Objects; import java.util.UUID; @@ -34,7 +31,7 @@ import org.apache.commons.io.FileUtils; -import static com.ibm.northstar.utils.ProjectDirectoryScanner.jarFilesStream; +import static com.ibm.cldk.utils.ProjectDirectoryScanner.jarFilesStream; public class ScopeUtils { diff --git a/src/test/java/com/ibm/northstar/CodeAnalyzerTest.java b/src/test/java/com/ibm/cldk/CodeAnalyzerTest.java similarity index 79% rename from src/test/java/com/ibm/northstar/CodeAnalyzerTest.java rename to src/test/java/com/ibm/cldk/CodeAnalyzerTest.java index c4ec4e65..9fb695d2 100644 --- a/src/test/java/com/ibm/northstar/CodeAnalyzerTest.java +++ b/src/test/java/com/ibm/cldk/CodeAnalyzerTest.java @@ -1,11 +1,9 @@ -package com.ibm.northstar; +package com.ibm.cldk; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.*; - class CodeAnalyzerTest { @BeforeEach