From 93cbacb32e25a191f5b7fa60af15b261181865ed Mon Sep 17 00:00:00 2001 From: Sijie Date: Thu, 12 Jun 2025 16:07:55 -0700 Subject: [PATCH 1/4] add gha to dependabot.yml --- .github/dependabot.yml | 36 ++++++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index fe381818..6f0521da 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -1,14 +1,26 @@ version: 2 updates: -- package-ecosystem: docker - directory: "/" - schedule: - interval: weekly - time: '11:00' - open-pull-requests-limit: 10 -- package-ecosystem: pip - directory: "/" - schedule: - interval: weekly - time: '11:00' - open-pull-requests-limit: 10 + + # Docker base image updates + - package-ecosystem: docker + directory: "/" + schedule: + interval: weekly + time: "11:00" + open-pull-requests-limit: 10 + + # Python (pip) dependencies + - package-ecosystem: pip + directory: "/" + schedule: + interval: weekly + time: "11:00" + open-pull-requests-limit: 10 + + # GitHub Actions dependencies + - package-ecosystem: "github-actions" + directory: ".github/workflows" + schedule: + interval: weekly + time: "11:00" + open-pull-requests-limit: 10 From bdc172760c29dad472678f41296ef2f7ef9d8a16 Mon Sep 17 00:00:00 2001 From: Sijie Date: Mon, 16 Jun 2025 12:47:01 -0700 Subject: [PATCH 2/4] change schedule.interval to monthly --- .github/dependabot.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 6f0521da..f04d6f91 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -5,22 +5,22 @@ updates: - package-ecosystem: docker directory: "/" schedule: - interval: weekly + interval: monthly time: "11:00" - open-pull-requests-limit: 10 + open-pull-requests-limit: 25 # Python (pip) dependencies - package-ecosystem: pip directory: "/" schedule: - interval: weekly + interval: monthly time: "11:00" - open-pull-requests-limit: 10 + open-pull-requests-limit: 25 # GitHub Actions dependencies - package-ecosystem: "github-actions" directory: ".github/workflows" schedule: - interval: weekly + interval: monthly time: "11:00" - open-pull-requests-limit: 10 + open-pull-requests-limit: 25 From 7bb83b9cc8a40cdd364e969eb2da014edeeae528 Mon Sep 17 00:00:00 2001 From: MrCreosote Date: Wed, 3 Sep 2025 17:05:47 -0700 Subject: [PATCH 3/4] Add JITPack java client build --- .gitattributes | 12 + .gitignore | 7 + Catalog.html | 1 + KIDLspec.css | 65 +++++ Makefile | 17 +- RELEASE_NOTES.md | 3 + build.gradle | 58 ++++ gradle.properties | 5 + gradle/libs.versions.toml | 2 + gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 43764 bytes gradle/wrapper/gradle-wrapper.properties | 7 + gradlew | 251 ++++++++++++++++++ lib/biokbase/catalog/Impl.py | 6 +- lib/biokbase/catalog/version.py | 2 +- .../us/kbase/catalog/CurrentRepoParams.java | 82 ------ .../us/kbase/catalog/GetRawStatsParams.java | 80 ------ .../us/kbase/catalog/HistoryRepoParams.java | 121 --------- lib/java/us/kbase/catalog/Icon.java | 42 --- .../us/kbase/catalog/ListReposParams.java | 63 ----- lib/java/us/kbase/catalog/RepoDetails.java | 228 ---------------- lib/java/us/kbase/catalog/RepoVersion.java | 98 ------- .../us/kbase/catalog/SelectModuleParams.java | 101 ------- .../us/kbase/catalog/SetRepoStateParams.java | 119 --------- settings.gradle | 8 + .../java/us/kbase/catalog/AppClientGroup.java | 0 .../us/kbase/catalog/BasicModuleInfo.java | 0 .../kbase/catalog/BasicModuleVersionInfo.java | 0 .../java/us/kbase/catalog/BuildInfo.java | 0 .../main}/java/us/kbase/catalog/BuildLog.java | 0 .../java/us/kbase/catalog/BuildLogLine.java | 0 .../java/us/kbase/catalog/CatalogClient.java | 2 + .../us/kbase/catalog/ClientGroupConfig.java | 0 .../us/kbase/catalog/ClientGroupFilter.java | 0 .../us/kbase/catalog/CompilationReport.java | 0 .../java/us/kbase/catalog/ExecAggrStats.java | 0 .../us/kbase/catalog/ExecAggrTableParams.java | 0 .../java/us/kbase/catalog/FavoriteCount.java | 0 .../java/us/kbase/catalog/FavoriteItem.java | 0 .../java/us/kbase/catalog/FavoriteUser.java | 0 .../main}/java/us/kbase/catalog/Function.java | 0 .../java/us/kbase/catalog/FunctionPlace.java | 0 .../us/kbase/catalog/GetBuildLogParams.java | 0 .../kbase/catalog/GetClientGroupParams.java | 0 .../kbase/catalog/GetExecAggrStatsParams.java | 0 .../kbase/catalog/GetExecRawStatsParams.java | 0 .../catalog/GetLocalFunctionDetails.java | 0 .../catalog/GetSecureConfigParamsInput.java | 0 .../main}/java/us/kbase/catalog/IOTags.java | 0 .../us/kbase/catalog/ListBuildParams.java | 0 .../us/kbase/catalog/ListFavoriteCounts.java | 0 .../catalog/ListLocalFunctionParams.java | 0 .../us/kbase/catalog/ListModuleParams.java | 0 .../catalog/ListServiceModuleParams.java | 0 .../kbase/catalog/LocalFunctionDetails.java | 0 .../us/kbase/catalog/LocalFunctionInfo.java | 0 .../us/kbase/catalog/LocalFunctionTags.java | 0 .../us/kbase/catalog/LogExecStatsParams.java | 0 .../ModifySecureConfigParamsInput.java | 0 .../java/us/kbase/catalog/ModuleInfo.java | 0 .../java/us/kbase/catalog/ModuleState.java | 0 .../java/us/kbase/catalog/ModuleVersion.java | 0 .../us/kbase/catalog/ModuleVersionInfo.java | 0 .../catalog/ModuleVersionLookupParams.java | 0 .../java/us/kbase/catalog/Parameter.java | 0 .../us/kbase/catalog/RegisterRepoParams.java | 0 .../java/us/kbase/catalog/ReleaseReview.java | 0 .../kbase/catalog/RequestedReleaseInfo.java | 0 .../kbase/catalog/SecureConfigParameter.java | 0 .../us/kbase/catalog/SelectModuleVersion.java | 0 .../catalog/SelectModuleVersionParams.java | 0 .../kbase/catalog/SelectOneLocalFunction.java | 0 .../kbase/catalog/SelectOneModuleParams.java | 0 .../catalog/SetRegistrationStateParams.java | 0 .../main}/java/us/kbase/catalog/SpecFile.java | 0 .../us/kbase/catalog/UpdateGitUrlParams.java | 0 .../us/kbase/catalog/VersionCommitInfo.java | 0 .../java/us/kbase/catalog/VolumeMount.java | 0 .../us/kbase/catalog/VolumeMountConfig.java | 0 .../us/kbase/catalog/VolumeMountFilter.java | 0 79 files changed, 433 insertions(+), 947 deletions(-) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 Catalog.html create mode 100644 KIDLspec.css create mode 100644 build.gradle create mode 100644 gradle.properties create mode 100644 gradle/libs.versions.toml create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100755 gradlew delete mode 100644 lib/java/us/kbase/catalog/CurrentRepoParams.java delete mode 100644 lib/java/us/kbase/catalog/GetRawStatsParams.java delete mode 100644 lib/java/us/kbase/catalog/HistoryRepoParams.java delete mode 100644 lib/java/us/kbase/catalog/Icon.java delete mode 100644 lib/java/us/kbase/catalog/ListReposParams.java delete mode 100644 lib/java/us/kbase/catalog/RepoDetails.java delete mode 100644 lib/java/us/kbase/catalog/RepoVersion.java delete mode 100644 lib/java/us/kbase/catalog/SelectModuleParams.java delete mode 100644 lib/java/us/kbase/catalog/SetRepoStateParams.java create mode 100644 settings.gradle rename {lib => src/main}/java/us/kbase/catalog/AppClientGroup.java (100%) rename {lib => src/main}/java/us/kbase/catalog/BasicModuleInfo.java (100%) rename {lib => src/main}/java/us/kbase/catalog/BasicModuleVersionInfo.java (100%) rename {lib => src/main}/java/us/kbase/catalog/BuildInfo.java (100%) rename {lib => src/main}/java/us/kbase/catalog/BuildLog.java (100%) rename {lib => src/main}/java/us/kbase/catalog/BuildLogLine.java (100%) rename {lib => src/main}/java/us/kbase/catalog/CatalogClient.java (99%) rename {lib => src/main}/java/us/kbase/catalog/ClientGroupConfig.java (100%) rename {lib => src/main}/java/us/kbase/catalog/ClientGroupFilter.java (100%) rename {lib => src/main}/java/us/kbase/catalog/CompilationReport.java (100%) rename {lib => src/main}/java/us/kbase/catalog/ExecAggrStats.java (100%) rename {lib => src/main}/java/us/kbase/catalog/ExecAggrTableParams.java (100%) rename {lib => src/main}/java/us/kbase/catalog/FavoriteCount.java (100%) rename {lib => src/main}/java/us/kbase/catalog/FavoriteItem.java (100%) rename {lib => src/main}/java/us/kbase/catalog/FavoriteUser.java (100%) rename {lib => src/main}/java/us/kbase/catalog/Function.java (100%) rename {lib => src/main}/java/us/kbase/catalog/FunctionPlace.java (100%) rename {lib => src/main}/java/us/kbase/catalog/GetBuildLogParams.java (100%) rename {lib => src/main}/java/us/kbase/catalog/GetClientGroupParams.java (100%) rename {lib => src/main}/java/us/kbase/catalog/GetExecAggrStatsParams.java (100%) rename {lib => src/main}/java/us/kbase/catalog/GetExecRawStatsParams.java (100%) rename {lib => src/main}/java/us/kbase/catalog/GetLocalFunctionDetails.java (100%) rename {lib => src/main}/java/us/kbase/catalog/GetSecureConfigParamsInput.java (100%) rename {lib => src/main}/java/us/kbase/catalog/IOTags.java (100%) rename {lib => src/main}/java/us/kbase/catalog/ListBuildParams.java (100%) rename {lib => src/main}/java/us/kbase/catalog/ListFavoriteCounts.java (100%) rename {lib => src/main}/java/us/kbase/catalog/ListLocalFunctionParams.java (100%) rename {lib => src/main}/java/us/kbase/catalog/ListModuleParams.java (100%) rename {lib => src/main}/java/us/kbase/catalog/ListServiceModuleParams.java (100%) rename {lib => src/main}/java/us/kbase/catalog/LocalFunctionDetails.java (100%) rename {lib => src/main}/java/us/kbase/catalog/LocalFunctionInfo.java (100%) rename {lib => src/main}/java/us/kbase/catalog/LocalFunctionTags.java (100%) rename {lib => src/main}/java/us/kbase/catalog/LogExecStatsParams.java (100%) rename {lib => src/main}/java/us/kbase/catalog/ModifySecureConfigParamsInput.java (100%) rename {lib => src/main}/java/us/kbase/catalog/ModuleInfo.java (100%) rename {lib => src/main}/java/us/kbase/catalog/ModuleState.java (100%) rename {lib => src/main}/java/us/kbase/catalog/ModuleVersion.java (100%) rename {lib => src/main}/java/us/kbase/catalog/ModuleVersionInfo.java (100%) rename {lib => src/main}/java/us/kbase/catalog/ModuleVersionLookupParams.java (100%) rename {lib => src/main}/java/us/kbase/catalog/Parameter.java (100%) rename {lib => src/main}/java/us/kbase/catalog/RegisterRepoParams.java (100%) rename {lib => src/main}/java/us/kbase/catalog/ReleaseReview.java (100%) rename {lib => src/main}/java/us/kbase/catalog/RequestedReleaseInfo.java (100%) rename {lib => src/main}/java/us/kbase/catalog/SecureConfigParameter.java (100%) rename {lib => src/main}/java/us/kbase/catalog/SelectModuleVersion.java (100%) rename {lib => src/main}/java/us/kbase/catalog/SelectModuleVersionParams.java (100%) rename {lib => src/main}/java/us/kbase/catalog/SelectOneLocalFunction.java (100%) rename {lib => src/main}/java/us/kbase/catalog/SelectOneModuleParams.java (100%) rename {lib => src/main}/java/us/kbase/catalog/SetRegistrationStateParams.java (100%) rename {lib => src/main}/java/us/kbase/catalog/SpecFile.java (100%) rename {lib => src/main}/java/us/kbase/catalog/UpdateGitUrlParams.java (100%) rename {lib => src/main}/java/us/kbase/catalog/VersionCommitInfo.java (100%) rename {lib => src/main}/java/us/kbase/catalog/VolumeMount.java (100%) rename {lib => src/main}/java/us/kbase/catalog/VolumeMountConfig.java (100%) rename {lib => src/main}/java/us/kbase/catalog/VolumeMountFilter.java (100%) diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..f91f6460 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,12 @@ +# +# https://help.github.com/articles/dealing-with-line-endings/ +# +# Linux start script should use lf +/gradlew text eol=lf + +# These are Windows script files and should use crlf +*.bat text eol=crlf + +# Binary files should be left untouched +*.jar binary + diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..2c40bade --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +/bin/ + +# Ignore Gradle project-specific cache directory +.gradle + +# Ignore Gradle build output directory +build diff --git a/Catalog.html b/Catalog.html new file mode 100644 index 00000000..36f17388 --- /dev/null +++ b/Catalog.html @@ -0,0 +1 @@ +Catalog
/*
*Service for managing, registering, and building KBase Modules using the KBase SDK.
*/
moduleCatalog{

/*
*@range[0,1]
*/
typedefintboolean;

/*
*Get the version of the deployed catalog service endpoint.
*/
funcdefversion()returns(stringversion)authenticationnone;

/*
*Describes how to find a single module/repository.
*module_name - name of module defined in kbase.yaml file;
*git_url - the url used to register the module
*/
typedefstructure{
stringmodule_name;
stringgit_url;
}
SelectOneModuleParams;

/*
*returns true (1) if the module exists, false (2) otherwise
*/
funcdefis_registered(SelectOneModuleParamsparams)returns(boolean)authenticationnone;

typedefstructure{
stringgit_url;
stringgit_commit_hash;
}
RegisterRepoParams;

/*
*allow/require developer to supply git branch/git commit tag?
*if this is a new module, creates the initial registration with the authenticated user as
*the sole owner, then launches a build to update the dev version of the module. You can check
*the state of this build with the 'get_module_state' method passing in the git_url. If the module
*already exists, then you must be an owner to reregister. That will immediately overwrite your
*dev version of the module (old dev versions are not stored, but you can always reregister an old
*version from the repo) and start a build.
*/
funcdefregister_repo(RegisterRepoParamsparams)returns(stringregistration_id)authenticationrequired;

/*
*immediately updates the beta tag to what is currently in dev, whatever is currently in beta
*is discarded. Will fail if a release request is active and has not been approved/denied
*/
funcdefpush_dev_to_beta(SelectOneModuleParamsparams)returns()authenticationrequired;

/*
*requests a push from beta to release version; must be approved be a kbase Admin
*/
funcdefrequest_release(SelectOneModuleParamsparams)returns()authenticationrequired;

typedefstructure{
stringmodule_name;
stringgit_url;
stringgit_commit_hash;
stringgit_commit_message;
inttimestamp;
list<string>owners;
}
RequestedReleaseInfo;

funcdeflist_requested_releases()returns(list<RequestedReleaseInfo>requested_releases)authenticationnone;

/*
*decision - approved | denied
*review_message -
*/
typedefstructure{
stringmodule_name;
stringgit_url;
stringdecision;
stringreview_message;
}
ReleaseReview;

funcdefreview_release_request(ReleaseReviewreview)returns()authenticationrequired;

/*
*Describes how to filter repositories.
*include_released - optional flag indicated modules that are released are included (default:true)
*include_unreleased - optional flag indicated modules that are not released are included (default:false)
*with_disabled - optional flag indicating disabled repos should be included (default:false).
*include_modules_with_no_name_set - default to 0, if set return modules that were never
*registered successfully (first registration failed, never
*got a module name, but there is a git_url)
*/
typedefstructure{
list<string>owners;
booleaninclude_released;
booleaninclude_unreleased;
booleaninclude_disabled;
booleaninclude_modules_with_no_name_set;
}
ListModuleParams;

typedefstructure{
stringgit_commit_hash;
}
VersionCommitInfo;

/*
*git_url is always returned. Every other field
*may or may not exist depending on what has been registered or if
*certain registrations have failed
*/
typedefstructure{
stringmodule_name;
stringgit_url;
stringlanguage;
booleandynamic_service;
list<string>owners;
list<VersionCommitInfo>released_version_list;
}
BasicModuleInfo;

funcdeflist_basic_module_info(ListModuleParamsparams)returns(list<BasicModuleInfo>info_list)authenticationnone;

/*
*FAVORITES!!
*/
typedefstructure{
stringmodule_name;
stringid;
}
FavoriteItem;

funcdefadd_favorite(FavoriteItemparams)returns()authenticationrequired;

funcdefremove_favorite(FavoriteItemparams)returns()authenticationrequired;

funcdeflist_favorites(stringusername)returns(list<FavoriteItem>favorites)authenticationnone;

typedefstructure{
stringusername;
stringtimestamp;
}
FavoriteUser;

funcdeflist_app_favorites(FavoriteItemitem)returns(list<FavoriteUser>users)authenticationnone;

/*
*if favorite item is given, will return stars just for that item. If a module
*name is given, will return stars for all methods in that module. If none of
*those are given, then will return stars for every method that there is info on
*
*parameters to add:
*list<FavoriteItem> items;
*/
typedefstructure{
list<string>modules;
}
ListFavoriteCounts;

typedefstructure{
stringmodule_name;
stringapp_id;
intcount;
}
FavoriteCount;

funcdeflist_favorite_counts(ListFavoriteCountsparams)returns(list<FavoriteCount>counts)authenticationnone;

typedefstructure{
intstart_line;
intend_line;
}
FunctionPlace;

typedefstructure{
stringtype;
stringcomment;
}
Parameter;

typedefstructure{
stringname;
stringcomment;
list<Parameter>input;
list<Parameter>output;
}
Function;

typedefstructure{
stringfile_name;
stringcontent;
booleanis_main;
}
SpecFile;

typedefstructure{
stringmodule_name;
stringsdk_version;
stringsdk_git_commit;
stringimpl_file_path;
mapping<string,FunctionPlace>function_places;
mapping<string,Function>functions;
list<SpecFile>spec_files;
}
CompilationReport;

/*
*data_folder - optional field representing unique module name (like <module_name> transformed to
*lower cases) used for reference data purposes (see description for data_version field). This
*value will be treated as part of file system path relative to the base that comes from the
*config (currently base is supposed to be "/kb/data" defined in "ref-data-base" parameter).
*data_version - optional field, reflects version of data defined in kbase.yml (see "data-version"
*key). In case this field is set data folder with path "/kb/data/<data_folder>/<data_version>"
*should be initialized by running docker image with "init" target from catalog. And later when
*async methods are run it should be mounted on AWE worker machine into "/data" folder inside
*docker container by execution engine.
*/
typedefstructure{
inttimestamp;
stringregistration_id;
stringversion;
stringgit_commit_hash;
stringgit_commit_message;
booleandynamic_service;
list<string>narrative_method_ids;
list<string>local_function_ids;
stringdocker_img_name;
stringdata_folder;
stringdata_version;
CompilationReportcompilation_report;
}
ModuleVersionInfo;

typedefstructure{
stringmodule_name;
stringgit_url;
stringdescription;
stringlanguage;
list<string>owners;
}
ModuleInfo;

funcdefget_module_info(SelectOneModuleParamsselection)returns(ModuleInfoinfo)authenticationnone;

/*
*only required: module_name or git_url, the rest are optional selectors
*If no selectors given, returns current release version
*version is one of: release | beta | dev
*old release versions can only be retrieved individually by timestamp or git_commit_hash
*
*Note: this method isn't particularly smart or effecient yet, because it pulls the info for a particular
*module first, then searches in code for matches to the relevant query. Instead, this should be
*performed on the database side through queries. Will optimize when this becomes an issue.
*
*In the future, this will be extended so that you can retrieve version info by only
*timestamp, git commit, etc, but the necessary indicies have not been setup yet. In general, we will
*need to add better search capabilities
*/
typedefstructure{
stringmodule_name;
stringgit_url;
inttimestamp;
stringgit_commit_hash;
stringversion;
}
SelectModuleVersionParams;

/*
*DEPRECATED!!! use get_module_version
*/
funcdefget_version_info(SelectModuleVersionParamsparams)returns(ModuleVersionInfoversion)authenticationnone;

funcdeflist_released_module_versions(SelectOneModuleParamsparams)returns(list<ModuleVersionInfo>versions)authenticationnone;

/*
*module_name - the name of the module
*module_description - (optionally returned) html description in KBase YAML of this module
*git_url - the git url of the source for this module
*
*released - 1 if this version has been released, 0 otherwise
*release_tags - list of strings of: 'dev', 'beta', or 'release', or empty list
*this is a list because the same commit version may be the version in multiple release states
*release_timestamp - time in ms since epoch when this module was approved and moved to release, null otherwise
*note that a module was released before v1.0.0, the release timestamp may not have been
*recorded and will default to the registration timestamp
*
*timestamp - time in ms since epoch when the registration for this version was started
*registration_id - id of the last registration for this version, used for fetching registration logs and state
*
*version - validated semantic version number as indicated in the KBase YAML of this version
*semantic versions are unique among released versions of this module
*
*git_commit_hash - the full git commit hash of the source for this module
*git_commit_message - the message attached to this git commit
*
*dynamic_service - 1 if this version is available as a web service, 0 otherwise
*
*narrative_app_ids - list of Narrative App ids registered with this module version
*local_function_ids - list of Local Function ids registered with this module version
*
*docker_img_name - name of the docker image for this module created on registration
*data_folder - name of the data folder used
*
*compilation_report - (optionally returned) summary of the KIDL specification compilation
*/
typedefstructure{
stringmodule_name;
stringmodule_description;
stringgit_url;
booleanreleased;
list<string>release_tags;
inttimestamp;
stringregistration_id;
stringversion;
stringgit_commit_hash;
stringgit_commit_message;
booleandynamic_service;
list<string>narrative_app_ids;
list<string>local_function_ids;
stringdocker_img_name;
stringdata_folder;
stringdata_version;
CompilationReportcompilation_report;
}
ModuleVersion;

/*
*Get a specific module version.
*
*Requires either a module_name or git_url. If both are provided, they both must match.
*
*If no other options are specified, then the latest 'release' version is returned. If
*the module has not been released, then the latest 'beta' or 'dev' version is returned.
*You can check in the returned object if the version has been released (see is_released)
*and what release tags are pointing to this version (see release_tags).
*
*Optionally, a 'version' parameter can be provided that can be either:
*1) release tag: 'dev' | 'beta' | 'release'
*
*2) specific semantic version of a released version (you cannot pull dev/beta or other
*unreleased versions by semantic version)
*- e.g. 2.0.1
*
*3) semantic version requirement specification, see: https://pypi.python.org/pypi/semantic_version/
*which will return the latest released version that matches the criteria. You cannot pull
*dev/beta or other unreleased versions this way.
*- e.g.:
*- '>1.0.0'
*- '>=2.1.1,<3.3.0'
*- '!=0.2.4-alpha,<0.3.0'
*
*4) specific full git commit hash
*
*include_module_description - set to 1 to include the module description in the YAML file of this version;
*default is 0
*include_compilation_report - set to 1 to include the module compilation report, default is 0
*/
typedefstructure{
stringmodule_name;
stringgit_url;
stringversion;
booleaninclude_module_description;
booleaninclude_compilation_report;
}
SelectModuleVersion;

funcdefget_module_version(SelectModuleVersionselection)returns(ModuleVersionversion)authenticationnone;

/*
*Local Function Listing Support
*/
typedefstructure{
list<string>file_types;
list<string>kb_types;
}
IOTags;

typedefstructure{
list<string>categories;
IOTagsinput;
IOTagsoutput;
}
LocalFunctionTags;

/*
*todo: switch release_tag to release_tags
*/
typedefstructure{
stringmodule_name;
stringfunction_id;
stringgit_commit_hash;
stringversion;
list<string>release_tag;
stringname;
stringshort_description;
}
LocalFunctionInfo;

typedefstructure{
stringlong_description;
}
LocalFunctionDetails;

/*
*Allows various ways to filter.
*Release tag = dev/beta/release, default is release
*module_names = only include modules in the list; if empty or not
*provided then include everything
*/
typedefstructure{
stringrelease_tag;
list<string>module_names;
}
ListLocalFunctionParams;

funcdeflist_local_functions(ListLocalFunctionParamsparams)returns(list<LocalFunctionInfo>info_list)authenticationnone;

/*
*release_tag = dev | beta | release, if it doesn't exist and git_commit_hash isn't set, we default to release
*and will not return anything if the function is not released
*/
typedefstructure{
stringmodule_name;
stringfunction_id;
stringrelease_tag;
stringgit_commit_hash;
}
SelectOneLocalFunction;

typedefstructure{
list<SelectOneLocalFunction>functions;
}
GetLocalFunctionDetails;

funcdefget_local_function_details(GetLocalFunctionDetailsparams)returns(list<LocalFunctionDetails>detail_list)authenticationnone;

/*
*DYNAMIC SERVICES SUPPORT Methods
*/
typedefstructure{
stringmodule_name;
stringversion;
stringgit_commit_hash;
stringdocker_img_name;
}
BasicModuleVersionInfo;

/*
*module_name - required for module lookup
*lookup - a lookup string, if empty will get the latest released module
*1) version tag = dev | beta | release
*2) semantic version match identifiier
*not supported yet: 3) exact commit hash
*not supported yet: 4) exact timestamp
*only_service_versions - 1/0, default is 1
*/
typedefstructure{
stringmodule_name;
stringlookup;
booleanonly_service_versions;
}
ModuleVersionLookupParams;

funcdefmodule_version_lookup(ModuleVersionLookupParamsselection)returns(BasicModuleVersionInfo)authenticationnone;

/*
*tag = dev | beta | release
*if tag is not set, all release versions are returned
*/
typedefstructure{
stringtag;
}
ListServiceModuleParams;

funcdeflist_service_modules(ListServiceModuleParamsfilter)returns(list<BasicModuleVersionInfo>service_modules)authenticationnone;

/*
*End Dynamic Services Support Methods
*/
typedefstructure{
stringmodule_name;
stringgit_url;
stringregistration_state;
stringerror_message;
}
SetRegistrationStateParams;

funcdefset_registration_state(SetRegistrationStateParamsparams)returns()authenticationrequired;

/*
*active: True | False,
*release_approval: approved | denied | under_review | not_requested, (all releases require approval)
*review_message: str, (optional)
*registration: complete | error | (build state status),
*error_message: str (optional)
*/
typedefstructure{
booleanactive;
booleanreleased;
stringrelease_approval;
stringreview_message;
stringregistration;
stringerror_message;
}
ModuleState;

funcdefget_module_state(SelectOneModuleParamsparams)returns(ModuleStatestate)authenticationnone;

/*
*must specify skip & limit, or first_n, or last_n. If none given, this gets last 5000 lines
*/
typedefstructure{
stringregistration_id;
intskip;
intlimit;
intfirst_n;
intlast_n;
}
GetBuildLogParams;

typedefstructure{
stringcontent;
booleanerror;
}
BuildLogLine;

typedefstructure{
stringregistration_id;
stringtimestamp;
stringmodule_name_lc;
stringgit_url;
stringerror;
stringregistration;
list<BuildLogLine>log;
}
BuildLog;

funcdefget_build_log(stringregistration_id)returns(string)authenticationnone;

/*
*given the registration_id returned from the register method, you can check the build log with this method
*/
funcdefget_parsed_build_log(GetBuildLogParamsparams)returns(BuildLogbuild_log)authenticationnone;

typedefstructure{
stringtimestamp;
stringregistration_id;
stringregistration;
stringerror_message;
stringmodule_name_lc;
stringgit_url;
}
BuildInfo;

/*
*Always sorted by time, oldest builds are last.
*
*only one of these can be set to true:
*only_running - if true, only show running builds
*only_error - if true, only show builds that ended in an error
*only_complete - if true, only show builds that are complete
*skip - skip these first n records, default 0
*limit - limit result to the most recent n records, default 1000
*
*modules - only include builds from these modules based on names/git_urls
*/
typedefstructure{
booleanonly_runnning;
booleanonly_error;
booleanonly_complete;
intskip;
intlimit;
list<SelectOneModuleParams>modules;
}
ListBuildParams;

funcdeflist_builds(ListBuildParamsparams)returns(list<BuildInfo>builds)authenticationnone;

/*
*all fields are required to make sure you update the right one
*/
typedefstructure{
stringmodule_name;
stringcurrent_git_url;
stringnew_git_url;
}
UpdateGitUrlParams;

/*
*admin method to delete a module, will only work if the module has not been released
*/
funcdefdelete_module(SelectOneModuleParamsparams)returns()authenticationrequired;

/*
*admin method to move the git url for a module, should only be used if the exact same code has migrated to
*a new URL. It should not be used as a way to change ownership, get updates from a new source, or get a new
*module name for an existing git url because old versions are retained and git commits saved will no longer
*be correct.
*/
funcdefmigrate_module_to_new_git_url(UpdateGitUrlParamsparams)returns()authenticationrequired;

/*
*admin methods to turn on/off modules
*/
funcdefset_to_active(SelectOneModuleParamsparams)returns()authenticationrequired;

funcdefset_to_inactive(SelectOneModuleParamsparams)returns()authenticationrequired;

/*
*temporary developer approval, should be moved to more mature user profile service
*/
funcdefis_approved_developer(list<string>usernames)returns(list<boolean>is_approved)authenticationnone;

funcdeflist_approved_developers()returns(list<string>usernames)authenticationrequired;

funcdefapprove_developer(stringusername)returns()authenticationrequired;

funcdefrevoke_developer(stringusername)returns()authenticationrequired;

/*
*user_id - GlobusOnline login of invoker,
*app_module_name - optional module name of registered repo (could be absent of null for
*old fashioned services) where app_id comes from,
*app_id - optional method-spec id without module_name prefix (could be absent or null
*in case original execution was started through API call without app ID defined),
*func_module_name - optional module name of registered repo (could be absent of null for
*old fashioned services) where func_name comes from,
*func_name - name of function in KIDL-spec without module_name prefix,
*git_commit_hash - optional service version (in case of dynamically registered repo),
*creation_time, exec_start_time and finish_time - defined in seconds since Epoch (POSIX),
*is_error - indicates whether execution was finished with error or not.
*/
typedefstructure{
stringuser_id;
stringapp_module_name;
stringapp_id;
stringfunc_module_name;
stringfunc_name;
stringgit_commit_hash;
floatcreation_time;
floatexec_start_time;
floatfinish_time;
booleanis_error;
stringjob_id;
}
LogExecStatsParams;

/*
*Request from Execution Engine for adding statistics about each method run. It could be done
*using catalog admin credentials only.
*/
funcdeflog_exec_stats(LogExecStatsParamsparams)returns()authenticationrequired;

/*
*full_app_ids - list of fully qualified app IDs (including module_name prefix followed by
*slash in case of dynamically registered repo).
*per_week - optional flag switching results to weekly data rather than one row per app for
*all time (default value is false)
*/
typedefstructure{
list<string>full_app_ids;
booleanper_week;
}
GetExecAggrStatsParams;

/*
*full_app_id - optional fully qualified method-spec id including module_name prefix followed
*by slash in case of dynamically registered repo (it could be absent or null in case
*original execution was started through API call without app ID defined),
*time_range - one of supported time ranges (currently it could be either '*' for all time
*or ISO-encoded week like "2016-W01")
*total_queue_time - summarized time difference between exec_start_time and creation_time moments
*defined in seconds since Epoch (POSIX),
*total_exec_time - summarized time difference between finish_time and exec_start_time moments
*defined in seconds since Epoch (POSIX).
*/
typedefstructure{
stringfull_app_id;
stringtime_range;
intnumber_of_calls;
intnumber_of_errors;
floattotal_queue_time;
floattotal_exec_time;
}
ExecAggrStats;

funcdefget_exec_aggr_stats(GetExecAggrStatsParamsparams)returns(list<ExecAggrStats>)authenticationnone;

/*
*Get aggregated usage metrics; available only to Admins.
*/
typedefstructure{
intbegin;
intend;
}
ExecAggrTableParams;

funcdefget_exec_aggr_table(ExecAggrTableParamsparams)returns(UnspecifiedObjecttable)authenticationrequired;

/*
*Get raw usage metrics; available only to Admins.
*/
typedefstructure{
intbegin;
intend;
}
GetExecRawStatsParams;

funcdefget_exec_raw_stats(GetExecRawStatsParamsparams)returns(list<UnspecifiedObject>records)authenticationrequired;

/*
*app_id = full app id; if module name is used it will be case insensitive
*this will overwrite all existing client groups (it won't just push what's on the list)
*If client_groups is empty or set to null, then the client_group mapping will be removed.
*/
typedefstructure{
stringapp_id;
list<string>client_groups;
}
AppClientGroup;

/*
*if app_ids is empty or null, all client groups are returned
*/
typedefstructure{}GetClientGroupParams;

/*
*@deprecatedlist_client_group_configs
*/
funcdefget_client_groups(GetClientGroupParamsparams)returns(list<AppClientGroup>groups)authenticationnone;

typedefstructure{
stringmodule_name;
stringfunction_name;
list<string>client_groups;
}
ClientGroupConfig;

funcdefset_client_group_config(ClientGroupConfigconfig)returns()authenticationrequired;

funcdefremove_client_group_config(ClientGroupConfigconfig)returns()authenticationrequired;

typedefstructure{
stringmodule_name;
stringfunction_name;
}
ClientGroupFilter;

funcdeflist_client_group_configs(ClientGroupFilterfilter)returns(list<ClientGroupConfig>groups)authenticationnone;

typedefstructure{
stringhost_dir;
stringcontainer_dir;
booleanread_only;
}
VolumeMount;

/*
*for a module, function, and client group, set mount configurations
*/
typedefstructure{
stringmodule_name;
stringfunction_name;
stringclient_group;
list<VolumeMount>volume_mounts;
}
VolumeMountConfig;

/*
*must specify all properties of the VolumeMountConfig
*/
funcdefset_volume_mount(VolumeMountConfigconfig)returns()authenticationrequired;

/*
*must specify module_name, function_name, client_group and this method will delete any configured mounts
*/
funcdefremove_volume_mount(VolumeMountConfigconfig)returns()authenticationrequired;

/*
*Parameters for listing VolumeMountConfigs. If nothing is set, everything is
*returned. Otherwise, will return everything that matches all fields set. For
*instance, if only module_name is set, will return everything for that module. If
*they are all set, will return the specific module/app/client group config. Returns
*nothing if no matches are found.
*/
typedefstructure{
stringmodule_name;
stringfunction_name;
stringclient_group;
}
VolumeMountFilter;

funcdeflist_volume_mounts(VolumeMountFilterfilter)returns(list<VolumeMountConfig>volume_mount_configs)authenticationrequired;

/*
*returns true (1) if the user is an admin, false (0) otherwise.
*NOTE: username is now ignored (it checks the token) but retained for back compatibility
*/
funcdefis_admin(stringusername)returns(boolean)authenticationoptional;

/*
*version - optional version (commit hash, tag or semantic one) of module, if not set
*then default "" value is used which means parameter is applied to any version;
*is_password - optional flag meaning to hide this parameter's value in UI.
*/
typedefstructure{
stringmodule_name;
stringversion;
stringparam_name;
booleanis_password;
stringparam_value;
}
SecureConfigParameter;

typedefstructure{}ModifySecureConfigParamsInput;

/*
*Only admins can use this function.
*/
funcdefset_secure_config_params(ModifySecureConfigParamsInputparams)returns()authenticationrequired;

/*
*Only admins can use this function.
*/
funcdefremove_secure_config_params(ModifySecureConfigParamsInputparams)returns()authenticationrequired;

/*
*version - optional version (commit hash, tag or semantic one) of module, if
*not set then default "release" value is used;
*load_all_versions - optional flag indicating that all parameter versions
*should be loaded (version filter is not applied), default value is 0.
*/
typedefstructure{
stringmodule_name;
stringversion;
booleanload_all_versions;
}
GetSecureConfigParamsInput;

/*
*Only admins can use this function.
*/
funcdefget_secure_config_params(GetSecureConfigParamsInputparams)returns(list<SecureConfigParameter>)authenticationrequired;
};

Function Index

add_favorite
approve_developer
delete_module
get_build_log
get_client_groups
get_exec_aggr_stats
get_exec_aggr_table
get_exec_raw_stats
get_local_function_details
get_module_info
get_module_state
get_module_version
get_parsed_build_log
get_secure_config_params
get_version_info
is_admin
is_approved_developer
is_registered
list_app_favorites
list_approved_developers
list_basic_module_info
list_builds
list_client_group_configs
list_favorite_counts
list_favorites
list_local_functions
list_released_module_versions
list_requested_releases
list_service_modules
list_volume_mounts
log_exec_stats
migrate_module_to_new_git_url
module_version_lookup
push_dev_to_beta
register_repo
remove_client_group_config
remove_favorite
remove_secure_config_params
remove_volume_mount
request_release
review_release_request
revoke_developer
set_client_group_config
set_registration_state
set_secure_config_params
set_to_active
set_to_inactive
set_volume_mount
version

Type Index

AppClientGroup
BasicModuleInfo
BasicModuleVersionInfo
boolean
BuildInfo
BuildLog
BuildLogLine
ClientGroupConfig
ClientGroupFilter
CompilationReport
ExecAggrStats
ExecAggrTableParams
FavoriteCount
FavoriteItem
FavoriteUser
Function
FunctionPlace
GetBuildLogParams
GetClientGroupParams
GetExecAggrStatsParams
GetExecRawStatsParams
GetLocalFunctionDetails
GetSecureConfigParamsInput
IOTags
ListBuildParams
ListFavoriteCounts
ListLocalFunctionParams
ListModuleParams
ListServiceModuleParams
LocalFunctionDetails
LocalFunctionInfo
LocalFunctionTags
LogExecStatsParams
ModifySecureConfigParamsInput
ModuleInfo
ModuleState
ModuleVersion
ModuleVersionInfo
ModuleVersionLookupParams
Parameter
RegisterRepoParams
ReleaseReview
RequestedReleaseInfo
SecureConfigParameter
SelectModuleVersion
SelectModuleVersionParams
SelectOneLocalFunction
SelectOneModuleParams
SetRegistrationStateParams
SpecFile
UpdateGitUrlParams
VersionCommitInfo
VolumeMount
VolumeMountConfig
VolumeMountFilter
\ No newline at end of file diff --git a/KIDLspec.css b/KIDLspec.css new file mode 100644 index 00000000..4d2a3e3a --- /dev/null +++ b/KIDLspec.css @@ -0,0 +1,65 @@ +html, body { + height: 100%; +} +html { + display: table; + margin: auto; +} +body { + background-color: white; + color: #000; + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; + font-weight: normal; + font-size: 12px; + margin: 0; + padding: 20px; + display: table-cell; + vertical-align: middle; +} +span.space { + display: inline-block; + width: 7px; +} +span.tab { + display: inline-block; + width: 30px; +} +span.keyword { + font-weight: bold; + color: #008; +} +span.name { + color: #000; !important +} +span.deprecated { + text-decoration: line-through; +} +span.annotation { + color: #303030; +} +span.primitive { + font-weight: bold; + color: #066; +} +div.body { + background-color: #ffffff; + color: #3e4349; + padding: 0 30px; +} +div.comment { + color: #A0A0A0; +} +a { + color: #004b6b; + text-decoration: none; +} +a:hover { + color: #6d4100; + text-decoration: underline; +} +:target { + background-color: #ffa; +} +div.body p, div.body dd, div.body li { + line-height: 1.4em; +} diff --git a/Makefile b/Makefile index 53a2cd5b..ce536ce5 100644 --- a/Makefile +++ b/Makefile @@ -5,7 +5,6 @@ SERVICE_CAPS = Catalog #$(shell perl server_scripts/get_deploy_cfg.pm $(SERVICE_CAPS).port) SERVICE_PORT = 5000 SPEC_FILE = catalog.spec -URL = https://kbase.us/services/catalog/rpc #End of user defined variables @@ -29,18 +28,18 @@ PATH := kb_sdk/bin:$(PATH) compile-kb-module: + kb-sdk compile $(SPEC_FILE) \ + --out . \ + --html kb-sdk compile $(SPEC_FILE) \ --out $(LIB_DIR) \ - --plclname Bio::KBase::$(SERVICE_CAPS)::Client \ - --jsclname javascript/Client \ --pyclname biokbase.$(SERVICE).Client \ - --javasrc java \ - --java \ --pysrvname biokbase.$(SERVICE).Server \ - --pyimplname biokbase.$(SERVICE).Impl; - touch $(LIB_DIR)/biokbase/__init__.py - touch $(LIB_DIR)/biokbase/$(SERVICE)/__init__.py - + --pyimplname biokbase.$(SERVICE).Impl + kb-sdk compile $(SPEC_FILE) \ + --out . \ + --java \ + --javasrc src/main/java # start/stop the service running out of THIS directory build-local-server-control-scripts: diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index b498eeb9..95eb6038 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -1,5 +1,8 @@ # Catalog Service release notes +## v2.3.1 - 9/3/2025 + - Added a JITPack build for the catalog client + ## v2.3.0 - 3/5/2025 - Removed all submodules(jars, kbapi_common, nms) as part of repository clean up. - The MongoDB clients have been updated to the most recent version and the service tested against Mongo 7. diff --git a/build.gradle b/build.gradle new file mode 100644 index 00000000..81035700 --- /dev/null +++ b/build.gradle @@ -0,0 +1,58 @@ +/* + * This file was generated by the Gradle 'init' task. + */ + +plugins { + id 'java' + id 'maven-publish' +} + +group = 'com.github.kbase' + +var VER_AUTH2_CLIENT = "0.5.0" +var VER_JAVA_COMMON = "0.3.0" + +repositories { + mavenCentral() + maven { + name = "JitPack" + url = 'https://jitpack.io' + } +} + +compileJava { + options.release = 11 +} + +java { + withSourcesJar() + withJavadocJar() +} + +javadoc { + options { + // I don't know why this isn't working, but it's not worth spending time on right now + links "https://docs.oracle.com/javase/11/docs/api/" + links "https://javadoc.jitpack.io/com/github/kbase/auth2_client_java/$VER_AUTH2_CLIENT/javadoc/" + links "https://javadoc.jitpack.io/com/github/kbase/java_common/$VER_JAVA_COMMON/javadoc/" + } +} + +publishing { + publications { + maven(MavenPublication) { + from components.java + } + } +} + +dependencies { + + // using older dependencies to not force upgrades on services that might not be able to + // handle them. Need to upgrade the services and then upgrade here + implementation "com.github.kbase:java_common:$VER_JAVA_COMMON" + implementation "com.fasterxml.jackson.core:jackson-databind:2.5.4" + implementation "com.github.kbase:auth2_client_java:$VER_AUTH2_CLIENT" + implementation 'javax.annotation:javax.annotation-api:1.3.2' + +} diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 00000000..377538c9 --- /dev/null +++ b/gradle.properties @@ -0,0 +1,5 @@ +# This file was generated by the Gradle 'init' task. +# https://docs.gradle.org/current/userguide/build_environment.html#sec:gradle_configuration_properties + +org.gradle.configuration-cache=true + diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml new file mode 100644 index 00000000..58ad57ac --- /dev/null +++ b/gradle/libs.versions.toml @@ -0,0 +1,2 @@ +# This file was generated by the Gradle 'init' task. +# https://docs.gradle.org/current/userguide/platforms.html#sub::toml-dependencies-format \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..1b33c55baabb587c669f562ae36f953de2481846 GIT binary patch literal 43764 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 '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH="\\\"\\\"" + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/lib/biokbase/catalog/Impl.py b/lib/biokbase/catalog/Impl.py index 2e55ed75..255e5705 100644 --- a/lib/biokbase/catalog/Impl.py +++ b/lib/biokbase/catalog/Impl.py @@ -21,9 +21,9 @@ class Catalog: # state. A method could easily clobber the state set by another while # the latter method is running. ######################################### noqa - VERSION = "0.0.1" - GIT_URL = "https://github.com/kbase/catalog" - GIT_COMMIT_HASH = "fda05a2962373163e4983dc5187b1c51cd1455b1" + VERSION = "0.1.0" + GIT_URL = "https://github.com/kbase/catalog.git" + GIT_COMMIT_HASH = "bfd28df246cd39404293ea4cf4cd4200950fc900" #BEGIN_CLASS_HEADER #END_CLASS_HEADER diff --git a/lib/biokbase/catalog/version.py b/lib/biokbase/catalog/version.py index 006d3cff..33363d57 100644 --- a/lib/biokbase/catalog/version.py +++ b/lib/biokbase/catalog/version.py @@ -1,2 +1,2 @@ # File that simply defines version information -CATALOG_VERSION = '2.3.0' +CATALOG_VERSION = '2.3.1' diff --git a/lib/java/us/kbase/catalog/CurrentRepoParams.java b/lib/java/us/kbase/catalog/CurrentRepoParams.java deleted file mode 100644 index f433d68e..00000000 --- a/lib/java/us/kbase/catalog/CurrentRepoParams.java +++ /dev/null @@ -1,82 +0,0 @@ - -package us.kbase.catalog; - -import java.util.HashMap; -import java.util.Map; -import javax.annotation.Generated; -import com.fasterxml.jackson.annotation.JsonAnyGetter; -import com.fasterxml.jackson.annotation.JsonAnySetter; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonPropertyOrder; - - -/** - *

Original spec-file type: CurrentRepoParams

- *
- * Describes how to find repository details.
- * module_name - name of module defined in kbase.yaml file;
- * with_disabled - optional flag adding disabled repos (default value is false).
- * 
- * - */ -@JsonInclude(JsonInclude.Include.NON_NULL) -@Generated("com.googlecode.jsonschema2pojo") -@JsonPropertyOrder({ - "module_name", - "with_disabled" -}) -public class CurrentRepoParams { - - @JsonProperty("module_name") - private String moduleName; - @JsonProperty("with_disabled") - private Long withDisabled; - private Map additionalProperties = new HashMap(); - - @JsonProperty("module_name") - public String getModuleName() { - return moduleName; - } - - @JsonProperty("module_name") - public void setModuleName(String moduleName) { - this.moduleName = moduleName; - } - - public CurrentRepoParams withModuleName(String moduleName) { - this.moduleName = moduleName; - return this; - } - - @JsonProperty("with_disabled") - public Long getWithDisabled() { - return withDisabled; - } - - @JsonProperty("with_disabled") - public void setWithDisabled(Long withDisabled) { - this.withDisabled = withDisabled; - } - - public CurrentRepoParams withWithDisabled(Long withDisabled) { - this.withDisabled = withDisabled; - return this; - } - - @JsonAnyGetter - public Map getAdditionalProperties() { - return this.additionalProperties; - } - - @JsonAnySetter - public void setAdditionalProperties(String name, Object value) { - this.additionalProperties.put(name, value); - } - - @Override - public String toString() { - return ((((((("CurrentRepoParams"+" [moduleName=")+ moduleName)+", withDisabled=")+ withDisabled)+", additionalProperties=")+ additionalProperties)+"]"); - } - -} diff --git a/lib/java/us/kbase/catalog/GetRawStatsParams.java b/lib/java/us/kbase/catalog/GetRawStatsParams.java deleted file mode 100644 index 9fd851d1..00000000 --- a/lib/java/us/kbase/catalog/GetRawStatsParams.java +++ /dev/null @@ -1,80 +0,0 @@ - -package us.kbase.catalog; - -import java.util.HashMap; -import java.util.Map; -import javax.annotation.Generated; -import com.fasterxml.jackson.annotation.JsonAnyGetter; -import com.fasterxml.jackson.annotation.JsonAnySetter; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonPropertyOrder; - - -/** - *

Original spec-file type: GetRawStatsParams

- *
- * Get raw usage metrics; available only to Admins.
- * 
- * - */ -@JsonInclude(JsonInclude.Include.NON_NULL) -@Generated("com.googlecode.jsonschema2pojo") -@JsonPropertyOrder({ - "begin", - "end" -}) -public class GetRawStatsParams { - - @JsonProperty("begin") - private Long begin; - @JsonProperty("end") - private Long end; - private Map additionalProperties = new HashMap(); - - @JsonProperty("begin") - public Long getBegin() { - return begin; - } - - @JsonProperty("begin") - public void setBegin(Long begin) { - this.begin = begin; - } - - public GetRawStatsParams withBegin(Long begin) { - this.begin = begin; - return this; - } - - @JsonProperty("end") - public Long getEnd() { - return end; - } - - @JsonProperty("end") - public void setEnd(Long end) { - this.end = end; - } - - public GetRawStatsParams withEnd(Long end) { - this.end = end; - return this; - } - - @JsonAnyGetter - public Map getAdditionalProperties() { - return this.additionalProperties; - } - - @JsonAnySetter - public void setAdditionalProperties(String name, Object value) { - this.additionalProperties.put(name, value); - } - - @Override - public String toString() { - return ((((((("GetRawStatsParams"+" [begin=")+ begin)+", end=")+ end)+", additionalProperties=")+ additionalProperties)+"]"); - } - -} diff --git a/lib/java/us/kbase/catalog/HistoryRepoParams.java b/lib/java/us/kbase/catalog/HistoryRepoParams.java deleted file mode 100644 index 8e63f6fd..00000000 --- a/lib/java/us/kbase/catalog/HistoryRepoParams.java +++ /dev/null @@ -1,121 +0,0 @@ - -package us.kbase.catalog; - -import java.util.HashMap; -import java.util.Map; -import javax.annotation.Generated; -import com.fasterxml.jackson.annotation.JsonAnyGetter; -import com.fasterxml.jackson.annotation.JsonAnySetter; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonPropertyOrder; - - -/** - *

Original spec-file type: HistoryRepoParams

- *
- * Describes how to find repository details (including old versions). In case neither of
- *     version and git_commit_hash is specified last version is returned.
- * module_name - name of module defined in kbase.yaml file;
- * timestamp - optional parameter limiting search by certain version timestamp;
- * git_commit_hash - optional parameter limiting search by certain git commit hash;
- * with_disabled - optional flag adding disabled repos (default value is false).
- * 
- * - */ -@JsonInclude(JsonInclude.Include.NON_NULL) -@Generated("com.googlecode.jsonschema2pojo") -@JsonPropertyOrder({ - "module_name", - "timestamp", - "git_commit_hash", - "include_disabled" -}) -public class HistoryRepoParams { - - @JsonProperty("module_name") - private String moduleName; - @JsonProperty("timestamp") - private Long timestamp; - @JsonProperty("git_commit_hash") - private String gitCommitHash; - @JsonProperty("include_disabled") - private Long includeDisabled; - private Map additionalProperties = new HashMap(); - - @JsonProperty("module_name") - public String getModuleName() { - return moduleName; - } - - @JsonProperty("module_name") - public void setModuleName(String moduleName) { - this.moduleName = moduleName; - } - - public HistoryRepoParams withModuleName(String moduleName) { - this.moduleName = moduleName; - return this; - } - - @JsonProperty("timestamp") - public Long getTimestamp() { - return timestamp; - } - - @JsonProperty("timestamp") - public void setTimestamp(Long timestamp) { - this.timestamp = timestamp; - } - - public HistoryRepoParams withTimestamp(Long timestamp) { - this.timestamp = timestamp; - return this; - } - - @JsonProperty("git_commit_hash") - public String getGitCommitHash() { - return gitCommitHash; - } - - @JsonProperty("git_commit_hash") - public void setGitCommitHash(String gitCommitHash) { - this.gitCommitHash = gitCommitHash; - } - - public HistoryRepoParams withGitCommitHash(String gitCommitHash) { - this.gitCommitHash = gitCommitHash; - return this; - } - - @JsonProperty("include_disabled") - public Long getIncludeDisabled() { - return includeDisabled; - } - - @JsonProperty("include_disabled") - public void setIncludeDisabled(Long includeDisabled) { - this.includeDisabled = includeDisabled; - } - - public HistoryRepoParams withIncludeDisabled(Long includeDisabled) { - this.includeDisabled = includeDisabled; - return this; - } - - @JsonAnyGetter - public Map getAdditionalProperties() { - return this.additionalProperties; - } - - @JsonAnySetter - public void setAdditionalProperties(String name, Object value) { - this.additionalProperties.put(name, value); - } - - @Override - public String toString() { - return ((((((((((("HistoryRepoParams"+" [moduleName=")+ moduleName)+", timestamp=")+ timestamp)+", gitCommitHash=")+ gitCommitHash)+", includeDisabled=")+ includeDisabled)+", additionalProperties=")+ additionalProperties)+"]"); - } - -} diff --git a/lib/java/us/kbase/catalog/Icon.java b/lib/java/us/kbase/catalog/Icon.java deleted file mode 100644 index b08419ce..00000000 --- a/lib/java/us/kbase/catalog/Icon.java +++ /dev/null @@ -1,42 +0,0 @@ - -package us.kbase.catalog; - -import java.util.HashMap; -import java.util.Map; -import javax.annotation.Generated; -import com.fasterxml.jackson.annotation.JsonAnyGetter; -import com.fasterxml.jackson.annotation.JsonAnySetter; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonPropertyOrder; - - -/** - *

Original spec-file type: Icon

- * - * - */ -@JsonInclude(JsonInclude.Include.NON_NULL) -@Generated("com.googlecode.jsonschema2pojo") -@JsonPropertyOrder({ - -}) -public class Icon { - - private Map additionalProperties = new HashMap(); - - @JsonAnyGetter - public Map getAdditionalProperties() { - return this.additionalProperties; - } - - @JsonAnySetter - public void setAdditionalProperties(String name, Object value) { - this.additionalProperties.put(name, value); - } - - @Override - public String toString() { - return ((("Icon"+" [additionalProperties=")+ additionalProperties)+"]"); - } - -} diff --git a/lib/java/us/kbase/catalog/ListReposParams.java b/lib/java/us/kbase/catalog/ListReposParams.java deleted file mode 100644 index c492e89c..00000000 --- a/lib/java/us/kbase/catalog/ListReposParams.java +++ /dev/null @@ -1,63 +0,0 @@ - -package us.kbase.catalog; - -import java.util.HashMap; -import java.util.Map; -import javax.annotation.Generated; -import com.fasterxml.jackson.annotation.JsonAnyGetter; -import com.fasterxml.jackson.annotation.JsonAnySetter; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonPropertyOrder; - - -/** - *

Original spec-file type: ListReposParams

- *
- * Describes how to filter repositories.
- * with_disabled - optional flag adding disabled repos (default value is false).
- * 
- * - */ -@JsonInclude(JsonInclude.Include.NON_NULL) -@Generated("com.googlecode.jsonschema2pojo") -@JsonPropertyOrder({ - "with_disabled" -}) -public class ListReposParams { - - @JsonProperty("with_disabled") - private Long withDisabled; - private Map additionalProperties = new HashMap(); - - @JsonProperty("with_disabled") - public Long getWithDisabled() { - return withDisabled; - } - - @JsonProperty("with_disabled") - public void setWithDisabled(Long withDisabled) { - this.withDisabled = withDisabled; - } - - public ListReposParams withWithDisabled(Long withDisabled) { - this.withDisabled = withDisabled; - return this; - } - - @JsonAnyGetter - public Map getAdditionalProperties() { - return this.additionalProperties; - } - - @JsonAnySetter - public void setAdditionalProperties(String name, Object value) { - this.additionalProperties.put(name, value); - } - - @Override - public String toString() { - return ((((("ListReposParams"+" [withDisabled=")+ withDisabled)+", additionalProperties=")+ additionalProperties)+"]"); - } - -} diff --git a/lib/java/us/kbase/catalog/RepoDetails.java b/lib/java/us/kbase/catalog/RepoDetails.java deleted file mode 100644 index 76bb9032..00000000 --- a/lib/java/us/kbase/catalog/RepoDetails.java +++ /dev/null @@ -1,228 +0,0 @@ - -package us.kbase.catalog; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import javax.annotation.Generated; -import com.fasterxml.jackson.annotation.JsonAnyGetter; -import com.fasterxml.jackson.annotation.JsonAnySetter; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonPropertyOrder; - - -/** - *

Original spec-file type: RepoDetails

- *
- * method_ids - list of method ids (each id is fully qualified, i.e. contains module
- *     name prefix followed by slash);
- * widget_ids - list of widget ids (each id is name of JavaScript file stored in
- *     repo's 'ui/widgets' folder).
- * 
- * - */ -@JsonInclude(JsonInclude.Include.NON_NULL) -@Generated("com.googlecode.jsonschema2pojo") -@JsonPropertyOrder({ - "module_name", - "git_url", - "git_commit_hash", - "version", - "module_description", - "service_language", - "owners", - "readme", - "method_ids", - "widget_ids" -}) -public class RepoDetails { - - @JsonProperty("module_name") - private java.lang.String moduleName; - @JsonProperty("git_url") - private java.lang.String gitUrl; - @JsonProperty("git_commit_hash") - private java.lang.String gitCommitHash; - @JsonProperty("version") - private java.lang.String version; - @JsonProperty("module_description") - private java.lang.String moduleDescription; - @JsonProperty("service_language") - private java.lang.String serviceLanguage; - @JsonProperty("owners") - private List owners; - @JsonProperty("readme") - private java.lang.String readme; - @JsonProperty("method_ids") - private List methodIds; - @JsonProperty("widget_ids") - private List widgetIds; - private Map additionalProperties = new HashMap(); - - @JsonProperty("module_name") - public java.lang.String getModuleName() { - return moduleName; - } - - @JsonProperty("module_name") - public void setModuleName(java.lang.String moduleName) { - this.moduleName = moduleName; - } - - public RepoDetails withModuleName(java.lang.String moduleName) { - this.moduleName = moduleName; - return this; - } - - @JsonProperty("git_url") - public java.lang.String getGitUrl() { - return gitUrl; - } - - @JsonProperty("git_url") - public void setGitUrl(java.lang.String gitUrl) { - this.gitUrl = gitUrl; - } - - public RepoDetails withGitUrl(java.lang.String gitUrl) { - this.gitUrl = gitUrl; - return this; - } - - @JsonProperty("git_commit_hash") - public java.lang.String getGitCommitHash() { - return gitCommitHash; - } - - @JsonProperty("git_commit_hash") - public void setGitCommitHash(java.lang.String gitCommitHash) { - this.gitCommitHash = gitCommitHash; - } - - public RepoDetails withGitCommitHash(java.lang.String gitCommitHash) { - this.gitCommitHash = gitCommitHash; - return this; - } - - @JsonProperty("version") - public java.lang.String getVersion() { - return version; - } - - @JsonProperty("version") - public void setVersion(java.lang.String version) { - this.version = version; - } - - public RepoDetails withVersion(java.lang.String version) { - this.version = version; - return this; - } - - @JsonProperty("module_description") - public java.lang.String getModuleDescription() { - return moduleDescription; - } - - @JsonProperty("module_description") - public void setModuleDescription(java.lang.String moduleDescription) { - this.moduleDescription = moduleDescription; - } - - public RepoDetails withModuleDescription(java.lang.String moduleDescription) { - this.moduleDescription = moduleDescription; - return this; - } - - @JsonProperty("service_language") - public java.lang.String getServiceLanguage() { - return serviceLanguage; - } - - @JsonProperty("service_language") - public void setServiceLanguage(java.lang.String serviceLanguage) { - this.serviceLanguage = serviceLanguage; - } - - public RepoDetails withServiceLanguage(java.lang.String serviceLanguage) { - this.serviceLanguage = serviceLanguage; - return this; - } - - @JsonProperty("owners") - public List getOwners() { - return owners; - } - - @JsonProperty("owners") - public void setOwners(List owners) { - this.owners = owners; - } - - public RepoDetails withOwners(List owners) { - this.owners = owners; - return this; - } - - @JsonProperty("readme") - public java.lang.String getReadme() { - return readme; - } - - @JsonProperty("readme") - public void setReadme(java.lang.String readme) { - this.readme = readme; - } - - public RepoDetails withReadme(java.lang.String readme) { - this.readme = readme; - return this; - } - - @JsonProperty("method_ids") - public List getMethodIds() { - return methodIds; - } - - @JsonProperty("method_ids") - public void setMethodIds(List methodIds) { - this.methodIds = methodIds; - } - - public RepoDetails withMethodIds(List methodIds) { - this.methodIds = methodIds; - return this; - } - - @JsonProperty("widget_ids") - public List getWidgetIds() { - return widgetIds; - } - - @JsonProperty("widget_ids") - public void setWidgetIds(List widgetIds) { - this.widgetIds = widgetIds; - } - - public RepoDetails withWidgetIds(List widgetIds) { - this.widgetIds = widgetIds; - return this; - } - - @JsonAnyGetter - public Map getAdditionalProperties() { - return this.additionalProperties; - } - - @JsonAnySetter - public void setAdditionalProperties(java.lang.String name, Object value) { - this.additionalProperties.put(name, value); - } - - @Override - public java.lang.String toString() { - return ((((((((((((((((((((((("RepoDetails"+" [moduleName=")+ moduleName)+", gitUrl=")+ gitUrl)+", gitCommitHash=")+ gitCommitHash)+", version=")+ version)+", moduleDescription=")+ moduleDescription)+", serviceLanguage=")+ serviceLanguage)+", owners=")+ owners)+", readme=")+ readme)+", methodIds=")+ methodIds)+", widgetIds=")+ widgetIds)+", additionalProperties=")+ additionalProperties)+"]"); - } - -} diff --git a/lib/java/us/kbase/catalog/RepoVersion.java b/lib/java/us/kbase/catalog/RepoVersion.java deleted file mode 100644 index 9f1ddd14..00000000 --- a/lib/java/us/kbase/catalog/RepoVersion.java +++ /dev/null @@ -1,98 +0,0 @@ - -package us.kbase.catalog; - -import java.util.HashMap; -import java.util.Map; -import javax.annotation.Generated; -import com.fasterxml.jackson.annotation.JsonAnyGetter; -import com.fasterxml.jackson.annotation.JsonAnySetter; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonPropertyOrder; - - -/** - *

Original spec-file type: RepoVersion

- *
- * timestamp will be epoch time
- * 
- * - */ -@JsonInclude(JsonInclude.Include.NON_NULL) -@Generated("com.googlecode.jsonschema2pojo") -@JsonPropertyOrder({ - "timestamp", - "git_commit_hash", - "include_disabled" -}) -public class RepoVersion { - - @JsonProperty("timestamp") - private Long timestamp; - @JsonProperty("git_commit_hash") - private String gitCommitHash; - @JsonProperty("include_disabled") - private Long includeDisabled; - private Map additionalProperties = new HashMap(); - - @JsonProperty("timestamp") - public Long getTimestamp() { - return timestamp; - } - - @JsonProperty("timestamp") - public void setTimestamp(Long timestamp) { - this.timestamp = timestamp; - } - - public RepoVersion withTimestamp(Long timestamp) { - this.timestamp = timestamp; - return this; - } - - @JsonProperty("git_commit_hash") - public String getGitCommitHash() { - return gitCommitHash; - } - - @JsonProperty("git_commit_hash") - public void setGitCommitHash(String gitCommitHash) { - this.gitCommitHash = gitCommitHash; - } - - public RepoVersion withGitCommitHash(String gitCommitHash) { - this.gitCommitHash = gitCommitHash; - return this; - } - - @JsonProperty("include_disabled") - public Long getIncludeDisabled() { - return includeDisabled; - } - - @JsonProperty("include_disabled") - public void setIncludeDisabled(Long includeDisabled) { - this.includeDisabled = includeDisabled; - } - - public RepoVersion withIncludeDisabled(Long includeDisabled) { - this.includeDisabled = includeDisabled; - return this; - } - - @JsonAnyGetter - public Map getAdditionalProperties() { - return this.additionalProperties; - } - - @JsonAnySetter - public void setAdditionalProperties(String name, Object value) { - this.additionalProperties.put(name, value); - } - - @Override - public String toString() { - return ((((((((("RepoVersion"+" [timestamp=")+ timestamp)+", gitCommitHash=")+ gitCommitHash)+", includeDisabled=")+ includeDisabled)+", additionalProperties=")+ additionalProperties)+"]"); - } - -} diff --git a/lib/java/us/kbase/catalog/SelectModuleParams.java b/lib/java/us/kbase/catalog/SelectModuleParams.java deleted file mode 100644 index f7f59a67..00000000 --- a/lib/java/us/kbase/catalog/SelectModuleParams.java +++ /dev/null @@ -1,101 +0,0 @@ - -package us.kbase.catalog; - -import java.util.HashMap; -import java.util.Map; -import javax.annotation.Generated; -import com.fasterxml.jackson.annotation.JsonAnyGetter; -import com.fasterxml.jackson.annotation.JsonAnySetter; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonPropertyOrder; - - -/** - *

Original spec-file type: SelectModuleParams

- *
- * Describes how to find module/repository details.
- * module_name - name of module defined in kbase.yaml file;
- * git_url - the url used to register the module
- * include_disabled - optional flag, set to true to include disabled repos
- * 
- * - */ -@JsonInclude(JsonInclude.Include.NON_NULL) -@Generated("com.googlecode.jsonschema2pojo") -@JsonPropertyOrder({ - "module_name", - "git_url", - "include_disabled" -}) -public class SelectModuleParams { - - @JsonProperty("module_name") - private String moduleName; - @JsonProperty("git_url") - private String gitUrl; - @JsonProperty("include_disabled") - private Long includeDisabled; - private Map additionalProperties = new HashMap(); - - @JsonProperty("module_name") - public String getModuleName() { - return moduleName; - } - - @JsonProperty("module_name") - public void setModuleName(String moduleName) { - this.moduleName = moduleName; - } - - public SelectModuleParams withModuleName(String moduleName) { - this.moduleName = moduleName; - return this; - } - - @JsonProperty("git_url") - public String getGitUrl() { - return gitUrl; - } - - @JsonProperty("git_url") - public void setGitUrl(String gitUrl) { - this.gitUrl = gitUrl; - } - - public SelectModuleParams withGitUrl(String gitUrl) { - this.gitUrl = gitUrl; - return this; - } - - @JsonProperty("include_disabled") - public Long getIncludeDisabled() { - return includeDisabled; - } - - @JsonProperty("include_disabled") - public void setIncludeDisabled(Long includeDisabled) { - this.includeDisabled = includeDisabled; - } - - public SelectModuleParams withIncludeDisabled(Long includeDisabled) { - this.includeDisabled = includeDisabled; - return this; - } - - @JsonAnyGetter - public Map getAdditionalProperties() { - return this.additionalProperties; - } - - @JsonAnySetter - public void setAdditionalProperties(String name, Object value) { - this.additionalProperties.put(name, value); - } - - @Override - public String toString() { - return ((((((((("SelectModuleParams"+" [moduleName=")+ moduleName)+", gitUrl=")+ gitUrl)+", includeDisabled=")+ includeDisabled)+", additionalProperties=")+ additionalProperties)+"]"); - } - -} diff --git a/lib/java/us/kbase/catalog/SetRepoStateParams.java b/lib/java/us/kbase/catalog/SetRepoStateParams.java deleted file mode 100644 index 38a0113a..00000000 --- a/lib/java/us/kbase/catalog/SetRepoStateParams.java +++ /dev/null @@ -1,119 +0,0 @@ - -package us.kbase.catalog; - -import java.util.HashMap; -import java.util.Map; -import javax.annotation.Generated; -import com.fasterxml.jackson.annotation.JsonAnyGetter; -import com.fasterxml.jackson.annotation.JsonAnySetter; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonPropertyOrder; - - -/** - *

Original spec-file type: SetRepoStateParams

- *
- * Describes how to find repository details.
- * module_name - name of module defined in kbase.yaml file;
- * multiple state fields? (approvalState, buildState, versionState)
- * state - one of 'pending', 'ready', 'building', 'testing', 'disabled'.
- * 
- * - */ -@JsonInclude(JsonInclude.Include.NON_NULL) -@Generated("com.googlecode.jsonschema2pojo") -@JsonPropertyOrder({ - "module_name", - "github_repo", - "registration_state", - "error_message" -}) -public class SetRepoStateParams { - - @JsonProperty("module_name") - private String moduleName; - @JsonProperty("github_repo") - private String githubRepo; - @JsonProperty("registration_state") - private String registrationState; - @JsonProperty("error_message") - private String errorMessage; - private Map additionalProperties = new HashMap(); - - @JsonProperty("module_name") - public String getModuleName() { - return moduleName; - } - - @JsonProperty("module_name") - public void setModuleName(String moduleName) { - this.moduleName = moduleName; - } - - public SetRepoStateParams withModuleName(String moduleName) { - this.moduleName = moduleName; - return this; - } - - @JsonProperty("github_repo") - public String getGithubRepo() { - return githubRepo; - } - - @JsonProperty("github_repo") - public void setGithubRepo(String githubRepo) { - this.githubRepo = githubRepo; - } - - public SetRepoStateParams withGithubRepo(String githubRepo) { - this.githubRepo = githubRepo; - return this; - } - - @JsonProperty("registration_state") - public String getRegistrationState() { - return registrationState; - } - - @JsonProperty("registration_state") - public void setRegistrationState(String registrationState) { - this.registrationState = registrationState; - } - - public SetRepoStateParams withRegistrationState(String registrationState) { - this.registrationState = registrationState; - return this; - } - - @JsonProperty("error_message") - public String getErrorMessage() { - return errorMessage; - } - - @JsonProperty("error_message") - public void setErrorMessage(String errorMessage) { - this.errorMessage = errorMessage; - } - - public SetRepoStateParams withErrorMessage(String errorMessage) { - this.errorMessage = errorMessage; - return this; - } - - @JsonAnyGetter - public Map getAdditionalProperties() { - return this.additionalProperties; - } - - @JsonAnySetter - public void setAdditionalProperties(String name, Object value) { - this.additionalProperties.put(name, value); - } - - @Override - public String toString() { - return ((((((((((("SetRepoStateParams"+" [moduleName=")+ moduleName)+", githubRepo=")+ githubRepo)+", registrationState=")+ registrationState)+", errorMessage=")+ errorMessage)+", additionalProperties=")+ additionalProperties)+"]"); - } - -} diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 00000000..1d01a90a --- /dev/null +++ b/settings.gradle @@ -0,0 +1,8 @@ +/* + * This file was generated by the Gradle 'init' task. + * + * The settings file is used to specify which projects to include in your build. + * For more detailed information on multi-project builds, please refer to https://docs.gradle.org/8.14.3/userguide/multi_project_builds.html in the Gradle documentation. + */ + +rootProject.name = 'catalog' diff --git a/lib/java/us/kbase/catalog/AppClientGroup.java b/src/main/java/us/kbase/catalog/AppClientGroup.java similarity index 100% rename from lib/java/us/kbase/catalog/AppClientGroup.java rename to src/main/java/us/kbase/catalog/AppClientGroup.java diff --git a/lib/java/us/kbase/catalog/BasicModuleInfo.java b/src/main/java/us/kbase/catalog/BasicModuleInfo.java similarity index 100% rename from lib/java/us/kbase/catalog/BasicModuleInfo.java rename to src/main/java/us/kbase/catalog/BasicModuleInfo.java diff --git a/lib/java/us/kbase/catalog/BasicModuleVersionInfo.java b/src/main/java/us/kbase/catalog/BasicModuleVersionInfo.java similarity index 100% rename from lib/java/us/kbase/catalog/BasicModuleVersionInfo.java rename to src/main/java/us/kbase/catalog/BasicModuleVersionInfo.java diff --git a/lib/java/us/kbase/catalog/BuildInfo.java b/src/main/java/us/kbase/catalog/BuildInfo.java similarity index 100% rename from lib/java/us/kbase/catalog/BuildInfo.java rename to src/main/java/us/kbase/catalog/BuildInfo.java diff --git a/lib/java/us/kbase/catalog/BuildLog.java b/src/main/java/us/kbase/catalog/BuildLog.java similarity index 100% rename from lib/java/us/kbase/catalog/BuildLog.java rename to src/main/java/us/kbase/catalog/BuildLog.java diff --git a/lib/java/us/kbase/catalog/BuildLogLine.java b/src/main/java/us/kbase/catalog/BuildLogLine.java similarity index 100% rename from lib/java/us/kbase/catalog/BuildLogLine.java rename to src/main/java/us/kbase/catalog/BuildLogLine.java diff --git a/lib/java/us/kbase/catalog/CatalogClient.java b/src/main/java/us/kbase/catalog/CatalogClient.java similarity index 99% rename from lib/java/us/kbase/catalog/CatalogClient.java rename to src/main/java/us/kbase/catalog/CatalogClient.java index a5e6505e..8b44ec37 100644 --- a/lib/java/us/kbase/catalog/CatalogClient.java +++ b/src/main/java/us/kbase/catalog/CatalogClient.java @@ -101,6 +101,7 @@ public boolean isInsecureHttpConnectionAllowed() { /** Deprecated. Use isInsecureHttpConnectionAllowed(). * @deprecated */ + @Deprecated public boolean isAuthAllowedForHttp() { return caller.isAuthAllowedForHttp(); } @@ -116,6 +117,7 @@ public void setIsInsecureHttpConnectionAllowed(boolean allowed) { /** Deprecated. Use setIsInsecureHttpConnectionAllowed(). * @deprecated */ + @Deprecated public void setAuthAllowedForHttp(boolean isAuthAllowedForHttp) { caller.setAuthAllowedForHttp(isAuthAllowedForHttp); } diff --git a/lib/java/us/kbase/catalog/ClientGroupConfig.java b/src/main/java/us/kbase/catalog/ClientGroupConfig.java similarity index 100% rename from lib/java/us/kbase/catalog/ClientGroupConfig.java rename to src/main/java/us/kbase/catalog/ClientGroupConfig.java diff --git a/lib/java/us/kbase/catalog/ClientGroupFilter.java b/src/main/java/us/kbase/catalog/ClientGroupFilter.java similarity index 100% rename from lib/java/us/kbase/catalog/ClientGroupFilter.java rename to src/main/java/us/kbase/catalog/ClientGroupFilter.java diff --git a/lib/java/us/kbase/catalog/CompilationReport.java b/src/main/java/us/kbase/catalog/CompilationReport.java similarity index 100% rename from lib/java/us/kbase/catalog/CompilationReport.java rename to src/main/java/us/kbase/catalog/CompilationReport.java diff --git a/lib/java/us/kbase/catalog/ExecAggrStats.java b/src/main/java/us/kbase/catalog/ExecAggrStats.java similarity index 100% rename from lib/java/us/kbase/catalog/ExecAggrStats.java rename to src/main/java/us/kbase/catalog/ExecAggrStats.java diff --git a/lib/java/us/kbase/catalog/ExecAggrTableParams.java b/src/main/java/us/kbase/catalog/ExecAggrTableParams.java similarity index 100% rename from lib/java/us/kbase/catalog/ExecAggrTableParams.java rename to src/main/java/us/kbase/catalog/ExecAggrTableParams.java diff --git a/lib/java/us/kbase/catalog/FavoriteCount.java b/src/main/java/us/kbase/catalog/FavoriteCount.java similarity index 100% rename from lib/java/us/kbase/catalog/FavoriteCount.java rename to src/main/java/us/kbase/catalog/FavoriteCount.java diff --git a/lib/java/us/kbase/catalog/FavoriteItem.java b/src/main/java/us/kbase/catalog/FavoriteItem.java similarity index 100% rename from lib/java/us/kbase/catalog/FavoriteItem.java rename to src/main/java/us/kbase/catalog/FavoriteItem.java diff --git a/lib/java/us/kbase/catalog/FavoriteUser.java b/src/main/java/us/kbase/catalog/FavoriteUser.java similarity index 100% rename from lib/java/us/kbase/catalog/FavoriteUser.java rename to src/main/java/us/kbase/catalog/FavoriteUser.java diff --git a/lib/java/us/kbase/catalog/Function.java b/src/main/java/us/kbase/catalog/Function.java similarity index 100% rename from lib/java/us/kbase/catalog/Function.java rename to src/main/java/us/kbase/catalog/Function.java diff --git a/lib/java/us/kbase/catalog/FunctionPlace.java b/src/main/java/us/kbase/catalog/FunctionPlace.java similarity index 100% rename from lib/java/us/kbase/catalog/FunctionPlace.java rename to src/main/java/us/kbase/catalog/FunctionPlace.java diff --git a/lib/java/us/kbase/catalog/GetBuildLogParams.java b/src/main/java/us/kbase/catalog/GetBuildLogParams.java similarity index 100% rename from lib/java/us/kbase/catalog/GetBuildLogParams.java rename to src/main/java/us/kbase/catalog/GetBuildLogParams.java diff --git a/lib/java/us/kbase/catalog/GetClientGroupParams.java b/src/main/java/us/kbase/catalog/GetClientGroupParams.java similarity index 100% rename from lib/java/us/kbase/catalog/GetClientGroupParams.java rename to src/main/java/us/kbase/catalog/GetClientGroupParams.java diff --git a/lib/java/us/kbase/catalog/GetExecAggrStatsParams.java b/src/main/java/us/kbase/catalog/GetExecAggrStatsParams.java similarity index 100% rename from lib/java/us/kbase/catalog/GetExecAggrStatsParams.java rename to src/main/java/us/kbase/catalog/GetExecAggrStatsParams.java diff --git a/lib/java/us/kbase/catalog/GetExecRawStatsParams.java b/src/main/java/us/kbase/catalog/GetExecRawStatsParams.java similarity index 100% rename from lib/java/us/kbase/catalog/GetExecRawStatsParams.java rename to src/main/java/us/kbase/catalog/GetExecRawStatsParams.java diff --git a/lib/java/us/kbase/catalog/GetLocalFunctionDetails.java b/src/main/java/us/kbase/catalog/GetLocalFunctionDetails.java similarity index 100% rename from lib/java/us/kbase/catalog/GetLocalFunctionDetails.java rename to src/main/java/us/kbase/catalog/GetLocalFunctionDetails.java diff --git a/lib/java/us/kbase/catalog/GetSecureConfigParamsInput.java b/src/main/java/us/kbase/catalog/GetSecureConfigParamsInput.java similarity index 100% rename from lib/java/us/kbase/catalog/GetSecureConfigParamsInput.java rename to src/main/java/us/kbase/catalog/GetSecureConfigParamsInput.java diff --git a/lib/java/us/kbase/catalog/IOTags.java b/src/main/java/us/kbase/catalog/IOTags.java similarity index 100% rename from lib/java/us/kbase/catalog/IOTags.java rename to src/main/java/us/kbase/catalog/IOTags.java diff --git a/lib/java/us/kbase/catalog/ListBuildParams.java b/src/main/java/us/kbase/catalog/ListBuildParams.java similarity index 100% rename from lib/java/us/kbase/catalog/ListBuildParams.java rename to src/main/java/us/kbase/catalog/ListBuildParams.java diff --git a/lib/java/us/kbase/catalog/ListFavoriteCounts.java b/src/main/java/us/kbase/catalog/ListFavoriteCounts.java similarity index 100% rename from lib/java/us/kbase/catalog/ListFavoriteCounts.java rename to src/main/java/us/kbase/catalog/ListFavoriteCounts.java diff --git a/lib/java/us/kbase/catalog/ListLocalFunctionParams.java b/src/main/java/us/kbase/catalog/ListLocalFunctionParams.java similarity index 100% rename from lib/java/us/kbase/catalog/ListLocalFunctionParams.java rename to src/main/java/us/kbase/catalog/ListLocalFunctionParams.java diff --git a/lib/java/us/kbase/catalog/ListModuleParams.java b/src/main/java/us/kbase/catalog/ListModuleParams.java similarity index 100% rename from lib/java/us/kbase/catalog/ListModuleParams.java rename to src/main/java/us/kbase/catalog/ListModuleParams.java diff --git a/lib/java/us/kbase/catalog/ListServiceModuleParams.java b/src/main/java/us/kbase/catalog/ListServiceModuleParams.java similarity index 100% rename from lib/java/us/kbase/catalog/ListServiceModuleParams.java rename to src/main/java/us/kbase/catalog/ListServiceModuleParams.java diff --git a/lib/java/us/kbase/catalog/LocalFunctionDetails.java b/src/main/java/us/kbase/catalog/LocalFunctionDetails.java similarity index 100% rename from lib/java/us/kbase/catalog/LocalFunctionDetails.java rename to src/main/java/us/kbase/catalog/LocalFunctionDetails.java diff --git a/lib/java/us/kbase/catalog/LocalFunctionInfo.java b/src/main/java/us/kbase/catalog/LocalFunctionInfo.java similarity index 100% rename from lib/java/us/kbase/catalog/LocalFunctionInfo.java rename to src/main/java/us/kbase/catalog/LocalFunctionInfo.java diff --git a/lib/java/us/kbase/catalog/LocalFunctionTags.java b/src/main/java/us/kbase/catalog/LocalFunctionTags.java similarity index 100% rename from lib/java/us/kbase/catalog/LocalFunctionTags.java rename to src/main/java/us/kbase/catalog/LocalFunctionTags.java diff --git a/lib/java/us/kbase/catalog/LogExecStatsParams.java b/src/main/java/us/kbase/catalog/LogExecStatsParams.java similarity index 100% rename from lib/java/us/kbase/catalog/LogExecStatsParams.java rename to src/main/java/us/kbase/catalog/LogExecStatsParams.java diff --git a/lib/java/us/kbase/catalog/ModifySecureConfigParamsInput.java b/src/main/java/us/kbase/catalog/ModifySecureConfigParamsInput.java similarity index 100% rename from lib/java/us/kbase/catalog/ModifySecureConfigParamsInput.java rename to src/main/java/us/kbase/catalog/ModifySecureConfigParamsInput.java diff --git a/lib/java/us/kbase/catalog/ModuleInfo.java b/src/main/java/us/kbase/catalog/ModuleInfo.java similarity index 100% rename from lib/java/us/kbase/catalog/ModuleInfo.java rename to src/main/java/us/kbase/catalog/ModuleInfo.java diff --git a/lib/java/us/kbase/catalog/ModuleState.java b/src/main/java/us/kbase/catalog/ModuleState.java similarity index 100% rename from lib/java/us/kbase/catalog/ModuleState.java rename to src/main/java/us/kbase/catalog/ModuleState.java diff --git a/lib/java/us/kbase/catalog/ModuleVersion.java b/src/main/java/us/kbase/catalog/ModuleVersion.java similarity index 100% rename from lib/java/us/kbase/catalog/ModuleVersion.java rename to src/main/java/us/kbase/catalog/ModuleVersion.java diff --git a/lib/java/us/kbase/catalog/ModuleVersionInfo.java b/src/main/java/us/kbase/catalog/ModuleVersionInfo.java similarity index 100% rename from lib/java/us/kbase/catalog/ModuleVersionInfo.java rename to src/main/java/us/kbase/catalog/ModuleVersionInfo.java diff --git a/lib/java/us/kbase/catalog/ModuleVersionLookupParams.java b/src/main/java/us/kbase/catalog/ModuleVersionLookupParams.java similarity index 100% rename from lib/java/us/kbase/catalog/ModuleVersionLookupParams.java rename to src/main/java/us/kbase/catalog/ModuleVersionLookupParams.java diff --git a/lib/java/us/kbase/catalog/Parameter.java b/src/main/java/us/kbase/catalog/Parameter.java similarity index 100% rename from lib/java/us/kbase/catalog/Parameter.java rename to src/main/java/us/kbase/catalog/Parameter.java diff --git a/lib/java/us/kbase/catalog/RegisterRepoParams.java b/src/main/java/us/kbase/catalog/RegisterRepoParams.java similarity index 100% rename from lib/java/us/kbase/catalog/RegisterRepoParams.java rename to src/main/java/us/kbase/catalog/RegisterRepoParams.java diff --git a/lib/java/us/kbase/catalog/ReleaseReview.java b/src/main/java/us/kbase/catalog/ReleaseReview.java similarity index 100% rename from lib/java/us/kbase/catalog/ReleaseReview.java rename to src/main/java/us/kbase/catalog/ReleaseReview.java diff --git a/lib/java/us/kbase/catalog/RequestedReleaseInfo.java b/src/main/java/us/kbase/catalog/RequestedReleaseInfo.java similarity index 100% rename from lib/java/us/kbase/catalog/RequestedReleaseInfo.java rename to src/main/java/us/kbase/catalog/RequestedReleaseInfo.java diff --git a/lib/java/us/kbase/catalog/SecureConfigParameter.java b/src/main/java/us/kbase/catalog/SecureConfigParameter.java similarity index 100% rename from lib/java/us/kbase/catalog/SecureConfigParameter.java rename to src/main/java/us/kbase/catalog/SecureConfigParameter.java diff --git a/lib/java/us/kbase/catalog/SelectModuleVersion.java b/src/main/java/us/kbase/catalog/SelectModuleVersion.java similarity index 100% rename from lib/java/us/kbase/catalog/SelectModuleVersion.java rename to src/main/java/us/kbase/catalog/SelectModuleVersion.java diff --git a/lib/java/us/kbase/catalog/SelectModuleVersionParams.java b/src/main/java/us/kbase/catalog/SelectModuleVersionParams.java similarity index 100% rename from lib/java/us/kbase/catalog/SelectModuleVersionParams.java rename to src/main/java/us/kbase/catalog/SelectModuleVersionParams.java diff --git a/lib/java/us/kbase/catalog/SelectOneLocalFunction.java b/src/main/java/us/kbase/catalog/SelectOneLocalFunction.java similarity index 100% rename from lib/java/us/kbase/catalog/SelectOneLocalFunction.java rename to src/main/java/us/kbase/catalog/SelectOneLocalFunction.java diff --git a/lib/java/us/kbase/catalog/SelectOneModuleParams.java b/src/main/java/us/kbase/catalog/SelectOneModuleParams.java similarity index 100% rename from lib/java/us/kbase/catalog/SelectOneModuleParams.java rename to src/main/java/us/kbase/catalog/SelectOneModuleParams.java diff --git a/lib/java/us/kbase/catalog/SetRegistrationStateParams.java b/src/main/java/us/kbase/catalog/SetRegistrationStateParams.java similarity index 100% rename from lib/java/us/kbase/catalog/SetRegistrationStateParams.java rename to src/main/java/us/kbase/catalog/SetRegistrationStateParams.java diff --git a/lib/java/us/kbase/catalog/SpecFile.java b/src/main/java/us/kbase/catalog/SpecFile.java similarity index 100% rename from lib/java/us/kbase/catalog/SpecFile.java rename to src/main/java/us/kbase/catalog/SpecFile.java diff --git a/lib/java/us/kbase/catalog/UpdateGitUrlParams.java b/src/main/java/us/kbase/catalog/UpdateGitUrlParams.java similarity index 100% rename from lib/java/us/kbase/catalog/UpdateGitUrlParams.java rename to src/main/java/us/kbase/catalog/UpdateGitUrlParams.java diff --git a/lib/java/us/kbase/catalog/VersionCommitInfo.java b/src/main/java/us/kbase/catalog/VersionCommitInfo.java similarity index 100% rename from lib/java/us/kbase/catalog/VersionCommitInfo.java rename to src/main/java/us/kbase/catalog/VersionCommitInfo.java diff --git a/lib/java/us/kbase/catalog/VolumeMount.java b/src/main/java/us/kbase/catalog/VolumeMount.java similarity index 100% rename from lib/java/us/kbase/catalog/VolumeMount.java rename to src/main/java/us/kbase/catalog/VolumeMount.java diff --git a/lib/java/us/kbase/catalog/VolumeMountConfig.java b/src/main/java/us/kbase/catalog/VolumeMountConfig.java similarity index 100% rename from lib/java/us/kbase/catalog/VolumeMountConfig.java rename to src/main/java/us/kbase/catalog/VolumeMountConfig.java diff --git a/lib/java/us/kbase/catalog/VolumeMountFilter.java b/src/main/java/us/kbase/catalog/VolumeMountFilter.java similarity index 100% rename from lib/java/us/kbase/catalog/VolumeMountFilter.java rename to src/main/java/us/kbase/catalog/VolumeMountFilter.java From e79201df2903dcccb40eabd5114c5174dccf9e12 Mon Sep 17 00:00:00 2001 From: MrCreosote Date: Wed, 3 Sep 2025 17:17:52 -0700 Subject: [PATCH 4/4] Fix JITPack build builds by default on Java 8. Need to look into how to bump that --- build.gradle | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 81035700..dcd377d6 100644 --- a/build.gradle +++ b/build.gradle @@ -21,7 +21,9 @@ repositories { } compileJava { - options.release = 11 + // TODO BUILD remove when we no longer support java 8, use `options.release = 11` if needed + java.sourceCompatibility = JavaVersion.VERSION_1_8 + java.targetCompatibility = JavaVersion.VERSION_1_8 } java {