diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 39ef5095..2b50eb04 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -26,7 +26,7 @@ jobs: - name: Setup Graalvm uses: graalvm/setup-graalvm@v1 with: - java-version: '17.0.8' + java-version: '21' distribution: 'graalvm' components: 'native-image' native-image-musl: 'true' @@ -83,7 +83,7 @@ jobs: mac-image: name: MAC - runs-on: macos-latest + runs-on: macos-12 timeout-minutes: 90 steps: @@ -96,7 +96,7 @@ jobs: - name: Setup Graalvm uses: graalvm/setup-graalvm@v1 with: - java-version: '17.0.8' + java-version: '21' distribution: 'graalvm' components: 'native-image' github-token: ${{ secrets.GITHUB_TOKEN }} @@ -184,7 +184,7 @@ jobs: uses: graalvm/setup-graalvm@v1 with: version: 'latest' - java-version: '17.0.8' + java-version: '21' distribution: 'graalvm' components: 'native-image' github-token: ${{ secrets.GITHUB_TOKEN }} @@ -278,7 +278,7 @@ jobs: - name: Setup Graalvm uses: graalvm/setup-graalvm@v1 with: - java-version: '17.0.8' + java-version: '21' distribution: 'graalvm' components: 'native-image' github-token: ${{ secrets.GITHUB_TOKEN }} @@ -338,19 +338,29 @@ jobs: uses: actions/download-artifact@v4 - name: Setup Java for JReleaser - uses: actions/setup-java@v1 + uses: actions/setup-java@v4 with: - java-version: 17.0.8 + java-version: '21' + distribution: 'adopt' - name: Version id: version run: | - VERSION=$(cat ./VERSION) - echo "VERSION = $VERSION" - echo "::set-output name=VERSION::$VERSION" + VERSION=$(cat ./VERSION) + echo "VERSION=$VERSION" + echo "VERSION=$VERSION" >> $GITHUB_OUTPUT - name: Run JReleaser - uses: jreleaser/release-action@v1 + uses: jreleaser/release-action@v2 env: - JRELEASER_GITHUB_TOKEN: ${{ secrets.GH_JRELEASER_TOKEN }} + JRELEASER_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} JRELEASER_PROJECT_VERSION: ${{ steps.version.outputs.VERSION }} + + - name: JReleaser release output + if: always() + uses: actions/upload-artifact@v4 + with: + name: jreleaser-release + path: | + out/jreleaser/trace.log + out/jreleaser/output.properties diff --git a/.gitignore b/.gitignore index 0ed2d81e..2c782154 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,7 @@ # Ignore Gradle project-specific cache directory .gradle .idea - +.env # Ignore Gradle build output directory build **/build-info.properties diff --git a/.sdkmanrc b/.sdkmanrc index ad28a808..d31a9537 100644 --- a/.sdkmanrc +++ b/.sdkmanrc @@ -1,3 +1,3 @@ # Enable auto-env through the sdkman_auto_env config # Add key=value pairs of SDKs to use below -java=17.0.8-graalce +java=21.0.4-graal diff --git a/README.md b/README.md index f00f172e..f9811fe4 100644 --- a/README.md +++ b/README.md @@ -175,4 +175,4 @@ Run a non-binary development version by executing the [`./tw`](tw) script in the ## License -[Mozilla Public License v2.0](https://github.com/seqeralabs/tower-cli/blob/master/LICENSE.txt) +[Apache 2.0](https://github.com/seqeralabs/tower-cli/blob/master/LICENSE.txt) diff --git a/USAGE.md b/USAGE.md index 1fc5dd6b..60880cfb 100644 --- a/USAGE.md +++ b/USAGE.md @@ -413,7 +413,7 @@ $ tw runs dump -i 5z4AMshti4g0GK -o file.tar.gz Run `tw workspaces -h` to view supported workspace operations. Run `tw workspaces add -h` to view the required and optional fields for adding your workspace. -Workspaces provide the context in which a user launches workflow executions, defines the available resources, and manages who can access those resources. Workspaces contain pipelines, runs, actions, datasets, compute environments, credentials, and secrets. Access permissions are controlled with participants, collaborators, and teams. +Workspaces provide the context in which a user launches workflow executions, defines the available resources, and manages who can access those resources. Workspaces contain pipelines, runs, actions, compute environments, credentials, datasets, data links, and secrets. Access permissions are controlled with participants, collaborators, and teams. See [User workspaces][user-workspaces] for more information. @@ -484,6 +484,138 @@ $ tw participants update --name=collaborator@mydomain.com --type=COLLABORATOR - Participant 'collaborator@mydomain.com' has now role 'maintain' for workspace 'shared-workspace' ``` +## Data Links + +Run `tw data-links -h` to view supported data link operations. + +Data links allow you to work with public and private cloud storage buckets in Data Explorer in the specified workspace. See [Data Explorer][data-explorer] for more information. AWS S3, Azure Blob Storage, and Google Cloud Storage are supported. The full list of operations are: + +- `list`: List data links in a workspace +- `add`: Add a custom data link to a workspace +- `update`: Update a custom data link in a workspace +- `delete`: Delete a custom data link from a workspace +- `browse`: Browse the contents of a data link in a workspace + +### List data links + +Run `tw data-links list -h` to view all the optional fields for listing data links in a workspace. If a workspace is not defined, the `TOWER_WORKSPACE_ID` workspace is used by default. Data links can be one of two types: + +- `v1-cloud-`: **cloud** data links auto-discovered using credentials attached to the workspace +- `v1-user-`: **custom** data links created by users + +```console +$ tw data-links list -w seqeralabs/showcase + + Data links at [seqeralabs / showcase] workspace: + + ID | Provider | Name | Resource ref | Region +-------------------------------------------+----------+--------------------------------+-----------------------------------------------------------------+----------- + v1-cloud-833bb845bd9ec1970c4a7b0bb7b8c4ad | aws | e2e-data-explorer-tests-aws | s3://e2e-data-explorer-tests-aws | eu-west-2 + v1-cloud-60700a33ec3fae68d424cf948fa8d10c | aws | nf-tower-bucket | s3://nf-tower-bucket | eu-west-1 + v1-user-09705781697816b62f9454bc4b9434b4 | aws | vscode-analysis-demo | s3://seqera-development-permanent-bucket/studios-demo/vscode/ | eu-west-2 + v1-user-0dede00fabbc4b9e2610261822a2d6ae | aws | seqeralabs-showcase | s3://seqeralabs-showcase | eu-west-1 + v1-user-171aa8801cabe4af71500335f193d649 | aws | projectA-rnaseq-analysis | s3://seqeralabs-showcase/demo/nf-core-rnaseq/ | eu-west-1 + + + + v1-user-bb4fa9625a44721510c47ac1cb97905b | aws | genome-in-a-bottle | s3://giab | us-east-1 + v1-user-e7bf26921ba74032bd6ae1870df381fc | aws | NCBI_Sequence_Read_Archive_SRA | s3://sra-pub-src-1/ | us-east-1 + + Showing from 0 to 99 from a total of 16 entries. +``` + +### Add a custom data link + +Run `tw data-links add -h` to view all the required and optional fields for adding a custom data link to a workspace. Users with the `MAINTAIN` role and above for a workspace can add custom data links. The data link `name`, `uri` and `provider` (one of `aws`, `azure`, or `google`) fields are required. If adding a custom data link for a private bucket, the `credentials` identifier field is also required. Adding a custom data link for a public bucket doesn't require credentials. + +```console +$ tw data-links add -w seqeralabs/showcase -n FOO -u az://seqeralabs.azure-benchmarking -p azure -c seqera_azure_credentials + + Data link created: + + ID | Provider | Name | Resource ref | Region +------------------------------------------+----------+------+------------------------------------+-------- + v1-user-152116183ee325463901430bb9efb8c9 | azure | FOO | az://seqeralabs.azure-benchmarking | +``` + +### Update a custom data link + +Run `tw data-links update -h` to view all the required and optional fields for updating a custom data link in a workspace. Users with the `MAINTAIN` role and above for a workspace can update custom data links. + +```console +$ tw data-links update -w seqeralabs/showcase -i v1-user-152116183ee325463901430bb9efb8c9 -n BAR + + Data link updated: + + ID | Provider | Name | Resource ref | Region +------------------------------------------+----------+------+------------------------------------+-------- + v1-user-152116183ee325463901430bb9efb8c9 | azure | BAR | az://seqeralabs.azure-benchmarking | +``` + +### Delete a custom data link + +Run `tw data-links delete -h` to view all the required and optional fields for deleting a custom data link from a workspace. Users with the `MAINTAIN` role and above for a workspace can delete custom data links. + +```console +$ tw data-links delete -w seqeralabs/showcase -i v1-user-152116183ee325463901430bb9efb8c9 + + Data link 'v1-user-152116183ee325463901430bb9efb8c9' deleted at '138659136604200' workspace. +``` + +### Browse the contents of a data link + +Run `tw data-links browse -h` to view all the required and optional fields for browsing a data link in a workspace. Define the data link id using the required `-i` or `--id` argument, which can be found by first using the `list` operation for a workspace. In the example below, a `name` is optionally defined to only retrieve data links with names that start with the given word: + +```console +$ tw data-links list -w seqeralabs/showcase -n 1000genomes + + Data links at [seqeralabs / showcase] workspace: + + ID | Provider | Name | Resource ref | Region +------------------------------------------+----------+-------------+------------------+----------- + v1-user-6d8f44c239e2a098b3e02e918612452a | aws | 1000genomes | s3://1000genomes | us-east-1 + + Showing from 0 to 99 from a total of 1 entries. + +$ tw data-links browse -w seqeralabs/showcase -i v1-user-6d8f44c239e2a098b3e02e918612452a + + Content of 's3://1000genomes' and path 'null': + + Type | Name | Size +--------+--------------------------------------------+---------- + FILE | 20131219.populations.tsv | 1663 + FILE | 20131219.superpopulations.tsv | 97 + FILE | CHANGELOG | 257098 + FILE | README.alignment_data | 15977 + FILE | README.analysis_history | 5289 + FILE | README.complete_genomics_data | 5967 + FILE | README.crams | 563 + FILE | README.ebi_aspera_info | 935 + FILE | README.ftp_structure | 8408 + FILE | README.pilot_data | 2082 + FILE | README.populations | 1938 + FILE | README.sequence_data | 7857 + FILE | README_missing_files_20150612 | 672 + FILE | README_phase3_alignments_sequence_20150526 | 136 + FILE | README_phase3_data_move_20150612 | 273 + FILE | alignment.index | 3579471 + FILE | analysis.sequence.index | 54743580 + FILE | exome.alignment.index | 3549051 + FILE | sequence.index | 67069489 + FOLDER | 1000G_2504_high_coverage/ | 0 + FOLDER | alignment_indices/ | 0 + FOLDER | changelog_details/ | 0 + FOLDER | complete_genomics_indices/ | 0 + FOLDER | data/ | 0 + FOLDER | hgsv_sv_discovery/ | 0 + FOLDER | phase1/ | 0 + FOLDER | phase3/ | 0 + FOLDER | pilot_data/ | 0 + FOLDER | release/ | 0 + FOLDER | sequence_indices/ | 0 + FOLDER | technical/ | 0 +``` + [compute-envs]: https://docs.seqera.io/platform/latest/compute-envs/overview [credentials]: https://docs.seqera.io/platform/latest/credentials/overview [git-integration]: https://docs.seqera.io/platform/latest/git/overview @@ -493,3 +625,4 @@ $ tw participants update --name=collaborator@mydomain.com --type=COLLABORATOR - [tower-agent]: https://github.com/seqeralabs/tower-agent [user-workspaces]: https://docs.seqera.io/platform/latest/orgs-and-teams/workspace-management [wave-docs]: https://www.nextflow.io/docs/latest/wave.html +[data-explorer]: https://docs.seqera.io/platform/latest/data/data-explorer diff --git a/VERSION b/VERSION index 2003b639..57121573 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.9.2 +0.10.1 diff --git a/build.gradle b/build.gradle index 22f3290f..4706ca6d 100644 --- a/build.gradle +++ b/build.gradle @@ -3,7 +3,7 @@ plugins { id 'application' id 'jacoco' id 'org.cadixdev.licenser' version '0.6.1' - id 'org.graalvm.buildtools.native' + id 'org.graalvm.buildtools.native' version '0.10.2' id 'com.github.johnrengelman.shadow' version '7.1.2' } @@ -23,7 +23,7 @@ dependencies { implementation 'org.slf4j:slf4j-api:1.7.36' implementation 'ch.qos.logback:logback-core:1.2.11' implementation 'ch.qos.logback:logback-classic:1.2.11' - implementation 'io.seqera.tower:tower-java-sdk:1.9.5' + implementation 'io.seqera.tower:tower-java-sdk:1.9.7' implementation 'info.picocli:picocli:4.6.3' implementation 'org.apache.commons:commons-compress:1.22' implementation 'org.tukaani:xz:1.9' @@ -67,6 +67,12 @@ task buildInfo { } } +java { + toolchain { + languageVersion = JavaLanguageVersion.of(21) + } +} + compileJava { sourceCompatibility = JavaVersion.toVersion("11") targetCompatibility = JavaVersion.toVersion("11") @@ -93,6 +99,7 @@ test { } graalvmNative { + toolchainDetection = true binaries { main { imageName = 'tw' @@ -109,14 +116,14 @@ graalvmNative { buildArgs.add('-H:+ReportExceptionStackTraces') javaLauncher = javaToolchains.launcherFor { - languageVersion = JavaLanguageVersion.of(17) + languageVersion = JavaLanguageVersion.of(21) + vendor = JvmVendorSpec.matching("Oracle Corporation") } } test { verbose = true - agent = false } } } diff --git a/conf/reflect-config.json b/conf/reflect-config.json index e27a0020..8c5c4731 100644 --- a/conf/reflect-config.json +++ b/conf/reflect-config.json @@ -172,6 +172,12 @@ "allDeclaredMethods":true, "methods":[{"name":"","parameterTypes":[] }] }, +{ + "name":"io.seqera.tower.cli.commands.DataLinksCmd", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true, + "methods":[{"name":"","parameterTypes":[] }] +}, { "name":"io.seqera.tower.cli.commands.DatasetsCmd", "allDeclaredFields":true, @@ -978,6 +984,47 @@ "allDeclaredMethods":true, "methods":[{"name":"","parameterTypes":[] }] }, +{ + "name":"io.seqera.tower.cli.commands.data.links.AbstractDataLinksCmd", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true +}, +{ + "name":"io.seqera.tower.cli.commands.data.links.AddCmd", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true, + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "name":"io.seqera.tower.cli.commands.data.links.BrowseCmd", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true, + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "name":"io.seqera.tower.cli.commands.data.links.DeleteCmd", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true, + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "name":"io.seqera.tower.cli.commands.data.links.ListCmd", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true, + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "name":"io.seqera.tower.cli.commands.data.links.SearchOption", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true, + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "name":"io.seqera.tower.cli.commands.data.links.UpdateCmd", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true, + "methods":[{"name":"","parameterTypes":[] }] +}, { "name":"io.seqera.tower.cli.commands.datasets.AbstractDatasetsCmd", "allDeclaredFields":true, @@ -1664,6 +1711,30 @@ "queryAllDeclaredMethods":true, "queryAllDeclaredConstructors":true }, +{ + "name":"io.seqera.tower.cli.responses.data.DataLinkContentList", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true, + "queryAllDeclaredConstructors":true +}, +{ + "name":"io.seqera.tower.cli.responses.data.DataLinkDeleted", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true, + "queryAllDeclaredConstructors":true +}, +{ + "name":"io.seqera.tower.cli.responses.data.DataLinkView", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true, + "queryAllDeclaredConstructors":true +}, +{ + "name":"io.seqera.tower.cli.responses.data.DataLinksList", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true, + "queryAllDeclaredConstructors":true +}, { "name":"io.seqera.tower.cli.responses.datasets.DatasetCreate", "allDeclaredFields":true, @@ -2163,7 +2234,8 @@ { "name":"io.seqera.tower.model.CloudPriceModel", "allDeclaredFields":true, - "allDeclaredMethods":true + "allDeclaredMethods":true, + "methods":[{"name":"fromValue","parameterTypes":["java.lang.String"] }, {"name":"getValue","parameterTypes":[] }] }, { "name":"io.seqera.tower.model.CodeCommitSecurityKeys", @@ -2178,14 +2250,14 @@ "allDeclaredMethods":true }, { - "name":"io.seqera.tower.model.ComputeEnv", + "name":"io.seqera.tower.model.ComputeEnvComputeConfig", "allDeclaredFields":true, "allDeclaredMethods":true, "allDeclaredConstructors":true, - "methods":[{"name":"","parameterTypes":[] }, {"name":"getConfig","parameterTypes":[] }, {"name":"getCredentialsId","parameterTypes":[] }, {"name":"getDateCreated","parameterTypes":[] }, {"name":"getDeleted","parameterTypes":[] }, {"name":"getDescription","parameterTypes":[] }, {"name":"getId","parameterTypes":[] }, {"name":"getLastUpdated","parameterTypes":[] }, {"name":"getLastUsed","parameterTypes":[] }, {"name":"getMessage","parameterTypes":[] }, {"name":"getName","parameterTypes":[] }, {"name":"getOrgId","parameterTypes":[] }, {"name":"getPlatform","parameterTypes":[] }, {"name":"getPrimary","parameterTypes":[] }, {"name":"getStatus","parameterTypes":[] }, {"name":"getWorkspaceId","parameterTypes":[] }, {"name":"setConfig","parameterTypes":["io.seqera.tower.model.ComputeConfig"] }, {"name":"setCredentialsId","parameterTypes":["java.lang.String"] }, {"name":"setDescription","parameterTypes":["java.lang.String"] }, {"name":"setMessage","parameterTypes":["java.lang.String"] }, {"name":"setName","parameterTypes":["java.lang.String"] }, {"name":"setPlatform","parameterTypes":["io.seqera.tower.model.ComputeEnv$PlatformEnum"] }, {"name":"setStatus","parameterTypes":["io.seqera.tower.model.ComputeEnvStatus"] }] + "methods":[{"name":"","parameterTypes":[] }, {"name":"getConfig","parameterTypes":[] }, {"name":"getCredentialsId","parameterTypes":[] }, {"name":"getDateCreated","parameterTypes":[] }, {"name":"getDeleted","parameterTypes":[] }, {"name":"getDescription","parameterTypes":[] }, {"name":"getId","parameterTypes":[] }, {"name":"getLastUpdated","parameterTypes":[] }, {"name":"getLastUsed","parameterTypes":[] }, {"name":"getMessage","parameterTypes":[] }, {"name":"getName","parameterTypes":[] }, {"name":"getOrgId","parameterTypes":[] }, {"name":"getPlatform","parameterTypes":[] }, {"name":"getPrimary","parameterTypes":[] }, {"name":"getStatus","parameterTypes":[] }, {"name":"getWorkspaceId","parameterTypes":[] }, {"name":"setConfig","parameterTypes":["io.seqera.tower.model.ComputeConfig"] }, {"name":"setCredentialsId","parameterTypes":["java.lang.String"] }, {"name":"setDescription","parameterTypes":["java.lang.String"] }, {"name":"setMessage","parameterTypes":["java.lang.String"] }, {"name":"setName","parameterTypes":["java.lang.String"] }, {"name":"setPlatform","parameterTypes":["io.seqera.tower.model.ComputeEnvComputeConfig$PlatformEnum"] }, {"name":"setStatus","parameterTypes":["io.seqera.tower.model.ComputeEnvStatus"] }] }, { - "name":"io.seqera.tower.model.ComputeEnv$PlatformEnum", + "name":"io.seqera.tower.model.ComputeEnvComputeConfig$PlatformEnum", "allDeclaredFields":true, "allDeclaredMethods":true, "methods":[{"name":"fromValue","parameterTypes":["java.lang.String"] }, {"name":"getValue","parameterTypes":[] }] @@ -2385,6 +2457,85 @@ "allDeclaredMethods":true, "methods":[{"name":"fromValue","parameterTypes":["java.lang.String"] }, {"name":"getValue","parameterTypes":[] }] }, +{ + "name":"io.seqera.tower.model.DataLinkContentResponse", + "allDeclaredFields":true, + "allDeclaredMethods":true, + "queryAllDeclaredConstructors":true, + "methods":[{"name":"","parameterTypes":[] }, {"name":"addObjectsItem","parameterTypes":["io.seqera.tower.model.DataLinkItem"] }, {"name":"getObjects","parameterTypes":[] }, {"name":"getOriginalPath","parameterTypes":[] }, {"name":"nextPageToken","parameterTypes":["java.lang.String"] }, {"name":"objects","parameterTypes":["java.util.List"] }, {"name":"originalPath","parameterTypes":["java.lang.String"] }, {"name":"setNextPageToken","parameterTypes":["java.lang.String"] }, {"name":"setObjects","parameterTypes":["java.util.List"] }, {"name":"setOriginalPath","parameterTypes":["java.lang.String"] }] +}, +{ + "name":"io.seqera.tower.model.DataLinkCreateRequest", + "allDeclaredFields":true, + "allDeclaredMethods":true, + "queryAllDeclaredConstructors":true, + "methods":[{"name":"","parameterTypes":[] }, {"name":"fromValue","parameterTypes":["java.lang.String"] }, {"name":"getCredentialsId","parameterTypes":[] }, {"name":"getDescription","parameterTypes":[] }, {"name":"getName","parameterTypes":[] }, {"name":"getProvider","parameterTypes":[] }, {"name":"getPublicAccessible","parameterTypes":[] }, {"name":"getResourceRef","parameterTypes":[] }, {"name":"getType","parameterTypes":[] }] +}, +{ + "name":"io.seqera.tower.model.DataLinkCredentials", + "allDeclaredFields":true, + "allDeclaredMethods":true, + "queryAllDeclaredConstructors":true, + "methods":[{"name":"","parameterTypes":[] }, {"name":"fromValue","parameterTypes":["java.lang.String"] }, {"name":"setId","parameterTypes":["java.lang.String"] }, {"name":"setName","parameterTypes":["java.lang.String"] }, {"name":"setProvider","parameterTypes":["io.seqera.tower.model.DataLinkProvider"] }] +}, +{ + "name":"io.seqera.tower.model.DataLinkDto", + "allDeclaredFields":true, + "allDeclaredMethods":true, + "queryAllDeclaredConstructors":true, + "methods":[{"name":"","parameterTypes":[] }, {"name":"fromValue","parameterTypes":["java.lang.String"] }, {"name":"setCredentials","parameterTypes":["java.util.List"] }, {"name":"setDescription","parameterTypes":["java.lang.String"] }, {"name":"setHidden","parameterTypes":["java.lang.Boolean"] }, {"name":"setId","parameterTypes":["java.lang.String"] }, {"name":"setMessage","parameterTypes":["java.lang.String"] }, {"name":"setName","parameterTypes":["java.lang.String"] }, {"name":"setProvider","parameterTypes":["io.seqera.tower.model.DataLinkProvider"] }, {"name":"setPublicAccessible","parameterTypes":["java.lang.Boolean"] }, {"name":"setRegion","parameterTypes":["java.lang.String"] }, {"name":"setResourceRef","parameterTypes":["java.lang.String"] }, {"name":"setStatus","parameterTypes":["io.seqera.tower.model.DataLinkStatus"] }, {"name":"setType","parameterTypes":["io.seqera.tower.model.DataLinkType"] }] +}, +{ + "name":"io.seqera.tower.model.DataLinkItem", + "allDeclaredFields":true, + "allDeclaredMethods":true, + "queryAllDeclaredConstructors":true, + "methods":[{"name":"","parameterTypes":[] }, {"name":"fromValue","parameterTypes":["java.lang.String"] }, {"name":"setMimeType","parameterTypes":["java.lang.String"] }, {"name":"setName","parameterTypes":["java.lang.String"] }, {"name":"setSize","parameterTypes":["java.lang.Long"] }, {"name":"setType","parameterTypes":["io.seqera.tower.model.DataLinkItemType"] }] +}, +{ + "name":"io.seqera.tower.model.DataLinkItemType", + "allDeclaredFields":true, + "allDeclaredMethods":true, + "methods":[{"name":"","parameterTypes":[] }, {"name":"fromValue","parameterTypes":["java.lang.String"] }] +}, +{ + "name":"io.seqera.tower.model.DataLinkProvider", + "allDeclaredFields":true, + "allDeclaredMethods":true, + "methods":[{"name":"","parameterTypes":[] }, {"name":"fromValue","parameterTypes":["java.lang.String"] }, {"name":"getValue","parameterTypes":[] }] +}, +{ + "name":"io.seqera.tower.model.DataLinkResponse", + "allDeclaredFields":true, + "allDeclaredMethods":true, + "queryAllDeclaredConstructors":true, + "methods":[{"name":"","parameterTypes":[] }, {"name":"fromValue","parameterTypes":["java.lang.String"] }, {"name":"setDataLink","parameterTypes":["io.seqera.tower.model.DataLinkDto"] }] +}, +{ + "name":"io.seqera.tower.model.DataLinkStatus", + "allDeclaredFields":true, + "allDeclaredMethods":true, + "methods":[{"name":"","parameterTypes":[] }, {"name":"fromValue","parameterTypes":["java.lang.String"] }] +}, +{ + "name":"io.seqera.tower.model.DataLinkType", + "allDeclaredFields":true, + "allDeclaredMethods":true, + "methods":[{"name":"fromValue","parameterTypes":["java.lang.String"] }, {"name":"getValue","parameterTypes":[] }] +}, +{ + "name":"io.seqera.tower.model.DataLinkUpdateRequest", + "allDeclaredFields":true, + "allDeclaredMethods":true, + "methods":[{"name":"","parameterTypes":[] }, {"name":"fromValue","parameterTypes":["java.lang.String"] }] +}, +{ + "name":"io.seqera.tower.model.DataLinksListResponse", + "allDeclaredFields":true, + "allDeclaredMethods":true, + "queryAllDeclaredConstructors":true, + "methods":[{"name":"","parameterTypes":[] }, {"name":"fromValue","parameterTypes":["java.lang.String"] }, {"name":"setDataLinks","parameterTypes":["java.util.List"] }, {"name":"setTotalSize","parameterTypes":["java.lang.Long"] }] +}, { "name":"io.seqera.tower.model.Dataset", "allDeclaredFields":true, @@ -2559,7 +2710,7 @@ "allDeclaredFields":true, "queryAllDeclaredMethods":true, "queryAllDeclaredConstructors":true, - "methods":[{"name":"","parameterTypes":[] }, {"name":"getBootDiskSizeGb","parameterTypes":[] }, {"name":"getCopyImage","parameterTypes":[] }, {"name":"getCpuPlatform","parameterTypes":[] }, {"name":"getDebugMode","parameterTypes":[] }, {"name":"getDiscriminator","parameterTypes":[] }, {"name":"getEnvironment","parameterTypes":[] }, {"name":"getFusion2Enabled","parameterTypes":[] }, {"name":"getHeadJobCpus","parameterTypes":[] }, {"name":"getHeadJobMemoryMb","parameterTypes":[] }, {"name":"getLabels","parameterTypes":[] }, {"name":"getLocation","parameterTypes":[] }, {"name":"getMachineType","parameterTypes":[] }, {"name":"getNetwork","parameterTypes":[] }, {"name":"getNfsMount","parameterTypes":[] }, {"name":"getNfsTarget","parameterTypes":[] }, {"name":"getPostRunScript","parameterTypes":[] }, {"name":"getPreRunScript","parameterTypes":[] }, {"name":"getProjectId","parameterTypes":[] }, {"name":"getServiceAccount","parameterTypes":[] }, {"name":"getSpot","parameterTypes":[] }, {"name":"getSshDaemon","parameterTypes":[] }, {"name":"getSshImage","parameterTypes":[] }, {"name":"getSubnetwork","parameterTypes":[] }, {"name":"getUsePrivateAddress","parameterTypes":[] }, {"name":"getWaveEnabled","parameterTypes":[] }, {"name":"getWorkDir","parameterTypes":[] }, {"name":"setBootDiskSizeGb","parameterTypes":["java.lang.Integer"] }, {"name":"setCopyImage","parameterTypes":["java.lang.String"] }, {"name":"setCpuPlatform","parameterTypes":["java.lang.String"] }, {"name":"setDebugMode","parameterTypes":["java.lang.Integer"] }, {"name":"setEnvironment","parameterTypes":["java.util.List"] }, {"name":"setFusion2Enabled","parameterTypes":["java.lang.Boolean"] }, {"name":"setHeadJobCpus","parameterTypes":["java.lang.Integer"] }, {"name":"setHeadJobMemoryMb","parameterTypes":["java.lang.Integer"] }, {"name":"setLabels","parameterTypes":["java.util.Map"] }, {"name":"setLocation","parameterTypes":["java.lang.String"] }, {"name":"setMachineType","parameterTypes":["java.lang.String"] }, {"name":"setNetwork","parameterTypes":["java.lang.String"] }, {"name":"setNfsMount","parameterTypes":["java.lang.String"] }, {"name":"setNfsTarget","parameterTypes":["java.lang.String"] }, {"name":"setPostRunScript","parameterTypes":["java.lang.String"] }, {"name":"setPreRunScript","parameterTypes":["java.lang.String"] }, {"name":"setProjectId","parameterTypes":["java.lang.String"] }, {"name":"setServiceAccount","parameterTypes":["java.lang.String"] }, {"name":"setSpot","parameterTypes":["java.lang.Boolean"] }, {"name":"setSshDaemon","parameterTypes":["java.lang.Boolean"] }, {"name":"setSshImage","parameterTypes":["java.lang.String"] }, {"name":"setSubnetwork","parameterTypes":["java.lang.String"] }, {"name":"setUsePrivateAddress","parameterTypes":["java.lang.Boolean"] }, {"name":"setWaveEnabled","parameterTypes":["java.lang.Boolean"] }, {"name":"setWorkDir","parameterTypes":["java.lang.String"] }] + "methods":[{"name":"","parameterTypes":[] }, {"name":"getBootDiskSizeGb","parameterTypes":[] }, {"name":"getComputeJobsInstanceTemplate","parameterTypes":[] }, {"name":"getCopyImage","parameterTypes":[] }, {"name":"getCpuPlatform","parameterTypes":[] }, {"name":"getDebugMode","parameterTypes":[] }, {"name":"getDiscriminator","parameterTypes":[] }, {"name":"getEnvironment","parameterTypes":[] }, {"name":"getFusion2Enabled","parameterTypes":[] }, {"name":"getHeadJobCpus","parameterTypes":[] }, {"name":"getHeadJobInstanceTemplate","parameterTypes":[] }, {"name":"getHeadJobMemoryMb","parameterTypes":[] }, {"name":"getHeadJobOptions","parameterTypes":[] }, {"name":"getHostName","parameterTypes":[] }, {"name":"getLabels","parameterTypes":[] }, {"name":"getLaunchDir","parameterTypes":[] }, {"name":"getLocation","parameterTypes":[] }, {"name":"getMachineType","parameterTypes":[] }, {"name":"getMaxQueueSize","parameterTypes":[] }, {"name":"getNetwork","parameterTypes":[] }, {"name":"getNextflowConfig","parameterTypes":[] }, {"name":"getNfsMount","parameterTypes":[] }, {"name":"getNfsTarget","parameterTypes":[] }, {"name":"getPort","parameterTypes":[] }, {"name":"getPostRunScript","parameterTypes":[] }, {"name":"getPreRunScript","parameterTypes":[] }, {"name":"getProjectId","parameterTypes":[] }, {"name":"getPropagateHeadJobOptions","parameterTypes":[] }, {"name":"getServiceAccount","parameterTypes":[] }, {"name":"getSpot","parameterTypes":[] }, {"name":"getSshDaemon","parameterTypes":[] }, {"name":"getSshImage","parameterTypes":[] }, {"name":"getSubnetwork","parameterTypes":[] }, {"name":"getUsePrivateAddress","parameterTypes":[] }, {"name":"getUserName","parameterTypes":[] }, {"name":"getWaveEnabled","parameterTypes":[] }, {"name":"getWorkDir","parameterTypes":[] }, {"name":"setBootDiskSizeGb","parameterTypes":["java.lang.Integer"] }, {"name":"setComputeJobsInstanceTemplate","parameterTypes":["java.lang.String"] }, {"name":"setCopyImage","parameterTypes":["java.lang.String"] }, {"name":"setCpuPlatform","parameterTypes":["java.lang.String"] }, {"name":"setDebugMode","parameterTypes":["java.lang.Integer"] }, {"name":"setEnvironment","parameterTypes":["java.util.List"] }, {"name":"setFusion2Enabled","parameterTypes":["java.lang.Boolean"] }, {"name":"setHeadJobCpus","parameterTypes":["java.lang.Integer"] }, {"name":"setHeadJobInstanceTemplate","parameterTypes":["java.lang.String"] }, {"name":"setHeadJobMemoryMb","parameterTypes":["java.lang.Integer"] }, {"name":"setLabels","parameterTypes":["java.util.Map"] }, {"name":"setLocation","parameterTypes":["java.lang.String"] }, {"name":"setMachineType","parameterTypes":["java.lang.String"] }, {"name":"setNetwork","parameterTypes":["java.lang.String"] }, {"name":"setNextflowConfig","parameterTypes":["java.lang.String"] }, {"name":"setNfsMount","parameterTypes":["java.lang.String"] }, {"name":"setNfsTarget","parameterTypes":["java.lang.String"] }, {"name":"setPostRunScript","parameterTypes":["java.lang.String"] }, {"name":"setPreRunScript","parameterTypes":["java.lang.String"] }, {"name":"setProjectId","parameterTypes":["java.lang.String"] }, {"name":"setServiceAccount","parameterTypes":["java.lang.String"] }, {"name":"setSpot","parameterTypes":["java.lang.Boolean"] }, {"name":"setSshDaemon","parameterTypes":["java.lang.Boolean"] }, {"name":"setSshImage","parameterTypes":["java.lang.String"] }, {"name":"setSubnetwork","parameterTypes":["java.lang.String"] }, {"name":"setUsePrivateAddress","parameterTypes":["java.lang.Boolean"] }, {"name":"setWaveEnabled","parameterTypes":["java.lang.Boolean"] }, {"name":"setWorkDir","parameterTypes":["java.lang.String"] }] }, { "name":"io.seqera.tower.model.GoogleLifeSciencesConfig", @@ -2654,7 +2805,7 @@ "allDeclaredFields":true, "allDeclaredMethods":true, "allDeclaredConstructors":true, - "methods":[{"name":"","parameterTypes":[] }, {"name":"setId","parameterTypes":["java.lang.String"] }, {"name":"setLastUsed","parameterTypes":["java.time.OffsetDateTime"] }, {"name":"setMessage","parameterTypes":["java.lang.String"] }, {"name":"setName","parameterTypes":["java.lang.String"] }, {"name":"setPlatform","parameterTypes":["java.lang.String"] }, {"name":"setPrimary","parameterTypes":["java.lang.Boolean"] }, {"name":"setStatus","parameterTypes":["io.seqera.tower.model.ComputeEnvStatus"] }, {"name":"setVisibility","parameterTypes":["java.lang.String"] }, {"name":"setWorkDir","parameterTypes":["java.lang.String"] }, {"name":"setWorkspaceName","parameterTypes":["java.lang.String"] }] + "methods":[{"name":"","parameterTypes":[] }, {"name":"setCredentialsId","parameterTypes":["java.lang.String"] }, {"name":"setId","parameterTypes":["java.lang.String"] }, {"name":"setLastUsed","parameterTypes":["java.time.OffsetDateTime"] }, {"name":"setMessage","parameterTypes":["java.lang.String"] }, {"name":"setName","parameterTypes":["java.lang.String"] }, {"name":"setPlatform","parameterTypes":["java.lang.String"] }, {"name":"setPrimary","parameterTypes":["java.lang.Boolean"] }, {"name":"setRegion","parameterTypes":["java.lang.String"] }, {"name":"setStatus","parameterTypes":["io.seqera.tower.model.ComputeEnvStatus"] }, {"name":"setVisibility","parameterTypes":["java.lang.String"] }, {"name":"setWorkDir","parameterTypes":["java.lang.String"] }, {"name":"setWorkspaceName","parameterTypes":["java.lang.String"] }] }, { "name":"io.seqera.tower.model.ListCredentialsResponse", @@ -2824,7 +2975,8 @@ { "name":"io.seqera.tower.model.PipelineOptimizationStatus", "allDeclaredFields":true, - "queryAllDeclaredMethods":true + "queryAllDeclaredMethods":true, + "methods":[{"name":"","parameterTypes":["java.lang.String"] }, {"name":"fromValue","parameterTypes":["java.lang.String"] }] }, { "name":"io.seqera.tower.model.PipelineSecret", @@ -2875,7 +3027,7 @@ "allDeclaredFields":true, "allDeclaredMethods":true, "allDeclaredConstructors":true, - "methods":[{"name":"","parameterTypes":[] }, {"name":"getAllowInstanceCredentials","parameterTypes":[] }, {"name":"getAllowLocalRepos","parameterTypes":[] }, {"name":"getAnalytics","parameterTypes":[] }, {"name":"getApiVersion","parameterTypes":[] }, {"name":"getArm64Enabled","parameterTypes":[] }, {"name":"getAuthTypes","parameterTypes":[] }, {"name":"getCommitId","parameterTypes":[] }, {"name":"getContentMaxFileSize","parameterTypes":[] }, {"name":"getContentUrl","parameterTypes":[] }, {"name":"getDataExplorerAllowedWorkspaces","parameterTypes":[] }, {"name":"getEvalWorkspaceIds","parameterTypes":[] }, {"name":"getForgePrefix","parameterTypes":[] }, {"name":"getGroundswellAllowedWorkspaces","parameterTypes":[] }, {"name":"getGroundswellEnabled","parameterTypes":[] }, {"name":"getHeartbeatInterval","parameterTypes":[] }, {"name":"getLandingUrl","parameterTypes":[] }, {"name":"getLoginPath","parameterTypes":[] }, {"name":"getNavbar","parameterTypes":[] }, {"name":"getSeqeraCloud","parameterTypes":[] }, {"name":"getTermsOfUseUrl","parameterTypes":[] }, {"name":"getUserWorkspaceEnabled","parameterTypes":[] }, {"name":"getVersion","parameterTypes":[] }, {"name":"getWaveAllowedWorkspaces","parameterTypes":[] }, {"name":"getWaveEnabled","parameterTypes":[] }, {"name":"setAllowInstanceCredentials","parameterTypes":["java.lang.Boolean"] }, {"name":"setAllowLocalRepos","parameterTypes":["java.lang.Boolean"] }, {"name":"setAnalytics","parameterTypes":["io.seqera.tower.model.Analytics"] }, {"name":"setApiVersion","parameterTypes":["java.lang.String"] }, {"name":"setArm64Enabled","parameterTypes":["java.lang.Boolean"] }, {"name":"setAuthTypes","parameterTypes":["java.util.List"] }, {"name":"setCommitId","parameterTypes":["java.lang.String"] }, {"name":"setContentMaxFileSize","parameterTypes":["java.lang.Long"] }, {"name":"setContentUrl","parameterTypes":["java.lang.String"] }, {"name":"setDataExplorerAllowedWorkspaces","parameterTypes":["java.util.List"] }, {"name":"setEvalWorkspaceIds","parameterTypes":["java.util.List"] }, {"name":"setForgePrefix","parameterTypes":["java.lang.String"] }, {"name":"setGroundswellAllowedWorkspaces","parameterTypes":["java.util.List"] }, {"name":"setGroundswellEnabled","parameterTypes":["java.lang.Boolean"] }, {"name":"setHeartbeatInterval","parameterTypes":["java.lang.Integer"] }, {"name":"setLandingUrl","parameterTypes":["java.lang.String"] }, {"name":"setLoginPath","parameterTypes":["java.lang.String"] }, {"name":"setNavbar","parameterTypes":["io.seqera.tower.model.NavbarConfig"] }, {"name":"setSeqeraCloud","parameterTypes":["java.lang.Boolean"] }, {"name":"setTermsOfUseUrl","parameterTypes":["java.lang.String"] }, {"name":"setUserWorkspaceEnabled","parameterTypes":["java.lang.Boolean"] }, {"name":"setVersion","parameterTypes":["java.lang.String"] }, {"name":"setWaveAllowedWorkspaces","parameterTypes":["java.util.List"] }, {"name":"setWaveEnabled","parameterTypes":["java.lang.Boolean"] }] + "methods":[{"name":"","parameterTypes":[] }, {"name":"getAllowInstanceCredentials","parameterTypes":[] }, {"name":"getAllowLocalRepos","parameterTypes":[] }, {"name":"getAnalytics","parameterTypes":[] }, {"name":"getApiVersion","parameterTypes":[] }, {"name":"getArm64Enabled","parameterTypes":[] }, {"name":"getAuthTypes","parameterTypes":[] }, {"name":"getCommitId","parameterTypes":[] }, {"name":"getContentMaxFileSize","parameterTypes":[] }, {"name":"getContentUrl","parameterTypes":[] }, {"name":"getDataExplorerAllowedWorkspaces","parameterTypes":[] }, {"name":"getEvalWorkspaceIds","parameterTypes":[] }, {"name":"getForgePrefix","parameterTypes":[] }, {"name":"getGroundswellAllowedWorkspaces","parameterTypes":[] }, {"name":"getGroundswellEnabled","parameterTypes":[] }, {"name":"getHeartbeatInterval","parameterTypes":[] }, {"name":"getLandingUrl","parameterTypes":[] }, {"name":"getLoginPath","parameterTypes":[] }, {"name":"getNavbar","parameterTypes":[] }, {"name":"getSeqeraCloud","parameterTypes":[] }, {"name":"getTermsOfUseUrl","parameterTypes":[] }, {"name":"getUserWorkspaceEnabled","parameterTypes":[] }, {"name":"getVersion","parameterTypes":[] }, {"name":"getWaveAllowedWorkspaces","parameterTypes":[] }, {"name":"getWaveEnabled","parameterTypes":[] }, {"name":"setAllowInstanceCredentials","parameterTypes":["java.lang.Boolean"] }, {"name":"setAllowLocalRepos","parameterTypes":["java.lang.Boolean"] }, {"name":"setAllowNextflowCliLogs","parameterTypes":["java.lang.Boolean"] }, {"name":"setAnalytics","parameterTypes":["io.seqera.tower.model.Analytics"] }, {"name":"setApiVersion","parameterTypes":["java.lang.String"] }, {"name":"setArm64Enabled","parameterTypes":["java.lang.Boolean"] }, {"name":"setAuthTypes","parameterTypes":["java.util.List"] }, {"name":"setCommitId","parameterTypes":["java.lang.String"] }, {"name":"setContactEmail","parameterTypes":["java.lang.String"] }, {"name":"setContentMaxFileSize","parameterTypes":["java.lang.Long"] }, {"name":"setContentUrl","parameterTypes":["java.lang.String"] }, {"name":"setDataExplorerAllowedWorkspaces","parameterTypes":["java.util.List"] }, {"name":"setEvalWorkspaceIds","parameterTypes":["java.util.List"] }, {"name":"setForgePrefix","parameterTypes":["java.lang.String"] }, {"name":"setGroundswellAllowedWorkspaces","parameterTypes":["java.util.List"] }, {"name":"setGroundswellEnabled","parameterTypes":["java.lang.Boolean"] }, {"name":"setHeartbeatInterval","parameterTypes":["java.lang.Integer"] }, {"name":"setLandingUrl","parameterTypes":["java.lang.String"] }, {"name":"setLoginPath","parameterTypes":["java.lang.String"] }, {"name":"setNavbar","parameterTypes":["io.seqera.tower.model.NavbarConfig"] }, {"name":"setSeqeraCloud","parameterTypes":["java.lang.Boolean"] }, {"name":"setTermsOfUseUrl","parameterTypes":["java.lang.String"] }, {"name":"setUserWorkspaceEnabled","parameterTypes":["java.lang.Boolean"] }, {"name":"setVersion","parameterTypes":["java.lang.String"] }, {"name":"setWaveAllowedWorkspaces","parameterTypes":["java.util.List"] }, {"name":"setWaveEnabled","parameterTypes":["java.lang.Boolean"] }] }, { "name":"io.seqera.tower.model.ServiceInfoResponse", @@ -2895,13 +3047,14 @@ "allDeclaredFields":true, "allDeclaredMethods":true, "allDeclaredConstructors":true, - "methods":[{"name":"","parameterTypes":[] }] + "methods":[{"name":"","parameterTypes":[] }, {"name":"getLaunch","parameterTypes":[] }] }, { "name":"io.seqera.tower.model.SubmitWorkflowLaunchResponse", "allDeclaredFields":true, "allDeclaredMethods":true, - "allDeclaredConstructors":true + "allDeclaredConstructors":true, + "methods":[{"name":"","parameterTypes":[] }, {"name":"setWorkflowId","parameterTypes":["java.lang.String"] }] }, { "name":"io.seqera.tower.model.Task", @@ -3084,7 +3237,7 @@ "allDeclaredFields":true, "queryAllDeclaredMethods":true, "queryAllDeclaredConstructors":true, - "methods":[{"name":"","parameterTypes":[] }, {"name":"setComputeEnv","parameterTypes":["io.seqera.tower.model.ComputeEnv"] }, {"name":"setConfigProfiles","parameterTypes":["java.util.List"] }, {"name":"setConfigText","parameterTypes":["java.lang.String"] }, {"name":"setDateCreated","parameterTypes":["java.time.OffsetDateTime"] }, {"name":"setEntryName","parameterTypes":["java.lang.String"] }, {"name":"setHeadJobCpus","parameterTypes":["java.lang.Integer"] }, {"name":"setHeadJobMemoryMb","parameterTypes":["java.lang.Integer"] }, {"name":"setId","parameterTypes":["java.lang.String"] }, {"name":"setMainScript","parameterTypes":["java.lang.String"] }, {"name":"setOptimizationId","parameterTypes":["java.lang.String"] }, {"name":"setOptimizationTargets","parameterTypes":["java.lang.String"] }, {"name":"setParamsText","parameterTypes":["java.lang.String"] }, {"name":"setPipeline","parameterTypes":["java.lang.String"] }, {"name":"setPipelineId","parameterTypes":["java.lang.Long"] }, {"name":"setPostRunScript","parameterTypes":["java.lang.String"] }, {"name":"setPreRunScript","parameterTypes":["java.lang.String"] }, {"name":"setPullLatest","parameterTypes":["java.lang.Boolean"] }, {"name":"setResume","parameterTypes":["java.lang.Boolean"] }, {"name":"setResumeCommitId","parameterTypes":["java.lang.String"] }, {"name":"setResumeDir","parameterTypes":["java.lang.String"] }, {"name":"setRevision","parameterTypes":["java.lang.String"] }, {"name":"setSchemaName","parameterTypes":["java.lang.String"] }, {"name":"setSessionId","parameterTypes":["java.lang.String"] }, {"name":"setStubRun","parameterTypes":["java.lang.Boolean"] }, {"name":"setTowerConfig","parameterTypes":["java.lang.String"] }, {"name":"setUserSecrets","parameterTypes":["java.util.List"] }, {"name":"setWorkDir","parameterTypes":["java.lang.String"] }, {"name":"setWorkspaceSecrets","parameterTypes":["java.util.List"] }] + "methods":[{"name":"","parameterTypes":[] }, {"name":"setComputeEnv","parameterTypes":["io.seqera.tower.model.ComputeEnvComputeConfig"] }, {"name":"setConfigProfiles","parameterTypes":["java.util.List"] }, {"name":"setConfigText","parameterTypes":["java.lang.String"] }, {"name":"setDateCreated","parameterTypes":["java.time.OffsetDateTime"] }, {"name":"setEntryName","parameterTypes":["java.lang.String"] }, {"name":"setHeadJobCpus","parameterTypes":["java.lang.Integer"] }, {"name":"setHeadJobMemoryMb","parameterTypes":["java.lang.Integer"] }, {"name":"setId","parameterTypes":["java.lang.String"] }, {"name":"setMainScript","parameterTypes":["java.lang.String"] }, {"name":"setOptimizationId","parameterTypes":["java.lang.String"] }, {"name":"setOptimizationTargets","parameterTypes":["java.lang.String"] }, {"name":"setParamsText","parameterTypes":["java.lang.String"] }, {"name":"setPipeline","parameterTypes":["java.lang.String"] }, {"name":"setPipelineId","parameterTypes":["java.lang.Long"] }, {"name":"setPostRunScript","parameterTypes":["java.lang.String"] }, {"name":"setPreRunScript","parameterTypes":["java.lang.String"] }, {"name":"setPullLatest","parameterTypes":["java.lang.Boolean"] }, {"name":"setResume","parameterTypes":["java.lang.Boolean"] }, {"name":"setResumeCommitId","parameterTypes":["java.lang.String"] }, {"name":"setResumeDir","parameterTypes":["java.lang.String"] }, {"name":"setRevision","parameterTypes":["java.lang.String"] }, {"name":"setSchemaName","parameterTypes":["java.lang.String"] }, {"name":"setSessionId","parameterTypes":["java.lang.String"] }, {"name":"setStubRun","parameterTypes":["java.lang.Boolean"] }, {"name":"setTowerConfig","parameterTypes":["java.lang.String"] }, {"name":"setUserSecrets","parameterTypes":["java.util.List"] }, {"name":"setWorkDir","parameterTypes":["java.lang.String"] }, {"name":"setWorkspaceSecrets","parameterTypes":["java.util.List"] }] }, { "name":"io.seqera.tower.model.WorkflowLoad", @@ -3439,6 +3592,10 @@ "name":"java.util.concurrent.atomic.AtomicBoolean", "fields":[{"name":"value"}] }, +{ + "name":"java.util.concurrent.atomic.AtomicReference", + "fields":[{"name":"value"}] +}, { "name":"java.util.concurrent.atomic.Striped64", "fields":[{"name":"base"}, {"name":"cellsBusy"}] diff --git a/conf/resource-config.json b/conf/resource-config.json index d7a04dc3..40c28728 100644 --- a/conf/resource-config.json +++ b/conf/resource-config.json @@ -2,16 +2,50 @@ "resources":{ "includes":[{ "pattern":"\\QMETA-INF/build-info.properties\\E" + }, { + "pattern":"\\QMETA-INF/services/java.lang.System$LoggerFinder\\E" + }, { + "pattern":"\\QMETA-INF/services/java.net.spi.InetAddressResolverProvider\\E" + }, { + "pattern":"\\QMETA-INF/services/java.net.spi.URLStreamHandlerProvider\\E" + }, { + "pattern":"\\QMETA-INF/services/java.time.zone.ZoneRulesProvider\\E" + }, { + "pattern":"\\QMETA-INF/services/java.util.spi.ResourceBundleControlProvider\\E" + }, { + "pattern":"\\QMETA-INF/services/javax.ws.rs.client.ClientBuilder\\E" + }, { + "pattern":"\\QMETA-INF/services/javax.ws.rs.ext.RuntimeDelegate\\E" }, { "pattern":"\\QMETA-INF/services/org.glassfish.hk2.extension.ServiceLocatorGenerator\\E" + }, { + "pattern":"\\QMETA-INF/services/org.glassfish.jersey.client.spi.ConnectorProvider\\E" + }, { + "pattern":"\\QMETA-INF/services/org.glassfish.jersey.client.spi.DefaultSslContextProvider\\E" }, { "pattern":"\\QMETA-INF/services/org.glassfish.jersey.internal.inject.InjectionManagerFactory\\E" }, { "pattern":"\\QMETA-INF/services/org.glassfish.jersey.internal.spi.AutoDiscoverable\\E" + }, { + "pattern":"\\QMETA-INF/services/org.glassfish.jersey.internal.spi.ForcedAutoDiscoverable\\E" + }, { + "pattern":"\\QMETA-INF/services/org.glassfish.jersey.spi.HeaderDelegateProvider\\E" + }, { + "pattern":"\\Qjersey-multipart-config.properties\\E" + }, { + "pattern":"\\Qjndi.properties\\E" + }, { + "pattern":"java.base:\\Qjdk/internal/icu/impl/data/icudt67b/nfc.nrm\\E" }, { "pattern":"java.base:\\Qjdk/internal/icu/impl/data/icudt67b/nfkc.nrm\\E" }, { "pattern":"java.base:\\Qjdk/internal/icu/impl/data/icudt67b/uprops.icu\\E" + }, { + "pattern":"java.base:\\Qjdk/internal/icu/impl/data/icudt72b/nfc.nrm\\E" + }, { + "pattern":"java.base:\\Qjdk/internal/icu/impl/data/icudt72b/nfkc.nrm\\E" + }, { + "pattern":"java.base:\\Qjdk/internal/icu/impl/data/icudt72b/uprops.icu\\E" }, { "pattern":"java.base:\\Qsun/net/idn/uidna.spp\\E" }, { diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index aa991fce..e1adfb49 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/jreleaser.yml b/jreleaser.yml index 85157e47..14e4617b 100644 --- a/jreleaser.yml +++ b/jreleaser.yml @@ -105,13 +105,4 @@ distributions: type: SINGLE_JAR artifacts: - path: "tw-jar/tw.jar" -packagers: - brew: - active: ALWAYS - continueOnError: false - multiPlatform: true - repository: - active: RELEASE - tagName: '{{distributionName}}-{{tagName}}' - branch: HEAD - commitMessage: '{{distributionName}} {{tagName}}' \ No newline at end of file + transform: "{{distributionName}}.jar" \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index f24ee2fd..ec3c5423 100644 --- a/settings.gradle +++ b/settings.gradle @@ -17,4 +17,11 @@ pluginManagement { } } +plugins { + // required to download the toolchain (jdk) from a remote repository + // https://github.com/gradle/foojay-toolchains + // https://docs.gradle.org/current/userguide/toolchains.html#sub:download_repositories + id("org.gradle.toolchains.foojay-resolver-convention") version "0.7.0" +} + rootProject.name = 'tower-cli' diff --git a/src/main/java/io/seqera/tower/cli/Tower.java b/src/main/java/io/seqera/tower/cli/Tower.java index a84b820d..ecfc0d65 100644 --- a/src/main/java/io/seqera/tower/cli/Tower.java +++ b/src/main/java/io/seqera/tower/cli/Tower.java @@ -26,6 +26,7 @@ import io.seqera.tower.cli.commands.CollaboratorsCmd; import io.seqera.tower.cli.commands.ComputeEnvsCmd; import io.seqera.tower.cli.commands.CredentialsCmd; +import io.seqera.tower.cli.commands.DataLinksCmd; import io.seqera.tower.cli.commands.DatasetsCmd; import io.seqera.tower.cli.commands.InfoCmd; import io.seqera.tower.cli.commands.LaunchCmd; @@ -58,6 +59,7 @@ CollaboratorsCmd.class, ComputeEnvsCmd.class, CredentialsCmd.class, + DataLinksCmd.class, DatasetsCmd.class, GenerateCompletion.class, InfoCmd.class, diff --git a/src/main/java/io/seqera/tower/cli/commands/AbstractApiCmd.java b/src/main/java/io/seqera/tower/cli/commands/AbstractApiCmd.java index 46a5dff2..b8436b54 100644 --- a/src/main/java/io/seqera/tower/cli/commands/AbstractApiCmd.java +++ b/src/main/java/io/seqera/tower/cli/commands/AbstractApiCmd.java @@ -31,8 +31,10 @@ import io.seqera.tower.cli.exceptions.WorkspaceNotFoundException; import io.seqera.tower.cli.responses.Response; import io.seqera.tower.model.ActionQueryAttribute; +import io.seqera.tower.model.ComputeEnvComputeConfig; import io.seqera.tower.model.ComputeEnvQueryAttribute; import io.seqera.tower.model.ComputeEnvResponseDto; +import io.seqera.tower.model.Credentials; import io.seqera.tower.model.ListComputeEnvsResponseEntry; import io.seqera.tower.model.ListWorkspacesAndOrgResponse; import io.seqera.tower.model.OrgAndWorkspaceDto; @@ -273,6 +275,27 @@ protected ComputeEnvResponseDto primaryComputeEnv(Long workspaceId) throws ApiEx return api().describeComputeEnv(primaryComputeEnvId, workspaceId, NO_CE_ATTRIBUTES).getComputeEnv(); } + protected String credentialsByRef(ComputeEnvComputeConfig.PlatformEnum type, Long wspId, String credentialsRef) throws ApiException { + List credentials = api().listCredentials(wspId, type == null ? null : type.getValue()).getCredentials(); + + if (credentials.isEmpty()) { + throw new TowerException("No valid credentials found at the workspace"); + } + + Credentials cred; + + cred = credentials.stream() + .filter(it -> Objects.equals(it.getId(), credentialsRef) || Objects.equals(it.getName(), credentialsRef)) + .findFirst() + .orElse(null); + + if (cred == null) { + throw new TowerException("No valid credentials found at the workspace"); + } + + return cred.getId(); + } + protected String serverUrl() { if (serverUrl == null) { serverUrl = app().url.replaceFirst("api\\.", "").replaceFirst("/api", ""); diff --git a/src/main/java/io/seqera/tower/cli/commands/DataLinksCmd.java b/src/main/java/io/seqera/tower/cli/commands/DataLinksCmd.java new file mode 100644 index 00000000..9150de9e --- /dev/null +++ b/src/main/java/io/seqera/tower/cli/commands/DataLinksCmd.java @@ -0,0 +1,39 @@ +/* + * Copyright 2021-2023, Seqera. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package io.seqera.tower.cli.commands; + +import io.seqera.tower.cli.commands.data.links.AddCmd; +import io.seqera.tower.cli.commands.data.links.DeleteCmd; +import io.seqera.tower.cli.commands.data.links.ListCmd; +import io.seqera.tower.cli.commands.data.links.UpdateCmd; +import io.seqera.tower.cli.commands.data.links.BrowseCmd; +import picocli.CommandLine; + +@CommandLine.Command( + name = "data-links", + description = "Manage data links.", + subcommands = { + ListCmd.class, + AddCmd.class, + DeleteCmd.class, + UpdateCmd.class, + BrowseCmd.class + } +) +public class DataLinksCmd extends AbstractRootCmd { +} diff --git a/src/main/java/io/seqera/tower/cli/commands/LaunchCmd.java b/src/main/java/io/seqera/tower/cli/commands/LaunchCmd.java index ecfbfdf6..7053b71d 100644 --- a/src/main/java/io/seqera/tower/cli/commands/LaunchCmd.java +++ b/src/main/java/io/seqera/tower/cli/commands/LaunchCmd.java @@ -104,6 +104,9 @@ public class LaunchCmd extends AbstractRootCmd { @Option(names = {"-l", "--labels"}, split = ",", description = "Comma-separated list of labels for the pipeline.") List labels; + @Option(names = {"--launch-container"}, description = "Container to be used to run the nextflow head job (BETA).") + String launchContainer; + @ArgGroup(heading = "%nAdvanced options:%n", validate = false) AdvancedOptions adv; @@ -161,11 +164,12 @@ private WorkflowLaunchRequest updateLaunchRequest(WorkflowLaunchRequest base) th .schemaName(coalesce(adv().schemaName, base.getSchemaName())) .pullLatest(coalesce(adv().pullLatest, base.getPullLatest())) .stubRun(coalesce(adv().stubRun, base.getStubRun())) - .optimizationId(base.getOptimizationId()) - .optimizationTargets(base.getOptimizationTargets()) + .optimizationId(coalesce(adv().disableOptimization, false) ? null : base.getOptimizationId()) + .optimizationTargets(coalesce(adv().disableOptimization, false) ? null : base.getOptimizationTargets()) .labelIds(base.getLabelIds()) .headJobCpus(base.getHeadJobCpus()) - .headJobMemoryMb(base.getHeadJobMemoryMb()); + .headJobMemoryMb(base.getHeadJobMemoryMb()) + .launchContainer(launchContainer); } protected Response runTowerPipeline(Long wspId) throws ApiException, IOException { @@ -245,7 +249,7 @@ protected Integer onBeforeExit(int exitCode, Response response) { private WorkflowStatus checkWorkflowStatus(String workflowId, Long workspaceId) { try { - return api().describeWorkflow(workflowId, workspaceId, Collections.emptyList()).getWorkflow().getStatus(); + return api().describeWorkflow(workflowId, workspaceId, NO_WORKFLOW_ATTRIBUTES).getWorkflow().getStatus(); } catch (ApiException | NullPointerException e) { return null; } @@ -373,6 +377,9 @@ public static class AdvancedOptions { @Option(names = {"--workspace-secrets"}, split = ",", description = "Pipeline Secrets required by the pipeline execution. Those secrets must be defined in the launching workspace.") public List workspaceSecrets; + @Option(names = {"--disable-optimization"}, description = "Turn off the optimization for the pipeline before launching.") + public Boolean disableOptimization; + } } diff --git a/src/main/java/io/seqera/tower/cli/commands/computeenvs/ExportCmd.java b/src/main/java/io/seqera/tower/cli/commands/computeenvs/ExportCmd.java index bdc1c6e6..21a7279b 100644 --- a/src/main/java/io/seqera/tower/cli/commands/computeenvs/ExportCmd.java +++ b/src/main/java/io/seqera/tower/cli/commands/computeenvs/ExportCmd.java @@ -27,7 +27,8 @@ import io.seqera.tower.cli.shared.ComputeEnvExportFormat; import io.seqera.tower.cli.utils.FilesHelper; import io.seqera.tower.model.AwsBatchConfig; -import io.seqera.tower.model.ComputeEnv; +import io.seqera.tower.model.ComputeEnvComputeConfig; +import io.seqera.tower.model.ComputeEnvComputeConfig.PlatformEnum; import io.seqera.tower.model.ComputeEnvResponseDto; import picocli.CommandLine; @@ -49,14 +50,14 @@ public class ExportCmd extends AbstractComputeEnvCmd { @Override protected Response exec() throws ApiException { Long wspId = workspaceId(workspace.workspace); - + ComputeEnvResponseDto ce = fetchComputeEnv(computeEnvRefOptions, wspId); - ComputeEnv computeEnv = new ComputeEnv(); + ComputeEnvComputeConfig computeEnv = new ComputeEnvComputeConfig(); computeEnv.setDescription(ce.getDescription()); computeEnv.setCredentialsId(ce.getCredentialsId()); computeEnv.setMessage(ce.getMessage()); - computeEnv.setPlatform(ce.getPlatform() != null ? ComputeEnv.PlatformEnum.fromValue(ce.getPlatform().getValue()) : null); + computeEnv.setPlatform(ce.getPlatform() != null ? PlatformEnum.fromValue(ce.getPlatform().getValue()) : null); computeEnv.setConfig(ce.getConfig()); // Remove forged resources diff --git a/src/main/java/io/seqera/tower/cli/commands/computeenvs/ImportCmd.java b/src/main/java/io/seqera/tower/cli/commands/computeenvs/ImportCmd.java index a198a307..9e5c37eb 100644 --- a/src/main/java/io/seqera/tower/cli/commands/computeenvs/ImportCmd.java +++ b/src/main/java/io/seqera/tower/cli/commands/computeenvs/ImportCmd.java @@ -25,7 +25,7 @@ import io.seqera.tower.cli.responses.Response; import io.seqera.tower.cli.shared.ComputeEnvExportFormat; import io.seqera.tower.cli.utils.FilesHelper; -import io.seqera.tower.model.ComputeEnv; +import io.seqera.tower.model.ComputeEnvComputeConfig.PlatformEnum; import io.seqera.tower.model.ComputeEnvResponseDto; import picocli.CommandLine; @@ -50,7 +50,7 @@ protected Response exec() throws ApiException, IOException { ComputeEnvExportFormat ceData = ComputeEnvExportFormat.deserialize(FilesHelper.readString(fileName)); - ComputeEnv.PlatformEnum platform = ComputeEnv.PlatformEnum.fromValue(ceData.getConfig().getDiscriminator()); + PlatformEnum platform = PlatformEnum.fromValue(ceData.getConfig().getDiscriminator()); Long wspId = workspaceId(workspace.workspace); diff --git a/src/main/java/io/seqera/tower/cli/commands/computeenvs/add/AbstractAddCmd.java b/src/main/java/io/seqera/tower/cli/commands/computeenvs/add/AbstractAddCmd.java index 75a1ccd5..8878edf0 100644 --- a/src/main/java/io/seqera/tower/cli/commands/computeenvs/add/AbstractAddCmd.java +++ b/src/main/java/io/seqera/tower/cli/commands/computeenvs/add/AbstractAddCmd.java @@ -28,7 +28,8 @@ import io.seqera.tower.cli.responses.Response; import io.seqera.tower.cli.responses.computeenvs.ComputeEnvAdded; import io.seqera.tower.model.ComputeConfig; -import io.seqera.tower.model.ComputeEnv; +import io.seqera.tower.model.ComputeEnvComputeConfig; +import io.seqera.tower.model.ComputeEnvComputeConfig.PlatformEnum; import io.seqera.tower.model.ComputeEnvStatus; import io.seqera.tower.model.CreateComputeEnvRequest; import io.seqera.tower.model.CreateComputeEnvResponse; @@ -100,11 +101,11 @@ private ComputeEnvStatus checkComputeEnvStatus(String computeEnvId, Long workspa } } - protected ComputeEnvAdded addComputeEnv(ComputeEnv.PlatformEnum platform, ComputeConfig config) throws ApiException { + protected ComputeEnvAdded addComputeEnv(PlatformEnum platform, ComputeConfig config) throws ApiException { return addComputeEnvWithLabels(platform, config, labels); } - protected ComputeEnvAdded addComputeEnvWithLabels(ComputeEnv.PlatformEnum platform, ComputeConfig config, List