From 6783c552ae23ecf2dcf39c25924abc1f46e10fe3 Mon Sep 17 00:00:00 2001 From: Michael Sverdlov Date: Sun, 14 Apr 2024 18:14:37 +0300 Subject: [PATCH 01/57] Fix docs (#110) --- .../artifactory-gradle-plugin.md | 4 +- .../ci-integrations/github-actions.md | 6 +- .../gitlab-templates-for-jfrog.md | 2 +- .../maven-artifactory-plugin.md | 14 +- .../authentication.md | 10 +- .../build-integration.md | 38 +- .../curl-integration.md | 2 +- .../environment-variables.md | 28 +- .../generic-files.md | 266 ++++++------- .../cli-for-jfrog-artifactory/git-lfs.md | 2 +- .../managing-configuration-entities.md | 28 +- .../package-managers-integration.md | 356 +++++++++--------- .../verifying-artifactory-accessibility.md | 2 +- .../jfrog-cli/cli-for-jfrog-cloud-transfer.md | 6 +- .../jfrog-cli/cli-for-jfrog-curation.md | 2 +- .../jfrog-cli/cli-for-jfrog-distribution.md | 10 +- .../jfrog-cli/cli-for-jfrog-pipelines.md | 12 +- .../cli-for-jfrog-security/README.md | 2 +- .../scan-published-builds.md | 2 +- .../scan-your-binaries.md | 4 +- .../scan-your-source-code.md | 6 +- .../jfrog-cli/cli-plugins/README.md | 2 +- .../jfrog-cli/cli-plugins/developer-guide.md | 2 +- 23 files changed, 405 insertions(+), 401 deletions(-) diff --git a/jfrog-applications/ci-and-sdks/ci-integrations/artifactory-gradle-plugin.md b/jfrog-applications/ci-and-sdks/ci-integrations/artifactory-gradle-plugin.md index 801b338..2ce5346 100644 --- a/jfrog-applications/ci-and-sdks/ci-integrations/artifactory-gradle-plugin.md +++ b/jfrog-applications/ci-and-sdks/ci-integrations/artifactory-gradle-plugin.md @@ -23,8 +23,8 @@ The plugin adds the `artifactoryPublish` task for each project, in the 'publishi * The below convention attributes have been removed: | Attribute | Migration action | - | :-------: | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | - | parent | No longer supported. | + |:---------:|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| + | parent | No longer supported. | | resolve | To define the Artifactory resolution repositories for your build, declare the repositories under the repositories section as described [here](https://docs.gradle.org/current/userguide/declaring\_repositories.html#declaring-repositories). | diff --git a/jfrog-applications/ci-and-sdks/ci-integrations/github-actions.md b/jfrog-applications/ci-and-sdks/ci-integrations/github-actions.md index 7b7ca45..13e828e 100644 --- a/jfrog-applications/ci-and-sdks/ci-integrations/github-actions.md +++ b/jfrog-applications/ci-and-sdks/ci-integrations/github-actions.md @@ -6,7 +6,7 @@ This GitHub Action downloads, installs and configures JFrog CLI, so that it can In addition, the Action includes the following features, when using JFrog CLI to work with JFrog Platform. -* The connection details of the JFrog platform used by JFrog CLI can be stored as secrets. Read more about it [here](broken-reference). +* The connection details of the JFrog platform used by JFrog CLI can be stored as secrets. * There's no need to add the _build name_ and _build number_ options and arguments to commands which accept them. All build related operations will be automatically recorded with the _Workflow Name_ as build name and _Run Number_ as build number. ## Usage @@ -52,7 +52,7 @@ You can use these environment variables in your workflow as follows: ``` | Important: If both Config Token(JF\_ENV\_\*) and separate environment variables(JF\_URL, ...) are provided, the default config will be the Config Token. To make the above separate environment variables as the default config use `jf c use setup-jfrog-cli-server` | -| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| #### Storing the connection details using single Config Token @@ -93,7 +93,7 @@ If you have multiple Config Tokens as secrets, you can use all of them in the wo ``` | Important: When exposing more than one JFrog configuration to the Action, you should always add the `jf c use` command to specify the server to use. | -| ---------------------------------------------------------------------------------------------------------------------------------------------------- | +|------------------------------------------------------------------------------------------------------------------------------------------------------| ### Setting the build name and build number when publishing build-info to Artifactory diff --git a/jfrog-applications/ci-and-sdks/ci-integrations/gitlab-templates-for-jfrog.md b/jfrog-applications/ci-and-sdks/ci-integrations/gitlab-templates-for-jfrog.md index e79db5f..04be35d 100644 --- a/jfrog-applications/ci-and-sdks/ci-integrations/gitlab-templates-for-jfrog.md +++ b/jfrog-applications/ci-and-sdks/ci-integrations/gitlab-templates-for-jfrog.md @@ -89,7 +89,7 @@ As shown in the above [Including the Script](broken-reference) and [Referencing Configurations can be done via Project Settings > CI/CD > Variables: | Variable | Usage | -| -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +|----------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | JF\_DOCKER\_REGISTRY | Docker registry in Artifactory. For more info, see [Getting Started with Artifactory as a Docker Registry](https://www.jfrog.com/confluence/display/JFROG/Getting+Started+with+Artifactory+as+a+Docker+Registry) | | JFROG\_CLI\_BUILD\_PROJECT | JFrog project key to be used by commands which expect build name and build number. Determines the project of the published build. | | JFROG\_CLI\_VERSION | Use a specific JFrog CLI version instead of the latest version. The minimal version allowed is: 2.17.0 | diff --git a/jfrog-applications/ci-and-sdks/ci-integrations/maven-artifactory-plugin.md b/jfrog-applications/ci-and-sdks/ci-integrations/maven-artifactory-plugin.md index dab31eb..9e9ed46 100644 --- a/jfrog-applications/ci-and-sdks/ci-integrations/maven-artifactory-plugin.md +++ b/jfrog-applications/ci-and-sdks/ci-integrations/maven-artifactory-plugin.md @@ -50,7 +50,7 @@ A typical build plugin configuration would be as follows: ``` -The plugin's invocation phase is validate by default and we recommend you don't change it so the plugin is called as early as possible in the lifecycle of your Maven build. +The plugin's invocation phase is validate by default, and we recommend you don't change it so the plugin is called as early as possible in the lifecycle of your Maven build. #### Full Configuration @@ -114,13 +114,13 @@ However, the Maven Artifactory Plugin provides many other configurations: #### Configuration Details -| Configuration | Description | -| :------------------: | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Configuration | Description | +|:--------------------:|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | `` | Specifies properties you can attach to published artifacts. For example: prop-value. | -| `` | Specifies whether environment variables are published as part of BuildInfo metadata and which include or exclude patterns are applied when variables are collected | -| `` | Defines an Artifactory repository where build artifacts should be published using a combination of a `` and `/`. Build artifacts are deployed if the deploy goal is executed and only after all modules are built. | -| `` | Updates BuildInfo metadata published together with build artifacts. You can configure whether or not BuildInfo metadata is published using the configuration. | -| `` | Specifies HTTP/S proxy. | +| `` | Specifies whether environment variables are published as part of BuildInfo metadata and which include or exclude patterns are applied when variables are collected | +| `` | Defines an Artifactory repository where build artifacts should be published using a combination of a `` and `/`. Build artifacts are deployed if the deploy goal is executed and only after all modules are built. | +| `` | Updates BuildInfo metadata published together with build artifacts. You can configure whether or not BuildInfo metadata is published using the configuration. | +| `` | Specifies HTTP/S proxy. | #### Reading Environment Variables and System Properties diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/authentication.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/authentication.md index dd1d685..22f7f3d 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/authentication.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/authentication.md @@ -7,19 +7,19 @@ When used with Artifactory, JFrog CLI offers several means of authentication: JF To authenticate yourself using your JFrog login credentials, either configure your credentials once using the **jf c add** command or provide the following option to each command. | Command option | Description | -| -------------- | --------------------------------------------------------------------- | +|----------------|-----------------------------------------------------------------------| | --url | JFrog Artifactory API endpoint URL. It usually ends with /artifactory | | --user | JFrog username | | --password | JFrog password or API key | -For enhanced security, when JFrog CLI is configured to use a username and password / API key, it automatically generates an access token to authenticate with Artifactory. The generated access token is valid for one hour only. JFrog CLI automatically refreshed the token before it expires. The **jfrog c add** command allows disabling this functionality. This feature is currently not supported by commands which use external tools or package managers or work with JFrog Distribution. +For enhanced security, when JFrog CLI is configured to use a username and password / API key, it automatically generates an access token to authenticate with Artifactory. The generated access token is valid for one hour only. JFrog CLI automatically refreshed the token before it expires. The **jf c add** command allows disabling this functionality. This feature is currently not supported by commands which use external tools or package managers or work with JFrog Distribution. ## Authenticating with an Access Token To authenticate yourself using an Artifactory Access Token, either configure your Access Token once using the **jf c add** command or provide the following option to each command. | Command option | Description | -| -------------- | --------------------------------------------------------------------- | +|----------------|-----------------------------------------------------------------------| | --url | JFrog Artifactory API endpoint URL. It usually ends with /artifactory | | --access-token | JFrog access token | @@ -39,7 +39,7 @@ From version 4.4, Artifactory supports SSH authentication using RSA public and p * Configure your Artifactory URL to have the following format: `ssh://[host]:[port]` There are two ways to do this: * For each command, use the `--url` command option. - * Specify the Artifactory URL in the correct format using the **jfrog c add** command. + * Specify the Artifactory URL in the correct format using the **jf c add** command. *** @@ -52,7 +52,7 @@ From version 4.4, Artifactory supports SSH authentication using RSA public and p *** * Configure the path to your SSH key file. There are two ways to do this: * For each command, use the `--ssh-key-path` command option. - * Specify the path using the **jfrog c add** command. + * Specify the path using the **jf c add** command. ## Authenticating using Client Certificates (mTLS) diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/build-integration.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/build-integration.md index d358dcb..259cc07 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/build-integration.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/build-integration.md @@ -43,7 +43,7 @@ Environment variables are collected using the `build-collect-env` (`bce`) comman The following table lists the command arguments and flags: | | | -| ----------------- | ------------------------------------------- | +|-------------------|---------------------------------------------| | Command name | rt build-collect-env | | Abbreviation | rt bce | | Command options | | @@ -92,18 +92,18 @@ The following table lists the command arguments and flags: #### Configuration file properties -| | | -| ----------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Property name | Description | -| Version | The schema version is intended for internal use. Do not change! | +| | | +|-------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Property name | Description | +| Version | The schema version is intended for internal use. Do not change! | | serverID |

Artifactory server ID configured by the 'jf config' command. The command uses this server for fetching details about previous published builds. The --server-id command option, if provided, overrides the serverID value.
If both the serverID property and the --server-id command options are not provided, the default server, configured by the 'jf config' command is used.

| -| trackerName | The name (type) of the issue tracking system. For example, JIRA. This property can take any value. | -| regexp |

A regular expression used for matching the git commit messages. The expression should include two capturing groups - for the issue key (ID) and the issue summary. In the example above, the regular expression matches the commit messages as displayed in the following example:

HAP-1007 - This is a sample issue

| -| keyGroupIndex |

The capturing group index in the regular expression used for retrieving the issue key. In the example above, setting the index to "1" retrieves HAP-1007 from this commit message:

HAP-1007 - This is a sample issue

| -| summaryGroupIndex |

The capturing group index in the regular expression for retrieving the issue summary. In the example above, setting the index to "2" retrieves the sample issue from this commit message:

HAP-1007 - This is a sample issue

| -| trackerUrl | The issue tracking URL. This value is used for constructing a direct link to the issues in the Artifactory build UI. | -| aggregate | Set to true, if you wish all builds to include issues from previous builds. | -| aggregationStatus | If aggregate is set to true, this property indicates how far in time should the issues be aggregated. In the above example, issues will be aggregated from previous builds, until a build with a RELEASE status is found. Build statuses are set when a build is promoted using the **jf rt build-promote** command. | +| trackerName | The name (type) of the issue tracking system. For example, JIRA. This property can take any value. | +| regexp |

A regular expression used for matching the git commit messages. The expression should include two capturing groups - for the issue key (ID) and the issue summary. In the example above, the regular expression matches the commit messages as displayed in the following example:

HAP-1007 - This is a sample issue

| +| keyGroupIndex |

The capturing group index in the regular expression used for retrieving the issue key. In the example above, setting the index to "1" retrieves HAP-1007 from this commit message:

HAP-1007 - This is a sample issue

| +| summaryGroupIndex |

The capturing group index in the regular expression for retrieving the issue summary. In the example above, setting the index to "2" retrieves the sample issue from this commit message:

HAP-1007 - This is a sample issue

| +| trackerUrl | The issue tracking URL. This value is used for constructing a direct link to the issues in the Artifactory build UI. | +| aggregate | Set to true, if you wish all builds to include issues from previous builds. | +| aggregationStatus | If aggregate is set to true, this property indicates how far in time should the issues be aggregated. In the above example, issues will be aggregated from previous builds, until a build with a RELEASE status is found. Build statuses are set when a build is promoted using the **jf rt build-promote** command. | #### Example @@ -139,7 +139,7 @@ By default, the command collects the files from the local file system. If you'd #### Commands Params | | | -| ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +|-------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command name | rt build-add-dependencies | | Abbreviation | rt bad | | Command options |

Warning

When using the * or ; characters in the command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| @@ -194,7 +194,7 @@ jf rt bp my-build-name 18 ### Commands Params | | | -| ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +|-------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command name | rt build-publish | | Abbreviation | rt bp | | Command options | | @@ -254,7 +254,7 @@ The way to do this is by using the **build-append** command. Running this comman Now, when downloading the artifacts of the "master" build, you'll actually be downloading the artifacts of all of its referenced builds. The examples below demonstrates this, | | | -| ---------------------- | --------------------------------------------------------- | +|------------------------|-----------------------------------------------------------| | Command name | rt build-append | | Abbreviation | rt ba | | Command options | This command has no options. | @@ -299,7 +299,7 @@ This command is used to [promote build](https://jfrog.com/knowledge-base/how-doe ### Commands Params | | | -| ---------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | +|------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------| | Command name | rt build-promote | | Abbreviation | rt bpr | | Command options | | @@ -320,7 +320,7 @@ This command is used to [promote build](https://jfrog.com/knowledge-base/how-doe ### Example -This example involves moving the artifacts associated with the published build-info, identified by the build name 'my-build-name' and build number '18', from their existing Artifactory repository to a new Artifactory repository called 'target-repository'." +This example involves moving the artifacts associated with the published build-info, identified by the build name 'my-build-name' and build number '18', from their existing Artifactory repository to a new Artifactory repository called 'target-repository'. ``` jf rt bpr my-build-name 18 target-repository @@ -335,7 +335,7 @@ Build-info is accumulated by the CLI according to the commands you apply until y The following table lists the command arguments and flags: | | | -| ----------------- | ---------------------------------- | +|-------------------|------------------------------------| | Command name | rt build-clean | | Abbreviation | rt bc | | Command options | The command has no options. | @@ -361,7 +361,7 @@ This command is used to discard builds previously published to Artifactory using The following table lists the command arguments and flags: | | | -| ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------- | +|--------------------|----------------------------------------------------------------------------------------------------------------------------------------------| | Command name | rt build-discard | | Abbreviation | rt bdi | | Command options | | diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/curl-integration.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/curl-integration.md index d6681c8..352f122 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/curl-integration.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/curl-integration.md @@ -8,7 +8,7 @@ Execute a cUrl command, using the configured Artifactory details. The command ex ## Commands Params | | | | -| ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | - | +|--------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---| | Command name | rt curl | | | Abbreviation | rt cl | | | Command options | | | diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/environment-variables.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/environment-variables.md index 979e0b8..425bd93 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/environment-variables.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/environment-variables.md @@ -3,21 +3,21 @@ Some of the Artifactory commands make use of the following environment variable: -| | | -| -------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| **Variable Name** | **Description** | -| **JFROG\_CLI\_MIN\_CHECKSUM\_DEPLOY\_SIZE\_KB** |

[Default: 10]

Minimum file size in KB for which JFrog CLI performs checksum deploy optimization.

| +| | | +|----------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| **Variable Name** | **Description** | +| **JFROG\_CLI\_MIN\_CHECKSUM\_DEPLOY\_SIZE\_KB** |

[Default: 10]

Minimum file size in KB for which JFrog CLI performs checksum deploy optimization.

| | **JFROG\_CLI\_RELEASES\_REPO** |

Configured Artifactory repository name to download the jar needed by the mvn/gradle command.
This environment variable's value format should be <server ID configured by the 'jf c add' command>/<repo name>.
The repository should proxy https://releases.jfrog.io.
This environment variable is used by the 'jf mvn' and 'jf gradle' commands, and also by the 'jf audit' command, when used for maven or gradle projects.

| -| **JFROG\_CLI\_DEPENDENCIES\_DIR** |

[Default: $JFROG_CLI_HOME_DIR/dependencies]

Defines the directory to which JFrog CLI's internal dependencies are downloaded.

| -| **JFROG\_CLI\_REPORT\_USAGE** |

[Default: true]

Set to false to block JFrog CLI from sending usage statistics to Artifactory.

| -| **JFROG\_CLI\_SERVER\_ID** | Server ID configured using the config command, unless sent as a command argument or option. | -| **JFROG\_CLI\_BUILD\_NAME** | Build name to be used by commands which expect a build name, unless sent as a command argument or option. | -| **JFROG\_CLI\_BUILD\_NUMBER** | Build number to be used by commands which expect a build number, unless sent as a command argument or option. | -| **JFROG\_CLI\_BUILD\_PROJECT** | JFrog project key to be used by commands that expect build name and build number. Determines the project of the published build. | -| **JFROG\_CLI\_BUILD\_URL** | Sets the CI server build URL in the build-info. The "jf rt build-publish" command uses the value of this environment variable unless the --build-url command option is sent. | -| **JFROG\_CLI\_ENV\_EXCLUDE** |

[Default: *password*;*secret*;*key*;*token*]

List of case insensitive patterns in the form of "value1;value2;...". Environment variables match those patterns will be excluded. This environment variable is used by the "jf rt build-publish" command, in case the --env-exclude command option is not sent.

| -| **JFROG\_CLI\_TRANSITIVE\_DOWNLOAD\_EXPERIMENTAL** |

[Default: false]

Used by the "jf rt download" command. Set to true to download artifacts also from remote repositories. This feature is experimental and available on Artifactory version 7.17.0 or higher.

| -| **JFROG\_CLI\_UPLOAD\_EMPTY\_ARCHIVE** |

[Default: false]

Used by the "jf rt upload" command. Set to true if you'd like to upload an empty archive when '--archive' is set but all files were excluded by exclusions pattern.

| +| **JFROG\_CLI\_DEPENDENCIES\_DIR** |

[Default: $JFROG_CLI_HOME_DIR/dependencies]

Defines the directory to which JFrog CLI's internal dependencies are downloaded.

| +| **JFROG\_CLI\_REPORT\_USAGE** |

[Default: true]

Set to false to block JFrog CLI from sending usage statistics to Artifactory.

| +| **JFROG\_CLI\_SERVER\_ID** | Server ID configured using the config command, unless sent as a command argument or option. | +| **JFROG\_CLI\_BUILD\_NAME** | Build name to be used by commands which expect a build name, unless sent as a command argument or option. | +| **JFROG\_CLI\_BUILD\_NUMBER** | Build number to be used by commands which expect a build number, unless sent as a command argument or option. | +| **JFROG\_CLI\_BUILD\_PROJECT** | JFrog project key to be used by commands that expect build name and build number. Determines the project of the published build. | +| **JFROG\_CLI\_BUILD\_URL** | Sets the CI server build URL in the build-info. The "jf rt build-publish" command uses the value of this environment variable unless the --build-url command option is sent. | +| **JFROG\_CLI\_ENV\_EXCLUDE** |

[Default: *password*;*secret*;*key*;*token*]

List of case insensitive patterns in the form of "value1;value2;...". Environment variables match those patterns will be excluded. This environment variable is used by the "jf rt build-publish" command, in case the --env-exclude command option is not sent.

| +| **JFROG\_CLI\_TRANSITIVE\_DOWNLOAD\_EXPERIMENTAL** |

[Default: false]

Used by the "jf rt download" command. Set to true to download artifacts also from remote repositories. This feature is experimental and available on Artifactory version 7.17.0 or higher.

| +| **JFROG\_CLI\_UPLOAD\_EMPTY\_ARCHIVE** |

[Default: false]

Used by the "jf rt upload" command. Set to true if you'd like to upload an empty archive when '--archive' is set but all files were excluded by exclusions pattern.

| *** diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/generic-files.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/generic-files.md index 19aaa3b..fa355e1 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/generic-files.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/generic-files.md @@ -6,42 +6,42 @@ This command is used to upload files to Artifactory. ### Commands Params -| | | -| ------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Command name | rt upload | -| Abbreviation | rt u | -| Command options |

Warning

When using the * or ; characters in the upload command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| -| --archive |

[Optional]

Set to "zip" to pack and deploy the files to Artifactory inside a ZIP archive. Currently, the only packaging format supported is zip.

| -| --server-id |

[Optional]

Server ID configured using the jf c add command. If not specified, the default configured Artifactory server is used.

| +| | | +|--------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command name | rt upload | +| Abbreviation | rt u | +| Command options |

Warning

When using the * or ; characters in the upload command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| +| --archive |

[Optional]

Set to "zip" to pack and deploy the files to Artifactory inside a ZIP archive. Currently, the only packaging format supported is zip.

| +| --server-id |

[Optional]

Server ID configured using the jf c add command. If not specified, the default configured Artifactory server is used.

| | --spec |

[Optional]

Path to a file spec. For more details, please refer to Using File Specs.

| -| --spec-vars |

[Optional]

List of variables in the form of "key1=value1;key2=value2;..." to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| +| --spec-vars |

[Optional]

List of variables in the form of "key1=value1;key2=value2;..." to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| | --build-name |

[Optional]

Build name. For more details, please refer to Build Integration.

| | --build-number |

[Optional]

Build number. For more details, please refer to Build Integration.

| -| --project |

[Optional]

JFrog project key.

| -| --module |

[Optional]

Optional module name for the build-info.

| -| --target-props |

[Optional]

A list of Artifactory properties specified as "key=value" pairs separated by a semi-colon ( ; ) to be attached to the uploaded files. If any key can take several values, then each value is separated by a comma ( , ). For example, "key1=value1;key2=value21,value22;key3=value3".

| -| --deb |

[Optional]

Used for Debian packages only. Specifies the distribution/component/architecture of the package. If the the value for distribution, component or architecture include a slash. the slash should be escaped with a back-slash.

| +| --project |

[Optional]

JFrog project key.

| +| --module |

[Optional]

Optional module name for the build-info.

| +| --target-props |

[Optional]

A list of Artifactory properties specified as "key=value" pairs separated by a semi-colon ( ; ) to be attached to the uploaded files. If any key can take several values, then each value is separated by a comma ( , ). For example, "key1=value1;key2=value21,value22;key3=value3".

| +| --deb |

[Optional]

Used for Debian packages only. Specifies the distribution/component/architecture of the package. If the the value for distribution, component or architecture include a slash. the slash should be escaped with a back-slash.

| | --flat |

[Default: false]

If true, files are uploaded to the exact target path specified and their hierarchy in the source file system is ignored.

If false, files are uploaded to the target path while maintaining their file system hierarchy.

If Using Placeholders are used, the value of this option is ignored.

Note

JFrog CLI v1

In JFrog CLI v1, the default value of the --flat option is true.

| -| --recursive |

[Default: true]

If true, files are also collected from sub-folders of the source directory for upload .

If false, only files specifically in the source directory are uploaded.

| -| --regexp |

[Default: false]

If true, the command will interpret the first argument, which describes the local file-system path of artifacts to upload, as a regular expression.

If false, it will interpret the first argument as a wild-card expression.

The above also applies for the --exclusions option.

If you have specified that you are using regular expressions, then the beginning of the expression must be enclosed in parenthesis. For example: a/b/c/(.*)/file.zip

| -| --ant |

[Default: false]

If true, the command will interpret the first argument, which describes the local file-system path of artifacts to upload, as an ANT pattern.

If false, it will interpret the first argument as a wildcards expression.

The above also applies for the --exclusions option.

| -| --threads |

[Default: 3]

The number of parallel threads that should be used to upload where each thread uploads a single artifact at a time.

| -| --dry-run |

[Default: false]

If true, the command only indicates which artifacts would have been uploaded

If false, the command is fully executed and uploads artifacts as specified

| -| --symlinks |

[Default: false]

If true, the command will preserve the soft links structure in Artifactory. The symlink file representation will contain the symbolic link and checksum properties.

| -| --explode |

[Default: false]

If true, the command will extract an archive containing multiple artifacts after it is deployed to Artifactory, while maintaining the archive's file structure.

| -| --include-dirs |

[Default: false]

If true, the source path applies to bottom-chain directories and not only to files. Bottom-chain directories are either empty or do not include other directories that match the source path.

| -| --exclusions |

[Optional]

A list of Semicolon-separated exclude patterns. Allows using wildcards, regular expressions or ANT patterns, according to the value of the --regexp and --ant options. Please read the --regexp and --ant options description for more information.

| -| --sync-deletes |

[Optional]

Specific path in Artifactory, under which to sync artifacts after the upload. After the upload, this path will include only the artifacts uploaded during this upload operation. The other files under this path will be deleted.

| -| --quiet |

[Default: false]

If true, the delete confirmation message is skipped.

| -| --fail-no-op |

[Default: false]

Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| -| --retries |

[Default: 3]

Number of upload retries.

| -| --retry-wait-time |

[Default: 0s]

Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds.

| -| --detailed-summary |

[Default: false]

Set to true to include a list of the affected files as part of the command output summary.

| -| --insecure-tls |

[Default: false]

Set to true to skip TLS certificates verification.

| -| --min-split |

[Default: 200]

The minimum file size in MiB required to attempt a multi-part upload. This option, as well as the functionality of multi-part upload, requires Artifactory with S3 storage.

| -| --split-count |

[Default: 5]

The maximum number of parts that can be concurrently uploaded per file during a multi-part upload. Set to 0 to disable multi-part upload. This option, as well as the functionality of multi-part upload, requires Artifactory with S3 storage.

| -| Command arguments |

The command takes two arguments.

In case the --spec option is used, the commands accept no arguments.

| -| Source path | The first argument specifies the local file system path to artifacts that should be uploaded to Artifactory. You can specify multiple artifacts by using wildcards or a regular expression as designated by the **--regexp** command option. Please read the **--regexp** option description for more information. | +| --recursive |

[Default: true]

If true, files are also collected from sub-folders of the source directory for upload .

If false, only files specifically in the source directory are uploaded.

| +| --regexp |

[Default: false]

If true, the command will interpret the first argument, which describes the local file-system path of artifacts to upload, as a regular expression.

If false, it will interpret the first argument as a wild-card expression.

The above also applies for the --exclusions option.

If you have specified that you are using regular expressions, then the beginning of the expression must be enclosed in parenthesis. For example: a/b/c/(.*)/file.zip

| +| --ant |

[Default: false]

If true, the command will interpret the first argument, which describes the local file-system path of artifacts to upload, as an ANT pattern.

If false, it will interpret the first argument as a wildcards expression.

The above also applies for the --exclusions option.

| +| --threads |

[Default: 3]

The number of parallel threads that should be used to upload where each thread uploads a single artifact at a time.

| +| --dry-run |

[Default: false]

If true, the command only indicates which artifacts would have been uploaded

If false, the command is fully executed and uploads artifacts as specified

| +| --symlinks |

[Default: false]

If true, the command will preserve the soft links structure in Artifactory. The symlink file representation will contain the symbolic link and checksum properties.

| +| --explode |

[Default: false]

If true, the command will extract an archive containing multiple artifacts after it is deployed to Artifactory, while maintaining the archive's file structure.

| +| --include-dirs |

[Default: false]

If true, the source path applies to bottom-chain directories and not only to files. Bottom-chain directories are either empty or do not include other directories that match the source path.

| +| --exclusions |

[Optional]

A list of Semicolon-separated exclude patterns. Allows using wildcards, regular expressions or ANT patterns, according to the value of the --regexp and --ant options. Please read the --regexp and --ant options description for more information.

| +| --sync-deletes |

[Optional]

Specific path in Artifactory, under which to sync artifacts after the upload. After the upload, this path will include only the artifacts uploaded during this upload operation. The other files under this path will be deleted.

| +| --quiet |

[Default: false]

If true, the delete confirmation message is skipped.

| +| --fail-no-op |

[Default: false]

Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| +| --retries |

[Default: 3]

Number of upload retries.

| +| --retry-wait-time |

[Default: 0s]

Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds.

| +| --detailed-summary |

[Default: false]

Set to true to include a list of the affected files as part of the command output summary.

| +| --insecure-tls |

[Default: false]

Set to true to skip TLS certificates verification.

| +| --min-split |

[Default: 200]

The minimum file size in MiB required to attempt a multi-part upload. This option, as well as the functionality of multi-part upload, requires Artifactory with S3 storage.

| +| --split-count |

[Default: 5]

The maximum number of parts that can be concurrently uploaded per file during a multi-part upload. Set to 0 to disable multi-part upload. This option, as well as the functionality of multi-part upload, requires Artifactory with S3 storage.

| +| Command arguments |

The command takes two arguments.

In case the --spec option is used, the commands accept no arguments.

| +| Source path | The first argument specifies the local file system path to artifacts that should be uploaded to Artifactory. You can specify multiple artifacts by using wildcards or a regular expression as designated by the **--regexp** command option. Please read the **--regexp** option description for more information. | | Target path |

The second argument specifies the target path in Artifactory in the following format: [repository name]/[repository path]

If the target path ends with a slash, the path is assumed to be a folder. For example, if you specify the target as "repo-name/a/b/", then "b" is assumed to be a folder in Artifactory into which files should be uploaded. If there is no terminal slash, the target path is assumed to be a file to which the uploaded file should be renamed. For example, if you specify the target as "repo-name/a/b", the uploaded file is renamed to "b" in Artifactory.

For flexibility in specifying the upload path, you can include placeholders in the form of {1}, {2} which are replaced by corresponding tokens in the source path that are enclosed in parenthesis. For more details, please refer to Using Placeholders.

| ### Examples @@ -71,7 +71,7 @@ jf rt u "build/*.zip" my-local-repo/zipFiles/ --sync-deletes="my-local-repo/zipF #### Example 4 -Collect all files located under the **build** directory (including subdirectories), and upload them to the \*\*my-release-local \*\*repository, under the **files** folder, while maintaining the original names of the artifacts. Exclude (do not upload) files, which include **install** as part of their path, and have the **pack** extension. This example uses a wildcard pattern. See **Example 5**, which uses regular expressions instead. +Collect all files located under the **build** directory (including subdirectories), and upload them to the **my-release-local** repository, under the **files** folder, while maintaining the original names of the artifacts. Exclude (do not upload) files, which include **install** as part of their path, and have the **pack** extension. This example uses a wildcard pattern. See **Example 5**, which uses regular expressions instead. ``` jf rt u "build/" my-release-local/files/ --exclusions="\*install\*pack*" @@ -111,49 +111,49 @@ This command is used to download files from Artifactory. ### Commands Params -| | | -| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| Command name | rt download | -| Abbreviation | rt dl | -| Command options |

Warning

When using the * or ; characters in the download command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| -| --server-id |

[Optional]

Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| -| --build-name |

[Optional]

Build name. For more details, please refer to Build Integration.

| -| --build-number |

[Optional]

Build number. For more details, please refer to Build Integration.

| -| --project |

[Optional]

JFrog project key.

| -| --module |

[Optional]

Optional module name for the build-info.

| -| --spec |

[Optional]

Path to a file spec. For more details, please refer to Using File Specs.

| -| --spec-vars |

[Optional]

List of variables in the form of "key1=value1;key2=value2;..." to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| -| --props |

[Optional]

A list of Artifactory properties specified as "key=value" pairs separated by a semi-colon (for example, "key1=value1;key2=value2;key3=value3"). Only artifacts with all of the specified properties names and values will be downloaded.

| -| --exclude-props |

[Optional]

A list of Artifactory properties specified as "key=value" pairs separated by a semi-colon (for example, "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be downloaded.

| -| --build |

[Optional]

If specified, only artifacts of the specified build are matched. The property format is build-name/build-number. If you do not specify the build number, the artifacts are filtered by the latest build number.

| -| --bundle |

[Optional]

If specified, only artifacts of the specified bundle are matched. The value format is bundle-name/bundle-version.

| -| --flat |

[Default: false]

If true, artifacts are downloaded to the exact target path specified and their hierarchy in the source repository is ignored.

If false, artifacts are downloaded to the target path in the file system while maintaining their hierarchy in the source repository.

If Using Placeholders are used, and you would like the local file system (download path) to be determined by placeholders only, or in other words, avoid concatenating the Artifactory folder hierarchy local, set to false.

| -| --recursive |

[Default: true]

If true, artifacts are also downloaded from sub-paths under the specified path in the source repository.

If false, only artifacts in the specified source path directory are downloaded.

| -| --threads |

[Default: 3]

The number of parallel threads that should be used to download where each thread downloads a single artifact at a time.

| -| --split-count |

[Default: 3]

The number of segments into which each file should be split for download (provided the artifact is over --min-split in size). To download each file in a single thread, set to 0.

| -| --retries |

[Default: 3]

Number of download retries.

| -| --retry-wait-time |

[Default: 0s]

Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds.

| -| --min-split |

[Default: 5120]

The minimum size permitted for splitting. Files larger than the specified number will be split into equally sized --split-count segments. Any files smaller than the specified number will be downloaded in a single thread. If set to -1, files are not split.

| -| --dry-run |

[Default: false]

If true, the command only indicates which artifacts would have been downloaded.

If false, the command is fully executed and downloads artifacts as specified.

| -| --explode |

[Default: false]

Set to true to extract an archive after it is downloaded from Artifactory.

Supported compression formats: br, bz2, gz, lz4, sz, xz, zstd.

Supported archive formats: zip, tar (including any compressed variants like tar.gz), rar.

| -| --bypass-archive-inspection |

[Default: false]

Set to true to bypass the archive security inspection before it is unarchived. Used with the 'explode' option.

| -| --validate-symlinks |

[Default: false]

If true, the command will validate that symlinks are pointing to existing and unchanged files, by comparing their sha1. Applicable to files and not directories.

| -| --include-dirs |

[Default: false]

If true, the source path applies to bottom-chain directories and not only to files. Bottom-chain directories are either empty or do not include other directories that match the source path.

| -| --exclusions | A list of Semicolon-separated exclude patterns. Allows using wildcards. | -| --sync-deletes |

[Optional]

Specific path in the local file system, under which to sync dependencies after the download. After the download, this path will include only the dependencies downloaded during this download operation. The other files under this path will be deleted.

| -| --quiet |

[Default: false]

If true, the delete confirmation message is skipped.

| -| --sort-by |

[Optional]

A list of semicolon-separated fields to sort by. The fields must be part of the 'items' AQL domain. For more information read the AQL documentation

| -| --sort-order |

[Default: asc]

The order by which fields in the 'sort-by' option should be sorted. Accepts 'asc' or 'desc'.

| -| --limit |

[Optional]

The maximum number of items to fetch. Usually used with the 'sort-by' option.

| -| --offset |

[Optional]

The offset from which to fetch items (i.e. how many items should be skipped). Usually used with the 'sort-by' option.

| -| --fail-no-op |

[Default: false]

Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| -| --archive-entries |

[Optional]

If specified, only archive artifacts containing entries matching this pattern are matched. You can use wildcards to specify multiple artifacts.

| -| --detailed-summary |

[Default: false]

Set to true to include a list of the affected files as part of the command output summary.

| -| --insecure-tls |

[Default: false]

Set to true to skip TLS certificates verification.

| -| --gpg-key |

[Optional]

Path to the public GPG key file located on the file system, used to validate downloaded release bundle files.

| -| Command arguments | | -| Source path | Specifies the source path in Artifactory, from which the artifacts should be downloaded. You can use wildcards to specify multiple artifacts. | -| Target path |

The second argument is optional and specifies the local file system target path.

If the target path ends with a slash, the path is assumed to be a directory. For example, if you specify the target as "repo-name/a/b/", then "b" is assumed to be a directory into which files should be downloaded. If there is no terminal slash, the target path is assumed to be a file to which the downloaded file should be renamed. For example, if you specify the target as "a/b", the downloaded file is renamed to "b".

For flexibility in specifying the target path, you can include placeholders in the form of {1}, {2} which are replaced by corresponding tokens in the source path that are enclosed in parenthesis. For more details, please refer to Using Placeholders.

| +| | | +|-----------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command name | rt download | +| Abbreviation | rt dl | +| Command options |

Warning

When using the * or ; characters in the download command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| +| --server-id |

[Optional]

Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| +| --build-name |

[Optional]

Build name. For more details, please refer to Build Integration.

| +| --build-number |

[Optional]

Build number. For more details, please refer to Build Integration.

| +| --project |

[Optional]

JFrog project key.

| +| --module |

[Optional]

Optional module name for the build-info.

| +| --spec |

[Optional]

Path to a file spec. For more details, please refer to Using File Specs.

| +| --spec-vars |

[Optional]

List of variables in the form of "key1=value1;key2=value2;..." to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| +| --props |

[Optional]

A list of Artifactory properties specified as "key=value" pairs separated by a semi-colon (for example, "key1=value1;key2=value2;key3=value3"). Only artifacts with all of the specified properties names and values will be downloaded.

| +| --exclude-props |

[Optional]

A list of Artifactory properties specified as "key=value" pairs separated by a semi-colon (for example, "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be downloaded.

| +| --build |

[Optional]

If specified, only artifacts of the specified build are matched. The property format is build-name/build-number. If you do not specify the build number, the artifacts are filtered by the latest build number.

| +| --bundle |

[Optional]

If specified, only artifacts of the specified bundle are matched. The value format is bundle-name/bundle-version.

| +| --flat |

[Default: false]

If true, artifacts are downloaded to the exact target path specified and their hierarchy in the source repository is ignored.

If false, artifacts are downloaded to the target path in the file system while maintaining their hierarchy in the source repository.

If Using Placeholders are used, and you would like the local file system (download path) to be determined by placeholders only, or in other words, avoid concatenating the Artifactory folder hierarchy local, set to false.

| +| --recursive |

[Default: true]

If true, artifacts are also downloaded from sub-paths under the specified path in the source repository.

If false, only artifacts in the specified source path directory are downloaded.

| +| --threads |

[Default: 3]

The number of parallel threads that should be used to download where each thread downloads a single artifact at a time.

| +| --split-count |

[Default: 3]

The number of segments into which each file should be split for download (provided the artifact is over --min-split in size). To download each file in a single thread, set to 0.

| +| --retries |

[Default: 3]

Number of download retries.

| +| --retry-wait-time |

[Default: 0s]

Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds.

| +| --min-split |

[Default: 5120]

The minimum size permitted for splitting. Files larger than the specified number will be split into equally sized --split-count segments. Any files smaller than the specified number will be downloaded in a single thread. If set to -1, files are not split.

| +| --dry-run |

[Default: false]

If true, the command only indicates which artifacts would have been downloaded.

If false, the command is fully executed and downloads artifacts as specified.

| +| --explode |

[Default: false]

Set to true to extract an archive after it is downloaded from Artifactory.

Supported compression formats: br, bz2, gz, lz4, sz, xz, zstd.

Supported archive formats: zip, tar (including any compressed variants like tar.gz), rar.

| +| --bypass-archive-inspection |

[Default: false]

Set to true to bypass the archive security inspection before it is unarchived. Used with the 'explode' option.

| +| --validate-symlinks |

[Default: false]

If true, the command will validate that symlinks are pointing to existing and unchanged files, by comparing their sha1. Applicable to files and not directories.

| +| --include-dirs |

[Default: false]

If true, the source path applies to bottom-chain directories and not only to files. Bottom-chain directories are either empty or do not include other directories that match the source path.

| +| --exclusions | A list of Semicolon-separated exclude patterns. Allows using wildcards. | +| --sync-deletes |

[Optional]

Specific path in the local file system, under which to sync dependencies after the download. After the download, this path will include only the dependencies downloaded during this download operation. The other files under this path will be deleted.

| +| --quiet |

[Default: false]

If true, the delete confirmation message is skipped.

| +| --sort-by |

[Optional]

A list of semicolon-separated fields to sort by. The fields must be part of the 'items' AQL domain. For more information read the AQL documentation

| +| --sort-order |

[Default: asc]

The order by which fields in the 'sort-by' option should be sorted. Accepts 'asc' or 'desc'.

| +| --limit |

[Optional]

The maximum number of items to fetch. Usually used with the 'sort-by' option.

| +| --offset |

[Optional]

The offset from which to fetch items (i.e. how many items should be skipped). Usually used with the 'sort-by' option.

| +| --fail-no-op |

[Default: false]

Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| +| --archive-entries |

[Optional]

If specified, only archive artifacts containing entries matching this pattern are matched. You can use wildcards to specify multiple artifacts.

| +| --detailed-summary |

[Default: false]

Set to true to include a list of the affected files as part of the command output summary.

| +| --insecure-tls |

[Default: false]

Set to true to skip TLS certificates verification.

| +| --gpg-key |

[Optional]

Path to the public GPG key file located on the file system, used to validate downloaded release bundle files.

| +| Command arguments | | +| Source path | Specifies the source path in Artifactory, from which the artifacts should be downloaded. You can use wildcards to specify multiple artifacts. | +| Target path |

The second argument is optional and specifies the local file system target path.

If the target path ends with a slash, the path is assumed to be a directory. For example, if you specify the target as "repo-name/a/b/", then "b" is assumed to be a directory into which files should be downloaded. If there is no terminal slash, the target path is assumed to be a file to which the downloaded file should be renamed. For example, if you specify the target as "a/b", the downloaded file is renamed to "b".

For flexibility in specifying the target path, you can include placeholders in the form of {1}, {2} which are replaced by corresponding tokens in the source path that are enclosed in parenthesis. For more details, please refer to Using Placeholders.

| ### Examples #### Example 1 @@ -194,33 +194,33 @@ This command is used to copy files in Artifactory ### Commands Params -| | | -| ----------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Command name | rt copy | -| Abbreviation | rt cp | -| Command options |

Warning

When using the * or ; characters in the copy command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| -| --server-id |

[Optional]

Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| +| | | +|-------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command name | rt copy | +| Abbreviation | rt cp | +| Command options |

Warning

When using the * or ; characters in the copy command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| +| --server-id |

[Optional]

Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| | --spec |

[Optional]

Path to a file spec. For more details, please refer to Using File Specs.

| -| --props |

[Optional]

A list of Artifactory properties specified as "key=value" pairs separated by a semi-colon. (For example, "key1=value1;key2=value2;key3=value3"). Only artifacts with these properties names and values will be copied.

| -| --exclude-props |

[Optional]

A list of Artifactory properties specified as "key=value" pairs separated by a semi-colon (for example, "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be copied.

| -| --build |

[Optional]

If specified, only artifacts of the specified build are matched. The property format is build-name/build-number. If you do not specify the build number, the artifacts are filtered by the latest build number.

| -| --bundle |

[Optional]

If specified, only artifacts of the specified bundle are matched. The value format is bundle-name/bundle-version.

| -| --flat |

[Default: false]

If true, artifacts are copied to the exact target path specified and their hierarchy in the source path is ignored.

If false, artifacts are copied to the target path while maintaining their source path hierarchy.

| -| --recursive |

[Default: true]

If true, artifacts are also copied from sub-paths under the specified source path.

If false, only artifacts in the specified source path directory are copied.

| -| --dry-run |

[Default: false]

If true, the command only indicates which artifacts would have been copied.

If false, the command is fully executed and copies artifacts as specified.

| -| --exclusions | A list of Semicolon-separated exclude patterns. Allows using wildcards. | -| --threads |

[Default: 3]

Number of threads used for copying the items.

| -| --sort-by |

[Optional]

A list of semicolon-separated fields to sort by. The fields must be part of the 'items' AQL domain. For more information read the AQL documentation

| -| --sort-order |

[Default: asc]

The order by which fields in the 'sort-by' option should be sorted. Accepts 'asc' or 'desc'.

| -| --limit |

[Optional]

The maximum number of items to fetch. Usually used with the 'sort-by' option.

| -| --offset |

[Optional]

The offset from which to fetch items (i.e. how many items should be skipped). Usually used with the 'sort-by' option.

| -| --fail-no-op |

[Default: false]

Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| -| --archive-entries |

[Optional]

If specified, only archive artifacts containing entries matching this pattern are matched. You can use wildcards to specify multiple artifacts.

| -| --insecure-tls |

[Default: false]

Set to true to skip TLS certificates verification.

| -| --retries |

[Default: 3]

Number for HTTP retry attempts.

| -| --retry-wait-time |

[Default: 0s]

Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds.

| -| Command arguments | The command takes two arguments | -| Source path | Specifies the source path in Artifactory, from which the artifacts should be copied, in the following format: `[repository name]/[repository path].` You can use wildcards to specify multiple artifacts. | +| --props |

[Optional]

A list of Artifactory properties specified as "key=value" pairs separated by a semi-colon. (For example, "key1=value1;key2=value2;key3=value3"). Only artifacts with these properties names and values will be copied.

| +| --exclude-props |

[Optional]

A list of Artifactory properties specified as "key=value" pairs separated by a semi-colon (for example, "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be copied.

| +| --build |

[Optional]

If specified, only artifacts of the specified build are matched. The property format is build-name/build-number. If you do not specify the build number, the artifacts are filtered by the latest build number.

| +| --bundle |

[Optional]

If specified, only artifacts of the specified bundle are matched. The value format is bundle-name/bundle-version.

| +| --flat |

[Default: false]

If true, artifacts are copied to the exact target path specified and their hierarchy in the source path is ignored.

If false, artifacts are copied to the target path while maintaining their source path hierarchy.

| +| --recursive |

[Default: true]

If true, artifacts are also copied from sub-paths under the specified source path.

If false, only artifacts in the specified source path directory are copied.

| +| --dry-run |

[Default: false]

If true, the command only indicates which artifacts would have been copied.

If false, the command is fully executed and copies artifacts as specified.

| +| --exclusions | A list of Semicolon-separated exclude patterns. Allows using wildcards. | +| --threads |

[Default: 3]

Number of threads used for copying the items.

| +| --sort-by |

[Optional]

A list of semicolon-separated fields to sort by. The fields must be part of the 'items' AQL domain. For more information read the AQL documentation

| +| --sort-order |

[Default: asc]

The order by which fields in the 'sort-by' option should be sorted. Accepts 'asc' or 'desc'.

| +| --limit |

[Optional]

The maximum number of items to fetch. Usually used with the 'sort-by' option.

| +| --offset |

[Optional]

The offset from which to fetch items (i.e. how many items should be skipped). Usually used with the 'sort-by' option.

| +| --fail-no-op |

[Default: false]

Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| +| --archive-entries |

[Optional]

If specified, only archive artifacts containing entries matching this pattern are matched. You can use wildcards to specify multiple artifacts.

| +| --insecure-tls |

[Default: false]

Set to true to skip TLS certificates verification.

| +| --retries |

[Default: 3]

Number for HTTP retry attempts.

| +| --retry-wait-time |

[Default: 0s]

Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds.

| +| Command arguments | The command takes two arguments | +| Source path | Specifies the source path in Artifactory, from which the artifacts should be copied, in the following format: `[repository name]/[repository path].` You can use wildcards to specify multiple artifacts. | | Target path |

Specifies the target path in Artifactory, to which the artifacts should be copied, in the following format: [repository name]/[repository path]

If the pattern ends with a slash, the target path is assumed to be a folder. For example, if you specify the target as "repo-name/a/b/", then "b" is assumed to be a folder in Artifactory into which files should be copied. If there is no terminal slash, the target path is assumed to be a file to which the copied file should be renamed. For example, if you specify the target as "repo-name/a/b", the copied file is renamed to "b" in Artifactory.

For flexibility in specifying the target path, you can include placeholders in the form of {1}, {2} which are replaced by corresponding tokens in the source path that are enclosed in parenthesis. For more details, please refer to Using Placeholders.

| ### Examples @@ -254,33 +254,33 @@ This command is used to move files in Artifactory ### Commands Params -| | | -| ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Command name | rt move | -| Abbreviation | rt mv | -| Command options |

Warning

When using the * or ; characters in the copy command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| -| --server-id |

[Optional]

Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| +| | | +|-------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command name | rt move | +| Abbreviation | rt mv | +| Command options |

Warning

When using the * or ; characters in the copy command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| +| --server-id |

[Optional]

Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| | --spec |

[Optional]

Path to a file spec. For more details, please refer to Using File Specs.

| -| --props |

[Optional]

A list of Artifactory properties specified as "key=value" pairs separated by a semi-colon (for example, "key1=value1;key2=value2;key3=value3"). Only artifacts with these properties names and values will be moved.

| -| --exclude-props |

[Optional]

A list of Artifactory properties specified as "key=value" pairs separated by a semi-colon (for example, "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be moved.

| -| --build |

[Optional]

If specified, only artifacts of the specified build are matched. The property format is build-name/build-number. If you do not specify the build number, the artifacts are filtered by the latest build number.

| -| --bundle |

[Optional]

If specified, only artifacts of the specified bundle are matched. The value format is bundle-name/bundle-version.

| -| --flat |

[Default: false]

If true, artifacts are moved to the exact target path specified and their hierarchy in the source path is ignored.

If false, artifacts are moved to the target path while maintaining their source path hierarchy.

| -| --recursive |

[Default: true]

If true, artifacts are also moved from sub-paths under the specified source path.

If false, only artifacts in the specified source path directory are moved.

| -| --dry-run |

[Default: false]

If true, the command only indicates which artifacts would have been moved.

If false, the command is fully executed and downloads artifacts as specified.

| -| --exclusions | A list of Semicolon-separated exclude patterns. Allows using wildcards. | -| --threads |

[Default: 3]

Number of threads used for moving the items.

| -| --sort-by |

[Optional]

A list of semicolon-separated fields to sort by. The fields must be part of the 'items' AQL domain. For more information read the AQL documentation

| -| --sort-order |

[Default: asc]

The order by which fields in the 'sort-by' option should be sorted. Accepts 'asc' or 'desc'.

| -| --limit |

[Optional]

The maximum number of items to fetch. Usually used with the 'sort-by' option.

| -| --offset |

[Optional]

The offset from which to fetch items (i.e. how many items should be skipped). Usually used with the 'sort-by' option.

| -| --fail-no-op |

[Default: false]

Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| -| --archive-entries |

[Optional]

If specified, only archive artifacts containing entries matching this pattern are matched. You can use wildcards to specify multiple artifacts.

| -| --insecure-tls |

[Default: false]

Set to true to skip TLS certificates verification.

| -| --retries |

[Default: 3]

Number of HTTP retry attempts.

| -| --retry-wait-time |

[Default: 0s]

Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds.

| -| Command arguments | The command takes two arguments | -| Source path | Specifies the source path in Artifactory, from which the artifacts should be moved, in the following format: `[repository name]/[repository path].` You can use wildcards to specify multiple artifacts. | +| --props |

[Optional]

A list of Artifactory properties specified as "key=value" pairs separated by a semi-colon (for example, "key1=value1;key2=value2;key3=value3"). Only artifacts with these properties names and values will be moved.

| +| --exclude-props |

[Optional]

A list of Artifactory properties specified as "key=value" pairs separated by a semi-colon (for example, "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be moved.

| +| --build |

[Optional]

If specified, only artifacts of the specified build are matched. The property format is build-name/build-number. If you do not specify the build number, the artifacts are filtered by the latest build number.

| +| --bundle |

[Optional]

If specified, only artifacts of the specified bundle are matched. The value format is bundle-name/bundle-version.

| +| --flat |

[Default: false]

If true, artifacts are moved to the exact target path specified and their hierarchy in the source path is ignored.

If false, artifacts are moved to the target path while maintaining their source path hierarchy.

| +| --recursive |

[Default: true]

If true, artifacts are also moved from sub-paths under the specified source path.

If false, only artifacts in the specified source path directory are moved.

| +| --dry-run |

[Default: false]

If true, the command only indicates which artifacts would have been moved.

If false, the command is fully executed and downloads artifacts as specified.

| +| --exclusions | A list of Semicolon-separated exclude patterns. Allows using wildcards. | +| --threads |

[Default: 3]

Number of threads used for moving the items.

| +| --sort-by |

[Optional]

A list of semicolon-separated fields to sort by. The fields must be part of the 'items' AQL domain. For more information read the AQL documentation

| +| --sort-order |

[Default: asc]

The order by which fields in the 'sort-by' option should be sorted. Accepts 'asc' or 'desc'.

| +| --limit |

[Optional]

The maximum number of items to fetch. Usually used with the 'sort-by' option.

| +| --offset |

[Optional]

The offset from which to fetch items (i.e. how many items should be skipped). Usually used with the 'sort-by' option.

| +| --fail-no-op |

[Default: false]

Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| +| --archive-entries |

[Optional]

If specified, only archive artifacts containing entries matching this pattern are matched. You can use wildcards to specify multiple artifacts.

| +| --insecure-tls |

[Default: false]

Set to true to skip TLS certificates verification.

| +| --retries |

[Default: 3]

Number of HTTP retry attempts.

| +| --retry-wait-time |

[Default: 0s]

Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds.

| +| Command arguments | The command takes two arguments | +| Source path | Specifies the source path in Artifactory, from which the artifacts should be moved, in the following format: `[repository name]/[repository path].` You can use wildcards to specify multiple artifacts. | | Target path |

Specifies the target path in Artifactory, to which the artifacts should be moved, in the following format: [repository name]/[repository path]

If the pattern ends with a slash, the target path is assumed to be a folder. For example, if you specify the target as "repo-name/a/b/", then "b" is assumed to be a folder in Artifactory into which files should be moved. If there is no terminal slash, the target path is assumed to be a file to which the moved file should be renamed. For example, if you specify the target as "repo-name/a/b", the moved file is renamed to "b" in Artifactory.

For flexibility in specifying the upload path, you can include placeholders in the form of {1}, {2} which are replaced by corresponding tokens in the source path that are enclosed in parenthesis. For more details, please refer to Using Placeholders.

| ### Examples @@ -315,12 +315,12 @@ This command is used to delete files in Artifactory ### Commands Params | | | -| ----------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +|-------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command name | rt delete | | Abbreviation | rt del | | Command options |

Warning

When using the * or ; characters in the delete command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| | --server-id |

[Optional]

Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| -| --spec |

[Optional]

Path to a file spec. For more details, please refer to Using File Specs.

| +| --spec |

[Optional]

Path to a file spec. For more details, please refer to Using File Specs.

| | --props |

[Optional]

A list of Artifactory properties specified as "key=value" pairs separated by a semi-colon (for example, "key1=value1;key2=value2;key3=value3"). Only artifacts with these properties names and values will be deleted.

| | --exclude-props |

[Optional]

A list of Artifactory properties specified as "key=value" pairs separated by a semi-colon (for example, "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be deleted.

| | --build |

[Optional]

If specified, only artifacts of the specified build are matched. The property format is build-name/build-number. If you do not specify the build number, the artifacts are filtered by the latest build number.

| @@ -366,7 +366,7 @@ This command is used to search and display files in Artifactory. ### Commands Params | | | -| ----------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +|-------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command name | rt search | | Abbreviation | rt s | | Command options |

Warning

When using the * or ; characters in the command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| @@ -427,7 +427,7 @@ This command is used for setting properties on existing files in Artifactory. ### Commands Params | | | -| ----------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +|-------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command name | rt set-props | | Abbreviation | rt sp | | Command options |

Warning

When using the * or ; characters in the command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| @@ -479,7 +479,7 @@ This command is used for deleting properties from existing files in Artifactory. ### Commands Params | | | -| ----------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +|-------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command name | rt delete-props | | Abbreviation | rt delp | | Command options |

Warning

When using the * or ; characters in the command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/git-lfs.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/git-lfs.md index 5f65a61..a5176d9 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/git-lfs.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/git-lfs.md @@ -6,7 +6,7 @@ This command is used to clean up files from a Git LFS repository. This deletes a ## Commands Params | | | -| ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | +|-------------------|----------------------------------------------------------------------------------------------------------------------------------------------| | Command name | rt git-lfs-clean | | Abbreviation | rt glc | | Command options | | diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/managing-configuration-entities.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/managing-configuration-entities.md index eb03c6f..be8c0a6 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/managing-configuration-entities.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/managing-configuration-entities.md @@ -20,7 +20,7 @@ The CSV can include additional columns, with different headers, which will be ig ### Commands Params | | | -| ----------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | +|-------------------|-------------------------------------------------------------------------------------------------------------------------------------------------| | Command-name | rt users-create | | Abbreviation | rt uc | | Command options | | @@ -56,7 +56,7 @@ The CSV can include additional columns, with different headers, which will be ig ### Commands Params | | | -| ----------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +|-------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command-name | rt users-delete | | Abbreviation | rt udel | | Command options | | @@ -89,7 +89,7 @@ This command creates a new users group. ### Commands Params | | | -| ----------------- | ----------------------------------------------------------------------------------- | +|-------------------|-------------------------------------------------------------------------------------| | Command-name | rt group-create | | Abbreviation | rt gc | | Command options | | @@ -112,7 +112,7 @@ This command adds a list fo existing users to a group. ### Commands Params | | | -| ----------------- | ----------------------------------------------------------------------------------- | +|-------------------|-------------------------------------------------------------------------------------| | Command-name | rt group-add-users | | Abbreviation | rt gau | | Command options | | @@ -136,7 +136,7 @@ This command deletes a group. ### Commands Params | | | -| ----------------- | ----------------------------------------------------------------------------------- | +|-------------------|-------------------------------------------------------------------------------------| | Command-name | rt group-delete | | Abbreviation | rt gdel | | Command options | | @@ -165,7 +165,7 @@ When using this command to create the template, you can also provide replaceable #### Commands Params | | | -| ----------------- | ------------------------------------------------------------------------------------------------------------- | +|-------------------|---------------------------------------------------------------------------------------------------------------| | Command-name | rt repo-template | | Abbreviation | rt rpt | | Command options | The command has no options. | @@ -199,7 +199,7 @@ These two commands create a new repository and updates an existing a repository. #### Commands Params | | | -| ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +|-------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command-name | rt repo-create / rt repo-update | | Abbreviation | rt rc / rt ru | | Command options | | @@ -240,7 +240,7 @@ This command permanently deletes a repository, including all of its content. #### Commands Params | | | -| ----------------- | ---------------------------------------------------------------------------------------------------------- | +|-------------------|------------------------------------------------------------------------------------------------------------| | Command name | rt repo-delete | | Abbreviation | rt rdel | | Command options | | @@ -270,7 +270,7 @@ When using this command to create the template, you can also provide replaceable #### Commands Params | | | -| ----------------- | ------------------------------------------------------------------------------------------------------------- | +|-------------------|---------------------------------------------------------------------------------------------------------------| | Command-name | rt replication-template | | Abbreviation | rt rplt | | Command options | The command has no options. | @@ -303,7 +303,7 @@ This command creates a new replication job for a repository. The command accepts #### Commands Params | | | -| ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +|-------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command-name | replication-create | | Abbreviation | rt rplc | | Command options | | @@ -336,7 +336,7 @@ This command permanently deletes a replication jobs from a repository. #### Commands Params | | | -| ----------------- | ----------------------------------------------------------------------------------- | +|-------------------|-------------------------------------------------------------------------------------| | Command name | rt replication-delete | | Abbreviation | rt rpldel | | Command options | | @@ -362,7 +362,7 @@ JFrog CLI offers commands creating, updating and deleting permission targets in This command creates a configuration template file, which should be used as an argument for the **jf rt permission-target-create** and **jf rt permission-target-update** commands. | | | -| ----------------- | ------------------------------------------------------------------------------------------------------------- | +|-------------------|---------------------------------------------------------------------------------------------------------------| | Command-name | rt permission-target-template | | Abbreviation | rt ptt | | Command options | The command has no options. | @@ -374,7 +374,7 @@ This command creates a configuration template file, which should be used as an a This command creates a new permission target. The command accepts as an argument a configuration template, which can be created by the **jf rt permission-target-template** command. The template also supports variables, which can be replaced with values, provided when it is used. | | | -| ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +|-------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command-name | permission-target-create / permission-target-update | | Abbreviation | rt ptc / rt ptu | | Command options | | @@ -388,7 +388,7 @@ This command creates a new permission target. The command accepts as an argument This command permanently deletes a permission target. | | | -| ---------------------- | ----------------------------------------------------------------------------------- | +|------------------------|-------------------------------------------------------------------------------------| | Command name | rt permission-target-delete | | Abbreviation | rt ptdel | | Command options | | diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/package-managers-integration.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/package-managers-integration.md index 6c28041..8ad38c0 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/package-managers-integration.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/package-managers-integration.md @@ -6,11 +6,11 @@ JFrog CLI includes integration with Maven, allowing you to resolve dependencies ### Setting maven repositories -Before using the **mvn** command, the project needs to be pre-configured with the Artifactory server and repositories, to be used for building and publishing the project. The **mvn-config** command should be used once to add the configuration to the project. The command should run while inside the root directory of the project. The configuration is stored by the command in the **.jfrog** directory at the root directory of the project. +Before using the **jf mvn** command, the project needs to be pre-configured with the Artifactory server and repositories, to be used for building and publishing the project. The **jf mvn-config** command should be used once to add the configuration to the project. The command should run while inside the root directory of the project. The configuration is stored by the command in the **.jfrog** directory at the root directory of the project. | | | -| ------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +|--------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command-name | mvn-config | | Abbreviation | mvnc | | Command options | | @@ -31,7 +31,7 @@ Before using the **mvn** command, the project needs to be pre-configured with th The **mvn** command triggers the maven client, while resolving dependencies and deploying artifacts from and to Artifactory. -> **Note**: Before running the **mvn** command on a project for the first time, the project should be configured with the **mvn-config** command. +> **Note**: Before running the **mvn** command on a project for the first time, the project should be configured with the **jf mvn-config** command. > **Note**: If the machine running JFrog CLI has no access to the internet, make sure to read the [Downloading the Maven and Gradle Extractor JARs](https://docs.jfrog-applications.jfrog.io/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory#downloading-the-maven-and-gradle-extractor-jars) section. @@ -39,17 +39,17 @@ The **mvn** command triggers the maven client, while resolving dependencies and The following table lists the command arguments and flags: -| | | -| ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Command-name | mvn | -| Abbreviation | mvn | -| Command options | | -| --threads |

[Default: 3]

Number of threads for uploading build artifacts.

| +| | | +|-------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | mvn | +| Abbreviation | mvn | +| Command options | | +| --threads |

[Default: 3]

Number of threads for uploading build artifacts.

| | --build-name |

[Optional]

Build name. For more details, please refer to Build Integration.

| | --build-number |

[Optional]

Build number. For more details, please refer to Build Integration.

| -| --project |

[Optional]

JFrog project key.

| -| --insecure-tls |

[Default: false]

Set to true to skip TLS certificates verification.

| -| Command arguments | The command accepts the same arguments and options as the mvn client. | +| --project |

[Optional]

JFrog project key.

| +| --insecure-tls |

[Default: false]

Set to true to skip TLS certificates verification.

| +| Command arguments | The command accepts the same arguments and options as the mvn client. | #### Deploying Maven Artifacts @@ -73,7 +73,7 @@ JFrog CLI includes integration with Gradle, allowing you to resolve dependencies Before using the **gradle** command, the project needs to be pre-configured with the Artifactory server and repositories, to be used for building and publishing the project. The **gradle-config** command should be used once to add the configuration to the project. The command should run while inside the root directory of the project. The configuration is stored by the command in the\*\*.jfrog\*\* directory at the root directory of the project. | | | -| ----------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +|-------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command-name | gradle-config | | Abbreviation | gradlec | | Command options | | @@ -94,9 +94,9 @@ Before using the **gradle** command, the project needs to be pre-configured with ### Running gradle -The **gradle** command triggers the gradle client, while resolving dependencies and deploying artifacts from and to Artifactory. +The **jf gradle** command triggers the gradle client, while resolving dependencies and deploying artifacts from and to Artifactory. -> **Note**: Before running the **gradle** command on a project for the first time, the project should be configured with the **gradle-config** command. +> **Note**: Before running the **jf gradle** command on a project for the first time, the project should be configured with the **jf gradle-config** command. > **Note**: If the machine running JFrog CLI has no access to the internet, make sure to read the[Downloading the Maven and Gradle Extractor JARs](https://docs.jfrog-applications.jfrog.io/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory#downloading-the-maven-and-gradle-extractor-jars)section. @@ -104,16 +104,16 @@ The **gradle** command triggers the gradle client, while resolving dependencies The following table lists the command arguments and flags: -| | | -| ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Command-name | gradle | -| Abbreviation | gradle | -| Command options | | -| --threads |

[Default: 3]

Number of threads for uploading build artifacts.

| +| | | +|-------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | gradle | +| Abbreviation | gradle | +| Command options | | +| --threads |

[Default: 3]

Number of threads for uploading build artifacts.

| | --build-name |

[Optional]

Build name. For more details, please refer to Build Integration.

| | --build-number |

[Optional]

Build number. For more details, please refer to Build Integration.

| -| --project |

[Optional]

JFrog project key.

| -| Command arguments | The command accepts the same arguments and options as the gradle client. | +| --project |

[Optional]

JFrog project key.

| +| Command arguments | The command accepts the same arguments and options as the gradle client. | #### Example @@ -130,7 +130,7 @@ For integrating with Maven and Gradle, JFrog CLI uses the build-info-extractor j If you're using JFrog CLI on a machine which has no access to the internet, you can configure JFrog CLI to download these jar files from an Artifactory instance. Here's how to configure Artifactory and JFrog CLI to download the jars files. 1. Create a remote Maven repository in Artifactory and name it **extractors**. When creating the repository, configure it to proxy [https://releases.jfrog.io/artifactory/oss-release-local](https://releases.jfrog.io/artifactory/oss-release-local) -2. Make sure that this Artifactory server is known to JFrog CLI, using the [jfrog c show](https://docs.jfrog-applications.jfrog.io/jfrog-applications/jfrog-cli/configurations/jfrog-platform-configuration#showing-the-configured-servers) command. If not, configure it using the [jfrog c add](https://jfrog.com/help/r/jfrog-cli/Adding-and-Editing-Configured-Servers) command. +2. Make sure that this Artifactory server is known to JFrog CLI, using the [jf c show](https://docs.jfrog-applications.jfrog.io/jfrog-applications/jfrog-cli/configurations/jfrog-platform-configuration#showing-the-configured-servers) command. If not, configure it using the [jf c add](https://jfrog.com/help/r/jfrog-cli/Adding-and-Editing-Configured-Servers) command. 3. Set the **JFROG\_CLI\_EXTRACTORS\_REMOTE** environment variable with the server ID of the Artifactory server you configured, followed by a slash, and then the name of the repository you created. For example _**my-rt-server/extractors**_ ## Running Builds with MSBuild @@ -166,61 +166,61 @@ Check out our [docker project examples on GitHub](https://github.com/jfrog/proje ### Pulling Docker Images Using the Docker Client -Running **docker-pull** command allows pulling docker images from Artifactory, while collecting the build-info and storing it locally, so that it can be later published to Artifactory, using the [build-publish](https://docs.jfrog-applications.jfrog.io/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory#publishing-build-info) command. +Running **jf docker pull** command allows pulling docker images from Artifactory, while collecting the build-info and storing it locally, so that it can be later published to Artifactory, using the [build-publish](https://docs.jfrog-applications.jfrog.io/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory#publishing-build-info) command. #### Commands Params The following table lists the command arguments and flags: -| | | -| ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Command-name | docker pull | -| Abbreviation | dpl | -| Command options | | -| --server-id |

[Optional]

Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| +| | | +|-------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | docker pull | +| Abbreviation | dpl | +| Command options | | +| --server-id |

[Optional]

Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| | --build-name |

[Optional]

Build name. For more details, please refer to Build Integration.

| | --build-number |

[Optional]

Build number. For more details, please refer to Build Integration.

| -| --project |

[Optional]

JFrog project key.

| -| --module |

[Optional]

Optional module name for the build-info.

| -| --skip-login |

[Default: false]

Set to true if you'd like the command to skip performing docker login.

| -| Command arguments | The same arguments and options supported by the docker client/ | +| --project |

[Optional]

JFrog project key.

| +| --module |

[Optional]

Optional module name for the build-info.

| +| --skip-login |

[Default: false]

Set to true if you'd like the command to skip performing docker login.

| +| Command arguments | The same arguments and options supported by the docker client/ | #### Example -The subsequent command utilizes the docker client to pull the 'my-docker-registry.io/my-docker-image:latest' image from Artifactory. This operation logs the image layers as dependencies of the local build-info identified by the build name 'my-build-name' and build number '7'. This local build-info can subsequently be released to Artifactory using the command 'jf rt bp my-build-name 7'." +The subsequent command utilizes the docker client to pull the 'my-docker-registry.io/my-docker-image:latest' image from Artifactory. This operation logs the image layers as dependencies of the local build-info identified by the build name 'my-build-name' and build number '7'. This local build-info can subsequently be released to Artifactory using the command 'jf rt bp my-build-name 7'. ``` jf docker pull my-docker-registry.io/my-docker-image:latest --build-name=my-build-name --build-number=7 ``` -You can then publish the build-info collected by the **docker-pull** command to Artifactory using the [build-publish](https://docs.jfrog-applications.jfrog.io/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory#publishing-build-info) command. +You can then publish the build-info collected by the **jf docker pull** command to Artifactory using the [build-publish](https://docs.jfrog-applications.jfrog.io/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory#publishing-build-info) command. ### Pushing Docker Images Using the Docker Client -After building your image using the docker client, the **docker-push** command pushes the image layers to Artifactory, while collecting the build-info and storing it locally, so that it can be later published to Artifactory, using the **build-publish** command. +After building your image using the docker client, the **jf docker push** command pushes the image layers to Artifactory, while collecting the build-info and storing it locally, so that it can be later published to Artifactory, using the **jf rt build-publish** command. #### Commands Params The following table lists the command arguments and flags: -| | | -| ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Command-name | docker push | -| Abbreviation | dp | -| Command options | | -| --server-id |

[Optional]

Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| +| | | +|--------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | docker push | +| Abbreviation | dp | +| Command options | | +| --server-id |

[Optional]

Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| | --build-name |

[Optional]

Build name. For more details, please refer to Build Integration.

| | --build-number |

[Optional]

Build number. For more details, please refer to Build Integration.

| -| --project |

[Optional]

JFrog project key.

| -| --module |

[Optional]

Optional module name for the build-info.

| -| --skip-login |

[Default: false]

Set to true if you'd like the command to skip performing docker login.

| -| --threads |

[Default: 3]

Number of working threads.

| -| --detailed-summary |

[Default: false]

Set true to include a list of the affected files as part of the command output summary.

| -| Command arguments | The same arguments and options supported by the docker client/ | +| --project |

[Optional]

JFrog project key.

| +| --module |

[Optional]

Optional module name for the build-info.

| +| --skip-login |

[Default: false]

Set to true if you'd like the command to skip performing docker login.

| +| --threads |

[Default: 3]

Number of working threads.

| +| --detailed-summary |

[Default: false]

Set true to include a list of the affected files as part of the command output summary.

| +| Command arguments | The same arguments and options supported by the docker client/ | #### Example -The subsequent command utilizes the docker client to push the 'my-docker-registry.io/my-docker-image:latest' image to Artifactory. This operation logs the image layers as artifacts of the local build-info identified by the build name 'my-build-name' and build number '7'. This local build-info can subsequently be released to Artifactory using the command 'jf rt bp my-build-name 7'." +The subsequent command utilizes the docker client to push the 'my-docker-registry.io/my-docker-image:latest' image to Artifactory. This operation logs the image layers as artifacts of the local build-info identified by the build name 'my-build-name' and build number '7'. This local build-info can subsequently be released to Artifactory using the command 'jf rt bp my-build-name 7'. ``` jf docker push my-docker-registry.io/my-docker-image:latest --build-name=my-build-name --build-number=7 @@ -230,30 +230,30 @@ You can then publish the build-info collected by the **docker-push** command to ### Pulling Docker Images Using Podman -[Podman](https://podman.io/) is a daemonless container engine for developing, managing, and running OCI Containers. Running the **podman-pull** command allows pulling docker images from Artifactory using podman, while collecting the build-info and storing it locally, so that it can be later published to Artifactory, using the [build-publish](https://docs.jfrog-applications.jfrog.io/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory#publishing-build-info) command. +[Podman](https://podman.io/) is a daemon-less container engine for developing, managing, and running OCI Containers. Running the **podman-pull** command allows pulling docker images from Artifactory using podman, while collecting the build-info and storing it locally, so that it can be later published to Artifactory, using the [build-publish](https://docs.jfrog-applications.jfrog.io/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory#publishing-build-info) command. #### Commands Params The following table lists the command arguments and flags: -| | | -| ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Command-name | rt podman-pull | -| Abbreviation | rt ppl | -| Command options | | -| --server-id |

[Optional]

Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| +| | | +|-------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | rt podman-pull | +| Abbreviation | rt ppl | +| Command options | | +| --server-id |

[Optional]

Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| | --build-name |

[Optional]

Build name. For more details, please refer to Build Integration.

| | --build-number |

[Optional]

Build number. For more details, please refer to Build Integration.

| -| --project |

[Optional]

JFrog project key.

| -| --module |

[Optional]

Optional module name for the build-info.

| -| --skip-login |

[Default: false]

Set to true if you'd like the command to skip performing docker login.

| -| Command argument | | -| Image tag | The docker image tag to pull. | -| Source repository | Source repository in Artifactory. | +| --project |

[Optional]

JFrog project key.

| +| --module |

[Optional]

Optional module name for the build-info.

| +| --skip-login |

[Default: false]

Set to true if you'd like the command to skip performing docker login.

| +| Command argument | | +| Image tag | The docker image tag to pull. | +| Source repository | Source repository in Artifactory. | #### Example -In this example, podman is employed to pull the local image 'my-docker-registry.io/my-docker-image:latest' from the docker-local Artifactory repository. During this process, it registers the image layers as depedencies within a build-info identified by the build name 'my-build-name' and build number '7'. This build-info is initially established locally and must be subsequently published to Artifactory using the command 'jf rt build-publish my-build-name 7'. +In this example, podman is employed to pull the local image 'my-docker-registry.io/my-docker-image:latest' from the docker-local Artifactory repository. During this process, it registers the image layers as dependencies within a build-info identified by the build name 'my-build-name' and build number '7'. This build-info is initially established locally and must be subsequently published to Artifactory using the command 'jf rt build-publish my-build-name 7'. ``` jf rt podman-pull my-docker-registry.io/my-docker-image:latest docker-local --build-name my-build-name --build-number 7 @@ -269,22 +269,22 @@ You can then publish the build-info collected by the **podman-pull** command to The following table lists the command arguments and flags: -| | | -| ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Command-name | rt podman-push | -| Abbreviation | rt pp | -| Command options | | -| --server-id |

[Optional]

Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| +| | | +|--------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | rt podman-push | +| Abbreviation | rt pp | +| Command options | | +| --server-id |

[Optional]

Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| | --build-name |

[Optional]

Build name. For more details, please refer to Build Integration.

| | --build-number |

[Optional]

Build number. For more details, please refer to Build Integration.

| -| --project |

[Optional]

JFrog project key.

| -| --module |

[Optional]

Optional module name for the build-info.

| -| --skip-login |

[Default: false]

Set to true if you'd like the command to skip performing docker login.

| -| --threads |

[Default: 3]

Number of working threads.

| -| --detailed-summary |

[Default: false]

Set to true to include a list of the affected files as part of the command output summary.

| -| Command argument | | -| Image tag | The docker image tag to push. | -| Target repository | Target repository in Artifactory. | +| --project |

[Optional]

JFrog project key.

| +| --module |

[Optional]

Optional module name for the build-info.

| +| --skip-login |

[Default: false]

Set to true if you'd like the command to skip performing docker login.

| +| --threads |

[Default: 3]

Number of working threads.

| +| --detailed-summary |

[Default: false]

Set to true to include a list of the affected files as part of the command output summary.

| +| Command argument | | +| Image tag | The docker image tag to push. | +| Target repository | Target repository in Artifactory. | #### Example @@ -318,14 +318,14 @@ The **build-docker-create** command allows adding a docker image, which is alrea #### Commands Params | | | -| ----------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +|-------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command-name | rt build-docker-create | | Abbreviation | rt bdc | | Command options | | | --image-file |

Path to a file which includes one line in the following format: IMAGE-TAG@sha256:MANIFEST-SHA256. For example:

cat image-file-details
superfrog-docker.jfrog.io/hello-frog@sha256:30f04e684493fb5ccc030969df6de0

| | --server-id |

[Optional]

Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| -| --build-name |

[Optional]

Build name. For more details, please refer to Build Integration.

| -| --build-number |

[Optional]

Build number. For more details, please refer to Build Integration.

| +| --build-name |

[Optional]

Build name. For more details, please refer to Build Integration.

| +| --build-number |

[Optional]

Build number. For more details, please refer to Build Integration.

| | --project |

[Optional]

JFrog project key.

| | --module |

[Optional]

Optional module name for the build-info.

| | --skip-login |

[Default: false]

Set to true if you'd like the command to skip performing docker login.

| @@ -355,7 +355,7 @@ Promotion is the action of moving or copying a group of artifacts from one repos The following table lists the command arguments and flags: | | | -| --------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | +|-----------------------|----------------------------------------------------------------------------------------------------------------------------------------------| | Command-name | rt docker-promote | | Abbreviation | rt dpr | | Command options | | @@ -394,40 +394,44 @@ Artifactory version 5.5.2 and above. ### Setting npm repositories -Before using the **npm-install**, **npm-ci** and **npm-publish** commands, the project needs to be pre-configured with the Artifactory server and repositories, to be used for building and publishing the project. The **npm-config** command should be used once to add the configuration to the project. The command should run while inside the root directory of the project. The configuration is stored by the command in the **.jfrog** directory at the root directory of the project. +Before using the **jf npm install**, **jf npm ci** and **jf npm publish** commands, the project needs to be pre-configured with the Artifactory server and repositories, to be used for building and publishing the project. The **jf npm-config** command should be used once to add the configuration to the project. The command should run while inside the root directory of the project. The configuration is stored by the command in the **.jfrog** directory at the root directory of the project. | | | -| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +|---------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command-name | npm-config | | Abbreviation | npmc | | Command options | | | --global |

[Optional]

Set to true, if you'd like the configuration to be global (for all projects on the machine). Specific projects can override the global configuration.

| -| --server-id-resolve |

[Optional]

Artifactory server ID for resolution. The server should configured using the 'jfrog c add' command.

| -| --server-id-deploy |

[Optional]

Artifactory server ID for deployment. The server should be configured using the 'jfrog c add' command.

| +| --server-id-resolve |

[Optional]

Artifactory server ID for resolution. The server should configured using the 'jf c add' command.

| +| --server-id-deploy |

[Optional]

Artifactory server ID for deployment. The server should be configured using the 'jf c add' command.

| | --repo-resolve |

[Optional]

Repository for dependencies resolution.

| | --repo-deploy |

[Optional]

Repository for artifacts deployment.

| | Command arguments | The command accepts no arguments | ### Installing Npm Packages -The **npm-install** and **npm-ci** commands execute npm's **install** and **ci** commands respectively, to fetches the npm dependencies from the npm repositories. +The **jf npm install** and **jf npm ci** commands execute npm's **install** and **ci** commands respectively, to fetches the npm dependencies from the npm repositories. -Before running the **npm-install** or **npm-ci** command on a project for the first time, the project should be configured using the **npm-config** command. +Before running the **jf npm install** or **jf npm ci** command on a project for the first time, the project should be configured using the **jf npm-config** command. #### Commands Params The following table lists the command arguments and flags: -| | | -| ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Command-name | npm | -| Abbreviation | | -| Command options | | +| | | +|-------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | npm | +| Abbreviation | | +| Command options | | | --build-name |

[Optional]

Build name. For more details, please refer to Build Integration.

| | --build-number |

[Optional]

Build number. For more details, please refer to Build Integration.

| -| --project |

[Optional]

JFrog project key.

| -| --module |

[Optional]

Optional module name for the build-info.

| -| Command arguments | The command accepts the same arguments and options as the npm client. | +| --project |

[Optional]

JFrog project key.

| +| --module |

[Optional]

Optional module name for the build-info.

| +| --threads |

[Default: 3]

Number of working threads for build-info collection.

| +| Command arguments | The command accepts the same arguments and options as the npm client. | +| --project |

[Optional]

JFrog project key.

| +| --module |

[Optional]

Optional module name for the build-info.

| +| Command arguments | The command accepts the same arguments and options as the npm client. | #### Examples ##### Example 1 @@ -458,7 +462,7 @@ jf npm ci The **npm-publish** command packs and deploys the npm package to the designated npm repository. -Before running the **npm-publish** command on a project for the first time, the project should be configured using the **npm-config** command. This configuration includes the Artifactory server and repository to which the package should deploy. +Before running the **npm-publish** command on a project for the first time, the project should be configured using the **jf npm-config** command. This configuration includes the Artifactory server and repository to which the package should deploy. > **Warning**: If your npm package includes the prepublish or postpublish scripts, please refer to the guidelines above. @@ -466,19 +470,19 @@ Before running the **npm-publish** command on a project for the first time, the The following table lists the command arguments and flags: -| | | -| ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Command-name | npm publish | -| Abbreviation | | -| Command options | | -| --build-name |

[Optional]

Build name. For more details, please refer to Build Integration.

| -| --build-number |

[Optional]

Build number. For more details, please refer to Build Integration.

| -| --project |

[Optional]

JFrog project key.

| -| --module |

[Optional]

Optional module name for the build-info.

| -| --detailed-summary |

[Default: false]

Set true to include a list of the affected files as part of the command output summary.

| -| --scan |

[Default: false]

Set if you'd like all files to be scanned by Xray on the local file system prior to the upload, and skip the upload if any of the files are found vulnerable.

| -| --format |

[Default: table]

Should be used with the --scan option. Defines the scan output format. Accepts table or JSON as values.

| -| Command argument | The command accepts the same arguments and options that the **npm pack** command expects. | +| | | +|--------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | npm publish | +| Abbreviation | | +| Command options | | +| --build-name |

[Optional]

Build name. For more details, please refer to Build Integration.

| +| --build-number |

[Optional]

Build number. For more details, please refer to Build Integration.

| +| --project |

[Optional]

JFrog project key.

| +| --module |

[Optional]

Optional module name for the build-info.

| +| --detailed-summary |

[Default: false]

Set true to include a list of the affected files as part of the command output summary.

| +| --scan |

[Default: false]

Set if you'd like all files to be scanned by Xray on the local file system prior to the upload, and skip the upload if any of the files are found vulnerable.

| +| --format |

[Default: table]

Should be used with the --scan option. Defines the scan output format. Accepts table or JSON as values.

| +| Command argument | The command accepts the same arguments and options that the **npm pack** command expects. | #### Example @@ -499,7 +503,7 @@ Yarn version 2.4.0 and above is supported. Before using the **jf yarn** command, the project needs to be pre-configured with the Artifactory server and repositories, to be used for building the project. The **yarn-config** command should be used once to add the configuration to the project. The command should run while inside the root directory of the project. The configuration is stored by the command in the **.jfrog** directory at the root directory of the project. | | | -| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +|---------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command-name | yarn-config | | Abbreviation | yarnc | | Command options | | @@ -512,22 +516,22 @@ Before using the **jf yarn** command, the project needs to be pre-configured wit The **jf yarn** command executes the yarn client, to fetch the npm dependencies from the npm repositories. -> **Note**: Before running the command on a project for the first time, the project should be configured using the **yarn-config** command. +> **Note**: Before running the command on a project for the first time, the project should be configured using the **jf yarn-config** command. #### Commands Params The following table lists the command arguments and flags: -| | | -| ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Command-name | yarn | -| Command options | | +| | | +|-------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | yarn | +| Command options | | | --build-name |

[Optional]

Build name. For more details, please refer to Build Integration.

| | --build-number |

[Optional]

Build number. For more details, please refer to Build Integration.

| -| --project |

[Optional]

JFrog project key.

| -| --module |

[Optional]

Optional module name for the build-info.

| -| --threads |

[Default: 3]

Number of working threads for build-info collection.

| -| Command arguments | The command accepts the same arguments and options as the yarn client. | +| --project |

[Optional]

JFrog project key.

| +| --module |

[Optional]

Optional module name for the build-info.

| +| --threads |

[Default: 3]

Number of working threads for build-info collection.

| +| Command arguments | The command accepts the same arguments and options as the yarn client. | #### Examples ##### Example 1 @@ -540,7 +544,7 @@ jf yarn install --build-name=my-build-name --build-number=1 ##### Example 2 -The following example installs the dependencies. The dependencies are resolved from the Artifactory server and repository configured by \*\*yarn-config command. +The following example installs the dependencies. The dependencies are resolved from the Artifactory server and repository configured by **jf yarn-config** command. ``` jf yarn install @@ -571,12 +575,12 @@ Before you can use JFrog CLI to build your Go projects with Artifactory, you fir Here's how you set the repositories. 1. 'cd' into to the root of the Go project. -2. Run the **jf rt go-config** command. +2. Run the **jf go-config** command. #### Commands Params | | | -| ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +|---------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command-name | go-config | | Abbreviation | | | Command options | | @@ -607,24 +611,24 @@ jf go-config --global The **go** command triggers the go client. -> **Note**: Before running the **go** command on a project for the first time, the project should be configured using the **go-config** command. +> **Note**: Before running the **go** command on a project for the first time, the project should be configured using the **jf go-config** command. #### Commands Params The following table lists the command arguments and flags: -| | | -| ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Command-name | go | -| Abbreviation | go | -| Command options | | +| | | +|-------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | go | +| Abbreviation | go | +| Command options | | | --build-name |

[Optional]

Build name. For more details, please refer to Build Integration.

| | --build-number |

[Optional]

Build number. For more details, please refer to Build Integration.

| -| --project |

[Optional]

JFrog project key.

| -| --no-fallback |

[Default: false]

Set to avoid downloading packages from the VCS, if they are missing in Artifactory.

| -| --module |

[Optional]

Optional module name for the build-info.

| -| Command arguments | | -| Go command | The command accepts the same arguments and options as the go client. | +| --project |

[Optional]

JFrog project key.

| +| --no-fallback |

[Default: false]

Set to avoid downloading packages from the VCS, if they are missing in Artifactory.

| +| --module |

[Optional]

Optional module name for the build-info.

| +| Command arguments | | +| Go command | The command accepts the same arguments and options as the go client. | #### Examples ##### Example 1 @@ -634,7 +638,7 @@ The following example runs Go build command. The dependencies resolved from Arti > **Note**: Before using this example, please make sure to set repositories for the Go project using the go-config command. ``` -jf rt go build +jf go build ``` ##### Example 2 @@ -649,31 +653,31 @@ jf rt go build --build-name=my-build --build-number=1 ### Publishing Go Packages to Artifactory -The **go-publish** command packs and deploys the Go package to the designated Go repository in Artifactory. +The **jf go-publish** command packs and deploys the Go package to the designated Go repository in Artifactory. -> **Note**: Before running the **go-publish** command on a project for the first time, the project should be configured using the **go-config** command. +> **Note**: Before running the **jf go-publish** command on a project for the first time, the project should be configured using the **jf go-config** command. #### Commands Params The following table lists the command arguments and flags: -| | | -| ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Command-name | go-publish | -| Abbreviation | gp | -| Command options | | +| | | +|--------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | go-publish | +| Abbreviation | gp | +| Command options | | | --build-name |

[Optional]

Build name. For more details, please refer to Build Integration.

| | --build-number |

[Optional]

Build number. For more details, please refer to Build Integration.

| -| --project |

[Optional]

JFrog project key.

| -| --module |

[Optional]

Optional module name for the build-info.

| -| --detailed-summary |

[Default: false]

Set true to include a list of the affected files as part of the command output summary.

| -| Command argument | | -| Version | The version of the Go project that is being published | +| --project |

[Optional]

JFrog project key.

| +| --module |

[Optional]

Optional module name for the build-info.

| +| --detailed-summary |

[Default: false]

Set true to include a list of the affected files as part of the command output summary.

| +| Command argument | | +| Version | The version of the Go project that is being published | #### Examples ##### Example 1 -To pack and publish the Go package, run the following command. Before running this command on a project for the first time, the project should be configured using the **go-config** command. +To pack and publish the Go package, run the following command. Before running this command on a project for the first time, the project should be configured using the **jf go-config** command. ``` jf gp v1.2.3 @@ -681,7 +685,7 @@ jf gp v1.2.3 ##### Example 2 -To pack and publish the Go package and also record the build-info as part of build **my-build-name/1** , run the following command. The build-info can later be published to Artifactory using the [build-publish](https://docs.jfrog-applications.jfrog.io/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory#publishing-build-info) command. Before running this command on a project for the first time, the project should be configured using the **go-config** command. +To pack and publish the Go package and also record the build-info as part of build **my-build-name/1** , run the following command. The build-info can later be published to Artifactory using the [build-publish](https://docs.jfrog-applications.jfrog.io/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory#publishing-build-info) command. Before running this command on a project for the first time, the project should be configured using the **jf go-config** command. ``` jf gp v1.2.3 --build-name my-build-name --build-number 1 @@ -709,7 +713,7 @@ Here's how you set the repositories. #### Commands Params | | | -| ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +|---------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command-name | pip-config / pipenv-config / poetry-config | | Abbreviation | pipc / pipec / poc | | Command options | | @@ -768,9 +772,9 @@ jf pipec --global ### Installing Python packages -The **pip install**, **pipenv install** and **poetry install** commands use the **pip**, **pipenv** and **poetry** clients respectively, to install the project dependencies from Artifactory. The **pip install** and **pipenv install** commands can also record these packages as build dependencies as part of the build-info published to Artifactory. +The **jf pip install**, **jf pipenv install** and **jf poetry install** commands use the **pip**, **pipenv** and **poetry** clients respectively, to install the project dependencies from Artifactory. The **jf pip install** and **jf pipenv install** commands can also record these packages as build dependencies as part of the build-info published to Artifactory. -> **Note**: Before running the **pip install**, **pipenv install** and **poetry install** commands on a project for the first time, the project should be configured using the **pip-config** ,**pipenv-config** or **poetry-config** commands respectively. +> **Note**: Before running the **pip install**, **pipenv install** and **poetry install** commands on a project for the first time, the project should be configured using the **jf pip-config** ,**jf pipenv-config** or **jf poetry-config** commands respectively. **Recording all dependencies** - currently available for pip and pipenv. @@ -839,7 +843,7 @@ Before using the nuget or dotnet commands, the **nuget-config** or **dotnet-conf The following table lists the commands' options: | | | -| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +|---------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command-name | nuget-config / dotnet-config | | Abbreviation | nugetc / dotnetc | | Command options | | @@ -861,16 +865,16 @@ The **nuget** command runs the **NuGet client** and the **dotnet** command runs The following table lists the commands arguments and options: -| | | -| ---------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Command-name | nuget / dotnet | -| Abbreviation | | -| Command options | | +| | | +|------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | nuget / dotnet | +| Abbreviation | | +| Command options | | | --build-name |

[Optional]

Build name. For more details, please refer to Build Integration.

| | --build-number |

[Optional]

Build number. For more details, please refer to Build Integration.

| -| --project |

[Optional]

JFrog project key.

| -| --module |

[Optional]

Optional module name for the build-info.

| -| Command argument | The command accepts the same arguments and options as the NuGet client / .NET Core CLI. | +| --project |

[Optional]

JFrog project key.

| +| --module |

[Optional]

Optional module name for the build-info.

| +| Command argument | The command accepts the same arguments and options as the NuGet client / .NET Core CLI. | #### Examples ##### Example 1 @@ -920,7 +924,7 @@ The **jf terraform-config** command will store the repository name inside the ** The following table lists the command options: | | | -| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +|--------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command-name | terraform-config | | Abbreviation | tfc | | Command options | | @@ -954,19 +958,19 @@ The **terraform publish** command creates a terraform package for the module in The following table lists the commands arguments and options: -| | | -| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Command-name | terraform publish | -| Abbreviation | tf p | -| Command options | | -| --namespace |

[Mandatory]

Terraform module namespace

| -| --provider |

[Mandatory]

Terraform module provider

| -| --tag |

[Mandatory]

Terraform module tag

| -| --exclusions |

[Optional]

A list of Semicolon-separated exclude patterns wildcards. Paths inside the module matching one of the patterns are excluded from the deployed package.

| -| --build-name |

[Optional]

Build name. For more details, please refer to Build Integration.

| -| --build-number |

[Optional]

Build number. For more details, please refer to Build Integration.

| -| --project | | -| Command argument | The command accepts no arguments | +| | | +|------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | terraform publish | +| Abbreviation | tf p | +| Command options | | +| --namespace |

[Mandatory]

Terraform module namespace

| +| --provider |

[Mandatory]

Terraform module provider

| +| --tag |

[Mandatory]

Terraform module tag

| +| --exclusions |

[Optional]

A list of Semicolon-separated exclude patterns wildcards. Paths inside the module matching one of the patterns are excluded from the deployed package.

| +| --build-name |

[Optional]

Build name. For more details, please refer to Build Integration.

| +| --build-number |

[Optional]

Build number. For more details, please refer to Build Integration.

| +| --project | | +| Command argument | The command accepts no arguments | #### Examples ##### Example 1 diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/verifying-artifactory-accessibility.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/verifying-artifactory-accessibility.md index e80c3b1..703ee7c 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/verifying-artifactory-accessibility.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/verifying-artifactory-accessibility.md @@ -5,7 +5,7 @@ This command can be used to verify that Artifactory is accessible by sending an ## Commands Params | | | -| ----------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | +|-------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command name | rt ping | | Abbreviation | rt p | | | | diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-cloud-transfer.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-cloud-transfer.md index d2427bd..b27ba20 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-cloud-transfer.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-cloud-transfer.md @@ -45,7 +45,7 @@ The following limitations need to be kept in mind before you start the migration 5. Artifacts in remote repositories caches are not transferred. 6. Federated repositories are transferred without their federation members. After the transfer, you'll need to reconfigure the federation as described in the Federated Repositories documentation. Federated Repositories 7. Docker repositories with names that include dots or underscores aren't allowed in JFrog Cloud. -8. Artifact properties with a value longer than 2.4K characters are not supported in JFrog Cloud. Such properties are generally seen in Conan artifacts. The artifacts will transferred without the properties in this case. A report with these artifacts will become available to you at the end of the transfer. +8. Artifact properties with a value longer than 2.4K characters are not supported in JFrog Cloud. Such properties are generally seen in Conan artifacts. The artifacts will be transferred without the properties in this case. A report with these artifacts will become available to you at the end of the transfer. 9. The files transfer process allows transferring files that were created or modified on the source instance after the process started. However, files that were deleted on the source instance after the process started, are not deleted on the target instance by the process. 10. The files transfer process allows transferring files that were created or modified on the source instance after the process started. The custom properties of those files are also updated on the target instance. However, if only the custom properties of those files were modified on the source, but not the files' content, the properties are not modified on the target instance by the process. @@ -86,7 +86,7 @@ Follow the below steps to enable the configuration transfer. 4. If you have an Enterprise+ subscription with more than one Artifactory instance, select the target instance from the drop-down menu. 5. Toggle **Enable Configuration Transfer** to enable the transfer. The process may take a few minutes to complete. \ ![](../.gitbook/assets/transfer-2.png) -6. The configuration transfer is now enabled and you can continue with the transfer process. +6. The configuration transfer is now enabled, and you can continue with the transfer process. #### Step 2: Set up the source instance for pushing files to the target instance @@ -173,7 +173,7 @@ This command might take up to two minutes to run. *** -6. View the command output in the terminal to verify that there are no errors. The command output is divided in to the following four phases: +6. View the command output in the terminal to verify that there are no errors. The command output is divided into the following four phases: ``` ========== Phase 1/4 - Preparations ========== diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-curation.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-curation.md index 19aa062..f0e64b3 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-curation.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-curation.md @@ -36,7 +36,7 @@ Before running the command, do the following: #### Commands Params | | | -| ------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | +|---------------------|----------------------------------------------------------------------------------------------------------------------------------------| | **Command name** | curation-audit | | **Abbreviation** | ca | | **Command options** | | diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-distribution.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-distribution.md index d822e82..6c94740 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-distribution.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-distribution.md @@ -35,12 +35,12 @@ This commands creates and updates an unsigned Release Bundle on JFrog Distributi #### Commands Params | | | -|------------------------| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +|------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command-name | release-bundle-create / release-bundle-update | | Abbreviation | rbc / rbu | | Command options | | | --server-id |

[Optional]

Artifactory server ID configured using the config command.

| -| --spec |

[Optional]

Path to a file spec. For more details, please refer to Using File Specs.

| +| --spec |

[Optional]

Path to a file spec. For more details, please refer to Using File Specs.

| | --spec-vars |

[Optional]

List of variables in the form of "key1=value1;key2=value2;..." to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| | --target-props |

[Optional]

The list of properties, in the form of key1=value1;key2=value2,..., to be added to the artifacts after distribution of the release bundle.

| | --target |

[Optional]

The target path for distributed artifacts on the edge node. If not specified, the artifacts will have the same path and name on the edge node, as on the source Artifactory server. For flexibility in specifying the distribution path, you can include placeholders in the form of {1}, {2} which are replaced by corresponding tokens in the pattern path that are enclosed in parenthesis.

| @@ -181,7 +181,7 @@ This command GPG signs an existing Release Bundle on JFrog Distribution. #### Commands Params | | | -| ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | +|------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command-name | release-bundle-sign | | Abbreviation | rbs | | Command options | | @@ -217,7 +217,7 @@ This command distributes a release bundle to the Edge Nodes. #### Commands Params | | | -| ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +|------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command-name | release-bundle-distribute | | Abbreviation | rbd | | Command options | | @@ -259,7 +259,7 @@ This command deletes a Release Bundle from the Edge Nodes and optionally from Di #### Commands Params | | | -| ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | +|------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command-name | release-bundle-delete | | Abbreviation | rbdel | | Command options | | diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-pipelines.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-pipelines.md index 11fc6a7..69f3833 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-pipelines.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-pipelines.md @@ -15,7 +15,7 @@ $ jf pl command-name arguments command-options Where: | | | -| --------------- | ----------------------------------------------------------------------------------------------- | +|-----------------|-------------------------------------------------------------------------------------------------| | command-name | The command to execute. Note that you can use either the full command name or its abbreviation. | | command-options | A set of options corresponding to the command | | arguments | A set of arguments corresponding to the command | @@ -31,7 +31,7 @@ The following sections describe the commands available in the JFrog CLI for use ##### Commands Params | | | -| ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | +|-------------------|----------------------------------------------------------------------------------------------------------------------------------------------------| | Command name | pl version | | Abbreviation | v | | Command arguments | The command accepts no arguments. | @@ -52,7 +52,7 @@ Get the status of the run for the specified pipeline ##### Commands Params | | | -| ----------------- | ------------------------------------------------------------------------------------------------------------------------------ | +|-------------------|--------------------------------------------------------------------------------------------------------------------------------| | Command name | pl status | | Abbreviation | s | | Command arguments | The command accepts no arguments. | @@ -86,7 +86,7 @@ Trigger a pipeline run. ##### Commands Params | | | -| ----------------- | ------------------------------------------------------------------------------------------------------------------------ | +|-------------------|--------------------------------------------------------------------------------------------------------------------------| | Command name | pl trigger | | Abbreviation | t | | Command options | | @@ -117,7 +117,7 @@ jf pl trigger myPipeline main/jobs --server-id repo21 ##### Commands Params | | | -| --------------- | ----------------------------------------------------------------------------------------- | +|-----------------|-------------------------------------------------------------------------------------------| | Command name | pl sync | | Abbreviation | sy | | Command options | | @@ -137,7 +137,7 @@ jf pl sync --repository jfrog/artifactory --branch main/jobs --server-id repo21 ##### Commands Params | | | -| ----------------- | ---------------------------------------------------------------- | +|-------------------|------------------------------------------------------------------| | Command name | pl sync-status | | Abbreviation | ss | | Command options | | diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/README.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/README.md index a7b61cd..210fd4e 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/README.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/README.md @@ -15,7 +15,7 @@ To authenticate yourself using your Xray login credentials, either configure you To authenticate yourself using an Xray Access Token, either configure your Access Token once using the \_jf c add\_command or provide the following option to each command. | | | -| -------------- | ------------------------------------------------------- | +|----------------|---------------------------------------------------------| | Command option | Description | | --url | JFrog Xray API endpoint URL. It usually ends with /xray | | --access-token | JFrog access token | diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-published-builds.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-published-builds.md index b705d75..2633df2 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-published-builds.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-published-builds.md @@ -7,7 +7,7 @@ JFrog CLI is integrated with JFrog Xray and JFrog Artifactory, allowing you to h ### Commands Params | | | -| ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +|-------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command name | build-scan | | Abbreviation | bs | | Command options | | diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-binaries.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-binaries.md index bfb4e5f..a54b1c1 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-binaries.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-binaries.md @@ -20,7 +20,7 @@ This _**jf scan**_ command scans files on the local file system with Xray. #### Commands Params | | | -| --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +|-----------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | **Command name** | scan | | **Abbreviation** | s | | **Command options** | | @@ -100,7 +100,7 @@ This j\_**f docker scan**\_ command scans docker containers located on the local #### Commands Params | | | -| --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +|-----------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | **Command name** | docker scan | | **Abbreviation** | | | **Command options** | | diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-source-code.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-source-code.md index 11bc456..806590a 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-source-code.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-source-code.md @@ -36,7 +36,7 @@ This command also supports the following Advanced Scans with the **Advanced Secu #### Commands Params | | | -| --------------------- |-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +|-----------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | **Command name** | audit | | **Abbreviation** | aud | | **Command options** | | @@ -59,7 +59,7 @@ This command also supports the following Advanced Scans with the **Advanced Secu | --gradle |

[Default: false]

Set to true to request audit for a Gradle project.

| | --mvn |

[Default: false]

Set to true to request audit for a Maven project.

| | --npm |

[Default: false]

Set to true to request audit for a npm project.

| -| --pnpm |

[Default: false]

Set to true to request audit for a pnpm project.

| +| --pnpm |

[Default: false]

Set to true to request audit for a pnpm project.

| | --nuget |

[Default: false]

Set to true to request audit for a .Net project.

| | --pip |

[Default: false]

Set to true to request audit for a Pip project.

| | --pipenv |

[Default: false]

Set to true to request audit for a Pipenv project.

| @@ -131,7 +131,7 @@ Execute a cUrl command, using the configured Xray details. The command expects t #### Commands Params | | | -| ------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +|--------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command name | xr curl | | Abbreviation | xr cl | | Command options | | diff --git a/jfrog-applications/jfrog-cli/cli-plugins/README.md b/jfrog-applications/jfrog-cli/cli-plugins/README.md index f7f85b5..13d6bb9 100644 --- a/jfrog-applications/jfrog-cli/cli-plugins/README.md +++ b/jfrog-applications/jfrog-cli/cli-plugins/README.md @@ -22,7 +22,7 @@ To create your own private plugins registry, follow these steps. * On your Artifactory server, create a local generic repository named _jfrog-cli-plugins_. * Make sure your Artifactory server is included in JFrog CLI's configuration, by running the _jf c show_ command. -* If needed, configure your Artifactory instance using the _jfrog c add_ command. +* If needed, configure your Artifactory instance using the _jf c add_ command. * Set the ID of the configured server as the value of the JFROG_CLI_PLUGINS_SERVER environment variable. * If you wish the name of the plugins repository to be different from jfrog-cli-plugins, set this name as the value of the JFROG_CLI_PLUGINS_REPO environment variable. diff --git a/jfrog-applications/jfrog-cli/cli-plugins/developer-guide.md b/jfrog-applications/jfrog-cli/cli-plugins/developer-guide.md index 0e1e8d0..cf0cb80 100644 --- a/jfrog-applications/jfrog-cli/cli-plugins/developer-guide.md +++ b/jfrog-applications/jfrog-cli/cli-plugins/developer-guide.md @@ -94,7 +94,7 @@ the following guidelines before publishing it. * **Create a Readme.** Make sure that your plugin code includes a README.md file and place it in the root of the repository. The README needs to be structured according to the [jfrog-cli-plugin-template]((https://github.com/jfrog/jfrog-cli-plugin-template.git)) README. It needs to include - all the information and relevant details for the relevant plugin users.. + all the information and relevant details for the relevant plugin users. * **Consider create a tag for your plugin sources.** Although this is not mandatory, we recommend creating a tag for your GitHub repository before publishing the plugin. You can then provide this tag to the Registry when publishing the plugin, to make sure the correct code is built. From e02f8cb6ab7c9cc46e0af4efdffa5eadf8e92ba7 Mon Sep 17 00:00:00 2001 From: Michael Sverdlov Date: Mon, 15 Apr 2024 11:15:27 +0300 Subject: [PATCH 02/57] Improve artifactory usage docs (#111) --- jfrog-applications/SUMMARY.md | 4 +- .../build-integration.md | 154 ++--- .../curl-integration.md | 2 +- .../environment-variables.md | 12 +- .../generic-files.md | 485 ++++++++------- .../managing-configuration-entities.md | 182 +++--- .../package-managers-integration.md | 570 +++++++++--------- .../release-lifecycle-management.md | 142 ++--- .../verifying-artifactory-accessibility.md | 20 +- .../jfrog-cli/cli-for-jfrog-curation.md | 16 +- .../jfrog-cli/cli-for-jfrog-distribution.md | 148 ++--- .../jfrog-cli/cli-for-jfrog-pipelines.md | 76 +-- .../download-updates-for-xrays-database.md | 2 +- .../scan-published-builds.md | 28 +- .../scan-your-binaries.md | 54 +- .../scan-your-source-code.md | 62 +- .../jfrog-platform-configuration.md | 18 +- .../configurations/proxy-support.md | 2 +- .../get-started/download-and-install/usage.md | 2 +- 19 files changed, 1011 insertions(+), 968 deletions(-) diff --git a/jfrog-applications/SUMMARY.md b/jfrog-applications/SUMMARY.md index e806bd7..d716699 100644 --- a/jfrog-applications/SUMMARY.md +++ b/jfrog-applications/SUMMARY.md @@ -71,13 +71,13 @@ * [Setup Frogbot Using GitLab CI](frogbot/setup-frogbot-using-gitlab-ci.md) * [Setup Frogbot Using Azure Pipelines](frogbot/setup-frogbot-using-azure-pipelines.md) * [Scan Pull Requests](jfrog-applications/frogbot/scan-pull-requests/README.md) - * [Scan Github Pull Request](jfrog-applications/frogbot/scan-pull-requests/scan-github-pull-request.md) + * [Scan GitHub Pull Request](jfrog-applications/frogbot/scan-pull-requests/scan-github-pull-request.md) * [Scan Gitlab Pull Request](jfrog-applications/frogbot/scan-pull-requests/scan-gitlab-pull-request.md) * [Scan Azure Repos Pull Request](jfrog-applications/frogbot/scan-pull-requests/scan-azure-repos-pull-request.md) * [Scan Bitbucket Server Pull Request](jfrog-applications/frogbot/scan-pull-requests/scan-bitbucket-server-pull-request.md) * [Pull Request Scan Results](jfrog-applications/frogbot/scan-pull-requests/pull-request-scan-results.md) * [Scan Git Repositories](jfrog-applications/frogbot/scan-repositories/README.md) - * [View Security Alerts on Github](jfrog-applications/frogbot/scan-repositories/view-security-alerts-on-github.md) + * [View Security Alerts on GitHub](jfrog-applications/frogbot/scan-repositories/view-security-alerts-on-github.md) * [Frogbot Badge](frogbot/frogbot-badge.md) ## CI & SDKs diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/build-integration.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/build-integration.md index 259cc07..4c81a7c 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/build-integration.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/build-integration.md @@ -42,15 +42,15 @@ Environment variables are collected using the `build-collect-env` (`bce`) comman The following table lists the command arguments and flags: -| | | -|-------------------|---------------------------------------------| -| Command name | rt build-collect-env | -| Abbreviation | rt bce | -| Command options | | -| --project |

[Optional]

JFrog project key.

| -| Command arguments | The command accepts two arguments. | -| Build name | Build name. | -| Build number | Build number. | +| | | +|-------------------|-----------------------------------------| +| Command name | rt build-collect-env | +| Abbreviation | rt bce | +| Command options | | +| --project |

[Optional]
JFrog project key.

| +| Command arguments | The command accepts two arguments. | +| Build name | Build name. | +| Build number | Build number. | #### Examples ##### Example 1 @@ -77,18 +77,18 @@ The `build-add-git` (bag) command collects the Git revision and URL from the loc The following table lists the command arguments and flags: -| | | -|-------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command name | rt build-add-git | -| Abbreviation | rt bag | -| Command options | | -| --config |

[Optional]

Path to a yaml configuration file, used for collecting tracked project issues and adding them to the build-info.

| -| --server-id |

[Optional]

Server ID configured using the 'jf config' command. This is the server to which the build-info will be later published, using the jf rt build-publish command. This option, if provided, overrides the serverID value in this command's yaml configuration. If both values are not provided, the default server, configured by the 'jf config' command, is used.

| -| --project |

[Optional]

JFrog project key.

| -| Command arguments | The command accepts three arguments. | -| Build name | Build name. | -| Build number | Build number. | -| .git path | Optional - Path to a directory containing the .git directory. If not specific, the .git directory is assumed to be in the current directory or in one of the parent directories. | +| | | +|-------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command name | rt build-add-git | +| Abbreviation | rt bag | +| Command options | | +| --config |

[Optional]
Path to a yaml configuration file, used for collecting tracked project issues and adding them to the build-info.

| +| --server-id |

[Optional]
Server ID configured using the 'jf config' command. This is the server to which the build-info will be later published, using the jf rt build-publish command. This option, if provided, overrides the serverID value in this command's yaml configuration. If both values are not provided, the default server, configured by the 'jf config' command, is used.

| +| --project |

[Optional]
JFrog project key.

| +| Command arguments | The command accepts three arguments. | +| Build name | Build name. | +| Build number | Build number. | +| .git path | Optional - Path to a directory containing the .git directory. If not specific, the .git directory is assumed to be in the current directory or in one of the parent directories. | #### Configuration file properties @@ -142,15 +142,15 @@ By default, the command collects the files from the local file system. If you'd |-------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command name | rt build-add-dependencies | | Abbreviation | rt bad | -| Command options |

Warning

When using the * or ; characters in the command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| -| --from-rt |

[Default: false]

Set to true to search the files in Artifactory, rather than on the local file system. The --regexp option is not supported when --from-rt is set to true.

| -| --server-id |

[Optional]

Server ID configured using the config command.

| -| --spec |

[Optional]

Path to a File Spec.

| -| --spec-vars |

[Optional]

List of variables in the form of "key1=value1;key2=value2;..." to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| -| --recursive |

[Default: true]

When false, artifacts inside sub-folders in Artifactory will not be affected.

| -| --regexp |

[Optional: false]

[Default: false] Set to true to use a regular expression instead of wildcards expression to collect files to be added to the build info.This option is not supported when --from-rt is set to true.

| -| --dry-run |

[Default: false]

Set to true to only get a summery of the dependencies that will be added to the build info.

| -| --module |

[Optional]

Optional module name in the build-info for adding the dependency.

| +| Command options |

When using the * or ; characters in the command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| +| --from-rt |

[Default: false]
Set to true to search the files in Artifactory, rather than on the local file system. The --regexp option is not supported when --from-rt is set to true.

| +| --server-id |

[Optional]
Server ID configured using the config command.

| +| --spec |

[Optional]
Path to a File Spec.

| +| --spec-vars |

[Optional]
List of variables in the form of "key1=value1;key2=value2;..." to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| +| --recursive |

[Default: true]
When false, artifacts inside sub-folders in Artifactory will not be affected.

| +| --regexp |

[Optional: false]
[Default: false] Set to true to use a regular expression instead of wildcards expression to collect files to be added to the build info.This option is not supported when --from-rt is set to true.

| +| --dry-run |

[Default: false]
Set to true to only get a summery of the dependencies that will be added to the build info.

| +| --module |

[Optional]
Optional module name in the build-info for adding the dependency.

| | --exclusions | A list of Semicolon-separated exclude patterns. Allows using wildcards or a regular expression according to the value of the 'regexp' option. | | Command arguments | The command takes three arguments. | | Build name | The build name to add the dependencies to | @@ -193,21 +193,21 @@ jf rt bp my-build-name 18 ### Commands Params -| | | -|-------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command name | rt build-publish | -| Abbreviation | rt bp | -| Command options | | -| --server-id |

[Optional]

Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| -| --project |

[Optional]

JFrog project key.

| -| --build-url |

[Optional]

Can be used for setting the CI server build URL in the build-info.

| -| --env-include |

[Default: *]

List of patterns in the form of "value1;value2;..." Only environment variables that match those patterns will be included in the build info.

| -| --env-exclude |

[Default: *password*;*secret*;*key*]

List of case insensitive patterns in the form of "value1;value2;..." environment variables match those patterns will be excluded.

| -| --dry-run |

[Default: false]

Set to true to disable communication with Artifactory.

| -| --insecure-tls |

[Default: false]

Set to true to skip TLS certificates verification.

| -| Command arguments | The command accepts two arguments. | -| Build name | Build name to be published. | -| Build number | Build number to be published. | +| | | +|-------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command name | rt build-publish | +| Abbreviation | rt bp | +| Command options | | +| --server-id |

[Optional]
Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| +| --project |

[Optional]
JFrog project key.

| +| --build-url |

[Optional]
Can be used for setting the CI server build URL in the build-info.

| +| --env-include |

[Default: *]
List of patterns in the form of "value1;value2;..." Only environment variables that match those patterns will be included in the build info.

| +| --env-exclude |

[Default: *password*;*secret*;*key*]
List of case insensitive patterns in the form of "value1;value2;..." environment variables match those patterns will be excluded.

| +| --dry-run |

[Default: false]
Set to true to disable communication with Artifactory.

| +| --insecure-tls |

[Default: false]
Set to true to skip TLS certificates verification.

| +| Command arguments | The command accepts two arguments. | +| Build name | Build name to be published. | +| Build number | Build number to be published. | ### Example @@ -298,25 +298,25 @@ This command is used to [promote build](https://jfrog.com/knowledge-base/how-doe ### Commands Params -| | | -|------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------| -| Command name | rt build-promote | -| Abbreviation | rt bpr | -| Command options | | -| --server-id |

[Optional]

Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| -| --project |

[Optional]

JFrog project key.

| -| --status |

[Optional]

Build promotion status.

| -| --comment |

[Optional]

Build promotion comment.

| -| --source-repo |

[Optional]

Build promotion source repository.

| -| --include-dependencies |

[Default: false]

If set to true, the build dependencies are also promoted.

| -| --copy |

[Default: false]

If set true, the build artifacts and dependencies are copied to the target repository, otherwise they are moved.

| -| --props |

[Optional]

List of properties in the form of "key1=value1;key2=value2,...". to attach to the build artifacts.

| -| --dry-run |

[Default: false]

If true, promotion is only simulated. The build is not promoted.

| -| --insecure-tls |

[Default: false]

Set to true to skip TLS certificates verification.

| -| Command arguments | The command accepts three arguments. | -| Build name | Build name to be promoted. | -| Build number | Build number to be promoted. | -| Target repository | Build promotion target repository. | +| | | +|------------------------|---------------------------------------------------------------------------------------------------------------------------------------------| +| Command name | rt build-promote | +| Abbreviation | rt bpr | +| Command options | | +| --server-id |

[Optional]
Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| +| --project |

[Optional]
JFrog project key.

| +| --status |

[Optional]
Build promotion status.

| +| --comment |

[Optional]
Build promotion comment.

| +| --source-repo |

[Optional]
Build promotion source repository.

| +| --include-dependencies |

[Default: false]
If set to true, the build dependencies are also promoted.

| +| --copy |

[Default: false]
If set true, the build artifacts and dependencies are copied to the target repository, otherwise they are moved.

| +| --props |

[Optional]
List of properties in the form of "key1=value1;key2=value2,...". to attach to the build artifacts.

| +| --dry-run |

[Default: false]
If true, promotion is only simulated. The build is not promoted.

| +| --insecure-tls |

[Default: false]
Set to true to skip TLS certificates verification.

| +| Command arguments | The command accepts three arguments. | +| Build name | Build name to be promoted. | +| Build number | Build number to be promoted. | +| Target repository | Build promotion target repository. | ### Example @@ -360,19 +360,19 @@ This command is used to discard builds previously published to Artifactory using The following table lists the command arguments and flags: -| | | -|--------------------|----------------------------------------------------------------------------------------------------------------------------------------------| -| Command name | rt build-discard | -| Abbreviation | rt bdi | -| Command options | | -| --server-id |

[Optional]

Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| -| --max-days |

[Optional]

The maximum number of days to keep builds in Artifactory.

| -| --max-builds |

[Optional]

The maximum number of builds to store in Artifactory.

| -| --exclude-builds |

[Optional]

List of build numbers in the form of "value1,value2,...", that should not be removed from Artifactory.

| -| --delete-artifacts |

[Default: false]

If set to true, automatically removes build artifacts stored in Artifactory.

| -| --async |

[Default: false]

If set to true, build discard will run asynchronously and will not wait for response.

| -| Command arguments | The command accepts one argument. | -| Build name | Build name. | +| | | +|--------------------|------------------------------------------------------------------------------------------------------------------------------------------| +| Command name | rt build-discard | +| Abbreviation | rt bdi | +| Command options | | +| --server-id |

[Optional]
Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| +| --max-days |

[Optional]
The maximum number of days to keep builds in Artifactory.

| +| --max-builds |

[Optional]
The maximum number of builds to store in Artifactory.

| +| --exclude-builds |

[Optional]
List of build numbers in the form of "value1,value2,...", that should not be removed from Artifactory.

| +| --delete-artifacts |

[Default: false]
If set to true, automatically removes build artifacts stored in Artifactory.

| +| --async |

[Default: false]
If set to true, build discard will run asynchronously and will not wait for response.

| +| Command arguments | The command accepts one argument. | +| Build name | Build name. | ### Examples #### Example 1 diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/curl-integration.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/curl-integration.md index 352f122..ef9c4d8 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/curl-integration.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/curl-integration.md @@ -12,7 +12,7 @@ Execute a cUrl command, using the configured Artifactory details. The command ex | Command name | rt curl | | | Abbreviation | rt cl | | | Command options | | | -| --server-id |

[Optional]

Server ID configured using the jf c add command. If not specified, the default configured server is used.

| | +| --server-id |

[Optional]
Server ID configured using the jf c add command. If not specified, the default configured server is used.

| | | Command arguments | | | | cUrl arguments and flags |

The same list of arguments and flags passed to cUrl, except for the following changes:

1. The full Artifactory URL should not be passed. Instead, the REST endpoint URI should be sent.
2. The login credentials should not be passed. Instead, the --server-id should be used.

| | diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/environment-variables.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/environment-variables.md index 425bd93..cc8d133 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/environment-variables.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/environment-variables.md @@ -6,18 +6,18 @@ Some of the Artifactory commands make use of the following environment variable: | | | |----------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | **Variable Name** | **Description** | -| **JFROG\_CLI\_MIN\_CHECKSUM\_DEPLOY\_SIZE\_KB** |

[Default: 10]

Minimum file size in KB for which JFrog CLI performs checksum deploy optimization.

| +| **JFROG\_CLI\_MIN\_CHECKSUM\_DEPLOY\_SIZE\_KB** |

[Default: 10]
Minimum file size in KB for which JFrog CLI performs checksum deploy optimization.

| | **JFROG\_CLI\_RELEASES\_REPO** |

Configured Artifactory repository name to download the jar needed by the mvn/gradle command.
This environment variable's value format should be <server ID configured by the 'jf c add' command>/<repo name>.
The repository should proxy https://releases.jfrog.io.
This environment variable is used by the 'jf mvn' and 'jf gradle' commands, and also by the 'jf audit' command, when used for maven or gradle projects.

| -| **JFROG\_CLI\_DEPENDENCIES\_DIR** |

[Default: $JFROG_CLI_HOME_DIR/dependencies]

Defines the directory to which JFrog CLI's internal dependencies are downloaded.

| -| **JFROG\_CLI\_REPORT\_USAGE** |

[Default: true]

Set to false to block JFrog CLI from sending usage statistics to Artifactory.

| +| **JFROG\_CLI\_DEPENDENCIES\_DIR** |

[Default: $JFROG_CLI_HOME_DIR/dependencies]
Defines the directory to which JFrog CLI's internal dependencies are downloaded.

| +| **JFROG\_CLI\_REPORT\_USAGE** |

[Default: true]
Set to false to block JFrog CLI from sending usage statistics to Artifactory.

| | **JFROG\_CLI\_SERVER\_ID** | Server ID configured using the config command, unless sent as a command argument or option. | | **JFROG\_CLI\_BUILD\_NAME** | Build name to be used by commands which expect a build name, unless sent as a command argument or option. | | **JFROG\_CLI\_BUILD\_NUMBER** | Build number to be used by commands which expect a build number, unless sent as a command argument or option. | | **JFROG\_CLI\_BUILD\_PROJECT** | JFrog project key to be used by commands that expect build name and build number. Determines the project of the published build. | | **JFROG\_CLI\_BUILD\_URL** | Sets the CI server build URL in the build-info. The "jf rt build-publish" command uses the value of this environment variable unless the --build-url command option is sent. | -| **JFROG\_CLI\_ENV\_EXCLUDE** |

[Default: *password*;*secret*;*key*;*token*]

List of case insensitive patterns in the form of "value1;value2;...". Environment variables match those patterns will be excluded. This environment variable is used by the "jf rt build-publish" command, in case the --env-exclude command option is not sent.

| -| **JFROG\_CLI\_TRANSITIVE\_DOWNLOAD\_EXPERIMENTAL** |

[Default: false]

Used by the "jf rt download" command. Set to true to download artifacts also from remote repositories. This feature is experimental and available on Artifactory version 7.17.0 or higher.

| -| **JFROG\_CLI\_UPLOAD\_EMPTY\_ARCHIVE** |

[Default: false]

Used by the "jf rt upload" command. Set to true if you'd like to upload an empty archive when '--archive' is set but all files were excluded by exclusions pattern.

| +| **JFROG\_CLI\_ENV\_EXCLUDE** |

[Default: *password*;*secret*;*key*;*token*]
List of case insensitive patterns in the form of "value1;value2;...". Environment variables match those patterns will be excluded. This environment variable is used by the "jf rt build-publish" command, in case the --env-exclude command option is not sent.

| +| **JFROG\_CLI\_TRANSITIVE\_DOWNLOAD\_EXPERIMENTAL** |

[Default: false]
Used by the "jf rt download" command. Set to true to download artifacts also from remote repositories. This feature is experimental and available on Artifactory version 7.17.0 or higher.

| +| **JFROG\_CLI\_UPLOAD\_EMPTY\_ARCHIVE** |

[Default: false]
Used by the "jf rt upload" command. Set to true if you'd like to upload an empty archive when '--archive' is set but all files were excluded by exclusions pattern.

| *** diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/generic-files.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/generic-files.md index fa355e1..c885e15 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/generic-files.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/generic-files.md @@ -4,45 +4,50 @@ This command is used to upload files to Artifactory. +### Usage + +```jf rt u [command options] ``` +```jf rt u --spec= [command options]``` + ### Commands Params | | | |--------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command name | rt upload | | Abbreviation | rt u | -| Command options |

Warning

When using the * or ; characters in the upload command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| -| --archive |

[Optional]

Set to "zip" to pack and deploy the files to Artifactory inside a ZIP archive. Currently, the only packaging format supported is zip.

| -| --server-id |

[Optional]

Server ID configured using the jf c add command. If not specified, the default configured Artifactory server is used.

| -| --spec |

[Optional]

Path to a file spec. For more details, please refer to Using File Specs.

| -| --spec-vars |

[Optional]

List of variables in the form of "key1=value1;key2=value2;..." to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| -| --build-name |

[Optional]

Build name. For more details, please refer to Build Integration.

| -| --build-number |

[Optional]

Build number. For more details, please refer to Build Integration.

| -| --project |

[Optional]

JFrog project key.

| -| --module |

[Optional]

Optional module name for the build-info.

| -| --target-props |

[Optional]

A list of Artifactory properties specified as "key=value" pairs separated by a semi-colon ( ; ) to be attached to the uploaded files. If any key can take several values, then each value is separated by a comma ( , ). For example, "key1=value1;key2=value21,value22;key3=value3".

| -| --deb |

[Optional]

Used for Debian packages only. Specifies the distribution/component/architecture of the package. If the the value for distribution, component or architecture include a slash. the slash should be escaped with a back-slash.

| -| --flat |

[Default: false]

If true, files are uploaded to the exact target path specified and their hierarchy in the source file system is ignored.

If false, files are uploaded to the target path while maintaining their file system hierarchy.

If Using Placeholders are used, the value of this option is ignored.

Note

JFrog CLI v1

In JFrog CLI v1, the default value of the --flat option is true.

| -| --recursive |

[Default: true]

If true, files are also collected from sub-folders of the source directory for upload .

If false, only files specifically in the source directory are uploaded.

| -| --regexp |

[Default: false]

If true, the command will interpret the first argument, which describes the local file-system path of artifacts to upload, as a regular expression.

If false, it will interpret the first argument as a wild-card expression.

The above also applies for the --exclusions option.

If you have specified that you are using regular expressions, then the beginning of the expression must be enclosed in parenthesis. For example: a/b/c/(.*)/file.zip

| -| --ant |

[Default: false]

If true, the command will interpret the first argument, which describes the local file-system path of artifacts to upload, as an ANT pattern.

If false, it will interpret the first argument as a wildcards expression.

The above also applies for the --exclusions option.

| -| --threads |

[Default: 3]

The number of parallel threads that should be used to upload where each thread uploads a single artifact at a time.

| -| --dry-run |

[Default: false]

If true, the command only indicates which artifacts would have been uploaded

If false, the command is fully executed and uploads artifacts as specified

| -| --symlinks |

[Default: false]

If true, the command will preserve the soft links structure in Artifactory. The symlink file representation will contain the symbolic link and checksum properties.

| -| --explode |

[Default: false]

If true, the command will extract an archive containing multiple artifacts after it is deployed to Artifactory, while maintaining the archive's file structure.

| -| --include-dirs |

[Default: false]

If true, the source path applies to bottom-chain directories and not only to files. Bottom-chain directories are either empty or do not include other directories that match the source path.

| -| --exclusions |

[Optional]

A list of Semicolon-separated exclude patterns. Allows using wildcards, regular expressions or ANT patterns, according to the value of the --regexp and --ant options. Please read the --regexp and --ant options description for more information.

| -| --sync-deletes |

[Optional]

Specific path in Artifactory, under which to sync artifacts after the upload. After the upload, this path will include only the artifacts uploaded during this upload operation. The other files under this path will be deleted.

| -| --quiet |

[Default: false]

If true, the delete confirmation message is skipped.

| -| --fail-no-op |

[Default: false]

Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| -| --retries |

[Default: 3]

Number of upload retries.

| -| --retry-wait-time |

[Default: 0s]

Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds.

| -| --detailed-summary |

[Default: false]

Set to true to include a list of the affected files as part of the command output summary.

| -| --insecure-tls |

[Default: false]

Set to true to skip TLS certificates verification.

| -| --min-split |

[Default: 200]

The minimum file size in MiB required to attempt a multi-part upload. This option, as well as the functionality of multi-part upload, requires Artifactory with S3 storage.

| -| --split-count |

[Default: 5]

The maximum number of parts that can be concurrently uploaded per file during a multi-part upload. Set to 0 to disable multi-part upload. This option, as well as the functionality of multi-part upload, requires Artifactory with S3 storage.

| -| Command arguments |

The command takes two arguments.

In case the --spec option is used, the commands accept no arguments.

| +| Command arguments |

The command takes two arguments, source path and target path.

In case the --spec option is used, the commands accept no arguments.

| | Source path | The first argument specifies the local file system path to artifacts that should be uploaded to Artifactory. You can specify multiple artifacts by using wildcards or a regular expression as designated by the **--regexp** command option. Please read the **--regexp** option description for more information. | | Target path |

The second argument specifies the target path in Artifactory in the following format: [repository name]/[repository path]

If the target path ends with a slash, the path is assumed to be a folder. For example, if you specify the target as "repo-name/a/b/", then "b" is assumed to be a folder in Artifactory into which files should be uploaded. If there is no terminal slash, the target path is assumed to be a file to which the uploaded file should be renamed. For example, if you specify the target as "repo-name/a/b", the uploaded file is renamed to "b" in Artifactory.

For flexibility in specifying the upload path, you can include placeholders in the form of {1}, {2} which are replaced by corresponding tokens in the source path that are enclosed in parenthesis. For more details, please refer to Using Placeholders.

| +| Command options |


When using the * or ; characters in the upload command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| +| --archive |

[Optional]
Set to "zip" to pack and deploy the files to Artifactory inside a ZIP archive. Currently, the only packaging format supported is zip.

| +| --server-id |

[Optional]
Server ID configured using the jf c add command. If not specified, the default configured Artifactory server is used.

| +| --spec |

[Optional]
Path to a file spec. For more details, please refer to Using File Specs.

| +| --spec-vars |

[Optional]
List of variables in the form of "key1=value1;key2=value2;..." to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| +| --build-name |

[Optional]
Build name. For more details, please refer to Build Integration.

| +| --build-number |

[Optional]
Build number. For more details, please refer to Build Integration.

| +| --project |

[Optional]
JFrog project key.

| +| --module |

[Optional]
Optional module name for the build-info.

| +| --target-props |

[Optional]
A list of Artifactory properties specified as "key=value" pairs separated by a semi-colon ( ; ) to be attached to the uploaded files. If any key can take several values, then each value is separated by a comma ( , ). For example, "key1=value1;key2=value21,value22;key3=value3".

| +| --deb |

[Optional]
Used for Debian packages only. Specifies the distribution/component/architecture of the package. If the the value for distribution, component or architecture include a slash. the slash should be escaped with a back-slash.

| +| --flat |

[Default: false]
If true, files are uploaded to the exact target path specified and their hierarchy in the source file system is ignored.

If false, files are uploaded to the target path while maintaining their file system hierarchy.

If Using Placeholders are used, the value of this option is ignored.

Note

JFrog CLI v1

In JFrog CLI v1, the default value of the --flat option is true.

| +| --recursive |

[Default: true]
If true, files are also collected from sub-folders of the source directory for upload .

If false, only files specifically in the source directory are uploaded.

| +| --regexp |

[Default: false]
If true, the command will interpret the first argument, which describes the local file-system path of artifacts to upload, as a regular expression.

If false, it will interpret the first argument as a wild-card expression.

The above also applies for the --exclusions option.

If you have specified that you are using regular expressions, then the beginning of the expression must be enclosed in parenthesis. For example: a/b/c/(.*)/file.zip

| +| --ant |

[Default: false]
If true, the command will interpret the first argument, which describes the local file-system path of artifacts to upload, as an ANT pattern.

If false, it will interpret the first argument as a wildcards expression.

The above also applies for the --exclusions option.

| +| --threads |

[Default: 3]
The number of parallel threads that should be used to upload where each thread uploads a single artifact at a time.

| +| --dry-run |

[Default: false]
If true, the command only indicates which artifacts would have been uploaded

If false, the command is fully executed and uploads artifacts as specified

| +| --symlinks |

[Default: false]
If true, the command will preserve the soft links structure in Artifactory. The symlink file representation will contain the symbolic link and checksum properties.

| +| --explode |

[Default: false]
If true, the command will extract an archive containing multiple artifacts after it is deployed to Artifactory, while maintaining the archive's file structure.

| +| --include-dirs |

[Default: false]
If true, the source path applies to bottom-chain directories and not only to files. Bottom-chain directories are either empty or do not include other directories that match the source path.

| +| --exclusions |

[Optional]
A list of Semicolon-separated exclude patterns. Allows using wildcards, regular expressions or ANT patterns, according to the value of the --regexp and --ant options. Please read the --regexp and --ant options description for more information.

| +| --sync-deletes |

[Optional]
Specific path in Artifactory, under which to sync artifacts after the upload. After the upload, this path will include only the artifacts uploaded during this upload operation. The other files under this path will be deleted.

| +| --quiet |

[Default: false]
If true, the delete confirmation message is skipped.

| +| --fail-no-op |

[Default: false]
Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| +| --retries |

[Default: 3]
Number of upload retries.

| +| --retry-wait-time |

[Default: 0s]
Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds.

| +| --detailed-summary |

[Default: false]
Set to true to include a list of the affected files as part of the command output summary.

| +| --insecure-tls |

[Default: false]
Set to true to skip TLS certificates verification.

| +| --min-split |

[Default: 200]
The minimum file size in MiB required to attempt a multi-part upload. This option, as well as the functionality of multi-part upload, requires Artifactory with S3 storage.

| +| --split-count |

[Default: 5]
The maximum number of parts that can be concurrently uploaded per file during a multi-part upload. Set to 0 to disable multi-part upload. This option, as well as the functionality of multi-part upload, requires Artifactory with S3 storage.

| ### Examples #### Example 1 @@ -109,51 +114,57 @@ This command is used to download files from Artifactory. > \ > By default, the command only downloads files that are cached on the current Artifactory instance. It does not download files located on remote Artifactory instances, through remote or virtual repositories. To allow the command to download files from remote Artifactory instances, which are proxied by the use of remote repositories, set the **JFROG\_CLI\_TRANSITIVE\_DOWNLOAD\_EXPERIMENTAL** environment variable to **true**. This functionality requires version 7.17 or above of Artifactory. The remote download functionality is supported only on remote repositories which proxy repositories on remote Artifactory instances. Downloading through a remote repository that proxies non-Artifactory repositories is not supported. +### Usage + +```jf rt dl [command options] [Target path]``` +```jf rt dl --spec= [command options]``` + ### Commands Params | | | |-----------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command name | rt download | | Abbreviation | rt dl | -| Command options |

Warning

When using the * or ; characters in the download command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| -| --server-id |

[Optional]

Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| -| --build-name |

[Optional]

Build name. For more details, please refer to Build Integration.

| -| --build-number |

[Optional]

Build number. For more details, please refer to Build Integration.

| -| --project |

[Optional]

JFrog project key.

| -| --module |

[Optional]

Optional module name for the build-info.

| -| --spec |

[Optional]

Path to a file spec. For more details, please refer to Using File Specs.

| -| --spec-vars |

[Optional]

List of variables in the form of "key1=value1;key2=value2;..." to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| -| --props |

[Optional]

A list of Artifactory properties specified as "key=value" pairs separated by a semi-colon (for example, "key1=value1;key2=value2;key3=value3"). Only artifacts with all of the specified properties names and values will be downloaded.

| -| --exclude-props |

[Optional]

A list of Artifactory properties specified as "key=value" pairs separated by a semi-colon (for example, "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be downloaded.

| -| --build |

[Optional]

If specified, only artifacts of the specified build are matched. The property format is build-name/build-number. If you do not specify the build number, the artifacts are filtered by the latest build number.

| -| --bundle |

[Optional]

If specified, only artifacts of the specified bundle are matched. The value format is bundle-name/bundle-version.

| -| --flat |

[Default: false]

If true, artifacts are downloaded to the exact target path specified and their hierarchy in the source repository is ignored.

If false, artifacts are downloaded to the target path in the file system while maintaining their hierarchy in the source repository.

If Using Placeholders are used, and you would like the local file system (download path) to be determined by placeholders only, or in other words, avoid concatenating the Artifactory folder hierarchy local, set to false.

| -| --recursive |

[Default: true]

If true, artifacts are also downloaded from sub-paths under the specified path in the source repository.

If false, only artifacts in the specified source path directory are downloaded.

| -| --threads |

[Default: 3]

The number of parallel threads that should be used to download where each thread downloads a single artifact at a time.

| -| --split-count |

[Default: 3]

The number of segments into which each file should be split for download (provided the artifact is over --min-split in size). To download each file in a single thread, set to 0.

| -| --retries |

[Default: 3]

Number of download retries.

| -| --retry-wait-time |

[Default: 0s]

Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds.

| -| --min-split |

[Default: 5120]

The minimum size permitted for splitting. Files larger than the specified number will be split into equally sized --split-count segments. Any files smaller than the specified number will be downloaded in a single thread. If set to -1, files are not split.

| -| --dry-run |

[Default: false]

If true, the command only indicates which artifacts would have been downloaded.

If false, the command is fully executed and downloads artifacts as specified.

| -| --explode |

[Default: false]

Set to true to extract an archive after it is downloaded from Artifactory.

Supported compression formats: br, bz2, gz, lz4, sz, xz, zstd.

Supported archive formats: zip, tar (including any compressed variants like tar.gz), rar.

| -| --bypass-archive-inspection |

[Default: false]

Set to true to bypass the archive security inspection before it is unarchived. Used with the 'explode' option.

| -| --validate-symlinks |

[Default: false]

If true, the command will validate that symlinks are pointing to existing and unchanged files, by comparing their sha1. Applicable to files and not directories.

| -| --include-dirs |

[Default: false]

If true, the source path applies to bottom-chain directories and not only to files. Bottom-chain directories are either empty or do not include other directories that match the source path.

| -| --exclusions | A list of Semicolon-separated exclude patterns. Allows using wildcards. | -| --sync-deletes |

[Optional]

Specific path in the local file system, under which to sync dependencies after the download. After the download, this path will include only the dependencies downloaded during this download operation. The other files under this path will be deleted.

| -| --quiet |

[Default: false]

If true, the delete confirmation message is skipped.

| -| --sort-by |

[Optional]

A list of semicolon-separated fields to sort by. The fields must be part of the 'items' AQL domain. For more information read the AQL documentation

| -| --sort-order |

[Default: asc]

The order by which fields in the 'sort-by' option should be sorted. Accepts 'asc' or 'desc'.

| -| --limit |

[Optional]

The maximum number of items to fetch. Usually used with the 'sort-by' option.

| -| --offset |

[Optional]

The offset from which to fetch items (i.e. how many items should be skipped). Usually used with the 'sort-by' option.

| -| --fail-no-op |

[Default: false]

Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| -| --archive-entries |

[Optional]

If specified, only archive artifacts containing entries matching this pattern are matched. You can use wildcards to specify multiple artifacts.

| -| --detailed-summary |

[Default: false]

Set to true to include a list of the affected files as part of the command output summary.

| -| --insecure-tls |

[Default: false]

Set to true to skip TLS certificates verification.

| -| --gpg-key |

[Optional]

Path to the public GPG key file located on the file system, used to validate downloaded release bundle files.

| -| Command arguments | | +| Command arguments |

The command takes two arguments source path and target path (Optional).

In case the --spec option is used, the commands accept no arguments.

| | Source path | Specifies the source path in Artifactory, from which the artifacts should be downloaded. You can use wildcards to specify multiple artifacts. | | Target path |

The second argument is optional and specifies the local file system target path.

If the target path ends with a slash, the path is assumed to be a directory. For example, if you specify the target as "repo-name/a/b/", then "b" is assumed to be a directory into which files should be downloaded. If there is no terminal slash, the target path is assumed to be a file to which the downloaded file should be renamed. For example, if you specify the target as "a/b", the downloaded file is renamed to "b".

For flexibility in specifying the target path, you can include placeholders in the form of {1}, {2} which are replaced by corresponding tokens in the source path that are enclosed in parenthesis. For more details, please refer to Using Placeholders.

| +| Command options |

When using the * or ; characters in the download command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| +| --server-id |

[Optional]
Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| +| --build-name |

[Optional]
Build name. For more details, please refer to Build Integration.

| +| --build-number |

[Optional]
Build number. For more details, please refer to Build Integration.

| +| --project |

[Optional]
JFrog project key.

| +| --module |

[Optional]
Optional module name for the build-info.

| +| --spec |

[Optional]
Path to a file spec. For more details, please refer to Using File Specs.

| +| --spec-vars |

[Optional]
List of variables in the form of "key1=value1;key2=value2;..." to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| +| --props |

[Optional]
A list of Artifactory properties specified as "key=value" pairs separated by a semi-colon (for example, "key1=value1;key2=value2;key3=value3"). Only artifacts with all of the specified properties names and values will be downloaded.

| +| --exclude-props |

[Optional]
A list of Artifactory properties specified as "key=value" pairs separated by a semi-colon (for example, "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be downloaded.

| +| --build |

[Optional]
If specified, only artifacts of the specified build are matched. The property format is build-name/build-number. If you do not specify the build number, the artifacts are filtered by the latest build number.

| +| --bundle |

[Optional]
If specified, only artifacts of the specified bundle are matched. The value format is bundle-name/bundle-version.

| +| --flat |

[Default: false]
If true, artifacts are downloaded to the exact target path specified and their hierarchy in the source repository is ignored.

If false, artifacts are downloaded to the target path in the file system while maintaining their hierarchy in the source repository.

If Using Placeholders are used, and you would like the local file system (download path) to be determined by placeholders only, or in other words, avoid concatenating the Artifactory folder hierarchy local, set to false.

| +| --recursive |

[Default: true]
If true, artifacts are also downloaded from sub-paths under the specified path in the source repository.

If false, only artifacts in the specified source path directory are downloaded.

| +| --threads |

[Default: 3]
The number of parallel threads that should be used to download where each thread downloads a single artifact at a time.

| +| --split-count |

[Default: 3]
The number of segments into which each file should be split for download (provided the artifact is over --min-split in size). To download each file in a single thread, set to 0.

| +| --retries |

[Default: 3]
Number of download retries.

| +| --retry-wait-time |

[Default: 0s]
Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds.

| +| --min-split |

[Default: 5120]
The minimum size permitted for splitting. Files larger than the specified number will be split into equally sized --split-count segments. Any files smaller than the specified number will be downloaded in a single thread. If set to -1, files are not split.

| +| --dry-run |

[Default: false]
If true, the command only indicates which artifacts would have been downloaded.

If false, the command is fully executed and downloads artifacts as specified.

| +| --explode |

[Default: false]
Set to true to extract an archive after it is downloaded from Artifactory.

Supported compression formats: br, bz2, gz, lz4, sz, xz, zstd.

Supported archive formats: zip, tar (including any compressed variants like tar.gz), rar.

| +| --bypass-archive-inspection |

[Default: false]
Set to true to bypass the archive security inspection before it is unarchived. Used with the 'explode' option.

| +| --validate-symlinks |

[Default: false]
If true, the command will validate that symlinks are pointing to existing and unchanged files, by comparing their sha1. Applicable to files and not directories.

| +| --include-dirs |

[Default: false]
If true, the source path applies to bottom-chain directories and not only to files. Bottom-chain directories are either empty or do not include other directories that match the source path.

| +| --exclusions | A list of Semicolon-separated exclude patterns. Allows using wildcards. | +| --sync-deletes |

[Optional]
Specific path in the local file system, under which to sync dependencies after the download. After the download, this path will include only the dependencies downloaded during this download operation. The other files under this path will be deleted.

| +| --quiet |

[Default: false]
If true, the delete confirmation message is skipped.

| +| --sort-by |

[Optional]
A list of semicolon-separated fields to sort by. The fields must be part of the 'items' AQL domain. For more information read the AQL documentation

| +| --sort-order |

[Default: asc]
The order by which fields in the 'sort-by' option should be sorted. Accepts 'asc' or 'desc'.

| +| --limit |

[Optional]
The maximum number of items to fetch. Usually used with the 'sort-by' option.

| +| --offset |

[Optional]
The offset from which to fetch items (i.e. how many items should be skipped). Usually used with the 'sort-by' option.

| +| --fail-no-op |

[Default: false]
Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| +| --archive-entries |

[Optional]
If specified, only archive artifacts containing entries matching this pattern are matched. You can use wildcards to specify multiple artifacts.

| +| --detailed-summary |

[Default: false]
Set to true to include a list of the affected files as part of the command output summary.

| +| --insecure-tls |

[Default: false]
Set to true to skip TLS certificates verification.

| +| --gpg-key |

[Optional]
Path to the public GPG key file located on the file system, used to validate downloaded release bundle files.

| + ### Examples #### Example 1 @@ -192,36 +203,41 @@ jf rt dl "my-local-repo/all-my-frogs/" --sort-by=created --sort-order=desc --li This command is used to copy files in Artifactory +### Usage + +```jf rt cp [command options] ``` +```jf rt cp --spec= [command options]``` + ### Commands Params | | | |-------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command name | rt copy | | Abbreviation | rt cp | -| Command options |

Warning

When using the * or ; characters in the copy command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| -| --server-id |

[Optional]

Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| -| --spec |

[Optional]

Path to a file spec. For more details, please refer to Using File Specs.

| -| --props |

[Optional]

A list of Artifactory properties specified as "key=value" pairs separated by a semi-colon. (For example, "key1=value1;key2=value2;key3=value3"). Only artifacts with these properties names and values will be copied.

| -| --exclude-props |

[Optional]

A list of Artifactory properties specified as "key=value" pairs separated by a semi-colon (for example, "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be copied.

| -| --build |

[Optional]

If specified, only artifacts of the specified build are matched. The property format is build-name/build-number. If you do not specify the build number, the artifacts are filtered by the latest build number.

| -| --bundle |

[Optional]

If specified, only artifacts of the specified bundle are matched. The value format is bundle-name/bundle-version.

| -| --flat |

[Default: false]

If true, artifacts are copied to the exact target path specified and their hierarchy in the source path is ignored.

If false, artifacts are copied to the target path while maintaining their source path hierarchy.

| -| --recursive |

[Default: true]

If true, artifacts are also copied from sub-paths under the specified source path.

If false, only artifacts in the specified source path directory are copied.

| -| --dry-run |

[Default: false]

If true, the command only indicates which artifacts would have been copied.

If false, the command is fully executed and copies artifacts as specified.

| -| --exclusions | A list of Semicolon-separated exclude patterns. Allows using wildcards. | -| --threads |

[Default: 3]

Number of threads used for copying the items.

| -| --sort-by |

[Optional]

A list of semicolon-separated fields to sort by. The fields must be part of the 'items' AQL domain. For more information read the AQL documentation

| -| --sort-order |

[Default: asc]

The order by which fields in the 'sort-by' option should be sorted. Accepts 'asc' or 'desc'.

| -| --limit |

[Optional]

The maximum number of items to fetch. Usually used with the 'sort-by' option.

| -| --offset |

[Optional]

The offset from which to fetch items (i.e. how many items should be skipped). Usually used with the 'sort-by' option.

| -| --fail-no-op |

[Default: false]

Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| -| --archive-entries |

[Optional]

If specified, only archive artifacts containing entries matching this pattern are matched. You can use wildcards to specify multiple artifacts.

| -| --insecure-tls |

[Default: false]

Set to true to skip TLS certificates verification.

| -| --retries |

[Default: 3]

Number for HTTP retry attempts.

| -| --retry-wait-time |

[Default: 0s]

Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds.

| -| Command arguments | The command takes two arguments | +| Command arguments |

The command takes two arguments source path and target path.

In case the --spec option is used, the commands accept no arguments.

| | Source path | Specifies the source path in Artifactory, from which the artifacts should be copied, in the following format: `[repository name]/[repository path].` You can use wildcards to specify multiple artifacts. | | Target path |

Specifies the target path in Artifactory, to which the artifacts should be copied, in the following format: [repository name]/[repository path]

If the pattern ends with a slash, the target path is assumed to be a folder. For example, if you specify the target as "repo-name/a/b/", then "b" is assumed to be a folder in Artifactory into which files should be copied. If there is no terminal slash, the target path is assumed to be a file to which the copied file should be renamed. For example, if you specify the target as "repo-name/a/b", the copied file is renamed to "b" in Artifactory.

For flexibility in specifying the target path, you can include placeholders in the form of {1}, {2} which are replaced by corresponding tokens in the source path that are enclosed in parenthesis. For more details, please refer to Using Placeholders.

| +| Command options |

When using the * or ; characters in the copy command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| +| --server-id |

[Optional]
Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| +| --spec |

[Optional]
Path to a file spec. For more details, please refer to Using File Specs.

| +| --props |

[Optional]
A list of Artifactory properties specified as "key=value" pairs separated by a semi-colon. (For example, "key1=value1;key2=value2;key3=value3"). Only artifacts with these properties names and values will be copied.

| +| --exclude-props |

[Optional]
A list of Artifactory properties specified as "key=value" pairs separated by a semi-colon (for example, "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be copied.

| +| --build |

[Optional]
If specified, only artifacts of the specified build are matched. The property format is build-name/build-number. If you do not specify the build number, the artifacts are filtered by the latest build number.

| +| --bundle |

[Optional]
If specified, only artifacts of the specified bundle are matched. The value format is bundle-name/bundle-version.

| +| --flat |

[Default: false]
If true, artifacts are copied to the exact target path specified and their hierarchy in the source path is ignored.

If false, artifacts are copied to the target path while maintaining their source path hierarchy.

| +| --recursive |

[Default: true]
If true, artifacts are also copied from sub-paths under the specified source path.

If false, only artifacts in the specified source path directory are copied.

| +| --dry-run |

[Default: false]
If true, the command only indicates which artifacts would have been copied.

If false, the command is fully executed and copies artifacts as specified.

| +| --exclusions | A list of Semicolon-separated exclude patterns. Allows using wildcards. | +| --threads |

[Default: 3]
Number of threads used for copying the items.

| +| --sort-by |

[Optional]
A list of semicolon-separated fields to sort by. The fields must be part of the 'items' AQL domain. For more information read the AQL documentation

| +| --sort-order |

[Default: asc]
The order by which fields in the 'sort-by' option should be sorted. Accepts 'asc' or 'desc'.

| +| --limit |

[Optional]
The maximum number of items to fetch. Usually used with the 'sort-by' option.

| +| --offset |

[Optional]
The offset from which to fetch items (i.e. how many items should be skipped). Usually used with the 'sort-by' option.

| +| --fail-no-op |

[Default: false]
Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| +| --archive-entries |

[Optional]
If specified, only archive artifacts containing entries matching this pattern are matched. You can use wildcards to specify multiple artifacts.

| +| --insecure-tls |

[Default: false]
Set to true to skip TLS certificates verification.

| +| --retries |

[Default: 3]
Number for HTTP retry attempts.

| +| --retry-wait-time |

[Default: 0s]
Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds.

| ### Examples #### Example 1 @@ -252,36 +268,41 @@ jf rt cp "source-frog-repo/rabbit/*" target-frog-repo/rabbit/ --props=Version=1. This command is used to move files in Artifactory +### Usage + +```jf rt mv [command options] ``` +```jf rt mv --spec= [command options]``` + ### Commands Params | | | |-------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command name | rt move | | Abbreviation | rt mv | -| Command options |

Warning

When using the * or ; characters in the copy command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| -| --server-id |

[Optional]

Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| -| --spec |

[Optional]

Path to a file spec. For more details, please refer to Using File Specs.

| -| --props |

[Optional]

A list of Artifactory properties specified as "key=value" pairs separated by a semi-colon (for example, "key1=value1;key2=value2;key3=value3"). Only artifacts with these properties names and values will be moved.

| -| --exclude-props |

[Optional]

A list of Artifactory properties specified as "key=value" pairs separated by a semi-colon (for example, "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be moved.

| -| --build |

[Optional]

If specified, only artifacts of the specified build are matched. The property format is build-name/build-number. If you do not specify the build number, the artifacts are filtered by the latest build number.

| -| --bundle |

[Optional]

If specified, only artifacts of the specified bundle are matched. The value format is bundle-name/bundle-version.

| -| --flat |

[Default: false]

If true, artifacts are moved to the exact target path specified and their hierarchy in the source path is ignored.

If false, artifacts are moved to the target path while maintaining their source path hierarchy.

| -| --recursive |

[Default: true]

If true, artifacts are also moved from sub-paths under the specified source path.

If false, only artifacts in the specified source path directory are moved.

| -| --dry-run |

[Default: false]

If true, the command only indicates which artifacts would have been moved.

If false, the command is fully executed and downloads artifacts as specified.

| -| --exclusions | A list of Semicolon-separated exclude patterns. Allows using wildcards. | -| --threads |

[Default: 3]

Number of threads used for moving the items.

| -| --sort-by |

[Optional]

A list of semicolon-separated fields to sort by. The fields must be part of the 'items' AQL domain. For more information read the AQL documentation

| -| --sort-order |

[Default: asc]

The order by which fields in the 'sort-by' option should be sorted. Accepts 'asc' or 'desc'.

| -| --limit |

[Optional]

The maximum number of items to fetch. Usually used with the 'sort-by' option.

| -| --offset |

[Optional]

The offset from which to fetch items (i.e. how many items should be skipped). Usually used with the 'sort-by' option.

| -| --fail-no-op |

[Default: false]

Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| -| --archive-entries |

[Optional]

If specified, only archive artifacts containing entries matching this pattern are matched. You can use wildcards to specify multiple artifacts.

| -| --insecure-tls |

[Default: false]

Set to true to skip TLS certificates verification.

| -| --retries |

[Default: 3]

Number of HTTP retry attempts.

| -| --retry-wait-time |

[Default: 0s]

Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds.

| -| Command arguments | The command takes two arguments | +| Command arguments |

The command takes two arguments source path and target path.

In case the --spec option is used, the commands accept no arguments.

| | Source path | Specifies the source path in Artifactory, from which the artifacts should be moved, in the following format: `[repository name]/[repository path].` You can use wildcards to specify multiple artifacts. | | Target path |

Specifies the target path in Artifactory, to which the artifacts should be moved, in the following format: [repository name]/[repository path]

If the pattern ends with a slash, the target path is assumed to be a folder. For example, if you specify the target as "repo-name/a/b/", then "b" is assumed to be a folder in Artifactory into which files should be moved. If there is no terminal slash, the target path is assumed to be a file to which the moved file should be renamed. For example, if you specify the target as "repo-name/a/b", the moved file is renamed to "b" in Artifactory.

For flexibility in specifying the upload path, you can include placeholders in the form of {1}, {2} which are replaced by corresponding tokens in the source path that are enclosed in parenthesis. For more details, please refer to Using Placeholders.

| +| Command options |

When using the * or ; characters in the copy command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| +| --server-id |

[Optional]
Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| +| --spec |

[Optional]
Path to a file spec. For more details, please refer to Using File Specs.

| +| --props |

[Optional]
A list of Artifactory properties specified as "key=value" pairs separated by a semi-colon (for example, "key1=value1;key2=value2;key3=value3"). Only artifacts with these properties names and values will be moved.

| +| --exclude-props |

[Optional]
A list of Artifactory properties specified as "key=value" pairs separated by a semi-colon (for example, "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be moved.

| +| --build |

[Optional]
If specified, only artifacts of the specified build are matched. The property format is build-name/build-number. If you do not specify the build number, the artifacts are filtered by the latest build number.

| +| --bundle |

[Optional]
If specified, only artifacts of the specified bundle are matched. The value format is bundle-name/bundle-version.

| +| --flat |

[Default: false]
If true, artifacts are moved to the exact target path specified and their hierarchy in the source path is ignored.

If false, artifacts are moved to the target path while maintaining their source path hierarchy.

| +| --recursive |

[Default: true]
If true, artifacts are also moved from sub-paths under the specified source path.

If false, only artifacts in the specified source path directory are moved.

| +| --dry-run |

[Default: false]
If true, the command only indicates which artifacts would have been moved.

If false, the command is fully executed and downloads artifacts as specified.

| +| --exclusions | A list of Semicolon-separated exclude patterns. Allows using wildcards. | +| --threads |

[Default: 3]
Number of threads used for moving the items.

| +| --sort-by |

[Optional]
A list of semicolon-separated fields to sort by. The fields must be part of the 'items' AQL domain. For more information read the AQL documentation

| +| --sort-order |

[Default: asc]
The order by which fields in the 'sort-by' option should be sorted. Accepts 'asc' or 'desc'.

| +| --limit |

[Optional]
The maximum number of items to fetch. Usually used with the 'sort-by' option.

| +| --offset |

[Optional]
The offset from which to fetch items (i.e. how many items should be skipped). Usually used with the 'sort-by' option.

| +| --fail-no-op |

[Default: false]
Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| +| --archive-entries |

[Optional]
If specified, only archive artifacts containing entries matching this pattern are matched. You can use wildcards to specify multiple artifacts.

| +| --insecure-tls |

[Default: false]
Set to true to skip TLS certificates verification.

| +| --retries |

[Default: 3]
Number of HTTP retry attempts.

| +| --retry-wait-time |

[Default: 0s]
Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds.

| ### Examples #### Example 1 @@ -312,35 +333,41 @@ jf rt mv "source-frog-repo/rabbit/*" target-frog-repo/rabbit/ --props=Version=1. This command is used to delete files in Artifactory +### Usage + +```jf rt del [command options] ``` +```jf rt del --spec= [command options]``` + ### Commands Params -| | | -|-------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command name | rt delete | -| Abbreviation | rt del | -| Command options |

Warning

When using the * or ; characters in the delete command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| -| --server-id |

[Optional]

Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| -| --spec |

[Optional]

Path to a file spec. For more details, please refer to Using File Specs.

| -| --props |

[Optional]

A list of Artifactory properties specified as "key=value" pairs separated by a semi-colon (for example, "key1=value1;key2=value2;key3=value3"). Only artifacts with these properties names and values will be deleted.

| -| --exclude-props |

[Optional]

A list of Artifactory properties specified as "key=value" pairs separated by a semi-colon (for example, "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be deleted.

| -| --build |

[Optional]

If specified, only artifacts of the specified build are matched. The property format is build-name/build-number. If you do not specify the build number, the artifacts are filtered by the latest build number.

| -| --bundle |

[Optional]

If specified, only artifacts of the specified bundle are matched. The value format is bundle-name/bundle-version.

| -| --recursive |

[Default: true]

If true, artifacts are also deleted from sub-paths under the specified path.

| -| --quiet |

[Default: false]

If true, the delete confirmation message is skipped.

| -| --dry-run |

[Default: false]

If true, the command only indicates which artifacts would have been deleted.

If false, the command is fully executed and deletes artifacts as specified.

| -| --exclusions | A list of Semicolon-separated exclude patterns. Allows using wildcards. | -| --sort-by |

[Optional]

A list of semicolon-separated fields to sort by. The fields must be part of the 'items' AQL domain. For more information read the AQL documentation

| -| --sort-order |

[Default: asc]

The order by which fields in the 'sort-by' option should be sorted. Accepts 'asc' or 'desc'.

| -| --limit |

[Optional]

The maximum number of items to fetch. Usually used with the 'sort-by' option.

| -| --offset |

[Optional]

The offset from which to fetch items (i.e. how many items should be skipped). Usually used with the 'sort-by' option.

| -| --fail-no-op |

[Default: false]

Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| -| --archive-entries |

[Optional]

If specified, only archive artifacts containing entries matching this pattern are matched. You can use wildcards to specify multiple artifacts.

| -| --threads |

[Default: 3]

Number of threads used for deleting the items.

| -| --insecure-tls |

[Default: false]

Set to true to skip TLS certificates verification.

| -| --retries |

[Default: 3]

Number of HTTP retry attempts.

| -| --retry-wait-time |

[Default: 0s]

Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds.--retry-wait-time

| -| Command arguments | The command takes one argument | -| Delete path | Specifies the path in Artifactory of the files that should be deleted in the following format: `[repository name]/[repository path].` You can use wildcards to specify multiple artifacts. | +| | | +|-------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command name | rt delete | +| Abbreviation | rt del | +| Command arguments |

The command takes one argument which is the delete path.

In case the --spec option is used, the commands accept no arguments.

| +| Delete path | Specifies the path in Artifactory of the files that should be deleted in the following format: `[repository name]/[repository path].` You can use wildcards to specify multiple artifacts. | +| Command options |

When using the * or ; characters in the delete command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| +| --server-id |

[Optional]
Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| +| --spec |

[Optional]
Path to a file spec. For more details, please refer to Using File Specs.

| +| --props |

[Optional]
A list of Artifactory properties specified as "key=value" pairs separated by a semi-colon (for example, "key1=value1;key2=value2;key3=value3"). Only artifacts with these properties names and values will be deleted.

| +| --exclude-props |

[Optional]
A list of Artifactory properties specified as "key=value" pairs separated by a semi-colon (for example, "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be deleted.

| +| --build |

[Optional]
If specified, only artifacts of the specified build are matched. The property format is build-name/build-number. If you do not specify the build number, the artifacts are filtered by the latest build number.

| +| --bundle |

[Optional]
If specified, only artifacts of the specified bundle are matched. The value format is bundle-name/bundle-version.

| +| --recursive |

[Default: true]
If true, artifacts are also deleted from sub-paths under the specified path.

| +| --quiet |

[Default: false]
If true, the delete confirmation message is skipped.

| +| --dry-run |

[Default: false]
If true, the command only indicates which artifacts would have been deleted.

If false, the command is fully executed and deletes artifacts as specified.

| +| --exclusions | A list of Semicolon-separated exclude patterns. Allows using wildcards. | +| --sort-by |

[Optional]
A list of semicolon-separated fields to sort by. The fields must be part of the 'items' AQL domain. For more information read the AQL documentation

| +| --sort-order |

[Default: asc]
The order by which fields in the 'sort-by' option should be sorted. Accepts 'asc' or 'desc'.

| +| --limit |

[Optional]
The maximum number of items to fetch. Usually used with the 'sort-by' option.

| +| --offset |

[Optional]
The offset from which to fetch items (i.e. how many items should be skipped). Usually used with the 'sort-by' option.

| +| --fail-no-op |

[Default: false]
Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| +| --archive-entries |

[Optional]
If specified, only archive artifacts containing entries matching this pattern are matched. You can use wildcards to specify multiple artifacts.

| +| --threads |

[Default: 3]
Number of threads used for deleting the items.

| +| --insecure-tls |

[Default: false]
Set to true to skip TLS certificates verification.

| +| --retries |

[Default: 3]
Number of HTTP retry attempts.

| +| --retry-wait-time |

[Default: 0s]
Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds.--retry-wait-time

| + ### Examples #### Example 1 @@ -363,37 +390,43 @@ jf rt del "frog-repo/rabbit/*.zip" This command is used to search and display files in Artifactory. +### Usage + +```jf rt s [command options] ``` +```jf rt s --spec= [command options]``` + + ### Commands Params -| | | -|-------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command name | rt search | -| Abbreviation | rt s | -| Command options |

Warning

When using the * or ; characters in the command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| -| --server-id |

[Optional]

Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| -| --spec |

[Optional]

Path to a file spec. For more details, please refer to Using File Specs.

| -| --count |

[Optional]

Set to true to display only the total of files or folders found.

| -| --include-dirs |

[Optional]

Set to true if you'd like to also apply the source path pattern for directories and not only for files

| -| --spec-vars |

[Optional]

List of variables in the form of "key1=value1;key2=value2;..." to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| -| --props |

[Optional]

A list of Artifactory properties specified as "key=value" pairs separated by a semi-colon (for example, "key1=value1;key2=value2;key3=value3"). Only artifacts with these properties names and values will be returned.

| -| --exclude-props |

[Optional]

A list of Artifactory properties specified as "key=value" pairs separated by a semi-colon (for example, "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be returned.

| -| --build |

[Optional]

If specified, only artifacts of the specified build are matched. The property format is build-name/build-number. If you do not specify the build number, the artifacts are filtered by the latest build number.

| -| --bundle |

[Optional]

If specified, only artifacts of the specified bundle are matched. The value format is bundle-name/bundle-version.

| -| --recursive |

[Default: true]

Set to false if you do not wish to search artifacts inside sub-folders in Artifactory.

| -| --exclusions | A list of Semicolon-separated exclude patterns. Allows using wildcards. | -| --sort-by |

[Optional]

A list of semicolon-separated fields to sort by. The fields must be part of the 'items' AQL domain. For more information read the AQL documentation

| -| --sort-order |

[Default: asc]

The order by which fields in the 'sort-by' option should be sorted. Accepts 'asc' or 'desc'.

| -| --transitive |

[Default: false]

Set to true to look for artifacts also in remote repositories. Available on Artifactory version 7.17.0 or higher.

| -| --limit |

[Optional]

The maximum number of items to fetch. Usually used with the 'sort-by' option.

| -| --offset |

[Optional]

The offset from which to fetch items (i.e. how many items should be skipped). Usually used with the 'sort-by' option.

| -| --fail-no-op |

[Default: false]

Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| -| --archive-entries |

[Optional]

If specified, only archive artifacts containing entries matching this pattern are matched. You can use wildcards to specify multiple artifacts.

| -| --insecure-tls |

[Default: false]

Set to true to skip TLS certificates verification.

| -| --retries |

[Default: 3]

Number of HTTP retry attempts.

| -| --retry-wait-time |

[Default: 0s]

Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds.retry-wait-time

| -| --include |

[Optional]

List of fields in the form of "value1;value2;...".
Only the path and the fields that are specified will be returned. The fields must be part of the 'items' AQL domain. for the full supported items list check AQL documentation

| -| Command arguments | | -| Search path | Specifies the search path in Artifactory, in the following format: `[repository name]/[repository path].` You can use wildcards to specify multiple artifacts. | +| | | +|-------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command name | rt search | +| Abbreviation | rt s | +| Command arguments |

The command takes one argument which is the search path.

In case the --spec option is used, the commands accept no arguments.

| +| Search path | Specifies the search path in Artifactory, in the following format: `[repository name]/[repository path].` You can use wildcards to specify multiple artifacts. | +| Command options |

When using the * or ; characters in the command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| +| --server-id |

[Optional]
Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| +| --spec |

[Optional]
Path to a file spec. For more details, please refer to Using File Specs.

| +| --count |

[Optional]
Set to true to display only the total of files or folders found.

| +| --include-dirs |

[Default: false]
Set to true if you'd like to also apply the source path pattern for directories and not only for files

| +| --spec-vars |

[Optional]
List of variables in the form of "key1=value1;key2=value2;..." to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| +| --props |

[Optional]
A list of Artifactory properties specified as "key=value" pairs separated by a semi-colon (for example, "key1=value1;key2=value2;key3=value3"). Only artifacts with these properties names and values will be returned.

| +| --exclude-props |

[Optional]
A list of Artifactory properties specified as "key=value" pairs separated by a semi-colon (for example, "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be returned.

| +| --build |

[Optional]
If specified, only artifacts of the specified build are matched. The property format is build-name/build-number. If you do not specify the build number, the artifacts are filtered by the latest build number.

| +| --bundle |

[Optional]
If specified, only artifacts of the specified bundle are matched. The value format is bundle-name/bundle-version.

| +| --recursive |

[Default: true]
Set to false if you do not wish to search artifacts inside sub-folders in Artifactory.

| +| --exclusions | A list of Semicolon-separated exclude patterns. Allows using wildcards. | +| --sort-by |

[Optional]
A list of semicolon-separated fields to sort by. The fields must be part of the 'items' AQL domain. For more information read the AQL documentation

| +| --sort-order |

[Default: asc]
The order by which fields in the 'sort-by' option should be sorted. Accepts 'asc' or 'desc'.

| +| --transitive |

[Optional]
Set to true to look for artifacts also in remote repositories. Available on Artifactory version 7.17.0 or higher.

| +| --limit |

[Optional]
The maximum number of items to fetch. Usually used with the 'sort-by' option.

| +| --offset |

[Optional]
The offset from which to fetch items (i.e. how many items should be skipped). Usually used with the 'sort-by' option.

| +| --fail-no-op |

[Default: false]
Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| +| --archive-entries |

[Optional]
If specified, only archive artifacts containing entries matching this pattern are matched. You can use wildcards to specify multiple artifacts.

| +| --insecure-tls |

[Default: false]
Set to true to skip TLS certificates verification.

| +| --retries |

[Default: 3]
Number of HTTP retry attempts.

| +| --retry-wait-time |

[Default: 0s]
Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds.retry-wait-time

| +| --include |

[Optional]
List of fields in the form of "value1;value2;...".
Only the path and the fields that are specified will be returned. The fields must be part of the 'items' AQL domain. for the full supported items list check AQL documentation

| ### Examples #### Example 1 @@ -424,36 +457,41 @@ jf rt s example-repo-local --include="actual_md5;modified_by;updated;depth" This command is used for setting properties on existing files in Artifactory. +### Usage + +```jf rt sp [command options] ``` +```jf rt sp --spec= [command options]``` + ### Commands Params -| | | -|-------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command name | rt set-props | -| Abbreviation | rt sp | -| Command options |

Warning

When using the * or ; characters in the command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| -| --server-id |

[Optional]

Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| -| --spec |

[Optional]

Path to a file spec. For more details, please refer to Using File Specs.

| -| --spec-vars |

[Optional]

List of variables in the form of "key1=value1;key2=value2;..." to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| -| --props |

[Optional]

List of properties in the form of "key1=value1;key2=value2,...". Only files with these properties names and values are affected.

| -| --exclude-props |

[Optional]

A list of Artifactory properties specified as "key=value" pairs separated by a semi-colon (for example, "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be affected.

| -| --recursive |

[Default: true]

When false, artifacts inside sub-folders in Artifactory will not be affected.

| -| --build |

[Optional]

If specified, only artifacts of the specified build are matched. The property format is build-name/build-number. If you do not specify the build number, the artifacts are filtered by the latest build number.

| -| --bundle | \[Optional] If specified, only artifacts of the specified bundle are matched. The value format is bundle-name/bundle-version. | -| --include-dirs |

[Default: false]

When true, the properties will also be set on folders (and not just files) in Artifactory.

| -| --fail-no-op |

[Default: false]

Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| -| --exclusions | A list of Semicolon-separated exclude patterns. Allows using wildcards. | -| --sort-by |

[Optional]

A list of semicolon-separated fields to sort by. The fields must be part of the 'items' AQL domain. For more information read the AQL documentation

| -| --sort-order |

[Default: asc]

The order by which fields in the 'sort-by' option should be sorted. Accepts 'asc' or 'desc'.

| -| --limit |

[Optional]

The maximum number of items to fetch. Usually used with the 'sort-by' option.

| -| --offset |

[Optional]

The offset from which to fetch items (i.e. how many items should be skipped). Usually used with the 'sort-by' option.

| -| --archive-entries |

[Optional]

If specified, only archive artifacts containing entries matching this pattern are matched. You can use wildcards to specify multiple artifacts.

| -| --insecure-tls |

[Default: false]

Set to true to skip TLS certificates verification.

| -| --threads |

[Default: 3]

Number of working threads.

| -| --retries |

[Default: 3]

Number of HTTP retry attempts.

| -| --retry-wait-time |

[Default: 0s]

Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds.

| -| Command arguments | The command takes two arguments. | -| Files pattern | Files that match the pattern will be set with the specified properties. | -| Files properties | The list of properties, in the form of key1=value1;key2=value2,..., to be set on the matching artifacts. | +| | | +|-------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command name | rt set-props | +| Abbreviation | rt sp | +| Command arguments |

The command takes two arguments, files pattern and files properties.

In case the --spec option is used, the commands accept no arguments.

| +| Files pattern | Files that match the pattern will be set with the specified properties. | +| Files properties | The list of properties, in the form of key1=value1;key2=value2,..., to be set on the matching artifacts. | +| Command options |

When using the * or ; characters in the command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| +| --server-id |

[Optional]
Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| +| --spec |

[Optional]
Path to a file spec. For more details, please refer to Using File Specs.

| +| --spec-vars |

[Optional]
List of variables in the form of "key1=value1;key2=value2;..." to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| +| --props |

[Optional]
List of properties in the form of "key1=value1;key2=value2,...". Only files with these properties names and values are affected.

| +| --exclude-props |

[Optional]
A list of Artifactory properties specified as "key=value" pairs separated by a semi-colon (for example, "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be affected.

| +| --recursive |

[Default: true]
When false, artifacts inside sub-folders in Artifactory will not be affected.

| +| --build |

[Optional]
If specified, only artifacts of the specified build are matched. The property format is build-name/build-number. If you do not specify the build number, the artifacts are filtered by the latest build number.

| +| --bundle | \[Optional] If specified, only artifacts of the specified bundle are matched. The value format is bundle-name/bundle-version. | +| --include-dirs |

[Default: false]
When true, the properties will also be set on folders (and not just files) in Artifactory.

| +| --fail-no-op |

[Default: false]
Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| +| --exclusions | A list of Semicolon-separated exclude patterns. Allows using wildcards. | +| --sort-by |

[Optional]
A list of semicolon-separated fields to sort by. The fields must be part of the 'items' AQL domain. For more information read the AQL documentation

| +| --sort-order |

[Default: asc]
The order by which fields in the 'sort-by' option should be sorted. Accepts 'asc' or 'desc'.

| +| --limit |

[Optional]
The maximum number of items to fetch. Usually used with the 'sort-by' option.

| +| --offset |

[Optional]
The offset from which to fetch items (i.e. how many items should be skipped). Usually used with the 'sort-by' option.

| +| --archive-entries |

[Optional]
If specified, only archive artifacts containing entries matching this pattern are matched. You can use wildcards to specify multiple artifacts.

| +| --insecure-tls |

[Default: false]
Set to true to skip TLS certificates verification.

| +| --threads |

[Default: 3]
Number of working threads.

| +| --retries |

[Default: 3]
Number of HTTP retry attempts.

| +| --retry-wait-time |

[Default: 0s]
Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds.

| ### Examples #### Example 1 @@ -476,33 +514,38 @@ jf rt sp "a=1;b=2,3" --spec my-spec This command is used for deleting properties from existing files in Artifactory. +### Usage + +```jf rt delp [command options] ``` +```jf rt delp --spec= [command options]``` + ### Commands Params -| | | -|-------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command name | rt delete-props | -| Abbreviation | rt delp | -| Command options |

Warning

When using the * or ; characters in the command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| -| --server-id |

[Optional]

Artifactory server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| -| --props |

[Optional]

List of properties in the form of "key1=value1;key2=value2,...". Only files with these properties are affected.

| -| --exclude-props |

[Optional]

A list of Artifactory properties specified as "key=value" pairs separated by a semi-colon (for example, "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be affected.

| -| --recursive |

[Default: true]

When false, artifacts inside sub-folders in Artifactory will not be affected.

| -| --build |

[Optional]

If specified, only artifacts of the specified build are matched. The property format is build-name/build-number. If you do not specify the build number, the artifacts are filtered by the latest build number.

| -| --bundle |

[Optional]

If specified, only artifacts of the specified bundle are matched. The value format is bundle-name/bundle-version.

| -| --include-dirs |

[Default: false]

When true, the properties will also be set on folders (and not just files) in Artifactory.

| -| --fail-no-op |

[Default: false]

Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| -| --exclusions | A list of Semicolon-separated exclude patterns. Allows using wildcards. | -| --sort-by |

[Optional]

A list of semicolon-separated fields to sort by. The fields must be part of the 'items' AQL domain. For more information read the AQL documentation

| -| --sort-order |

[Default: asc]

The order by which fields in the 'sort-by' option should be sorted. Accepts 'asc' or 'desc'.

| -| --limit |

[Optional]

The maximum number of items to fetch. Usually used with the 'sort-by' option.

| -| --offset |

[Optional]

The offset from which to fetch items (i.e. how many items should be skipped). Usually used with the 'sort-by' option.

| -| --archive-entries |

[Optional]

If specified, only archive artifacts containing entries matching this pattern are matched. You can use wildcards to specify multiple artifacts.

| -| --insecure-tls |

[Default: false]

Set to true to skip TLS certificates verification.

| -| --retries |

[Default: 3]

Number of HTTP retry attempts.

| -| --retry-wait-time |

[Default: 0s]

Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds.retry-wait-time

| -| Command arguments | The command takes two arguments. | -| Files pattern | The properties will be deleted from files that match the pattern. | -| Files properties | The list of properties, in the form of key1,key2,..., to be deleted from the matching artifacts. | +| | | +|-------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command name | rt delete-props | +| Abbreviation | rt delp | +| Command arguments |

The command takes two arguments, files pattern and files properties.

In case the --spec option is used, the commands accept no arguments.

| +| Files pattern | The properties will be deleted from files that match the pattern. | +| Files properties | The list of properties, in the form of key1,key2,..., to be deleted from the matching artifacts. | +| Command options |

When using the * or ; characters in the command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| +| --server-id |

[Optional]
Artifactory server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| +| --props |

[Optional]
List of properties in the form of "key1=value1;key2=value2,...". Only files with these properties are affected.

| +| --exclude-props |

[Optional]
A list of Artifactory properties specified as "key=value" pairs separated by a semi-colon (for example, "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be affected.

| +| --recursive |

[Default: true]
When false, artifacts inside sub-folders in Artifactory will not be affected.

| +| --build |

[Optional]
If specified, only artifacts of the specified build are matched. The property format is build-name/build-number. If you do not specify the build number, the artifacts are filtered by the latest build number.

| +| --bundle |

[Optional]
If specified, only artifacts of the specified bundle are matched. The value format is bundle-name/bundle-version.

| +| --include-dirs |

[Default: false]
When true, the properties will also be set on folders (and not just files) in Artifactory.

| +| --fail-no-op |

[Default: false]
Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| +| --exclusions | A list of Semicolon-separated exclude patterns. Allows using wildcards. | +| --sort-by |

[Optional]
A list of semicolon-separated fields to sort by. The fields must be part of the 'items' AQL domain. For more information read the AQL documentation

| +| --sort-order |

[Default: asc]
The order by which fields in the 'sort-by' option should be sorted. Accepts 'asc' or 'desc'.

| +| --limit |

[Optional]
The maximum number of items to fetch. Usually used with the 'sort-by' option.

| +| --offset |

[Optional]
The offset from which to fetch items (i.e. how many items should be skipped). Usually used with the 'sort-by' option.

| +| --archive-entries |

[Optional]
If specified, only archive artifacts containing entries matching this pattern are matched. You can use wildcards to specify multiple artifacts.

| +| --insecure-tls |

[Default: false]
Set to true to skip TLS certificates verification.

| +| --retries |

[Default: 3]
Number of HTTP retry attempts.

| +| --retry-wait-time |

[Default: 0s]
Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds.retry-wait-time

| ### Example diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/managing-configuration-entities.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/managing-configuration-entities.md index be8c0a6..3e00073 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/managing-configuration-entities.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/managing-configuration-entities.md @@ -19,16 +19,16 @@ The CSV can include additional columns, with different headers, which will be ig ### Commands Params -| | | -|-------------------|-------------------------------------------------------------------------------------------------------------------------------------------------| -| Command-name | rt users-create | -| Abbreviation | rt uc | -| Command options | | -| --server-id |

[Optional]

Artifactory server ID configured using the config command.

| -| --csv |

[Mandatory]

Path to a CSV file with the users' details. The first row of the file should include the name,password,email headers.

| -| --replace |

[Optional]

Set to true if you'd like existing users or groups to be replaced.

| -| --users-groups |

[Optional]

A list of comma-separated groups for the new users to be associated to.

| -| Command arguments | The command accepts no arguments | +| | | +|-------------------|---------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | rt users-create | +| Abbreviation | rt uc | +| Command options | | +| --server-id |

[Optional]
Artifactory server ID configured using the config command.

| +| --csv |

[Mandatory]
Path to a CSV file with the users' details. The first row of the file should include the name,password,email headers.

| +| --replace |

[Optional]
Set to true if you'd like existing users or groups to be replaced.

| +| --users-groups |

[Optional]
A list of comma-separated groups for the new users to be associated to.

| +| Command arguments | The command accepts no arguments | ### Example @@ -55,15 +55,15 @@ The CSV can include additional columns, with different headers, which will be ig ### Commands Params -| | | -|-------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command-name | rt users-delete | -| Abbreviation | rt udel | -| Command options | | -| --server-id |

[Optional]

Artifactory server ID configured using the config command.

| -| --csv |

[Optional]

Path to a csv file with the usernames to delete. The first row of the file is the reserved for the cells' headers. It must include the "username" header.

| -| Command arguments | | -| users list | Comma-separated list of usernames to delete. If the --csv command option is used, then this argument becomes optional. | +| | | +|-------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | rt users-delete | +| Abbreviation | rt udel | +| Command options | | +| --server-id |

[Optional]
Artifactory server ID configured using the config command.

| +| --csv |

[Optional]
Path to a csv file with the usernames to delete. The first row of the file is the reserved for the cells' headers. It must include the "username" header.

| +| Command arguments | | +| users list | Comma-separated list of usernames to delete. If the --csv command option is used, then this argument becomes optional. | ### Examples #### Example 1 @@ -88,14 +88,14 @@ This command creates a new users group. ### Commands Params -| | | -|-------------------|-------------------------------------------------------------------------------------| -| Command-name | rt group-create | -| Abbreviation | rt gc | -| Command options | | -| --server-id |

[Optional]

Artifactory server ID configured using the config command.

| -| Command arguments | | -| group name | The name of the group to create. | +| | | +|-------------------|---------------------------------------------------------------------------------| +| Command-name | rt group-create | +| Abbreviation | rt gc | +| Command options | | +| --server-id |

[Optional]
Artifactory server ID configured using the config command.

| +| Command arguments | | +| group name | The name of the group to create. | ### Example @@ -111,15 +111,15 @@ This command adds a list fo existing users to a group. ### Commands Params -| | | -|-------------------|-------------------------------------------------------------------------------------| -| Command-name | rt group-add-users | -| Abbreviation | rt gau | -| Command options | | -| --server-id |

[Optional]

Artifactory server ID configured using the config command.

| -| Command arguments | | -| group name | The name of the group to add users to. | -| users list | Comma-seperated list of usernames to add to the specified group. | +| | | +|-------------------|---------------------------------------------------------------------------------| +| Command-name | rt group-add-users | +| Abbreviation | rt gau | +| Command options | | +| --server-id |

[Optional]
Artifactory server ID configured using the config command.

| +| Command arguments | | +| group name | The name of the group to add users to. | +| users list | Comma-seperated list of usernames to add to the specified group. | ### Example @@ -135,14 +135,14 @@ This command deletes a group. ### Commands Params -| | | -|-------------------|-------------------------------------------------------------------------------------| -| Command-name | rt group-delete | -| Abbreviation | rt gdel | -| Command options | | -| --server-id |

[Optional]

Artifactory server ID configured using the config command.

| -| Command arguments | | -| group name | The name of the group to delete. | +| | | +|-------------------|---------------------------------------------------------------------------------| +| Command-name | rt group-delete | +| Abbreviation | rt gdel | +| Command options | | +| --server-id |

[Optional]
Artifactory server ID configured using the config command.

| +| Command arguments | | +| group name | The name of the group to delete. | ### Example @@ -198,15 +198,15 @@ These two commands create a new repository and updates an existing a repository. #### Commands Params -| | | -|-------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command-name | rt repo-create / rt repo-update | -| Abbreviation | rt rc / rt ru | -| Command options | | -| --server-id |

[Optional]

Artifactory server ID configured using the config command.

| -| --vars |

[Optional]

List of variables in the form of "key1=value1;key2=value2;..." to be replaced in the template. In the template, the variables should be used as follows: ${key1}.

| -| Command arguments | | -| template path | Specifies the local file system path for the template file to be used for the repository creation. The template can be created using the "jf rt rpt" command. | +| | | +|-------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | rt repo-create / rt repo-update | +| Abbreviation | rt rc / rt ru | +| Command options | | +| --server-id |

[Optional]
Artifactory server ID configured using the config command.

| +| --vars |

[Optional]
List of variables in the form of "key1=value1;key2=value2;..." to be replaced in the template. In the template, the variables should be used as follows: ${key1}.

| +| Command arguments | | +| template path | Specifies the local file system path for the template file to be used for the repository creation. The template can be created using the "jf rt rpt" command. | #### Examples ##### Example 1 @@ -244,8 +244,8 @@ This command permanently deletes a repository, including all of its content. | Command name | rt repo-delete | | Abbreviation | rt rdel | | Command options | | -| --server-id |

[Optional]

Artifactory server ID configured using the config command.

| -| --quiet |

[Default: $CI]

Set to true to skip the delete confirmation message.

| +| --server-id |

[Optional]
Artifactory server ID configured using the config command.

| +| --quiet |

[Default: $CI]
Set to true to skip the delete confirmation message.

| | Command arguments | | | repository key | Specifies the repositories that should be removed. You can use wildcards to specify multiple repositories. | @@ -302,15 +302,15 @@ This command creates a new replication job for a repository. The command accepts #### Commands Params -| | | -|-------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command-name | replication-create | -| Abbreviation | rt rplc | -| Command options | | -| --server-id |

[Optional]

Artifactory server ID configured using the config command.

| -| --vars |

[Optional]

List of variables in the form of "key1=value1;key2=value2;..." to be replaced in the template. In the template, the variables should be used as follows: ${key1}.

| -| Command arguments | | -| template path | Specifies the local file system path for the template file to be used for the replication job creation. The template can be created using the "jf rt rplt" command. | +| | | +|-------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | replication-create | +| Abbreviation | rt rplc | +| Command options | | +| --server-id |

[Optional]
Artifactory server ID configured using the config command.

| +| --vars |

[Optional]
List of variables in the form of "key1=value1;key2=value2;..." to be replaced in the template. In the template, the variables should be used as follows: ${key1}.

| +| Command arguments | | +| template path | Specifies the local file system path for the template file to be used for the replication job creation. The template can be created using the "jf rt rplt" command. | #### Examples ##### Example 1 @@ -335,15 +335,15 @@ This command permanently deletes a replication jobs from a repository. #### Commands Params -| | | -|-------------------|-------------------------------------------------------------------------------------| -| Command name | rt replication-delete | -| Abbreviation | rt rpldel | -| Command options | | -| --server-id |

[Optional]

Artifactory server ID configured using the config command.

| -| --quiet |

[Default: $CI]

Set to true to skip the delete confirmation message.

| -| Command arguments | | -| repository key | The repository from which the replications will be deleted. | +| | | +|-------------------|---------------------------------------------------------------------------------| +| Command name | rt replication-delete | +| Abbreviation | rt rpldel | +| Command options | | +| --server-id |

[Optional]
Artifactory server ID configured using the config command.

| +| --quiet |

[Default: $CI]
Set to true to skip the delete confirmation message.

| +| Command arguments | | +| repository key | The repository from which the replications will be deleted. | #### Example @@ -373,26 +373,26 @@ This command creates a configuration template file, which should be used as an a This command creates a new permission target. The command accepts as an argument a configuration template, which can be created by the **jf rt permission-target-template** command. The template also supports variables, which can be replaced with values, provided when it is used. -| | | -|-------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command-name | permission-target-create / permission-target-update | -| Abbreviation | rt ptc / rt ptu | -| Command options | | -| --server-id |

[Optional]

Artifactory server ID configured using the config command.

| -| --vars |

[Optional]

List of variables in the form of "key1=value1;key2=value2;..." to be replaced in the template. In the template, the variables should be used as follows: ${key1}.

| -| Command arguments | | -| template path | Specifies the local file system path for the template file to be used for the permission target creation or update. The template can be created using the "jf rt ptt" command. | +| | | +|-------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | permission-target-create / permission-target-update | +| Abbreviation | rt ptc / rt ptu | +| Command options | | +| --server-id |

[Optional]
Artifactory server ID configured using the config command.

| +| --vars |

[Optional]
List of variables in the form of "key1=value1;key2=value2;..." to be replaced in the template. In the template, the variables should be used as follows: ${key1}.

| +| Command arguments | | +| template path | Specifies the local file system path for the template file to be used for the permission target creation or update. The template can be created using the "jf rt ptt" command. | ### Deleting Permission Targets This command permanently deletes a permission target. -| | | -|------------------------|-------------------------------------------------------------------------------------| -| Command name | rt permission-target-delete | -| Abbreviation | rt ptdel | -| Command options | | -| --server-id |

[Optional]

Artifactory server ID configured using the config command.

| -| --quiet |

[Default: $CI]

Set to true to skip the delete confirmation message.

| -| Command arguments | | -| permission target name | The permission target that should be removed. | +| | | +|------------------------|---------------------------------------------------------------------------------| +| Command name | rt permission-target-delete | +| Abbreviation | rt ptdel | +| Command options | | +| --server-id |

[Optional]
Artifactory server ID configured using the config command.

| +| --quiet |

[Default: $CI]
Set to true to skip the delete confirmation message.

| +| Command arguments | | +| permission target name | The permission target that should be removed. | diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/package-managers-integration.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/package-managers-integration.md index 8ad38c0..0f4bb3d 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/package-managers-integration.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/package-managers-integration.md @@ -9,23 +9,23 @@ JFrog CLI includes integration with Maven, allowing you to resolve dependencies Before using the **jf mvn** command, the project needs to be pre-configured with the Artifactory server and repositories, to be used for building and publishing the project. The **jf mvn-config** command should be used once to add the configuration to the project. The command should run while inside the root directory of the project. The configuration is stored by the command in the **.jfrog** directory at the root directory of the project. -| | | -|--------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command-name | mvn-config | -| Abbreviation | mvnc | -| Command options | | -| --global |

[Optional]

Set to true, if you'd like the configuration to be global (for all projects on the machine). Specific projects can override the global configuration.

| -| --server-id-resolve |

[Optional]

Server ID for resolution. The server should configured using the 'jf rt c' command.

| -| --server-id-deploy |

[Optional]

Server ID for deployment. The server should be configured using the 'jf rt c' command.

| -| --repo-resolve-releases |

[Optional]

Resolution repository for release dependencies.

| -| --repo-resolve-snapshots |

[Optional]

Resolution repository for snapshot dependencies.

| -| --repo-deploy-releases |

[Optional]

Deployment repository for release artifacts.

| -| --repo-deploy-snapshots |

[Optional]

Deployment repository for snapshot artifacts.

| -| --include-patterns |

[Optional]

Filter deployed artifacts by setting a wildcard pattern that specifies which artifacts to include. You may provide multiple patterns separated by a comma followed by a white-space. For example

artifact-.jar, artifact-.pom

| -| --exclude-patterns |

[Optional]

Filter deployed artifacts by setting a wildcard pattern that specifies which artifacts to exclude. You may provide multiple patterns separated by a comma followed by a white-space. For example

artifact--test.jar, artifact--test.pom

| -| --scan |

[Default: false]

Set if you'd like all files to be scanned by Xray on the local file system prior to the upload, and skip the upload if any of the files are found vulnerable.

| -| --format |

[Default: table]

Should be used with the --scan option. Defines the scan output format. Accepts table or json as values.

| -| Command arguments | The command accepts no arguments | +| | | +|--------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | mvn-config | +| Abbreviation | mvnc | +| Command options | | +| --global |

[Optional]
Set to true, if you'd like the configuration to be global (for all projects on the machine). Specific projects can override the global configuration.

| +| --server-id-resolve |

[Optional]
Server ID for resolution. The server should configured using the 'jf rt c' command.

| +| --server-id-deploy |

[Optional]
Server ID for deployment. The server should be configured using the 'jf rt c' command.

| +| --repo-resolve-releases |

[Optional]
Resolution repository for release dependencies.

| +| --repo-resolve-snapshots |

[Optional]
Resolution repository for snapshot dependencies.

| +| --repo-deploy-releases |

[Optional]
Deployment repository for release artifacts.

| +| --repo-deploy-snapshots |

[Optional]
Deployment repository for snapshot artifacts.

| +| --include-patterns |

[Optional]
Filter deployed artifacts by setting a wildcard pattern that specifies which artifacts to include. You may provide multiple patterns separated by a comma followed by a white-space. For example

artifact-.jar, artifact-.pom

| +| --exclude-patterns |

[Optional]
Filter deployed artifacts by setting a wildcard pattern that specifies which artifacts to exclude. You may provide multiple patterns separated by a comma followed by a white-space. For example

artifact--test.jar, artifact--test.pom

| +| --scan |

[Default: false]
Set if you'd like all files to be scanned by Xray on the local file system prior to the upload, and skip the upload if any of the files are found vulnerable.

| +| --format |

[Default: table]
Should be used with the --scan option. Defines the scan output format. Accepts table or json as values.

| +| Command arguments | The command accepts no arguments | ### Running maven @@ -39,17 +39,17 @@ The **mvn** command triggers the maven client, while resolving dependencies and The following table lists the command arguments and flags: -| | | -|-------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command-name | mvn | -| Abbreviation | mvn | -| Command options | | -| --threads |

[Default: 3]

Number of threads for uploading build artifacts.

| -| --build-name |

[Optional]

Build name. For more details, please refer to Build Integration.

| -| --build-number |

[Optional]

Build number. For more details, please refer to Build Integration.

| -| --project |

[Optional]

JFrog project key.

| -| --insecure-tls |

[Default: false]

Set to true to skip TLS certificates verification.

| -| Command arguments | The command accepts the same arguments and options as the mvn client. | +| | | +|-------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | mvn | +| Abbreviation | mvn | +| Command options | | +| --threads |

[Default: 3]
Number of threads for uploading build artifacts.

| +| --build-name |

[Optional]
Build name. For more details, please refer to Build Integration.

| +| --build-number |

[Optional]
Build number. For more details, please refer to Build Integration.

| +| --project |

[Optional]
JFrog project key.

| +| --insecure-tls |

[Default: false]
Set to true to skip TLS certificates verification.

| +| Command arguments | The command accepts the same arguments and options as the mvn client. | #### Deploying Maven Artifacts @@ -72,25 +72,25 @@ JFrog CLI includes integration with Gradle, allowing you to resolve dependencies Before using the **gradle** command, the project needs to be pre-configured with the Artifactory server and repositories, to be used for building and publishing the project. The **gradle-config** command should be used once to add the configuration to the project. The command should run while inside the root directory of the project. The configuration is stored by the command in the\*\*.jfrog\*\* directory at the root directory of the project. -| | | -|-------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command-name | gradle-config | -| Abbreviation | gradlec | -| Command options | | -| --global |

[Optional]

Set to true, if you'd like the configuration to be global (for all projects on the machine). Specific projects can override the global configuration.

| -| --server-id-resolve |

[Optional]

Server ID for resolution. The server should configured using the 'jf c add' command.

| -| --server-id-deploy |

[Optional]

Server ID for deployment. The server should be configured using the 'jf c add' command.

| -| --repo-resolve |

[Optional]

Repository for dependencies resolution.

| -| --repo-deploy |

[Optional]

Repository for artifacts deployment.

| -| --uses-plugin |

[Default: false]

Set to true if the Gradle Artifactory Plugin is already applied in the build script.

| -| --use-wrapper |

[Default: false]

Set to true if you'd like to use the Gradle wrapper.

| -| --deploy-maven-desc |

[Default: true]

Set to false if you do not wish to deploy Maven descriptors.

| -| --deploy-ivy-desc |

[Default: true]

Set to false if you do not wish to deploy Ivy descriptors.

| -| --ivy-desc-pattern |

[Default: '[organization]/[module]/ivy-[revision].xml'

Set the deployed Ivy descriptor pattern.

| -| --ivy-artifacts-pattern |

[Default: '[organization]/[module]/[revision]/[artifact]-[revision](-[classifier]).[ext]'

Set the deployed Ivy artifacts pattern.

| -| --scan |

[Default: false]

Set if you'd like all files to be scanned by Xray on the local file system prior to the upload, and skip the upload if any of the files are found vulnerable.

| -| --format |

[Default: table]

Should be used with the --scan option. Defines the scan output format. Accepts table or json as values.

| -| Command arguments | The command accepts no arguments | +| | | +|-------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | gradle-config | +| Abbreviation | gradlec | +| Command options | | +| --global |

[Optional]
Set to true, if you'd like the configuration to be global (for all projects on the machine). Specific projects can override the global configuration.

| +| --server-id-resolve |

[Optional]
Server ID for resolution. The server should configured using the 'jf c add' command.

| +| --server-id-deploy |

[Optional]
Server ID for deployment. The server should be configured using the 'jf c add' command.

| +| --repo-resolve |

[Optional]
Repository for dependencies resolution.

| +| --repo-deploy |

[Optional]
Repository for artifacts deployment.

| +| --uses-plugin |

[Default: false]
Set to true if the Gradle Artifactory Plugin is already applied in the build script.

| +| --use-wrapper |

[Default: false]
Set to true if you'd like to use the Gradle wrapper.

| +| --deploy-maven-desc |

[Default: true]
Set to false if you do not wish to deploy Maven descriptors.

| +| --deploy-ivy-desc |

[Default: true]
Set to false if you do not wish to deploy Ivy descriptors.

| +| --ivy-desc-pattern |

[Default: '[organization]/[module]/ivy-[revision].xml'

Set the deployed Ivy descriptor pattern.

| +| --ivy-artifacts-pattern |

[Default: '[organization]/[module]/[revision]/[artifact]-[revision](-[classifier]).[ext]'

Set the deployed Ivy artifacts pattern.

| +| --scan |

[Default: false]
Set if you'd like all files to be scanned by Xray on the local file system prior to the upload, and skip the upload if any of the files are found vulnerable.

| +| --format |

[Default: table]
Should be used with the --scan option. Defines the scan output format. Accepts table or json as values.

| +| Command arguments | The command accepts no arguments | ### Running gradle @@ -104,16 +104,16 @@ The **jf gradle** command triggers the gradle client, while resolving dependenci The following table lists the command arguments and flags: -| | | -|-------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command-name | gradle | -| Abbreviation | gradle | -| Command options | | -| --threads |

[Default: 3]

Number of threads for uploading build artifacts.

| -| --build-name |

[Optional]

Build name. For more details, please refer to Build Integration.

| -| --build-number |

[Optional]

Build number. For more details, please refer to Build Integration.

| -| --project |

[Optional]

JFrog project key.

| -| Command arguments | The command accepts the same arguments and options as the gradle client. | +| | | +|-------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | gradle | +| Abbreviation | gradle | +| Command options | | +| --threads |

[Default: 3]
Number of threads for uploading build artifacts.

| +| --build-name |

[Optional]
Build name. For more details, please refer to Build Integration.

| +| --build-number |

[Optional]
Build number. For more details, please refer to Build Integration.

| +| --project |

[Optional]
JFrog project key.

| +| Command arguments | The command accepts the same arguments and options as the gradle client. | #### Example @@ -172,18 +172,18 @@ Running **jf docker pull** command allows pulling docker images from Artifactory The following table lists the command arguments and flags: -| | | -|-------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command-name | docker pull | -| Abbreviation | dpl | -| Command options | | -| --server-id |

[Optional]

Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| -| --build-name |

[Optional]

Build name. For more details, please refer to Build Integration.

| -| --build-number |

[Optional]

Build number. For more details, please refer to Build Integration.

| -| --project |

[Optional]

JFrog project key.

| -| --module |

[Optional]

Optional module name for the build-info.

| -| --skip-login |

[Default: false]

Set to true if you'd like the command to skip performing docker login.

| -| Command arguments | The same arguments and options supported by the docker client/ | +| | | +|-------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | docker pull | +| Abbreviation | dpl | +| Command options | | +| --server-id |

[Optional]
Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| +| --build-name |

[Optional]
Build name. For more details, please refer to Build Integration.

| +| --build-number |

[Optional]
Build number. For more details, please refer to Build Integration.

| +| --project |

[Optional]
JFrog project key.

| +| --module |

[Optional]
Optional module name for the build-info.

| +| --skip-login |

[Default: false]
Set to true if you'd like the command to skip performing docker login.

| +| Command arguments | The same arguments and options supported by the docker client/ | #### Example @@ -203,20 +203,20 @@ After building your image using the docker client, the **jf docker push** comman The following table lists the command arguments and flags: -| | | -|--------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command-name | docker push | -| Abbreviation | dp | -| Command options | | -| --server-id |

[Optional]

Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| -| --build-name |

[Optional]

Build name. For more details, please refer to Build Integration.

| -| --build-number |

[Optional]

Build number. For more details, please refer to Build Integration.

| -| --project |

[Optional]

JFrog project key.

| -| --module |

[Optional]

Optional module name for the build-info.

| -| --skip-login |

[Default: false]

Set to true if you'd like the command to skip performing docker login.

| -| --threads |

[Default: 3]

Number of working threads.

| -| --detailed-summary |

[Default: false]

Set true to include a list of the affected files as part of the command output summary.

| -| Command arguments | The same arguments and options supported by the docker client/ | +| | | +|--------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | docker push | +| Abbreviation | dp | +| Command options | | +| --server-id |

[Optional]
Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| +| --build-name |

[Optional]
Build name. For more details, please refer to Build Integration.

| +| --build-number |

[Optional]
Build number. For more details, please refer to Build Integration.

| +| --project |

[Optional]
JFrog project key.

| +| --module |

[Optional]
Optional module name for the build-info.

| +| --skip-login |

[Default: false]
Set to true if you'd like the command to skip performing docker login.

| +| --threads |

[Default: 3]
Number of working threads.

| +| --detailed-summary |

[Default: false]
Set true to include a list of the affected files as part of the command output summary.

| +| Command arguments | The same arguments and options supported by the docker client/ | #### Example @@ -236,20 +236,20 @@ You can then publish the build-info collected by the **docker-push** command to The following table lists the command arguments and flags: -| | | -|-------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command-name | rt podman-pull | -| Abbreviation | rt ppl | -| Command options | | -| --server-id |

[Optional]

Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| -| --build-name |

[Optional]

Build name. For more details, please refer to Build Integration.

| -| --build-number |

[Optional]

Build number. For more details, please refer to Build Integration.

| -| --project |

[Optional]

JFrog project key.

| -| --module |

[Optional]

Optional module name for the build-info.

| -| --skip-login |

[Default: false]

Set to true if you'd like the command to skip performing docker login.

| -| Command argument | | -| Image tag | The docker image tag to pull. | -| Source repository | Source repository in Artifactory. | +| | | +|-------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | rt podman-pull | +| Abbreviation | rt ppl | +| Command options | | +| --server-id |

[Optional]
Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| +| --build-name |

[Optional]
Build name. For more details, please refer to Build Integration.

| +| --build-number |

[Optional]
Build number. For more details, please refer to Build Integration.

| +| --project |

[Optional]
JFrog project key.

| +| --module |

[Optional]
Optional module name for the build-info.

| +| --skip-login |

[Default: false]
Set to true if you'd like the command to skip performing docker login.

| +| Command argument | | +| Image tag | The docker image tag to pull. | +| Source repository | Source repository in Artifactory. | #### Example @@ -269,22 +269,22 @@ You can then publish the build-info collected by the **podman-pull** command to The following table lists the command arguments and flags: -| | | -|--------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command-name | rt podman-push | -| Abbreviation | rt pp | -| Command options | | -| --server-id |

[Optional]

Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| -| --build-name |

[Optional]

Build name. For more details, please refer to Build Integration.

| -| --build-number |

[Optional]

Build number. For more details, please refer to Build Integration.

| -| --project |

[Optional]

JFrog project key.

| -| --module |

[Optional]

Optional module name for the build-info.

| -| --skip-login |

[Default: false]

Set to true if you'd like the command to skip performing docker login.

| -| --threads |

[Default: 3]

Number of working threads.

| -| --detailed-summary |

[Default: false]

Set to true to include a list of the affected files as part of the command output summary.

| -| Command argument | | -| Image tag | The docker image tag to push. | -| Target repository | Target repository in Artifactory. | +| | | +|--------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | rt podman-push | +| Abbreviation | rt pp | +| Command options | | +| --server-id |

[Optional]
Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| +| --build-name |

[Optional]
Build name. For more details, please refer to Build Integration.

| +| --build-number |

[Optional]
Build number. For more details, please refer to Build Integration.

| +| --project |

[Optional]
JFrog project key.

| +| --module |

[Optional]
Optional module name for the build-info.

| +| --skip-login |

[Default: false]
Set to true if you'd like the command to skip performing docker login.

| +| --threads |

[Default: 3]
Number of working threads.

| +| --detailed-summary |

[Default: false]
Set to true to include a list of the affected files as part of the command output summary.

| +| Command argument | | +| Image tag | The docker image tag to push. | +| Target repository | Target repository in Artifactory. | #### Example @@ -323,13 +323,13 @@ The **build-docker-create** command allows adding a docker image, which is alrea | Abbreviation | rt bdc | | Command options | | | --image-file |

Path to a file which includes one line in the following format: IMAGE-TAG@sha256:MANIFEST-SHA256. For example:

cat image-file-details
superfrog-docker.jfrog.io/hello-frog@sha256:30f04e684493fb5ccc030969df6de0

| -| --server-id |

[Optional]

Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| -| --build-name |

[Optional]

Build name. For more details, please refer to Build Integration.

| -| --build-number |

[Optional]

Build number. For more details, please refer to Build Integration.

| -| --project |

[Optional]

JFrog project key.

| -| --module |

[Optional]

Optional module name for the build-info.

| -| --skip-login |

[Default: false]

Set to true if you'd like the command to skip performing docker login.

| -| --threads |

[Default: 3]

Number of working threads.

| +| --server-id |

[Optional]
Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| +| --build-name |

[Optional]
Build name. For more details, please refer to Build Integration.

| +| --build-number |

[Optional]
Build number. For more details, please refer to Build Integration.

| +| --project |

[Optional]
JFrog project key.

| +| --module |

[Optional]
Optional module name for the build-info.

| +| --skip-login |

[Default: false]
Set to true if you'd like the command to skip performing docker login.

| +| --threads |

[Default: 3]
Number of working threads.

| | Command argument | | | Target repository | The name of the repository to which the image was pushed. | @@ -354,20 +354,20 @@ Promotion is the action of moving or copying a group of artifacts from one repos The following table lists the command arguments and flags: -| | | -|-----------------------|----------------------------------------------------------------------------------------------------------------------------------------------| -| Command-name | rt docker-promote | -| Abbreviation | rt dpr | -| Command options | | -| --server-id |

[Optional]

Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| -| --copy |

[Default: false]

If set true, the Docker image is copied to the target repository, otherwise it is moved.

| -| --source-tag |

[Optional]

The tag name to promote.

| -| --target-docker-image |

[Optional]

Docker target image name.

| -| --target-tag |

[Optional]

The target tag to assign the image after promotion.

| -| Command argument | | -| source docker image | The docker image name to promote. | -| source repository | Source repository in Artifactory. | -| target repository | Target repository in Artifactory. | +| | | +|-----------------------|------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | rt docker-promote | +| Abbreviation | rt dpr | +| Command options | | +| --server-id |

[Optional]
Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| +| --copy |

[Default: false]
If set true, the Docker image is copied to the target repository, otherwise it is moved.

| +| --source-tag |

[Optional]
The tag name to promote.

| +| --target-docker-image |

[Optional]
Docker target image name.

| +| --target-tag |

[Optional]
The target tag to assign the image after promotion.

| +| Command argument | | +| source docker image | The docker image name to promote. | +| source repository | Source repository in Artifactory. | +| target repository | Target repository in Artifactory. | #### Examples @@ -396,17 +396,17 @@ Artifactory version 5.5.2 and above. Before using the **jf npm install**, **jf npm ci** and **jf npm publish** commands, the project needs to be pre-configured with the Artifactory server and repositories, to be used for building and publishing the project. The **jf npm-config** command should be used once to add the configuration to the project. The command should run while inside the root directory of the project. The configuration is stored by the command in the **.jfrog** directory at the root directory of the project. -| | | -|---------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command-name | npm-config | -| Abbreviation | npmc | -| Command options | | -| --global |

[Optional]

Set to true, if you'd like the configuration to be global (for all projects on the machine). Specific projects can override the global configuration.

| -| --server-id-resolve |

[Optional]

Artifactory server ID for resolution. The server should configured using the 'jf c add' command.

| -| --server-id-deploy |

[Optional]

Artifactory server ID for deployment. The server should be configured using the 'jf c add' command.

| -| --repo-resolve |

[Optional]

Repository for dependencies resolution.

| -| --repo-deploy |

[Optional]

Repository for artifacts deployment.

| -| Command arguments | The command accepts no arguments | +| | | +|---------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | npm-config | +| Abbreviation | npmc | +| Command options | | +| --global |

[Optional]
Set to true, if you'd like the configuration to be global (for all projects on the machine). Specific projects can override the global configuration.

| +| --server-id-resolve |

[Optional]
Artifactory server ID for resolution. The server should configured using the 'jf c add' command.

| +| --server-id-deploy |

[Optional]
Artifactory server ID for deployment. The server should be configured using the 'jf c add' command.

| +| --repo-resolve |

[Optional]
Repository for dependencies resolution.

| +| --repo-deploy |

[Optional]
Repository for artifacts deployment.

| +| Command arguments | The command accepts no arguments | ### Installing Npm Packages @@ -418,20 +418,20 @@ Before running the **jf npm install** or **jf npm ci** command on a project for The following table lists the command arguments and flags: -| | | -|-------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command-name | npm | -| Abbreviation | | -| Command options | | -| --build-name |

[Optional]

Build name. For more details, please refer to Build Integration.

| -| --build-number |

[Optional]

Build number. For more details, please refer to Build Integration.

| -| --project |

[Optional]

JFrog project key.

| -| --module |

[Optional]

Optional module name for the build-info.

| -| --threads |

[Default: 3]

Number of working threads for build-info collection.

| -| Command arguments | The command accepts the same arguments and options as the npm client. | -| --project |

[Optional]

JFrog project key.

| -| --module |

[Optional]

Optional module name for the build-info.

| -| Command arguments | The command accepts the same arguments and options as the npm client. | +| | | +|-------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | npm | +| Abbreviation | | +| Command options | | +| --build-name |

[Optional]
Build name. For more details, please refer to Build Integration.

| +| --build-number |

[Optional]
Build number. For more details, please refer to Build Integration.

| +| --project |

[Optional]
JFrog project key.

| +| --module |

[Optional]
Optional module name for the build-info.

| +| --threads |

[Default: 3]
Number of working threads for build-info collection.

| +| Command arguments | The command accepts the same arguments and options as the npm client. | +| --project |

[Optional]
JFrog project key.

| +| --module |

[Optional]
Optional module name for the build-info.

| +| Command arguments | The command accepts the same arguments and options as the npm client. | #### Examples ##### Example 1 @@ -470,19 +470,19 @@ Before running the **npm-publish** command on a project for the first time, the The following table lists the command arguments and flags: -| | | -|--------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command-name | npm publish | -| Abbreviation | | -| Command options | | -| --build-name |

[Optional]

Build name. For more details, please refer to Build Integration.

| -| --build-number |

[Optional]

Build number. For more details, please refer to Build Integration.

| -| --project |

[Optional]

JFrog project key.

| -| --module |

[Optional]

Optional module name for the build-info.

| -| --detailed-summary |

[Default: false]

Set true to include a list of the affected files as part of the command output summary.

| -| --scan |

[Default: false]

Set if you'd like all files to be scanned by Xray on the local file system prior to the upload, and skip the upload if any of the files are found vulnerable.

| -| --format |

[Default: table]

Should be used with the --scan option. Defines the scan output format. Accepts table or JSON as values.

| -| Command argument | The command accepts the same arguments and options that the **npm pack** command expects. | +| | | +|--------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | npm publish | +| Abbreviation | | +| Command options | | +| --build-name |

[Optional]
Build name. For more details, please refer to Build Integration.

| +| --build-number |

[Optional]
Build number. For more details, please refer to Build Integration.

| +| --project |

[Optional]
JFrog project key.

| +| --module |

[Optional]
Optional module name for the build-info.

| +| --detailed-summary |

[Default: false]
Set true to include a list of the affected files as part of the command output summary.

| +| --scan |

[Default: false]
Set if you'd like all files to be scanned by Xray on the local file system prior to the upload, and skip the upload if any of the files are found vulnerable.

| +| --format |

[Default: table]
Should be used with the --scan option. Defines the scan output format. Accepts table or JSON as values.

| +| Command argument | The command accepts the same arguments and options that the **npm pack** command expects. | #### Example @@ -502,15 +502,15 @@ Yarn version 2.4.0 and above is supported. Before using the **jf yarn** command, the project needs to be pre-configured with the Artifactory server and repositories, to be used for building the project. The **yarn-config** command should be used once to add the configuration to the project. The command should run while inside the root directory of the project. The configuration is stored by the command in the **.jfrog** directory at the root directory of the project. -| | | -|---------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command-name | yarn-config | -| Abbreviation | yarnc | -| Command options | | -| --global |

[Optional]

Set to true, if you'd like the configuration to be global (for all projects on the machine). Specific projects can override the global configuration.

| -| --server-id-resolve |

[Optional]

Artifactory server ID for resolution. The server should configured using the 'jf c add' command.

| -| --repo-resolve |

[Optional]

Repository for dependencies resolution.

| -| Command arguments | The command accepts no arguments | +| | | +|---------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | yarn-config | +| Abbreviation | yarnc | +| Command options | | +| --global |

[Optional]
Set to true, if you'd like the configuration to be global (for all projects on the machine). Specific projects can override the global configuration.

| +| --server-id-resolve |

[Optional]
Artifactory server ID for resolution. The server should configured using the 'jf c add' command.

| +| --repo-resolve |

[Optional]
Repository for dependencies resolution.

| +| Command arguments | The command accepts no arguments | ### Installing Npm Packages @@ -522,16 +522,16 @@ The **jf yarn** command executes the yarn client, to fetch the npm dependencies The following table lists the command arguments and flags: -| | | -|-------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command-name | yarn | -| Command options | | -| --build-name |

[Optional]

Build name. For more details, please refer to Build Integration.

| -| --build-number |

[Optional]

Build number. For more details, please refer to Build Integration.

| -| --project |

[Optional]

JFrog project key.

| -| --module |

[Optional]

Optional module name for the build-info.

| -| --threads |

[Default: 3]

Number of working threads for build-info collection.

| -| Command arguments | The command accepts the same arguments and options as the yarn client. | +| | | +|-------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | yarn | +| Command options | | +| --build-name |

[Optional]
Build name. For more details, please refer to Build Integration.

| +| --build-number |

[Optional]
Build number. For more details, please refer to Build Integration.

| +| --project |

[Optional]
JFrog project key.

| +| --module |

[Optional]
Optional module name for the build-info.

| +| --threads |

[Default: 3]
Number of working threads for build-info collection.

| +| Command arguments | The command accepts the same arguments and options as the yarn client. | #### Examples ##### Example 1 @@ -579,16 +579,16 @@ Here's how you set the repositories. #### Commands Params -| | | -|---------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command-name | go-config | -| Abbreviation | | -| Command options | | -| --global |

[Default false]

Set to true, if you'd like the configuration to be global (for all projects on the machine). Specific projects can override the global configuration.

| -| --server-id-resolve |

[Optional]

Artifactory server ID for resolution. The server should configured using the 'jf c add' command.

| -| --server-id-deploy |

[Optional]

Artifactory server ID for deployment. The server should be configured using the 'jf c add' command.

| -| --repo-resolve |

[Optional]

Repository for dependencies resolution.

| -| --repo-deploy |

[Optional]

Repository for artifacts deployment.

| +| | | +|---------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | go-config | +| Abbreviation | | +| Command options | | +| --global |

[Default false]
Set to true, if you'd like the configuration to be global (for all projects on the machine). Specific projects can override the global configuration.

| +| --server-id-resolve |

[Optional]
Artifactory server ID for resolution. The server should configured using the 'jf c add' command.

| +| --server-id-deploy |

[Optional]
Artifactory server ID for deployment. The server should be configured using the 'jf c add' command.

| +| --repo-resolve |

[Optional]
Repository for dependencies resolution.

| +| --repo-deploy |

[Optional]
Repository for artifacts deployment.

| #### Examples ##### Example 1 @@ -617,18 +617,18 @@ The **go** command triggers the go client. The following table lists the command arguments and flags: -| | | -|-------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command-name | go | -| Abbreviation | go | -| Command options | | -| --build-name |

[Optional]

Build name. For more details, please refer to Build Integration.

| -| --build-number |

[Optional]

Build number. For more details, please refer to Build Integration.

| -| --project |

[Optional]

JFrog project key.

| -| --no-fallback |

[Default: false]

Set to avoid downloading packages from the VCS, if they are missing in Artifactory.

| -| --module |

[Optional]

Optional module name for the build-info.

| -| Command arguments | | -| Go command | The command accepts the same arguments and options as the go client. | +| | | +|-------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | go | +| Abbreviation | go | +| Command options | | +| --build-name |

[Optional]
Build name. For more details, please refer to Build Integration.

| +| --build-number |

[Optional]
Build number. For more details, please refer to Build Integration.

| +| --project |

[Optional]
JFrog project key.

| +| --no-fallback |

[Default false]
Set to avoid downloading packages from the VCS, if they are missing in Artifactory.

| +| --module |

[Optional]
Optional module name for the build-info.

| +| Command arguments | | +| Go command | The command accepts the same arguments and options as the go client. | #### Examples ##### Example 1 @@ -661,18 +661,18 @@ The **jf go-publish** command packs and deploys the Go package to the designated The following table lists the command arguments and flags: -| | | -|--------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command-name | go-publish | -| Abbreviation | gp | -| Command options | | -| --build-name |

[Optional]

Build name. For more details, please refer to Build Integration.

| -| --build-number |

[Optional]

Build number. For more details, please refer to Build Integration.

| -| --project |

[Optional]

JFrog project key.

| -| --module |

[Optional]

Optional module name for the build-info.

| -| --detailed-summary |

[Default: false]

Set true to include a list of the affected files as part of the command output summary.

| -| Command argument | | -| Version | The version of the Go project that is being published | +| | | +|--------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | go-publish | +| Abbreviation | gp | +| Command options | | +| --build-name |

[Optional]
Build name. For more details, please refer to Build Integration.

| +| --build-number |

[Optional]
Build number. For more details, please refer to Build Integration.

| +| --project |

[Optional]
JFrog project key.

| +| --module |

[Optional]
Optional module name for the build-info.

| +| --detailed-summary |

[Default: false]
Set true to include a list of the affected files as part of the command output summary.

| +| Command argument | | +| Version | The version of the Go project that is being published | #### Examples ##### Example 1 @@ -712,14 +712,14 @@ Here's how you set the repositories. #### Commands Params -| | | -|---------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command-name | pip-config / pipenv-config / poetry-config | -| Abbreviation | pipc / pipec / poc | -| Command options | | -| --global |

[Default false]

Set to true, if you'd like the configuration to be global (for all projects on the machine). Specific projects can override the global configuration.

| -| --server-id-resolve |

[Optional]

Artifactory server ID for resolution. The server should configured using the 'jf c add' command.

| -| --repo-resolve |

[Optional]

Repository for dependencies resolution.

| +| | | +|---------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | pip-config / pipenv-config / poetry-config | +| Abbreviation | pipc / pipec / poc | +| Command options | | +| --global |

[Default false]
Set to true, if you'd like the configuration to be global (for all projects on the machine). Specific projects can override the global configuration.

| +| --server-id-resolve |

[Optional]
Artifactory server ID for resolution. The server should configured using the 'jf c add' command.

| +| --repo-resolve |

[Optional]
Repository for dependencies resolution.

| #### Examples ##### Example 1 @@ -789,16 +789,16 @@ Running the 'install' command with both the **no-cache-dir** and **force-reinsta #### Commands Params -| | | -|------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command-name | pip / pipenv / poetry | -| Abbreviation | | -| Command options | | -| --build-name |

[Optional]

Build name. For more details, please refer to Build Integration.

| -| --build-number |

[Optional]

Build number. For more details, please refer to Build Integration.

| -| --project |

[Optional]

JFrog project key.

| -| --module |

[Optional]

Optional module name for the build-info.

| -| Command argument | The command accepts the same arguments and options as the pip / pipenv / poetry clients. | +| | | +|------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | pip / pipenv / poetry | +| Abbreviation | | +| Command options | | +| --build-name |

[Optional]
Build name. For more details, please refer to Build Integration.

| +| --build-number |

[Optional]
Build number. For more details, please refer to Build Integration.

| +| --project |

[Optional]
JFrog project key.

| +| --module |

[Optional]
Optional module name for the build-info.

| +| Command argument | The command accepts the same arguments and options as the pip / pipenv / poetry clients. | #### Examples ##### Example 1 @@ -842,16 +842,16 @@ Before using the nuget or dotnet commands, the **nuget-config** or **dotnet-conf The following table lists the commands' options: -| | | -|---------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command-name | nuget-config / dotnet-config | -| Abbreviation | nugetc / dotnetc | -| Command options | | -| --global |

[Optional]

Set to true, if you'd like the configuration to be global (for all projects on the machine). Specific projects can override the global configuration.

| -| --server-id-resolve |

[Optional]

Artifactory server ID for resolution. The server should configured using the 'jf c add' command.

| -| --repo-resolve |

[Optional]

Repository for dependencies resolution.

| -| --nuget-v2 |

[Default: false]
Set to true if you'd like to use the NuGet V2 protocol when restoring packages from Artifactory (instead of NuGet V3).

| -| Command arguments | The command accepts no arguments | +| | | +|---------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | nuget-config / dotnet-config | +| Abbreviation | nugetc / dotnetc | +| Command options | | +| --global |

[Optional]
Set to true, if you'd like the configuration to be global (for all projects on the machine). Specific projects can override the global configuration.

| +| --server-id-resolve |

[Optional]
Artifactory server ID for resolution. The server should configured using the 'jf c add' command.

| +| --repo-resolve |

[Optional]
Repository for dependencies resolution.

| +| --nuget-v2 |

[Default: false]
Set to true if you'd like to use the NuGet V2 protocol when restoring packages from Artifactory (instead of NuGet V3).

| +| Command arguments | The command accepts no arguments | ### Running Nuget and Dotnet commands @@ -865,16 +865,16 @@ The **nuget** command runs the **NuGet client** and the **dotnet** command runs The following table lists the commands arguments and options: -| | | -|------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command-name | nuget / dotnet | -| Abbreviation | | -| Command options | | -| --build-name |

[Optional]

Build name. For more details, please refer to Build Integration.

| -| --build-number |

[Optional]

Build number. For more details, please refer to Build Integration.

| -| --project |

[Optional]

JFrog project key.

| -| --module |

[Optional]

Optional module name for the build-info.

| -| Command argument | The command accepts the same arguments and options as the NuGet client / .NET Core CLI. | +| | | +|------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | nuget / dotnet | +| Abbreviation | | +| Command options | | +| --build-name |

[Optional]
Build name. For more details, please refer to Build Integration.

| +| --build-number |

[Optional]
Build number. For more details, please refer to Build Integration.

| +| --project |

[Optional]
JFrog project key.

| +| --module |

[Optional]
Optional module name for the build-info.

| +| Command argument | The command accepts the same arguments and options as the NuGet client / .NET Core CLI. | #### Examples ##### Example 1 @@ -923,15 +923,15 @@ The **jf terraform-config** command will store the repository name inside the ** The following table lists the command options: -| | | -|--------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command-name | terraform-config | -| Abbreviation | tfc | -| Command options | | -| --global |

[Optional]

Set to true, if you'd like the configuration to be global (for all projects on the machine). Specific projects can override the global configuration.

| -| --server-id-deploy |

[Optional]

Artifactory server ID for deployment. The server should configured using the 'jf c add' command.

| -| --repo-deploy |

[Optional]

Repository for artifacts deployment.

| -| Command arguments | The command accepts no arguments | +| | | +|--------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | terraform-config | +| Abbreviation | tfc | +| Command options | | +| --global |

[Optional]
Set to true, if you'd like the configuration to be global (for all projects on the machine). Specific projects can override the global configuration.

| +| --server-id-deploy |

[Optional]
Artifactory server ID for deployment. The server should configured using the 'jf c add' command.

| +| --repo-deploy |

[Optional]
Repository for artifacts deployment.

| +| Command arguments | The command accepts no arguments | #### Examples ##### Example 1 @@ -958,19 +958,19 @@ The **terraform publish** command creates a terraform package for the module in The following table lists the commands arguments and options: -| | | -|------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command-name | terraform publish | -| Abbreviation | tf p | -| Command options | | -| --namespace |

[Mandatory]

Terraform module namespace

| -| --provider |

[Mandatory]

Terraform module provider

| -| --tag |

[Mandatory]

Terraform module tag

| -| --exclusions |

[Optional]

A list of Semicolon-separated exclude patterns wildcards. Paths inside the module matching one of the patterns are excluded from the deployed package.

| -| --build-name |

[Optional]

Build name. For more details, please refer to Build Integration.

| -| --build-number |

[Optional]

Build number. For more details, please refer to Build Integration.

| -| --project | | -| Command argument | The command accepts no arguments | +| | | +|------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | terraform publish | +| Abbreviation | tf p | +| Command options | | +| --namespace |

[Mandatory]
Terraform module namespace

| +| --provider |

[Mandatory]
Terraform module provider

| +| --tag |

[Mandatory]
Terraform module tag

| +| --exclusions |

[Optional]
A list of Semicolon-separated exclude patterns wildcards. Paths inside the module matching one of the patterns are excluded from the deployed package.

| +| --build-name |

[Optional]
Build name. For more details, please refer to Build Integration.

| +| --build-number |

[Optional]
Build number. For more details, please refer to Build Integration.

| +| --project | | +| Command argument | The command accepts no arguments | #### Examples ##### Example 1 diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/release-lifecycle-management.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/release-lifecycle-management.md index 173024a..63076db 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/release-lifecycle-management.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/release-lifecycle-management.md @@ -94,20 +94,20 @@ The file spec may be of one of the following creation sources: ### Commands Params -| | | -|------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command-name | release-bundle-create | -| Abbreviation | rbc | -| Command options | | -| --project |

[Optional]

Project key associated with the created Release Bundle version.

| -| --server-id |

[Optional]

Platform server ID configured using the config command.

| -| --signing-key |

[Mandatory]

The GPG/RSA key-pair name given in Artifactory.

| -| --spec |

[Optional]

Path to a File Spec.

| -| --spec-vars |

[Optional]

List of variables in the form of "key1=value1;key2=value2;..." (wrapped by quotes) to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| -| --sync |

[Default: false]

Set to true to run synchronously.

| -| Command arguments | | -| release bundle name | Name of the newly created Release Bundle. | -| release bundle version | Version of the newly created Release Bundle. | +| | | +|------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | release-bundle-create | +| Abbreviation | rbc | +| Command options | | +| --project |

[Optional]
Project key associated with the created Release Bundle version.

| +| --server-id |

[Optional]
Platform server ID configured using the config command.

| +| --signing-key |

[Mandatory]
The GPG/RSA key-pair name given in Artifactory.

| +| --spec |

[Optional]
Path to a File Spec.

| +| --spec-vars |

[Optional]
List of variables in the form of "key1=value1;key2=value2;..." (wrapped by quotes) to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| +| --sync |

[Default: false]
Set to true to run synchronously.

| +| Command arguments | | +| release bundle name | Name of the newly created Release Bundle. | +| release bundle version | Version of the newly created Release Bundle. | ### Examples #### Example 1 @@ -140,21 +140,21 @@ This command allows promoting a release bundle to a target environment. ### Commands Params -| | | -|------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command-name | release-bundle-promote | -| Abbreviation | rbp | -| Command options | | -| --input-repos |

[Optional]

A list of semicolon-separated repositories to include in the promotion. If this property is left undefined, all repositories (except those specifically excluded) are included in the promotion. If one or more repositories are specifically included, all other repositories are excluded.

| -| --exclude-repos |

[Optional]

A list of semicolon-separated repositories to exclude from the promotion.

| -| --project |

[Optional]

Project key associated with the Release Bundle version.

| -| --server-id |

[Optional]

Platform server ID configured using the config command.

| -| --signing-key |

[Mandatory]

The GPG/RSA key-pair name given in Artifactory.

| -| --sync |

[Default: false]

Set to true to run synchronously.

| -| Command arguments | | -| release bundle name | Name of the Release Bundle to promote. | -| release bundle version | Version of the Release Bundle to promote. | -| environment | Name of the target environment for the promotion. | +| | | +|------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | release-bundle-promote | +| Abbreviation | rbp | +| Command options | | +| --input-repos |

[Optional]
A list of semicolon-separated repositories to include in the promotion. If this property is left undefined, all repositories (except those specifically excluded) are included in the promotion. If one or more repositories are specifically included, all other repositories are excluded.

| +| --exclude-repos |

[Optional]
A list of semicolon-separated repositories to exclude from the promotion.

| +| --project |

[Optional]
Project key associated with the Release Bundle version.

| +| --server-id |

[Optional]
Platform server ID configured using the config command.

| +| --signing-key |

[Mandatory]
The GPG/RSA key-pair name given in Artifactory.

| +| --sync |

[Default: false]
Set to true to run synchronously.

| +| Command arguments | | +| release bundle name | Name of the Release Bundle to promote. | +| release bundle version | Version of the Release Bundle to promote. | +| environment | Name of the target environment for the promotion. | ### Examples #### Example 1 @@ -193,26 +193,26 @@ jf rbp --signing-key=myKeyPair --exclude-repos="generic-local;my-repo" myApp 1.0 This command distributes a release bundle to an edge node. -| | | -|------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command-name | release-bundle-distribute | -| Abbreviation | rbd | -| Command options | | -| --city |

[Default: *]

Wildcard filter for site city name.

| -| --country-codes |

[Default: *]

Semicolon-separated list of wildcard filters for site country codes.

| -| --create-repo |

[Default: false]

Set to true to create the repository on the edge if it does not exist.

| -| --dist-rules |

[Optional]

Path to a file, which includes the Distribution Rules in a JSON format. See the "Distribution Rules Structure" bellow.

| -| --dry-run |

[Default: false]

Set to true to disable communication with JFrog Distribution.

| -| --mapping-pattern |

[Optional]

Specify along with 'mapping-target' to distribute artifacts to a different path on the edge node. You can use wildcards to specify multiple artifacts.

| -| --mapping-target |

[Optional]

The target path for distributed artifacts on the edge node. If not specified, the artifacts will have the same path and name on the edge node, as on the source Artifactory server. For flexibility in specifying the distribution path, you can include [placeholders](https://www.jfrog.com/confluence/display/CLI/CLI+for+JFrog+Artifactory#CLIforJFrogArtifactory-UsingPlaceholders) in the form of {1}, {2} which are replaced by corresponding tokens in the pattern path that are enclosed in parenthesis.

| -| --max-wait-minutes |

[Default: 60]

Max minutes to wait for sync distribution.

| -| --project |

[Optional]

Project key associated with the Release Bundle version.

| -| --server-id |

[Optional]

Platform server ID configured using the config command.

| -| --site |

[Default: *]

Wildcard filter for site name.

| -| --sync |

[Default: false]

Set to true to run synchronously.

| -| Command arguments | | -| release bundle name | Name of the release bundle to distribute. | -| release bundle version | Version of the release bundle to distribute. | +| | | +|------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | release-bundle-distribute | +| Abbreviation | rbd | +| Command options | | +| --city |

[Default: *]
Wildcard filter for site city name.

| +| --country-codes |

[Default: *]
Semicolon-separated list of wildcard filters for site country codes.

| +| --create-repo |

[Default: false]
Set to true to create the repository on the edge if it does not exist.

| +| --dist-rules |

[Optional]
Path to a file, which includes the Distribution Rules in a JSON format. See the "Distribution Rules Structure" bellow.

| +| --dry-run |

[Default: false]
Set to true to disable communication with JFrog Distribution.

| +| --mapping-pattern |

[Optional]
Specify along with 'mapping-target' to distribute artifacts to a different path on the edge node. You can use wildcards to specify multiple artifacts.

| +| --mapping-target |

[Optional]
The target path for distributed artifacts on the edge node. If not specified, the artifacts will have the same path and name on the edge node, as on the source Artifactory server. For flexibility in specifying the distribution path, you can include [placeholders](https://www.jfrog.com/confluence/display/CLI/CLI+for+JFrog+Artifactory#CLIforJFrogArtifactory-UsingPlaceholders) in the form of {1}, {2} which are replaced by corresponding tokens in the pattern path that are enclosed in parenthesis.

| +| --max-wait-minutes |

[Default: 60]
Max minutes to wait for sync distribution.

| +| --project |

[Optional]
Project key associated with the Release Bundle version.

| +| --server-id |

[Optional]
Platform server ID configured using the config command.

| +| --site |

[Default: *]
Wildcard filter for site name.

| +| --sync |

[Default: false]
Set to true to run synchronously.

| +| Command arguments | | +| release bundle name | Name of the release bundle to distribute. | +| release bundle version | Version of the release bundle to distribute. | **Distribution Rules Structure** ```json @@ -272,10 +272,10 @@ Deleting locally means distributions of the release bundle will not be deleted. | Command-name | release-bundle-delete-local | | Abbreviation | rbdell | | Command options | | -| --project |

[Optional]

Project key associated with the Release Bundle version.

| -| --quiet |

[Default: $CI]

Set to true to skip the delete confirmation message.

| -| --server-id |

[Optional]

Platform server ID configured using the config command.

| -| --sync |

[Default: false]

Set to true to run synchronously.

| +| --project |

[Optional]
Project key associated with the Release Bundle version.

| +| --quiet |

[Default: $CI]
Set to true to skip the delete confirmation message.

| +| --server-id |

[Optional]
Platform server ID configured using the config command.

| +| --sync |

[Default: false]
Set to true to run synchronously.

| | Command arguments | | | release bundle name | Name of the release bundle to distribute. | | release bundle version | Version of the release bundle to distribute. | @@ -301,24 +301,24 @@ Delete all promotions of the release bundle to environment "PROD". ## Deleting release bundle remotely This command will delete distributions of a release bundle from edge nodes. -| | | -|------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------| -| Command-name | release-bundle-delete-remote | -| Abbreviation | rbdelr | -| Command options | | -| --city |

[Default: *]

Wildcard filter for site city name.

| -| --country-codes |

[Default: *]

Semicolon-separated list of wildcard filters for site country codes.

| -| --dist-rules |

[Optional]

Path to a file, which includes the Distribution Rules in a JSON format. See the "Distribution Rules Structure" bellow.

| -| --dry-run |

[Default: false]

Set to true to disable communication with JFrog Distribution.

| -| --max-wait-minutes |

[Default: 60]

Max minutes to wait for sync distribution.

| -| --project |

[Optional]

Project key associated with the Release Bundle version.

| -| --quiet |

[Default: $CI]

Set to true to skip the delete confirmation message.

| -| --server-id |

[Optional]

Platform server ID configured using the config command.

| -| --site |

[Default: *]

Wildcard filter for site name.

| -| --sync |

[Default: false]

Set to true to run synchronously.

| -| Command arguments | | -| release bundle name | Name of the release bundle to distribute. | -| release bundle version | Version of the release bundle to distribute. | +| | | +|------------------------|---------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | release-bundle-delete-remote | +| Abbreviation | rbdelr | +| Command options | | +| --city |

[Default: *]
Wildcard filter for site city name.

| +| --country-codes |

[Default: *]
Semicolon-separated list of wildcard filters for site country codes.

| +| --dist-rules |

[Optional]
Path to a file, which includes the Distribution Rules in a JSON format. See the "Distribution Rules Structure" bellow.

| +| --dry-run |

[Default: false]
Set to true to disable communication with JFrog Distribution.

| +| --max-wait-minutes |

[Default: 60]
Max minutes to wait for sync distribution.

| +| --project |

[Optional]
Project key associated with the Release Bundle version.

| +| --quiet |

[Default: $CI]
Set to true to skip the delete confirmation message.

| +| --server-id |

[Optional]
Platform server ID configured using the config command.

| +| --site |

[Default: *]
Wildcard filter for site name.

| +| --sync |

[Default: false]
Set to true to run synchronously.

| +| Command arguments | | +| release bundle name | Name of the release bundle to distribute. | +| release bundle version | Version of the release bundle to distribute. | ### Examples #### Example 1 diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/verifying-artifactory-accessibility.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/verifying-artifactory-accessibility.md index 703ee7c..3d7083f 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/verifying-artifactory-accessibility.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/verifying-artifactory-accessibility.md @@ -4,16 +4,16 @@ This command can be used to verify that Artifactory is accessible by sending an ## Commands Params -| | | -|-------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command name | rt ping | -| Abbreviation | rt p | -| | | -| Command options | | -| --url |

[Optional]

Artifactory URL.

| -| --server-id |

[Optional]

Server ID configured using the jf c add command. If not specified, the default configured Artifactory server is used.

| -| --insecure-tls |

[Default: false]

Set to true to skip TLS certificates verification.

| -| Command arguments | The command accepts no arguments. | +| | | +|-------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command name | rt ping | +| Abbreviation | rt p | +| | | +| Command options | | +| --url |

[Optional]
Artifactory URL.

| +| --server-id |

[Optional]
Server ID configured using the jf c add command. If not specified, the default configured Artifactory server is used.

| +| --insecure-tls |

[Default: false]
Set to true to skip TLS certificates verification.

| +| Command arguments | The command accepts no arguments. | ## Examples ### Example 1 diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-curation.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-curation.md index f0e64b3..19f2975 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-curation.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-curation.md @@ -35,14 +35,14 @@ Before running the command, do the following: #### Commands Params -| | | -|---------------------|----------------------------------------------------------------------------------------------------------------------------------------| -| **Command name** | curation-audit | -| **Abbreviation** | ca | -| **Command options** | | -| --format |

[Default: table]

Defines the output format of the command. Acceptable values are: table and json.

| -| --working-dirs |

[Optional]

A comma separated list of relative working directories, to determine the audit targets locations.

| -| --threads |

[Default: 10]

The number of parallel threads used to determine the curation status for each package in the project tree.

| +| | | +|---------------------|------------------------------------------------------------------------------------------------------------------------------------| +| **Command name** | curation-audit | +| **Abbreviation** | ca | +| **Command options** | | +| --format |

[Default: table]
Defines the output format of the command. Acceptable values are: table and json.

| +| --working-dirs |

[Optional]
A comma separated list of relative working directories, to determine the audit targets locations.

| +| --threads |

[Default: 10]
The number of parallel threads used to determine the curation status for each package in the project tree.

| #### Example 1 diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-distribution.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-distribution.md index 6c94740..615dfeb 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-distribution.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-distribution.md @@ -34,30 +34,30 @@ This commands creates and updates an unsigned Release Bundle on JFrog Distributi #### Commands Params -| | | -|------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command-name | release-bundle-create / release-bundle-update | -| Abbreviation | rbc / rbu | -| Command options | | -| --server-id |

[Optional]

Artifactory server ID configured using the config command.

| -| --spec |

[Optional]

Path to a file spec. For more details, please refer to Using File Specs.

| -| --spec-vars |

[Optional]

List of variables in the form of "key1=value1;key2=value2;..." to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| -| --target-props |

[Optional]

The list of properties, in the form of key1=value1;key2=value2,..., to be added to the artifacts after distribution of the release bundle.

| -| --target |

[Optional]

The target path for distributed artifacts on the edge node. If not specified, the artifacts will have the same path and name on the edge node, as on the source Artifactory server. For flexibility in specifying the distribution path, you can include placeholders in the form of {1}, {2} which are replaced by corresponding tokens in the pattern path that are enclosed in parenthesis.

| -| --dry-run |

[Default: false]

Set to true to disable communication with JFrog Distribution.

| -| --sign |

[Default: false]

If set to true, automatically signs the release bundle version.

| -| --passphrase |

[Optional]

The passphrase for the signing key.

| -| --desc |

[Optional]

Description of the release bundle.

| -| --release-notes-path |

[Optional]

Path to a file describes the release notes for the release bundle version.

| -| --release-notes-syntax |

[Default: plain_text]

The syntax for the release notes. Can be one of markdown, asciidoc, or plain_text.

| -| --exclusions |

[Optional]

A list of Semicolon-separated exclude path patterns, to be excluded from the Release Bundle. Allows using wildcards.

| -| --repo |

[Optional]

A repository name at source Artifactory to store release bundle artifacts in. If not provided, Artifactory will use the default one.

| -| --insecure-tls |

[Default: false]

Set to true to skip TLS certificates verification.

| -| --detailed-summary |

[Default: false]

Set to true to return the SHA256 value of the release bundle manifest.

| -| Command arguments | | -| release bundle name | The name of the release bundle. | -| release bundle version | The release bundle version. | -| pattern | Specifies the source path in Artifactory, from which the artifacts should be bundled, in the following format: \/\. You can use wildcards to specify multiple artifacts. This argument should not be sent along with the _--spec_ option. | +| | | +|------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | release-bundle-create / release-bundle-update | +| Abbreviation | rbc / rbu | +| Command options | | +| --server-id |

[Optional]
Artifactory server ID configured using the config command.

| +| --spec |

[Optional]
Path to a file spec. For more details, please refer to Using File Specs.

| +| --spec-vars |

[Optional]
List of variables in the form of "key1=value1;key2=value2;..." to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| +| --target-props |

[Optional]
The list of properties, in the form of key1=value1;key2=value2,..., to be added to the artifacts after distribution of the release bundle.

| +| --target |

[Optional]
The target path for distributed artifacts on the edge node. If not specified, the artifacts will have the same path and name on the edge node, as on the source Artifactory server. For flexibility in specifying the distribution path, you can include placeholders in the form of {1}, {2} which are replaced by corresponding tokens in the pattern path that are enclosed in parenthesis.

| +| --dry-run |

[Default: false]
Set to true to disable communication with JFrog Distribution.

| +| --sign |

[Default: false]
If set to true, automatically signs the release bundle version.

| +| --passphrase |

[Optional]
The passphrase for the signing key.

| +| --desc |

[Optional]
Description of the release bundle.

| +| --release-notes-path |

[Optional]
Path to a file describes the release notes for the release bundle version.

| +| --release-notes-syntax |

[Default: plain_text]
The syntax for the release notes. Can be one of markdown, asciidoc, or plain_text.

| +| --exclusions |

[Optional]
A list of Semicolon-separated exclude path patterns, to be excluded from the Release Bundle. Allows using wildcards.

| +| --repo |

[Optional]
A repository name at source Artifactory to store release bundle artifacts in. If not provided, Artifactory will use the default one.

| +| --insecure-tls |

[Default: false]
Set to true to skip TLS certificates verification.

| +| --detailed-summary |

[Default: false]
Set to true to return the SHA256 value of the release bundle manifest.

| +| Command arguments | | +| release bundle name | The name of the release bundle. | +| release bundle version | The release bundle version. | +| pattern | Specifies the source path in Artifactory, from which the artifacts should be bundled, in the following format: \/\. You can use wildcards to specify multiple artifacts. This argument should not be sent along with the _--spec_ option. | #### Example 1 @@ -180,19 +180,19 @@ This command GPG signs an existing Release Bundle on JFrog Distribution. #### Commands Params -| | | -|------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command-name | release-bundle-sign | -| Abbreviation | rbs | -| Command options | | -| --server-id |

[Optional]

Artifactory server ID configured using the config command.

| -| --passphrase |

[Optional]

The passphrase for the signing key.

| -| --repo |

[Optional]

A repository name at source Artifactory to store release bundle artifacts in. If not provided, Artifactory will use the default one.

| -| --insecure-tls |

[Default: false]

Set to true to skip TLS certificates verification.

| -| --detailed-summary |

[Default: false]

Set to true to return the SHA256 value of the release bundle manifest.

| -| Command arguments | | -| release bundle name | The name of the release bundle. | -| release bundle version | The release bundle version. | +| | | +|------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | release-bundle-sign | +| Abbreviation | rbs | +| Command options | | +| --server-id |

[Optional]
Artifactory server ID configured using the config command.

| +| --passphrase |

[Optional]
The passphrase for the signing key.

| +| --repo |

[Optional]
A repository name at source Artifactory to store release bundle artifacts in. If not provided, Artifactory will use the default one.

| +| --insecure-tls |

[Default: false]
Set to true to skip TLS certificates verification.

| +| --detailed-summary |

[Default: false]
Set to true to return the SHA256 value of the release bundle manifest.

| +| Command arguments | | +| release bundle name | The name of the release bundle. | +| release bundle version | The release bundle version. | #### Example @@ -216,24 +216,24 @@ This command distributes a release bundle to the Edge Nodes. #### Commands Params -| | | -|------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command-name | release-bundle-distribute | -| Abbreviation | rbd | -| Command options | | -| --server-id |

[Optional]

Artifactory server ID configured using the config command.

| -| --sync |

[Default: false]

Set to true to enable sync distribution (the command execution will end when the distribution process ends).

| -| --max-wait-minutes |

[Default: 60]

Max minutes to wait for sync distribution.

| -| --create-repo |

[Default: false]

Set to true to create the repository on the edge if it does not exist.

| -| --dry-run |

[Default: false]

Set to true to disable communication with JFrog Distribution.

| -| --dist-rules |

[Optional]

Path to a file, which includes the Distribution Rules in a JSON format.

Distribution Rules JSON structure

{
"distribution_rules": [
{
"site_name": "DC-1",
"city_name": "New-York",
"country_codes": ["1"]
},
{
"site_name": "DC-2",
"city_name": "Tel-Aviv",
"country_codes": ["972"]
}
]
}

The Distribution Rules format also supports wildcards. For example:

{
"distribution_rules": [
{
"site_name": "",
"city_name": "",
"country_codes": ["*"]
}
]
}

| -| --site |

[Default: *]

Wildcard filter for site name.

| -| --city |

[Default: *]

Wildcard filter for site city name.

| -| --country-codes |

[Default: *]

Semicolon-separated list of wildcard filters for site country codes.

| -| --insecure-tls |

[Default: false]

Set to true to skip TLS certificates verification.

| -| Command arguments | | -| release bundle name | The name of the release bundle. | -| release bundle version | The release bundle version. | +| | | +|------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | release-bundle-distribute | +| Abbreviation | rbd | +| Command options | | +| --server-id |

[Optional]
Artifactory server ID configured using the config command.

| +| --sync |

[Default: false]
Set to true to enable sync distribution (the command execution will end when the distribution process ends).

| +| --max-wait-minutes |

[Default: 60]
Max minutes to wait for sync distribution.

| +| --create-repo |

[Default: false]
Set to true to create the repository on the edge if it does not exist.

| +| --dry-run |

[Default: false]
Set to true to disable communication with JFrog Distribution.

| +| --dist-rules |

[Optional]
Path to a file, which includes the Distribution Rules in a JSON format.

Distribution Rules JSON structure

{
"distribution_rules": [
{
"site_name": "DC-1",
"city_name": "New-York",
"country_codes": ["1"]
},
{
"site_name": "DC-2",
"city_name": "Tel-Aviv",
"country_codes": ["972"]
}
]
}

The Distribution Rules format also supports wildcards. For example:

{
"distribution_rules": [
{
"site_name": "",
"city_name": "",
"country_codes": ["*"]
}
]
}

| +| --site |

[Default: *]
Wildcard filter for site name.

| +| --city |

[Default: *]
Wildcard filter for site city name.

| +| --country-codes |

[Default: *]
Semicolon-separated list of wildcard filters for site country codes.

| +| --insecure-tls |

[Default: false]
Set to true to skip TLS certificates verification.

| +| Command arguments | | +| release bundle name | The name of the release bundle. | +| release bundle version | The release bundle version. | #### Example 1 @@ -258,25 +258,25 @@ This command deletes a Release Bundle from the Edge Nodes and optionally from Di #### Commands Params -| | | -|------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command-name | release-bundle-delete | -| Abbreviation | rbdel | -| Command options | | -| --server-id |

[Optional]

Artifactory server ID configured using the config command.

| -| --sync |

[Default: false]

Set to true to enable sync deletion (the command execution will end when the deletion process ends).

| -| --max-wait-minutes |

[Default: 60]

Max minutes to wait for sync deletion.

| -| --dry-run |

[Default: false]

Set to true to disable communication with JFrog Distribution.

| -| --dist-rules |

[Optional]

Path to a file, which includes the distribution rules in a JSON format.

| -| --site |

[Default: *]

Wildcard filter for site name.

| -| --city |

[Default: *]

Wildcard filter for site city name.

| -| --country-codes |

[Default: *]

Semicolon-separated list of wildcard filters for site country codes.

| -| --delete-from-dist |

[Default: false]

Set to true to delete release bundle version in JFrog Distribution itself after deletion is complete in the specified Edge nodes.

| -| --quiet |

[Default: false]

Set to true to skip the delete confirmation message.

| -| --insecure-tls |

[Default: false]

Set to true to skip TLS certificates verification.

| -| Command arguments | | -| release bundle name | The name of the release bundle. | -| release bundle version | The release bundle version. | +| | | +|------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | release-bundle-delete | +| Abbreviation | rbdel | +| Command options | | +| --server-id |

[Optional]
Artifactory server ID configured using the config command.

| +| --sync |

[Default: false]
Set to true to enable sync deletion (the command execution will end when the deletion process ends).

| +| --max-wait-minutes |

[Default: 60]
Max minutes to wait for sync deletion.

| +| --dry-run |

[Default: false]
Set to true to disable communication with JFrog Distribution.

| +| --dist-rules |

[Optional]
Path to a file, which includes the distribution rules in a JSON format.

| +| --site |

[Default: *]
Wildcard filter for site name.

| +| --city |

[Default: *]
Wildcard filter for site city name.

| +| --country-codes |

[Default: *]
Semicolon-separated list of wildcard filters for site country codes.

| +| --delete-from-dist |

[Default: false]
Set to true to delete release bundle version in JFrog Distribution itself after deletion is complete in the specified Edge nodes.

| +| --quiet |

[Default: false]
Set to true to skip the delete confirmation message.

| +| --insecure-tls |

[Default: false]
Set to true to skip TLS certificates verification.

| +| Command arguments | | +| release bundle name | The name of the release bundle. | +| release bundle version | The release bundle version. | #### Example 1 diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-pipelines.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-pipelines.md index 69f3833..527b9c3 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-pipelines.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-pipelines.md @@ -30,13 +30,13 @@ The following sections describe the commands available in the JFrog CLI for use ##### Commands Params -| | | -|-------------------|----------------------------------------------------------------------------------------------------------------------------------------------------| -| Command name | pl version | -| Abbreviation | v | -| Command arguments | The command accepts no arguments. | -| Command options | | -| --server-id |

[Optional]

Specify Pipelines server for which the version is to be fetched. If not specified, the default configured server is used.

| +| | | +|-------------------|------------------------------------------------------------------------------------------------------------------------------------------------| +| Command name | pl version | +| Abbreviation | v | +| Command arguments | The command accepts no arguments. | +| Command options | | +| --server-id |

[Optional]
Specify Pipelines server for which the version is to be fetched. If not specified, the default configured server is used.

| ##### Example @@ -51,18 +51,18 @@ Get the status of the run for the specified pipeline ##### Commands Params -| | | -|-------------------|--------------------------------------------------------------------------------------------------------------------------------| -| Command name | pl status | -| Abbreviation | s | -| Command arguments | The command accepts no arguments. | -| | | -| Command options | | -| --pipeline-name |

[Optional]

Name of the pipeline.

| -| --branch |

[Optional]

Name of the multi branch.

| -| --monitor |

[Optional]

Continuous monitoring until pipeline reaches end state.

Default time is 1 hour and 30 minutes.

| -| --server-id |

[Optional]

Name of the server.

| -| --single-branch |

[Optional]

To be used when using a single branch.

| +| | | +|-------------------|----------------------------------------------------------------------------------------------------------------------------| +| Command name | pl status | +| Abbreviation | s | +| Command arguments | The command accepts no arguments. | +| | | +| Command options | | +| --pipeline-name |

[Optional]
Name of the pipeline.

| +| --branch |

[Optional]
Name of the multi branch.

| +| --monitor |

[Optional]
Continuous monitoring until pipeline reaches end state.

Default time is 1 hour and 30 minutes.

| +| --server-id |

[Optional]
Name of the server.

| +| --single-branch |

[Optional]
To be used when using a single branch.

| ##### Example 1 @@ -85,16 +85,16 @@ Trigger a pipeline run. ##### Commands Params -| | | -|-------------------|--------------------------------------------------------------------------------------------------------------------------| -| Command name | pl trigger | -| Abbreviation | t | -| Command options | | -| --server-id |

[Optional]

Name of the server.

| -| --single-branch |

[Optional]

To be used when using a single branch. When used, branch_name argument is ignored.

| -| Command arguments | | -| pipeline\_name | Name of the pipeline to be triggered. | -| branch\_name | Name of the multi branch. | +| | | +|-------------------|----------------------------------------------------------------------------------------------------------------------| +| Command name | pl trigger | +| Abbreviation | t | +| Command options | | +| --server-id |

[Optional]
Name of the server.

| +| --single-branch |

[Optional]
To be used when using a single branch. When used, branch_name argument is ignored.

| +| Command arguments | | +| pipeline\_name | Name of the pipeline to be triggered. | +| branch\_name | Name of the multi branch. | ##### Example 1 @@ -116,14 +116,14 @@ jf pl trigger myPipeline main/jobs --server-id repo21 ##### Commands Params -| | | -|-----------------|-------------------------------------------------------------------------------------------| -| Command name | pl sync | -| Abbreviation | sy | -| Command options | | -| --server-id |

[Optional]

Name of the server.

| -| --repository |

[Optional]

Full name of the repository where the pipeline source is stored.

| -| --branch |

[Optional]

Name of branch that has the pipeline source.

| +| | | +|-----------------|---------------------------------------------------------------------------------------| +| Command name | pl sync | +| Abbreviation | sy | +| Command options | | +| --server-id |

[Optional]
Name of the server.

| +| --repository |

[Optional]
Full name of the repository where the pipeline source is stored.

| +| --branch |

[Optional]
Name of branch that has the pipeline source.

| ##### Example @@ -141,7 +141,7 @@ jf pl sync --repository jfrog/artifactory --branch main/jobs --server-id repo21 | Command name | pl sync-status | | Abbreviation | ss | | Command options | | -| --server-id |

[Optional]

Name of the server.

| +| --server-id |

[Optional]
Name of the server.

| | Command arguments | | | full\_repo\_name | Full name of the repository where the pipeline source is stored. | | branch\_name | Name of the branch. | diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/download-updates-for-xrays-database.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/download-updates-for-xrays-database.md index 0f3c981..73f5515 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/download-updates-for-xrays-database.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/download-updates-for-xrays-database.md @@ -2,4 +2,4 @@ The offline-update command downloads updates to Xray's vulnerabilities database. The Xray UI allows building the command structure for you. -
Command namexr offline-update
Abbreviationxr ou
Command options
--license-id[Mandatory]

Xray license ID.
--from[Optional]

From update date in YYYY-MM-DD format.
--to[Optional]

To update date in YYYY-MM-DD format.
--version[Optional]

Xray API version.
--target[Default: ./]

Path for downloaded update files.
--dbsyncv3[Default: false]

Set to true to use Xray DBSync V3.
--periodic[Default: false]

Set to true to get the Xray DBSync V3 Periodic Package (Use with dbsyncv3 flag).
Command argumentsThe command accepts no arguments.
+
Command namexr offline-update
Abbreviationxr ou
Command options
--license-id[Mandatory]
Xray license ID.
--from[Optional]
From update date in YYYY-MM-DD format.
--to[Optional]
To update date in YYYY-MM-DD format.
--version[Optional]
Xray API version.
--target[Default: ./]
Path for downloaded update files.
--dbsyncv3[Default: false]
Set to true to use Xray DBSync V3.
--periodic[Default: false]
Set to true to get the Xray DBSync V3 Periodic Package (Use with dbsyncv3 flag).
Command argumentsThe command accepts no arguments.
diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-published-builds.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-published-builds.md index 2633df2..5ce956e 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-published-builds.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-published-builds.md @@ -6,20 +6,20 @@ JFrog CLI is integrated with JFrog Xray and JFrog Artifactory, allowing you to h ### Commands Params -| | | -|-------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command name | build-scan | -| Abbreviation | bs | -| Command options | | -| --server-id |

[Optional]

Server ID configured by the jf c add command. If not specified, the default configured server is used.

| -| --vuln |

[Optional]

Set if you'd like to receive all vulnerabilities, regardless of the policy configured in Xray.

| -| --fail |

[Default: true]

When set, the command returns exit code 3 if a 'Fail Build' rule is matched by Xray.
Set to false if you do not wish the command to return exit code 3 in such case, and an exit code 0 will be returned.

| -| --format |

[Default: table]

Defines the output format of the command. The accepted values are: table and json.

| -| --project |

[Optional]

JFrog project key

| -| --rescan |

[Default: false]

Set to true when scanning an already successfully scanned build, for example after adding an ignore rule.

| -| Command arguments | The command accepts two arguments. | -| Build name | Build name to be scanned. | -| Build number | Build number to be scanned. | +| | | +|-------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command name | build-scan | +| Abbreviation | bs | +| Command options | | +| --server-id |

[Optional]
Server ID configured by the jf c add command. If not specified, the default configured server is used.

| +| --vuln |

[Optional]
Set if you'd like to receive all vulnerabilities, regardless of the policy configured in Xray.

| +| --fail |

[Default: true]
When set, the command returns exit code 3 if a 'Fail Build' rule is matched by Xray.
Set to false if you do not wish the command to return exit code 3 in such case, and an exit code 0 will be returned.

| +| --format |

[Default: table]
Defines the output format of the command. The accepted values are: table and json.

| +| --project |

[Optional]
JFrog project key

| +| --rescan |

[Default: false]
Set to true when scanning an already successfully scanned build, for example after adding an ignore rule.

| +| Command arguments | The command accepts two arguments. | +| Build name | Build name to be scanned. | +| Build number | Build number to be scanned. | ### Example diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-binaries.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-binaries.md index a54b1c1..4563bb2 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-binaries.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-binaries.md @@ -19,20 +19,20 @@ This _**jf scan**_ command scans files on the local file system with Xray. #### Commands Params -| | | -|-----------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| **Command name** | scan | -| **Abbreviation** | s | -| **Command options** | | -| --server-id |

[Optional]

Server ID configured using the jf c add command. If not specified, the default configured server is used.

| -| --spec |

[Optional]

Path to a file specifying the files to scan. If the pattern argument is provided to the command, this option should not be provided.

| -| --project |

[Optional]

JFrog project key, to enable Xray to determine security violations accordingly. The command accepts this option only if the --repo-path and --watches options are not provided. If none of the three options are provided, the command will show all known vulnerabilities.

| -| --repo-path |

[Optional]

Artifactory repository path in the form of <repository>/<path in the repository>, to enable Xray to determine violations accordingly. The command accepts this option only if the --project and --watches options are not provided. If none of the three options are provided, the command will show all known vulnerabilities.

| -| --watches |

[Optional]

A comma-separated list of Xray watches, to enable Xray to determine violations accordingly. The command accepts this option only if the --project and --repo-path options are not provided. If none of the three options are provided, the command will show all known vulnerabilities.

| -| --licenses |

[Default: false]

Set if you also require the list of licenses to be displayed.

| -| --format=json |

[Optional]

Produces a JSON file containing the scan results.

| -| **Command arguments** | | -| **Pattern** | Specifies the local file system path to artifacts to be scanned. You can specify multiple files by using wildcards. | +| | | +|-----------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| **Command name** | scan | +| **Abbreviation** | s | +| **Command options** | | +| --server-id |

[Optional]
Server ID configured using the jf c add command. If not specified, the default configured server is used.

| +| --spec |

[Optional]
Path to a file specifying the files to scan. If the pattern argument is provided to the command, this option should not be provided.

| +| --project |

[Optional]
JFrog project key, to enable Xray to determine security violations accordingly. The command accepts this option only if the --repo-path and --watches options are not provided. If none of the three options are provided, the command will show all known vulnerabilities.

| +| --repo-path |

[Optional]
Artifactory repository path in the form of <repository>/<path in the repository>, to enable Xray to determine violations accordingly. The command accepts this option only if the --project and --watches options are not provided. If none of the three options are provided, the command will show all known vulnerabilities.

| +| --watches |

[Optional]
A comma-separated list of Xray watches, to enable Xray to determine violations accordingly. The command accepts this option only if the --project and --repo-path options are not provided. If none of the three options are provided, the command will show all known vulnerabilities.

| +| --licenses |

[Default: false]
Set if you also require the list of licenses to be displayed.

| +| --format=json |

[Optional]
Produces a JSON file containing the scan results.

| +| **Command arguments** | | +| **Pattern** | Specifies the local file system path to artifacts to be scanned. You can specify multiple files by using wildcards. | #### Example 1 @@ -99,19 +99,19 @@ This j\_**f docker scan**\_ command scans docker containers located on the local #### Commands Params -| | | -|-----------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| **Command name** | docker scan | -| **Abbreviation** | | -| **Command options** | | -| --server-id |

[Optional]

Server ID configured using the jf c add command. If not specified, the default configured server is used.

| -| --project |

[Optional]

JFrog project key, to enable Xray to determine security violations accordingly. The command accepts this option only if the --repo-path and --watches options are not provided. If none of the three options are provided, the command will show all known vulnerabilities.

| -| --repo-path |

[Optional]

Artifactory repository path in the form of <repository>/<path in the repository>, to enable Xray to determine violations accordingly. The command accepts this option only if the --project and --watches options are not provided. If none of the three options are provided, the command will show all known vulnerabilities.

| -| --watches |

[Optional]

A comma separated list of Xray watches, to enable Xray to determine violations accordingly. The command accepts this option only if the --repo-path and --repo-path options are not provided. If none of the three options are provided, the command will show all known vulnerabilities.

| -| --licenses |

[Default: false]

Set if you also require the list of licenses to be displayed.

| -| --format=json |

[Optional]

Produces a JSON file containing the scan results.

| -| **Command arguments** | | -| **Pattern** | Specifies the local file system path to artifacts to be scanned. You can specify multiple files by using wildcards. | +| | | +|-----------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| **Command name** | docker scan | +| **Abbreviation** | | +| **Command options** | | +| --server-id |

[Optional]
Server ID configured using the jf c add command. If not specified, the default configured server is used.

| +| --project |

[Optional]
JFrog project key, to enable Xray to determine security violations accordingly. The command accepts this option only if the --repo-path and --watches options are not provided. If none of the three options are provided, the command will show all known vulnerabilities.

| +| --repo-path |

[Optional]
Artifactory repository path in the form of <repository>/<path in the repository>, to enable Xray to determine violations accordingly. The command accepts this option only if the --project and --watches options are not provided. If none of the three options are provided, the command will show all known vulnerabilities.

| +| --watches |

[Optional]
A comma separated list of Xray watches, to enable Xray to determine violations accordingly. The command accepts this option only if the --repo-path and --repo-path options are not provided. If none of the three options are provided, the command will show all known vulnerabilities.

| +| --licenses |

[Default: false]
Set if you also require the list of licenses to be displayed.

| +| --format=json |

[Optional]
Produces a JSON file containing the scan results.

| +| **Command arguments** | | +| **Pattern** | Specifies the local file system path to artifacts to be scanned. You can specify multiple files by using wildcards. | #### Example 1 diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-source-code.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-source-code.md index 806590a..808631d 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-source-code.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-source-code.md @@ -35,36 +35,36 @@ This command also supports the following Advanced Scans with the **Advanced Secu #### Commands Params -| | | -|-----------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| **Command name** | audit | -| **Abbreviation** | aud | -| **Command options** | | -| --server-id |

[Optional]

Server ID configured using the jf c add command. If not specified, the default configured server is used.

| -| --project |

[Optional]

JFrog project key, to enable Xray to determine security violations accordingly. The command accepts this option only if the --repo-path and --watches options are not provided. If none of the three options are provided, the command will show all known vulnerabilities

| -| --repo-path |

[Optional]

Artifactory repository path in the form of <repository>/<path in the repository>, to enable Xray to determine violations accordingly. The command accepts this option only if the --project and --watches options are not provided. If none of the three options are provided, the command will show all known vulnerabilities

| -| --watches |

[Optional]

A comma-separated list of Xray watches, to enable Xray to determine violations accordingly. The command accepts this option only if the --repo-path and --repo-path options are not provided. If none of the three options are provided, the command will show all known vulnerabilities

| -| --licenses |

[Default: false]

Set if you'd also like the list of licenses to be displayed.

| -| --format |

[Default: table]

Defines the output format of the command. Acceptable values are: table and json.

| -| --fail |

[Default: true]

Set to false if you do not wish the command to return exit code 3, even if the 'Fail Build' rule is matched by Xray.

| -| --use-wrapper |

[Default: false] [Gradle]

Set to true if you'd like to use the Gradle wrapper.

| -| --dep-type |

[Default: all] [npm]

Defines npm dependencies type. Possible values are: all, devOnly and prodOnly

| -| --exclude-test-deps |

[Default: false] [Gradle]

Set to true if you'd like to exclude Gradle test dependencies from Xray scanning.

| -| --requirements-file |

[Optional] [Pip]

Defines pip requirements file name. For example: 'requirements.txt'

| -| --working-dirs |

[Optional]

A comma-separated list of relative working directories, to determine the audit targets locations.

If flag isn't provided, a recursive scan is triggered from the root directory of the project. | -| --exclusions |

[Default: *.git*;*node_modules*;*target*;*venv*;*test*]

List of exclusions separated by semicolons, utilized to skip sub-projects from undergoing an audit. These exclusions may incorporate the * and ? wildcards.

| -| --fixable-only |

[Optional]

Set to true if you wish to display issues that have a fix version only.

| -| --min-severity |

[Optional]

Set the minimum severity of issues to display. The following values are accepted: Low, Medium, High or Critical

| -| --go |

[Default: false]

Set to true to request audit for a Go project.

| -| --gradle |

[Default: false]

Set to true to request audit for a Gradle project.

| -| --mvn |

[Default: false]

Set to true to request audit for a Maven project.

| -| --npm |

[Default: false]

Set to true to request audit for a npm project.

| -| --pnpm |

[Default: false]

Set to true to request audit for a pnpm project.

| -| --nuget |

[Default: false]

Set to true to request audit for a .Net project.

| -| --pip |

[Default: false]

Set to true to request audit for a Pip project.

| -| --pipenv |

[Default: false]

Set to true to request audit for a Pipenv project.

| -| --yarn |

[Default: false]

Set to true to request audit for a Yarn project.

| -| **Command arguments** | The command accepts no arguments | +| | | +|-----------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| **Command name** | audit | +| **Abbreviation** | aud | +| **Command options** | | +| --server-id |

[Optional]
Server ID configured using the jf c add command. If not specified, the default configured server is used.

| +| --project |

[Optional]
JFrog project key, to enable Xray to determine security violations accordingly. The command accepts this option only if the --repo-path and --watches options are not provided. If none of the three options are provided, the command will show all known vulnerabilities

| +| --repo-path |

[Optional]
Artifactory repository path in the form of <repository>/<path in the repository>, to enable Xray to determine violations accordingly. The command accepts this option only if the --project and --watches options are not provided. If none of the three options are provided, the command will show all known vulnerabilities

| +| --watches |

[Optional]
A comma-separated list of Xray watches, to enable Xray to determine violations accordingly. The command accepts this option only if the --repo-path and --repo-path options are not provided. If none of the three options are provided, the command will show all known vulnerabilities

| +| --licenses |

[Default: false]
Set if you'd also like the list of licenses to be displayed.

| +| --format |

[Default: table]
Defines the output format of the command. Acceptable values are: table and json.

| +| --fail |

[Default: true]
Set to false if you do not wish the command to return exit code 3, even if the 'Fail Build' rule is matched by Xray.

| +| --use-wrapper |

[Default: false] [Gradle]
Set to true if you'd like to use the Gradle wrapper.

| +| --dep-type |

[Default: all] [npm]
Defines npm dependencies type. Possible values are: all, devOnly and prodOnly

| +| --exclude-test-deps |

[Default: false] [Gradle]
Set to true if you'd like to exclude Gradle test dependencies from Xray scanning.

| +| --requirements-file |

[Optional] [Pip]
Defines pip requirements file name. For example: 'requirements.txt'

| +| --working-dirs |

[Optional]
A comma-separated list of relative working directories, to determine the audit targets locations.

If flag isn't provided, a recursive scan is triggered from the root directory of the project. | +| --exclusions |

[Default: *.git*;*node_modules*;*target*;*venv*;*test*]
List of exclusions separated by semicolons, utilized to skip sub-projects from undergoing an audit. These exclusions may incorporate the * and ? wildcards.

| +| --fixable-only |

[Optional]
Set to true if you wish to display issues that have a fix version only.

| +| --min-severity |

[Optional]
Set the minimum severity of issues to display. The following values are accepted: Low, Medium, High or Critical

| +| --go |

[Default: false]
Set to true to request audit for a Go project.

| +| --gradle |

[Default: false]
Set to true to request audit for a Gradle project.

| +| --mvn |

[Default: false]
Set to true to request audit for a Maven project.

| +| --npm |

[Default: false]
Set to true to request audit for a npm project.

| +| --pnpm |

[Default: false]
Set to true to request audit for a pnpm project.

| +| --nuget |

[Default: false]
Set to true to request audit for a .Net project.

| +| --pip |

[Default: false]
Set to true to request audit for a Pip project.

| +| --pipenv |

[Default: false]
Set to true to request audit for a Pipenv project.

| +| --yarn |

[Default: false]
Set to true to request audit for a Yarn project.

| +| **Command arguments** | The command accepts no arguments | #### **Output Example** @@ -135,7 +135,7 @@ Execute a cUrl command, using the configured Xray details. The command expects t | Command name | xr curl | | Abbreviation | xr cl | | Command options | | -| --server-id |

[Optional]

Server ID configured using the jf c add command. If not specified, the default configured server is used.

| +| --server-id |

[Optional]
Server ID configured using the jf c add command. If not specified, the default configured server is used.

| | Command arguments | | | cUrl arguments and flags |

The same list of arguments and flags passed to cUrl, except for the following changes:

1. The full Xray URL should not be passed. Instead, the REST endpoint URI should be sent.
2. The login credentials should not be passed. Instead, the --server-id should be used.

| diff --git a/jfrog-applications/jfrog-cli/get-started/configurations/jfrog-platform-configuration.md b/jfrog-applications/jfrog-cli/get-started/configurations/jfrog-platform-configuration.md index e1286f2..a91549c 100644 --- a/jfrog-applications/jfrog-cli/get-started/configurations/jfrog-platform-configuration.md +++ b/jfrog-applications/jfrog-cli/get-started/configurations/jfrog-platform-configuration.md @@ -15,7 +15,7 @@ This command allows creating [Access Tokens](https://jfrog.com/help/r/jfrog-plat ### Commands Params | | | -| ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +|-------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command name | access-token-create | | Abbreviation | atc | | Command arguments | | @@ -54,7 +54,7 @@ jf atc toad The **config add** and **config edit** commands are used to add and edit JFrog Platform server configuration, stored in JFrog CLI's configuration storage. These configured servers can be used by the other commands. The configured servers' details can be overridden per command by passing in alternative values for the URL and login credentials. The values configured are saved in file under the JFrog CLI home directory. | | | -| ---------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +|------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command Name | config add / config edit | | Abbreviation | c add / c edit | | Command options | | @@ -64,7 +64,7 @@ The **config add** and **config edit** commands are used to add and edit JFrog P | --client-cert-key-path |

[Optional]

Private key file for the client certificate in PEM format.

| | --client-cert-path |

[Optional]

Client certificate file in PEM format.

| | --dist-url |

[Optional]

Distribution URL.

| -| --enc-password |

[Default: true]

If true, the configured password will be encrypted using Artifactory'sencryption API before being stored. If false, the configured password will not be encrypted.

| +| --enc-password |

[Default: true]
If true, the configured password will be encrypted using Artifactory'sencryption API before being stored. If false, the configured password will not be encrypted.

| | --insecure-tls |

[Default: false]

Set to true to skip TLS certificates verification, while encrypting the Artifactory password during the config process.

| | --interactive |

[Default: true, unless $CI is true]

Set to false if you do not want the config command to be interactive.

| | --mission-control-url |

[Optional]

Mission Control URL.

| @@ -74,7 +74,7 @@ The **config add** and **config edit** commands are used to add and edit JFrog P | --url |

[Optional]

JFrog platform URL.

| | --user |

[Optional]

JFrog Platform username.

| | --xray-url | \[Optional] Xray URL. | -| --overwrite |

[Available for config add only]

[Default: false]

Overwrites the instance configuration if an instance with the same ID already exists.

| +| --overwrite |

[Available for config add only]
[Default: false]
Overwrites the instance configuration if an instance with the same ID already exists.

| | Command arguments | | | server ID | A unique ID for the server configuration. | @@ -83,7 +83,7 @@ The **config add** and **config edit** commands are used to add and edit JFrog P The _config remove_ command is used to remove JFrog Platform server configuration, stored in JFrog CLI's configuration storage. | | | -| ----------------- | ------------------------------------------------------------------------------------ | +|-------------------|--------------------------------------------------------------------------------------| | Command name | config remove | | Abbreviation | c rm | | Command options | | @@ -96,7 +96,7 @@ The _config remove_ command is used to remove JFrog Platform server configuratio The _config show_ command shows the stored configuration. You may show a specific server's configuration by sending its ID as an argument to the command. | | | -| ----------------- | --------------------------------------------------------------------------------------- | +|-------------------|-----------------------------------------------------------------------------------------| | Command name | config show | | Abbreviation | c s | | Command arguments | | @@ -107,7 +107,7 @@ The _config show_ command shows the stored configuration. You may show a specifi The _config use_ command sets a configured server as default. The following commands will use this server. | | | -| ----------------- | --------------------------------------- | +|-------------------|-----------------------------------------| | Command name | config use | | Command arguments | | | server ID | The ID of the server to set as default. | @@ -119,7 +119,7 @@ The _config export_ command generates a token, which stores the server configura ### Export | | | -| ----------------- | ------------------------------ | +|-------------------|--------------------------------| | Command name | config export | | Abbreviation | c ex | | Command arguments | | @@ -128,7 +128,7 @@ The _config export_ command generates a token, which stores the server configura ### Import | | | -| ----------------- | ------------------- | +|-------------------|---------------------| | Command name | config import | | Abbreviation | c im | | Command arguments | | diff --git a/jfrog-applications/jfrog-cli/get-started/configurations/proxy-support.md b/jfrog-applications/jfrog-cli/get-started/configurations/proxy-support.md index 069b261..260dfd2 100644 --- a/jfrog-applications/jfrog-cli/get-started/configurations/proxy-support.md +++ b/jfrog-applications/jfrog-cli/get-started/configurations/proxy-support.md @@ -5,7 +5,7 @@ JFrog CLI supports using an HTTP/S proxy. All you need to do is set HTTP\_PROXY HTTP\_PROXY, HTTPS\_PROXY and NO\_PROXY are the industry standards for proxy usages. | Variable Name | Description | -| ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +|---------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | HTTP\_PROXY | Determines a URL to an HTTP proxy. | | HTTPS\_PROXY | Determines a URL to an HTTPS proxy. | | NO\_PROXY | Use this variable to bypass the proxy to IP addresses, subnets or domains. This may contain a comma-separated list of hostnames or IPs without protocols and ports. A typical usage may be to set this variable to Artifactory’s IP address. | diff --git a/jfrog-applications/jfrog-cli/get-started/download-and-install/usage.md b/jfrog-applications/jfrog-cli/get-started/download-and-install/usage.md index 3324351..55bfda2 100644 --- a/jfrog-applications/jfrog-cli/get-started/download-and-install/usage.md +++ b/jfrog-applications/jfrog-cli/get-started/download-and-install/usage.md @@ -11,7 +11,7 @@ The **jf options** command displays all the supported environment variables. JFrog CLI makes use of the following environment variables: | Variable Name | Description | -| ------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +|---------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | **JFROG\_CLI\_LOG\_LEVEL** |

[Default: INFO]

This variable determines the log level of the JFrog CLI. Possible values are: DEBUG, INFO, WARN and ERROR. If set to ERROR, JFrog CLI logs error messages only. It is useful when you wish to read or parse the JFrog CLI output and do not want any other information logged.

| | **JFROG\_CLI\_LOG\_TIMESTAMP** |

[Default: TIME]

Controls the log messages timestamp format. Possible values are: TIME, DATE_AND_TIME, and OFF.

| | **JFROG\_CLI\_HOME\_DIR** |

[Default: ~/.jfrog]

Defines the JFrog CLI home directory.

| From 03ec0c59bffeecc1d47d5327a24f41b0adf57b32 Mon Sep 17 00:00:00 2001 From: Robi Nino Date: Mon, 15 Apr 2024 17:25:29 +0300 Subject: [PATCH 03/57] Clarify permission target creation documentation --- .../managing-configuration-entities.md | 8 ++++---- .../jfrog-cli/get-started/download-and-install/install.md | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/managing-configuration-entities.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/managing-configuration-entities.md index 3e00073..5dc79bd 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/managing-configuration-entities.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/managing-configuration-entities.md @@ -355,11 +355,11 @@ jf rt rpldel my-repo-name ## Managing Permission Targets -JFrog CLI offers commands creating, updating and deleting permission targets in Artifactory. To make it easier to create and update permission targets, the commands which create and update the permission targets accept a pre-defined configuration template file. This template file can also include variables. which can be later replaced with values, when creating or updating the permission target. The configuration template file is created using the **jf rt permission-target-template** command. +JFrog CLI offers commands creating, updating and deleting permission targets in Artifactory. To make it easier to create and update permission targets, the commands which create and update the permission targets accept a pre-defined configuration template file. This template file can also include variables, which can be later replaced with values, when creating or updating the permission target. The configuration template file is created using the **jf rt permission-target-template** command. ### Creating a Configuration Template -This command creates a configuration template file, which should be used as an argument for the **jf rt permission-target-create** and **jf rt permission-target-update** commands. +This command creates a configuration template file, which will be used as an argument for the **jf rt permission-target-create** and **jf rt permission-target-update** commands. | | | |-------------------|---------------------------------------------------------------------------------------------------------------| @@ -371,7 +371,7 @@ This command creates a configuration template file, which should be used as an a ### Creating / Updating Permission Targets -This command creates a new permission target. The command accepts as an argument a configuration template, which can be created by the **jf rt permission-target-template** command. The template also supports variables, which can be replaced with values, provided when it is used. +These commands create/update a permission target. The commands accept as an argument a configuration template, which should be created by the **jf rt permission-target-template** command beforehand. The template also supports variables, which can be replaced with values, provided when it is used. | | | |-------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| @@ -381,7 +381,7 @@ This command creates a new permission target. The command accepts as an argument | --server-id |

[Optional]
Artifactory server ID configured using the config command.

| | --vars |

[Optional]
List of variables in the form of "key1=value1;key2=value2;..." to be replaced in the template. In the template, the variables should be used as follows: ${key1}.

| | Command arguments | | -| template path | Specifies the local file system path for the template file to be used for the permission target creation or update. The template can be created using the "jf rt ptt" command. | +| template path | Specifies the local file system path for the template file to be used for the permission target creation or update. The template should be created using the "jf rt ptt" command. | ### Deleting Permission Targets diff --git a/jfrog-applications/jfrog-cli/get-started/download-and-install/install.md b/jfrog-applications/jfrog-cli/get-started/download-and-install/install.md index b04a7d5..56cdfbc 100644 --- a/jfrog-applications/jfrog-cli/get-started/download-and-install/install.md +++ b/jfrog-applications/jfrog-cli/get-started/download-and-install/install.md @@ -91,7 +91,7 @@ brew install jfrog-cli #### Install with cUrl ``` -url -fL https://install-cli.jfrog.io | sh +curl -fL https://install-cli.jfrog.io | sh ``` #### Download with cUrl From 37c01baf26b305027b2df2288970e1e03fd7df7b Mon Sep 17 00:00:00 2001 From: Lina Daher Date: Tue, 16 Apr 2024 12:02:17 +0000 Subject: [PATCH 04/57] GITBOOK-128: change request with no subject merged in GitBook --- jfrog-applications/jfrog-cli/cli-for-jfrog-curation.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-curation.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-curation.md index 19f2975..2eab522 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-curation.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-curation.md @@ -9,7 +9,7 @@ JFrog Curation enables you to block malicious or risky open-source packages ente * Protect against known and unknown threats, allowing only trusted software packages into your SDLC. * Create policies to block packages with known vulnerabilities, malicious code, operational risk, or license compliance issues. -For more information on JFrog Curation and how to set it up, see the JFrog Curation general documentation at https://jfrog.com/help. +For more information on JFrog Curation and how to set it up, see the [JFrog Curation](https://jfrog.com/help/r/jfrog-curation/jfrog-curation-overview) general documentation. JFrog Curation requires [Xray version 3.78.9](https://jfrog.com/help/r/jfrog-release-information/xray-3.78.9) and above, and [Artifactory version 7.63.5](https://jfrog.com/help/r/jfrog-release-information/artifactory-7.63) and above. It also requires Enterprise X and Enterprise + subscriptions. @@ -31,12 +31,12 @@ Before running the command, do the following: 1. Connect the JFrog CLI to your JFrog Platform instance by running the **jf c add** command. 2. Ensure your project is configured in the JFrog CLI with the repository you would like to resolve dependencies from. Set the repository with the **jf npmc** command inside the project directory.\ - \ + \\ #### Commands Params | | | -|---------------------|------------------------------------------------------------------------------------------------------------------------------------| +| ------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | | **Command name** | curation-audit | | **Abbreviation** | ca | | **Command options** | | @@ -44,7 +44,6 @@ Before running the command, do the following: | --working-dirs |

[Optional]
A comma separated list of relative working directories, to determine the audit targets locations.

| | --threads |

[Default: 10]
The number of parallel threads used to determine the curation status for each package in the project tree.

| - #### Example 1 Audit the project in the current directory. Displays all known packages that were blocked by Curation Policies. From 08f7c612018feb6669ff8cbb2a424ffa636f2db6 Mon Sep 17 00:00:00 2001 From: Eyal Delarea Date: Wed, 17 Apr 2024 11:33:26 +0300 Subject: [PATCH 05/57] Add Export & Import release bundle docs (#107) Co-authored-by: Robi Nino --- .../release-lifecycle-management.md | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/release-lifecycle-management.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/release-lifecycle-management.md index 63076db..106fe21 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/release-lifecycle-management.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/release-lifecycle-management.md @@ -330,3 +330,59 @@ Delete the distributions of release bundle named myApp with version 1.0.0 from e Delete the distributions of the release bundle associated with project "proj" from the provided edge nodes. Run the command synchronously and skip the confirmation message. jf rbd --dist-rules=/path/to/dist-rules.json --project="proj" --quiet --sync myApp 1.0.0 + +## Exporting Release Bundle archive +JFrog Lifecycle Management supports distributing your Release Bundles to remote Edge nodes within an air-gapped environment. This use case is mainly intended for organizations that have two or more JFrog instances that have no network connection between them. + +The following command allows exporting a Release Bundle as an archive to the filesystem that can be transferred to a different instance in an air-gapped environment. + + +| | | +|------------------------|------------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | release-bundle-export | +| Abbreviation | rbe | +| Command arguments | | +| release bundle name | Name of the Release Bundle to export. | +| release bundle version | Version of the release bundle to export. +| target pattern | The argument is optional and specifies the local file system target path.If the target path ends with a slash, the path is assumed to be a directory.For example, if you specify the target as "repo-name/a/b/", then "b" is assumed to be a directory into which files should be downloaded.If there is no terminal slash, the target path is assumed to be a file to which the downloaded file should be renamed.For example, if you specify the target as "a/b", the downloaded file is renamed to "b". +| Command options | | +| --project |

[Optional]

Project key associated with the Release Bundle version.

| +| --server-id |

[Optional]

Platform server ID configured using the config command.

| +| mapping-pattern |

[Optional]

Specify a list of input regex mapping pairs that define where the queried artifact is located and where it should be placed after it is imported. Use this option if the path on the target is different than the source path. +| mapping-target |

[Optional]

Specify a list of output regex mapping pairs that define where the queried artifact is located and where it should be placed after it is imported. Use this option if the path on the target is different than the source path. +| split-count |

[Optional]

The maximum number of parts that can be concurrently uploaded per file during a multi-part upload. Set to 0 to disable multi-part upload. +| min-split |

[Optional]

Minimum file size in KB to split into ranges when downloading. Set to -1 for no splits + + +#### Example +Export release bundle named "myApp" and version 1.0.0 + + jf rbe myApp 1.0.0 + +#### Example +Download to a specific location + + jf rbe myApp 1.0.0 /user/mybundle/ + + +## Importing Release Bundle archive +Import a Release Bundle archive from a release bundle exported zip file. + +Please note this functionality only works on Edge nodes within an air-gapped environment. + +| | | +|------------------------|----------------------------------------------------------------------------------| +| Command-name | release-bundle-import | +| Abbreviation | rbi | +| Command arguments | | +| path to archive | Path to the release bundle archive on the filesystem | +| Command options | | +| --project |

[Optional]

Project key associated with the Release Bundle version.

| +| --server-id |

[Optional]

Platform server ID configured using the config command.

| + +#### Example +Import a Release Bundle named "myExportedApp" and version 1.0.0 + + jf rbi ./myExportedApp.zip + + From dfd731e6af3d29cbb56f214d893d2425ac0acf0a Mon Sep 17 00:00:00 2001 From: Michael Sverdlov Date: Thu, 18 Apr 2024 14:40:48 +0300 Subject: [PATCH 06/57] Improve command descriptions, add usage and examples (#112) --- .github/workflows/tests.yml | 5 +- jfrog-applications/SUMMARY.md | 3 +- .../pull-request-scan-results.md | 10 +-- .../scan-bitbucket-server-pull-request.md | 2 +- .../scan-github-pull-request.md | 4 +- .../scan-gitlab-pull-request.md | 2 +- .../view-security-alerts-on-github.md | 2 +- .../build-integration.md | 87 +++++++++++++------ .../generic-files.md | 73 ++++++++++++++-- .../managing-configuration-entities.md | 9 ++ .../jfrog-cli/cli-for-jfrog-curation.md | 9 +- .../cli-for-jfrog-security/README.md | 27 +++++- .../cli-for-jfrog-security/authentication.md | 55 ++++++++++-- .../curl-integration.md | 31 +++++++ .../download-updates-for-xrays-database.md | 55 +++++++++++- .../scan-your-source-code.md | 35 +------- .../jfrog-platform-configuration.md | 1 + 17 files changed, 317 insertions(+), 93 deletions(-) create mode 100644 jfrog-applications/jfrog-cli/cli-for-jfrog-security/curl-integration.md diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 16427c8..034e4c8 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -10,12 +10,13 @@ jobs: - uses: actions/checkout@v4 - name: Install Go - uses: actions/setup-go@v3 + uses: actions/setup-go@v5 with: go-version: 1.21.x + cache: 'false' - name: Go Cache - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: ~/go/pkg/mod key: ubuntu-go-${{ hashFiles('**/go.sum') }} diff --git a/jfrog-applications/SUMMARY.md b/jfrog-applications/SUMMARY.md index d716699..af155f9 100644 --- a/jfrog-applications/SUMMARY.md +++ b/jfrog-applications/SUMMARY.md @@ -30,8 +30,9 @@ * [CLI for JFrog Security](jfrog-cli/cli-for-jfrog-security/README.md) * [Authentication](jfrog-cli/cli-for-jfrog-security/authentication.md) * [Scan your Source Code](jfrog-cli/cli-for-jfrog-security/scan-your-source-code.md) - * [Scan your Binaries](jfrog-cli/cli-for-jfrog-security/scan-your-binaries.md) + * [cUrl Integration](jfrog-cli/cli-for-jfrog-security/curl-integration.md) * [Scan Published Builds](jfrog-cli/cli-for-jfrog-security/scan-published-builds.md) + * [Scan your Binaries](jfrog-cli/cli-for-jfrog-security/scan-your-binaries.md) * [Download Updates for Xray's Database](jfrog-cli/cli-for-jfrog-security/download-updates-for-xrays-database.md) * [CLI for JFrog Curation](jfrog-cli/cli-for-jfrog-curation.md) * [CLI for JFrog Distribution](jfrog-cli/cli-for-jfrog-distribution.md) diff --git a/jfrog-applications/jfrog-applications/frogbot/scan-pull-requests/pull-request-scan-results.md b/jfrog-applications/jfrog-applications/frogbot/scan-pull-requests/pull-request-scan-results.md index 4f855a8..f250e5b 100644 --- a/jfrog-applications/jfrog-applications/frogbot/scan-pull-requests/pull-request-scan-results.md +++ b/jfrog-applications/jfrog-applications/frogbot/scan-pull-requests/pull-request-scan-results.md @@ -20,11 +20,11 @@ If new vulnerabilities are found, Frogbot adds them as a comment on the pull req **VULNERABLE DEPENDENCIES** -| SEVERITY | CONTEXTUAL ANALYSIS | DIRECT DEPENDENCIES | IMPACTED DEPENDENCY | FIXED VERSIONS | -| :---------------------------------------------------------------------------------------------------------------------------------: | :-----------------: | :-----------------: | :-----------------: | :-----------------------: | -|


Critical

| Not Applicable | minimist:1.2.5 | minimist:1.2.5 |

[0.2.4]
[1.2.6]

| -|


High

| Applicable | protobufjs:6.11.2 | protobufjs:6.11.2 | \[6.11.3] | -|


High

| Not Applicable | lodash:4.17.19 | lodash:4.17.19 | \[4.17.21] | +| SEVERITY | CONTEXTUAL ANALYSIS | DIRECT DEPENDENCIES | IMPACTED DEPENDENCY | FIXED VERSIONS | +|:-----------------------------------------------------------------------------------------------------------------------------------:|:-------------------:|:-------------------:|:-------------------:|:-------------------------:| +|


Critical

| Not Applicable | minimist:1.2.5 | minimist:1.2.5 |

[0.2.4]
[1.2.6]

| +|


High

| Applicable | protobufjs:6.11.2 | protobufjs:6.11.2 | \[6.11.3] | +|


High

| Not Applicable | lodash:4.17.19 | lodash:4.17.19 | \[4.17.21] | **Vulnerability Contextual Analysis** diff --git a/jfrog-applications/jfrog-applications/frogbot/scan-pull-requests/scan-bitbucket-server-pull-request.md b/jfrog-applications/jfrog-applications/frogbot/scan-pull-requests/scan-bitbucket-server-pull-request.md index 537b4d2..9f7e52f 100644 --- a/jfrog-applications/jfrog-applications/frogbot/scan-pull-requests/scan-bitbucket-server-pull-request.md +++ b/jfrog-applications/jfrog-applications/frogbot/scan-pull-requests/scan-bitbucket-server-pull-request.md @@ -2,7 +2,7 @@ After you create a new pull request, Frogbot will automatically scan it. -_**NOTE:**_ The scan output will include only new vulnerabilities added by the pull request. Vulnerabilities that aren't new, and existed in the code before the pull request was created, will not be included in the report. In order to include all of the vulnerabilities in the report, including older ones that weren't added by this PR, use the includeAllVulnerabilities parameter in the frogbot-config.yml file. +_**NOTE:**_ The scan output will include only new vulnerabilities added by the pull request. Vulnerabilities that aren't new, and existed in the code before the pull request was created, will not be included in the report. In order to include all the vulnerabilities in the report, including older ones that weren't added by this PR, use the includeAllVulnerabilities parameter in the frogbot-config.yml file. The Frogbot scan on Bitbucket Server workflow: diff --git a/jfrog-applications/jfrog-applications/frogbot/scan-pull-requests/scan-github-pull-request.md b/jfrog-applications/jfrog-applications/frogbot/scan-pull-requests/scan-github-pull-request.md index 09ba8df..88d34d8 100644 --- a/jfrog-applications/jfrog-applications/frogbot/scan-pull-requests/scan-github-pull-request.md +++ b/jfrog-applications/jfrog-applications/frogbot/scan-pull-requests/scan-github-pull-request.md @@ -1,8 +1,8 @@ -# Scan Github Pull Request +# Scan GitHub Pull Request After you create a new pull request, the maintainer of the Git repository can trigger Frogbot to scan the pull request from the pull request UI. -_**NOTE:**_ The scan output will include only new vulnerabilities added by the pull request. Vulnerabilities that aren't new, and existed in the code before the pull request was created, will not be included in the report. In order to include all of the vulnerabilities in the report, including older ones that weren't added by this PR, use the includeAllVulnerabilities parameter in the frogbot-config.yml file. +_**NOTE:**_ The scan output will include only new vulnerabilities added by the pull request. Vulnerabilities that aren't new, and existed in the code before the pull request was created, will not be included in the report. In order to include all the vulnerabilities in the report, including older ones that weren't added by this PR, use the includeAllVulnerabilities parameter in the frogbot-config.yml file. The Frogbot GitHub scan workflow is: diff --git a/jfrog-applications/jfrog-applications/frogbot/scan-pull-requests/scan-gitlab-pull-request.md b/jfrog-applications/jfrog-applications/frogbot/scan-pull-requests/scan-gitlab-pull-request.md index 798bdfb..1ff2c24 100644 --- a/jfrog-applications/jfrog-applications/frogbot/scan-pull-requests/scan-gitlab-pull-request.md +++ b/jfrog-applications/jfrog-applications/frogbot/scan-pull-requests/scan-gitlab-pull-request.md @@ -2,7 +2,7 @@ After you create a new merge request, the maintainer of the Git repository can trigger Frogbot to scan the merge request from the merge request UI. -_**NOTE:**_ The scan output will include only new vulnerabilities added by the merge request. Vulnerabilities that aren't new, and existed in the code before the merge request was created, will not be included in the report. In order to include all of the vulnerabilities in the report, including older ones that weren't added by this merge request, use the includeAllVulnerabilities parameter in the frogbot-config.yml file. +_**NOTE:**_ The scan output will include only new vulnerabilities added by the merge request. Vulnerabilities that aren't new, and existed in the code before the merge request was created, will not be included in the report. In order to include all the vulnerabilities in the report, including older ones that weren't added by this merge request, use the includeAllVulnerabilities parameter in the frogbot-config.yml file. The Frogbot GitLab flow is as follows: diff --git a/jfrog-applications/jfrog-applications/frogbot/scan-repositories/view-security-alerts-on-github.md b/jfrog-applications/jfrog-applications/frogbot/scan-repositories/view-security-alerts-on-github.md index 115597f..83f7f67 100644 --- a/jfrog-applications/jfrog-applications/frogbot/scan-repositories/view-security-alerts-on-github.md +++ b/jfrog-applications/jfrog-applications/frogbot/scan-repositories/view-security-alerts-on-github.md @@ -1,4 +1,4 @@ -# View Security Alerts on Github +# View Security Alerts on GitHub For GitHub repositories, issues that are found during Frogbot's periodic scans are also added to the [Security Alerts](https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/managing-code-scanning-alerts-for-your-repository) view in the UI. diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/build-integration.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/build-integration.md index 4c81a7c..34deb9a 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/build-integration.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/build-integration.md @@ -38,6 +38,10 @@ This command is used to collect environment variables and attach them to a build Environment variables are collected using the `build-collect-env` (`bce`) command. +#### Usage + +```jf rt bce ``` + #### Commands Params The following table lists the command arguments and flags: @@ -46,11 +50,11 @@ The following table lists the command arguments and flags: |-------------------|-----------------------------------------| | Command name | rt build-collect-env | | Abbreviation | rt bce | -| Command options | | -| --project |

[Optional]
JFrog project key.

| | Command arguments | The command accepts two arguments. | | Build name | Build name. | | Build number | Build number. | +| Command options | | +| --project |

[Optional]
JFrog project key.

| #### Examples ##### Example 1 @@ -73,6 +77,10 @@ jf rt bce frogger-build 17 The `build-add-git` (bag) command collects the Git revision and URL from the local .git directory and adds it to the build-info. It can also collect the list of tracked project issues (for example, issues stored in JIRA or other bug tracking systems) and add them to the build-info. The issues are collected by reading the git commit messages from the local git log. Each commit message is matched against a pre-configured regular expression, which retrieves the issue ID and issue summary. The information required for collecting the issues is retrieved from a yaml configuration file provided to the command. +#### Usage + +```jf rt bag [command options] [Path To .git]``` + #### Commands Params The following table lists the command arguments and flags: @@ -81,14 +89,14 @@ The following table lists the command arguments and flags: |-------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command name | rt build-add-git | | Abbreviation | rt bag | -| Command options | | -| --config |

[Optional]
Path to a yaml configuration file, used for collecting tracked project issues and adding them to the build-info.

| -| --server-id |

[Optional]
Server ID configured using the 'jf config' command. This is the server to which the build-info will be later published, using the jf rt build-publish command. This option, if provided, overrides the serverID value in this command's yaml configuration. If both values are not provided, the default server, configured by the 'jf config' command, is used.

| -| --project |

[Optional]
JFrog project key.

| | Command arguments | The command accepts three arguments. | | Build name | Build name. | | Build number | Build number. | | .git path | Optional - Path to a directory containing the .git directory. If not specific, the .git directory is assumed to be in the current directory or in one of the parent directories. | +| Command options | | +| --config |

[Optional]
Path to a yaml configuration file, used for collecting tracked project issues and adding them to the build-info.

| +| --server-id |

[Optional]
Server ID configured using the 'jf config' command. This is the server to which the build-info will be later published, using the jf rt build-publish command. This option, if provided, overrides the serverID value in this command's yaml configuration. If both values are not provided, the default server, configured by the 'jf config' command, is used.

| +| --project |

[Optional]
JFrog project key.

| #### Configuration file properties @@ -136,12 +144,21 @@ The download command, as well as other commands which download dependencies from By default, the command collects the files from the local file system. If you'd like the files to be collected from Artifactory however, add the **--from-rt** option to the command. +#### Usage + +```jf rt bad [command options] ``` +```jf rt bad --spec= [command options] ``` + #### Commands Params | | | |-------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command name | rt build-add-dependencies | | Abbreviation | rt bad | +| Command arguments | The command takes three arguments. | +| Build name | The build name to add the dependencies to | +| Build number | The build number to add the dependencies to | +| Pattern | Specifies the local file system path to dependencies which should be added to the build info. You can specify multiple dependencies by using wildcards or a regular expression as designated by the --regexp command option. If you have specified that you are using regular expressions, then the first one used in the argument must be enclosed in parenthesis. | | Command options |

When using the * or ; characters in the command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| | --from-rt |

[Default: false]
Set to true to search the files in Artifactory, rather than on the local file system. The --regexp option is not supported when --from-rt is set to true.

| | --server-id |

[Optional]
Server ID configured using the config command.

| @@ -152,10 +169,6 @@ By default, the command collects the files from the local file system. If you'd | --dry-run |

[Default: false]
Set to true to only get a summery of the dependencies that will be added to the build info.

| | --module |

[Optional]
Optional module name in the build-info for adding the dependency.

| | --exclusions | A list of Semicolon-separated exclude patterns. Allows using wildcards or a regular expression according to the value of the 'regexp' option. | -| Command arguments | The command takes three arguments. | -| Build name | The build name to add the dependencies to | -| Build number | The build number to add the dependencies to | -| Pattern | Specifies the local file system path to dependencies which should be added to the build info. You can specify multiple dependencies by using wildcards or a regular expression as designated by the --regexp command option. If you have specified that you are using regular expressions, then the first one used in the argument must be enclosed in parenthesis. | #### Examples ##### Example 1 @@ -187,9 +200,10 @@ jf rt bad my-build-name 7 "path/to/build/dependencies/dir/" --module m1 This command is used to publish build info to Artifactory. To publish the accumulated build-info for a build to Artifactory, use the **build-publish** command. For example, the following command publishes all the build-info collected for build **my-build-name** with build number 18: -``` -jf rt bp my-build-name 18 -``` +### Usage + +```jf rt bp [command options] ``` + ### Commands Params @@ -197,6 +211,9 @@ jf rt bp my-build-name 18 |-------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command name | rt build-publish | | Abbreviation | rt bp | +| Command arguments | The command accepts two arguments. | +| Build name | Build name to be published. | +| Build number | Build number to be published. | | Command options | | | --server-id |

[Optional]
Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| | --project |

[Optional]
JFrog project key.

| @@ -204,10 +221,7 @@ jf rt bp my-build-name 18 | --env-include |

[Default: *]
List of patterns in the form of "value1;value2;..." Only environment variables that match those patterns will be included in the build info.

| | --env-exclude |

[Default: *password*;*secret*;*key*]
List of case insensitive patterns in the form of "value1;value2;..." environment variables match those patterns will be excluded.

| | --dry-run |

[Default: false]
Set to true to disable communication with Artifactory.

| -| --insecure-tls |

[Default: false]
Set to true to skip TLS certificates verification.

| -| Command arguments | The command accepts two arguments. | -| Build name | Build name to be published. | -| Build number | Build number to be published. | +| --insecure-tls |

[Default: false]
Set to true to skip TLS certificates verification.

| | ### Example @@ -253,16 +267,23 @@ The way to do this is by using the **build-append** command. Running this comman Now, when downloading the artifacts of the "master" build, you'll actually be downloading the artifacts of all of its referenced builds. The examples below demonstrates this, +### Usage + +```jf rt ba ``` + +### Commands Params + | | | |------------------------|-----------------------------------------------------------| | Command name | rt build-append | | Abbreviation | rt ba | -| Command options | This command has no options. | | Command arguments | The command accepts four arguments. | | Build name | The current (not yet published) build name. | | Build number | The current (not yet published) build number, | | build name to append | The published build name to append to the current build | | build number to append | The published build number to append to the current build | +| Command options | This command has no options. | + **Requirements** @@ -296,12 +317,20 @@ jf rt download --build aggregating-build/10 This command is used to [promote build](https://jfrog.com/knowledge-base/how-does-build-promotion-work/) in Artifactory. +### Usage + +```jf rt bpr [command options] ``` + ### Commands Params | | | |------------------------|---------------------------------------------------------------------------------------------------------------------------------------------| | Command name | rt build-promote | | Abbreviation | rt bpr | +| Command arguments | The command accepts three arguments. | +| Build name | Build name to be promoted. | +| Build number | Build number to be promoted. | +| Target repository | Build promotion target repository. | | Command options | | | --server-id |

[Optional]
Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| | --project |

[Optional]
JFrog project key.

| @@ -312,11 +341,7 @@ This command is used to [promote build](https://jfrog.com/knowledge-base/how-doe | --copy |

[Default: false]
If set true, the build artifacts and dependencies are copied to the target repository, otherwise they are moved.

| | --props |

[Optional]
List of properties in the form of "key1=value1;key2=value2,...". to attach to the build artifacts.

| | --dry-run |

[Default: false]
If true, promotion is only simulated. The build is not promoted.

| -| --insecure-tls |

[Default: false]
Set to true to skip TLS certificates verification.

| -| Command arguments | The command accepts three arguments. | -| Build name | Build name to be promoted. | -| Build number | Build number to be promoted. | -| Target repository | Build promotion target repository. | +| --insecure-tls |

[Default: false]
Set to true to skip TLS certificates verification.

| | ### Example @@ -330,6 +355,10 @@ jf rt bpr my-build-name 18 target-repository Build-info is accumulated by the CLI according to the commands you apply until you publish the build-info to Artifactory. If, for any reason, you wish to "reset" the build-info and cleanup (i.e. delete) any information accumulated so far, you can use the `build-clean` (`bc`) command. +### Usage + +```jf rt bc ``` + ### Commands Params The following table lists the command arguments and flags: @@ -338,10 +367,10 @@ The following table lists the command arguments and flags: |-------------------|------------------------------------| | Command name | rt build-clean | | Abbreviation | rt bc | -| Command options | The command has no options. | | Command arguments | The command accepts two arguments. | | Build name | Build name. | | Build number | Build number. | +| Command options | The command has no options. | ### Example @@ -356,6 +385,10 @@ jf rt bc my-build-name 18 This command is used to discard builds previously published to Artifactory using the [build-publish](https://docs.jfrog-applications.jfrog.io/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory#publishing-build-info) command. +### Usage + +```jf rt bdi [command options] ``` + ### Commands Params The following table lists the command arguments and flags: @@ -364,6 +397,8 @@ The following table lists the command arguments and flags: |--------------------|------------------------------------------------------------------------------------------------------------------------------------------| | Command name | rt build-discard | | Abbreviation | rt bdi | +| Command arguments | The command accepts one argument. | +| Build name | Build name. | | Command options | | | --server-id |

[Optional]
Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| | --max-days |

[Optional]
The maximum number of days to keep builds in Artifactory.

| @@ -371,9 +406,7 @@ The following table lists the command arguments and flags: | --exclude-builds |

[Optional]
List of build numbers in the form of "value1,value2,...", that should not be removed from Artifactory.

| | --delete-artifacts |

[Default: false]
If set to true, automatically removes build artifacts stored in Artifactory.

| | --async |

[Default: false]
If set to true, build discard will run asynchronously and will not wait for response.

| -| Command arguments | The command accepts one argument. | -| Build name | Build name. | - + | ### Examples #### Example 1 diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/generic-files.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/generic-files.md index c885e15..cbca0a0 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/generic-files.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/generic-files.md @@ -470,7 +470,7 @@ This command is used for setting properties on existing files in Artifactory. | Abbreviation | rt sp | | Command arguments |

The command takes two arguments, files pattern and files properties.

In case the --spec option is used, the commands accept no arguments.

| | Files pattern | Files that match the pattern will be set with the specified properties. | -| Files properties | The list of properties, in the form of key1=value1;key2=value2,..., to be set on the matching artifacts. | +| Files properties | A list of Semicolon-separated key-values in the form of key1=value1;key2=value2,..., to be set on the matching files. | | Command options |

When using the * or ; characters in the command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| | --server-id |

[Optional]
Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| | --spec |

[Optional]
Path to a file spec. For more details, please refer to Using File Specs.

| @@ -510,13 +510,37 @@ The command will set the property "a" with "1" value and the property "b" with t jf rt sp "a=1;b=2,3" --spec my-spec ``` +#### Example 3 + +Set the properties on all the jar files in the maven-local repository. The command will set the property "version" with "1.0.0" value and the property "release" with "stable" value. + +``` +jf rt sp "maven-local/*.jar" "version=1.0.0;release=stable" +``` + +#### Example 4 + +The command will set the property "environment" with "production" value and the property "team" with "devops" value on all files found by the File Spec prod-spec. + +``` +jf rt sp "environment=production;team=devops" --spec prod-spec +``` + +#### Example 5 + +Set the properties on all the tar.gz files in the devops-local repository. The command will set the property "build" with "102" value and the property "branch" with "main" value. + +``` +jf rt sp "devops-local/*.tar.gz" "build=102;branch=main" +``` + ## Deleting Properties from Files This command is used for deleting properties from existing files in Artifactory. ### Usage -```jf rt delp [command options] ``` +```jf rt delp [command options] ``` ```jf rt delp --spec= [command options]``` ### Commands Params @@ -526,8 +550,8 @@ This command is used for deleting properties from existing files in Artifactory. | Command name | rt delete-props | | Abbreviation | rt delp | | Command arguments |

The command takes two arguments, files pattern and files properties.

In case the --spec option is used, the commands accept no arguments.

| -| Files pattern | The properties will be deleted from files that match the pattern. | -| Files properties | The list of properties, in the form of key1,key2,..., to be deleted from the matching artifacts. | +| Files pattern | Specifies the files pattern in the following format: `[repository name]/[repository path].` You can use wildcards to specify multiple repositories and files. | +| Properties list | A comma-separated list of properties, in the form of key1,key2,..., to be deleted from the matching files. | | Command options |

When using the * or ; characters in the command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| | --server-id |

[Optional]
Artifactory server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| | --props |

[Optional]
List of properties in the form of "key1=value1;key2=value2,...". Only files with these properties are affected.

| @@ -547,10 +571,45 @@ This command is used for deleting properties from existing files in Artifactory. | --retries |

[Default: 3]
Number of HTTP retry attempts.

| | --retry-wait-time |

[Default: 0s]
Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds.retry-wait-time

| -### Example -Delete the "status" and "phase" properties from all the zip files in the generic-local repository. +### Examples + +#### Example 1 +Remove the properties 'version' and 'release' from all the jar files in the maven-local repository. + +``` +jf rt delp "maven-local/*.jar" "version,release" ``` -jf rt delp "generic-local/*.zip" "status,phase" + +#### Example 2 + +Delete the properties 'build' and 'branch' from all tar.gz files in the devops-local repo. + +``` +jf rt delp "devops-local/*.tar.gz" "build,branch" +``` + +#### Example 3 + +Remove the properties 'status', 'phase' and 'stage' from all deb files that start with DEV in the debian-repository. + +``` +jf rt delp "debian-repository/DEV*.deb" "status,phase,stage" +``` + +#### Example 4 + +Delete the 'environment' property from '/tests/local/block.rpm' in the centos-repo. + +``` +jf rt delp "centos-repo/tests/local/block.rpm" "environment" +``` + +#### Example 5 + +Remove the properties 'component', 'layer' and 'level' from files in the docker-hub repository. + ``` +jf rt delp "docker-hub/*" "component,layer,level" +``` \ No newline at end of file diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/managing-configuration-entities.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/managing-configuration-entities.md index 5dc79bd..ecc01a8 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/managing-configuration-entities.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/managing-configuration-entities.md @@ -373,6 +373,15 @@ This command creates a configuration template file, which will be used as an arg These commands create/update a permission target. The commands accept as an argument a configuration template, which should be created by the **jf rt permission-target-template** command beforehand. The template also supports variables, which can be replaced with values, provided when it is used. +| | | +|-------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | permission-target-create / permission-target-update | +| Abbreviation | rt ptc / rt ptu | +| Command options | | +| --server-id |

[Optional]
Artifactory server ID configured using the config command.

| +| --vars |

[Optional]
List of variables in the form of "key1=value1;key2=value2;..." to be replaced in the template. In the template, the variables should be used as follows: ${key1}.

| +| Command arguments | | +| template path | Specifies the local file system path for the template file to be used for the permission target creation or update. The template can be created using the "jf rt ptt" command. | | | | |-------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command-name | permission-target-create / permission-target-update | diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-curation.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-curation.md index 2eab522..f88293a 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-curation.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-curation.md @@ -36,7 +36,7 @@ Before running the command, do the following: #### Commands Params | | | -| ------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | +|---------------------|------------------------------------------------------------------------------------------------------------------------------------| | **Command name** | curation-audit | | **Abbreviation** | ca | | **Command options** | | @@ -44,9 +44,10 @@ Before running the command, do the following: | --working-dirs |

[Optional]
A comma separated list of relative working directories, to determine the audit targets locations.

| | --threads |

[Default: 10]
The number of parallel threads used to determine the curation status for each package in the project tree.

| + #### Example 1 -Audit the project in the current directory. Displays all known packages that were blocked by Curation Policies. +Curation-Audit the project in the current directory. Displays all known packages that were blocked by Curation Policies. ``` jf curation-audit @@ -54,7 +55,7 @@ jf curation-audit #### Example 2 -Audit the projects according to the specific paths defined in the "working-dirs" option. Displays all known packages that were blocked by Curation Policies for all projects. The data is displayed in separate tables. +Curation-Audit the projects according to the specific paths defined in the "working-dirs" option. Displays all known packages that were blocked by Curation Policies for all projects. The data is displayed in separate tables. ``` jf curation-audit --working-dirs="/path/to/project/npm_project1,/path/to/project/npm_project2" @@ -62,7 +63,7 @@ jf curation-audit --working-dirs="/path/to/project/npm_project1,/path/to/project #### Example 3 -Audit the project in the current directory using 5 threads to check the packages Curation status in parallel. Displays all known packages blocked by Curation Policies. +Curation-Audit the project in the current directory using 5 threads to check the packages Curation status in parallel. Displays all known packages blocked by Curation Policies. ``` jf curation-audit --threads=5 diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/README.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/README.md index 210fd4e..08b46ec 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/README.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/README.md @@ -8,7 +8,32 @@ When used with Xray, JFrog CLI offers several means of authentication: JFrog CLI To authenticate yourself using your Xray login credentials, either configure your credentials once using the\_jf c add\_command or provide the following option to each command. -
Command optionDescription
--urlJFrog Xray API endpoint URL. It usually ends with /xray
--userJFrog username
--passwordJFrog password
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Command optionDescription
--urlJFrog Xray API endpoint URL. It usually ends with /xray
--userJFrog username
--passwordJFrog password
#### Authenticating with an Access Token diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/authentication.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/authentication.md index d798663..8a1a3e7 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/authentication.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/authentication.md @@ -1,18 +1,59 @@ # Authentication -When used with Xray, JFrog CLI offers several means of authentication: JFrog CLI does not support accessing Xray without authentication. +When used with Xray, JFrog CLI offers several means of authentication: JFrog CLI does not support accessing Xray without +authentication. #### Authenticating with Username and Password -To authenticate yourself using your Xray login credentials, either configure your credentials once using the _**jf c add**_ command or provide the following option to each command. - -
Command OptionDescription
--urlJFrog Xray API endpoint URL. It usually ends with /xray
--userJFrog username
--passwordJFrog password
+To authenticate yourself using your Xray login credentials, either configure your credentials once using the +_**jf c add**_ command or provide the following option to each command. + + + + + + + + + + + + + + + + + + + + + + +
Command OptionDescription
--urlJFrog Xray API endpoint URL. It usually ends with /xray
--userJFrog username
--passwordJFrog password
#### Authenticating with an Access Token -To authenticate yourself using an Xray Access Token, either configure your Access Token once using the _**jf c add**_ command or provide the following option to each command. - -
Command OptionDescription
--urlJFrog Xray API endpoint URL. It usually ends with /xray
--access-tokenJFrog access token
+To authenticate yourself using an Xray Access Token, either configure your Access Token once using the _**jf c add**_ +command or provide the following option to each command. + + + + + + + + + + + + + + + + + + +
Command OptionDescription
--urlJFrog Xray API endpoint URL. It usually ends with /xray
--access-tokenJFrog access token
*** diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/curl-integration.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/curl-integration.md new file mode 100644 index 0000000..7d4f876 --- /dev/null +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/curl-integration.md @@ -0,0 +1,31 @@ +# cUrl Integration +### Running cUrl + +Execute a cUrl command, using the configured Xray details. The command expects the cUrl client to be included in the PATH. + +#### Commands Params + +| | | +|--------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command name | xr curl | +| Abbreviation | xr cl | +| Command options | | +| --server-id |

[Optional]
Server ID configured using the jf c add command. If not specified, the default configured server is used.

| +| Command arguments | | +| cUrl arguments and flags |

The same list of arguments and flags passed to cUrl, except for the following changes:

1. The full Xray URL should not be passed. Instead, the REST endpoint URI should be sent.
2. The login credentials should not be passed. Instead, the --server-id should be used.

| + +#### Example 1 + +Execute the cUrl client, to send a GET request to the /api/system/version endpoint to the default configured Xray server. + +``` +jf xr curl -XGET /api/v1/system/version +``` + +#### Example 2 + +Execute the cUrl client, to send a GET request to the /api/v1/system/version endpoint to the configured my-xr-server server ID. + +``` +jf rt curl -XGET /api/v1/system/version --server-id my-xr-server +``` diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/download-updates-for-xrays-database.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/download-updates-for-xrays-database.md index 73f5515..2fffaf3 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/download-updates-for-xrays-database.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/download-updates-for-xrays-database.md @@ -2,4 +2,57 @@ The offline-update command downloads updates to Xray's vulnerabilities database. The Xray UI allows building the command structure for you. -
Command namexr offline-update
Abbreviationxr ou
Command options
--license-id[Mandatory]
Xray license ID.
--from[Optional]
From update date in YYYY-MM-DD format.
--to[Optional]
To update date in YYYY-MM-DD format.
--version[Optional]
Xray API version.
--target[Default: ./]
Path for downloaded update files.
--dbsyncv3[Default: false]
Set to true to use Xray DBSync V3.
--periodic[Default: false]
Set to true to get the Xray DBSync V3 Periodic Package (Use with dbsyncv3 flag).
Command argumentsThe command accepts no arguments.
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Command namexr offline-update
Abbreviationxr ou
Command options
--license-id[Mandatory]
Xray license ID.
--from[Optional]
From update date in YYYY-MM-DD format.
--to[Optional]
To update date in YYYY-MM-DD format.
--version[Optional]
Xray API version.
--target[Default: ./]
Path for downloaded update files.
--dbsyncv3[Default: false]
Set to true to use Xray DBSync V3.
--periodic[Default: false]
Set to true to get the Xray DBSync V3 Periodic Package (Use with dbsyncv3 flag).
Command argumentsThe command accepts no arguments.
\ No newline at end of file diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-source-code.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-source-code.md index 808631d..5b9c321 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-source-code.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-source-code.md @@ -1,4 +1,4 @@ -# Scan your Source Code +# Audit your Source Code The _**jf audit**_ command allows scanning your source code dependencies to find security vulnerabilities and licenses violations, with the ability to scan against your Xray policies. The command builds a deep dependencies graph for your project, scans it with Xray, and displays the results. It uses the package manager used by the project to build the dependencies graph. Currently, the following package managers are supported. @@ -122,35 +122,4 @@ Audit the project in the current directory, excluding all files inside the _node ``` jf audit --exclusions "*node_modules*;*to_exclude" -``` - -### Running cUrl - -Execute a cUrl command, using the configured Xray details. The command expects the cUrl client to be included in the PATH. - -#### Commands Params - -| | | -|--------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command name | xr curl | -| Abbreviation | xr cl | -| Command options | | -| --server-id |

[Optional]
Server ID configured using the jf c add command. If not specified, the default configured server is used.

| -| Command arguments | | -| cUrl arguments and flags |

The same list of arguments and flags passed to cUrl, except for the following changes:

1. The full Xray URL should not be passed. Instead, the REST endpoint URI should be sent.
2. The login credentials should not be passed. Instead, the --server-id should be used.

| - -#### Example 1 - -Execute the cUrl client, to send a GET request to the /api/system/version endpoint to the default configured Xray server. - -``` -jf xr curl -XGET /api/v1/system/version -``` - -#### Example 2 - -Execute the cUrl client, to send a GET request to the /api/v1/system/version endpoint to the configured my-xr-server server ID. - -``` -jf rt curl -XGET /api/v1/system/version --server-id my-xr-server -``` +``` \ No newline at end of file diff --git a/jfrog-applications/jfrog-cli/get-started/configurations/jfrog-platform-configuration.md b/jfrog-applications/jfrog-cli/get-started/configurations/jfrog-platform-configuration.md index a91549c..a2e5aac 100644 --- a/jfrog-applications/jfrog-cli/get-started/configurations/jfrog-platform-configuration.md +++ b/jfrog-applications/jfrog-cli/get-started/configurations/jfrog-platform-configuration.md @@ -91,6 +91,7 @@ The _config remove_ command is used to remove JFrog Platform server configuratio | Command arguments | | | server ID | The server ID to remove. If no argument is sent, all configured servers are removed. | + ## Showing the Configured Servers The _config show_ command shows the stored configuration. You may show a specific server's configuration by sending its ID as an argument to the command. From 3b290e7485a4229e4fea9eff70b7bc90cc3dfd22 Mon Sep 17 00:00:00 2001 From: Michael Sverdlov Date: Thu, 18 Apr 2024 18:49:52 +0300 Subject: [PATCH 07/57] Improve docs (#113) --- jfrog-applications/SUMMARY.md | 1 - .../build-integration.md | 62 ++++----- .../environment-variables.md | 2 +- .../generic-files.md | 62 ++++----- .../managing-configuration-entities.md | 65 ++++----- .../release-lifecycle-management.md | 128 ++++++++++-------- .../jfrog-cli/cli-for-jfrog-distribution.md | 2 +- .../scan-your-source-code.md | 2 +- .../setting-up-a-ci-pipeline.md | 27 ---- 9 files changed, 166 insertions(+), 185 deletions(-) delete mode 100644 jfrog-applications/jfrog-cli/get-started/configurations/setting-up-a-ci-pipeline.md diff --git a/jfrog-applications/SUMMARY.md b/jfrog-applications/SUMMARY.md index af155f9..9ebec77 100644 --- a/jfrog-applications/SUMMARY.md +++ b/jfrog-applications/SUMMARY.md @@ -10,7 +10,6 @@ * [Usage](jfrog-cli/get-started/download-and-install/usage.md) * [Configurations](jfrog-cli/get-started/configurations/README.md) * [JFrog Platform Configuration](jfrog-cli/get-started/configurations/jfrog-platform-configuration.md) - * [Setting up a CI Pipeline](jfrog-cli/get-started/configurations/setting-up-a-ci-pipeline.md) * [Proxy Support](jfrog-cli/get-started/configurations/proxy-support.md) * [CLI for JFrog Artifactory](jfrog-cli/cli-for-jfrog-artifactory/README.md) * [Environment Variables](jfrog-cli/cli-for-jfrog-artifactory/environment-variables.md) diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/build-integration.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/build-integration.md index 34deb9a..678071b 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/build-integration.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/build-integration.md @@ -163,7 +163,7 @@ By default, the command collects the files from the local file system. If you'd | --from-rt |

[Default: false]
Set to true to search the files in Artifactory, rather than on the local file system. The --regexp option is not supported when --from-rt is set to true.

| | --server-id |

[Optional]
Server ID configured using the config command.

| | --spec |

[Optional]
Path to a File Spec.

| -| --spec-vars |

[Optional]
List of variables in the form of "key1=value1;key2=value2;..." to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| +| --spec-vars |

[Optional]
List of Semicolon-separated variables in the form of "key1=value1;key2=value2;..." to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| | --recursive |

[Default: true]
When false, artifacts inside sub-folders in Artifactory will not be affected.

| | --regexp |

[Optional: false]
[Default: false] Set to true to use a regular expression instead of wildcards expression to collect files to be added to the build info.This option is not supported when --from-rt is set to true.

| | --dry-run |

[Default: false]
Set to true to only get a summery of the dependencies that will be added to the build info.

| @@ -207,21 +207,21 @@ For example, the following command publishes all the build-info collected for bu ### Commands Params -| | | -|-------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command name | rt build-publish | -| Abbreviation | rt bp | -| Command arguments | The command accepts two arguments. | -| Build name | Build name to be published. | -| Build number | Build number to be published. | -| Command options | | -| --server-id |

[Optional]
Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| -| --project |

[Optional]
JFrog project key.

| -| --build-url |

[Optional]
Can be used for setting the CI server build URL in the build-info.

| -| --env-include |

[Default: *]
List of patterns in the form of "value1;value2;..." Only environment variables that match those patterns will be included in the build info.

| -| --env-exclude |

[Default: *password*;*secret*;*key*]
List of case insensitive patterns in the form of "value1;value2;..." environment variables match those patterns will be excluded.

| -| --dry-run |

[Default: false]
Set to true to disable communication with Artifactory.

| -| --insecure-tls |

[Default: false]
Set to true to skip TLS certificates verification.

| | +| | | +|-------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command name | rt build-publish | +| Abbreviation | rt bp | +| Command arguments | The command accepts two arguments. | +| Build name | Build name to be published. | +| Build number | Build number to be published. | +| Command options | | +| --server-id |

[Optional]
Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| +| --project |

[Optional]
JFrog project key.

| +| --build-url |

[Optional]
Can be used for setting the CI server build URL in the build-info.

| +| --env-include |

[Default: *]
List of Semicolon-separated patterns in the form of "value1;value2;..." Only environment variables that match those patterns will be included in the build info.

| +| --env-exclude |

[Default: *password*;*secret*;*key*]
List of Semicolon-separated case insensitive patterns in the form of "value1;value2;..." environment variables match those patterns will be excluded.

| +| --dry-run |

[Default: false]
Set to true to disable communication with Artifactory.

| +| --insecure-tls |

[Default: false]
Set to true to skip TLS certificates verification.

| | ### Example @@ -339,7 +339,7 @@ This command is used to [promote build](https://jfrog.com/knowledge-base/how-doe | --source-repo |

[Optional]
Build promotion source repository.

| | --include-dependencies |

[Default: false]
If set to true, the build dependencies are also promoted.

| | --copy |

[Default: false]
If set true, the build artifacts and dependencies are copied to the target repository, otherwise they are moved.

| -| --props |

[Optional]
List of properties in the form of "key1=value1;key2=value2,...". to attach to the build artifacts.

| +| --props |

[Optional]
List of Semicolon-separated properties in the form of "key1=value1;key2=value2,...". to attach to the build artifacts.

| | --dry-run |

[Default: false]
If true, promotion is only simulated. The build is not promoted.

| | --insecure-tls |

[Default: false]
Set to true to skip TLS certificates verification.

| | @@ -393,20 +393,20 @@ This command is used to discard builds previously published to Artifactory using The following table lists the command arguments and flags: -| | | -|--------------------|------------------------------------------------------------------------------------------------------------------------------------------| -| Command name | rt build-discard | -| Abbreviation | rt bdi | -| Command arguments | The command accepts one argument. | -| Build name | Build name. | -| Command options | | -| --server-id |

[Optional]
Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| -| --max-days |

[Optional]
The maximum number of days to keep builds in Artifactory.

| -| --max-builds |

[Optional]
The maximum number of builds to store in Artifactory.

| -| --exclude-builds |

[Optional]
List of build numbers in the form of "value1,value2,...", that should not be removed from Artifactory.

| -| --delete-artifacts |

[Default: false]
If set to true, automatically removes build artifacts stored in Artifactory.

| -| --async |

[Default: false]
If set to true, build discard will run asynchronously and will not wait for response.

| - | +| | | +|--------------------|---------------------------------------------------------------------------------------------------------------------------------------------| +| Command name | rt build-discard | +| Abbreviation | rt bdi | +| Command arguments | The command accepts one argument. | +| Build name | Build name. | +| Command options | | +| --server-id |

[Optional]
Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| +| --max-days |

[Optional]
The maximum number of days to keep builds in Artifactory.

| +| --max-builds |

[Optional]
The maximum number of builds to store in Artifactory.

| +| --exclude-builds |

[Optional]
List of comma-separated build numbers in the form of "build1,build2,...", that should not be removed from Artifactory.

| +| --delete-artifacts |

[Default: false]
If set to true, automatically removes build artifacts stored in Artifactory.

| +| --async |

[Default: false]
If set to true, build discard will run asynchronously and will not wait for response.

| + ### Examples #### Example 1 diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/environment-variables.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/environment-variables.md index cc8d133..17b68d9 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/environment-variables.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/environment-variables.md @@ -15,7 +15,7 @@ Some of the Artifactory commands make use of the following environment variable: | **JFROG\_CLI\_BUILD\_NUMBER** | Build number to be used by commands which expect a build number, unless sent as a command argument or option. | | **JFROG\_CLI\_BUILD\_PROJECT** | JFrog project key to be used by commands that expect build name and build number. Determines the project of the published build. | | **JFROG\_CLI\_BUILD\_URL** | Sets the CI server build URL in the build-info. The "jf rt build-publish" command uses the value of this environment variable unless the --build-url command option is sent. | -| **JFROG\_CLI\_ENV\_EXCLUDE** |

[Default: *password*;*secret*;*key*;*token*]
List of case insensitive patterns in the form of "value1;value2;...". Environment variables match those patterns will be excluded. This environment variable is used by the "jf rt build-publish" command, in case the --env-exclude command option is not sent.

| +| **JFROG\_CLI\_ENV\_EXCLUDE** |

[Default: *password*;*secret*;*key*;*token*]
List of Semicolon-separated case insensitive patterns in the form of "value1;value2;...". Environment variables match those patterns will be excluded. This environment variable is used by the "jf rt build-publish" command, in case the --env-exclude command option is not sent.

| | **JFROG\_CLI\_TRANSITIVE\_DOWNLOAD\_EXPERIMENTAL** |

[Default: false]
Used by the "jf rt download" command. Set to true to download artifacts also from remote repositories. This feature is experimental and available on Artifactory version 7.17.0 or higher.

| | **JFROG\_CLI\_UPLOAD\_EMPTY\_ARCHIVE** |

[Default: false]
Used by the "jf rt upload" command. Set to true if you'd like to upload an empty archive when '--archive' is set but all files were excluded by exclusions pattern.

| diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/generic-files.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/generic-files.md index cbca0a0..ef81d76 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/generic-files.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/generic-files.md @@ -22,7 +22,7 @@ This command is used to upload files to Artifactory. | --archive |

[Optional]
Set to "zip" to pack and deploy the files to Artifactory inside a ZIP archive. Currently, the only packaging format supported is zip.

| | --server-id |

[Optional]
Server ID configured using the jf c add command. If not specified, the default configured Artifactory server is used.

| | --spec |

[Optional]
Path to a file spec. For more details, please refer to Using File Specs.

| -| --spec-vars |

[Optional]
List of variables in the form of "key1=value1;key2=value2;..." to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| +| --spec-vars |

[Optional]
List of Semicolon-separated variables in the form of "key1=value1;key2=value2;..." to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| | --build-name |

[Optional]
Build name. For more details, please refer to Build Integration.

| | --build-number |

[Optional]
Build number. For more details, please refer to Build Integration.

| | --project |

[Optional]
JFrog project key.

| @@ -135,7 +135,7 @@ This command is used to download files from Artifactory. | --project |

[Optional]
JFrog project key.

| | --module |

[Optional]
Optional module name for the build-info.

| | --spec |

[Optional]
Path to a file spec. For more details, please refer to Using File Specs.

| -| --spec-vars |

[Optional]
List of variables in the form of "key1=value1;key2=value2;..." to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| +| --spec-vars |

[Optional]
List of Semicolon-separated variables in the form of "key1=value1;key2=value2;..." to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| | --props |

[Optional]
A list of Artifactory properties specified as "key=value" pairs separated by a semi-colon (for example, "key1=value1;key2=value2;key3=value3"). Only artifacts with all of the specified properties names and values will be downloaded.

| | --exclude-props |

[Optional]
A list of Artifactory properties specified as "key=value" pairs separated by a semi-colon (for example, "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be downloaded.

| | --build |

[Optional]
If specified, only artifacts of the specified build are matched. The property format is build-name/build-number. If you do not specify the build number, the artifacts are filtered by the latest build number.

| @@ -409,7 +409,7 @@ This command is used to search and display files in Artifactory. | --spec |

[Optional]
Path to a file spec. For more details, please refer to Using File Specs.

| | --count |

[Optional]
Set to true to display only the total of files or folders found.

| | --include-dirs |

[Default: false]
Set to true if you'd like to also apply the source path pattern for directories and not only for files

| -| --spec-vars |

[Optional]
List of variables in the form of "key1=value1;key2=value2;..." to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| +| --spec-vars |

[Optional]
List of Semicolon-separated variables in the form of "key1=value1;key2=value2;..." to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| | --props |

[Optional]
A list of Artifactory properties specified as "key=value" pairs separated by a semi-colon (for example, "key1=value1;key2=value2;key3=value3"). Only artifacts with these properties names and values will be returned.

| | --exclude-props |

[Optional]
A list of Artifactory properties specified as "key=value" pairs separated by a semi-colon (for example, "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be returned.

| | --build |

[Optional]
If specified, only artifacts of the specified build are matched. The property format is build-name/build-number. If you do not specify the build number, the artifacts are filtered by the latest build number.

| @@ -426,7 +426,7 @@ This command is used to search and display files in Artifactory. | --insecure-tls |

[Default: false]
Set to true to skip TLS certificates verification.

| | --retries |

[Default: 3]
Number of HTTP retry attempts.

| | --retry-wait-time |

[Default: 0s]
Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds.retry-wait-time

| -| --include |

[Optional]
List of fields in the form of "value1;value2;...".
Only the path and the fields that are specified will be returned. The fields must be part of the 'items' AQL domain. for the full supported items list check AQL documentation

| +| --include |

[Optional]
List of Semicolon-separated fields in the form of "value1;value2;...".
Only the path and the fields that are specified will be returned. The fields must be part of the 'items' AQL domain. for the full supported items list check AQL documentation

| ### Examples #### Example 1 @@ -474,8 +474,8 @@ This command is used for setting properties on existing files in Artifactory. | Command options |

When using the * or ; characters in the command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| | --server-id |

[Optional]
Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| | --spec |

[Optional]
Path to a file spec. For more details, please refer to Using File Specs.

| -| --spec-vars |

[Optional]
List of variables in the form of "key1=value1;key2=value2;..." to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| -| --props |

[Optional]
List of properties in the form of "key1=value1;key2=value2,...". Only files with these properties names and values are affected.

| +| --spec-vars |

[Optional]
List of Semicolon-separated variables in the form of "key1=value1;key2=value2;..." to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| +| --props |

[Optional]
List of Semicolon-separated properties in the form of "key1=value1;key2=value2,...". Only files with these properties names and values are affected.

| | --exclude-props |

[Optional]
A list of Artifactory properties specified as "key=value" pairs separated by a semi-colon (for example, "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be affected.

| | --recursive |

[Default: true]
When false, artifacts inside sub-folders in Artifactory will not be affected.

| | --build |

[Optional]
If specified, only artifacts of the specified build are matched. The property format is build-name/build-number. If you do not specify the build number, the artifacts are filtered by the latest build number.

| @@ -545,31 +545,31 @@ This command is used for deleting properties from existing files in Artifactory. ### Commands Params -| | | -|-------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command name | rt delete-props | -| Abbreviation | rt delp | -| Command arguments |

The command takes two arguments, files pattern and files properties.

In case the --spec option is used, the commands accept no arguments.

| -| Files pattern | Specifies the files pattern in the following format: `[repository name]/[repository path].` You can use wildcards to specify multiple repositories and files. | -| Properties list | A comma-separated list of properties, in the form of key1,key2,..., to be deleted from the matching files. | -| Command options |

When using the * or ; characters in the command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| -| --server-id |

[Optional]
Artifactory server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| -| --props |

[Optional]
List of properties in the form of "key1=value1;key2=value2,...". Only files with these properties are affected.

| -| --exclude-props |

[Optional]
A list of Artifactory properties specified as "key=value" pairs separated by a semi-colon (for example, "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be affected.

| -| --recursive |

[Default: true]
When false, artifacts inside sub-folders in Artifactory will not be affected.

| -| --build |

[Optional]
If specified, only artifacts of the specified build are matched. The property format is build-name/build-number. If you do not specify the build number, the artifacts are filtered by the latest build number.

| -| --bundle |

[Optional]
If specified, only artifacts of the specified bundle are matched. The value format is bundle-name/bundle-version.

| -| --include-dirs |

[Default: false]
When true, the properties will also be set on folders (and not just files) in Artifactory.

| -| --fail-no-op |

[Default: false]
Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| -| --exclusions | A list of Semicolon-separated exclude patterns. Allows using wildcards. | -| --sort-by |

[Optional]
A list of semicolon-separated fields to sort by. The fields must be part of the 'items' AQL domain. For more information read the AQL documentation

| -| --sort-order |

[Default: asc]
The order by which fields in the 'sort-by' option should be sorted. Accepts 'asc' or 'desc'.

| -| --limit |

[Optional]
The maximum number of items to fetch. Usually used with the 'sort-by' option.

| -| --offset |

[Optional]
The offset from which to fetch items (i.e. how many items should be skipped). Usually used with the 'sort-by' option.

| -| --archive-entries |

[Optional]
If specified, only archive artifacts containing entries matching this pattern are matched. You can use wildcards to specify multiple artifacts.

| -| --insecure-tls |

[Default: false]
Set to true to skip TLS certificates verification.

| -| --retries |

[Default: 3]
Number of HTTP retry attempts.

| -| --retry-wait-time |

[Default: 0s]
Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds.retry-wait-time

| +| | | +|-------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command name | rt delete-props | +| Abbreviation | rt delp | +| Command arguments |

The command takes two arguments, files pattern and properties list.

In case the --spec option is used, the commands accept no arguments.

| +| Files pattern | Specifies the files pattern in the following format: `[repository name]/[repository path].` You can use wildcards to specify multiple repositories and files. | +| Properties list | A comma-separated list of properties, in the form of key1,key2,..., to be deleted from the matching files. | +| Command options |

When using the * or ; characters in the command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| +| --server-id |

[Optional]
Artifactory server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| +| --props |

[Optional]
List of Semicolon-separated properties in the form of "key1=value1;key2=value2,...". Only files with these properties are affected.

| +| --exclude-props |

[Optional]
List of Semicolon-separated Artifactory properties specified as "key=value" (for example, "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be affected.

| +| --recursive |

[Default: true]
When false, artifacts inside sub-folders in Artifactory will not be affected.

| +| --build |

[Optional]
If specified, only artifacts of the specified build are matched. The property format is build-name/build-number. If you do not specify the build number, the artifacts are filtered by the latest build number.

| +| --bundle |

[Optional]
If specified, only artifacts of the specified bundle are matched. The value format is bundle-name/bundle-version.

| +| --include-dirs |

[Default: false]
When true, the properties will also be set on folders (and not just files) in Artifactory.

| +| --fail-no-op |

[Default: false]
Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| +| --exclusions | List of Semicolon-separated exclude patterns. Allows using wildcards. | +| --sort-by |

[Optional]
A list of semicolon-separated fields to sort by. The fields must be part of the 'items' AQL domain. For more information read the AQL documentation

| +| --sort-order |

[Default: asc]
The order by which fields in the 'sort-by' option should be sorted. Accepts 'asc' or 'desc'.

| +| --limit |

[Optional]
The maximum number of items to fetch. Usually used with the 'sort-by' option.

| +| --offset |

[Optional]
The offset from which to fetch items (i.e. how many items should be skipped). Usually used with the 'sort-by' option.

| +| --archive-entries |

[Optional]
If specified, only archive artifacts containing entries matching this pattern are matched. You can use wildcards to specify multiple artifacts.

| +| --insecure-tls |

[Default: false]
Set to true to skip TLS certificates verification.

| +| --retries |

[Default: 3]
Number of HTTP retry attempts.

| +| --retry-wait-time |

[Default: 0s]
Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds.retry-wait-time

| ### Examples diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/managing-configuration-entities.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/managing-configuration-entities.md index ecc01a8..23d25ac 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/managing-configuration-entities.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/managing-configuration-entities.md @@ -198,15 +198,15 @@ These two commands create a new repository and updates an existing a repository. #### Commands Params -| | | -|-------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command-name | rt repo-create / rt repo-update | -| Abbreviation | rt rc / rt ru | -| Command options | | -| --server-id |

[Optional]
Artifactory server ID configured using the config command.

| -| --vars |

[Optional]
List of variables in the form of "key1=value1;key2=value2;..." to be replaced in the template. In the template, the variables should be used as follows: ${key1}.

| -| Command arguments | | -| template path | Specifies the local file system path for the template file to be used for the repository creation. The template can be created using the "jf rt rpt" command. | +| | | +|-------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | rt repo-create / rt repo-update | +| Abbreviation | rt rc / rt ru | +| Command options | | +| --server-id |

[Optional]
Artifactory server ID configured using the config command.

| +| --vars |

[Optional]
List of Semicolon-separated variables in the form of "key1=value1;key2=value2;..." to be replaced in the template. In the template, the variables should be used as follows: ${key1}.

| +| Command arguments | | +| template path | Specifies the local file system path for the template file to be used for the repository creation. The template can be created using the "jf rt rpt" command. | #### Examples ##### Example 1 @@ -302,15 +302,15 @@ This command creates a new replication job for a repository. The command accepts #### Commands Params -| | | -|-------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command-name | replication-create | -| Abbreviation | rt rplc | -| Command options | | -| --server-id |

[Optional]
Artifactory server ID configured using the config command.

| -| --vars |

[Optional]
List of variables in the form of "key1=value1;key2=value2;..." to be replaced in the template. In the template, the variables should be used as follows: ${key1}.

| -| Command arguments | | -| template path | Specifies the local file system path for the template file to be used for the replication job creation. The template can be created using the "jf rt rplt" command. | +| | | +|-------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | replication-create | +| Abbreviation | rt rplc | +| Command options | | +| --server-id |

[Optional]
Artifactory server ID configured using the config command.

| +| --vars |

[Optional]
List of Semicolon-separated variables in the form of "key1=value1;key2=value2;..." to be replaced in the template. In the template, the variables should be used as follows: ${key1}.

| +| Command arguments | | +| template path | Specifies the local file system path for the template file to be used for the replication job creation. The template can be created using the "jf rt rplt" command. | #### Examples ##### Example 1 @@ -373,24 +373,17 @@ This command creates a configuration template file, which will be used as an arg These commands create/update a permission target. The commands accept as an argument a configuration template, which should be created by the **jf rt permission-target-template** command beforehand. The template also supports variables, which can be replaced with values, provided when it is used. -| | | -|-------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command-name | permission-target-create / permission-target-update | -| Abbreviation | rt ptc / rt ptu | -| Command options | | -| --server-id |

[Optional]
Artifactory server ID configured using the config command.

| -| --vars |

[Optional]
List of variables in the form of "key1=value1;key2=value2;..." to be replaced in the template. In the template, the variables should be used as follows: ${key1}.

| -| Command arguments | | -| template path | Specifies the local file system path for the template file to be used for the permission target creation or update. The template can be created using the "jf rt ptt" command. | -| | | -|-------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command-name | permission-target-create / permission-target-update | -| Abbreviation | rt ptc / rt ptu | -| Command options | | -| --server-id |

[Optional]
Artifactory server ID configured using the config command.

| -| --vars |

[Optional]
List of variables in the form of "key1=value1;key2=value2;..." to be replaced in the template. In the template, the variables should be used as follows: ${key1}.

| -| Command arguments | | -| template path | Specifies the local file system path for the template file to be used for the permission target creation or update. The template should be created using the "jf rt ptt" command. | +| | | +|-------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | permission-target-create / permission-target-update | +| Abbreviation | rt ptc / rt ptu | +| Command arguments | | +| template path | Specifies the local file system path for the template file to be used for the permission target creation or update. The template can be created using the "jf rt ptt" command. | +| Command-name | permission-target-create / permission-target-update | +| Abbreviation | rt ptc / rt ptu | +| Command options | | +| --server-id |

[Optional]
Artifactory server ID configured using the config command.

| +| --vars |

[Optional]
List of Semicolon-separated variables in the form of "key1=value1;key2=value2;..." to be replaced in the template. In the template, the variables should be used as follows: ${key1}.

| ### Deleting Permission Targets diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/release-lifecycle-management.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/release-lifecycle-management.md index 106fe21..614356a 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/release-lifecycle-management.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/release-lifecycle-management.md @@ -94,20 +94,20 @@ The file spec may be of one of the following creation sources: ### Commands Params -| | | -|------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command-name | release-bundle-create | -| Abbreviation | rbc | -| Command options | | -| --project |

[Optional]
Project key associated with the created Release Bundle version.

| -| --server-id |

[Optional]
Platform server ID configured using the config command.

| -| --signing-key |

[Mandatory]
The GPG/RSA key-pair name given in Artifactory.

| -| --spec |

[Optional]
Path to a File Spec.

| -| --spec-vars |

[Optional]
List of variables in the form of "key1=value1;key2=value2;..." (wrapped by quotes) to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| -| --sync |

[Default: false]
Set to true to run synchronously.

| -| Command arguments | | -| release bundle name | Name of the newly created Release Bundle. | -| release bundle version | Version of the newly created Release Bundle. | +| | | +|------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | release-bundle-create | +| Abbreviation | rbc | +| Command options | | +| --project |

[Optional]
Project key associated with the created Release Bundle version.

| +| --server-id |

[Optional]
Platform server ID configured using the config command.

| +| --signing-key |

[Mandatory]
The GPG/RSA key-pair name given in Artifactory.

| +| --spec |

[Optional]
Path to a File Spec.

| +| --spec-vars |

[Optional]
List of Semicolon-separated variables in the form of "key1=value1;key2=value2;..." (wrapped by quotes) to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| +| --sync |

[Default: false]
Set to true to run synchronously.

| +| Command arguments | | +| release bundle name | Name of the newly created Release Bundle. | +| release bundle version | Version of the newly created Release Bundle. | ### Examples #### Example 1 @@ -247,21 +247,25 @@ The Distribution Rules format also supports wildcards. For example: ### Examples #### Example 1 Distribute the release bundle named myApp with version 1.0.0. Use the distribution rules defined in the specified file. - - jf rbd --dist-rules=/path/to/dist-rules.json myApp 1.0.0 +``` +jf rbd --dist-rules=/path/to/dist-rules.json myApp 1.0.0 +``` #### Example 2 Distribute the release bundle named myApp with version 1.0.0 using the default distribution rules. Map files under the 'source' directory to be placed under the 'target' directory. - jf rbd --dist-rules=/path/to/dist-rules.json --mapping-pattern="(*)/source/(*)" --mapping-target="{1}/target/{2}" myApp 1.0.0 +``` +jf rbd --dist-rules=/path/to/dist-rules.json --mapping-pattern="(*)/source/(*)" --mapping-target="{1}/target/{2}" myApp 1.0.0 +``` #### Example 3 -Synchronously distribute a release bundle associated with project "proj" - - jf rbd --dist-rules=/path/to/dist-rules.json --sync --project="proj" myApp 1.0.0 +Synchronously distribute a release bundle associated with project "proj" +``` +jf rbd --dist-rules=/path/to/dist-rules.json --sync --project="proj" myApp 1.0.0 +``` ## Deleting release bundle locally This command allows deleting all release bundle promotions to an environment or deleting a release bundle locally altogether. @@ -285,18 +289,23 @@ Deleting locally means distributions of the release bundle will not be deleted. #### Example 1 Locally delete the release bundle named myApp with version 1.0.0 altogether. - jf rbdell myApp 1.0.0 +``` +jf rbdell myApp 1.0.0 +``` #### Example 2 Delete a release bundle locally altogether. Run the command synchronously and skip the confirmation message. - jf rbdell --quiet --sync myApp 1.0.0 +``` +jf rbdell --quiet --sync myApp 1.0.0 +``` #### Example 3 Delete all promotions of the release bundle to environment "PROD". - jf rbdell myApp 1.0.0 PROD - +``` +jf rbdell myApp 1.0.0 PROD +``` ## Deleting release bundle remotely This command will delete distributions of a release bundle from edge nodes. @@ -324,65 +333,72 @@ This command will delete distributions of a release bundle from edge nodes. #### Example 1 Delete the distributions of release bundle named myApp with version 1.0.0 from edge nodes matching the provided distribution rules defined in the specified file. - jf rbd --dist-rules=/path/to/dist-rules.json myApp 1.0.0 +``` +jf rbd --dist-rules=/path/to/dist-rules.json myApp 1.0.0 +``` #### Example 2 Delete the distributions of the release bundle associated with project "proj" from the provided edge nodes. Run the command synchronously and skip the confirmation message. - jf rbd --dist-rules=/path/to/dist-rules.json --project="proj" --quiet --sync myApp 1.0.0 +``` +jf rbd --dist-rules=/path/to/dist-rules.json --project="proj" --quiet --sync myApp 1.0.0 +``` ## Exporting Release Bundle archive JFrog Lifecycle Management supports distributing your Release Bundles to remote Edge nodes within an air-gapped environment. This use case is mainly intended for organizations that have two or more JFrog instances that have no network connection between them. The following command allows exporting a Release Bundle as an archive to the filesystem that can be transferred to a different instance in an air-gapped environment. - -| | | -|------------------------|------------------------------------------------------------------------------------------------------------------------------------------------| -| Command-name | release-bundle-export | -| Abbreviation | rbe | -| Command arguments | | -| release bundle name | Name of the Release Bundle to export. | -| release bundle version | Version of the release bundle to export. -| target pattern | The argument is optional and specifies the local file system target path.If the target path ends with a slash, the path is assumed to be a directory.For example, if you specify the target as "repo-name/a/b/", then "b" is assumed to be a directory into which files should be downloaded.If there is no terminal slash, the target path is assumed to be a file to which the downloaded file should be renamed.For example, if you specify the target as "a/b", the downloaded file is renamed to "b". -| Command options | | -| --project |

[Optional]

Project key associated with the Release Bundle version.

| -| --server-id |

[Optional]

Platform server ID configured using the config command.

| -| mapping-pattern |

[Optional]

Specify a list of input regex mapping pairs that define where the queried artifact is located and where it should be placed after it is imported. Use this option if the path on the target is different than the source path. -| mapping-target |

[Optional]

Specify a list of output regex mapping pairs that define where the queried artifact is located and where it should be placed after it is imported. Use this option if the path on the target is different than the source path. -| split-count |

[Optional]

The maximum number of parts that can be concurrently uploaded per file during a multi-part upload. Set to 0 to disable multi-part upload. -| min-split |

[Optional]

Minimum file size in KB to split into ranges when downloading. Set to -1 for no splits +| | | +|------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | release-bundle-export | +| Abbreviation | rbe | +| Command arguments | | +| release bundle name | Name of the Release Bundle to export. | +| release bundle version | Version of the release bundle to export. | +| target pattern | The argument is optional and specifies the local file system target path.If the target path ends with a slash, the path is assumed to be a directory.For example, if you specify the target as "repo-name/a/b/", then "b" is assumed to be a directory into which files should be downloaded.If there is no terminal slash, the target path is assumed to be a file to which the downloaded file should be renamed.For example, if you specify the target as "a/b", the downloaded file is renamed to "b". | +| Command options | | +| --project |

[Optional]
Project key associated with the Release Bundle version.

| +| --server-id |

[Optional]
Platform server ID configured using the config command.

| +| mapping-pattern |

[Optional]
Specify a list of input regex mapping pairs that define where the queried artifact is located and where it should be placed after it is imported. Use this option if the path on the target is different than the source path. | +| mapping-target |

[Optional]
Specify a list of output regex mapping pairs that define where the queried artifact is located and where it should be placed after it is imported. Use this option if the path on the target is different than the source path. | +| split-count |

[Optional]
The maximum number of parts that can be concurrently uploaded per file during a multi-part upload. Set to 0 to disable multi-part upload. | +| min-split |

[Optional]
Minimum file size in KB to split into ranges when downloading. Set to -1 for no splits | #### Example Export release bundle named "myApp" and version 1.0.0 - jf rbe myApp 1.0.0 +``` +jf rbe myApp 1.0.0 +``` #### Example Download to a specific location - jf rbe myApp 1.0.0 /user/mybundle/ - +``` +jf rbe myApp 1.0.0 /user/mybundle/ +``` ## Importing Release Bundle archive Import a Release Bundle archive from a release bundle exported zip file. Please note this functionality only works on Edge nodes within an air-gapped environment. -| | | -|------------------------|----------------------------------------------------------------------------------| -| Command-name | release-bundle-import | -| Abbreviation | rbi | -| Command arguments | | -| path to archive | Path to the release bundle archive on the filesystem | -| Command options | | -| --project |

[Optional]

Project key associated with the Release Bundle version.

| -| --server-id |

[Optional]

Platform server ID configured using the config command.

| +| | | +|------------------------|------------------------------------------------------------------------------| +| Command-name | release-bundle-import | +| Abbreviation | rbi | +| Command arguments | | +| path to archive | Path to the release bundle archive on the filesystem | +| Command options | | +| --project |

[Optional]
Project key associated with the Release Bundle version.

| +| --server-id |

[Optional]
Platform server ID configured using the config command.

| #### Example Import a Release Bundle named "myExportedApp" and version 1.0.0 - jf rbi ./myExportedApp.zip - +``` +jf rbi ./myExportedApp.zip +``` diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-distribution.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-distribution.md index 615dfeb..fa12d0f 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-distribution.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-distribution.md @@ -41,7 +41,7 @@ This commands creates and updates an unsigned Release Bundle on JFrog Distributi | Command options | | | --server-id |

[Optional]
Artifactory server ID configured using the config command.

| | --spec |

[Optional]
Path to a file spec. For more details, please refer to Using File Specs.

| -| --spec-vars |

[Optional]
List of variables in the form of "key1=value1;key2=value2;..." to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| +| --spec-vars |

[Optional]
List of Semicolon-separated variables in the form of "key1=value1;key2=value2;..." to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| | --target-props |

[Optional]
The list of properties, in the form of key1=value1;key2=value2,..., to be added to the artifacts after distribution of the release bundle.

| | --target |

[Optional]
The target path for distributed artifacts on the edge node. If not specified, the artifacts will have the same path and name on the edge node, as on the source Artifactory server. For flexibility in specifying the distribution path, you can include placeholders in the form of {1}, {2} which are replaced by corresponding tokens in the pattern path that are enclosed in parenthesis.

| | --dry-run |

[Default: false]
Set to true to disable communication with JFrog Distribution.

| diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-source-code.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-source-code.md index 5b9c321..dadb422 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-source-code.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-source-code.md @@ -52,7 +52,7 @@ This command also supports the following Advanced Scans with the **Advanced Secu | --exclude-test-deps |

[Default: false] [Gradle]
Set to true if you'd like to exclude Gradle test dependencies from Xray scanning.

| | --requirements-file |

[Optional] [Pip]
Defines pip requirements file name. For example: 'requirements.txt'

| | --working-dirs |

[Optional]
A comma-separated list of relative working directories, to determine the audit targets locations.

If flag isn't provided, a recursive scan is triggered from the root directory of the project. | -| --exclusions |

[Default: *.git*;*node_modules*;*target*;*venv*;*test*]
List of exclusions separated by semicolons, utilized to skip sub-projects from undergoing an audit. These exclusions may incorporate the * and ? wildcards.

| +| --exclusions |

[Default: *.git*;*node_modules*;*target*;*venv*;*test*]
List of Semicolon-separated exclusions, utilized to skip sub-projects from undergoing an audit. These exclusions may incorporate the * and ? wildcards.

| | --fixable-only |

[Optional]
Set to true if you wish to display issues that have a fix version only.

| | --min-severity |

[Optional]
Set the minimum severity of issues to display. The following values are accepted: Low, Medium, High or Critical

| | --go |

[Default: false]
Set to true to request audit for a Go project.

| diff --git a/jfrog-applications/jfrog-cli/get-started/configurations/setting-up-a-ci-pipeline.md b/jfrog-applications/jfrog-cli/get-started/configurations/setting-up-a-ci-pipeline.md deleted file mode 100644 index f2152c2..0000000 --- a/jfrog-applications/jfrog-cli/get-started/configurations/setting-up-a-ci-pipeline.md +++ /dev/null @@ -1,27 +0,0 @@ -# Setting up a CI Pipeline - -The **ci-setup** command allows setting up a basic CI pipeline with the JFrog Platform, while automatically configuring the JFrog Platform to serve the pipeline. It is an interactive command, which prompts you with a series for questions, such as your source control details, your build tool, build command and your CI provider. The command then uses this information to do following: - -* Create the repositories in JFrog Artifactory, to be used by the pipeline to resolve dependencies. -* Configure JFrog Xray to scan the build. -* Generate a basic CI pipeline, which builds and scans your code. - -You can use the generated CI pipeline as a working starting point and then expand it as needed. - -The command currently supports the following package managers: - -* Maven -* Gradle -* npm. - -and the following CI providers: - -* JFrog Pipelines -* Jenkins -* GitHub Actions. - -Usage: - -``` -jf ci-setup -``` From 31c036de6802a1c14f251a33a21c22b78f907b80 Mon Sep 17 00:00:00 2001 From: Michael Sverdlov Date: Thu, 18 Apr 2024 19:10:20 +0300 Subject: [PATCH 08/57] Reorganize command tables (#114) --- .../managing-configuration-entities.md | 8 ++-- .../release-lifecycle-management.md | 40 +++++++++---------- ...rring-files-between-artifactory-servers.md | 7 +++- 3 files changed, 29 insertions(+), 26 deletions(-) diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/managing-configuration-entities.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/managing-configuration-entities.md index 23d25ac..854ab86 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/managing-configuration-entities.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/managing-configuration-entities.md @@ -154,7 +154,7 @@ jf rt group-delete "reviewers" ## Managing Repositories -JFrog CLI offers a set of commands for managing Artifactory repositories. You can create, update and delete repositories. To make it easier to manage repositories, the commands which create and update the repositories accept a pre-defined configuration template file. This template file can also include variables. which can be later replaced with values, when creating or updating the repositories. The configuration template file is created using the **jf rt repo-template** command. +JFrog CLI offers a set of commands for managing Artifactory repositories. You can create, update and delete repositories. To make it easier to manage repositories, the commands which create and update the repositories accept a pre-defined configuration template file. This template file can also include variables, which can be later replaced with values, when creating or updating the repositories. The configuration template file is created using the **jf rt repo-template** command. ### Creating or Configuration Template @@ -259,11 +259,11 @@ jf rt repo-delete generic-local ## Managing Replications -JFrog CLI offers commands creating and deleting replication jobs in Artifactory. To make it easier to create replication jobs, the commands which creates the replication job accepts a pre-defined configuration template file. This template file can also include variables. which can be later replaced with values, when creating the replication job. The configuration template file is created using the **jf rt replication-template** command. +JFrog CLI offers commands creating and deleting replication jobs in Artifactory. To make it easier to create replication jobs, the commands which creates the replication job accepts a pre-defined configuration template file. This template file can also include variables, which can be later replaced with values, when creating the replication job. The configuration template file is created using the **jf rt replication-template** command. ### Creating a Configuration Template -This command creates a configuration template file, which should be used as an argument for the **jf rt replication-create** command. +This command creates a configuration template file, which will be used as an argument for the **jf rt replication-create** command. When using this command to create the template, you can also provide replaceable variable, instead of fixes values. Then, when the template is used to create replication jobs, values can be provided to replace the variables in the template. @@ -378,7 +378,7 @@ These commands create/update a permission target. The commands accept as an argu | Command-name | permission-target-create / permission-target-update | | Abbreviation | rt ptc / rt ptu | | Command arguments | | -| template path | Specifies the local file system path for the template file to be used for the permission target creation or update. The template can be created using the "jf rt ptt" command. | +| template path | Specifies the local file system path for the template file to be used for the permission target creation or update. The template should be created using the "jf rt ptt" command. | | Command-name | permission-target-create / permission-target-update | | Abbreviation | rt ptc / rt ptu | | Command options | | diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/release-lifecycle-management.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/release-lifecycle-management.md index 614356a..0a08ca5 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/release-lifecycle-management.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/release-lifecycle-management.md @@ -98,16 +98,16 @@ The file spec may be of one of the following creation sources: |------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command-name | release-bundle-create | | Abbreviation | rbc | +| Command arguments | | +| release bundle name | Name of the newly created Release Bundle. | +| release bundle version | Version of the newly created Release Bundle. | | Command options | | | --project |

[Optional]
Project key associated with the created Release Bundle version.

| | --server-id |

[Optional]
Platform server ID configured using the config command.

| | --signing-key |

[Mandatory]
The GPG/RSA key-pair name given in Artifactory.

| | --spec |

[Optional]
Path to a File Spec.

| | --spec-vars |

[Optional]
List of Semicolon-separated variables in the form of "key1=value1;key2=value2;..." (wrapped by quotes) to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| -| --sync |

[Default: false]
Set to true to run synchronously.

| -| Command arguments | | -| release bundle name | Name of the newly created Release Bundle. | -| release bundle version | Version of the newly created Release Bundle. | +| --sync |

[Default: false]
Set to true to run synchronously.

| | ### Examples #### Example 1 @@ -144,17 +144,17 @@ This command allows promoting a release bundle to a target environment. |------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command-name | release-bundle-promote | | Abbreviation | rbp | +| Command arguments | | +| release bundle name | Name of the Release Bundle to promote. | +| release bundle version | Version of the Release Bundle to promote. | +| environment | Name of the target environment for the promotion. | | Command options | | | --input-repos |

[Optional]
A list of semicolon-separated repositories to include in the promotion. If this property is left undefined, all repositories (except those specifically excluded) are included in the promotion. If one or more repositories are specifically included, all other repositories are excluded.

| | --exclude-repos |

[Optional]
A list of semicolon-separated repositories to exclude from the promotion.

| | --project |

[Optional]
Project key associated with the Release Bundle version.

| | --server-id |

[Optional]
Platform server ID configured using the config command.

| | --signing-key |

[Mandatory]
The GPG/RSA key-pair name given in Artifactory.

| -| --sync |

[Default: false]
Set to true to run synchronously.

| -| Command arguments | | -| release bundle name | Name of the Release Bundle to promote. | -| release bundle version | Version of the Release Bundle to promote. | -| environment | Name of the target environment for the promotion. | +| --sync |

[Default: false]
Set to true to run synchronously.

| | ### Examples #### Example 1 @@ -197,6 +197,9 @@ This command distributes a release bundle to an edge node. |------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command-name | release-bundle-distribute | | Abbreviation | rbd | +| Command arguments | | +| release bundle name | Name of the release bundle to distribute. | +| release bundle version | Version of the release bundle to distribute. | | Command options | | | --city |

[Default: *]
Wildcard filter for site city name.

| | --country-codes |

[Default: *]
Semicolon-separated list of wildcard filters for site country codes.

| @@ -209,10 +212,7 @@ This command distributes a release bundle to an edge node. | --project |

[Optional]
Project key associated with the Release Bundle version.

| | --server-id |

[Optional]
Platform server ID configured using the config command.

| | --site |

[Default: *]
Wildcard filter for site name.

| -| --sync |

[Default: false]
Set to true to run synchronously.

| -| Command arguments | | -| release bundle name | Name of the release bundle to distribute. | -| release bundle version | Version of the release bundle to distribute. | +| --sync |

[Default: false]
Set to true to run synchronously.

| | **Distribution Rules Structure** ```json @@ -275,15 +275,15 @@ Deleting locally means distributions of the release bundle will not be deleted. |------------------------|----------------------------------------------------------------------------------------------------------------------------------------| | Command-name | release-bundle-delete-local | | Abbreviation | rbdell | +| Command arguments | | +| release bundle name | Name of the release bundle to distribute. | +| release bundle version | Version of the release bundle to distribute. | +| environment | If provided, all promotions to this environment are deleted. Otherwise, the release bundle is deleted locally with all its promotions. | | Command options | | | --project |

[Optional]
Project key associated with the Release Bundle version.

| | --quiet |

[Default: $CI]
Set to true to skip the delete confirmation message.

| | --server-id |

[Optional]
Platform server ID configured using the config command.

| | --sync |

[Default: false]
Set to true to run synchronously.

| -| Command arguments | | -| release bundle name | Name of the release bundle to distribute. | -| release bundle version | Version of the release bundle to distribute. | -| environment | If provided, all promotions to this environment are deleted. Otherwise, the release bundle is deleted locally with all its promotions. | ### Examples #### Example 1 @@ -314,6 +314,9 @@ This command will delete distributions of a release bundle from edge nodes. |------------------------|---------------------------------------------------------------------------------------------------------------------------------------------| | Command-name | release-bundle-delete-remote | | Abbreviation | rbdelr | +| Command arguments | | +| release bundle name | Name of the release bundle to distribute. | +| release bundle version | Version of the release bundle to distribute. | | Command options | | | --city |

[Default: *]
Wildcard filter for site city name.

| | --country-codes |

[Default: *]
Semicolon-separated list of wildcard filters for site country codes.

| @@ -325,9 +328,6 @@ This command will delete distributions of a release bundle from edge nodes. | --server-id |

[Optional]
Platform server ID configured using the config command.

| | --site |

[Default: *]
Wildcard filter for site name.

| | --sync |

[Default: false]
Set to true to run synchronously.

| -| Command arguments | | -| release bundle name | Name of the release bundle to distribute. | -| release bundle version | Version of the release bundle to distribute. | ### Examples #### Example 1 diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/transferring-files-between-artifactory-servers.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/transferring-files-between-artifactory-servers.md index c2c7033..17d9470 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/transferring-files-between-artifactory-servers.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/transferring-files-between-artifactory-servers.md @@ -100,7 +100,9 @@ To install the **data-transfer** user plugin on the source machine manually, fol Install JFrog CLI on your source instance by using one of the \[#JFrog CLI Installers]. For example: -`curl -fL https://install-cli.jfrog.io | sh` +```sh +curl -fL https://install-cli.jfrog.io | sh +``` **Note** @@ -152,9 +154,10 @@ Follows these steps to installing JFrog CLI on that machine. 1. Install JFrog CLI by using one of the \[#JFrog CLI Installers]. For example: - ``` + ```sh curl -fL https://install-cli.jfrog.io | sh ``` + 2. If your source instance is accessible only through an HTTP/HTTPS proxy, set the proxy environment variable as described \[#here]. 3. Configure the connection details of the source Artifactory instance with your admin credentials. Run the following command and follow the instructions. From 0ed3a844a7d25384cd5d06f5bb7bfbf1a97d0912 Mon Sep 17 00:00:00 2001 From: Guy Delarea <87260011+guydelarea@users.noreply.github.com> Date: Fri, 19 Apr 2024 08:14:12 +0300 Subject: [PATCH 09/57] Update move and copy commands target path description (#115) --- .../generic-files.md | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/generic-files.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/generic-files.md index ef81d76..9465154 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/generic-files.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/generic-files.md @@ -216,7 +216,7 @@ This command is used to copy files in Artifactory | Abbreviation | rt cp | | Command arguments |

The command takes two arguments source path and target path.

In case the --spec option is used, the commands accept no arguments.

| | Source path | Specifies the source path in Artifactory, from which the artifacts should be copied, in the following format: `[repository name]/[repository path].` You can use wildcards to specify multiple artifacts. | -| Target path |

Specifies the target path in Artifactory, to which the artifacts should be copied, in the following format: [repository name]/[repository path]

If the pattern ends with a slash, the target path is assumed to be a folder. For example, if you specify the target as "repo-name/a/b/", then "b" is assumed to be a folder in Artifactory into which files should be copied. If there is no terminal slash, the target path is assumed to be a file to which the copied file should be renamed. For example, if you specify the target as "repo-name/a/b", the copied file is renamed to "b" in Artifactory.

For flexibility in specifying the target path, you can include placeholders in the form of {1}, {2} which are replaced by corresponding tokens in the source path that are enclosed in parenthesis. For more details, please refer to Using Placeholders.

| +| Target path |

Specifies the target path in Artifactory, to which the artifacts should be copied, in the following format: [repository name]/[repository path]

By default the Target Path maintains the source path hierarchy, see --flat flag for more info. If the pattern ends with a slash, the target path is assumed to be a folder. For example, if you specify the target as "repo-name/a/b/", then "b" is assumed to be a folder in Artifactory into which files should be copied. If there is no terminal slash, the target path is assumed to be a file to which the copied file should be renamed. For example, if you specify the target as "repo-name/a/b", the copied file is renamed to "b" in Artifactory.

For flexibility in specifying the target path, you can include placeholders in the form of {1}, {2} which are replaced by corresponding tokens in the source path that are enclosed in parenthesis. For more details, please refer to Using Placeholders.

| | Command options |

When using the * or ; characters in the copy command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| | --server-id |

[Optional]
Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| | --spec |

[Optional]
Path to a file spec. For more details, please refer to Using File Specs.

| @@ -264,6 +264,13 @@ Copy all artifacts located under **/rabbit** in the **source-frog-repo** reposit jf rt cp "source-frog-repo/rabbit/*" target-frog-repo/rabbit/ --props=Version=1.0 ``` +#### Example 4 + +Copy all artifacts located under /rabbit in the **source-frog-repo** repository into the same path in the **target-frog-repo** repository without maintaining the original subdirectory hierarchy. +``` +jf rt cp "source-frog-repo/rabbit/*" target-frog-repo/rabbit/ --flat +``` + ## Moving Files This command is used to move files in Artifactory @@ -281,7 +288,7 @@ This command is used to move files in Artifactory | Abbreviation | rt mv | | Command arguments |

The command takes two arguments source path and target path.

In case the --spec option is used, the commands accept no arguments.

| | Source path | Specifies the source path in Artifactory, from which the artifacts should be moved, in the following format: `[repository name]/[repository path].` You can use wildcards to specify multiple artifacts. | -| Target path |

Specifies the target path in Artifactory, to which the artifacts should be moved, in the following format: [repository name]/[repository path]

If the pattern ends with a slash, the target path is assumed to be a folder. For example, if you specify the target as "repo-name/a/b/", then "b" is assumed to be a folder in Artifactory into which files should be moved. If there is no terminal slash, the target path is assumed to be a file to which the moved file should be renamed. For example, if you specify the target as "repo-name/a/b", the moved file is renamed to "b" in Artifactory.

For flexibility in specifying the upload path, you can include placeholders in the form of {1}, {2} which are replaced by corresponding tokens in the source path that are enclosed in parenthesis. For more details, please refer to Using Placeholders.

| +| Target path |

Specifies the target path in Artifactory, to which the artifacts should be moved, in the following format: [repository name]/[repository path]

By default the Target Path maintains the source path hierarchy, see --flat flag for more info. If the pattern ends with a slash, the target path is assumed to be a folder. For example, if you specify the target as "repo-name/a/b/", then "b" is assumed to be a folder in Artifactory into which files should be moved. If there is no terminal slash, the target path is assumed to be a file to which the moved file should be renamed. For example, if you specify the target as "repo-name/a/b", the moved file is renamed to "b" in Artifactory.

For flexibility in specifying the upload path, you can include placeholders in the form of {1}, {2} which are replaced by corresponding tokens in the source path that are enclosed in parenthesis. For more details, please refer to Using Placeholders.

| | Command options |

When using the * or ; characters in the copy command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| | --server-id |

[Optional]
Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| | --spec |

[Optional]
Path to a file spec. For more details, please refer to Using File Specs.

| @@ -329,6 +336,13 @@ Move all artifacts located under **/rabbit** in the **source-frog-repo** reposit jf rt mv "source-frog-repo/rabbit/*" target-frog-repo/rabbit/ --props=Version=1.0 ``` +#### Example 4 + +Move all artifacts located under /rabbit in the **source-frog-repo** repository into the same path in the **target-frog-repo** repository without maintaining the original subdirectory hierarchy. +``` +jf rt mv "source-frog-repo/rabbit/*" target-frog-repo/rabbit/ --flat +``` + ## Deleting Files This command is used to delete files in Artifactory @@ -612,4 +626,4 @@ Remove the properties 'component', 'layer' and 'level' from files in the docker- ``` jf rt delp "docker-hub/*" "component,layer,level" -``` \ No newline at end of file +``` From 9ae98ad4c30f42eaa9d4c619dde751ace5d326a5 Mon Sep 17 00:00:00 2001 From: Michael Sverdlov Date: Sun, 21 Apr 2024 14:32:25 +0300 Subject: [PATCH 10/57] Make semicolon and comma separation syntaxes clearer (#117) --- .../setup-frogbot-using-azure-pipelines.md | 2 +- .../frogbot/setup-frogbot-using-gitlab-ci.md | 2 +- .../frogbot/setup-frogbot-using-jenkins.md | 2 +- .../frogbot-scan-pull-request.yml | 2 +- .../build-integration.md | 98 ++--- .../environment-variables.md | 2 +- .../generic-files.md | 346 +++++++++--------- .../managing-configuration-entities.md | 64 ++-- .../package-managers-integration.md | 36 +- .../release-lifecycle-management.md | 62 ++-- .../jfrog-cli/cli-for-jfrog-cloud-transfer.md | 84 ++--- .../jfrog-cli/cli-for-jfrog-curation.md | 2 +- .../jfrog-cli/cli-for-jfrog-distribution.md | 8 +- .../scan-your-binaries.md | 4 +- .../scan-your-source-code.md | 6 +- .../jfrog-platform-configuration.md | 4 +- .../configurations/proxy-support.md | 10 +- 17 files changed, 367 insertions(+), 367 deletions(-) diff --git a/jfrog-applications/frogbot/setup-frogbot-using-azure-pipelines.md b/jfrog-applications/frogbot/setup-frogbot-using-azure-pipelines.md index 5cf69d0..7954d48 100644 --- a/jfrog-applications/frogbot/setup-frogbot-using-azure-pipelines.md +++ b/jfrog-applications/frogbot/setup-frogbot-using-azure-pipelines.md @@ -320,7 +320,7 @@ jobs: # JF_MIN_SEVERITY: "" # [Optional] - # List of comma separated email addresses to receive email notifications about secrets + # List of comma-separated(,) email addresses to receive email notifications about secrets # detected during pull request scanning. The notification is also sent to the email set # in the committer git profile regardless of whether this variable is set or not. # JF_EMAIL_RECEIVERS: "" diff --git a/jfrog-applications/frogbot/setup-frogbot-using-gitlab-ci.md b/jfrog-applications/frogbot/setup-frogbot-using-gitlab-ci.md index 11cc15f..5f74293 100644 --- a/jfrog-applications/frogbot/setup-frogbot-using-gitlab-ci.md +++ b/jfrog-applications/frogbot/setup-frogbot-using-gitlab-ci.md @@ -178,7 +178,7 @@ frogbot-scan: # JF_GIT_EMAIL_AUTHOR: "" # [Optional] - # List of comma separated email addresses to receive email notifications about secrets + # List of comma-separated(,) email addresses to receive email notifications about secrets # detected during pull request scanning. The notification is also sent to the email set # in the committer git profile regardless of whether this variable is set or not. # JF_EMAIL_RECEIVERS: "" diff --git a/jfrog-applications/frogbot/setup-frogbot-using-jenkins.md b/jfrog-applications/frogbot/setup-frogbot-using-jenkins.md index 32931b4..ff424c4 100644 --- a/jfrog-applications/frogbot/setup-frogbot-using-jenkins.md +++ b/jfrog-applications/frogbot/setup-frogbot-using-jenkins.md @@ -277,7 +277,7 @@ // JF_GIT_EMAIL_AUTHOR= "" // [Optional] - // List of comma separated email addresses to receive email notifications about secrets + // List of comma-separated(,) email addresses to receive email notifications about secrets // detected during pull request scanning. The notification is also sent to the email set // in the committer git profile regardless of whether this variable is set or not. // JF_EMAIL_RECEIVERS= "" diff --git a/jfrog-applications/frogbot/templates/github-actions/frogbot-scan-pull-request.yml b/jfrog-applications/frogbot/templates/github-actions/frogbot-scan-pull-request.yml index eae619c..4ee34fe 100644 --- a/jfrog-applications/frogbot/templates/github-actions/frogbot-scan-pull-request.yml +++ b/jfrog-applications/frogbot/templates/github-actions/frogbot-scan-pull-request.yml @@ -128,7 +128,7 @@ jobs: # JF_MIN_SEVERITY: "" # [Optional] - # List of comma separated email addresses to receive email notifications about secrets + # List of comma-separated(,) email addresses to receive email notifications about secrets # detected during pull request scanning. The notification is also sent to the email set # in the committer git profile regardless of whether this variable is set or not. # JF_EMAIL_RECEIVERS: "" diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/build-integration.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/build-integration.md index 678071b..e301821 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/build-integration.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/build-integration.md @@ -163,12 +163,12 @@ By default, the command collects the files from the local file system. If you'd | --from-rt |

[Default: false]
Set to true to search the files in Artifactory, rather than on the local file system. The --regexp option is not supported when --from-rt is set to true.

| | --server-id |

[Optional]
Server ID configured using the config command.

| | --spec |

[Optional]
Path to a File Spec.

| -| --spec-vars |

[Optional]
List of Semicolon-separated variables in the form of "key1=value1;key2=value2;..." to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| +| --spec-vars |

[Optional]
List of semicolon-separated(;) variables in the form of "key1=value1;key2=value2;..." to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| | --recursive |

[Default: true]
When false, artifacts inside sub-folders in Artifactory will not be affected.

| | --regexp |

[Optional: false]
[Default: false] Set to true to use a regular expression instead of wildcards expression to collect files to be added to the build info.This option is not supported when --from-rt is set to true.

| | --dry-run |

[Default: false]
Set to true to only get a summery of the dependencies that will be added to the build info.

| | --module |

[Optional]
Optional module name in the build-info for adding the dependency.

| -| --exclusions | A list of Semicolon-separated exclude patterns. Allows using wildcards or a regular expression according to the value of the 'regexp' option. | +| --exclusions | A list of semicolon-separated(;) exclude patterns. Allows using wildcards or a regular expression according to the value of the 'regexp' option. | #### Examples ##### Example 1 @@ -207,21 +207,21 @@ For example, the following command publishes all the build-info collected for bu ### Commands Params -| | | -|-------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command name | rt build-publish | -| Abbreviation | rt bp | -| Command arguments | The command accepts two arguments. | -| Build name | Build name to be published. | -| Build number | Build number to be published. | -| Command options | | -| --server-id |

[Optional]
Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| -| --project |

[Optional]
JFrog project key.

| -| --build-url |

[Optional]
Can be used for setting the CI server build URL in the build-info.

| -| --env-include |

[Default: *]
List of Semicolon-separated patterns in the form of "value1;value2;..." Only environment variables that match those patterns will be included in the build info.

| -| --env-exclude |

[Default: *password*;*secret*;*key*]
List of Semicolon-separated case insensitive patterns in the form of "value1;value2;..." environment variables match those patterns will be excluded.

| -| --dry-run |

[Default: false]
Set to true to disable communication with Artifactory.

| -| --insecure-tls |

[Default: false]
Set to true to skip TLS certificates verification.

| | +| | | +|-------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command name | rt build-publish | +| Abbreviation | rt bp | +| Command arguments | The command accepts two arguments. | +| Build name | Build name to be published. | +| Build number | Build number to be published. | +| Command options | | +| --server-id |

[Optional]
Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| +| --project |

[Optional]
JFrog project key.

| +| --build-url |

[Optional]
Can be used for setting the CI server build URL in the build-info.

| +| --env-include |

[Default: *]
List of semicolon-separated(;) patterns in the form of "value1;value2;..." Only environment variables that match those patterns will be included in the build info.

| +| --env-exclude |

[Default: *password*;*secret*;*key*]
List of semicolon-separated(;) case insensitive patterns in the form of "value1;value2;..." environment variables match those patterns will be excluded.

| +| --dry-run |

[Default: false]
Set to true to disable communication with Artifactory.

| +| --insecure-tls |

[Default: false]
Set to true to skip TLS certificates verification.

| | ### Example @@ -323,25 +323,25 @@ This command is used to [promote build](https://jfrog.com/knowledge-base/how-doe ### Commands Params -| | | -|------------------------|---------------------------------------------------------------------------------------------------------------------------------------------| -| Command name | rt build-promote | -| Abbreviation | rt bpr | -| Command arguments | The command accepts three arguments. | -| Build name | Build name to be promoted. | -| Build number | Build number to be promoted. | -| Target repository | Build promotion target repository. | -| Command options | | -| --server-id |

[Optional]
Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| -| --project |

[Optional]
JFrog project key.

| -| --status |

[Optional]
Build promotion status.

| -| --comment |

[Optional]
Build promotion comment.

| -| --source-repo |

[Optional]
Build promotion source repository.

| -| --include-dependencies |

[Default: false]
If set to true, the build dependencies are also promoted.

| -| --copy |

[Default: false]
If set true, the build artifacts and dependencies are copied to the target repository, otherwise they are moved.

| -| --props |

[Optional]
List of Semicolon-separated properties in the form of "key1=value1;key2=value2,...". to attach to the build artifacts.

| -| --dry-run |

[Default: false]
If true, promotion is only simulated. The build is not promoted.

| -| --insecure-tls |

[Default: false]
Set to true to skip TLS certificates verification.

| | +| | | +|------------------------|------------------------------------------------------------------------------------------------------------------------------------------------| +| Command name | rt build-promote | +| Abbreviation | rt bpr | +| Command arguments | The command accepts three arguments. | +| Build name | Build name to be promoted. | +| Build number | Build number to be promoted. | +| Target repository | Build promotion target repository. | +| Command options | | +| --server-id |

[Optional]
Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| +| --project |

[Optional]
JFrog project key.

| +| --status |

[Optional]
Build promotion status.

| +| --comment |

[Optional]
Build promotion comment.

| +| --source-repo |

[Optional]
Build promotion source repository.

| +| --include-dependencies |

[Default: false]
If set to true, the build dependencies are also promoted.

| +| --copy |

[Default: false]
If set true, the build artifacts and dependencies are copied to the target repository, otherwise they are moved.

| +| --props |

[Optional]
List of semicolon-separated(;) properties in the form of "key1=value1;key2=value2,...". to attach to the build artifacts.

| +| --dry-run |

[Default: false]
If true, promotion is only simulated. The build is not promoted.

| +| --insecure-tls |

[Default: false]
Set to true to skip TLS certificates verification.

| | ### Example @@ -393,19 +393,19 @@ This command is used to discard builds previously published to Artifactory using The following table lists the command arguments and flags: -| | | -|--------------------|---------------------------------------------------------------------------------------------------------------------------------------------| -| Command name | rt build-discard | -| Abbreviation | rt bdi | -| Command arguments | The command accepts one argument. | -| Build name | Build name. | -| Command options | | -| --server-id |

[Optional]
Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| -| --max-days |

[Optional]
The maximum number of days to keep builds in Artifactory.

| -| --max-builds |

[Optional]
The maximum number of builds to store in Artifactory.

| -| --exclude-builds |

[Optional]
List of comma-separated build numbers in the form of "build1,build2,...", that should not be removed from Artifactory.

| -| --delete-artifacts |

[Default: false]
If set to true, automatically removes build artifacts stored in Artifactory.

| -| --async |

[Default: false]
If set to true, build discard will run asynchronously and will not wait for response.

| +| | | +|--------------------|------------------------------------------------------------------------------------------------------------------------------------------------| +| Command name | rt build-discard | +| Abbreviation | rt bdi | +| Command arguments | The command accepts one argument. | +| Build name | Build name. | +| Command options | | +| --server-id |

[Optional]
Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| +| --max-days |

[Optional]
The maximum number of days to keep builds in Artifactory.

| +| --max-builds |

[Optional]
The maximum number of builds to store in Artifactory.

| +| --exclude-builds |

[Optional]
List of comma-separated(,) build numbers in the form of "build1,build2,...", that should not be removed from Artifactory.

| +| --delete-artifacts |

[Default: false]
If set to true, automatically removes build artifacts stored in Artifactory.

| +| --async |

[Default: false]
If set to true, build discard will run asynchronously and will not wait for response.

| ### Examples #### Example 1 diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/environment-variables.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/environment-variables.md index 17b68d9..d0f71d8 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/environment-variables.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/environment-variables.md @@ -15,7 +15,7 @@ Some of the Artifactory commands make use of the following environment variable: | **JFROG\_CLI\_BUILD\_NUMBER** | Build number to be used by commands which expect a build number, unless sent as a command argument or option. | | **JFROG\_CLI\_BUILD\_PROJECT** | JFrog project key to be used by commands that expect build name and build number. Determines the project of the published build. | | **JFROG\_CLI\_BUILD\_URL** | Sets the CI server build URL in the build-info. The "jf rt build-publish" command uses the value of this environment variable unless the --build-url command option is sent. | -| **JFROG\_CLI\_ENV\_EXCLUDE** |

[Default: *password*;*secret*;*key*;*token*]
List of Semicolon-separated case insensitive patterns in the form of "value1;value2;...". Environment variables match those patterns will be excluded. This environment variable is used by the "jf rt build-publish" command, in case the --env-exclude command option is not sent.

| +| **JFROG\_CLI\_ENV\_EXCLUDE** |

[Default: *password*;*secret*;*key*;*token*]
List of semicolon-separated(;) case insensitive patterns in the form of "value1;value2;...". Environment variables match those patterns will be excluded. This environment variable is used by the "jf rt build-publish" command, in case the --env-exclude command option is not sent.

| | **JFROG\_CLI\_TRANSITIVE\_DOWNLOAD\_EXPERIMENTAL** |

[Default: false]
Used by the "jf rt download" command. Set to true to download artifacts also from remote repositories. This feature is experimental and available on Artifactory version 7.17.0 or higher.

| | **JFROG\_CLI\_UPLOAD\_EMPTY\_ARCHIVE** |

[Default: false]
Used by the "jf rt upload" command. Set to true if you'd like to upload an empty archive when '--archive' is set but all files were excluded by exclusions pattern.

| diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/generic-files.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/generic-files.md index 9465154..4bdaeb9 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/generic-files.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/generic-files.md @@ -22,12 +22,12 @@ This command is used to upload files to Artifactory. | --archive |

[Optional]
Set to "zip" to pack and deploy the files to Artifactory inside a ZIP archive. Currently, the only packaging format supported is zip.

| | --server-id |

[Optional]
Server ID configured using the jf c add command. If not specified, the default configured Artifactory server is used.

| | --spec |

[Optional]
Path to a file spec. For more details, please refer to Using File Specs.

| -| --spec-vars |

[Optional]
List of Semicolon-separated variables in the form of "key1=value1;key2=value2;..." to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| +| --spec-vars |

[Optional]
List of semicolon-separated(;) variables in the form of "key1=value1;key2=value2;..." to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| | --build-name |

[Optional]
Build name. For more details, please refer to Build Integration.

| | --build-number |

[Optional]
Build number. For more details, please refer to Build Integration.

| | --project |

[Optional]
JFrog project key.

| | --module |

[Optional]
Optional module name for the build-info.

| -| --target-props |

[Optional]
A list of Artifactory properties specified as "key=value" pairs separated by a semi-colon ( ; ) to be attached to the uploaded files. If any key can take several values, then each value is separated by a comma ( , ). For example, "key1=value1;key2=value21,value22;key3=value3".

| +| --target-props |

[Optional]
List of semicolon-separated(;) Artifactory properties specified as "key=value" pairs to be attached to the uploaded files.(for example: "key1=value1;key2=value21,value22;key3=value3".

| | --deb |

[Optional]
Used for Debian packages only. Specifies the distribution/component/architecture of the package. If the the value for distribution, component or architecture include a slash. the slash should be escaped with a back-slash.

| | --flat |

[Default: false]
If true, files are uploaded to the exact target path specified and their hierarchy in the source file system is ignored.

If false, files are uploaded to the target path while maintaining their file system hierarchy.

If Using Placeholders are used, the value of this option is ignored.

Note

JFrog CLI v1

In JFrog CLI v1, the default value of the --flat option is true.

| | --recursive |

[Default: true]
If true, files are also collected from sub-folders of the source directory for upload .

If false, only files specifically in the source directory are uploaded.

| @@ -38,12 +38,12 @@ This command is used to upload files to Artifactory. | --symlinks |

[Default: false]
If true, the command will preserve the soft links structure in Artifactory. The symlink file representation will contain the symbolic link and checksum properties.

| | --explode |

[Default: false]
If true, the command will extract an archive containing multiple artifacts after it is deployed to Artifactory, while maintaining the archive's file structure.

| | --include-dirs |

[Default: false]
If true, the source path applies to bottom-chain directories and not only to files. Bottom-chain directories are either empty or do not include other directories that match the source path.

| -| --exclusions |

[Optional]
A list of Semicolon-separated exclude patterns. Allows using wildcards, regular expressions or ANT patterns, according to the value of the --regexp and --ant options. Please read the --regexp and --ant options description for more information.

| +| --exclusions |

[Optional]
A list of semicolon-separated(;) exclude patterns. Allows using wildcards, regular expressions or ANT patterns, according to the value of the --regexp and --ant options. Please read the --regexp and --ant options description for more information.

| | --sync-deletes |

[Optional]
Specific path in Artifactory, under which to sync artifacts after the upload. After the upload, this path will include only the artifacts uploaded during this upload operation. The other files under this path will be deleted.

| | --quiet |

[Default: false]
If true, the delete confirmation message is skipped.

| | --fail-no-op |

[Default: false]
Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| | --retries |

[Default: 3]
Number of upload retries.

| -| --retry-wait-time |

[Default: 0s]
Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds.

| +| --retry-wait-time |

[Default: 0s]
Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds (for example: 10s or 100ms).

| | --detailed-summary |

[Default: false]
Set to true to include a list of the affected files as part of the command output summary.

| | --insecure-tls |

[Default: false]
Set to true to skip TLS certificates verification.

| | --min-split |

[Default: 200]
The minimum file size in MiB required to attempt a multi-part upload. This option, as well as the functionality of multi-part upload, requires Artifactory with S3 storage.

| @@ -135,9 +135,9 @@ This command is used to download files from Artifactory. | --project |

[Optional]
JFrog project key.

| | --module |

[Optional]
Optional module name for the build-info.

| | --spec |

[Optional]
Path to a file spec. For more details, please refer to Using File Specs.

| -| --spec-vars |

[Optional]
List of Semicolon-separated variables in the form of "key1=value1;key2=value2;..." to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| -| --props |

[Optional]
A list of Artifactory properties specified as "key=value" pairs separated by a semi-colon (for example, "key1=value1;key2=value2;key3=value3"). Only artifacts with all of the specified properties names and values will be downloaded.

| -| --exclude-props |

[Optional]
A list of Artifactory properties specified as "key=value" pairs separated by a semi-colon (for example, "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be downloaded.

| +| --spec-vars |

[Optional]
List of semicolon-separated(;) variables in the form of "key1=value1;key2=value2;..." to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| +| --props |

[Optional]
A list of Artifactory properties specified as semicolon-separated(;) "key=value" pairs (for example: "key1=value1;key2=value2;key3=value3"). Only artifacts with all of the specified properties names and values will be downloaded.

| +| --exclude-props |

[Optional]
A list of Artifactory properties specified as semicolon-separated(;) "key=value" pairs (for example: "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be downloaded.

| | --build |

[Optional]
If specified, only artifacts of the specified build are matched. The property format is build-name/build-number. If you do not specify the build number, the artifacts are filtered by the latest build number.

| | --bundle |

[Optional]
If specified, only artifacts of the specified bundle are matched. The value format is bundle-name/bundle-version.

| | --flat |

[Default: false]
If true, artifacts are downloaded to the exact target path specified and their hierarchy in the source repository is ignored.

If false, artifacts are downloaded to the target path in the file system while maintaining their hierarchy in the source repository.

If Using Placeholders are used, and you would like the local file system (download path) to be determined by placeholders only, or in other words, avoid concatenating the Artifactory folder hierarchy local, set to false.

| @@ -145,17 +145,17 @@ This command is used to download files from Artifactory. | --threads |

[Default: 3]
The number of parallel threads that should be used to download where each thread downloads a single artifact at a time.

| | --split-count |

[Default: 3]
The number of segments into which each file should be split for download (provided the artifact is over --min-split in size). To download each file in a single thread, set to 0.

| | --retries |

[Default: 3]
Number of download retries.

| -| --retry-wait-time |

[Default: 0s]
Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds.

| +| --retry-wait-time |

[Default: 0s]
Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds (for example: 10s or 100ms).

| | --min-split |

[Default: 5120]
The minimum size permitted for splitting. Files larger than the specified number will be split into equally sized --split-count segments. Any files smaller than the specified number will be downloaded in a single thread. If set to -1, files are not split.

| | --dry-run |

[Default: false]
If true, the command only indicates which artifacts would have been downloaded.

If false, the command is fully executed and downloads artifacts as specified.

| | --explode |

[Default: false]
Set to true to extract an archive after it is downloaded from Artifactory.

Supported compression formats: br, bz2, gz, lz4, sz, xz, zstd.

Supported archive formats: zip, tar (including any compressed variants like tar.gz), rar.

| | --bypass-archive-inspection |

[Default: false]
Set to true to bypass the archive security inspection before it is unarchived. Used with the 'explode' option.

| | --validate-symlinks |

[Default: false]
If true, the command will validate that symlinks are pointing to existing and unchanged files, by comparing their sha1. Applicable to files and not directories.

| | --include-dirs |

[Default: false]
If true, the source path applies to bottom-chain directories and not only to files. Bottom-chain directories are either empty or do not include other directories that match the source path.

| -| --exclusions | A list of Semicolon-separated exclude patterns. Allows using wildcards. | +| --exclusions | A list of semicolon-separated(;) exclude patterns. Allows using wildcards. | | --sync-deletes |

[Optional]
Specific path in the local file system, under which to sync dependencies after the download. After the download, this path will include only the dependencies downloaded during this download operation. The other files under this path will be deleted.

| | --quiet |

[Default: false]
If true, the delete confirmation message is skipped.

| -| --sort-by |

[Optional]
A list of semicolon-separated fields to sort by. The fields must be part of the 'items' AQL domain. For more information read the AQL documentation

| +| --sort-by |

[Optional]
A list of semicolon-separated(;) fields to sort by. The fields must be part of the 'items' AQL domain. For more information read the AQL documentation

| | --sort-order |

[Default: asc]
The order by which fields in the 'sort-by' option should be sorted. Accepts 'asc' or 'desc'.

| | --limit |

[Optional]
The maximum number of items to fetch. Usually used with the 'sort-by' option.

| | --offset |

[Optional]
The offset from which to fetch items (i.e. how many items should be skipped). Usually used with the 'sort-by' option.

| @@ -210,34 +210,34 @@ This command is used to copy files in Artifactory ### Commands Params -| | | -|-------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command name | rt copy | -| Abbreviation | rt cp | -| Command arguments |

The command takes two arguments source path and target path.

In case the --spec option is used, the commands accept no arguments.

| -| Source path | Specifies the source path in Artifactory, from which the artifacts should be copied, in the following format: `[repository name]/[repository path].` You can use wildcards to specify multiple artifacts. | +| | | +|-------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command name | rt copy | +| Abbreviation | rt cp | +| Command arguments |

The command takes two arguments source path and target path.

In case the --spec option is used, the commands accept no arguments.

| +| Source path | Specifies the source path in Artifactory, from which the artifacts should be copied, in the following format: `[repository name]/[repository path].` You can use wildcards to specify multiple artifacts. | | Target path |

Specifies the target path in Artifactory, to which the artifacts should be copied, in the following format: [repository name]/[repository path]

By default the Target Path maintains the source path hierarchy, see --flat flag for more info. If the pattern ends with a slash, the target path is assumed to be a folder. For example, if you specify the target as "repo-name/a/b/", then "b" is assumed to be a folder in Artifactory into which files should be copied. If there is no terminal slash, the target path is assumed to be a file to which the copied file should be renamed. For example, if you specify the target as "repo-name/a/b", the copied file is renamed to "b" in Artifactory.

For flexibility in specifying the target path, you can include placeholders in the form of {1}, {2} which are replaced by corresponding tokens in the source path that are enclosed in parenthesis. For more details, please refer to Using Placeholders.

| -| Command options |

When using the * or ; characters in the copy command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| -| --server-id |

[Optional]
Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| -| --spec |

[Optional]
Path to a file spec. For more details, please refer to Using File Specs.

| -| --props |

[Optional]
A list of Artifactory properties specified as "key=value" pairs separated by a semi-colon. (For example, "key1=value1;key2=value2;key3=value3"). Only artifacts with these properties names and values will be copied.

| -| --exclude-props |

[Optional]
A list of Artifactory properties specified as "key=value" pairs separated by a semi-colon (for example, "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be copied.

| -| --build |

[Optional]
If specified, only artifacts of the specified build are matched. The property format is build-name/build-number. If you do not specify the build number, the artifacts are filtered by the latest build number.

| -| --bundle |

[Optional]
If specified, only artifacts of the specified bundle are matched. The value format is bundle-name/bundle-version.

| -| --flat |

[Default: false]
If true, artifacts are copied to the exact target path specified and their hierarchy in the source path is ignored.

If false, artifacts are copied to the target path while maintaining their source path hierarchy.

| -| --recursive |

[Default: true]
If true, artifacts are also copied from sub-paths under the specified source path.

If false, only artifacts in the specified source path directory are copied.

| -| --dry-run |

[Default: false]
If true, the command only indicates which artifacts would have been copied.

If false, the command is fully executed and copies artifacts as specified.

| -| --exclusions | A list of Semicolon-separated exclude patterns. Allows using wildcards. | -| --threads |

[Default: 3]
Number of threads used for copying the items.

| -| --sort-by |

[Optional]
A list of semicolon-separated fields to sort by. The fields must be part of the 'items' AQL domain. For more information read the AQL documentation

| -| --sort-order |

[Default: asc]
The order by which fields in the 'sort-by' option should be sorted. Accepts 'asc' or 'desc'.

| -| --limit |

[Optional]
The maximum number of items to fetch. Usually used with the 'sort-by' option.

| -| --offset |

[Optional]
The offset from which to fetch items (i.e. how many items should be skipped). Usually used with the 'sort-by' option.

| -| --fail-no-op |

[Default: false]
Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| -| --archive-entries |

[Optional]
If specified, only archive artifacts containing entries matching this pattern are matched. You can use wildcards to specify multiple artifacts.

| -| --insecure-tls |

[Default: false]
Set to true to skip TLS certificates verification.

| -| --retries |

[Default: 3]
Number for HTTP retry attempts.

| -| --retry-wait-time |

[Default: 0s]
Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds.

| +| Command options |

When using the * or ; characters in the copy command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| +| --server-id |

[Optional]
Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| +| --spec |

[Optional]
Path to a file spec. For more details, please refer to Using File Specs.

| +| --props |

[Optional]
A list of Artifactory properties specified as semicolon-separated(;) "key=value" pairs. (for example: "key1=value1;key2=value2;key3=value3"). Only artifacts with these properties names and values will be copied.

| +| --exclude-props |

[Optional]
A list of Artifactory properties specified as semicolon-separated(;) "key=value" pairs (for example: "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be copied.

| +| --build |

[Optional]
If specified, only artifacts of the specified build are matched. The property format is build-name/build-number. If you do not specify the build number, the artifacts are filtered by the latest build number.

| +| --bundle |

[Optional]
If specified, only artifacts of the specified bundle are matched. The value format is bundle-name/bundle-version.

| +| --flat |

[Default: false]
If true, artifacts are copied to the exact target path specified and their hierarchy in the source path is ignored.

If false, artifacts are copied to the target path while maintaining their source path hierarchy.

| +| --recursive |

[Default: true]
If true, artifacts are also copied from sub-paths under the specified source path.

If false, only artifacts in the specified source path directory are copied.

| +| --dry-run |

[Default: false]
If true, the command only indicates which artifacts would have been copied.

If false, the command is fully executed and copies artifacts as specified.

| +| --exclusions | A list of semicolon-separated(;) exclude patterns. Allows using wildcards. | +| --threads |

[Default: 3]
Number of threads used for copying the items.

| +| --sort-by |

[Optional]
A list of semicolon-separated(;) fields to sort by. The fields must be part of the 'items' AQL domain. For more information read the AQL documentation

| +| --sort-order |

[Default: asc]
The order by which fields in the 'sort-by' option should be sorted. Accepts 'asc' or 'desc'.

| +| --limit |

[Optional]
The maximum number of items to fetch. Usually used with the 'sort-by' option.

| +| --offset |

[Optional]
The offset from which to fetch items (i.e. how many items should be skipped). Usually used with the 'sort-by' option.

| +| --fail-no-op |

[Default: false]
Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| +| --archive-entries |

[Optional]
If specified, only archive artifacts containing entries matching this pattern are matched. You can use wildcards to specify multiple artifacts.

| +| --insecure-tls |

[Default: false]
Set to true to skip TLS certificates verification.

| +| --retries |

[Default: 3]
Number for HTTP retry attempts.

| +| --retry-wait-time |

[Default: 0s]
Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds (for example: 10s or 100ms).

| ### Examples #### Example 1 @@ -282,34 +282,34 @@ This command is used to move files in Artifactory ### Commands Params -| | | -|-------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command name | rt move | -| Abbreviation | rt mv | -| Command arguments |

The command takes two arguments source path and target path.

In case the --spec option is used, the commands accept no arguments.

| -| Source path | Specifies the source path in Artifactory, from which the artifacts should be moved, in the following format: `[repository name]/[repository path].` You can use wildcards to specify multiple artifacts. | +| | | +|-------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command name | rt move | +| Abbreviation | rt mv | +| Command arguments |

The command takes two arguments source path and target path.

In case the --spec option is used, the commands accept no arguments.

| +| Source path | Specifies the source path in Artifactory, from which the artifacts should be moved, in the following format: `[repository name]/[repository path].` You can use wildcards to specify multiple artifacts. | | Target path |

Specifies the target path in Artifactory, to which the artifacts should be moved, in the following format: [repository name]/[repository path]

By default the Target Path maintains the source path hierarchy, see --flat flag for more info. If the pattern ends with a slash, the target path is assumed to be a folder. For example, if you specify the target as "repo-name/a/b/", then "b" is assumed to be a folder in Artifactory into which files should be moved. If there is no terminal slash, the target path is assumed to be a file to which the moved file should be renamed. For example, if you specify the target as "repo-name/a/b", the moved file is renamed to "b" in Artifactory.

For flexibility in specifying the upload path, you can include placeholders in the form of {1}, {2} which are replaced by corresponding tokens in the source path that are enclosed in parenthesis. For more details, please refer to Using Placeholders.

| -| Command options |

When using the * or ; characters in the copy command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| -| --server-id |

[Optional]
Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| -| --spec |

[Optional]
Path to a file spec. For more details, please refer to Using File Specs.

| -| --props |

[Optional]
A list of Artifactory properties specified as "key=value" pairs separated by a semi-colon (for example, "key1=value1;key2=value2;key3=value3"). Only artifacts with these properties names and values will be moved.

| -| --exclude-props |

[Optional]
A list of Artifactory properties specified as "key=value" pairs separated by a semi-colon (for example, "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be moved.

| -| --build |

[Optional]
If specified, only artifacts of the specified build are matched. The property format is build-name/build-number. If you do not specify the build number, the artifacts are filtered by the latest build number.

| -| --bundle |

[Optional]
If specified, only artifacts of the specified bundle are matched. The value format is bundle-name/bundle-version.

| -| --flat |

[Default: false]
If true, artifacts are moved to the exact target path specified and their hierarchy in the source path is ignored.

If false, artifacts are moved to the target path while maintaining their source path hierarchy.

| -| --recursive |

[Default: true]
If true, artifacts are also moved from sub-paths under the specified source path.

If false, only artifacts in the specified source path directory are moved.

| -| --dry-run |

[Default: false]
If true, the command only indicates which artifacts would have been moved.

If false, the command is fully executed and downloads artifacts as specified.

| -| --exclusions | A list of Semicolon-separated exclude patterns. Allows using wildcards. | -| --threads |

[Default: 3]
Number of threads used for moving the items.

| -| --sort-by |

[Optional]
A list of semicolon-separated fields to sort by. The fields must be part of the 'items' AQL domain. For more information read the AQL documentation

| -| --sort-order |

[Default: asc]
The order by which fields in the 'sort-by' option should be sorted. Accepts 'asc' or 'desc'.

| -| --limit |

[Optional]
The maximum number of items to fetch. Usually used with the 'sort-by' option.

| -| --offset |

[Optional]
The offset from which to fetch items (i.e. how many items should be skipped). Usually used with the 'sort-by' option.

| -| --fail-no-op |

[Default: false]
Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| -| --archive-entries |

[Optional]
If specified, only archive artifacts containing entries matching this pattern are matched. You can use wildcards to specify multiple artifacts.

| -| --insecure-tls |

[Default: false]
Set to true to skip TLS certificates verification.

| -| --retries |

[Default: 3]
Number of HTTP retry attempts.

| -| --retry-wait-time |

[Default: 0s]
Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds.

| +| Command options |

When using the * or ; characters in the copy command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| +| --server-id |

[Optional]
Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| +| --spec |

[Optional]
Path to a file spec. For more details, please refer to Using File Specs.

| +| --props |

[Optional]
A list of Artifactory properties specified as semicolon-separated(;) "key=value" pairs (for example: "key1=value1;key2=value2;key3=value3"). Only artifacts with these properties names and values will be moved.

| +| --exclude-props |

[Optional]
A list of Artifactory properties specified as semicolon-separated(;) "key=value" pairs (for example: "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be moved.

| +| --build |

[Optional]
If specified, only artifacts of the specified build are matched. The property format is build-name/build-number. If you do not specify the build number, the artifacts are filtered by the latest build number.

| +| --bundle |

[Optional]
If specified, only artifacts of the specified bundle are matched. The value format is bundle-name/bundle-version.

| +| --flat |

[Default: false]
If true, artifacts are moved to the exact target path specified and their hierarchy in the source path is ignored.

If false, artifacts are moved to the target path while maintaining their source path hierarchy.

| +| --recursive |

[Default: true]
If true, artifacts are also moved from sub-paths under the specified source path.

If false, only artifacts in the specified source path directory are moved.

| +| --dry-run |

[Default: false]
If true, the command only indicates which artifacts would have been moved.

If false, the command is fully executed and downloads artifacts as specified.

| +| --exclusions | A list of semicolon-separated(;) exclude patterns. Allows using wildcards. | +| --threads |

[Default: 3]
Number of threads used for moving the items.

| +| --sort-by |

[Optional]
A list of semicolon-separated(;) fields to sort by. The fields must be part of the 'items' AQL domain. For more information read the AQL documentation

| +| --sort-order |

[Default: asc]
The order by which fields in the 'sort-by' option should be sorted. Accepts 'asc' or 'desc'.

| +| --limit |

[Optional]
The maximum number of items to fetch. Usually used with the 'sort-by' option.

| +| --offset |

[Optional]
The offset from which to fetch items (i.e. how many items should be skipped). Usually used with the 'sort-by' option.

| +| --fail-no-op |

[Default: false]
Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| +| --archive-entries |

[Optional]
If specified, only archive artifacts containing entries matching this pattern are matched. You can use wildcards to specify multiple artifacts.

| +| --insecure-tls |

[Default: false]
Set to true to skip TLS certificates verification.

| +| --retries |

[Default: 3]
Number of HTTP retry attempts.

| +| --retry-wait-time |

[Default: 0s]
Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds (for example: 10s or 100ms).

| ### Examples #### Example 1 @@ -354,33 +354,33 @@ This command is used to delete files in Artifactory ### Commands Params -| | | -|-------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command name | rt delete | -| Abbreviation | rt del | -| Command arguments |

The command takes one argument which is the delete path.

In case the --spec option is used, the commands accept no arguments.

| -| Delete path | Specifies the path in Artifactory of the files that should be deleted in the following format: `[repository name]/[repository path].` You can use wildcards to specify multiple artifacts. | -| Command options |

When using the * or ; characters in the delete command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| -| --server-id |

[Optional]
Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| -| --spec |

[Optional]
Path to a file spec. For more details, please refer to Using File Specs.

| -| --props |

[Optional]
A list of Artifactory properties specified as "key=value" pairs separated by a semi-colon (for example, "key1=value1;key2=value2;key3=value3"). Only artifacts with these properties names and values will be deleted.

| -| --exclude-props |

[Optional]
A list of Artifactory properties specified as "key=value" pairs separated by a semi-colon (for example, "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be deleted.

| -| --build |

[Optional]
If specified, only artifacts of the specified build are matched. The property format is build-name/build-number. If you do not specify the build number, the artifacts are filtered by the latest build number.

| -| --bundle |

[Optional]
If specified, only artifacts of the specified bundle are matched. The value format is bundle-name/bundle-version.

| -| --recursive |

[Default: true]
If true, artifacts are also deleted from sub-paths under the specified path.

| -| --quiet |

[Default: false]
If true, the delete confirmation message is skipped.

| -| --dry-run |

[Default: false]
If true, the command only indicates which artifacts would have been deleted.

If false, the command is fully executed and deletes artifacts as specified.

| -| --exclusions | A list of Semicolon-separated exclude patterns. Allows using wildcards. | -| --sort-by |

[Optional]
A list of semicolon-separated fields to sort by. The fields must be part of the 'items' AQL domain. For more information read the AQL documentation

| -| --sort-order |

[Default: asc]
The order by which fields in the 'sort-by' option should be sorted. Accepts 'asc' or 'desc'.

| -| --limit |

[Optional]
The maximum number of items to fetch. Usually used with the 'sort-by' option.

| -| --offset |

[Optional]
The offset from which to fetch items (i.e. how many items should be skipped). Usually used with the 'sort-by' option.

| -| --fail-no-op |

[Default: false]
Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| -| --archive-entries |

[Optional]
If specified, only archive artifacts containing entries matching this pattern are matched. You can use wildcards to specify multiple artifacts.

| -| --threads |

[Default: 3]
Number of threads used for deleting the items.

| -| --insecure-tls |

[Default: false]
Set to true to skip TLS certificates verification.

| -| --retries |

[Default: 3]
Number of HTTP retry attempts.

| -| --retry-wait-time |

[Default: 0s]
Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds.--retry-wait-time

| +| | | +|-------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command name | rt delete | +| Abbreviation | rt del | +| Command arguments |

The command takes one argument which is the delete path.

In case the --spec option is used, the commands accept no arguments.

| +| Delete path | Specifies the path in Artifactory of the files that should be deleted in the following format: `[repository name]/[repository path].` You can use wildcards to specify multiple artifacts. | +| Command options |

When using the * or ; characters in the delete command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| +| --server-id |

[Optional]
Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| +| --spec |

[Optional]
Path to a file spec. For more details, please refer to Using File Specs.

| +| --props |

[Optional]
A list of Artifactory properties specified as semicolon-separated(;) "key=value" pairs (for example: "key1=value1;key2=value2;key3=value3"). Only artifacts with these properties names and values will be deleted.

| +| --exclude-props |

[Optional]
A list of Artifactory properties specified as semicolon-separated(;) "key=value" pairs (for example: "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be deleted.

| +| --build |

[Optional]
If specified, only artifacts of the specified build are matched. The property format is build-name/build-number. If you do not specify the build number, the artifacts are filtered by the latest build number.

| +| --bundle |

[Optional]
If specified, only artifacts of the specified bundle are matched. The value format is bundle-name/bundle-version.

| +| --recursive |

[Default: true]
If true, artifacts are also deleted from sub-paths under the specified path.

| +| --quiet |

[Default: false]
If true, the delete confirmation message is skipped.

| +| --dry-run |

[Default: false]
If true, the command only indicates which artifacts would have been deleted.

If false, the command is fully executed and deletes artifacts as specified.

| +| --exclusions | A list of semicolon-separated(;) exclude patterns. Allows using wildcards. | +| --sort-by |

[Optional]
A list of semicolon-separated(;) fields to sort by. The fields must be part of the 'items' AQL domain. For more information read the AQL documentation

| +| --sort-order |

[Default: asc]
The order by which fields in the 'sort-by' option should be sorted. Accepts 'asc' or 'desc'.

| +| --limit |

[Optional]
The maximum number of items to fetch. Usually used with the 'sort-by' option.

| +| --offset |

[Optional]
The offset from which to fetch items (i.e. how many items should be skipped). Usually used with the 'sort-by' option.

| +| --fail-no-op |

[Default: false]
Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| +| --archive-entries |

[Optional]
If specified, only archive artifacts containing entries matching this pattern are matched. You can use wildcards to specify multiple artifacts.

| +| --threads |

[Default: 3]
Number of threads used for deleting the items.

| +| --insecure-tls |

[Default: false]
Set to true to skip TLS certificates verification.

| +| --retries |

[Default: 3]
Number of HTTP retry attempts.

| +| --retry-wait-time |

[Default: 0s]
Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds (for example: 10s or 100ms).

| ### Examples @@ -412,35 +412,35 @@ This command is used to search and display files in Artifactory. ### Commands Params -| | | -|-------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command name | rt search | -| Abbreviation | rt s | -| Command arguments |

The command takes one argument which is the search path.

In case the --spec option is used, the commands accept no arguments.

| -| Search path | Specifies the search path in Artifactory, in the following format: `[repository name]/[repository path].` You can use wildcards to specify multiple artifacts. | -| Command options |

When using the * or ; characters in the command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| -| --server-id |

[Optional]
Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| -| --spec |

[Optional]
Path to a file spec. For more details, please refer to Using File Specs.

| -| --count |

[Optional]
Set to true to display only the total of files or folders found.

| -| --include-dirs |

[Default: false]
Set to true if you'd like to also apply the source path pattern for directories and not only for files

| -| --spec-vars |

[Optional]
List of Semicolon-separated variables in the form of "key1=value1;key2=value2;..." to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| -| --props |

[Optional]
A list of Artifactory properties specified as "key=value" pairs separated by a semi-colon (for example, "key1=value1;key2=value2;key3=value3"). Only artifacts with these properties names and values will be returned.

| -| --exclude-props |

[Optional]
A list of Artifactory properties specified as "key=value" pairs separated by a semi-colon (for example, "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be returned.

| -| --build |

[Optional]
If specified, only artifacts of the specified build are matched. The property format is build-name/build-number. If you do not specify the build number, the artifacts are filtered by the latest build number.

| -| --bundle |

[Optional]
If specified, only artifacts of the specified bundle are matched. The value format is bundle-name/bundle-version.

| -| --recursive |

[Default: true]
Set to false if you do not wish to search artifacts inside sub-folders in Artifactory.

| -| --exclusions | A list of Semicolon-separated exclude patterns. Allows using wildcards. | -| --sort-by |

[Optional]
A list of semicolon-separated fields to sort by. The fields must be part of the 'items' AQL domain. For more information read the AQL documentation

| -| --sort-order |

[Default: asc]
The order by which fields in the 'sort-by' option should be sorted. Accepts 'asc' or 'desc'.

| -| --transitive |

[Optional]
Set to true to look for artifacts also in remote repositories. Available on Artifactory version 7.17.0 or higher.

| -| --limit |

[Optional]
The maximum number of items to fetch. Usually used with the 'sort-by' option.

| -| --offset |

[Optional]
The offset from which to fetch items (i.e. how many items should be skipped). Usually used with the 'sort-by' option.

| -| --fail-no-op |

[Default: false]
Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| -| --archive-entries |

[Optional]
If specified, only archive artifacts containing entries matching this pattern are matched. You can use wildcards to specify multiple artifacts.

| -| --insecure-tls |

[Default: false]
Set to true to skip TLS certificates verification.

| -| --retries |

[Default: 3]
Number of HTTP retry attempts.

| -| --retry-wait-time |

[Default: 0s]
Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds.retry-wait-time

| -| --include |

[Optional]
List of Semicolon-separated fields in the form of "value1;value2;...".
Only the path and the fields that are specified will be returned. The fields must be part of the 'items' AQL domain. for the full supported items list check AQL documentation

| +| | | +|-------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command name | rt search | +| Abbreviation | rt s | +| Command arguments |

The command takes one argument which is the search path.

In case the --spec option is used, the commands accept no arguments.

| +| Search path | Specifies the search path in Artifactory, in the following format: `[repository name]/[repository path].` You can use wildcards to specify multiple artifacts. | +| Command options |

When using the * or ; characters in the command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| +| --server-id |

[Optional]
Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| +| --spec |

[Optional]
Path to a file spec. For more details, please refer to Using File Specs.

| +| --count |

[Optional]
Set to true to display only the total of files or folders found.

| +| --include-dirs |

[Default: false]
Set to true if you'd like to also apply the source path pattern for directories and not only for files

| +| --spec-vars |

[Optional]
List of semicolon-separated(;) variables in the form of "key1=value1;key2=value2;..." to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| +| --props |

[Optional]
A list of Artifactory properties specified as semicolon-separated(;) "key=value" pairs (for example: "key1=value1;key2=value2;key3=value3"). Only artifacts with these properties names and values will be returned.

| +| --exclude-props |

[Optional]
A list of Artifactory properties specified as semicolon-separated(;) "key=value" pairs (for example: "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be returned.

| +| --build |

[Optional]
If specified, only artifacts of the specified build are matched. The property format is build-name/build-number. If you do not specify the build number, the artifacts are filtered by the latest build number.

| +| --bundle |

[Optional]
If specified, only artifacts of the specified bundle are matched. The value format is bundle-name/bundle-version.

| +| --recursive |

[Default: true]
Set to false if you do not wish to search artifacts inside sub-folders in Artifactory.

| +| --exclusions | A list of semicolon-separated(;) exclude patterns. Allows using wildcards. | +| --sort-by |

[Optional]
A list of semicolon-separated(;) fields to sort by. The fields must be part of the 'items' AQL domain. For more information read the AQL documentation

| +| --sort-order |

[Default: asc]
The order by which fields in the 'sort-by' option should be sorted. Accepts 'asc' or 'desc'.

| +| --transitive |

[Optional]
Set to true to look for artifacts also in remote repositories. Available on Artifactory version 7.17.0 or higher.

| +| --limit |

[Optional]
The maximum number of items to fetch. Usually used with the 'sort-by' option.

| +| --offset |

[Optional]
The offset from which to fetch items (i.e. how many items should be skipped). Usually used with the 'sort-by' option.

| +| --fail-no-op |

[Default: false]
Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| +| --archive-entries |

[Optional]
If specified, only archive artifacts containing entries matching this pattern are matched. You can use wildcards to specify multiple artifacts.

| +| --insecure-tls |

[Default: false]
Set to true to skip TLS certificates verification.

| +| --retries |

[Default: 3]
Number of HTTP retry attempts.

| +| --retry-wait-time |

[Default: 0s]
Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds (for example: 10s or 100ms).

| +| --include |

[Optional]
List of semicolon-separated(;) fields in the form of "value1;value2;...".
Only the path and the fields that are specified will be returned. The fields must be part of the 'items' AQL domain. for the full supported items list check AQL documentation

| ### Examples #### Example 1 @@ -478,34 +478,34 @@ This command is used for setting properties on existing files in Artifactory. ### Commands Params -| | | -|-------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command name | rt set-props | -| Abbreviation | rt sp | -| Command arguments |

The command takes two arguments, files pattern and files properties.

In case the --spec option is used, the commands accept no arguments.

| -| Files pattern | Files that match the pattern will be set with the specified properties. | -| Files properties | A list of Semicolon-separated key-values in the form of key1=value1;key2=value2,..., to be set on the matching files. | -| Command options |

When using the * or ; characters in the command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| -| --server-id |

[Optional]
Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| -| --spec |

[Optional]
Path to a file spec. For more details, please refer to Using File Specs.

| -| --spec-vars |

[Optional]
List of Semicolon-separated variables in the form of "key1=value1;key2=value2;..." to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| -| --props |

[Optional]
List of Semicolon-separated properties in the form of "key1=value1;key2=value2,...". Only files with these properties names and values are affected.

| -| --exclude-props |

[Optional]
A list of Artifactory properties specified as "key=value" pairs separated by a semi-colon (for example, "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be affected.

| -| --recursive |

[Default: true]
When false, artifacts inside sub-folders in Artifactory will not be affected.

| -| --build |

[Optional]
If specified, only artifacts of the specified build are matched. The property format is build-name/build-number. If you do not specify the build number, the artifacts are filtered by the latest build number.

| -| --bundle | \[Optional] If specified, only artifacts of the specified bundle are matched. The value format is bundle-name/bundle-version. | -| --include-dirs |

[Default: false]
When true, the properties will also be set on folders (and not just files) in Artifactory.

| -| --fail-no-op |

[Default: false]
Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| -| --exclusions | A list of Semicolon-separated exclude patterns. Allows using wildcards. | -| --sort-by |

[Optional]
A list of semicolon-separated fields to sort by. The fields must be part of the 'items' AQL domain. For more information read the AQL documentation

| -| --sort-order |

[Default: asc]
The order by which fields in the 'sort-by' option should be sorted. Accepts 'asc' or 'desc'.

| -| --limit |

[Optional]
The maximum number of items to fetch. Usually used with the 'sort-by' option.

| -| --offset |

[Optional]
The offset from which to fetch items (i.e. how many items should be skipped). Usually used with the 'sort-by' option.

| -| --archive-entries |

[Optional]
If specified, only archive artifacts containing entries matching this pattern are matched. You can use wildcards to specify multiple artifacts.

| -| --insecure-tls |

[Default: false]
Set to true to skip TLS certificates verification.

| -| --threads |

[Default: 3]
Number of working threads.

| -| --retries |

[Default: 3]
Number of HTTP retry attempts.

| -| --retry-wait-time |

[Default: 0s]
Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds.

| +| | | +|-------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command name | rt set-props | +| Abbreviation | rt sp | +| Command arguments |

The command takes two arguments, files pattern and files properties.

In case the --spec option is used, the commands accept no arguments.

| +| Files pattern | Files that match the pattern will be set with the specified properties. | +| Files properties | A list of semicolon-separated(;) key-values in the form of key1=value1;key2=value2,..., to be set on the matching files. | +| Command options |

When using the * or ; characters in the command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| +| --server-id |

[Optional]
Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| +| --spec |

[Optional]
Path to a file spec. For more details, please refer to Using File Specs.

| +| --spec-vars |

[Optional]
List of semicolon-separated(;) variables in the form of "key1=value1;key2=value2;..." to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| +| --props |

[Optional]
List of semicolon-separated(;) properties in the form of "key1=value1;key2=value2,...". Only files with these properties names and values are affected.

| +| --exclude-props |

[Optional]
A list of Artifactory properties specified as semicolon-separated(;) "key=value" pairs (for example: "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be affected.

| +| --recursive |

[Default: true]
When false, artifacts inside sub-folders in Artifactory will not be affected.

| +| --build |

[Optional]
If specified, only artifacts of the specified build are matched. The property format is build-name/build-number. If you do not specify the build number, the artifacts are filtered by the latest build number.

| +| --bundle | \[Optional] If specified, only artifacts of the specified bundle are matched. The value format is bundle-name/bundle-version. | +| --include-dirs |

[Default: false]
When true, the properties will also be set on folders (and not just files) in Artifactory.

| +| --fail-no-op |

[Default: false]
Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| +| --exclusions | A list of semicolon-separated(;) exclude patterns. Allows using wildcards. | +| --sort-by |

[Optional]
A list of semicolon-separated(;) fields to sort by. The fields must be part of the 'items' AQL domain. For more information read the AQL documentation

| +| --sort-order |

[Default: asc]
The order by which fields in the 'sort-by' option should be sorted. Accepts 'asc' or 'desc'.

| +| --limit |

[Optional]
The maximum number of items to fetch. Usually used with the 'sort-by' option.

| +| --offset |

[Optional]
The offset from which to fetch items (i.e. how many items should be skipped). Usually used with the 'sort-by' option.

| +| --archive-entries |

[Optional]
If specified, only archive artifacts containing entries matching this pattern are matched. You can use wildcards to specify multiple artifacts.

| +| --insecure-tls |

[Default: false]
Set to true to skip TLS certificates verification.

| +| --threads |

[Default: 3]
Number of working threads.

| +| --retries |

[Default: 3]
Number of HTTP retry attempts.

| +| --retry-wait-time |

[Default: 0s]
Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds (for example: 10s or 100ms).

| ### Examples #### Example 1 @@ -559,31 +559,31 @@ This command is used for deleting properties from existing files in Artifactory. ### Commands Params -| | | -|-------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command name | rt delete-props | -| Abbreviation | rt delp | -| Command arguments |

The command takes two arguments, files pattern and properties list.

In case the --spec option is used, the commands accept no arguments.

| -| Files pattern | Specifies the files pattern in the following format: `[repository name]/[repository path].` You can use wildcards to specify multiple repositories and files. | -| Properties list | A comma-separated list of properties, in the form of key1,key2,..., to be deleted from the matching files. | -| Command options |

When using the * or ; characters in the command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| -| --server-id |

[Optional]
Artifactory server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| -| --props |

[Optional]
List of Semicolon-separated properties in the form of "key1=value1;key2=value2,...". Only files with these properties are affected.

| -| --exclude-props |

[Optional]
List of Semicolon-separated Artifactory properties specified as "key=value" (for example, "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be affected.

| -| --recursive |

[Default: true]
When false, artifacts inside sub-folders in Artifactory will not be affected.

| -| --build |

[Optional]
If specified, only artifacts of the specified build are matched. The property format is build-name/build-number. If you do not specify the build number, the artifacts are filtered by the latest build number.

| -| --bundle |

[Optional]
If specified, only artifacts of the specified bundle are matched. The value format is bundle-name/bundle-version.

| -| --include-dirs |

[Default: false]
When true, the properties will also be set on folders (and not just files) in Artifactory.

| -| --fail-no-op |

[Default: false]
Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| -| --exclusions | List of Semicolon-separated exclude patterns. Allows using wildcards. | -| --sort-by |

[Optional]
A list of semicolon-separated fields to sort by. The fields must be part of the 'items' AQL domain. For more information read the AQL documentation

| -| --sort-order |

[Default: asc]
The order by which fields in the 'sort-by' option should be sorted. Accepts 'asc' or 'desc'.

| -| --limit |

[Optional]
The maximum number of items to fetch. Usually used with the 'sort-by' option.

| -| --offset |

[Optional]
The offset from which to fetch items (i.e. how many items should be skipped). Usually used with the 'sort-by' option.

| -| --archive-entries |

[Optional]
If specified, only archive artifacts containing entries matching this pattern are matched. You can use wildcards to specify multiple artifacts.

| -| --insecure-tls |

[Default: false]
Set to true to skip TLS certificates verification.

| -| --retries |

[Default: 3]
Number of HTTP retry attempts.

| -| --retry-wait-time |

[Default: 0s]
Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds.retry-wait-time

| +| | | +|-------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command name | rt delete-props | +| Abbreviation | rt delp | +| Command arguments |

The command takes two arguments, files pattern and properties list.

In case the --spec option is used, the commands accept no arguments.

| +| Files pattern | Specifies the files pattern in the following format: `[repository name]/[repository path].` You can use wildcards to specify multiple repositories and files. | +| Properties list | A comma-separated(,) list of properties, in the form of key1,key2,..., to be deleted from the matching files. | +| Command options |

When using the * or ; characters in the command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| +| --server-id |

[Optional]
Artifactory server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| +| --props |

[Optional]
List of semicolon-separated(;) properties in the form of "key1=value1;key2=value2,...". Only files with these properties are affected.

| +| --exclude-props |

[Optional]
List of semicolon-separated(;) Artifactory properties specified as "key=value" (for example: "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be affected.

| +| --recursive |

[Default: true]
When false, artifacts inside sub-folders in Artifactory will not be affected.

| +| --build |

[Optional]
If specified, only artifacts of the specified build are matched. The property format is build-name/build-number. If you do not specify the build number, the artifacts are filtered by the latest build number.

| +| --bundle |

[Optional]
If specified, only artifacts of the specified bundle are matched. The value format is bundle-name/bundle-version.

| +| --include-dirs |

[Default: false]
When true, the properties will also be set on folders (and not just files) in Artifactory.

| +| --fail-no-op |

[Default: false]
Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| +| --exclusions | List of semicolon-separated(;) exclude patterns. Allows using wildcards. | +| --sort-by |

[Optional]
A list of semicolon-separated(;) fields to sort by. The fields must be part of the 'items' AQL domain. For more information read the AQL documentation

| +| --sort-order |

[Default: asc]
The order by which fields in the 'sort-by' option should be sorted. Accepts 'asc' or 'desc'.

| +| --limit |

[Optional]
The maximum number of items to fetch. Usually used with the 'sort-by' option.

| +| --offset |

[Optional]
The offset from which to fetch items (i.e. how many items should be skipped). Usually used with the 'sort-by' option.

| +| --archive-entries |

[Optional]
If specified, only archive artifacts containing entries matching this pattern are matched. You can use wildcards to specify multiple artifacts.

| +| --insecure-tls |

[Default: false]
Set to true to skip TLS certificates verification.

| +| --retries |

[Default: 3]
Number of HTTP retry attempts.

| +| --retry-wait-time |

[Default: 0s]
Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds (for example: 10s or 100ms).

| ### Examples diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/managing-configuration-entities.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/managing-configuration-entities.md index 854ab86..031ec27 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/managing-configuration-entities.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/managing-configuration-entities.md @@ -27,7 +27,7 @@ The CSV can include additional columns, with different headers, which will be ig | --server-id |

[Optional]
Artifactory server ID configured using the config command.

| | --csv |

[Mandatory]
Path to a CSV file with the users' details. The first row of the file should include the name,password,email headers.

| | --replace |

[Optional]
Set to true if you'd like existing users or groups to be replaced.

| -| --users-groups |

[Optional]
A list of comma-separated groups for the new users to be associated to.

| +| --users-groups |

[Optional]
A list of comma-separated(,) groups for the new users to be associated to.

| | Command arguments | The command accepts no arguments | ### Example @@ -63,7 +63,7 @@ The CSV can include additional columns, with different headers, which will be ig | --server-id |

[Optional]
Artifactory server ID configured using the config command.

| | --csv |

[Optional]
Path to a csv file with the usernames to delete. The first row of the file is the reserved for the cells' headers. It must include the "username" header.

| | Command arguments | | -| users list | Comma-separated list of usernames to delete. If the --csv command option is used, then this argument becomes optional. | +| users list | comma-separated(,) list of usernames to delete. If the --csv command option is used, then this argument becomes optional. | ### Examples #### Example 1 @@ -198,15 +198,15 @@ These two commands create a new repository and updates an existing a repository. #### Commands Params -| | | -|-------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command-name | rt repo-create / rt repo-update | -| Abbreviation | rt rc / rt ru | -| Command options | | -| --server-id |

[Optional]
Artifactory server ID configured using the config command.

| -| --vars |

[Optional]
List of Semicolon-separated variables in the form of "key1=value1;key2=value2;..." to be replaced in the template. In the template, the variables should be used as follows: ${key1}.

| -| Command arguments | | -| template path | Specifies the local file system path for the template file to be used for the repository creation. The template can be created using the "jf rt rpt" command. | +| | | +|-------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | rt repo-create / rt repo-update | +| Abbreviation | rt rc / rt ru | +| Command options | | +| --server-id |

[Optional]
Artifactory server ID configured using the config command.

| +| --vars |

[Optional]
List of semicolon-separated(;) variables in the form of "key1=value1;key2=value2;..." to be replaced in the template. In the template, the variables should be used as follows: ${key1}.

| +| Command arguments | | +| template path | Specifies the local file system path for the template file to be used for the repository creation. The template can be created using the "jf rt rpt" command. | #### Examples ##### Example 1 @@ -287,7 +287,7 @@ Select replication job type (press Tab for options): push Enter source repo key > ${source} Enter target repo key > ${target} Enter target server id (press Tab for options): my-server-id -Enter cron expression for frequency (for example, 0 0 12 * * ? will replicate daily) > 0 0 12 * * ? +Enter cron expression for frequency (for example: 0 0 12 * * ? will replicate daily) > 0 0 12 * * ? You can type ":x" at any time to save and exit. Select the next property > :x [Info] Replication creation config template successfully created at template.json. @@ -302,15 +302,15 @@ This command creates a new replication job for a repository. The command accepts #### Commands Params -| | | -|-------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command-name | replication-create | -| Abbreviation | rt rplc | -| Command options | | -| --server-id |

[Optional]
Artifactory server ID configured using the config command.

| -| --vars |

[Optional]
List of Semicolon-separated variables in the form of "key1=value1;key2=value2;..." to be replaced in the template. In the template, the variables should be used as follows: ${key1}.

| -| Command arguments | | -| template path | Specifies the local file system path for the template file to be used for the replication job creation. The template can be created using the "jf rt rplt" command. | +| | | +|-------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | replication-create | +| Abbreviation | rt rplc | +| Command options | | +| --server-id |

[Optional]
Artifactory server ID configured using the config command.

| +| --vars |

[Optional]
List of semicolon-separated(;) variables in the form of "key1=value1;key2=value2;..." to be replaced in the template. In the template, the variables should be used as follows: ${key1}.

| +| Command arguments | | +| template path | Specifies the local file system path for the template file to be used for the replication job creation. The template can be created using the "jf rt rplt" command. | #### Examples ##### Example 1 @@ -373,17 +373,17 @@ This command creates a configuration template file, which will be used as an arg These commands create/update a permission target. The commands accept as an argument a configuration template, which should be created by the **jf rt permission-target-template** command beforehand. The template also supports variables, which can be replaced with values, provided when it is used. -| | | -|-------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command-name | permission-target-create / permission-target-update | -| Abbreviation | rt ptc / rt ptu | -| Command arguments | | -| template path | Specifies the local file system path for the template file to be used for the permission target creation or update. The template should be created using the "jf rt ptt" command. | -| Command-name | permission-target-create / permission-target-update | -| Abbreviation | rt ptc / rt ptu | -| Command options | | -| --server-id |

[Optional]
Artifactory server ID configured using the config command.

| -| --vars |

[Optional]
List of Semicolon-separated variables in the form of "key1=value1;key2=value2;..." to be replaced in the template. In the template, the variables should be used as follows: ${key1}.

| +| | | +|-------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | permission-target-create / permission-target-update | +| Abbreviation | rt ptc / rt ptu | +| Command arguments | | +| template path | Specifies the local file system path for the template file to be used for the permission target creation or update. The template should be created using the "jf rt ptt" command. | +| Command-name | permission-target-create / permission-target-update | +| Abbreviation | rt ptc / rt ptu | +| Command options | | +| --server-id |

[Optional]
Artifactory server ID configured using the config command.

| +| --vars |

[Optional]
List of semicolon-separated(;) variables in the form of "key1=value1;key2=value2;..." to be replaced in the template. In the template, the variables should be used as follows: ${key1}.

| ### Deleting Permission Targets diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/package-managers-integration.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/package-managers-integration.md index 0f4bb3d..9f24880 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/package-managers-integration.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/package-managers-integration.md @@ -9,23 +9,23 @@ JFrog CLI includes integration with Maven, allowing you to resolve dependencies Before using the **jf mvn** command, the project needs to be pre-configured with the Artifactory server and repositories, to be used for building and publishing the project. The **jf mvn-config** command should be used once to add the configuration to the project. The command should run while inside the root directory of the project. The configuration is stored by the command in the **.jfrog** directory at the root directory of the project. -| | | -|--------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command-name | mvn-config | -| Abbreviation | mvnc | -| Command options | | -| --global |

[Optional]
Set to true, if you'd like the configuration to be global (for all projects on the machine). Specific projects can override the global configuration.

| -| --server-id-resolve |

[Optional]
Server ID for resolution. The server should configured using the 'jf rt c' command.

| -| --server-id-deploy |

[Optional]
Server ID for deployment. The server should be configured using the 'jf rt c' command.

| -| --repo-resolve-releases |

[Optional]
Resolution repository for release dependencies.

| -| --repo-resolve-snapshots |

[Optional]
Resolution repository for snapshot dependencies.

| -| --repo-deploy-releases |

[Optional]
Deployment repository for release artifacts.

| -| --repo-deploy-snapshots |

[Optional]
Deployment repository for snapshot artifacts.

| -| --include-patterns |

[Optional]
Filter deployed artifacts by setting a wildcard pattern that specifies which artifacts to include. You may provide multiple patterns separated by a comma followed by a white-space. For example

artifact-.jar, artifact-.pom

| -| --exclude-patterns |

[Optional]
Filter deployed artifacts by setting a wildcard pattern that specifies which artifacts to exclude. You may provide multiple patterns separated by a comma followed by a white-space. For example

artifact--test.jar, artifact--test.pom

| -| --scan |

[Default: false]
Set if you'd like all files to be scanned by Xray on the local file system prior to the upload, and skip the upload if any of the files are found vulnerable.

| -| --format |

[Default: table]
Should be used with the --scan option. Defines the scan output format. Accepts table or json as values.

| -| Command arguments | The command accepts no arguments | +| | | +|--------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | mvn-config | +| Abbreviation | mvnc | +| Command options | | +| --global |

[Optional]
Set to true, if you'd like the configuration to be global (for all projects on the machine). Specific projects can override the global configuration.

| +| --server-id-resolve |

[Optional]
Server ID for resolution. The server should configured using the 'jf rt c' command.

| +| --server-id-deploy |

[Optional]
Server ID for deployment. The server should be configured using the 'jf rt c' command.

| +| --repo-resolve-releases |

[Optional]
Resolution repository for release dependencies.

| +| --repo-resolve-snapshots |

[Optional]
Resolution repository for snapshot dependencies.

| +| --repo-deploy-releases |

[Optional]
Deployment repository for release artifacts.

| +| --repo-deploy-snapshots |

[Optional]
Deployment repository for snapshot artifacts.

| +| --include-patterns |

[Optional]
Filter deployed artifacts by setting a wildcard pattern that specifies which artifacts to include. You may provide multiple comma-separated(,) patterns followed by a white-space. For example

artifact-.jar, artifact-.pom

| +| --exclude-patterns |

[Optional]
Filter deployed artifacts by setting a wildcard pattern that specifies which artifacts to exclude. You may provide multiple comma-separated(,) followed by a white-space. For example

artifact--test.jar, artifact--test.pom

| +| --scan |

[Default: false]
Set if you'd like all files to be scanned by Xray on the local file system prior to the upload, and skip the upload if any of the files are found vulnerable.

| +| --format |

[Default: table]
Should be used with the --scan option. Defines the scan output format. Accepts table or json as values.

| +| Command arguments | The command accepts no arguments | ### Running maven @@ -966,7 +966,7 @@ The following table lists the commands arguments and options: | --namespace |

[Mandatory]
Terraform module namespace

| | --provider |

[Mandatory]
Terraform module provider

| | --tag |

[Mandatory]
Terraform module tag

| -| --exclusions |

[Optional]
A list of Semicolon-separated exclude patterns wildcards. Paths inside the module matching one of the patterns are excluded from the deployed package.

| +| --exclusions |

[Optional]
A list of semicolon-separated(;) exclude patterns wildcards. Paths inside the module matching one of the patterns are excluded from the deployed package.

| | --build-name |

[Optional]
Build name. For more details, please refer to Build Integration.

| | --build-number |

[Optional]
Build number. For more details, please refer to Build Integration.

| | --project | | diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/release-lifecycle-management.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/release-lifecycle-management.md index 0a08ca5..f41206a 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/release-lifecycle-management.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/release-lifecycle-management.md @@ -94,20 +94,20 @@ The file spec may be of one of the following creation sources: ### Commands Params -| | | -|------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command-name | release-bundle-create | -| Abbreviation | rbc | -| Command arguments | | -| release bundle name | Name of the newly created Release Bundle. | -| release bundle version | Version of the newly created Release Bundle. | -| Command options | | -| --project |

[Optional]
Project key associated with the created Release Bundle version.

| -| --server-id |

[Optional]
Platform server ID configured using the config command.

| -| --signing-key |

[Mandatory]
The GPG/RSA key-pair name given in Artifactory.

| -| --spec |

[Optional]
Path to a File Spec.

| -| --spec-vars |

[Optional]
List of Semicolon-separated variables in the form of "key1=value1;key2=value2;..." (wrapped by quotes) to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| -| --sync |

[Default: false]
Set to true to run synchronously.

| | +| | | +|------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | release-bundle-create | +| Abbreviation | rbc | +| Command arguments | | +| release bundle name | Name of the newly created Release Bundle. | +| release bundle version | Version of the newly created Release Bundle. | +| Command options | | +| --project |

[Optional]
Project key associated with the created Release Bundle version.

| +| --server-id |

[Optional]
Platform server ID configured using the config command.

| +| --signing-key |

[Mandatory]
The GPG/RSA key-pair name given in Artifactory.

| +| --spec |

[Optional]
Path to a File Spec.

| +| --spec-vars |

[Optional]
List of semicolon-separated(;) variables in the form of "key1=value1;key2=value2;..." (wrapped by quotes) to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| +| --sync |

[Default: false]
Set to true to run synchronously.

| | ### Examples #### Example 1 @@ -140,21 +140,21 @@ This command allows promoting a release bundle to a target environment. ### Commands Params -| | | -|------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command-name | release-bundle-promote | -| Abbreviation | rbp | -| Command arguments | | -| release bundle name | Name of the Release Bundle to promote. | -| release bundle version | Version of the Release Bundle to promote. | -| environment | Name of the target environment for the promotion. | -| Command options | | -| --input-repos |

[Optional]
A list of semicolon-separated repositories to include in the promotion. If this property is left undefined, all repositories (except those specifically excluded) are included in the promotion. If one or more repositories are specifically included, all other repositories are excluded.

| -| --exclude-repos |

[Optional]
A list of semicolon-separated repositories to exclude from the promotion.

| -| --project |

[Optional]
Project key associated with the Release Bundle version.

| -| --server-id |

[Optional]
Platform server ID configured using the config command.

| -| --signing-key |

[Mandatory]
The GPG/RSA key-pair name given in Artifactory.

| -| --sync |

[Default: false]
Set to true to run synchronously.

| | +| | | +|------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | release-bundle-promote | +| Abbreviation | rbp | +| Command arguments | | +| release bundle name | Name of the Release Bundle to promote. | +| release bundle version | Version of the Release Bundle to promote. | +| environment | Name of the target environment for the promotion. | +| Command options | | +| --input-repos |

[Optional]
A list of semicolon-separated(;) repositories to include in the promotion. If this property is left undefined, all repositories (except those specifically excluded) are included in the promotion. If one or more repositories are specifically included, all other repositories are excluded.

| +| --exclude-repos |

[Optional]
A list of semicolon-separated(;) repositories to exclude from the promotion.

| +| --project |

[Optional]
Project key associated with the Release Bundle version.

| +| --server-id |

[Optional]
Platform server ID configured using the config command.

| +| --signing-key |

[Mandatory]
The GPG/RSA key-pair name given in Artifactory.

| +| --sync |

[Default: false]
Set to true to run synchronously.

| | ### Examples #### Example 1 @@ -202,7 +202,7 @@ This command distributes a release bundle to an edge node. | release bundle version | Version of the release bundle to distribute. | | Command options | | | --city |

[Default: *]
Wildcard filter for site city name.

| -| --country-codes |

[Default: *]
Semicolon-separated list of wildcard filters for site country codes.

| +| --country-codes |

[Default: *]
semicolon-separated(;) list of wildcard filters for site country codes.

| | --create-repo |

[Default: false]
Set to true to create the repository on the edge if it does not exist.

| | --dist-rules |

[Optional]
Path to a file, which includes the Distribution Rules in a JSON format. See the "Distribution Rules Structure" bellow.

| | --dry-run |

[Default: false]
Set to true to disable communication with JFrog Distribution.

| @@ -319,7 +319,7 @@ This command will delete distributions of a release bundle from edge nodes. | release bundle version | Version of the release bundle to distribute. | | Command options | | | --city |

[Default: *]
Wildcard filter for site city name.

| -| --country-codes |

[Default: *]
Semicolon-separated list of wildcard filters for site country codes.

| +| --country-codes |

[Default: *]
semicolon-separated(;) list of wildcard filters for site country codes.

| | --dist-rules |

[Optional]
Path to a file, which includes the Distribution Rules in a JSON format. See the "Distribution Rules Structure" bellow.

| | --dry-run |

[Default: false]
Set to true to disable communication with JFrog Distribution.

| | --max-wait-minutes |

[Default: 60]
Max minutes to wait for sync distribution.

| diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-cloud-transfer.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-cloud-transfer.md index b27ba20..5b90103 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-cloud-transfer.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-cloud-transfer.md @@ -95,9 +95,9 @@ To set up the source instance, you must install the data-transfer user plugin in 1. Install JFrog CLI on the primary node machine of the source instance as described [here](#installing-jfrog-cli-on-the-source-instance-machine). 2. Configure the connection details of the source Artifactory instance with your admin credentials by running the following command from the terminal. -```sh -jf c add source-server -``` + ```sh + jf c add source-server + ``` 3. Ensure that the **JFROG\_HOME** environment variable is set and holds the value of the JFrog installation directory. It usually points to the **/opt/jfrog** directory. In case the variable isn't set, set its value to point to the correct directory as described in the JFrog Product Directory Structure article.System Directories @@ -132,21 +132,21 @@ jf rt transfer-plugin-install source-server --dir "" 1. Install JFrog CLI on the source instance machine as described [here](#installing-jfrog-cli-on-the-source-instance-machine). 2. Configure the connection details of the source Artifactory instance with your admin credentials by running the following command from the terminal. -```sh -jf c add source-server -``` + ```sh + jf c add source-server + ``` 3. Configure the connection details of the target Artifactory server with your admin credentials by running the following command from the terminal. -```sh -jf c add target-server -``` + ```sh + jf c add target-server + ``` 4. Run the following command to verify that the target URLs of all the remote repositories are accessible from the target. -```sh -jf rt transfer-config source-server target-server --prechecks -``` + ```sh + jf rt transfer-config source-server target-server --prechecks + ``` If the command output shows that a target URL isn't accessible for any of the repositories, you'll need to make the URL accessible before proceeding to transfer the config. You can then rerun the command to ensure that the URLs are accessible. @@ -160,9 +160,9 @@ If the command output shows that a target URL isn't accessible for any of the re 5. Transfer the configuration from the source to the target by running the following command. -```sh -jf rt transfer-config source-server target-server -``` + ```sh + jf rt transfer-config source-server target-server + ``` This command might take up to two minutes to run. @@ -175,12 +175,12 @@ This command might take up to two minutes to run. 6. View the command output in the terminal to verify that there are no errors. The command output is divided into the following four phases: -``` -========== Phase 1/4 - Preparations ========== -========== Phase 2/4 - Export configuration from the source Artifactory ========== -========== Phase 3/4 - Download and modify configuration ========== -========== Phase 4/4 - Import configuration to the target Artifactory ========== -``` + ``` + ========== Phase 1/4 - Preparations ========== + ========== Phase 2/4 - Export configuration from the source Artifactory ========== + ========== Phase 3/4 - Download and modify configuration ========== + ========== Phase 4/4 - Import configuration to the target Artifactory ========== + ``` 7. View the log to verify there are no errors.\ ![](../.gitbook/assets/transfer-3.png) @@ -202,9 +202,9 @@ Disabling the configuration transfer might take some time. 1. Install JFrog CLI on any machine that has access to both the source and the target JFrog instances. To do this, follow the steps described [here](#installing-jfrog-cli-on-a-machine-with-network-access-to-the-source-and-target-machines). 2. Run the following command to start pushing the files from all the repositories in the source instance to the target instance. -```sh -jf rt transfer-files source-server target-server -``` + ```sh + jf rt transfer-files source-server target-server + ``` This command may take a few days to push all the files, depending on your system size and your network speed. While the command is running, It displays the transfer progress visually inside the terminal. \ ![](../.gitbook/assets/transfer-4.png) @@ -428,27 +428,27 @@ By default, files that are larger than 25 GB will be blocked by the JFrog Cloud 1. Run the following curl command from your terminal, after replacing the ``, `` and `` tokens with your source instance details. The command execution may take a few minutes, depending on the number of files hosted by Artifactory. -```sh -curl -X POST /artifactory/api/search/aql -H "Content-Type: text/plain" -d 'items.find({"name" : {"$match":"\*"}}).include("size").sort({"$desc" : \["size"\]}).limit(1)' -u : -``` + ```sh + curl -X POST /artifactory/api/search/aql -H "Content-Type: text/plain" -d 'items.find({"name" : {"$match":"\*"}}).include("size").sort({"$desc" : \["size"\]}).limit(1)' -u : + ``` 2. You should get a result that looks like the following. -```json - { - "results":[ - { - "size":132359021 + ```json + { + "results":[ + { + "size":132359021 + } + ], + "range":{ + "start_pos":0, + "end_pos":1, + "total":1, + "limit":1 } - ], - "range":{ - "start_pos":0, - "end_pos":1, - "total":1, - "limit":1 - } - } -``` -The value of **size** represents the largest file size hosted by your source Artifactory instance. + } + ``` + The value of **size** represents the largest file size hosted by your source Artifactory instance. 3. If the size value you received is larger than 25000000000, please avoid initiating the files transfer before contacting JFrog Support, to check whether this size limit can be increased for you. You can contact Support by sending an email to [support@jfrog.com](mailto:support@jfrog.com) diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-curation.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-curation.md index f88293a..b8f185e 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-curation.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-curation.md @@ -41,7 +41,7 @@ Before running the command, do the following: | **Abbreviation** | ca | | **Command options** | | | --format |

[Default: table]
Defines the output format of the command. Acceptable values are: table and json.

| -| --working-dirs |

[Optional]
A comma separated list of relative working directories, to determine the audit targets locations.

| +| --working-dirs |

[Optional]
A comma-separated(,) list of relative working directories, to determine the audit targets locations.

| | --threads |

[Default: 10]
The number of parallel threads used to determine the curation status for each package in the project tree.

| diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-distribution.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-distribution.md index fa12d0f..ab58c5c 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-distribution.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-distribution.md @@ -41,7 +41,7 @@ This commands creates and updates an unsigned Release Bundle on JFrog Distributi | Command options | | | --server-id |

[Optional]
Artifactory server ID configured using the config command.

| | --spec |

[Optional]
Path to a file spec. For more details, please refer to Using File Specs.

| -| --spec-vars |

[Optional]
List of Semicolon-separated variables in the form of "key1=value1;key2=value2;..." to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| +| --spec-vars |

[Optional]
List of semicolon-separated(;) variables in the form of "key1=value1;key2=value2;..." to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| | --target-props |

[Optional]
The list of properties, in the form of key1=value1;key2=value2,..., to be added to the artifacts after distribution of the release bundle.

| | --target |

[Optional]
The target path for distributed artifacts on the edge node. If not specified, the artifacts will have the same path and name on the edge node, as on the source Artifactory server. For flexibility in specifying the distribution path, you can include placeholders in the form of {1}, {2} which are replaced by corresponding tokens in the pattern path that are enclosed in parenthesis.

| | --dry-run |

[Default: false]
Set to true to disable communication with JFrog Distribution.

| @@ -50,7 +50,7 @@ This commands creates and updates an unsigned Release Bundle on JFrog Distributi | --desc |

[Optional]
Description of the release bundle.

| | --release-notes-path |

[Optional]
Path to a file describes the release notes for the release bundle version.

| | --release-notes-syntax |

[Default: plain_text]
The syntax for the release notes. Can be one of markdown, asciidoc, or plain_text.

| -| --exclusions |

[Optional]
A list of Semicolon-separated exclude path patterns, to be excluded from the Release Bundle. Allows using wildcards.

| +| --exclusions |

[Optional]
A list of semicolon-separated(;) exclude path patterns, to be excluded from the Release Bundle. Allows using wildcards.

| | --repo |

[Optional]
A repository name at source Artifactory to store release bundle artifacts in. If not provided, Artifactory will use the default one.

| | --insecure-tls |

[Default: false]
Set to true to skip TLS certificates verification.

| | --detailed-summary |

[Default: false]
Set to true to return the SHA256 value of the release bundle manifest.

| @@ -229,7 +229,7 @@ This command distributes a release bundle to the Edge Nodes. | --dist-rules |

[Optional]
Path to a file, which includes the Distribution Rules in a JSON format.

Distribution Rules JSON structure

{
"distribution_rules": [
{
"site_name": "DC-1",
"city_name": "New-York",
"country_codes": ["1"]
},
{
"site_name": "DC-2",
"city_name": "Tel-Aviv",
"country_codes": ["972"]
}
]
}

The Distribution Rules format also supports wildcards. For example:

{
"distribution_rules": [
{
"site_name": "",
"city_name": "",
"country_codes": ["*"]
}
]
}

| | --site |

[Default: *]
Wildcard filter for site name.

| | --city |

[Default: *]
Wildcard filter for site city name.

| -| --country-codes |

[Default: *]
Semicolon-separated list of wildcard filters for site country codes.

| +| --country-codes |

[Default: *]
semicolon-separated(;) list of wildcard filters for site country codes.

| | --insecure-tls |

[Default: false]
Set to true to skip TLS certificates verification.

| | Command arguments | | | release bundle name | The name of the release bundle. | @@ -270,7 +270,7 @@ This command deletes a Release Bundle from the Edge Nodes and optionally from Di | --dist-rules |

[Optional]
Path to a file, which includes the distribution rules in a JSON format.

| | --site |

[Default: *]
Wildcard filter for site name.

| | --city |

[Default: *]
Wildcard filter for site city name.

| -| --country-codes |

[Default: *]
Semicolon-separated list of wildcard filters for site country codes.

| +| --country-codes |

[Default: *]
semicolon-separated(;) list of wildcard filters for site country codes.

| | --delete-from-dist |

[Default: false]
Set to true to delete release bundle version in JFrog Distribution itself after deletion is complete in the specified Edge nodes.

| | --quiet |

[Default: false]
Set to true to skip the delete confirmation message.

| | --insecure-tls |

[Default: false]
Set to true to skip TLS certificates verification.

| diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-binaries.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-binaries.md index 4563bb2..1a42567 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-binaries.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-binaries.md @@ -28,7 +28,7 @@ This _**jf scan**_ command scans files on the local file system with Xray. | --spec |

[Optional]
Path to a file specifying the files to scan. If the pattern argument is provided to the command, this option should not be provided.

| | --project |

[Optional]
JFrog project key, to enable Xray to determine security violations accordingly. The command accepts this option only if the --repo-path and --watches options are not provided. If none of the three options are provided, the command will show all known vulnerabilities.

| | --repo-path |

[Optional]
Artifactory repository path in the form of <repository>/<path in the repository>, to enable Xray to determine violations accordingly. The command accepts this option only if the --project and --watches options are not provided. If none of the three options are provided, the command will show all known vulnerabilities.

| -| --watches |

[Optional]
A comma-separated list of Xray watches, to enable Xray to determine violations accordingly. The command accepts this option only if the --project and --repo-path options are not provided. If none of the three options are provided, the command will show all known vulnerabilities.

| +| --watches |

[Optional]
A comma-separated(,) list of Xray watches, to enable Xray to determine violations accordingly. The command accepts this option only if the --project and --repo-path options are not provided. If none of the three options are provided, the command will show all known vulnerabilities.

| | --licenses |

[Default: false]
Set if you also require the list of licenses to be displayed.

| | --format=json |

[Optional]
Produces a JSON file containing the scan results.

| | **Command arguments** | | @@ -107,7 +107,7 @@ This j\_**f docker scan**\_ command scans docker containers located on the local | --server-id |

[Optional]
Server ID configured using the jf c add command. If not specified, the default configured server is used.

| | --project |

[Optional]
JFrog project key, to enable Xray to determine security violations accordingly. The command accepts this option only if the --repo-path and --watches options are not provided. If none of the three options are provided, the command will show all known vulnerabilities.

| | --repo-path |

[Optional]
Artifactory repository path in the form of <repository>/<path in the repository>, to enable Xray to determine violations accordingly. The command accepts this option only if the --project and --watches options are not provided. If none of the three options are provided, the command will show all known vulnerabilities.

| -| --watches |

[Optional]
A comma separated list of Xray watches, to enable Xray to determine violations accordingly. The command accepts this option only if the --repo-path and --repo-path options are not provided. If none of the three options are provided, the command will show all known vulnerabilities.

| +| --watches |

[Optional]
A comma-separated(,) list of Xray watches, to enable Xray to determine violations accordingly. The command accepts this option only if the --repo-path and --repo-path options are not provided. If none of the three options are provided, the command will show all known vulnerabilities.

| | --licenses |

[Default: false]
Set if you also require the list of licenses to be displayed.

| | --format=json |

[Optional]
Produces a JSON file containing the scan results.

| | **Command arguments** | | diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-source-code.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-source-code.md index dadb422..d790ce2 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-source-code.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-source-code.md @@ -43,7 +43,7 @@ This command also supports the following Advanced Scans with the **Advanced Secu | --server-id |

[Optional]
Server ID configured using the jf c add command. If not specified, the default configured server is used.

| | --project |

[Optional]
JFrog project key, to enable Xray to determine security violations accordingly. The command accepts this option only if the --repo-path and --watches options are not provided. If none of the three options are provided, the command will show all known vulnerabilities

| | --repo-path |

[Optional]
Artifactory repository path in the form of <repository>/<path in the repository>, to enable Xray to determine violations accordingly. The command accepts this option only if the --project and --watches options are not provided. If none of the three options are provided, the command will show all known vulnerabilities

| -| --watches |

[Optional]
A comma-separated list of Xray watches, to enable Xray to determine violations accordingly. The command accepts this option only if the --repo-path and --repo-path options are not provided. If none of the three options are provided, the command will show all known vulnerabilities

| +| --watches |

[Optional]
A comma-separated(,) list of Xray watches, to enable Xray to determine violations accordingly. The command accepts this option only if the --repo-path and --repo-path options are not provided. If none of the three options are provided, the command will show all known vulnerabilities

| | --licenses |

[Default: false]
Set if you'd also like the list of licenses to be displayed.

| | --format |

[Default: table]
Defines the output format of the command. Acceptable values are: table and json.

| | --fail |

[Default: true]
Set to false if you do not wish the command to return exit code 3, even if the 'Fail Build' rule is matched by Xray.

| @@ -51,8 +51,8 @@ This command also supports the following Advanced Scans with the **Advanced Secu | --dep-type |

[Default: all] [npm]
Defines npm dependencies type. Possible values are: all, devOnly and prodOnly

| | --exclude-test-deps |

[Default: false] [Gradle]
Set to true if you'd like to exclude Gradle test dependencies from Xray scanning.

| | --requirements-file |

[Optional] [Pip]
Defines pip requirements file name. For example: 'requirements.txt'

| -| --working-dirs |

[Optional]
A comma-separated list of relative working directories, to determine the audit targets locations.

If flag isn't provided, a recursive scan is triggered from the root directory of the project. | -| --exclusions |

[Default: *.git*;*node_modules*;*target*;*venv*;*test*]
List of Semicolon-separated exclusions, utilized to skip sub-projects from undergoing an audit. These exclusions may incorporate the * and ? wildcards.

| +| --working-dirs |

[Optional]
A comma-separated(,) list of relative working directories, to determine the audit targets locations.

If flag isn't provided, a recursive scan is triggered from the root directory of the project. | +| --exclusions |

[Default: *.git*;*node_modules*;*target*;*venv*;*test*]
List of semicolon-separated(;) exclusions, utilized to skip sub-projects from undergoing an audit. These exclusions may incorporate the * and ? wildcards.

| | --fixable-only |

[Optional]
Set to true if you wish to display issues that have a fix version only.

| | --min-severity |

[Optional]
Set the minimum severity of issues to display. The following values are accepted: Low, Medium, High or Critical

| | --go |

[Default: false]
Set to true to request audit for a Go project.

| diff --git a/jfrog-applications/jfrog-cli/get-started/configurations/jfrog-platform-configuration.md b/jfrog-applications/jfrog-cli/get-started/configurations/jfrog-platform-configuration.md index a2e5aac..d968c2d 100644 --- a/jfrog-applications/jfrog-cli/get-started/configurations/jfrog-platform-configuration.md +++ b/jfrog-applications/jfrog-cli/get-started/configurations/jfrog-platform-configuration.md @@ -10,7 +10,7 @@ This command is solely interactive, meaning it does not receive any options and ## Creating Access Tokens -This command allows creating [Access Tokens](https://jfrog.com/help/r/jfrog-platform-administration-documentation/access-tokens) for users in the JFrog Platform. By default, an user-scoped token will be created. Administrators may provide the scope explicitly with '--scope', or implicitly with '--groups', '--grant-admin'. +This command allows creating [Access Tokens](https://jfrog.com/help/r/jfrog-platform-administration-documentation/access-tokens) for users in the JFrog Platform. By default, a user-scoped token will be created. Administrators may provide the scope explicitly with '--scope', or implicitly with '--groups', '--grant-admin'. ### Commands Params @@ -25,7 +25,7 @@ This command allows creating [Access Tokens](https://jfrog.com/help/r/jfrog-plat | --description |

[Optional]

Free text token description. Useful for filtering and managing tokens. Limited to 1024 characters.

| | --expiry |

[Optional]

The amount of time, in seconds, it would take for the token to expire. Must be non-negative. If not provided, the platform default will be used. To specify a token that never expires, set to zero. Non-admin may only set a value that is equal or lower than the platform default that was set by an administrator (1 year by default).

| | --grant-admin |

[Default: false]

Set to true to provide admin privileges to the access token. This is only available for administrators.

| -| --groups |

[Optional]

A list of comma-separated groups for the access token to be associated with. This is only available for administrators.

| +| --groups |

[Optional]

A list of comma-separated(,) groups for the access token to be associated with. This is only available for administrators.

| | --project |

[Optional]

The project for which this token is created. Enter the project name on which you want to apply this token.

| | --reference |

[Default: false]

Generate a Reference Token (alias to Access Token) in addition to the full token (available from Artifactory 7.38.10).

| | --refreshable |

[Default: false]

Set to true if you'd like the token to be refreshable. A refresh token will also be returned in order to be used to generate a new token once it expires.

| diff --git a/jfrog-applications/jfrog-cli/get-started/configurations/proxy-support.md b/jfrog-applications/jfrog-cli/get-started/configurations/proxy-support.md index 260dfd2..a12de1e 100644 --- a/jfrog-applications/jfrog-cli/get-started/configurations/proxy-support.md +++ b/jfrog-applications/jfrog-cli/get-started/configurations/proxy-support.md @@ -4,8 +4,8 @@ JFrog CLI supports using an HTTP/S proxy. All you need to do is set HTTP\_PROXY HTTP\_PROXY, HTTPS\_PROXY and NO\_PROXY are the industry standards for proxy usages. -| Variable Name | Description | -|---------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| HTTP\_PROXY | Determines a URL to an HTTP proxy. | -| HTTPS\_PROXY | Determines a URL to an HTTPS proxy. | -| NO\_PROXY | Use this variable to bypass the proxy to IP addresses, subnets or domains. This may contain a comma-separated list of hostnames or IPs without protocols and ports. A typical usage may be to set this variable to Artifactory’s IP address. | +| Variable Name | Description | +|---------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| HTTP\_PROXY | Determines a URL to an HTTP proxy. | +| HTTPS\_PROXY | Determines a URL to an HTTPS proxy. | +| NO\_PROXY | Use this variable to bypass the proxy to IP addresses, subnets or domains. This may contain a comma-separated(,) list of hostnames or IPs without protocols and ports. A typical usage may be to set this variable to Artifactory’s IP address. | From 3b5f6ea4d0598709d818e11e3ce57eb41aacbc87 Mon Sep 17 00:00:00 2001 From: Asaf Ambar Date: Sun, 21 Apr 2024 16:25:27 +0300 Subject: [PATCH 11/57] add curation support for Maven and Pip (#93) --- .../jfrog-cli/cli-for-jfrog-curation.md | 77 +++++++++++++------ 1 file changed, 53 insertions(+), 24 deletions(-) diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-curation.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-curation.md index b8f185e..b0cb15c 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-curation.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-curation.md @@ -2,47 +2,75 @@ ## Overview -JFrog Curation enables you to block malicious or risky open-source packages entering your software supply chain. What can you do with Curation? +JFrog Curation defends your software supply chain, enabling early blocking of malicious or risky open-source packages before they even enter. Seamlessly identify harmful, vulnerable, or risky packages, ensuring increased security, compliance, and developer productivity. -* Track the open-source packages downloaded by your organization to gain centralized visibility and control. -* Prevent harmful packages from getting into your software development pipelines. -* Protect against known and unknown threats, allowing only trusted software packages into your SDLC. -* Create policies to block packages with known vulnerabilities, malicious code, operational risk, or license compliance issues. +For more information see: https://jfrog.com/curation/ -For more information on JFrog Curation and how to set it up, see the [JFrog Curation](https://jfrog.com/help/r/jfrog-curation/jfrog-curation-overview) general documentation. +"The 'curation-audit' is a JFrog CLI command designed for developers to scan their projects and identify third-party dependencies that violate the restrictions set by the Curation service. This command provides detailed insights into the specific package policies that are being violated, leading to their blockage by the Curation service. Additionally, when feasible, 'curation-audit' may suggest alternative versions of the packages that comply with the Curation policies." -JFrog Curation requires [Xray version 3.78.9](https://jfrog.com/help/r/jfrog-release-information/xray-3.78.9) and above, and [Artifactory version 7.63.5](https://jfrog.com/help/r/jfrog-release-information/artifactory-7.63) and above. It also requires Enterprise X and Enterprise + subscriptions. +## Supported package managers & build systems +For a full list of the package managers and build systems supported by the curation-audit command and the required Artifactory and Xray versions to use it please see: https://jfrog.com/help/r/jfrog-curation/curation-support-matrix + +curation-audit command supported package managers and build systems: +* Npm (npm) +* Maven (mvn) - Requires xray 3.92 and above, and Artifactory 7.82 and above +* Pip (pip) - Requires xray 3.92 and above, and Artifactory 7.82 and above *** ### Commands -Audit your Project with JFrog Curation +Audit your Project with JFrog CLI curation-audit command + +### Setup: + +Prerequisites: + +Make sure your JFrog Artifactory admin configured the curated remote repository you are using during your build process. For more information refer your Artifactory admin to: +https://jfrog.com/help/r/jfrog-curation/configure-curation-pass-through + +1. **Connect JFrog CLI to JFrog Platform** -**Note** + Connect the JFrog CLI to your JFrog Platform instance by running the following command: -> The **curation-audit** command currently only supports npm projects. + ``` + jf c add + ``` -The **jf curation-audit** command enables developers to scan project dependencies to find packages that were blocked by the JFrog curation service. This command provides developers with more detailed information, such as whether the blocked package is the project’s direct dependency or is a transitive dependency. This information helps developers to resolve blocked packages more efficiently as they will be able to make a more informative decision based on what Policy violation occurred and what exactly needs to be resolved. + - When prompted for the access token, use the token generated from Artifactory. For more details, refer to the [adding and editing configured servers documentation](https://docs.jfrog-applications.jfrog.io/jfrog-applications/jfrog-cli/configurations/jfrog-platform-configuration#adding-and-editing-configured-servers). -For each blocked package the CLI provides the violated Curation Policies. The command builds a deep dependencies graph for the project, and requests the Curation status by a HEAD request for each node in the tree. It uses the package manager that is used in the project to build the dependencies graph. + ``` + jf c show + ``` -Before running the command, do the following: + - It should present Artifactory server just added (with default true) +

+2. **Configure JFrog CLI for Project**
+ Ensure your project is configured in the JFrog CLI with the repository you would like to resolve dependencies from. Here are details for each package manager: -1. Connect the JFrog CLI to your JFrog Platform instance by running the **jf c add** command. -2. Ensure your project is configured in the JFrog CLI with the repository you would like to resolve dependencies from. Set the repository with the **jf npmc** command inside the project directory.\ - \\ + - **NPM:** + + - Set the resolved repository using the [**jf npmc**](https://docs.jfrog-applications.jfrog.io/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/package-managers-integration#setting-npm-repositories) command inside the project directory. + + - **MAVEN:** + + - Set the resolved repository using the [**jf mvnc**](https://docs.jfrog-applications.jfrog.io/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/package-managers-integration#setting-maven-repositories) command inside the project directory. + + - **PIP:** + + - Set the resolved repository using the [**jf pipc**](https://docs.jfrog-applications.jfrog.io/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/package-managers-integration#setting-python-repository) command inside the project directory (The only package installer supported for now by Python is "pip"). #### Commands Params -| | | -|---------------------|------------------------------------------------------------------------------------------------------------------------------------| -| **Command name** | curation-audit | -| **Abbreviation** | ca | -| **Command options** | | -| --format |

[Default: table]
Defines the output format of the command. Acceptable values are: table and json.

| -| --working-dirs |

[Optional]
A comma-separated(,) list of relative working directories, to determine the audit targets locations.

| -| --threads |

[Default: 10]
The number of parallel threads used to determine the curation status for each package in the project tree.

| +| | | +| ------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | +| **Command name** | curation-audit | +| **Abbreviation** | ca | +| **Command options** | | +| --format |

[Default: table]

Defines the output format of the command. Acceptable values are: table and json.

| +| --working-dirs |

[Optional]

A comma separated list of relative working directories, to determine the audit targets locations.

| +| --threads |

[Default: 10]

The number of parallel threads used to determine the curation status for each package in the project tree.

| +| --requirements-file |

[Optional] [Pip]

Defines pip requirements file name. For example: 'requirements.txt'

| #### Example 1 @@ -68,3 +96,4 @@ Curation-Audit the project in the current directory using 5 threads to check the ``` jf curation-audit --threads=5 ``` + From aef3e352b653ec799b02af7ae3d95cbed3d765b9 Mon Sep 17 00:00:00 2001 From: Assaf Attias <49212512+attiasas@users.noreply.github.com> Date: Thu, 25 Apr 2024 16:08:06 +0300 Subject: [PATCH 12/57] update fail flag description for scan cmd (#118) --- .../jfrog-cli/cli-for-jfrog-security/scan-published-builds.md | 2 +- .../jfrog-cli/cli-for-jfrog-security/scan-your-source-code.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-published-builds.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-published-builds.md index 5ce956e..509b949 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-published-builds.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-published-builds.md @@ -13,7 +13,7 @@ JFrog CLI is integrated with JFrog Xray and JFrog Artifactory, allowing you to h | Command options | | | --server-id |

[Optional]
Server ID configured by the jf c add command. If not specified, the default configured server is used.

| | --vuln |

[Optional]
Set if you'd like to receive all vulnerabilities, regardless of the policy configured in Xray.

| -| --fail |

[Default: true]
When set, the command returns exit code 3 if a 'Fail Build' rule is matched by Xray.
Set to false if you do not wish the command to return exit code 3 in such case, and an exit code 0 will be returned.

| +| --fail |

[Default: true]
When using one of the flags --watches, --project or --repo-path and a Fail build rule is matched the command will return exit code 3. Set to false if you'd like to see violations with exit code 0.

| | --format |

[Default: table]
Defines the output format of the command. The accepted values are: table and json.

| | --project |

[Optional]
JFrog project key

| | --rescan |

[Default: false]
Set to true when scanning an already successfully scanned build, for example after adding an ignore rule.

| diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-source-code.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-source-code.md index d790ce2..040024d 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-source-code.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-source-code.md @@ -46,7 +46,7 @@ This command also supports the following Advanced Scans with the **Advanced Secu | --watches |

[Optional]
A comma-separated(,) list of Xray watches, to enable Xray to determine violations accordingly. The command accepts this option only if the --repo-path and --repo-path options are not provided. If none of the three options are provided, the command will show all known vulnerabilities

| | --licenses |

[Default: false]
Set if you'd also like the list of licenses to be displayed.

| | --format |

[Default: table]
Defines the output format of the command. Acceptable values are: table and json.

| -| --fail |

[Default: true]
Set to false if you do not wish the command to return exit code 3, even if the 'Fail Build' rule is matched by Xray.

| +| --fail |

[Default: true]
When using one of the flags --watches, --project or --repo-path and a Fail build rule is matched the command will return exit code 3. Set to false if you'd like to see violations with exit code 0.

| | --use-wrapper |

[Default: false] [Gradle]
Set to true if you'd like to use the Gradle wrapper.

| | --dep-type |

[Default: all] [npm]
Defines npm dependencies type. Possible values are: all, devOnly and prodOnly

| | --exclude-test-deps |

[Default: false] [Gradle]
Set to true if you'd like to exclude Gradle test dependencies from Xray scanning.

| From f792717e5cfcb1ef52d3abcb6d517e036f3a78db Mon Sep 17 00:00:00 2001 From: "Craig E. Shea" Date: Tue, 30 Apr 2024 11:04:27 -0400 Subject: [PATCH 13/57] docs: Add package type for remote repository creation (#120) --- .../ci-and-sdks/ci-integrations/github-actions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jfrog-applications/ci-and-sdks/ci-integrations/github-actions.md b/jfrog-applications/ci-and-sdks/ci-integrations/github-actions.md index 13e828e..a3bcbaa 100644 --- a/jfrog-applications/ci-and-sdks/ci-integrations/github-actions.md +++ b/jfrog-applications/ci-and-sdks/ci-integrations/github-actions.md @@ -128,7 +128,7 @@ It is also possible to set the latest JFrog CLI version by adding the _version_ ### Downloading JFrog CLI from Artifactory -If your agent has no Internet access, you can configure the workflow to download JFrog CLI from a [remote repository](https://www.jfrog.com/confluence/display/JFROG/Remote+Repositories) in your JFrog Artifactory, which is configured to proxy the official download URL. +If your agent has no Internet access, you can configure the workflow to download JFrog CLI from a [remote repository](https://www.jfrog.com/confluence/display/JFROG/Remote+Repositories) in your JFrog Artifactory, which is configured to proxy the official download URL. When creating the remote repository, select the Generic package type for the repository. Here's how you do this: From cc2153911c4f992e16afbe972b95def22cdafaab Mon Sep 17 00:00:00 2001 From: Eran Turgeman <81029514+eranturgeman@users.noreply.github.com> Date: Thu, 2 May 2024 10:21:36 +0300 Subject: [PATCH 14/57] Updating docs about JF_GIT_TOKEN issue (#122) --- .../frogbot/setup-frogbot-using-github-actions.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/jfrog-applications/frogbot/setup-frogbot-using-github-actions.md b/jfrog-applications/frogbot/setup-frogbot-using-github-actions.md index 409c40a..86245fe 100644 --- a/jfrog-applications/frogbot/setup-frogbot-using-github-actions.md +++ b/jfrog-applications/frogbot/setup-frogbot-using-github-actions.md @@ -5,8 +5,13 @@ * Go to your repository's **settings** tab and save the JFrog connection details as repository secrets with the following names: * **JF\_URL** (JFrog Platform URL - Example: `https://acme.jfrog.io`) * **JF\_ACCESS\_TOKEN** (JFrog access token) + * **JF\_GIT\_TOKEN** (GitHub access token - Read note below) > You can also use **JF\_XRAY\_URL** and **JF\_ARTIFACTORY\_URL** instead of **JF\_URL**, and **JF\_USER** + **JF\_PASSWORD** instead of **JF\_ACCESS\_TOKEN** +> +> You can utilize [${{secrets.GITHUB_TOKEN}}](https://docs.github.com/en/actions/security-guides/automatic-token-authentication) for **JF_GIT_TOKEN**, which is an automatically generated token by GitHub. +> However, this option comes with a limitation: a workflow, such as Frogbot itself, cannot trigger another workflow. Consequently, if you have additional workflows intended to activate upon the creation of a new pull request, they might not be initiated. +> To resolve this issue, you can generate a [personal access token](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens) and use it as JF_GIT_TOKEN. ![](../.gitbook/assets/github-repository-secrets.png) @@ -16,7 +21,7 @@ * For open-source projects: Create a new [GitHub environment](https://docs.github.com/en/actions/deployment/targeting-different-environments/using-environments-for-deployment#creating-an-environment) called **frogbot** and add people or public teams as reviewers. The chosen reviewers can trigger Frogbot scans on pull requests. -![](../../../.gitbook/assets/github-environment.png) +![](../.gitbook/assets/github-environment.png) ### Frogbot GitHub Action Templates From 87f076c44665b90d6c521c1248eebf27eda1dd0e Mon Sep 17 00:00:00 2001 From: Robi Nino Date: Wed, 8 May 2024 15:38:34 +0300 Subject: [PATCH 15/57] Transfer documentation improvement --- .../jfrog-cli/cli-for-jfrog-cloud-transfer.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-cloud-transfer.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-cloud-transfer.md index 5b90103..b98db5a 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-cloud-transfer.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-cloud-transfer.md @@ -46,8 +46,9 @@ The following limitations need to be kept in mind before you start the migration 6. Federated repositories are transferred without their federation members. After the transfer, you'll need to reconfigure the federation as described in the Federated Repositories documentation. Federated Repositories 7. Docker repositories with names that include dots or underscores aren't allowed in JFrog Cloud. 8. Artifact properties with a value longer than 2.4K characters are not supported in JFrog Cloud. Such properties are generally seen in Conan artifacts. The artifacts will be transferred without the properties in this case. A report with these artifacts will become available to you at the end of the transfer. -9. The files transfer process allows transferring files that were created or modified on the source instance after the process started. However, files that were deleted on the source instance after the process started, are not deleted on the target instance by the process. -10. The files transfer process allows transferring files that were created or modified on the source instance after the process started. The custom properties of those files are also updated on the target instance. However, if only the custom properties of those files were modified on the source, but not the files' content, the properties are not modified on the target instance by the process. +9. The files transfer process allows transferring files that were created or modified on the source instance after the process started. However: + 1. Files that were deleted on the source instance after the process started, are not deleted on the target instance by the process. + 2. The custom properties of those files are also updated on the target instance. However, if only the custom properties of those files were modified on the source, but not the files' content, the properties are not modified on the target instance by the process. ### Before you begin @@ -316,7 +317,7 @@ In case you'd like to ignore the stored state, and restart the file transfer fro ### Installing JFrog CLI on a machine with network access to the source and target machines -Unlike the transfer-config command, which should be run from the primary note machines of Artifactory, it is recommended to run the transfer-files command from a machine that has network access to the source Artifactory URL. This allows the spreading the transfer load on all the Artifactory cluster nodes. This machine should also have network access to the target Artifactory URL. +Unlike the transfer-config command, which should be run from the primary node machines of Artifactory, it is recommended to run the transfer-files command from a machine that has network access to the source Artifactory URL. This allows the spreading the transfer load on all the Artifactory cluster nodes. This machine should also have network access to the target Artifactory URL. Follow these steps to install JFrog CLI on that machine. From 3ba126c2b16b617cab6a84c74dd21614b420371c Mon Sep 17 00:00:00 2001 From: Michael Sverdlov Date: Wed, 15 May 2024 15:31:39 +0300 Subject: [PATCH 16/57] Update CLI docs (#124) --- .../build-integration.md | 8 +- .../environment-variables.md | 2 +- .../generic-files.md | 14 +-- .../managing-configuration-entities.md | 98 +++++++++---------- .../package-managers-integration.md | 38 +++---- .../release-lifecycle-management.md | 30 +++--- .../verifying-artifactory-accessibility.md | 2 +- .../jfrog-cli/cli-for-jfrog-curation.md | 6 +- .../jfrog-cli/cli-for-jfrog-distribution.md | 10 +- .../download-updates-for-xrays-database.md | 6 +- .../scan-published-builds.md | 26 ++--- .../scan-your-source-code.md | 4 +- .../jfrog-platform-configuration.md | 12 +-- .../get-started/download-and-install/usage.md | 2 +- 14 files changed, 129 insertions(+), 129 deletions(-) diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/build-integration.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/build-integration.md index e301821..0357c68 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/build-integration.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/build-integration.md @@ -161,7 +161,7 @@ By default, the command collects the files from the local file system. If you'd | Pattern | Specifies the local file system path to dependencies which should be added to the build info. You can specify multiple dependencies by using wildcards or a regular expression as designated by the --regexp command option. If you have specified that you are using regular expressions, then the first one used in the argument must be enclosed in parenthesis. | | Command options |

When using the * or ; characters in the command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| | --from-rt |

[Default: false]
Set to true to search the files in Artifactory, rather than on the local file system. The --regexp option is not supported when --from-rt is set to true.

| -| --server-id |

[Optional]
Server ID configured using the config command.

| +| --server-id |

[Optional]
Server ID configured using the 'jf config' command.

| | --spec |

[Optional]
Path to a File Spec.

| | --spec-vars |

[Optional]
List of semicolon-separated(;) variables in the form of "key1=value1;key2=value2;..." to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| | --recursive |

[Default: true]
When false, artifacts inside sub-folders in Artifactory will not be affected.

| @@ -215,7 +215,7 @@ For example, the following command publishes all the build-info collected for bu | Build name | Build name to be published. | | Build number | Build number to be published. | | Command options | | -| --server-id |

[Optional]
Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| +| --server-id |

[Optional]
Server ID configured using the 'jf config' command. If not specified, the default configured Artifactory server is used.

| | --project |

[Optional]
JFrog project key.

| | --build-url |

[Optional]
Can be used for setting the CI server build URL in the build-info.

| | --env-include |

[Default: *]
List of semicolon-separated(;) patterns in the form of "value1;value2;..." Only environment variables that match those patterns will be included in the build info.

| @@ -332,7 +332,7 @@ This command is used to [promote build](https://jfrog.com/knowledge-base/how-doe | Build number | Build number to be promoted. | | Target repository | Build promotion target repository. | | Command options | | -| --server-id |

[Optional]
Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| +| --server-id |

[Optional]
Server ID configured using the 'jf config' command. If not specified, the default configured Artifactory server is used.

| | --project |

[Optional]
JFrog project key.

| | --status |

[Optional]
Build promotion status.

| | --comment |

[Optional]
Build promotion comment.

| @@ -400,7 +400,7 @@ The following table lists the command arguments and flags: | Command arguments | The command accepts one argument. | | Build name | Build name. | | Command options | | -| --server-id |

[Optional]
Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| +| --server-id |

[Optional]
Server ID configured using the 'jf config' command. If not specified, the default configured Artifactory server is used.

| | --max-days |

[Optional]
The maximum number of days to keep builds in Artifactory.

| | --max-builds |

[Optional]
The maximum number of builds to store in Artifactory.

| | --exclude-builds |

[Optional]
List of comma-separated(,) build numbers in the form of "build1,build2,...", that should not be removed from Artifactory.

| diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/environment-variables.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/environment-variables.md index d0f71d8..fa609b5 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/environment-variables.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/environment-variables.md @@ -10,7 +10,7 @@ Some of the Artifactory commands make use of the following environment variable: | **JFROG\_CLI\_RELEASES\_REPO** |

Configured Artifactory repository name to download the jar needed by the mvn/gradle command.
This environment variable's value format should be <server ID configured by the 'jf c add' command>/<repo name>.
The repository should proxy https://releases.jfrog.io.
This environment variable is used by the 'jf mvn' and 'jf gradle' commands, and also by the 'jf audit' command, when used for maven or gradle projects.

| | **JFROG\_CLI\_DEPENDENCIES\_DIR** |

[Default: $JFROG_CLI_HOME_DIR/dependencies]
Defines the directory to which JFrog CLI's internal dependencies are downloaded.

| | **JFROG\_CLI\_REPORT\_USAGE** |

[Default: true]
Set to false to block JFrog CLI from sending usage statistics to Artifactory.

| -| **JFROG\_CLI\_SERVER\_ID** | Server ID configured using the config command, unless sent as a command argument or option. | +| **JFROG\_CLI\_SERVER\_ID** | Server ID configured using the 'jf config' command, unless sent as a command argument or option. | | **JFROG\_CLI\_BUILD\_NAME** | Build name to be used by commands which expect a build name, unless sent as a command argument or option. | | **JFROG\_CLI\_BUILD\_NUMBER** | Build number to be used by commands which expect a build number, unless sent as a command argument or option. | | **JFROG\_CLI\_BUILD\_PROJECT** | JFrog project key to be used by commands that expect build name and build number. Determines the project of the published build. | diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/generic-files.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/generic-files.md index 4bdaeb9..3b3b01b 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/generic-files.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/generic-files.md @@ -129,7 +129,7 @@ This command is used to download files from Artifactory. | Source path | Specifies the source path in Artifactory, from which the artifacts should be downloaded. You can use wildcards to specify multiple artifacts. | | Target path |

The second argument is optional and specifies the local file system target path.

If the target path ends with a slash, the path is assumed to be a directory. For example, if you specify the target as "repo-name/a/b/", then "b" is assumed to be a directory into which files should be downloaded. If there is no terminal slash, the target path is assumed to be a file to which the downloaded file should be renamed. For example, if you specify the target as "a/b", the downloaded file is renamed to "b".

For flexibility in specifying the target path, you can include placeholders in the form of {1}, {2} which are replaced by corresponding tokens in the source path that are enclosed in parenthesis. For more details, please refer to Using Placeholders.

| | Command options |

When using the * or ; characters in the download command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| -| --server-id |

[Optional]
Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| +| --server-id |

[Optional]
Server ID configured using the 'jf config' command. If not specified, the default configured Artifactory server is used.

| | --build-name |

[Optional]
Build name. For more details, please refer to Build Integration.

| | --build-number |

[Optional]
Build number. For more details, please refer to Build Integration.

| | --project |

[Optional]
JFrog project key.

| @@ -218,7 +218,7 @@ This command is used to copy files in Artifactory | Source path | Specifies the source path in Artifactory, from which the artifacts should be copied, in the following format: `[repository name]/[repository path].` You can use wildcards to specify multiple artifacts. | | Target path |

Specifies the target path in Artifactory, to which the artifacts should be copied, in the following format: [repository name]/[repository path]

By default the Target Path maintains the source path hierarchy, see --flat flag for more info. If the pattern ends with a slash, the target path is assumed to be a folder. For example, if you specify the target as "repo-name/a/b/", then "b" is assumed to be a folder in Artifactory into which files should be copied. If there is no terminal slash, the target path is assumed to be a file to which the copied file should be renamed. For example, if you specify the target as "repo-name/a/b", the copied file is renamed to "b" in Artifactory.

For flexibility in specifying the target path, you can include placeholders in the form of {1}, {2} which are replaced by corresponding tokens in the source path that are enclosed in parenthesis. For more details, please refer to Using Placeholders.

| | Command options |

When using the * or ; characters in the copy command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| -| --server-id |

[Optional]
Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| +| --server-id |

[Optional]
Server ID configured using the 'jf config' command. If not specified, the default configured Artifactory server is used.

| | --spec |

[Optional]
Path to a file spec. For more details, please refer to Using File Specs.

| | --props |

[Optional]
A list of Artifactory properties specified as semicolon-separated(;) "key=value" pairs. (for example: "key1=value1;key2=value2;key3=value3"). Only artifacts with these properties names and values will be copied.

| | --exclude-props |

[Optional]
A list of Artifactory properties specified as semicolon-separated(;) "key=value" pairs (for example: "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be copied.

| @@ -290,7 +290,7 @@ This command is used to move files in Artifactory | Source path | Specifies the source path in Artifactory, from which the artifacts should be moved, in the following format: `[repository name]/[repository path].` You can use wildcards to specify multiple artifacts. | | Target path |

Specifies the target path in Artifactory, to which the artifacts should be moved, in the following format: [repository name]/[repository path]

By default the Target Path maintains the source path hierarchy, see --flat flag for more info. If the pattern ends with a slash, the target path is assumed to be a folder. For example, if you specify the target as "repo-name/a/b/", then "b" is assumed to be a folder in Artifactory into which files should be moved. If there is no terminal slash, the target path is assumed to be a file to which the moved file should be renamed. For example, if you specify the target as "repo-name/a/b", the moved file is renamed to "b" in Artifactory.

For flexibility in specifying the upload path, you can include placeholders in the form of {1}, {2} which are replaced by corresponding tokens in the source path that are enclosed in parenthesis. For more details, please refer to Using Placeholders.

| | Command options |

When using the * or ; characters in the copy command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| -| --server-id |

[Optional]
Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| +| --server-id |

[Optional]
Server ID configured using the 'jf config' command. If not specified, the default configured Artifactory server is used.

| | --spec |

[Optional]
Path to a file spec. For more details, please refer to Using File Specs.

| | --props |

[Optional]
A list of Artifactory properties specified as semicolon-separated(;) "key=value" pairs (for example: "key1=value1;key2=value2;key3=value3"). Only artifacts with these properties names and values will be moved.

| | --exclude-props |

[Optional]
A list of Artifactory properties specified as semicolon-separated(;) "key=value" pairs (for example: "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be moved.

| @@ -361,7 +361,7 @@ This command is used to delete files in Artifactory | Command arguments |

The command takes one argument which is the delete path.

In case the --spec option is used, the commands accept no arguments.

| | Delete path | Specifies the path in Artifactory of the files that should be deleted in the following format: `[repository name]/[repository path].` You can use wildcards to specify multiple artifacts. | | Command options |

When using the * or ; characters in the delete command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| -| --server-id |

[Optional]
Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| +| --server-id |

[Optional]
Server ID configured using the 'jf config' command. If not specified, the default configured Artifactory server is used.

| | --spec |

[Optional]
Path to a file spec. For more details, please refer to Using File Specs.

| | --props |

[Optional]
A list of Artifactory properties specified as semicolon-separated(;) "key=value" pairs (for example: "key1=value1;key2=value2;key3=value3"). Only artifacts with these properties names and values will be deleted.

| | --exclude-props |

[Optional]
A list of Artifactory properties specified as semicolon-separated(;) "key=value" pairs (for example: "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be deleted.

| @@ -419,7 +419,7 @@ This command is used to search and display files in Artifactory. | Command arguments |

The command takes one argument which is the search path.

In case the --spec option is used, the commands accept no arguments.

| | Search path | Specifies the search path in Artifactory, in the following format: `[repository name]/[repository path].` You can use wildcards to specify multiple artifacts. | | Command options |

When using the * or ; characters in the command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| -| --server-id |

[Optional]
Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| +| --server-id |

[Optional]
Server ID configured using the 'jf config' command. If not specified, the default configured Artifactory server is used.

| | --spec |

[Optional]
Path to a file spec. For more details, please refer to Using File Specs.

| | --count |

[Optional]
Set to true to display only the total of files or folders found.

| | --include-dirs |

[Default: false]
Set to true if you'd like to also apply the source path pattern for directories and not only for files

| @@ -486,7 +486,7 @@ This command is used for setting properties on existing files in Artifactory. | Files pattern | Files that match the pattern will be set with the specified properties. | | Files properties | A list of semicolon-separated(;) key-values in the form of key1=value1;key2=value2,..., to be set on the matching files. | | Command options |

When using the * or ; characters in the command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| -| --server-id |

[Optional]
Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| +| --server-id |

[Optional]
Server ID configured using the 'jf config' command. If not specified, the default configured Artifactory server is used.

| | --spec |

[Optional]
Path to a file spec. For more details, please refer to Using File Specs.

| | --spec-vars |

[Optional]
List of semicolon-separated(;) variables in the form of "key1=value1;key2=value2;..." to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| | --props |

[Optional]
List of semicolon-separated(;) properties in the form of "key1=value1;key2=value2,...". Only files with these properties names and values are affected.

| @@ -567,7 +567,7 @@ This command is used for deleting properties from existing files in Artifactory. | Files pattern | Specifies the files pattern in the following format: `[repository name]/[repository path].` You can use wildcards to specify multiple repositories and files. | | Properties list | A comma-separated(,) list of properties, in the form of key1,key2,..., to be deleted from the matching files. | | Command options |

When using the * or ; characters in the command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| -| --server-id |

[Optional]
Artifactory server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| +| --server-id |

[Optional]
Artifactory Server ID configured using the 'jf config' command. If not specified, the default configured Artifactory server is used.

| | --props |

[Optional]
List of semicolon-separated(;) properties in the form of "key1=value1;key2=value2,...". Only files with these properties are affected.

| | --exclude-props |

[Optional]
List of semicolon-separated(;) Artifactory properties specified as "key=value" (for example: "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be affected.

| | --recursive |

[Default: true]
When false, artifacts inside sub-folders in Artifactory will not be affected.

| diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/managing-configuration-entities.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/managing-configuration-entities.md index 031ec27..152f63e 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/managing-configuration-entities.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/managing-configuration-entities.md @@ -24,7 +24,7 @@ The CSV can include additional columns, with different headers, which will be ig | Command-name | rt users-create | | Abbreviation | rt uc | | Command options | | -| --server-id |

[Optional]
Artifactory server ID configured using the config command.

| +| --server-id |

[Optional]
Artifactory Server ID configured using the 'jf config' command.

| | --csv |

[Mandatory]
Path to a CSV file with the users' details. The first row of the file should include the name,password,email headers.

| | --replace |

[Optional]
Set to true if you'd like existing users or groups to be replaced.

| | --users-groups |

[Optional]
A list of comma-separated(,) groups for the new users to be associated to.

| @@ -60,7 +60,7 @@ The CSV can include additional columns, with different headers, which will be ig | Command-name | rt users-delete | | Abbreviation | rt udel | | Command options | | -| --server-id |

[Optional]
Artifactory server ID configured using the config command.

| +| --server-id |

[Optional]
Artifactory Server ID configured using the 'jf config' command.

| | --csv |

[Optional]
Path to a csv file with the usernames to delete. The first row of the file is the reserved for the cells' headers. It must include the "username" header.

| | Command arguments | | | users list | comma-separated(,) list of usernames to delete. If the --csv command option is used, then this argument becomes optional. | @@ -88,14 +88,14 @@ This command creates a new users group. ### Commands Params -| | | -|-------------------|---------------------------------------------------------------------------------| -| Command-name | rt group-create | -| Abbreviation | rt gc | -| Command options | | -| --server-id |

[Optional]
Artifactory server ID configured using the config command.

| -| Command arguments | | -| group name | The name of the group to create. | +| | | +|-------------------|--------------------------------------------------------------------------------------| +| Command-name | rt group-create | +| Abbreviation | rt gc | +| Command options | | +| --server-id |

[Optional]
Artifactory Server ID configured using the 'jf config' command.

| +| Command arguments | | +| group name | The name of the group to create. | ### Example @@ -111,15 +111,15 @@ This command adds a list fo existing users to a group. ### Commands Params -| | | -|-------------------|---------------------------------------------------------------------------------| -| Command-name | rt group-add-users | -| Abbreviation | rt gau | -| Command options | | -| --server-id |

[Optional]
Artifactory server ID configured using the config command.

| -| Command arguments | | -| group name | The name of the group to add users to. | -| users list | Comma-seperated list of usernames to add to the specified group. | +| | | +|-------------------|--------------------------------------------------------------------------------------| +| Command-name | rt group-add-users | +| Abbreviation | rt gau | +| Command options | | +| --server-id |

[Optional]
Artifactory Server ID configured using the 'jf config' command.

| +| Command arguments | | +| group name | The name of the group to add users to. | +| users list | Comma-seperated list of usernames to add to the specified group. | ### Example @@ -135,14 +135,14 @@ This command deletes a group. ### Commands Params -| | | -|-------------------|---------------------------------------------------------------------------------| -| Command-name | rt group-delete | -| Abbreviation | rt gdel | -| Command options | | -| --server-id |

[Optional]
Artifactory server ID configured using the config command.

| -| Command arguments | | -| group name | The name of the group to delete. | +| | | +|-------------------|--------------------------------------------------------------------------------------| +| Command-name | rt group-delete | +| Abbreviation | rt gdel | +| Command options | | +| --server-id |

[Optional]
Artifactory Server ID configured using the 'jf config' command.

| +| Command arguments | | +| group name | The name of the group to delete. | ### Example @@ -203,7 +203,7 @@ These two commands create a new repository and updates an existing a repository. | Command-name | rt repo-create / rt repo-update | | Abbreviation | rt rc / rt ru | | Command options | | -| --server-id |

[Optional]
Artifactory server ID configured using the config command.

| +| --server-id |

[Optional]
Artifactory Server ID configured using the 'jf config' command.

| | --vars |

[Optional]
List of semicolon-separated(;) variables in the form of "key1=value1;key2=value2;..." to be replaced in the template. In the template, the variables should be used as follows: ${key1}.

| | Command arguments | | | template path | Specifies the local file system path for the template file to be used for the repository creation. The template can be created using the "jf rt rpt" command. | @@ -244,7 +244,7 @@ This command permanently deletes a repository, including all of its content. | Command name | rt repo-delete | | Abbreviation | rt rdel | | Command options | | -| --server-id |

[Optional]
Artifactory server ID configured using the config command.

| +| --server-id |

[Optional]
Artifactory Server ID configured using the 'jf config' command.

| | --quiet |

[Default: $CI]
Set to true to skip the delete confirmation message.

| | Command arguments | | | repository key | Specifies the repositories that should be removed. You can use wildcards to specify multiple repositories. | @@ -307,7 +307,7 @@ This command creates a new replication job for a repository. The command accepts | Command-name | replication-create | | Abbreviation | rt rplc | | Command options | | -| --server-id |

[Optional]
Artifactory server ID configured using the config command.

| +| --server-id |

[Optional]
Artifactory Server ID configured using the 'jf config' command.

| | --vars |

[Optional]
List of semicolon-separated(;) variables in the form of "key1=value1;key2=value2;..." to be replaced in the template. In the template, the variables should be used as follows: ${key1}.

| | Command arguments | | | template path | Specifies the local file system path for the template file to be used for the replication job creation. The template can be created using the "jf rt rplt" command. | @@ -335,15 +335,15 @@ This command permanently deletes a replication jobs from a repository. #### Commands Params -| | | -|-------------------|---------------------------------------------------------------------------------| -| Command name | rt replication-delete | -| Abbreviation | rt rpldel | -| Command options | | -| --server-id |

[Optional]
Artifactory server ID configured using the config command.

| -| --quiet |

[Default: $CI]
Set to true to skip the delete confirmation message.

| -| Command arguments | | -| repository key | The repository from which the replications will be deleted. | +| | | +|-------------------|--------------------------------------------------------------------------------------| +| Command name | rt replication-delete | +| Abbreviation | rt rpldel | +| Command options | | +| --server-id |

[Optional]
Artifactory Server ID configured using the 'jf config' command.

| +| --quiet |

[Default: $CI]
Set to true to skip the delete confirmation message.

| +| Command arguments | | +| repository key | The repository from which the replications will be deleted. | #### Example @@ -382,19 +382,19 @@ These commands create/update a permission target. The commands accept as an argu | Command-name | permission-target-create / permission-target-update | | Abbreviation | rt ptc / rt ptu | | Command options | | -| --server-id |

[Optional]
Artifactory server ID configured using the config command.

| +| --server-id |

[Optional]
Artifactory Server ID configured using the 'jf config' command.

| | --vars |

[Optional]
List of semicolon-separated(;) variables in the form of "key1=value1;key2=value2;..." to be replaced in the template. In the template, the variables should be used as follows: ${key1}.

| ### Deleting Permission Targets This command permanently deletes a permission target. -| | | -|------------------------|---------------------------------------------------------------------------------| -| Command name | rt permission-target-delete | -| Abbreviation | rt ptdel | -| Command options | | -| --server-id |

[Optional]
Artifactory server ID configured using the config command.

| -| --quiet |

[Default: $CI]
Set to true to skip the delete confirmation message.

| -| Command arguments | | -| permission target name | The permission target that should be removed. | +| | | +|------------------------|--------------------------------------------------------------------------------------| +| Command name | rt permission-target-delete | +| Abbreviation | rt ptdel | +| Command options | | +| --server-id |

[Optional]
Artifactory Server ID configured using the 'jf config' command.

| +| --quiet |

[Default: $CI]
Set to true to skip the delete confirmation message.

| +| Command arguments | | +| permission target name | The permission target that should be removed. | diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/package-managers-integration.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/package-managers-integration.md index 9f24880..8740157 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/package-managers-integration.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/package-managers-integration.md @@ -177,7 +177,7 @@ The following table lists the command arguments and flags: | Command-name | docker pull | | Abbreviation | dpl | | Command options | | -| --server-id |

[Optional]
Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| +| --server-id |

[Optional]
Server ID configured using the 'jf config' command. If not specified, the default configured Artifactory server is used.

| | --build-name |

[Optional]
Build name. For more details, please refer to Build Integration.

| | --build-number |

[Optional]
Build number. For more details, please refer to Build Integration.

| | --project |

[Optional]
JFrog project key.

| @@ -208,7 +208,7 @@ The following table lists the command arguments and flags: | Command-name | docker push | | Abbreviation | dp | | Command options | | -| --server-id |

[Optional]
Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| +| --server-id |

[Optional]
Server ID configured using the 'jf config' command. If not specified, the default configured Artifactory server is used.

| | --build-name |

[Optional]
Build name. For more details, please refer to Build Integration.

| | --build-number |

[Optional]
Build number. For more details, please refer to Build Integration.

| | --project |

[Optional]
JFrog project key.

| @@ -241,7 +241,7 @@ The following table lists the command arguments and flags: | Command-name | rt podman-pull | | Abbreviation | rt ppl | | Command options | | -| --server-id |

[Optional]
Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| +| --server-id |

[Optional]
Server ID configured using the 'jf config' command. If not specified, the default configured Artifactory server is used.

| | --build-name |

[Optional]
Build name. For more details, please refer to Build Integration.

| | --build-number |

[Optional]
Build number. For more details, please refer to Build Integration.

| | --project |

[Optional]
JFrog project key.

| @@ -274,7 +274,7 @@ The following table lists the command arguments and flags: | Command-name | rt podman-push | | Abbreviation | rt pp | | Command options | | -| --server-id |

[Optional]
Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| +| --server-id |

[Optional]
Server ID configured using the 'jf config' command. If not specified, the default configured Artifactory server is used.

| | --build-name |

[Optional]
Build name. For more details, please refer to Build Integration.

| | --build-number |

[Optional]
Build number. For more details, please refer to Build Integration.

| | --project |

[Optional]
JFrog project key.

| @@ -323,7 +323,7 @@ The **build-docker-create** command allows adding a docker image, which is alrea | Abbreviation | rt bdc | | Command options | | | --image-file |

Path to a file which includes one line in the following format: IMAGE-TAG@sha256:MANIFEST-SHA256. For example:

cat image-file-details
superfrog-docker.jfrog.io/hello-frog@sha256:30f04e684493fb5ccc030969df6de0

| -| --server-id |

[Optional]
Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| +| --server-id |

[Optional]
Server ID configured using the 'jf config' command. If not specified, the default configured Artifactory server is used.

| | --build-name |

[Optional]
Build name. For more details, please refer to Build Integration.

| | --build-number |

[Optional]
Build number. For more details, please refer to Build Integration.

| | --project |

[Optional]
JFrog project key.

| @@ -354,20 +354,20 @@ Promotion is the action of moving or copying a group of artifacts from one repos The following table lists the command arguments and flags: -| | | -|-----------------------|------------------------------------------------------------------------------------------------------------------------------------------| -| Command-name | rt docker-promote | -| Abbreviation | rt dpr | -| Command options | | -| --server-id |

[Optional]
Server ID configured using the config command. If not specified, the default configured Artifactory server is used.

| -| --copy |

[Default: false]
If set true, the Docker image is copied to the target repository, otherwise it is moved.

| -| --source-tag |

[Optional]
The tag name to promote.

| -| --target-docker-image |

[Optional]
Docker target image name.

| -| --target-tag |

[Optional]
The target tag to assign the image after promotion.

| -| Command argument | | -| source docker image | The docker image name to promote. | -| source repository | Source repository in Artifactory. | -| target repository | Target repository in Artifactory. | +| | | +|-----------------------|-----------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | rt docker-promote | +| Abbreviation | rt dpr | +| Command options | | +| --server-id |

[Optional]
Server ID configured using the 'jf config' command. If not specified, the default configured Artifactory server is used.

| +| --copy |

[Default: false]
If set true, the Docker image is copied to the target repository, otherwise it is moved.

| +| --source-tag |

[Optional]
The tag name to promote.

| +| --target-docker-image |

[Optional]
Docker target image name.

| +| --target-tag |

[Optional]
The target tag to assign the image after promotion.

| +| Command argument | | +| source docker image | The docker image name to promote. | +| source repository | Source repository in Artifactory. | +| target repository | Target repository in Artifactory. | #### Examples diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/release-lifecycle-management.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/release-lifecycle-management.md index f41206a..f76ff3b 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/release-lifecycle-management.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/release-lifecycle-management.md @@ -103,7 +103,7 @@ The file spec may be of one of the following creation sources: | release bundle version | Version of the newly created Release Bundle. | | Command options | | | --project |

[Optional]
Project key associated with the created Release Bundle version.

| -| --server-id |

[Optional]
Platform server ID configured using the config command.

| +| --server-id |

[Optional]
Platform Server ID configured using the 'jf config' command.

| | --signing-key |

[Mandatory]
The GPG/RSA key-pair name given in Artifactory.

| | --spec |

[Optional]
Path to a File Spec.

| | --spec-vars |

[Optional]
List of semicolon-separated(;) variables in the form of "key1=value1;key2=value2;..." (wrapped by quotes) to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| @@ -152,7 +152,7 @@ This command allows promoting a release bundle to a target environment. | --input-repos |

[Optional]
A list of semicolon-separated(;) repositories to include in the promotion. If this property is left undefined, all repositories (except those specifically excluded) are included in the promotion. If one or more repositories are specifically included, all other repositories are excluded.

| | --exclude-repos |

[Optional]
A list of semicolon-separated(;) repositories to exclude from the promotion.

| | --project |

[Optional]
Project key associated with the Release Bundle version.

| -| --server-id |

[Optional]
Platform server ID configured using the config command.

| +| --server-id |

[Optional]
Platform Server ID configured using the 'jf config' command.

| | --signing-key |

[Mandatory]
The GPG/RSA key-pair name given in Artifactory.

| | --sync |

[Default: false]
Set to true to run synchronously.

| | @@ -210,7 +210,7 @@ This command distributes a release bundle to an edge node. | --mapping-target |

[Optional]
The target path for distributed artifacts on the edge node. If not specified, the artifacts will have the same path and name on the edge node, as on the source Artifactory server. For flexibility in specifying the distribution path, you can include [placeholders](https://www.jfrog.com/confluence/display/CLI/CLI+for+JFrog+Artifactory#CLIforJFrogArtifactory-UsingPlaceholders) in the form of {1}, {2} which are replaced by corresponding tokens in the pattern path that are enclosed in parenthesis.

| | --max-wait-minutes |

[Default: 60]
Max minutes to wait for sync distribution.

| | --project |

[Optional]
Project key associated with the Release Bundle version.

| -| --server-id |

[Optional]
Platform server ID configured using the config command.

| +| --server-id |

[Optional]
Platform Server ID configured using the 'jf config' command.

| | --site |

[Default: *]
Wildcard filter for site name.

| | --sync |

[Default: false]
Set to true to run synchronously.

| | @@ -282,7 +282,7 @@ Deleting locally means distributions of the release bundle will not be deleted. | Command options | | | --project |

[Optional]
Project key associated with the Release Bundle version.

| | --quiet |

[Default: $CI]
Set to true to skip the delete confirmation message.

| -| --server-id |

[Optional]
Platform server ID configured using the config command.

| +| --server-id |

[Optional]
Platform Server ID configured using the 'jf config' command.

| | --sync |

[Default: false]
Set to true to run synchronously.

| ### Examples @@ -325,7 +325,7 @@ This command will delete distributions of a release bundle from edge nodes. | --max-wait-minutes |

[Default: 60]
Max minutes to wait for sync distribution.

| | --project |

[Optional]
Project key associated with the Release Bundle version.

| | --quiet |

[Default: $CI]
Set to true to skip the delete confirmation message.

| -| --server-id |

[Optional]
Platform server ID configured using the config command.

| +| --server-id |

[Optional]
Platform Server ID configured using the 'jf config' command.

| | --site |

[Default: *]
Wildcard filter for site name.

| | --sync |

[Default: false]
Set to true to run synchronously.

| @@ -359,7 +359,7 @@ The following command allows exporting a Release Bundle as an archive to the fil | target pattern | The argument is optional and specifies the local file system target path.If the target path ends with a slash, the path is assumed to be a directory.For example, if you specify the target as "repo-name/a/b/", then "b" is assumed to be a directory into which files should be downloaded.If there is no terminal slash, the target path is assumed to be a file to which the downloaded file should be renamed.For example, if you specify the target as "a/b", the downloaded file is renamed to "b". | | Command options | | | --project |

[Optional]
Project key associated with the Release Bundle version.

| -| --server-id |

[Optional]
Platform server ID configured using the config command.

| +| --server-id |

[Optional]
Platform Server ID configured using the 'jf config' command.

| | mapping-pattern |

[Optional]
Specify a list of input regex mapping pairs that define where the queried artifact is located and where it should be placed after it is imported. Use this option if the path on the target is different than the source path. | | mapping-target |

[Optional]
Specify a list of output regex mapping pairs that define where the queried artifact is located and where it should be placed after it is imported. Use this option if the path on the target is different than the source path. | | split-count |

[Optional]
The maximum number of parts that can be concurrently uploaded per file during a multi-part upload. Set to 0 to disable multi-part upload. | @@ -385,15 +385,15 @@ Import a Release Bundle archive from a release bundle exported zip file. Please note this functionality only works on Edge nodes within an air-gapped environment. -| | | -|------------------------|------------------------------------------------------------------------------| -| Command-name | release-bundle-import | -| Abbreviation | rbi | -| Command arguments | | -| path to archive | Path to the release bundle archive on the filesystem | -| Command options | | -| --project |

[Optional]
Project key associated with the Release Bundle version.

| -| --server-id |

[Optional]
Platform server ID configured using the config command.

| +| | | +|-------------------|-----------------------------------------------------------------------------------| +| Command-name | release-bundle-import | +| Abbreviation | rbi | +| Command arguments | | +| path to archive | Path to the release bundle archive on the filesystem | +| Command options | | +| --project |

[Optional]
Project key associated with the Release Bundle version.

| +| --server-id |

[Optional]
Platform Server ID configured using the 'jf config' command.

| #### Example Import a Release Bundle named "myExportedApp" and version 1.0.0 diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/verifying-artifactory-accessibility.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/verifying-artifactory-accessibility.md index 3d7083f..a2f01d9 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/verifying-artifactory-accessibility.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/verifying-artifactory-accessibility.md @@ -10,7 +10,7 @@ This command can be used to verify that Artifactory is accessible by sending an | Abbreviation | rt p | | | | | Command options | | -| --url |

[Optional]
Artifactory URL.

| +| --url |

[Optional]
JFrog Artifactory URL. (example: https://acme.jfrog.io/artifactory)

| | --server-id |

[Optional]
Server ID configured using the jf c add command. If not specified, the default configured Artifactory server is used.

| | --insecure-tls |

[Default: false]
Set to true to skip TLS certificates verification.

| | Command arguments | The command accepts no arguments. | diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-curation.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-curation.md index b0cb15c..2f2651a 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-curation.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-curation.md @@ -6,7 +6,7 @@ JFrog Curation defends your software supply chain, enabling early blocking of ma For more information see: https://jfrog.com/curation/ -"The 'curation-audit' is a JFrog CLI command designed for developers to scan their projects and identify third-party dependencies that violate the restrictions set by the Curation service. This command provides detailed insights into the specific package policies that are being violated, leading to their blockage by the Curation service. Additionally, when feasible, 'curation-audit' may suggest alternative versions of the packages that comply with the Curation policies." +The 'curation-audit' is a JFrog CLI command designed for developers to scan their projects and identify third-party dependencies that violate the restrictions set by the Curation service. This command provides detailed insights into the specific package policies that are being violated, leading to their blockage by the Curation service. Additionally, when feasible, 'curation-audit' may suggest alternative versions of the packages that comply with the Curation policies. ## Supported package managers & build systems @@ -63,14 +63,14 @@ https://jfrog.com/help/r/jfrog-curation/configure-curation-pass-through #### Commands Params | | | -| ------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | +|---------------------|----------------------------------------------------------------------------------------------------------------------------------------| | **Command name** | curation-audit | | **Abbreviation** | ca | | **Command options** | | | --format |

[Default: table]

Defines the output format of the command. Acceptable values are: table and json.

| | --working-dirs |

[Optional]

A comma separated list of relative working directories, to determine the audit targets locations.

| | --threads |

[Default: 10]

The number of parallel threads used to determine the curation status for each package in the project tree.

| -| --requirements-file |

[Optional] [Pip]

Defines pip requirements file name. For example: 'requirements.txt'

| +| --requirements-file |

[Optional] [Pip]

Defines pip requirements file name. For example: 'requirements.txt'

| #### Example 1 diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-distribution.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-distribution.md index ab58c5c..981ae28 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-distribution.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-distribution.md @@ -39,7 +39,7 @@ This commands creates and updates an unsigned Release Bundle on JFrog Distributi | Command-name | release-bundle-create / release-bundle-update | | Abbreviation | rbc / rbu | | Command options | | -| --server-id |

[Optional]
Artifactory server ID configured using the config command.

| +| --server-id |

[Optional]
Artifactory Server ID configured using the 'jf config' command.

| | --spec |

[Optional]
Path to a file spec. For more details, please refer to Using File Specs.

| | --spec-vars |

[Optional]
List of semicolon-separated(;) variables in the form of "key1=value1;key2=value2;..." to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| | --target-props |

[Optional]
The list of properties, in the form of key1=value1;key2=value2,..., to be added to the artifacts after distribution of the release bundle.

| @@ -185,7 +185,7 @@ This command GPG signs an existing Release Bundle on JFrog Distribution. | Command-name | release-bundle-sign | | Abbreviation | rbs | | Command options | | -| --server-id |

[Optional]
Artifactory server ID configured using the config command.

| +| --server-id |

[Optional]
Artifactory Server ID configured using the 'jf config' command.

| | --passphrase |

[Optional]
The passphrase for the signing key.

| | --repo |

[Optional]
A repository name at source Artifactory to store release bundle artifacts in. If not provided, Artifactory will use the default one.

| | --insecure-tls |

[Default: false]
Set to true to skip TLS certificates verification.

| @@ -221,7 +221,7 @@ This command distributes a release bundle to the Edge Nodes. | Command-name | release-bundle-distribute | | Abbreviation | rbd | | Command options | | -| --server-id |

[Optional]
Artifactory server ID configured using the config command.

| +| --server-id |

[Optional]
Artifactory Server ID configured using the 'jf config' command.

| | --sync |

[Default: false]
Set to true to enable sync distribution (the command execution will end when the distribution process ends).

| | --max-wait-minutes |

[Default: 60]
Max minutes to wait for sync distribution.

| | --create-repo |

[Default: false]
Set to true to create the repository on the edge if it does not exist.

| @@ -252,7 +252,7 @@ This command deletes a Release Bundle from the Edge Nodes and optionally from Di **Note** -> These commands require version 2.0 or higher of[JFrog Distribution](https://www.jfrog.com/confluence/display/JFROG/JFrog+Distribution). +> These commands require version 2.0 or higher of [JFrog Distribution](https://www.jfrog.com/confluence/display/JFROG/JFrog+Distribution). *** @@ -263,7 +263,7 @@ This command deletes a Release Bundle from the Edge Nodes and optionally from Di | Command-name | release-bundle-delete | | Abbreviation | rbdel | | Command options | | -| --server-id |

[Optional]
Artifactory server ID configured using the config command.

| +| --server-id |

[Optional]
Artifactory Server ID configured using the 'jf config' command.

| | --sync |

[Default: false]
Set to true to enable sync deletion (the command execution will end when the deletion process ends).

| | --max-wait-minutes |

[Default: 60]
Max minutes to wait for sync deletion.

| | --dry-run |

[Default: false]
Set to true to disable communication with JFrog Distribution.

| diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/download-updates-for-xrays-database.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/download-updates-for-xrays-database.md index 2fffaf3..937ae2f 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/download-updates-for-xrays-database.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/download-updates-for-xrays-database.md @@ -43,12 +43,12 @@ The offline-update command downloads updates to Xray's vulnerabilities database. [Default: ./]
Path for downloaded update files. - --dbsyncv3 - [Default: false]
Set to true to use Xray DBSync V3. + --stream + [Default: false]
Set to true to use Xray DBSync V3 stream, Possible values are: public_data, exposures and contextual_analysis. --periodic - [Default: false]
Set to true to get the Xray DBSync V3 Periodic Package (Use with dbsyncv3 flag). + [Default: false]
Set to true to get the Xray DBSync V3 Periodic Package (Use with stream flag). Command arguments diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-published-builds.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-published-builds.md index 509b949..821fc24 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-published-builds.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-published-builds.md @@ -6,20 +6,20 @@ JFrog CLI is integrated with JFrog Xray and JFrog Artifactory, allowing you to h ### Commands Params -| | | -|-------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command name | build-scan | -| Abbreviation | bs | -| Command options | | -| --server-id |

[Optional]
Server ID configured by the jf c add command. If not specified, the default configured server is used.

| -| --vuln |

[Optional]
Set if you'd like to receive all vulnerabilities, regardless of the policy configured in Xray.

| +| | | +|-------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command name | build-scan | +| Abbreviation | bs | +| Command options | | +| --server-id |

[Optional]
Server ID configured by the jf c add command. If not specified, the default configured server is used.

| +| --vuln |

[Optional]
Set if you'd like to receive all vulnerabilities, regardless of the policy configured in Xray.

| | --fail |

[Default: true]
When using one of the flags --watches, --project or --repo-path and a Fail build rule is matched the command will return exit code 3. Set to false if you'd like to see violations with exit code 0.

| -| --format |

[Default: table]
Defines the output format of the command. The accepted values are: table and json.

| -| --project |

[Optional]
JFrog project key

| -| --rescan |

[Default: false]
Set to true when scanning an already successfully scanned build, for example after adding an ignore rule.

| -| Command arguments | The command accepts two arguments. | -| Build name | Build name to be scanned. | -| Build number | Build number to be scanned. | +| --format |

[Default: table]
Defines the output format of the command. The accepted values are: table and json.

| +| --project |

[Optional]
JFrog project key

| +| --rescan |

[Default: false]
Set to true when scanning an already successfully scanned build, for example after adding an ignore rule.

| +| Command arguments | The command accepts two arguments. | +| Build name | Build name to be scanned. | +| Build number | Build number to be scanned. | ### Example diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-source-code.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-source-code.md index 040024d..e96d29b 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-source-code.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-source-code.md @@ -46,7 +46,7 @@ This command also supports the following Advanced Scans with the **Advanced Secu | --watches |

[Optional]
A comma-separated(,) list of Xray watches, to enable Xray to determine violations accordingly. The command accepts this option only if the --repo-path and --repo-path options are not provided. If none of the three options are provided, the command will show all known vulnerabilities

| | --licenses |

[Default: false]
Set if you'd also like the list of licenses to be displayed.

| | --format |

[Default: table]
Defines the output format of the command. Acceptable values are: table and json.

| -| --fail |

[Default: true]
When using one of the flags --watches, --project or --repo-path and a Fail build rule is matched the command will return exit code 3. Set to false if you'd like to see violations with exit code 0.

| +| --fail |

[Default: true]
When using one of the flags --watches, --project or --repo-path and a Fail build rule is matched the command will return exit code 3. Set to false if you'd like to see violations with exit code 0.

| | --use-wrapper |

[Default: false] [Gradle]
Set to true if you'd like to use the Gradle wrapper.

| | --dep-type |

[Default: all] [npm]
Defines npm dependencies type. Possible values are: all, devOnly and prodOnly

| | --exclude-test-deps |

[Default: false] [Gradle]
Set to true if you'd like to exclude Gradle test dependencies from Xray scanning.

| @@ -94,7 +94,7 @@ jf audit --watches "watch1" #### Example 4 -Audit the project at the current directory using _watch1_ and \_watch2\_defined in Xray. +Audit the project at the current directory using _watch1_ and \_watch2\_ defined in Xray. ``` jf audit --watches "watch1,watch2" diff --git a/jfrog-applications/jfrog-cli/get-started/configurations/jfrog-platform-configuration.md b/jfrog-applications/jfrog-cli/get-started/configurations/jfrog-platform-configuration.md index d968c2d..ad493fb 100644 --- a/jfrog-applications/jfrog-cli/get-started/configurations/jfrog-platform-configuration.md +++ b/jfrog-applications/jfrog-cli/get-started/configurations/jfrog-platform-configuration.md @@ -59,21 +59,21 @@ The **config add** and **config edit** commands are used to add and edit JFrog P | Abbreviation | c add / c edit | | Command options | | | --access-token |

[Optional]

Access token.

| -| --artifactory-url |

[Optional]

Artifactory URL.

| +| --artifactory-url |

[Optional]

JFrog Artifactory URL. (example: https://acme.jfrog.io/artifactory)

| | --basic-auth-only |

[Default: false]

Used for Artifactory authentication. Set to true to disable replacing username and password/API key with automatically created access token that's refreshed hourly. Username and password/API key will still be used with commands which use external tools or the JFrog Distribution service. Can only be passed along with username and password/API key options.

| | --client-cert-key-path |

[Optional]

Private key file for the client certificate in PEM format.

| | --client-cert-path |

[Optional]

Client certificate file in PEM format.

| -| --dist-url |

[Optional]

Distribution URL.

| +| --dist-url |

[Optional]

Distribution URL. (example: https://acme.jfrog.io/distribution)

| | --enc-password |

[Default: true]
If true, the configured password will be encrypted using Artifactory'sencryption API before being stored. If false, the configured password will not be encrypted.

| | --insecure-tls |

[Default: false]

Set to true to skip TLS certificates verification, while encrypting the Artifactory password during the config process.

| | --interactive |

[Default: true, unless $CI is true]

Set to false if you do not want the config command to be interactive.

| -| --mission-control-url |

[Optional]

Mission Control URL.

| +| --mission-control-url |

[Optional]

JFrog Mission Control URL. (example: https://acme.jfrog.io/ms)

| | --password |

[Optional]

JFrog Platform password.

| -| --pipelines-url |

[Optional]

Pipelines URL.

| +| --pipelines-url |

[Optional]

JFrog Pipelines URL. (example: https://acme.jfrog.io/pipelines)

| | --ssh-key-path |

[Optional]

For authentication with Artifactory. SSH key file path.

| -| --url |

[Optional]

JFrog platform URL.

| +| --url |

[Optional]

JFrog Platform URL. (example: https://acme.jfrog.io)

| | --user |

[Optional]

JFrog Platform username.

| -| --xray-url | \[Optional] Xray URL. | +| --xray-url | \[Optional] Xray URL. (example: https://acme.jfrog.io/xray) | | --overwrite |

[Available for config add only]
[Default: false]
Overwrites the instance configuration if an instance with the same ID already exists.

| | Command arguments | | | server ID | A unique ID for the server configuration. | diff --git a/jfrog-applications/jfrog-cli/get-started/download-and-install/usage.md b/jfrog-applications/jfrog-cli/get-started/download-and-install/usage.md index 55bfda2..5282a0a 100644 --- a/jfrog-applications/jfrog-cli/get-started/download-and-install/usage.md +++ b/jfrog-applications/jfrog-cli/get-started/download-and-install/usage.md @@ -19,5 +19,5 @@ JFrog CLI makes use of the following environment variables: | **JFROG\_CLI\_PLUGINS\_SERVER** |

[Default: Official JFrog CLI Plugins registry]

Configured Artifactory server ID from which to download JFrog CLI Plugins.

| | **JFROG\_CLI\_PLUGINS\_REPO** |

[Default: 'jfrog-cli-plugins']

Can be optionally used with the JFROG_CLI_PLUGINS_SERVER environment variable. Determines the name of the local repository to use.

| | **JFROG\_CLI\_RELEASES\_REPO** |

Configured Artifactory repository name from which to download the jar needed by the mvn/gradle command.
This environment variable's value format should be <server ID configured by the 'jf c add' command>/<repo name>.
The repository should proxy https://releases.jfrog.io.
This environment variable is used by the 'jf mvn' and 'jf gradle' commands, and also by the 'jf audit' command, when used for maven or gradle projects.

| -| **JFROG\_CLI\_SERVER\_ID** | Server ID configured using the config command, unless sent as a command argument or option. | +| **JFROG\_CLI\_SERVER\_ID** | Server ID configured using the 'jf config' command, unless sent as a command argument or option. | | **CI** |

[Default: false]

If true, disables interactive prompts and progress bar.

| From 86868eb2a0d9cee27d96f9e4a1c32f32fe86f83c Mon Sep 17 00:00:00 2001 From: Michael Sverdlov Date: Wed, 15 May 2024 15:53:24 +0300 Subject: [PATCH 17/57] Update dependencies (#125) --- go.mod | 56 +++---- go.sum | 141 ++++++++++-------- jfrog-applications/README.md | 2 +- .../environment-variables.md | 30 ++-- .../scan-your-binaries.md | 54 +++---- .../scan-your-source-code.md | 60 ++++---- .../get-started/configurations/README.md | 2 +- .../get-started/download-and-install/usage.md | 26 ++-- .../jfrog-security-features/sast/README.md | 4 +- .../features/sca.md | 2 +- 10 files changed, 192 insertions(+), 185 deletions(-) diff --git a/go.mod b/go.mod index a6e2df8..c6dc902 100644 --- a/go.mod +++ b/go.mod @@ -3,60 +3,60 @@ module github.com/jfrog/documentation go 1.21 require ( - github.com/jfrog/jfrog-client-go v1.34.4 - github.com/stretchr/testify v1.8.4 + github.com/jfrog/jfrog-client-go v1.40.2 + github.com/stretchr/testify v1.9.0 github.com/xeipuuv/gojsonschema v1.2.0 gopkg.in/yaml.v2 v2.4.0 ) require ( dario.cat/mergo v1.0.0 // indirect - github.com/CycloneDX/cyclonedx-go v0.7.2 // indirect + github.com/CycloneDX/cyclonedx-go v0.8.0 // indirect github.com/Microsoft/go-winio v0.6.1 // indirect - github.com/ProtonMail/go-crypto v0.0.0-20230923063757-afb1ddc0824c // indirect - github.com/acomagu/bufpipe v1.0.4 // indirect - github.com/andybalholm/brotli v1.0.1 // indirect - github.com/cloudflare/circl v1.3.3 // indirect + github.com/ProtonMail/go-crypto v1.0.0 // indirect + github.com/andybalholm/brotli v1.1.0 // indirect + github.com/cloudflare/circl v1.3.7 // indirect github.com/cyphar/filepath-securejoin v0.2.4 // indirect github.com/davecgh/go-spew v1.1.1 // indirect - github.com/dsnet/compress v0.0.2-0.20210315054119-f66993602bf5 // indirect + github.com/dsnet/compress v0.0.1 // indirect github.com/emirpasic/gods v1.18.1 // indirect - github.com/forPelevin/gomoji v1.1.8 // indirect + github.com/forPelevin/gomoji v1.2.0 // indirect github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect github.com/go-git/go-billy/v5 v5.5.0 // indirect - github.com/go-git/go-git/v5 v5.9.0 // indirect + github.com/go-git/go-git/v5 v5.12.0 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect - github.com/golang/snappy v0.0.2 // indirect + github.com/golang/snappy v0.0.4 // indirect github.com/gookit/color v1.5.4 // indirect github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect - github.com/jfrog/build-info-go v1.9.15 // indirect - github.com/jfrog/gofrog v1.3.1 // indirect + github.com/jfrog/archiver/v3 v3.6.0 // indirect + github.com/jfrog/build-info-go v1.9.26 // indirect + github.com/jfrog/gofrog v1.7.1 // indirect github.com/kevinburke/ssh_config v1.2.0 // indirect - github.com/klauspost/compress v1.11.4 // indirect + github.com/klauspost/compress v1.17.4 // indirect github.com/klauspost/cpuid/v2 v2.2.3 // indirect - github.com/klauspost/pgzip v1.2.5 // indirect - github.com/mholt/archiver/v3 v3.5.1 // indirect + github.com/klauspost/pgzip v1.2.6 // indirect github.com/minio/sha256-simd v1.0.1 // indirect - github.com/nwaples/rardecode v1.1.0 // indirect - github.com/pierrec/lz4/v4 v4.1.2 // indirect + github.com/nwaples/rardecode v1.1.3 // indirect + github.com/pierrec/lz4/v4 v4.1.21 // indirect github.com/pjbgf/sha1cd v0.3.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/rivo/uniseg v0.4.3 // indirect - github.com/sergi/go-diff v1.1.0 // indirect - github.com/skeema/knownhosts v1.2.0 // indirect - github.com/ulikunitz/xz v0.5.9 // indirect + github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect + github.com/skeema/knownhosts v1.2.2 // indirect + github.com/ulikunitz/xz v0.5.11 // indirect github.com/xanzy/ssh-agent v0.3.3 // indirect github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f // indirect github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 // indirect github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 // indirect - golang.org/x/crypto v0.14.0 // indirect - golang.org/x/exp v0.0.0-20230905200255-921286631fa9 // indirect - golang.org/x/mod v0.12.0 // indirect - golang.org/x/net v0.17.0 // indirect - golang.org/x/sys v0.13.0 // indirect - golang.org/x/term v0.13.0 // indirect - golang.org/x/tools v0.13.0 // indirect + golang.org/x/crypto v0.23.0 // indirect + golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 // indirect + golang.org/x/mod v0.17.0 // indirect + golang.org/x/net v0.25.0 // indirect + golang.org/x/sync v0.7.0 // indirect + golang.org/x/sys v0.20.0 // indirect + golang.org/x/term v0.20.0 // indirect + golang.org/x/tools v0.21.0 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 21b75c2..cfb83fc 100644 --- a/go.sum +++ b/go.sum @@ -1,85 +1,91 @@ dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= -github.com/CycloneDX/cyclonedx-go v0.7.2 h1:kKQ0t1dPOlugSIYVOMiMtFqeXI2wp/f5DBIdfux8gnQ= -github.com/CycloneDX/cyclonedx-go v0.7.2/go.mod h1:K2bA+324+Og0X84fA8HhN2X066K7Bxz4rpMQ4ZhjtSk= +github.com/CycloneDX/cyclonedx-go v0.8.0 h1:FyWVj6x6hoJrui5uRQdYZcSievw3Z32Z88uYzG/0D6M= +github.com/CycloneDX/cyclonedx-go v0.8.0/go.mod h1:K2bA+324+Og0X84fA8HhN2X066K7Bxz4rpMQ4ZhjtSk= github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= -github.com/ProtonMail/go-crypto v0.0.0-20230923063757-afb1ddc0824c h1:kMFnB0vCcX7IL/m9Y5LO+KQYv+t1CQOiFe6+SV2J7bE= -github.com/ProtonMail/go-crypto v0.0.0-20230923063757-afb1ddc0824c/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= -github.com/acomagu/bufpipe v1.0.4 h1:e3H4WUzM3npvo5uv95QuJM3cQspFNtFBzvJ2oNjKIDQ= -github.com/acomagu/bufpipe v1.0.4/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= -github.com/andybalholm/brotli v1.0.1 h1:KqhlKozYbRtJvsPrrEeXcO+N2l6NYT5A2QAFmSULpEc= -github.com/andybalholm/brotli v1.0.1/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y= +github.com/ProtonMail/go-crypto v1.0.0 h1:LRuvITjQWX+WIfr930YHG2HNfjR1uOfyf5vE0kC2U78= +github.com/ProtonMail/go-crypto v1.0.0/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= +github.com/andybalholm/brotli v1.1.0 h1:eLKJA0d02Lf0mVpIDgYnqXcUn0GqVmEFny3VuID1U3M= +github.com/andybalholm/brotli v1.1.0/go.mod h1:sms7XGricyQI9K10gOSf56VKKWS4oLer58Q+mhRPtnY= github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= +github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/bradleyjkemp/cupaloy/v2 v2.8.0 h1:any4BmKE+jGIaMpnU8YgH/I2LPiLBufr6oMMlVBbn9M= +github.com/bradleyjkemp/cupaloy/v2 v2.8.0/go.mod h1:bm7JXdkRd4BHJk9HpwqAI8BoAY1lps46Enkdqw6aRX0= github.com/bwesterb/go-ristretto v1.2.3/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= -github.com/cloudflare/circl v1.3.3 h1:fE/Qz0QdIGqeWfnwq0RE0R7MI51s0M2E4Ga9kq5AEMs= github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA= +github.com/cloudflare/circl v1.3.7 h1:qlCDlTPz2n9fu58M0Nh1J/JzcFpfgkFHHX3O35r5vcU= +github.com/cloudflare/circl v1.3.7/go.mod h1:sRTcRWXGLrKw6yIGJ+l7amYJFfAXbZG0kBSc8r4zxgA= github.com/cyphar/filepath-securejoin v0.2.4 h1:Ugdm7cg7i6ZK6x3xDF1oEu1nfkyfH53EtKeQYTC3kyg= github.com/cyphar/filepath-securejoin v0.2.4/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/dsnet/compress v0.0.2-0.20210315054119-f66993602bf5 h1:iFaUwBSo5Svw6L7HYpRu/0lE3e0BaElwnNO1qkNQxBY= -github.com/dsnet/compress v0.0.2-0.20210315054119-f66993602bf5/go.mod h1:qssHWj60/X5sZFNxpG4HBPDHVqxNm4DfnCKgrbZOT+s= +github.com/dsnet/compress v0.0.1 h1:PlZu0n3Tuv04TzpfPbrnI0HW/YwodEXDS+oPKahKF0Q= +github.com/dsnet/compress v0.0.1/go.mod h1:Aw8dCMJ7RioblQeTqt88akK31OvO8Dhf5JflhBbQEHo= github.com/dsnet/golib v0.0.0-20171103203638-1ea166775780/go.mod h1:Lj+Z9rebOhdfkVLjJ8T6VcRQv3SXugXy999NBtR9aFY= github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a h1:mATvB/9r/3gvcejNsXKSkQ6lcIaNec2nyfOdlTBR2lU= +github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a/go.mod h1:Ro8st/ElPeALwNFlcTpWmkr6IoMFfkjXAvTHpevnDsM= github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= -github.com/forPelevin/gomoji v1.1.8 h1:JElzDdt0TyiUlecy6PfITDL6eGvIaxqYH1V52zrd0qQ= -github.com/forPelevin/gomoji v1.1.8/go.mod h1:8+Z3KNGkdslmeGZBC3tCrwMrcPy5GRzAD+gL9NAwMXg= -github.com/gliderlabs/ssh v0.3.5 h1:OcaySEmAQJgyYcArR+gGGTHCyE7nvhEMTlYY+Dp8CpY= +github.com/forPelevin/gomoji v1.2.0 h1:9k4WVSSkE1ARO/BWywxgEUBvR/jMnao6EZzrql5nxJ8= +github.com/forPelevin/gomoji v1.2.0/go.mod h1:8+Z3KNGkdslmeGZBC3tCrwMrcPy5GRzAD+gL9NAwMXg= +github.com/gliderlabs/ssh v0.3.7 h1:iV3Bqi942d9huXnzEF2Mt+CY9gLu8DNM4Obd+8bODRE= +github.com/gliderlabs/ssh v0.3.7/go.mod h1:zpHEXBstFnQYtGnB8k8kQLol82umzn/2/snG7alWVD8= github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI= github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic= github.com/go-git/go-billy/v5 v5.5.0 h1:yEY4yhzCDuMGSv83oGxiBotRzhwhNr8VZyphhiu+mTU= github.com/go-git/go-billy/v5 v5.5.0/go.mod h1:hmexnoNsr2SJU1Ju67OaNz5ASJY3+sHgFRpCtpDCKow= -github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20230305113008-0c11038e723f h1:Pz0DHeFij3XFhoBRGUDPzSJ+w2UcK5/0JvF8DRI58r8= -github.com/go-git/go-git/v5 v5.9.0 h1:cD9SFA7sHVRdJ7AYck1ZaAa/yeuBvGPxwXDL8cxrObY= -github.com/go-git/go-git/v5 v5.9.0/go.mod h1:RKIqga24sWdMGZF+1Ekv9kylsDz6LzdTSI2s/OsZWE0= +github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399 h1:eMje31YglSBqCdIqdhKBW8lokaMrL3uTkpGYlE2OOT4= +github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399/go.mod h1:1OCfN199q1Jm3HZlxleg+Dw/mwps2Wbk9frAWm+4FII= +github.com/go-git/go-git/v5 v5.12.0 h1:7Md+ndsjrzZxbddRDZjF14qK+NN56sy6wkqaVrjZtys= +github.com/go-git/go-git/v5 v5.12.0/go.mod h1:FTM9VKtnI2m65hNI/TenDDDnUf2Q9FHnXYjuz9i5OEY= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/snappy v0.0.2 h1:aeE13tS0IiQgFjYdoL8qN3K1N2bXXtI6Vi51/y7BpMw= -github.com/golang/snappy v0.0.2/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= +github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/gookit/color v1.5.4 h1:FZmqs7XOyGgCAxmWyPslpiok1k05wmY3SJTytgvYFs0= github.com/gookit/color v1.5.4/go.mod h1:pZJOeOS8DM43rXbp4AZo1n9zCU2qjpcRko0b6/QJi9w= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= -github.com/jfrog/build-info-go v1.9.15 h1:DN7DKZq6H5FlHfL3Lu8fo4t2INgczRgT09dJiZjJ1oo= -github.com/jfrog/build-info-go v1.9.15/go.mod h1:XVFk2rCYhIdc7+hIGE8TC3le5PPM+xYHU22udoE2b7Q= -github.com/jfrog/gofrog v1.3.1 h1:QqAwQXCVReT724uga1AYqG/ZyrNQ6f+iTxmzkb+YFQk= -github.com/jfrog/gofrog v1.3.1/go.mod h1:IFMc+V/yf7rA5WZ74CSbXe+Lgf0iApEQLxRZVzKRUR0= -github.com/jfrog/jfrog-client-go v1.34.4 h1:Qt6Yniv48N9EaE0rrUZznOohuDRvqp9sUUHiHXAo3Xs= -github.com/jfrog/jfrog-client-go v1.34.4/go.mod h1:0PVhP6xGvBBaUzOU9LKf5OYkke/gY2IFILHA++iabFM= +github.com/jfrog/archiver/v3 v3.6.0 h1:OVZ50vudkIQmKMgA8mmFF9S0gA47lcag22N13iV3F1w= +github.com/jfrog/archiver/v3 v3.6.0/go.mod h1:fCAof46C3rAXgZurS8kNRNdSVMKBbZs+bNNhPYxLldI= +github.com/jfrog/build-info-go v1.9.26 h1:1Ddc6+Ecvhc+UMnKhRVG1jGM6fYNwA49207azTBGBc8= +github.com/jfrog/build-info-go v1.9.26/go.mod h1:8T7/ajM9aGshvgpwCtXwIFpyF/R6CEn4W+/FLryNXWw= +github.com/jfrog/gofrog v1.7.1 h1:ME1Meg4hukAT/7X6HUQCVSe4DNjMZACCP8aCY37EW/w= +github.com/jfrog/gofrog v1.7.1/go.mod h1:X7bjfWoQDN0Z4FQGbE91j3gbPP7Urwzm4Z8tkvrlbRI= +github.com/jfrog/jfrog-client-go v1.40.2 h1:zdCWPPT11r0bMGnAXGhZPb3RrIINhiTFCceQABhguZ4= +github.com/jfrog/jfrog-client-go v1.40.2/go.mod h1:m3hIn12eFWk5nJH1swPRtFrjXbiiCscOpX+v/vCdmNI= github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/compress v1.11.4 h1:kz40R/YWls3iqT9zX9AHN3WoVsrAWVyui5sxuLqiXqU= -github.com/klauspost/compress v1.11.4/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= +github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= +github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/klauspost/cpuid/v2 v2.2.3 h1:sxCkb+qR91z4vsqw4vGGZlDgPz3G7gjaLyK3V8y70BU= github.com/klauspost/cpuid/v2 v2.2.3/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= -github.com/klauspost/pgzip v1.2.5 h1:qnWYvvKqedOF2ulHpMG72XQol4ILEJ8k2wwRl/Km8oE= -github.com/klauspost/pgzip v1.2.5/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= +github.com/klauspost/pgzip v1.2.6 h1:8RXeL5crjEUFnR2/Sn6GJNWtSQ3Dk8pq4CL3jvdDyjU= +github.com/klauspost/pgzip v1.2.6/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= -github.com/matryer/is v1.2.0 h1:92UTHpy8CDwaJ08GqLDzhhuixiBUUD1p3AU6PHddz4A= -github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA= -github.com/mholt/archiver/v3 v3.5.1 h1:rDjOBX9JSF5BvoJGvjqK479aL70qh9DIpZCl+k7Clwo= -github.com/mholt/archiver/v3 v3.5.1/go.mod h1:e3dqJ7H78uzsRSEACH1joayhuSyhnonssnDhppzS1L4= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM= github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8= -github.com/nwaples/rardecode v1.1.0 h1:vSxaY8vQhOcVr4mm5e8XllHWTiM4JF507A0Katqw7MQ= -github.com/nwaples/rardecode v1.1.0/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0= +github.com/nwaples/rardecode v1.1.3 h1:cWCaZwfM5H7nAD6PyEdcVnczzV8i/JtotnyW/dD9lEc= +github.com/nwaples/rardecode v1.1.3/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0= github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI= -github.com/pierrec/lz4/v4 v4.1.2 h1:qvY3YFXRQE/XB8MlLzJH7mSzBs74eA2gg52YTk6jUPM= -github.com/pierrec/lz4/v4 v4.1.2/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/onsi/gomega v1.27.10/go.mod h1:RsS8tutOdbdgzbPtzzATp12yT7kM5I5aElG3evPbQ0M= +github.com/pierrec/lz4/v4 v4.1.21 h1:yOVMLb6qSIDP67pl/5F7RepeKYu/VmTyEXvuMI5d9mQ= +github.com/pierrec/lz4/v4 v4.1.21/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4= github.com/pjbgf/sha1cd v0.3.0/go.mod h1:nZ1rrWOcGJ5uZgEEVL1VUM9iRQiZvWdbZjkKyFzPPsI= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= @@ -89,21 +95,23 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN github.com/rivo/uniseg v0.4.3 h1:utMvzDsuh3suAEnhH0RdHmoPbU648o6CvXxTx4SBMOw= github.com/rivo/uniseg v0.4.3/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= -github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0= -github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= +github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= +github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8= +github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/skeema/knownhosts v1.2.0 h1:h9r9cf0+u7wSE+M183ZtMGgOJKiL96brpaz5ekfJCpM= -github.com/skeema/knownhosts v1.2.0/go.mod h1:g4fPeYpque7P0xefxtGzV81ihjC8sX2IqpAoNkjxbMo= +github.com/skeema/knownhosts v1.2.2 h1:Iug2P4fLmDw9f41PB6thxUkNUkJzB5i+1/exaj40L3A= +github.com/skeema/knownhosts v1.2.2/go.mod h1:xYbVRSPxqBZFrdmDyMmsOs+uX1UZC3nTN3ThzgDxUwo= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= -github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/terminalstatic/go-xsd-validate v0.1.5 h1:RqpJnf6HGE2CB/lZB1A8BYguk8uRtcvYAPLCF15qguo= -github.com/ulikunitz/xz v0.5.8/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= -github.com/ulikunitz/xz v0.5.9 h1:RsKRIA2MO8x56wkkcd3LbtcE/uMszhb6DpRf+3uwa3I= -github.com/ulikunitz/xz v0.5.9/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +github.com/terminalstatic/go-xsd-validate v0.1.5/go.mod h1:18lsvYFofBflqCrvo1umpABZ99+GneNTw2kEEc8UPJw= +github.com/ulikunitz/xz v0.5.6/go.mod h1:2bypXElzHzzJZwzH67Y6wb67pO62Rzfn7BSiF4ABRW8= +github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= +github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f h1:J9EGpcZtP0E/raorCMxlFGSTBrsSlaDGf3jU/qvAE2c= @@ -122,14 +130,14 @@ golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= -golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= -golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= -golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjsbSXD66ic0XW0js0R9g= -golang.org/x/exp v0.0.0-20230905200255-921286631fa9/go.mod h1:S2oDrQGGwySpoQPVqRShND87VCbxmc6bL1Yd2oYrm6k= +golang.org/x/crypto v0.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI= +golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= +golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 h1:vr/HnozRka3pE4EsMEg1lgkXJkTFJCVUX+S/ZT6wYzM= +golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842/go.mod h1:XtvwrStGgqGPLc4cjQfWqZHG1YFdYs6swckp8vpsjnc= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc= -golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= +golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= @@ -137,12 +145,13 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= -golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= -golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= +golang.org/x/net v0.25.0 h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac= +golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= +golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= +golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -157,15 +166,15 @@ golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= -golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y= +golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= -golang.org/x/term v0.13.0 h1:bb+I9cTfFazGW51MZqBVmZy7+JEJMouUHTUSKVQLBek= -golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= +golang.org/x/term v0.20.0 h1:VnkxpohqXaOBYJtBmEppKUG6mXpi+4O6purfc2+sMhw= +golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= @@ -173,22 +182,22 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= +golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk= +golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.13.0 h1:Iey4qkscZuv0VvIt8E0neZjtPVQFSc870HQ448QgEmQ= -golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= +golang.org/x/tools v0.21.0 h1:qc0xYgIbsSDt9EyWz05J5wfa7LOVW0YTLOXrqdLAWIw= +golang.org/x/tools v0.21.0/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/jfrog-applications/README.md b/jfrog-applications/README.md index cbff800..c3c05a0 100644 --- a/jfrog-applications/README.md +++ b/jfrog-applications/README.md @@ -21,7 +21,7 @@ layout: -## Welcome to the JFrog Applications Doc Hub +## Welcome to the JFrog Applications Doc Hub
IDEideIDE.png
CLIjfrog-clicli.png
FrogbotfrogbotFROG BOT.png
CI ci-integrationsCI Integrations.png
SDKssdksSDK.png
diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/environment-variables.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/environment-variables.md index fa609b5..2e4642f 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/environment-variables.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/environment-variables.md @@ -3,21 +3,21 @@ Some of the Artifactory commands make use of the following environment variable: -| | | -|----------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| **Variable Name** | **Description** | -| **JFROG\_CLI\_MIN\_CHECKSUM\_DEPLOY\_SIZE\_KB** |

[Default: 10]
Minimum file size in KB for which JFrog CLI performs checksum deploy optimization.

| -| **JFROG\_CLI\_RELEASES\_REPO** |

Configured Artifactory repository name to download the jar needed by the mvn/gradle command.
This environment variable's value format should be <server ID configured by the 'jf c add' command>/<repo name>.
The repository should proxy https://releases.jfrog.io.
This environment variable is used by the 'jf mvn' and 'jf gradle' commands, and also by the 'jf audit' command, when used for maven or gradle projects.

| -| **JFROG\_CLI\_DEPENDENCIES\_DIR** |

[Default: $JFROG_CLI_HOME_DIR/dependencies]
Defines the directory to which JFrog CLI's internal dependencies are downloaded.

| -| **JFROG\_CLI\_REPORT\_USAGE** |

[Default: true]
Set to false to block JFrog CLI from sending usage statistics to Artifactory.

| -| **JFROG\_CLI\_SERVER\_ID** | Server ID configured using the 'jf config' command, unless sent as a command argument or option. | -| **JFROG\_CLI\_BUILD\_NAME** | Build name to be used by commands which expect a build name, unless sent as a command argument or option. | -| **JFROG\_CLI\_BUILD\_NUMBER** | Build number to be used by commands which expect a build number, unless sent as a command argument or option. | -| **JFROG\_CLI\_BUILD\_PROJECT** | JFrog project key to be used by commands that expect build name and build number. Determines the project of the published build. | -| **JFROG\_CLI\_BUILD\_URL** | Sets the CI server build URL in the build-info. The "jf rt build-publish" command uses the value of this environment variable unless the --build-url command option is sent. | -| **JFROG\_CLI\_ENV\_EXCLUDE** |

[Default: *password*;*secret*;*key*;*token*]
List of semicolon-separated(;) case insensitive patterns in the form of "value1;value2;...". Environment variables match those patterns will be excluded. This environment variable is used by the "jf rt build-publish" command, in case the --env-exclude command option is not sent.

| -| **JFROG\_CLI\_TRANSITIVE\_DOWNLOAD\_EXPERIMENTAL** |

[Default: false]
Used by the "jf rt download" command. Set to true to download artifacts also from remote repositories. This feature is experimental and available on Artifactory version 7.17.0 or higher.

| -| **JFROG\_CLI\_UPLOAD\_EMPTY\_ARCHIVE** |

[Default: false]
Used by the "jf rt upload" command. Set to true if you'd like to upload an empty archive when '--archive' is set but all files were excluded by exclusions pattern.

| +| | | +|----------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| **Variable Name** | **Description** | +| **JFROG\_CLI\_MIN\_CHECKSUM\_DEPLOY\_SIZE\_KB** |

[Default: 10]
Minimum file size in KB for which JFrog CLI performs checksum deploy optimization.

| +| **JFROG\_CLI\_RELEASES\_REPO** |

Configured Artifactory repository name to download the jar needed by the mvn/gradle command.
This environment variable's value format should be server ID configured by the 'jf c add' command.
The repository should proxy https://releases.jfrog.io.
This environment variable is used by the 'jf mvn' and 'jf gradle' commands, and also by the 'jf audit' command, when used for maven or gradle projects.

| +| **JFROG\_CLI\_DEPENDENCIES\_DIR** |

[Default: $JFROG_CLI_HOME_DIR/dependencies]
Defines the directory to which JFrog CLI's internal dependencies are downloaded.

| +| **JFROG\_CLI\_REPORT\_USAGE** |

[Default: true]
Set to false to block JFrog CLI from sending usage statistics to Artifactory.

| +| **JFROG\_CLI\_SERVER\_ID** | Server ID configured using the 'jf config' command, unless sent as a command argument or option. | +| **JFROG\_CLI\_BUILD\_NAME** | Build name to be used by commands which expect a build name, unless sent as a command argument or option. | +| **JFROG\_CLI\_BUILD\_NUMBER** | Build number to be used by commands which expect a build number, unless sent as a command argument or option. | +| **JFROG\_CLI\_BUILD\_PROJECT** | JFrog project key to be used by commands that expect build name and build number. Determines the project of the published build. | +| **JFROG\_CLI\_BUILD\_URL** | Sets the CI server build URL in the build-info. The "jf rt build-publish" command uses the value of this environment variable unless the --build-url command option is sent. | +| **JFROG\_CLI\_ENV\_EXCLUDE** |

[Default: *password*;*secret*;*key*;*token*]
List of semicolon-separated(;) case insensitive patterns in the form of "value1;value2;...". Environment variables match those patterns will be excluded. This environment variable is used by the "jf rt build-publish" command, in case the --env-exclude command option is not sent.

| +| **JFROG\_CLI\_TRANSITIVE\_DOWNLOAD\_EXPERIMENTAL** |

[Default: false]
Used by the "jf rt download" command. Set to true to download artifacts also from remote repositories. This feature is experimental and available on Artifactory version 7.17.0 or higher.

| +| **JFROG\_CLI\_UPLOAD\_EMPTY\_ARCHIVE** |

[Default: false]
Used by the "jf rt upload" command. Set to true if you'd like to upload an empty archive when '--archive' is set but all files were excluded by exclusions pattern.

| *** diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-binaries.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-binaries.md index 1a42567..1de77c8 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-binaries.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-binaries.md @@ -19,20 +19,20 @@ This _**jf scan**_ command scans files on the local file system with Xray. #### Commands Params -| | | -|-----------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| **Command name** | scan | -| **Abbreviation** | s | -| **Command options** | | -| --server-id |

[Optional]
Server ID configured using the jf c add command. If not specified, the default configured server is used.

| -| --spec |

[Optional]
Path to a file specifying the files to scan. If the pattern argument is provided to the command, this option should not be provided.

| -| --project |

[Optional]
JFrog project key, to enable Xray to determine security violations accordingly. The command accepts this option only if the --repo-path and --watches options are not provided. If none of the three options are provided, the command will show all known vulnerabilities.

| -| --repo-path |

[Optional]
Artifactory repository path in the form of <repository>/<path in the repository>, to enable Xray to determine violations accordingly. The command accepts this option only if the --project and --watches options are not provided. If none of the three options are provided, the command will show all known vulnerabilities.

| -| --watches |

[Optional]
A comma-separated(,) list of Xray watches, to enable Xray to determine violations accordingly. The command accepts this option only if the --project and --repo-path options are not provided. If none of the three options are provided, the command will show all known vulnerabilities.

| -| --licenses |

[Default: false]
Set if you also require the list of licenses to be displayed.

| -| --format=json |

[Optional]
Produces a JSON file containing the scan results.

| -| **Command arguments** | | -| **Pattern** | Specifies the local file system path to artifacts to be scanned. You can specify multiple files by using wildcards. | +| | | +|-----------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| **Command name** | scan | +| **Abbreviation** | s | +| **Command options** | | +| --server-id |

[Optional]
Server ID configured using the jf c add command. If not specified, the default configured server is used.

| +| --spec |

[Optional]
Path to a file specifying the files to scan. If the pattern argument is provided to the command, this option should not be provided.

| +| --project |

[Optional]
JFrog project key, to enable Xray to determine security violations accordingly. The command accepts this option only if the --repo-path and --watches options are not provided. If none of the three options are provided, the command will show all known vulnerabilities.

| +| --repo-path |

[Optional]
Artifactory repository path, to enable Xray to determine violations accordingly. The command accepts this option only if the --project and --watches options are not provided. If none of the three options are provided, the command will show all known vulnerabilities.

| +| --watches |

[Optional]
A comma-separated(,) list of Xray watches, to enable Xray to determine violations accordingly. The command accepts this option only if the --project and --repo-path options are not provided. If none of the three options are provided, the command will show all known vulnerabilities.

| +| --licenses |

[Default: false]
Set if you also require the list of licenses to be displayed.

| +| --format=json |

[Optional]
Produces a JSON file containing the scan results.

| +| **Command arguments** | | +| **Pattern** | Specifies the local file system path to artifacts to be scanned. You can specify multiple files by using wildcards. | #### Example 1 @@ -99,19 +99,19 @@ This j\_**f docker scan**\_ command scans docker containers located on the local #### Commands Params -| | | -|-----------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| **Command name** | docker scan | -| **Abbreviation** | | -| **Command options** | | -| --server-id |

[Optional]
Server ID configured using the jf c add command. If not specified, the default configured server is used.

| -| --project |

[Optional]
JFrog project key, to enable Xray to determine security violations accordingly. The command accepts this option only if the --repo-path and --watches options are not provided. If none of the three options are provided, the command will show all known vulnerabilities.

| -| --repo-path |

[Optional]
Artifactory repository path in the form of <repository>/<path in the repository>, to enable Xray to determine violations accordingly. The command accepts this option only if the --project and --watches options are not provided. If none of the three options are provided, the command will show all known vulnerabilities.

| -| --watches |

[Optional]
A comma-separated(,) list of Xray watches, to enable Xray to determine violations accordingly. The command accepts this option only if the --repo-path and --repo-path options are not provided. If none of the three options are provided, the command will show all known vulnerabilities.

| -| --licenses |

[Default: false]
Set if you also require the list of licenses to be displayed.

| -| --format=json |

[Optional]
Produces a JSON file containing the scan results.

| -| **Command arguments** | | -| **Pattern** | Specifies the local file system path to artifacts to be scanned. You can specify multiple files by using wildcards. | +| | | +|-----------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| **Command name** | docker scan | +| **Abbreviation** | | +| **Command options** | | +| --server-id |

[Optional]
Server ID configured using the jf c add command. If not specified, the default configured server is used.

| +| --project |

[Optional]
JFrog project key, to enable Xray to determine security violations accordingly. The command accepts this option only if the --repo-path and --watches options are not provided. If none of the three options are provided, the command will show all known vulnerabilities.

| +| --repo-path |

[Optional]
Artifactory repository path, to enable Xray to determine violations accordingly. The command accepts this option only if the --project and --watches options are not provided. If none of the three options are provided, the command will show all known vulnerabilities.

| +| --watches |

[Optional]
A comma-separated(,) list of Xray watches, to enable Xray to determine violations accordingly. The command accepts this option only if the --repo-path and --repo-path options are not provided. If none of the three options are provided, the command will show all known vulnerabilities.

| +| --licenses |

[Default: false]
Set if you also require the list of licenses to be displayed.

| +| --format=json |

[Optional]
Produces a JSON file containing the scan results.

| +| **Command arguments** | | +| **Pattern** | Specifies the local file system path to artifacts to be scanned. You can specify multiple files by using wildcards. | #### Example 1 diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-source-code.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-source-code.md index e96d29b..0e7bad0 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-source-code.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-source-code.md @@ -35,36 +35,36 @@ This command also supports the following Advanced Scans with the **Advanced Secu #### Commands Params -| | | -|-----------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| **Command name** | audit | -| **Abbreviation** | aud | -| **Command options** | | -| --server-id |

[Optional]
Server ID configured using the jf c add command. If not specified, the default configured server is used.

| -| --project |

[Optional]
JFrog project key, to enable Xray to determine security violations accordingly. The command accepts this option only if the --repo-path and --watches options are not provided. If none of the three options are provided, the command will show all known vulnerabilities

| -| --repo-path |

[Optional]
Artifactory repository path in the form of <repository>/<path in the repository>, to enable Xray to determine violations accordingly. The command accepts this option only if the --project and --watches options are not provided. If none of the three options are provided, the command will show all known vulnerabilities

| -| --watches |

[Optional]
A comma-separated(,) list of Xray watches, to enable Xray to determine violations accordingly. The command accepts this option only if the --repo-path and --repo-path options are not provided. If none of the three options are provided, the command will show all known vulnerabilities

| -| --licenses |

[Default: false]
Set if you'd also like the list of licenses to be displayed.

| -| --format |

[Default: table]
Defines the output format of the command. Acceptable values are: table and json.

| -| --fail |

[Default: true]
When using one of the flags --watches, --project or --repo-path and a Fail build rule is matched the command will return exit code 3. Set to false if you'd like to see violations with exit code 0.

| -| --use-wrapper |

[Default: false] [Gradle]
Set to true if you'd like to use the Gradle wrapper.

| -| --dep-type |

[Default: all] [npm]
Defines npm dependencies type. Possible values are: all, devOnly and prodOnly

| -| --exclude-test-deps |

[Default: false] [Gradle]
Set to true if you'd like to exclude Gradle test dependencies from Xray scanning.

| -| --requirements-file |

[Optional] [Pip]
Defines pip requirements file name. For example: 'requirements.txt'

| -| --working-dirs |

[Optional]
A comma-separated(,) list of relative working directories, to determine the audit targets locations.

If flag isn't provided, a recursive scan is triggered from the root directory of the project. | -| --exclusions |

[Default: *.git*;*node_modules*;*target*;*venv*;*test*]
List of semicolon-separated(;) exclusions, utilized to skip sub-projects from undergoing an audit. These exclusions may incorporate the * and ? wildcards.

| -| --fixable-only |

[Optional]
Set to true if you wish to display issues that have a fix version only.

| -| --min-severity |

[Optional]
Set the minimum severity of issues to display. The following values are accepted: Low, Medium, High or Critical

| -| --go |

[Default: false]
Set to true to request audit for a Go project.

| -| --gradle |

[Default: false]
Set to true to request audit for a Gradle project.

| -| --mvn |

[Default: false]
Set to true to request audit for a Maven project.

| -| --npm |

[Default: false]
Set to true to request audit for a npm project.

| -| --pnpm |

[Default: false]
Set to true to request audit for a pnpm project.

| -| --nuget |

[Default: false]
Set to true to request audit for a .Net project.

| -| --pip |

[Default: false]
Set to true to request audit for a Pip project.

| -| --pipenv |

[Default: false]
Set to true to request audit for a Pipenv project.

| -| --yarn |

[Default: false]
Set to true to request audit for a Yarn project.

| -| **Command arguments** | The command accepts no arguments | +| | | +|-----------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| **Command name** | audit | +| **Abbreviation** | aud | +| **Command options** | | +| --server-id |

[Optional]
Server ID configured using the jf c add command. If not specified, the default configured server is used.

| +| --project |

[Optional]
JFrog project key, to enable Xray to determine security violations accordingly. The command accepts this option only if the --repo-path and --watches options are not provided. If none of the three options are provided, the command will show all known vulnerabilities

| +| --repo-path |

[Optional]
Artifactory repository path, to enable Xray to determine violations accordingly. The command accepts this option only if the --project and --watches options are not provided. If none of the three options are provided, the command will show all known vulnerabilities

| +| --watches |

[Optional]
A comma-separated(,) list of Xray watches, to enable Xray to determine violations accordingly. The command accepts this option only if the --repo-path and --repo-path options are not provided. If none of the three options are provided, the command will show all known vulnerabilities

| +| --licenses |

[Default: false]
Set if you'd also like the list of licenses to be displayed.

| +| --format |

[Default: table]
Defines the output format of the command. Acceptable values are: table and json.

| +| --fail |

[Default: true]
When using one of the flags --watches, --project or --repo-path and a Fail build rule is matched the command will return exit code 3. Set to false if you'd like to see violations with exit code 0.

| +| --use-wrapper |

[Default: false] [Gradle]
Set to true if you'd like to use the Gradle wrapper.

| +| --dep-type |

[Default: all] [npm]
Defines npm dependencies type. Possible values are: all, devOnly and prodOnly

| +| --exclude-test-deps |

[Default: false] [Gradle]
Set to true if you'd like to exclude Gradle test dependencies from Xray scanning.

| +| --requirements-file |

[Optional] [Pip]
Defines pip requirements file name. For example: 'requirements.txt'

| +| --working-dirs |

[Optional]
A comma-separated(,) list of relative working directories, to determine the audit targets locations.

If flag isn't provided, a recursive scan is triggered from the root directory of the project. | +| --exclusions |

[Default: *.git*;*node_modules*;*target*;*venv*;*test*]
List of semicolon-separated(;) exclusions, utilized to skip sub-projects from undergoing an audit. These exclusions may incorporate the * and ? wildcards.

| +| --fixable-only |

[Optional]
Set to true if you wish to display issues that have a fix version only.

| +| --min-severity |

[Optional]
Set the minimum severity of issues to display. The following values are accepted: Low, Medium, High or Critical

| +| --go |

[Default: false]
Set to true to request audit for a Go project.

| +| --gradle |

[Default: false]
Set to true to request audit for a Gradle project.

| +| --mvn |

[Default: false]
Set to true to request audit for a Maven project.

| +| --npm |

[Default: false]
Set to true to request audit for a npm project.

| +| --pnpm |

[Default: false]
Set to true to request audit for a pnpm project.

| +| --nuget |

[Default: false]
Set to true to request audit for a .Net project.

| +| --pip |

[Default: false]
Set to true to request audit for a Pip project.

| +| --pipenv |

[Default: false]
Set to true to request audit for a Pipenv project.

| +| --yarn |

[Default: false]
Set to true to request audit for a Yarn project.

| +| **Command arguments** | The command accepts no arguments | #### **Output Example** diff --git a/jfrog-applications/jfrog-cli/get-started/configurations/README.md b/jfrog-applications/jfrog-cli/get-started/configurations/README.md index 5059b91..4598f5e 100644 --- a/jfrog-applications/jfrog-cli/get-started/configurations/README.md +++ b/jfrog-applications/jfrog-cli/get-started/configurations/README.md @@ -1,2 +1,2 @@ -# Configurations +# Configurations diff --git a/jfrog-applications/jfrog-cli/get-started/download-and-install/usage.md b/jfrog-applications/jfrog-cli/get-started/download-and-install/usage.md index 5282a0a..cb7f609 100644 --- a/jfrog-applications/jfrog-cli/get-started/download-and-install/usage.md +++ b/jfrog-applications/jfrog-cli/get-started/download-and-install/usage.md @@ -1,8 +1,6 @@ # Usage -To use the CLI, [install](https://jfrog.com/getcli/) it on your local machine, or [download](https://jfrog.com/getcli/) its executable, place it anywhere in your file system and add its location to your - -`PATH` environment variable. +To use the CLI, [install](https://jfrog.com/getcli/) it on your local machine, or [download](https://jfrog.com/getcli/) its executable, place it anywhere in your file system and add its location to your `PATH` environment variable. **Environment Variables** @@ -10,14 +8,14 @@ The **jf options** command displays all the supported environment variables. JFrog CLI makes use of the following environment variables: -| Variable Name | Description | -|---------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| **JFROG\_CLI\_LOG\_LEVEL** |

[Default: INFO]

This variable determines the log level of the JFrog CLI. Possible values are: DEBUG, INFO, WARN and ERROR. If set to ERROR, JFrog CLI logs error messages only. It is useful when you wish to read or parse the JFrog CLI output and do not want any other information logged.

| -| **JFROG\_CLI\_LOG\_TIMESTAMP** |

[Default: TIME]

Controls the log messages timestamp format. Possible values are: TIME, DATE_AND_TIME, and OFF.

| -| **JFROG\_CLI\_HOME\_DIR** |

[Default: ~/.jfrog]

Defines the JFrog CLI home directory.

| -| **JFROG\_CLI\_TEMP\_DIR** |

[Default: The operating system's temp directory]

Defines the temp directory used by JFrog CLI.

| -| **JFROG\_CLI\_PLUGINS\_SERVER** |

[Default: Official JFrog CLI Plugins registry]

Configured Artifactory server ID from which to download JFrog CLI Plugins.

| -| **JFROG\_CLI\_PLUGINS\_REPO** |

[Default: 'jfrog-cli-plugins']

Can be optionally used with the JFROG_CLI_PLUGINS_SERVER environment variable. Determines the name of the local repository to use.

| -| **JFROG\_CLI\_RELEASES\_REPO** |

Configured Artifactory repository name from which to download the jar needed by the mvn/gradle command.
This environment variable's value format should be <server ID configured by the 'jf c add' command>/<repo name>.
The repository should proxy https://releases.jfrog.io.
This environment variable is used by the 'jf mvn' and 'jf gradle' commands, and also by the 'jf audit' command, when used for maven or gradle projects.

| -| **JFROG\_CLI\_SERVER\_ID** | Server ID configured using the 'jf config' command, unless sent as a command argument or option. | -| **CI** |

[Default: false]

If true, disables interactive prompts and progress bar.

| +| Variable Name | Description | +|---------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| **JFROG\_CLI\_LOG\_LEVEL** |

[Default: INFO]

This variable determines the log level of the JFrog CLI. Possible values are: DEBUG, INFO, WARN and ERROR. If set to ERROR, JFrog CLI logs error messages only. It is useful when you wish to read or parse the JFrog CLI output and do not want any other information logged.

| +| **JFROG\_CLI\_LOG\_TIMESTAMP** |

[Default: TIME]

Controls the log messages timestamp format. Possible values are: TIME, DATE_AND_TIME, and OFF.

| +| **JFROG\_CLI\_HOME\_DIR** |

[Default: ~/.jfrog]

Defines the JFrog CLI home directory.

| +| **JFROG\_CLI\_TEMP\_DIR** |

[Default: The operating system's temp directory]

Defines the temp directory used by JFrog CLI.

| +| **JFROG\_CLI\_PLUGINS\_SERVER** |

[Default: Official JFrog CLI Plugins registry]

Configured Artifactory server ID from which to download JFrog CLI Plugins.

| +| **JFROG\_CLI\_PLUGINS\_REPO** |

[Default: 'jfrog-cli-plugins']

Can be optionally used with the JFROG_CLI_PLUGINS_SERVER environment variable. Determines the name of the local repository to use.

| +| **JFROG\_CLI\_RELEASES\_REPO** |

Configured Artifactory repository name from which to download the jar needed by the mvn/gradle command.
This environment variable's value format should be server ID configured by the 'jf c add' command.
The repository should proxy https://releases.jfrog.io.
This environment variable is used by the 'jf mvn' and 'jf gradle' commands, and also by the 'jf audit' command, when used for maven or gradle projects.

| +| **JFROG\_CLI\_SERVER\_ID** | Server ID configured using the 'jf config' command, unless sent as a command argument or option. | +| **CI** |

[Default: false]

If true, disables interactive prompts and progress bar.

| diff --git a/jfrog-applications/jfrog-security-features/sast/README.md b/jfrog-applications/jfrog-security-features/sast/README.md index 6d312c5..844b5b0 100644 --- a/jfrog-applications/jfrog-security-features/sast/README.md +++ b/jfrog-applications/jfrog-security-features/sast/README.md @@ -4,7 +4,7 @@ ### What is JFrog SAST? -
FASTEasy setup with just a few steps
FOCUSEDDeep analysis with focus on security issues
LOCAL & SECUREWork locally in your environment
+
FASTEasy setup with just a few steps
FOCUSEDDeep analysis with focus on security issues
LOCAL SECUREWork locally in your environment
The JFrog SAST solution aims to enable software developers to hunt, fix, and learn about security issues in their code while allowing them to deliver fast, quality code, and reduce issues. @@ -19,7 +19,7 @@ JFrog SAST scans mainly for specific sensitive operations (DB queries, OS comman * SQL injections * Command injections * Code injections -* SSRF +* SSRF It also detects cases when certain APIs (encryption, cryptographic signing, file operations, etc.) are used with parameters or under circumstances that render the API use unsafe. diff --git a/jfrog-applications/jfrog-security-for-developers/features/sca.md b/jfrog-applications/jfrog-security-for-developers/features/sca.md index 182d479..e5e437f 100644 --- a/jfrog-applications/jfrog-security-for-developers/features/sca.md +++ b/jfrog-applications/jfrog-security-for-developers/features/sca.md @@ -19,4 +19,4 @@ With JFrog's Software Composition Analysis, get enhanced CVE detection and enhan * Scan pull requests immediately after they are opened but before they are merged. * Get notified if the pull request is about to introduce new vulnerabilities to your code. * Scan the Git repository periodically and create pull requests with fixes for vulnerabilities that are detected. -* Frogbot uses JFrog's vast vulnerabilities database, to which we continuously add new component vulnerability data. +* Frogbot uses JFrog's vast vulnerabilities database, to which we continuously add new component vulnerability data. From f4fb8768c8a9d7d09e7355effce50a6f392c810e Mon Sep 17 00:00:00 2001 From: Michael Sverdlov Date: Wed, 15 May 2024 17:08:13 +0300 Subject: [PATCH 18/57] Reformat all command tables (#126) --- .../artifactory-gradle-plugin.md | 2 +- .../frogbot/frogbot-configuration.md | 2 +- .../jetbrains-ides/plugin-configuration.md | 6 +- .../connect-vs-code-to-the-jfrog-platform.md | 2 +- .../visual-studio-code/extension-settings.md | 10 +- .../authentication.md | 14 +- .../build-integration.md | 190 +++---- .../curl-integration.md | 4 +- .../generic-files.md | 500 +++++++++--------- .../cli-for-jfrog-artifactory/git-lfs.md | 10 +- .../managing-configuration-entities.md | 70 +-- .../package-managers-integration.md | 334 ++++++------ .../release-lifecycle-management.md | 100 ++-- .../verifying-artifactory-accessibility.md | 8 +- .../jfrog-cli/cli-for-jfrog-cloud-transfer.md | 2 +- .../jfrog-cli/cli-for-jfrog-curation.md | 18 +- .../jfrog-cli/cli-for-jfrog-distribution.md | 106 ++-- .../jfrog-cli/cli-for-jfrog-pipelines.md | 34 +- .../cli-for-jfrog-security/README.md | 4 +- .../curl-integration.md | 4 +- .../scan-published-builds.md | 14 +- .../scan-your-binaries.md | 22 +- .../scan-your-source-code.md | 50 +- .../jfrog-platform-configuration.md | 60 +-- .../sast/ignore-findings.md | 2 +- 25 files changed, 784 insertions(+), 784 deletions(-) diff --git a/jfrog-applications/ci-and-sdks/ci-integrations/artifactory-gradle-plugin.md b/jfrog-applications/ci-and-sdks/ci-integrations/artifactory-gradle-plugin.md index 2ce5346..42218e2 100644 --- a/jfrog-applications/ci-and-sdks/ci-integrations/artifactory-gradle-plugin.md +++ b/jfrog-applications/ci-and-sdks/ci-integrations/artifactory-gradle-plugin.md @@ -4,7 +4,7 @@ The Gradle Artifactory Plugin provides tight integration with Gradle. All that is needed is a simple modification of your `build.gradle` script file with a few configuration parameters, and you can deploy your build artifacts and build information to Artifactory. -The plugin adds the `artifactoryPublish` task for each project, in the 'publishing' group. The task performs the following actions on the project and its submodules: +The plugin adds the `artifactoryPublish` task for each project, in the `publishing` group. The task performs the following actions on the project and its submodules: 1. Extracting the [build-info](https://www.buildinfo.org/) file located in the root project. This file contains comprehensive information about the build, such as its configuration, dependencies, and other relevant details. 2. Deploying both the generated artifacts and the build-info file to your Artifactory repository. This ensures that the artifacts, which are the output of the build process, and the accompanying build-info file are stored and organized in your Artifactory repository for easy access and management. diff --git a/jfrog-applications/frogbot/frogbot-configuration.md b/jfrog-applications/frogbot/frogbot-configuration.md index 93f8d3b..5c0bf7b 100644 --- a/jfrog-applications/frogbot/frogbot-configuration.md +++ b/jfrog-applications/frogbot/frogbot-configuration.md @@ -30,7 +30,7 @@ Frogbot relies on the project's descriptor files, such as package.json and pom.x - path/to/npm/project-2 ``` -Here's another example. Notice that we specify a custom 'install' command here. +Here's another example. Notice that we specify a custom `install` command here. ```yaml - params: diff --git a/jfrog-applications/ide/jetbrains-ides/plugin-configuration.md b/jfrog-applications/ide/jetbrains-ides/plugin-configuration.md index d4af831..e3e53a0 100644 --- a/jfrog-applications/ide/jetbrains-ides/plugin-configuration.md +++ b/jfrog-applications/ide/jetbrains-ides/plugin-configuration.md @@ -14,15 +14,15 @@ By default, the JFrog IDEA Plugin downloads the resources it requires from ![ExternalResourcesThroughArtifactoryPart1](../../.gitbook/assets/externalResourcesThroughArtifactoryPart1.png) - - Under the 'Advanced' tab: - - Uncheck the 'Store Artifacts Locally' option + - Under the `Advanced` tab: + - Uncheck the `Store Artifacts Locally` option ![ExternalResourcesThroughArtifactoryPart2](../../.gitbook/assets/externalResourcesThroughArtifactoryPart2.png) diff --git a/jfrog-applications/ide/visual-studio-code/connect-vs-code-to-the-jfrog-platform.md b/jfrog-applications/ide/visual-studio-code/connect-vs-code-to-the-jfrog-platform.md index b2ee5ce..a175d9a 100644 --- a/jfrog-applications/ide/visual-studio-code/connect-vs-code-to-the-jfrog-platform.md +++ b/jfrog-applications/ide/visual-studio-code/connect-vs-code-to-the-jfrog-platform.md @@ -36,7 +36,7 @@ This will open the Sign in page: Fill in your connection details and click on the `Sign In` button to start using the extension -**Note**: If you would like to use custom URLs for Artifactory or Xray, click on 'Advanced'. +**Note**: If you would like to use custom URLs for Artifactory or Xray, click on `Advanced`. You can also choose other option to authenticate with your JFrog Platform instance: diff --git a/jfrog-applications/ide/visual-studio-code/extension-settings.md b/jfrog-applications/ide/visual-studio-code/extension-settings.md index d3cef6d..1365fd5 100644 --- a/jfrog-applications/ide/visual-studio-code/extension-settings.md +++ b/jfrog-applications/ide/visual-studio-code/extension-settings.md @@ -13,8 +13,8 @@ By default, paths containing the words `.git`, `test`, `venv` and `node_modules` If your JFrog environment is behind an HTTP/S proxy, follow these steps to configure the proxy server: 1. Go to Preferences --> Settings --> Application --> Proxy -2. Set the proxy URL under 'Proxy'. -3. Make sure 'Proxy Support' is 'override' or 'on'. +2. Set the proxy URL under `Proxy`. +3. Make sure 'Proxy Support' is `override` or `on`. * Alternatively, you can use the HTTP\_PROXY and HTTPS\_PROXY environment variables. @@ -26,14 +26,14 @@ By default, the JFrog VS Code extension downloads the resources it requires from 1. Login to the JFrog Platform UI, with a user who has admin permissions. 2. Create a Remote Repository with the following properties set: - * Under the 'Basic' tab: + * Under the `Basic` tab: * Package Type: Generic * Repository Key: jfrog-releases-repository * URL: ![ExternalResourcesThroughArtifactoryPart1](../../.gitbook/assets/externalResourcesThroughArtifactoryPart1.png) - * Under the 'Advanced' tab: + * Under the `Advanced` tab: * Uncheck the 'Store Artifacts Locally' option ![ExternalResourcesThroughArtifactoryPart2](../../.gitbook/assets/externalResourcesThroughArtifactoryPart2.png) @@ -82,4 +82,4 @@ settings.json: ### Troubleshooting -Change the log level to 'debug', 'info', 'warn', or 'err' in the [Extension Settings](extension-settings.md). +Change the log level to `debug`, `info`, `warn`, or `err` in the [Extension Settings](extension-settings.md). diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/authentication.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/authentication.md index 22f7f3d..61175e9 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/authentication.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/authentication.md @@ -8,9 +8,9 @@ To authenticate yourself using your JFrog login credentials, either configure yo | Command option | Description | |----------------|-----------------------------------------------------------------------| -| --url | JFrog Artifactory API endpoint URL. It usually ends with /artifactory | -| --user | JFrog username | -| --password | JFrog password or API key | +| `--url` | JFrog Artifactory API endpoint URL. It usually ends with /artifactory | +| `--user` | JFrog username | +| `--password` | JFrog password or API key | For enhanced security, when JFrog CLI is configured to use a username and password / API key, it automatically generates an access token to authenticate with Artifactory. The generated access token is valid for one hour only. JFrog CLI automatically refreshed the token before it expires. The **jf c add** command allows disabling this functionality. This feature is currently not supported by commands which use external tools or package managers or work with JFrog Distribution. @@ -18,10 +18,10 @@ For enhanced security, when JFrog CLI is configured to use a username and passwo To authenticate yourself using an Artifactory Access Token, either configure your Access Token once using the **jf c add** command or provide the following option to each command. -| Command option | Description | -|----------------|-----------------------------------------------------------------------| -| --url | JFrog Artifactory API endpoint URL. It usually ends with /artifactory | -| --access-token | JFrog access token | +| Command option | Description | +|------------------|-----------------------------------------------------------------------| +| `--url` | JFrog Artifactory API endpoint URL. It usually ends with /artifactory | +| `--access-token` | JFrog access token | ## Authenticating with RSA Keys diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/build-integration.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/build-integration.md index 0357c68..78bbd6d 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/build-integration.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/build-integration.md @@ -46,15 +46,15 @@ Environment variables are collected using the `build-collect-env` (`bce`) comman The following table lists the command arguments and flags: -| | | -|-------------------|-----------------------------------------| -| Command name | rt build-collect-env | -| Abbreviation | rt bce | -| Command arguments | The command accepts two arguments. | -| Build name | Build name. | -| Build number | Build number. | -| Command options | | -| --project |

[Optional]
JFrog project key.

| +| | | +|----------------------|-----------------------------------------| +| Command name | rt build-collect-env | +| Abbreviation | rt bce | +| Command arguments | The command accepts two arguments. | +| Build name | Build name. | +| Build number | Build number. | +| **Command options:** | | +| `--project` |

[Optional]
JFrog project key.

| #### Examples ##### Example 1 @@ -85,18 +85,18 @@ The `build-add-git` (bag) command collects the Git revision and URL from the loc The following table lists the command arguments and flags: -| | | -|-------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command name | rt build-add-git | -| Abbreviation | rt bag | -| Command arguments | The command accepts three arguments. | -| Build name | Build name. | -| Build number | Build number. | -| .git path | Optional - Path to a directory containing the .git directory. If not specific, the .git directory is assumed to be in the current directory or in one of the parent directories. | -| Command options | | -| --config |

[Optional]
Path to a yaml configuration file, used for collecting tracked project issues and adding them to the build-info.

| -| --server-id |

[Optional]
Server ID configured using the 'jf config' command. This is the server to which the build-info will be later published, using the jf rt build-publish command. This option, if provided, overrides the serverID value in this command's yaml configuration. If both values are not provided, the default server, configured by the 'jf config' command, is used.

| -| --project |

[Optional]
JFrog project key.

| +| | | +|----------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command name | rt build-add-git | +| Abbreviation | rt bag | +| Command arguments | The command accepts three arguments. | +| Build name | Build name. | +| Build number | Build number. | +| .git path | Optional - Path to a directory containing the .git directory. If not specific, the .git directory is assumed to be in the current directory or in one of the parent directories. | +| **Command options:** | | +| `--config` |

[Optional]
Path to a yaml configuration file, used for collecting tracked project issues and adding them to the build-info.

| +| `--server-id` |

[Optional]
Server ID configured using the 'jf config' command. This is the server to which the build-info will be later published, using the jf rt build-publish command. This option, if provided, overrides the serverID value in this command's yaml configuration. If both values are not provided, the default server, configured by the 'jf config' command, is used.

| +| `--project` |

[Optional]
JFrog project key.

| #### Configuration file properties @@ -151,24 +151,24 @@ By default, the command collects the files from the local file system. If you'd #### Commands Params -| | | -|-------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command name | rt build-add-dependencies | -| Abbreviation | rt bad | -| Command arguments | The command takes three arguments. | -| Build name | The build name to add the dependencies to | -| Build number | The build number to add the dependencies to | -| Pattern | Specifies the local file system path to dependencies which should be added to the build info. You can specify multiple dependencies by using wildcards or a regular expression as designated by the --regexp command option. If you have specified that you are using regular expressions, then the first one used in the argument must be enclosed in parenthesis. | -| Command options |

When using the * or ; characters in the command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| -| --from-rt |

[Default: false]
Set to true to search the files in Artifactory, rather than on the local file system. The --regexp option is not supported when --from-rt is set to true.

| -| --server-id |

[Optional]
Server ID configured using the 'jf config' command.

| -| --spec |

[Optional]
Path to a File Spec.

| -| --spec-vars |

[Optional]
List of semicolon-separated(;) variables in the form of "key1=value1;key2=value2;..." to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| -| --recursive |

[Default: true]
When false, artifacts inside sub-folders in Artifactory will not be affected.

| -| --regexp |

[Optional: false]
[Default: false] Set to true to use a regular expression instead of wildcards expression to collect files to be added to the build info.This option is not supported when --from-rt is set to true.

| -| --dry-run |

[Default: false]
Set to true to only get a summery of the dependencies that will be added to the build info.

| -| --module |

[Optional]
Optional module name in the build-info for adding the dependency.

| -| --exclusions | A list of semicolon-separated(;) exclude patterns. Allows using wildcards or a regular expression according to the value of the 'regexp' option. | +| | | +|----------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command name | rt build-add-dependencies | +| Abbreviation | rt bad | +| Command arguments | The command takes three arguments. | +| Build name | The build name to add the dependencies to | +| Build number | The build number to add the dependencies to | +| Pattern | Specifies the local file system path to dependencies which should be added to the build info. You can specify multiple dependencies by using wildcards or a regular expression as designated by the --regexp command option. If you have specified that you are using regular expressions, then the first one used in the argument must be enclosed in parenthesis. | +| **Command options:** |

When using the * or ; characters in the command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| +| `--from-rt` |

[Default: false]
Set to true to search the files in Artifactory, rather than on the local file system. The --regexp option is not supported when --from-rt is set to true.

| +| `--server-id` |

[Optional]
Server ID configured using the 'jf config' command.

| +| `--spec` |

[Optional]
Path to a File Spec.

| +| `--spec-vars` |

[Optional]
List of semicolon-separated(;) variables in the form of "key1=value1;key2=value2;..." to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| +| `--recursive` |

[Default: true]
When false, artifacts inside sub-folders in Artifactory will not be affected.

| +| `--regexp` |

[Optional: false]
[Default: false] Set to true to use a regular expression instead of wildcards expression to collect files to be added to the build info.This option is not supported when --from-rt is set to true.

| +| `--dry-run` |

[Default: false]
Set to true to only get a summery of the dependencies that will be added to the build info.

| +| `--module` |

[Optional]
Optional module name in the build-info for adding the dependency.

| +| `--exclusions` | A list of semicolon-separated(;) exclude patterns. Allows using wildcards or a regular expression according to the value of the `regexp` option. | #### Examples ##### Example 1 @@ -207,21 +207,21 @@ For example, the following command publishes all the build-info collected for bu ### Commands Params -| | | -|-------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command name | rt build-publish | -| Abbreviation | rt bp | -| Command arguments | The command accepts two arguments. | -| Build name | Build name to be published. | -| Build number | Build number to be published. | -| Command options | | -| --server-id |

[Optional]
Server ID configured using the 'jf config' command. If not specified, the default configured Artifactory server is used.

| -| --project |

[Optional]
JFrog project key.

| -| --build-url |

[Optional]
Can be used for setting the CI server build URL in the build-info.

| -| --env-include |

[Default: *]
List of semicolon-separated(;) patterns in the form of "value1;value2;..." Only environment variables that match those patterns will be included in the build info.

| -| --env-exclude |

[Default: *password*;*secret*;*key*]
List of semicolon-separated(;) case insensitive patterns in the form of "value1;value2;..." environment variables match those patterns will be excluded.

| -| --dry-run |

[Default: false]
Set to true to disable communication with Artifactory.

| -| --insecure-tls |

[Default: false]
Set to true to skip TLS certificates verification.

| | +| | | +|----------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command name | rt build-publish | +| Abbreviation | rt bp | +| Command arguments | The command accepts two arguments. | +| Build name | Build name to be published. | +| Build number | Build number to be published. | +| **Command options:** | | +| `--server-id` |

[Optional]
Server ID configured using the 'jf config' command. If not specified, the default configured Artifactory server is used.

| +| `--project` |

[Optional]
JFrog project key.

| +| `--build-url` |

[Optional]
Can be used for setting the CI server build URL in the build-info.

| +| `--env-include` |

[Default: *]
List of semicolon-separated(;) patterns in the form of "value1;value2;..." Only environment variables that match those patterns will be included in the build info.

| +| `--env-exclude` |

[Default: *password*;*secret*;*key*]
List of semicolon-separated(;) case insensitive patterns in the form of "value1;value2;..." environment variables match those patterns will be excluded.

| +| `--dry-run` |

[Default: false]
Set to true to disable communication with Artifactory.

| +| `--insecure-tls` |

[Default: false]
Set to true to skip TLS certificates verification.

| | ### Example @@ -282,7 +282,7 @@ Now, when downloading the artifacts of the "master" build, you'll actually be do | Build number | The current (not yet published) build number, | | build name to append | The published build name to append to the current build | | build number to append | The published build number to append to the current build | -| Command options | This command has no options. | +| **Command options:** | This command has no options. | **Requirements** @@ -323,25 +323,25 @@ This command is used to [promote build](https://jfrog.com/knowledge-base/how-doe ### Commands Params -| | | -|------------------------|------------------------------------------------------------------------------------------------------------------------------------------------| -| Command name | rt build-promote | -| Abbreviation | rt bpr | -| Command arguments | The command accepts three arguments. | -| Build name | Build name to be promoted. | -| Build number | Build number to be promoted. | -| Target repository | Build promotion target repository. | -| Command options | | -| --server-id |

[Optional]
Server ID configured using the 'jf config' command. If not specified, the default configured Artifactory server is used.

| -| --project |

[Optional]
JFrog project key.

| -| --status |

[Optional]
Build promotion status.

| -| --comment |

[Optional]
Build promotion comment.

| -| --source-repo |

[Optional]
Build promotion source repository.

| -| --include-dependencies |

[Default: false]
If set to true, the build dependencies are also promoted.

| -| --copy |

[Default: false]
If set true, the build artifacts and dependencies are copied to the target repository, otherwise they are moved.

| -| --props |

[Optional]
List of semicolon-separated(;) properties in the form of "key1=value1;key2=value2,...". to attach to the build artifacts.

| -| --dry-run |

[Default: false]
If true, promotion is only simulated. The build is not promoted.

| -| --insecure-tls |

[Default: false]
Set to true to skip TLS certificates verification.

| | +| | | +|--------------------------|------------------------------------------------------------------------------------------------------------------------------------------------| +| Command name | rt build-promote | +| Abbreviation | rt bpr | +| Command arguments | The command accepts three arguments. | +| Build name | Build name to be promoted. | +| Build number | Build number to be promoted. | +| Target repository | Build promotion target repository. | +| **Command options:** | | +| `--server-id` |

[Optional]
Server ID configured using the 'jf config' command. If not specified, the default configured Artifactory server is used.

| +| `--project` |

[Optional]
JFrog project key.

| +| `--status` |

[Optional]
Build promotion status.

| +| `--comment` |

[Optional]
Build promotion comment.

| +| `--source-repo` |

[Optional]
Build promotion source repository.

| +| `--include-dependencies` |

[Default: false]
If set to true, the build dependencies are also promoted.

| +| `--copy` |

[Default: false]
If set true, the build artifacts and dependencies are copied to the target repository, otherwise they are moved.

| +| `--props` |

[Optional]
List of semicolon-separated(;) properties in the form of "key1=value1;key2=value2,...". to attach to the build artifacts.

| +| `--dry-run` |

[Default: false]
If true, promotion is only simulated. The build is not promoted.

| +| `--insecure-tls` |

[Default: false]
Set to true to skip TLS certificates verification.

| | ### Example @@ -363,14 +363,14 @@ Build-info is accumulated by the CLI according to the commands you apply until y The following table lists the command arguments and flags: -| | | -|-------------------|------------------------------------| -| Command name | rt build-clean | -| Abbreviation | rt bc | -| Command arguments | The command accepts two arguments. | -| Build name | Build name. | -| Build number | Build number. | -| Command options | The command has no options. | +| | | +|----------------------|------------------------------------| +| Command name | rt build-clean | +| Abbreviation | rt bc | +| Command arguments | The command accepts two arguments. | +| Build name | Build name. | +| Build number | Build number. | +| **Command options:** | The command has no options. | ### Example @@ -393,19 +393,19 @@ This command is used to discard builds previously published to Artifactory using The following table lists the command arguments and flags: -| | | -|--------------------|------------------------------------------------------------------------------------------------------------------------------------------------| -| Command name | rt build-discard | -| Abbreviation | rt bdi | -| Command arguments | The command accepts one argument. | -| Build name | Build name. | -| Command options | | -| --server-id |

[Optional]
Server ID configured using the 'jf config' command. If not specified, the default configured Artifactory server is used.

| -| --max-days |

[Optional]
The maximum number of days to keep builds in Artifactory.

| -| --max-builds |

[Optional]
The maximum number of builds to store in Artifactory.

| -| --exclude-builds |

[Optional]
List of comma-separated(,) build numbers in the form of "build1,build2,...", that should not be removed from Artifactory.

| -| --delete-artifacts |

[Default: false]
If set to true, automatically removes build artifacts stored in Artifactory.

| -| --async |

[Default: false]
If set to true, build discard will run asynchronously and will not wait for response.

| +| | | +|----------------------|------------------------------------------------------------------------------------------------------------------------------------------------| +| Command name | rt build-discard | +| Abbreviation | rt bdi | +| Command arguments | The command accepts one argument. | +| Build name | Build name. | +| **Command options:** | | +| `--server-id` |

[Optional]
Server ID configured using the 'jf config' command. If not specified, the default configured Artifactory server is used.

| +| `--max-days` |

[Optional]
The maximum number of days to keep builds in Artifactory.

| +| `--max-builds` |

[Optional]
The maximum number of builds to store in Artifactory.

| +| `--exclude-builds` |

[Optional]
List of comma-separated(,) build numbers in the form of "build1,build2,...", that should not be removed from Artifactory.

| +| `--delete-artifacts` |

[Default: false]
If set to true, automatically removes build artifacts stored in Artifactory.

| +| `--async` |

[Default: false]
If set to true, build discard will run asynchronously and will not wait for response.

| ### Examples #### Example 1 diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/curl-integration.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/curl-integration.md index ef9c4d8..00ee3f5 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/curl-integration.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/curl-integration.md @@ -11,8 +11,8 @@ Execute a cUrl command, using the configured Artifactory details. The command ex |--------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---| | Command name | rt curl | | | Abbreviation | rt cl | | -| Command options | | | -| --server-id |

[Optional]
Server ID configured using the jf c add command. If not specified, the default configured server is used.

| | +| **Command options:** | | | +| `--server-id` |

[Optional]
Server ID configured using the jf c add command. If not specified, the default configured server is used.

| | | Command arguments | | | | cUrl arguments and flags |

The same list of arguments and flags passed to cUrl, except for the following changes:

1. The full Artifactory URL should not be passed. Instead, the REST endpoint URI should be sent.
2. The login credentials should not be passed. Instead, the --server-id should be used.

| | diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/generic-files.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/generic-files.md index 3b3b01b..38a5a7c 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/generic-files.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/generic-files.md @@ -11,43 +11,43 @@ This command is used to upload files to Artifactory. ### Commands Params -| | | -|--------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command name | rt upload | -| Abbreviation | rt u | -| Command arguments |

The command takes two arguments, source path and target path.

In case the --spec option is used, the commands accept no arguments.

| -| Source path | The first argument specifies the local file system path to artifacts that should be uploaded to Artifactory. You can specify multiple artifacts by using wildcards or a regular expression as designated by the **--regexp** command option. Please read the **--regexp** option description for more information. | -| Target path |

The second argument specifies the target path in Artifactory in the following format: [repository name]/[repository path]

If the target path ends with a slash, the path is assumed to be a folder. For example, if you specify the target as "repo-name/a/b/", then "b" is assumed to be a folder in Artifactory into which files should be uploaded. If there is no terminal slash, the target path is assumed to be a file to which the uploaded file should be renamed. For example, if you specify the target as "repo-name/a/b", the uploaded file is renamed to "b" in Artifactory.

For flexibility in specifying the upload path, you can include placeholders in the form of {1}, {2} which are replaced by corresponding tokens in the source path that are enclosed in parenthesis. For more details, please refer to Using Placeholders.

| -| Command options |


When using the * or ; characters in the upload command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| -| --archive |

[Optional]
Set to "zip" to pack and deploy the files to Artifactory inside a ZIP archive. Currently, the only packaging format supported is zip.

| -| --server-id |

[Optional]
Server ID configured using the jf c add command. If not specified, the default configured Artifactory server is used.

| -| --spec |

[Optional]
Path to a file spec. For more details, please refer to Using File Specs.

| -| --spec-vars |

[Optional]
List of semicolon-separated(;) variables in the form of "key1=value1;key2=value2;..." to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| -| --build-name |

[Optional]
Build name. For more details, please refer to Build Integration.

| -| --build-number |

[Optional]
Build number. For more details, please refer to Build Integration.

| -| --project |

[Optional]
JFrog project key.

| -| --module |

[Optional]
Optional module name for the build-info.

| -| --target-props |

[Optional]
List of semicolon-separated(;) Artifactory properties specified as "key=value" pairs to be attached to the uploaded files.(for example: "key1=value1;key2=value21,value22;key3=value3".

| -| --deb |

[Optional]
Used for Debian packages only. Specifies the distribution/component/architecture of the package. If the the value for distribution, component or architecture include a slash. the slash should be escaped with a back-slash.

| -| --flat |

[Default: false]
If true, files are uploaded to the exact target path specified and their hierarchy in the source file system is ignored.

If false, files are uploaded to the target path while maintaining their file system hierarchy.

If Using Placeholders are used, the value of this option is ignored.

Note

JFrog CLI v1

In JFrog CLI v1, the default value of the --flat option is true.

| -| --recursive |

[Default: true]
If true, files are also collected from sub-folders of the source directory for upload .

If false, only files specifically in the source directory are uploaded.

| -| --regexp |

[Default: false]
If true, the command will interpret the first argument, which describes the local file-system path of artifacts to upload, as a regular expression.

If false, it will interpret the first argument as a wild-card expression.

The above also applies for the --exclusions option.

If you have specified that you are using regular expressions, then the beginning of the expression must be enclosed in parenthesis. For example: a/b/c/(.*)/file.zip

| -| --ant |

[Default: false]
If true, the command will interpret the first argument, which describes the local file-system path of artifacts to upload, as an ANT pattern.

If false, it will interpret the first argument as a wildcards expression.

The above also applies for the --exclusions option.

| -| --threads |

[Default: 3]
The number of parallel threads that should be used to upload where each thread uploads a single artifact at a time.

| -| --dry-run |

[Default: false]
If true, the command only indicates which artifacts would have been uploaded

If false, the command is fully executed and uploads artifacts as specified

| -| --symlinks |

[Default: false]
If true, the command will preserve the soft links structure in Artifactory. The symlink file representation will contain the symbolic link and checksum properties.

| -| --explode |

[Default: false]
If true, the command will extract an archive containing multiple artifacts after it is deployed to Artifactory, while maintaining the archive's file structure.

| -| --include-dirs |

[Default: false]
If true, the source path applies to bottom-chain directories and not only to files. Bottom-chain directories are either empty or do not include other directories that match the source path.

| -| --exclusions |

[Optional]
A list of semicolon-separated(;) exclude patterns. Allows using wildcards, regular expressions or ANT patterns, according to the value of the --regexp and --ant options. Please read the --regexp and --ant options description for more information.

| -| --sync-deletes |

[Optional]
Specific path in Artifactory, under which to sync artifacts after the upload. After the upload, this path will include only the artifacts uploaded during this upload operation. The other files under this path will be deleted.

| -| --quiet |

[Default: false]
If true, the delete confirmation message is skipped.

| -| --fail-no-op |

[Default: false]
Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| -| --retries |

[Default: 3]
Number of upload retries.

| -| --retry-wait-time |

[Default: 0s]
Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds (for example: 10s or 100ms).

| -| --detailed-summary |

[Default: false]
Set to true to include a list of the affected files as part of the command output summary.

| -| --insecure-tls |

[Default: false]
Set to true to skip TLS certificates verification.

| -| --min-split |

[Default: 200]
The minimum file size in MiB required to attempt a multi-part upload. This option, as well as the functionality of multi-part upload, requires Artifactory with S3 storage.

| -| --split-count |

[Default: 5]
The maximum number of parts that can be concurrently uploaded per file during a multi-part upload. Set to 0 to disable multi-part upload. This option, as well as the functionality of multi-part upload, requires Artifactory with S3 storage.

| +| | | +|----------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command name | rt upload | +| Abbreviation | rt u | +| Command arguments |

The command takes two arguments, source path and target path.

In case the --spec option is used, the commands accept no arguments.

| +| Source path | The first argument specifies the local file system path to artifacts that should be uploaded to Artifactory. You can specify multiple artifacts by using wildcards or a regular expression as designated by the **--regexp** command option. Please read the **--regexp** option description for more information. | +| Target path |

The second argument specifies the target path in Artifactory in the following format: [repository name]/[repository path]

If the target path ends with a slash, the path is assumed to be a folder. For example, if you specify the target as "repo-name/a/b/", then "b" is assumed to be a folder in Artifactory into which files should be uploaded. If there is no terminal slash, the target path is assumed to be a file to which the uploaded file should be renamed. For example, if you specify the target as "repo-name/a/b", the uploaded file is renamed to "b" in Artifactory.

For flexibility in specifying the upload path, you can include placeholders in the form of {1}, {2} which are replaced by corresponding tokens in the source path that are enclosed in parenthesis. For more details, please refer to Using Placeholders.

| +| **Command options:** |


When using the * or ; characters in the upload command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| +| `--archive` |

[Optional]
Set to "zip" to pack and deploy the files to Artifactory inside a ZIP archive. Currently, the only packaging format supported is zip.

| +| `--server-id` |

[Optional]
Server ID configured using the jf c add command. If not specified, the default configured Artifactory server is used.

| +| `--spec` |

[Optional]
Path to a file spec. For more details, please refer to Using File Specs.

| +| `--spec-vars` |

[Optional]
List of semicolon-separated(;) variables in the form of "key1=value1;key2=value2;..." to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| +| `--build-name` |

[Optional]
Build name. For more details, please refer to Build Integration.

| +| `--build-number` |

[Optional]
Build number. For more details, please refer to Build Integration.

| +| `--project` |

[Optional]
JFrog project key.

| +| `--module` |

[Optional]
Optional module name for the build-info.

| +| `--target-props` |

[Optional]
List of semicolon-separated(;) Artifactory properties specified as "key=value" pairs to be attached to the uploaded files.(for example: "key1=value1;key2=value21,value22;key3=value3".

| +| `--deb` |

[Optional]
Used for Debian packages only. Specifies the distribution/component/architecture of the package. If the the value for distribution, component or architecture include a slash. the slash should be escaped with a back-slash.

| +| `--flat` |

[Default: false]
If true, files are uploaded to the exact target path specified and their hierarchy in the source file system is ignored.

If false, files are uploaded to the target path while maintaining their file system hierarchy.

If Using Placeholders are used, the value of this option is ignored.

Note

JFrog CLI v1

In JFrog CLI v1, the default value of the --flat option is true.

| +| `--recursive` |

[Default: true]
If true, files are also collected from sub-folders of the source directory for upload .

If false, only files specifically in the source directory are uploaded.

| +| `--regexp` |

[Default: false]
If true, the command will interpret the first argument, which describes the local file-system path of artifacts to upload, as a regular expression.

If false, it will interpret the first argument as a wild-card expression.

The above also applies for the --exclusions option.

If you have specified that you are using regular expressions, then the beginning of the expression must be enclosed in parenthesis. For example: a/b/c/(.*)/file.zip

| +| `--ant` |

[Default: false]
If true, the command will interpret the first argument, which describes the local file-system path of artifacts to upload, as an ANT pattern.

If false, it will interpret the first argument as a wildcards expression.

The above also applies for the --exclusions option.

| +| `--threads` |

[Default: 3]
The number of parallel threads that should be used to upload where each thread uploads a single artifact at a time.

| +| `--dry-run` |

[Default: false]
If true, the command only indicates which artifacts would have been uploaded

If false, the command is fully executed and uploads artifacts as specified

| +| `--symlinks` |

[Default: false]
If true, the command will preserve the soft links structure in Artifactory. The symlink file representation will contain the symbolic link and checksum properties.

| +| `--explode` |

[Default: false]
If true, the command will extract an archive containing multiple artifacts after it is deployed to Artifactory, while maintaining the archive's file structure.

| +| `--include-dirs` |

[Default: false]
If true, the source path applies to bottom-chain directories and not only to files. Bottom-chain directories are either empty or do not include other directories that match the source path.

| +| `--exclusions` |

[Optional]
A list of semicolon-separated(;) exclude patterns. Allows using wildcards, regular expressions or ANT patterns, according to the value of the --regexp and --ant options. Please read the --regexp and --ant options description for more information.

| +| `--sync-deletes` |

[Optional]
Specific path in Artifactory, under which to sync artifacts after the upload. After the upload, this path will include only the artifacts uploaded during this upload operation. The other files under this path will be deleted.

| +| `--quiet` |

[Default: false]
If true, the delete confirmation message is skipped.

| +| `--fail-no-op` |

[Default: false]
Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| +| `--retries` |

[Default: 3]
Number of upload retries.

| +| `--retry-wait-time` |

[Default: 0s]
Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds (for example: 10s or 100ms).

| +| `--detailed-summary` |

[Default: false]
Set to true to include a list of the affected files as part of the command output summary.

| +| `--insecure-tls` |

[Default: false]
Set to true to skip TLS certificates verification.

| +| `--min-split` |

[Default: 200]
The minimum file size in MiB required to attempt a multi-part upload. This option, as well as the functionality of multi-part upload, requires Artifactory with S3 storage.

| +| `--split-count` |

[Default: 5]
The maximum number of parts that can be concurrently uploaded per file during a multi-part upload. Set to 0 to disable multi-part upload. This option, as well as the functionality of multi-part upload, requires Artifactory with S3 storage.

| ### Examples #### Example 1 @@ -121,49 +121,49 @@ This command is used to download files from Artifactory. ### Commands Params -| | | -|-----------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command name | rt download | -| Abbreviation | rt dl | -| Command arguments |

The command takes two arguments source path and target path (Optional).

In case the --spec option is used, the commands accept no arguments.

| -| Source path | Specifies the source path in Artifactory, from which the artifacts should be downloaded. You can use wildcards to specify multiple artifacts. | -| Target path |

The second argument is optional and specifies the local file system target path.

If the target path ends with a slash, the path is assumed to be a directory. For example, if you specify the target as "repo-name/a/b/", then "b" is assumed to be a directory into which files should be downloaded. If there is no terminal slash, the target path is assumed to be a file to which the downloaded file should be renamed. For example, if you specify the target as "a/b", the downloaded file is renamed to "b".

For flexibility in specifying the target path, you can include placeholders in the form of {1}, {2} which are replaced by corresponding tokens in the source path that are enclosed in parenthesis. For more details, please refer to Using Placeholders.

| -| Command options |

When using the * or ; characters in the download command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| -| --server-id |

[Optional]
Server ID configured using the 'jf config' command. If not specified, the default configured Artifactory server is used.

| -| --build-name |

[Optional]
Build name. For more details, please refer to Build Integration.

| -| --build-number |

[Optional]
Build number. For more details, please refer to Build Integration.

| -| --project |

[Optional]
JFrog project key.

| -| --module |

[Optional]
Optional module name for the build-info.

| -| --spec |

[Optional]
Path to a file spec. For more details, please refer to Using File Specs.

| -| --spec-vars |

[Optional]
List of semicolon-separated(;) variables in the form of "key1=value1;key2=value2;..." to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| -| --props |

[Optional]
A list of Artifactory properties specified as semicolon-separated(;) "key=value" pairs (for example: "key1=value1;key2=value2;key3=value3"). Only artifacts with all of the specified properties names and values will be downloaded.

| -| --exclude-props |

[Optional]
A list of Artifactory properties specified as semicolon-separated(;) "key=value" pairs (for example: "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be downloaded.

| -| --build |

[Optional]
If specified, only artifacts of the specified build are matched. The property format is build-name/build-number. If you do not specify the build number, the artifacts are filtered by the latest build number.

| -| --bundle |

[Optional]
If specified, only artifacts of the specified bundle are matched. The value format is bundle-name/bundle-version.

| -| --flat |

[Default: false]
If true, artifacts are downloaded to the exact target path specified and their hierarchy in the source repository is ignored.

If false, artifacts are downloaded to the target path in the file system while maintaining their hierarchy in the source repository.

If Using Placeholders are used, and you would like the local file system (download path) to be determined by placeholders only, or in other words, avoid concatenating the Artifactory folder hierarchy local, set to false.

| -| --recursive |

[Default: true]
If true, artifacts are also downloaded from sub-paths under the specified path in the source repository.

If false, only artifacts in the specified source path directory are downloaded.

| -| --threads |

[Default: 3]
The number of parallel threads that should be used to download where each thread downloads a single artifact at a time.

| -| --split-count |

[Default: 3]
The number of segments into which each file should be split for download (provided the artifact is over --min-split in size). To download each file in a single thread, set to 0.

| -| --retries |

[Default: 3]
Number of download retries.

| -| --retry-wait-time |

[Default: 0s]
Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds (for example: 10s or 100ms).

| -| --min-split |

[Default: 5120]
The minimum size permitted for splitting. Files larger than the specified number will be split into equally sized --split-count segments. Any files smaller than the specified number will be downloaded in a single thread. If set to -1, files are not split.

| -| --dry-run |

[Default: false]
If true, the command only indicates which artifacts would have been downloaded.

If false, the command is fully executed and downloads artifacts as specified.

| -| --explode |

[Default: false]
Set to true to extract an archive after it is downloaded from Artifactory.

Supported compression formats: br, bz2, gz, lz4, sz, xz, zstd.

Supported archive formats: zip, tar (including any compressed variants like tar.gz), rar.

| -| --bypass-archive-inspection |

[Default: false]
Set to true to bypass the archive security inspection before it is unarchived. Used with the 'explode' option.

| -| --validate-symlinks |

[Default: false]
If true, the command will validate that symlinks are pointing to existing and unchanged files, by comparing their sha1. Applicable to files and not directories.

| -| --include-dirs |

[Default: false]
If true, the source path applies to bottom-chain directories and not only to files. Bottom-chain directories are either empty or do not include other directories that match the source path.

| -| --exclusions | A list of semicolon-separated(;) exclude patterns. Allows using wildcards. | -| --sync-deletes |

[Optional]
Specific path in the local file system, under which to sync dependencies after the download. After the download, this path will include only the dependencies downloaded during this download operation. The other files under this path will be deleted.

| -| --quiet |

[Default: false]
If true, the delete confirmation message is skipped.

| -| --sort-by |

[Optional]
A list of semicolon-separated(;) fields to sort by. The fields must be part of the 'items' AQL domain. For more information read the AQL documentation

| -| --sort-order |

[Default: asc]
The order by which fields in the 'sort-by' option should be sorted. Accepts 'asc' or 'desc'.

| -| --limit |

[Optional]
The maximum number of items to fetch. Usually used with the 'sort-by' option.

| -| --offset |

[Optional]
The offset from which to fetch items (i.e. how many items should be skipped). Usually used with the 'sort-by' option.

| -| --fail-no-op |

[Default: false]
Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| -| --archive-entries |

[Optional]
If specified, only archive artifacts containing entries matching this pattern are matched. You can use wildcards to specify multiple artifacts.

| -| --detailed-summary |

[Default: false]
Set to true to include a list of the affected files as part of the command output summary.

| -| --insecure-tls |

[Default: false]
Set to true to skip TLS certificates verification.

| -| --gpg-key |

[Optional]
Path to the public GPG key file located on the file system, used to validate downloaded release bundle files.

| +| | | +|-------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command name | rt download | +| Abbreviation | rt dl | +| Command arguments |

The command takes two arguments source path and target path (Optional).

In case the --spec option is used, the commands accept no arguments.

| +| Source path | Specifies the source path in Artifactory, from which the artifacts should be downloaded. You can use wildcards to specify multiple artifacts. | +| Target path |

The second argument is optional and specifies the local file system target path.

If the target path ends with a slash, the path is assumed to be a directory. For example, if you specify the target as "repo-name/a/b/", then "b" is assumed to be a directory into which files should be downloaded. If there is no terminal slash, the target path is assumed to be a file to which the downloaded file should be renamed. For example, if you specify the target as "a/b", the downloaded file is renamed to "b".

For flexibility in specifying the target path, you can include placeholders in the form of {1}, {2} which are replaced by corresponding tokens in the source path that are enclosed in parenthesis. For more details, please refer to Using Placeholders.

| +| **Command options:** |

When using the * or ; characters in the download command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| +| `--server-id` |

[Optional]
Server ID configured using the 'jf config' command. If not specified, the default configured Artifactory server is used.

| +| `--build-name` |

[Optional]
Build name. For more details, please refer to Build Integration.

| +| `--build-number` |

[Optional]
Build number. For more details, please refer to Build Integration.

| +| `--project` |

[Optional]
JFrog project key.

| +| `--module` |

[Optional]
Optional module name for the build-info.

| +| `--spec` |

[Optional]
Path to a file spec. For more details, please refer to Using File Specs.

| +| `--spec-vars` |

[Optional]
List of semicolon-separated(;) variables in the form of "key1=value1;key2=value2;..." to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| +| `--props` |

[Optional]
A list of Artifactory properties specified as semicolon-separated(;) "key=value" pairs (for example: "key1=value1;key2=value2;key3=value3"). Only artifacts with all of the specified properties names and values will be downloaded.

| +| `--exclude-props` |

[Optional]
A list of Artifactory properties specified as semicolon-separated(;) "key=value" pairs (for example: "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be downloaded.

| +| `--build` |

[Optional]
If specified, only artifacts of the specified build are matched. The property format is build-name/build-number. If you do not specify the build number, the artifacts are filtered by the latest build number.

| +| `--bundle` |

[Optional]
If specified, only artifacts of the specified bundle are matched. The value format is bundle-name/bundle-version.

| +| `--flat` |

[Default: false]
If true, artifacts are downloaded to the exact target path specified and their hierarchy in the source repository is ignored.

If false, artifacts are downloaded to the target path in the file system while maintaining their hierarchy in the source repository.

If Using Placeholders are used, and you would like the local file system (download path) to be determined by placeholders only, or in other words, avoid concatenating the Artifactory folder hierarchy local, set to false.

| +| `--recursive` |

[Default: true]
If true, artifacts are also downloaded from sub-paths under the specified path in the source repository.

If false, only artifacts in the specified source path directory are downloaded.

| +| `--threads` |

[Default: 3]
The number of parallel threads that should be used to download where each thread downloads a single artifact at a time.

| +| `--split-count` |

[Default: 3]
The number of segments into which each file should be split for download (provided the artifact is over --min-split in size). To download each file in a single thread, set to 0.

| +| `--retries` |

[Default: 3]
Number of download retries.

| +| `--retry-wait-time` |

[Default: 0s]
Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds (for example: 10s or 100ms).

| +| `--min-split` |

[Default: 5120]
The minimum size permitted for splitting. Files larger than the specified number will be split into equally sized --split-count segments. Any files smaller than the specified number will be downloaded in a single thread. If set to -1, files are not split.

| +| `--dry-run` |

[Default: false]
If true, the command only indicates which artifacts would have been downloaded.

If false, the command is fully executed and downloads artifacts as specified.

| +| `--explode` |

[Default: false]
Set to true to extract an archive after it is downloaded from Artifactory.

Supported compression formats: br, bz2, gz, lz4, sz, xz, zstd.

Supported archive formats: zip, tar (including any compressed variants like tar.gz), rar.

| +| `--bypass-archive-inspection` |

[Default: false]
Set to true to bypass the archive security inspection before it is unarchived. Used with the `explode` option.

| +| '--validate-symlinks' |

[Default: false]
If true, the command will validate that symlinks are pointing to existing and unchanged files, by comparing their sha1. Applicable to files and not directories.

| +| `--include-dirs` |

[Default: false]
If true, the source path applies to bottom-chain directories and not only to files. Bottom-chain directories are either empty or do not include other directories that match the source path.

| +| `--exclusions` | A list of semicolon-separated(;) exclude patterns. Allows using wildcards. | +| `--sync-deletes` |

[Optional]
Specific path in the local file system, under which to sync dependencies after the download. After the download, this path will include only the dependencies downloaded during this download operation. The other files under this path will be deleted.

| +| `--quiet` |

[Default: false]
If true, the delete confirmation message is skipped.

| +| `--sort-by` |

[Optional]
A list of semicolon-separated(;) fields to sort by. The fields must be part of the `items` AQL domain. For more information read the AQL documentation

| +| `--sort-order` |

[Default: asc]
The order by which fields in the 'sort-by' option should be sorted. Accepts `asc` or `desc`.

| +| `--limit` |

[Optional]
The maximum number of items to fetch. Usually used with the 'sort-by' option.

| +| `--offset` |

[Optional]
The offset from which to fetch items (i.e. how many items should be skipped). Usually used with the 'sort-by' option.

| +| `--fail-no-op` |

[Default: false]
Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| +| `--archive-entries` |

[Optional]
If specified, only archive artifacts containing entries matching this pattern are matched. You can use wildcards to specify multiple artifacts.

| +| `--detailed-summary` |

[Default: false]
Set to true to include a list of the affected files as part of the command output summary.

| +| `--insecure-tls` |

[Default: false]
Set to true to skip TLS certificates verification.

| +| `--gpg-key` |

[Optional]
Path to the public GPG key file located on the file system, used to validate downloaded release bundle files.

| ### Examples @@ -210,34 +210,34 @@ This command is used to copy files in Artifactory ### Commands Params -| | | -|-------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command name | rt copy | -| Abbreviation | rt cp | -| Command arguments |

The command takes two arguments source path and target path.

In case the --spec option is used, the commands accept no arguments.

| -| Source path | Specifies the source path in Artifactory, from which the artifacts should be copied, in the following format: `[repository name]/[repository path].` You can use wildcards to specify multiple artifacts. | -| Target path |

Specifies the target path in Artifactory, to which the artifacts should be copied, in the following format: [repository name]/[repository path]

By default the Target Path maintains the source path hierarchy, see --flat flag for more info. If the pattern ends with a slash, the target path is assumed to be a folder. For example, if you specify the target as "repo-name/a/b/", then "b" is assumed to be a folder in Artifactory into which files should be copied. If there is no terminal slash, the target path is assumed to be a file to which the copied file should be renamed. For example, if you specify the target as "repo-name/a/b", the copied file is renamed to "b" in Artifactory.

For flexibility in specifying the target path, you can include placeholders in the form of {1}, {2} which are replaced by corresponding tokens in the source path that are enclosed in parenthesis. For more details, please refer to Using Placeholders.

| -| Command options |

When using the * or ; characters in the copy command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| -| --server-id |

[Optional]
Server ID configured using the 'jf config' command. If not specified, the default configured Artifactory server is used.

| -| --spec |

[Optional]
Path to a file spec. For more details, please refer to Using File Specs.

| -| --props |

[Optional]
A list of Artifactory properties specified as semicolon-separated(;) "key=value" pairs. (for example: "key1=value1;key2=value2;key3=value3"). Only artifacts with these properties names and values will be copied.

| -| --exclude-props |

[Optional]
A list of Artifactory properties specified as semicolon-separated(;) "key=value" pairs (for example: "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be copied.

| -| --build |

[Optional]
If specified, only artifacts of the specified build are matched. The property format is build-name/build-number. If you do not specify the build number, the artifacts are filtered by the latest build number.

| -| --bundle |

[Optional]
If specified, only artifacts of the specified bundle are matched. The value format is bundle-name/bundle-version.

| -| --flat |

[Default: false]
If true, artifacts are copied to the exact target path specified and their hierarchy in the source path is ignored.

If false, artifacts are copied to the target path while maintaining their source path hierarchy.

| -| --recursive |

[Default: true]
If true, artifacts are also copied from sub-paths under the specified source path.

If false, only artifacts in the specified source path directory are copied.

| -| --dry-run |

[Default: false]
If true, the command only indicates which artifacts would have been copied.

If false, the command is fully executed and copies artifacts as specified.

| -| --exclusions | A list of semicolon-separated(;) exclude patterns. Allows using wildcards. | -| --threads |

[Default: 3]
Number of threads used for copying the items.

| -| --sort-by |

[Optional]
A list of semicolon-separated(;) fields to sort by. The fields must be part of the 'items' AQL domain. For more information read the AQL documentation

| -| --sort-order |

[Default: asc]
The order by which fields in the 'sort-by' option should be sorted. Accepts 'asc' or 'desc'.

| -| --limit |

[Optional]
The maximum number of items to fetch. Usually used with the 'sort-by' option.

| -| --offset |

[Optional]
The offset from which to fetch items (i.e. how many items should be skipped). Usually used with the 'sort-by' option.

| -| --fail-no-op |

[Default: false]
Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| -| --archive-entries |

[Optional]
If specified, only archive artifacts containing entries matching this pattern are matched. You can use wildcards to specify multiple artifacts.

| -| --insecure-tls |

[Default: false]
Set to true to skip TLS certificates verification.

| -| --retries |

[Default: 3]
Number for HTTP retry attempts.

| -| --retry-wait-time |

[Default: 0s]
Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds (for example: 10s or 100ms).

| +| | | +|----------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command name | rt copy | +| Abbreviation | rt cp | +| Command arguments |

The command takes two arguments source path and target path.

In case the --spec option is used, the commands accept no arguments.

| +| Source path | Specifies the source path in Artifactory, from which the artifacts should be copied, in the following format: `[repository name]/[repository path].` You can use wildcards to specify multiple artifacts. | +| Target path |

Specifies the target path in Artifactory, to which the artifacts should be copied, in the following format: [repository name]/[repository path]

By default the Target Path maintains the source path hierarchy, see --flat flag for more info. If the pattern ends with a slash, the target path is assumed to be a folder. For example, if you specify the target as "repo-name/a/b/", then "b" is assumed to be a folder in Artifactory into which files should be copied. If there is no terminal slash, the target path is assumed to be a file to which the copied file should be renamed. For example, if you specify the target as "repo-name/a/b", the copied file is renamed to "b" in Artifactory.

For flexibility in specifying the target path, you can include placeholders in the form of {1}, {2} which are replaced by corresponding tokens in the source path that are enclosed in parenthesis. For more details, please refer to Using Placeholders.

| +| **Command options:** |

When using the * or ; characters in the copy command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| +| `--server-id` |

[Optional]
Server ID configured using the 'jf config' command. If not specified, the default configured Artifactory server is used.

| +| `--spec` |

[Optional]
Path to a file spec. For more details, please refer to Using File Specs.

| +| `--props` |

[Optional]
A list of Artifactory properties specified as semicolon-separated(;) "key=value" pairs. (for example: "key1=value1;key2=value2;key3=value3"). Only artifacts with these properties names and values will be copied.

| +| `--exclude-props` |

[Optional]
A list of Artifactory properties specified as semicolon-separated(;) "key=value" pairs (for example: "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be copied.

| +| `--build` |

[Optional]
If specified, only artifacts of the specified build are matched. The property format is build-name/build-number. If you do not specify the build number, the artifacts are filtered by the latest build number.

| +| `--bundle` |

[Optional]
If specified, only artifacts of the specified bundle are matched. The value format is bundle-name/bundle-version.

| +| `--flat` |

[Default: false]
If true, artifacts are copied to the exact target path specified and their hierarchy in the source path is ignored.

If false, artifacts are copied to the target path while maintaining their source path hierarchy.

| +| `--recursive` |

[Default: true]
If true, artifacts are also copied from sub-paths under the specified source path.

If false, only artifacts in the specified source path directory are copied.

| +| `--dry-run` |

[Default: false]
If true, the command only indicates which artifacts would have been copied.

If false, the command is fully executed and copies artifacts as specified.

| +| `--exclusions` | A list of semicolon-separated(;) exclude patterns. Allows using wildcards. | +| `--threads` |

[Default: 3]
Number of threads used for copying the items.

| +| `--sort-by` |

[Optional]
A list of semicolon-separated(;) fields to sort by. The fields must be part of the `items` AQL domain. For more information read the AQL documentation

| +| `--sort-order` |

[Default: asc]
The order by which fields in the 'sort-by' option should be sorted. Accepts `asc` or `desc`.

| +| `--limit` |

[Optional]
The maximum number of items to fetch. Usually used with the 'sort-by' option.

| +| `--offset` |

[Optional]
The offset from which to fetch items (i.e. how many items should be skipped). Usually used with the 'sort-by' option.

| +| `--fail-no-op` |

[Default: false]
Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| +| `--archive-entries` |

[Optional]
If specified, only archive artifacts containing entries matching this pattern are matched. You can use wildcards to specify multiple artifacts.

| +| `--insecure-tls` |

[Default: false]
Set to true to skip TLS certificates verification.

| +| `--retries` |

[Default: 3]
Number for HTTP retry attempts.

| +| `--retry-wait-time` |

[Default: 0s]
Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds (for example: 10s or 100ms).

| ### Examples #### Example 1 @@ -282,34 +282,34 @@ This command is used to move files in Artifactory ### Commands Params -| | | -|-------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command name | rt move | -| Abbreviation | rt mv | -| Command arguments |

The command takes two arguments source path and target path.

In case the --spec option is used, the commands accept no arguments.

| -| Source path | Specifies the source path in Artifactory, from which the artifacts should be moved, in the following format: `[repository name]/[repository path].` You can use wildcards to specify multiple artifacts. | -| Target path |

Specifies the target path in Artifactory, to which the artifacts should be moved, in the following format: [repository name]/[repository path]

By default the Target Path maintains the source path hierarchy, see --flat flag for more info. If the pattern ends with a slash, the target path is assumed to be a folder. For example, if you specify the target as "repo-name/a/b/", then "b" is assumed to be a folder in Artifactory into which files should be moved. If there is no terminal slash, the target path is assumed to be a file to which the moved file should be renamed. For example, if you specify the target as "repo-name/a/b", the moved file is renamed to "b" in Artifactory.

For flexibility in specifying the upload path, you can include placeholders in the form of {1}, {2} which are replaced by corresponding tokens in the source path that are enclosed in parenthesis. For more details, please refer to Using Placeholders.

| -| Command options |

When using the * or ; characters in the copy command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| -| --server-id |

[Optional]
Server ID configured using the 'jf config' command. If not specified, the default configured Artifactory server is used.

| -| --spec |

[Optional]
Path to a file spec. For more details, please refer to Using File Specs.

| -| --props |

[Optional]
A list of Artifactory properties specified as semicolon-separated(;) "key=value" pairs (for example: "key1=value1;key2=value2;key3=value3"). Only artifacts with these properties names and values will be moved.

| -| --exclude-props |

[Optional]
A list of Artifactory properties specified as semicolon-separated(;) "key=value" pairs (for example: "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be moved.

| -| --build |

[Optional]
If specified, only artifacts of the specified build are matched. The property format is build-name/build-number. If you do not specify the build number, the artifacts are filtered by the latest build number.

| -| --bundle |

[Optional]
If specified, only artifacts of the specified bundle are matched. The value format is bundle-name/bundle-version.

| -| --flat |

[Default: false]
If true, artifacts are moved to the exact target path specified and their hierarchy in the source path is ignored.

If false, artifacts are moved to the target path while maintaining their source path hierarchy.

| -| --recursive |

[Default: true]
If true, artifacts are also moved from sub-paths under the specified source path.

If false, only artifacts in the specified source path directory are moved.

| -| --dry-run |

[Default: false]
If true, the command only indicates which artifacts would have been moved.

If false, the command is fully executed and downloads artifacts as specified.

| -| --exclusions | A list of semicolon-separated(;) exclude patterns. Allows using wildcards. | -| --threads |

[Default: 3]
Number of threads used for moving the items.

| -| --sort-by |

[Optional]
A list of semicolon-separated(;) fields to sort by. The fields must be part of the 'items' AQL domain. For more information read the AQL documentation

| -| --sort-order |

[Default: asc]
The order by which fields in the 'sort-by' option should be sorted. Accepts 'asc' or 'desc'.

| -| --limit |

[Optional]
The maximum number of items to fetch. Usually used with the 'sort-by' option.

| -| --offset |

[Optional]
The offset from which to fetch items (i.e. how many items should be skipped). Usually used with the 'sort-by' option.

| -| --fail-no-op |

[Default: false]
Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| -| --archive-entries |

[Optional]
If specified, only archive artifacts containing entries matching this pattern are matched. You can use wildcards to specify multiple artifacts.

| -| --insecure-tls |

[Default: false]
Set to true to skip TLS certificates verification.

| -| --retries |

[Default: 3]
Number of HTTP retry attempts.

| -| --retry-wait-time |

[Default: 0s]
Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds (for example: 10s or 100ms).

| +| | | +|----------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command name | rt move | +| Abbreviation | rt mv | +| Command arguments |

The command takes two arguments source path and target path.

In case the --spec option is used, the commands accept no arguments.

| +| Source path | Specifies the source path in Artifactory, from which the artifacts should be moved, in the following format: `[repository name]/[repository path].` You can use wildcards to specify multiple artifacts. | +| Target path |

Specifies the target path in Artifactory, to which the artifacts should be moved, in the following format: [repository name]/[repository path]

By default the Target Path maintains the source path hierarchy, see --flat flag for more info. If the pattern ends with a slash, the target path is assumed to be a folder. For example, if you specify the target as "repo-name/a/b/", then "b" is assumed to be a folder in Artifactory into which files should be moved. If there is no terminal slash, the target path is assumed to be a file to which the moved file should be renamed. For example, if you specify the target as "repo-name/a/b", the moved file is renamed to "b" in Artifactory.

For flexibility in specifying the upload path, you can include placeholders in the form of {1}, {2} which are replaced by corresponding tokens in the source path that are enclosed in parenthesis. For more details, please refer to Using Placeholders.

| +| **Command options:** |

When using the * or ; characters in the copy command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| +| `--server-id` |

[Optional]
Server ID configured using the 'jf config' command. If not specified, the default configured Artifactory server is used.

| +| `--spec` |

[Optional]
Path to a file spec. For more details, please refer to Using File Specs.

| +| `--props` |

[Optional]
A list of Artifactory properties specified as semicolon-separated(;) "key=value" pairs (for example: "key1=value1;key2=value2;key3=value3"). Only artifacts with these properties names and values will be moved.

| +| `--exclude-props` |

[Optional]
A list of Artifactory properties specified as semicolon-separated(;) "key=value" pairs (for example: "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be moved.

| +| `--build` |

[Optional]
If specified, only artifacts of the specified build are matched. The property format is build-name/build-number. If you do not specify the build number, the artifacts are filtered by the latest build number.

| +| `--bundle` |

[Optional]
If specified, only artifacts of the specified bundle are matched. The value format is bundle-name/bundle-version.

| +| `--flat` |

[Default: false]
If true, artifacts are moved to the exact target path specified and their hierarchy in the source path is ignored.

If false, artifacts are moved to the target path while maintaining their source path hierarchy.

| +| `--recursive` |

[Default: true]
If true, artifacts are also moved from sub-paths under the specified source path.

If false, only artifacts in the specified source path directory are moved.

| +| `--dry-run` |

[Default: false]
If true, the command only indicates which artifacts would have been moved.

If false, the command is fully executed and downloads artifacts as specified.

| +| `--exclusions` | A list of semicolon-separated(;) exclude patterns. Allows using wildcards. | +| `--threads` |

[Default: 3]
Number of threads used for moving the items.

| +| `--sort-by` |

[Optional]
A list of semicolon-separated(;) fields to sort by. The fields must be part of the `items` AQL domain. For more information read the AQL documentation

| +| `--sort-order` |

[Default: asc]
The order by which fields in the 'sort-by' option should be sorted. Accepts `asc` or `desc`.

| +| `--limit` |

[Optional]
The maximum number of items to fetch. Usually used with the 'sort-by' option.

| +| `--offset` |

[Optional]
The offset from which to fetch items (i.e. how many items should be skipped). Usually used with the 'sort-by' option.

| +| `--fail-no-op` |

[Default: false]
Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| +| `--archive-entries` |

[Optional]
If specified, only archive artifacts containing entries matching this pattern are matched. You can use wildcards to specify multiple artifacts.

| +| `--insecure-tls` |

[Default: false]
Set to true to skip TLS certificates verification.

| +| `--retries` |

[Default: 3]
Number of HTTP retry attempts.

| +| `--retry-wait-time` |

[Default: 0s]
Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds (for example: 10s or 100ms).

| ### Examples #### Example 1 @@ -354,33 +354,33 @@ This command is used to delete files in Artifactory ### Commands Params -| | | -|-------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command name | rt delete | -| Abbreviation | rt del | -| Command arguments |

The command takes one argument which is the delete path.

In case the --spec option is used, the commands accept no arguments.

| -| Delete path | Specifies the path in Artifactory of the files that should be deleted in the following format: `[repository name]/[repository path].` You can use wildcards to specify multiple artifacts. | -| Command options |

When using the * or ; characters in the delete command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| -| --server-id |

[Optional]
Server ID configured using the 'jf config' command. If not specified, the default configured Artifactory server is used.

| -| --spec |

[Optional]
Path to a file spec. For more details, please refer to Using File Specs.

| -| --props |

[Optional]
A list of Artifactory properties specified as semicolon-separated(;) "key=value" pairs (for example: "key1=value1;key2=value2;key3=value3"). Only artifacts with these properties names and values will be deleted.

| -| --exclude-props |

[Optional]
A list of Artifactory properties specified as semicolon-separated(;) "key=value" pairs (for example: "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be deleted.

| -| --build |

[Optional]
If specified, only artifacts of the specified build are matched. The property format is build-name/build-number. If you do not specify the build number, the artifacts are filtered by the latest build number.

| -| --bundle |

[Optional]
If specified, only artifacts of the specified bundle are matched. The value format is bundle-name/bundle-version.

| -| --recursive |

[Default: true]
If true, artifacts are also deleted from sub-paths under the specified path.

| -| --quiet |

[Default: false]
If true, the delete confirmation message is skipped.

| -| --dry-run |

[Default: false]
If true, the command only indicates which artifacts would have been deleted.

If false, the command is fully executed and deletes artifacts as specified.

| -| --exclusions | A list of semicolon-separated(;) exclude patterns. Allows using wildcards. | -| --sort-by |

[Optional]
A list of semicolon-separated(;) fields to sort by. The fields must be part of the 'items' AQL domain. For more information read the AQL documentation

| -| --sort-order |

[Default: asc]
The order by which fields in the 'sort-by' option should be sorted. Accepts 'asc' or 'desc'.

| -| --limit |

[Optional]
The maximum number of items to fetch. Usually used with the 'sort-by' option.

| -| --offset |

[Optional]
The offset from which to fetch items (i.e. how many items should be skipped). Usually used with the 'sort-by' option.

| -| --fail-no-op |

[Default: false]
Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| -| --archive-entries |

[Optional]
If specified, only archive artifacts containing entries matching this pattern are matched. You can use wildcards to specify multiple artifacts.

| -| --threads |

[Default: 3]
Number of threads used for deleting the items.

| -| --insecure-tls |

[Default: false]
Set to true to skip TLS certificates verification.

| -| --retries |

[Default: 3]
Number of HTTP retry attempts.

| -| --retry-wait-time |

[Default: 0s]
Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds (for example: 10s or 100ms).

| +| | | +|----------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command name | rt delete | +| Abbreviation | rt del | +| Command arguments |

The command takes one argument which is the delete path.

In case the --spec option is used, the commands accept no arguments.

| +| Delete path | Specifies the path in Artifactory of the files that should be deleted in the following format: `[repository name]/[repository path].` You can use wildcards to specify multiple artifacts. | +| **Command options:** |

When using the * or ; characters in the delete command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| +| `--server-id` |

[Optional]
Server ID configured using the 'jf config' command. If not specified, the default configured Artifactory server is used.

| +| `--spec` |

[Optional]
Path to a file spec. For more details, please refer to Using File Specs.

| +| `--props` |

[Optional]
A list of Artifactory properties specified as semicolon-separated(;) "key=value" pairs (for example: "key1=value1;key2=value2;key3=value3"). Only artifacts with these properties names and values will be deleted.

| +| `--exclude-props` |

[Optional]
A list of Artifactory properties specified as semicolon-separated(;) "key=value" pairs (for example: "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be deleted.

| +| `--build` |

[Optional]
If specified, only artifacts of the specified build are matched. The property format is build-name/build-number. If you do not specify the build number, the artifacts are filtered by the latest build number.

| +| `--bundle` |

[Optional]
If specified, only artifacts of the specified bundle are matched. The value format is bundle-name/bundle-version.

| +| `--recursive` |

[Default: true]
If true, artifacts are also deleted from sub-paths under the specified path.

| +| `--quiet` |

[Default: false]
If true, the delete confirmation message is skipped.

| +| `--dry-run` |

[Default: false]
If true, the command only indicates which artifacts would have been deleted.

If false, the command is fully executed and deletes artifacts as specified.

| +| `--exclusions` | A list of semicolon-separated(;) exclude patterns. Allows using wildcards. | +| `--sort-by` |

[Optional]
A list of semicolon-separated(;) fields to sort by. The fields must be part of the `items` AQL domain. For more information read the AQL documentation

| +| `--sort-order` |

[Default: asc]
The order by which fields in the 'sort-by' option should be sorted. Accepts `asc` or `desc`.

| +| `--limit` |

[Optional]
The maximum number of items to fetch. Usually used with the 'sort-by' option.

| +| `--offset` |

[Optional]
The offset from which to fetch items (i.e. how many items should be skipped). Usually used with the 'sort-by' option.

| +| `--fail-no-op` |

[Default: false]
Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| +| `--archive-entries` |

[Optional]
If specified, only archive artifacts containing entries matching this pattern are matched. You can use wildcards to specify multiple artifacts.

| +| `--threads` |

[Default: 3]
Number of threads used for deleting the items.

| +| `--insecure-tls` |

[Default: false]
Set to true to skip TLS certificates verification.

| +| `--retries` |

[Default: 3]
Number of HTTP retry attempts.

| +| `--retry-wait-time` |

[Default: 0s]
Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds (for example: 10s or 100ms).

| ### Examples @@ -412,35 +412,35 @@ This command is used to search and display files in Artifactory. ### Commands Params -| | | -|-------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command name | rt search | -| Abbreviation | rt s | -| Command arguments |

The command takes one argument which is the search path.

In case the --spec option is used, the commands accept no arguments.

| -| Search path | Specifies the search path in Artifactory, in the following format: `[repository name]/[repository path].` You can use wildcards to specify multiple artifacts. | -| Command options |

When using the * or ; characters in the command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| -| --server-id |

[Optional]
Server ID configured using the 'jf config' command. If not specified, the default configured Artifactory server is used.

| -| --spec |

[Optional]
Path to a file spec. For more details, please refer to Using File Specs.

| -| --count |

[Optional]
Set to true to display only the total of files or folders found.

| -| --include-dirs |

[Default: false]
Set to true if you'd like to also apply the source path pattern for directories and not only for files

| -| --spec-vars |

[Optional]
List of semicolon-separated(;) variables in the form of "key1=value1;key2=value2;..." to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| -| --props |

[Optional]
A list of Artifactory properties specified as semicolon-separated(;) "key=value" pairs (for example: "key1=value1;key2=value2;key3=value3"). Only artifacts with these properties names and values will be returned.

| -| --exclude-props |

[Optional]
A list of Artifactory properties specified as semicolon-separated(;) "key=value" pairs (for example: "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be returned.

| -| --build |

[Optional]
If specified, only artifacts of the specified build are matched. The property format is build-name/build-number. If you do not specify the build number, the artifacts are filtered by the latest build number.

| -| --bundle |

[Optional]
If specified, only artifacts of the specified bundle are matched. The value format is bundle-name/bundle-version.

| -| --recursive |

[Default: true]
Set to false if you do not wish to search artifacts inside sub-folders in Artifactory.

| -| --exclusions | A list of semicolon-separated(;) exclude patterns. Allows using wildcards. | -| --sort-by |

[Optional]
A list of semicolon-separated(;) fields to sort by. The fields must be part of the 'items' AQL domain. For more information read the AQL documentation

| -| --sort-order |

[Default: asc]
The order by which fields in the 'sort-by' option should be sorted. Accepts 'asc' or 'desc'.

| -| --transitive |

[Optional]
Set to true to look for artifacts also in remote repositories. Available on Artifactory version 7.17.0 or higher.

| -| --limit |

[Optional]
The maximum number of items to fetch. Usually used with the 'sort-by' option.

| -| --offset |

[Optional]
The offset from which to fetch items (i.e. how many items should be skipped). Usually used with the 'sort-by' option.

| -| --fail-no-op |

[Default: false]
Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| -| --archive-entries |

[Optional]
If specified, only archive artifacts containing entries matching this pattern are matched. You can use wildcards to specify multiple artifacts.

| -| --insecure-tls |

[Default: false]
Set to true to skip TLS certificates verification.

| -| --retries |

[Default: 3]
Number of HTTP retry attempts.

| -| --retry-wait-time |

[Default: 0s]
Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds (for example: 10s or 100ms).

| -| --include |

[Optional]
List of semicolon-separated(;) fields in the form of "value1;value2;...".
Only the path and the fields that are specified will be returned. The fields must be part of the 'items' AQL domain. for the full supported items list check AQL documentation

| +| | | +|----------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command name | rt search | +| Abbreviation | rt s | +| Command arguments |

The command takes one argument which is the search path.

In case the --spec option is used, the commands accept no arguments.

| +| Search path | Specifies the search path in Artifactory, in the following format: `[repository name]/[repository path].` You can use wildcards to specify multiple artifacts. | +| **Command options:** |

When using the * or ; characters in the command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| +| `--server-id` |

[Optional]
Server ID configured using the 'jf config' command. If not specified, the default configured Artifactory server is used.

| +| `--spec` |

[Optional]
Path to a file spec. For more details, please refer to Using File Specs.

| +| `--count` |

[Optional]
Set to true to display only the total of files or folders found.

| +| `--include-dirs` |

[Default: false]
Set to true if you'd like to also apply the source path pattern for directories and not only for files

| +| `--spec-vars` |

[Optional]
List of semicolon-separated(;) variables in the form of "key1=value1;key2=value2;..." to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| +| `--props` |

[Optional]
A list of Artifactory properties specified as semicolon-separated(;) "key=value" pairs (for example: "key1=value1;key2=value2;key3=value3"). Only artifacts with these properties names and values will be returned.

| +| `--exclude-props` |

[Optional]
A list of Artifactory properties specified as semicolon-separated(;) "key=value" pairs (for example: "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be returned.

| +| `--build` |

[Optional]
If specified, only artifacts of the specified build are matched. The property format is build-name/build-number. If you do not specify the build number, the artifacts are filtered by the latest build number.

| +| `--bundle` |

[Optional]
If specified, only artifacts of the specified bundle are matched. The value format is bundle-name/bundle-version.

| +| `--recursive` |

[Default: true]
Set to false if you do not wish to search artifacts inside sub-folders in Artifactory.

| +| `--exclusions` | A list of semicolon-separated(;) exclude patterns. Allows using wildcards. | +| `--sort-by` |

[Optional]
A list of semicolon-separated(;) fields to sort by. The fields must be part of the `items` AQL domain. For more information read the AQL documentation

| +| `--sort-order` |

[Default: asc]
The order by which fields in the 'sort-by' option should be sorted. Accepts `asc` or `desc`.

| +| `--transitive` |

[Optional]
Set to true to look for artifacts also in remote repositories. Available on Artifactory version 7.17.0 or higher.

| +| `--limit` |

[Optional]
The maximum number of items to fetch. Usually used with the 'sort-by' option.

| +| `--offset` |

[Optional]
The offset from which to fetch items (i.e. how many items should be skipped). Usually used with the 'sort-by' option.

| +| `--fail-no-op` |

[Default: false]
Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| +| `--archive-entries` |

[Optional]
If specified, only archive artifacts containing entries matching this pattern are matched. You can use wildcards to specify multiple artifacts.

| +| `--insecure-tls` |

[Default: false]
Set to true to skip TLS certificates verification.

| +| `--retries` |

[Default: 3]
Number of HTTP retry attempts.

| +| `--retry-wait-time` |

[Default: 0s]
Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds (for example: 10s or 100ms).

| +| `--include` |

[Optional]
List of semicolon-separated(;) fields in the form of "value1;value2;...".
Only the path and the fields that are specified will be returned. The fields must be part of the `items` AQL domain. for the full supported items list check AQL documentation

| ### Examples #### Example 1 @@ -478,34 +478,34 @@ This command is used for setting properties on existing files in Artifactory. ### Commands Params -| | | -|-------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command name | rt set-props | -| Abbreviation | rt sp | -| Command arguments |

The command takes two arguments, files pattern and files properties.

In case the --spec option is used, the commands accept no arguments.

| -| Files pattern | Files that match the pattern will be set with the specified properties. | -| Files properties | A list of semicolon-separated(;) key-values in the form of key1=value1;key2=value2,..., to be set on the matching files. | -| Command options |

When using the * or ; characters in the command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| -| --server-id |

[Optional]
Server ID configured using the 'jf config' command. If not specified, the default configured Artifactory server is used.

| -| --spec |

[Optional]
Path to a file spec. For more details, please refer to Using File Specs.

| -| --spec-vars |

[Optional]
List of semicolon-separated(;) variables in the form of "key1=value1;key2=value2;..." to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| -| --props |

[Optional]
List of semicolon-separated(;) properties in the form of "key1=value1;key2=value2,...". Only files with these properties names and values are affected.

| -| --exclude-props |

[Optional]
A list of Artifactory properties specified as semicolon-separated(;) "key=value" pairs (for example: "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be affected.

| -| --recursive |

[Default: true]
When false, artifacts inside sub-folders in Artifactory will not be affected.

| -| --build |

[Optional]
If specified, only artifacts of the specified build are matched. The property format is build-name/build-number. If you do not specify the build number, the artifacts are filtered by the latest build number.

| -| --bundle | \[Optional] If specified, only artifacts of the specified bundle are matched. The value format is bundle-name/bundle-version. | -| --include-dirs |

[Default: false]
When true, the properties will also be set on folders (and not just files) in Artifactory.

| -| --fail-no-op |

[Default: false]
Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| -| --exclusions | A list of semicolon-separated(;) exclude patterns. Allows using wildcards. | -| --sort-by |

[Optional]
A list of semicolon-separated(;) fields to sort by. The fields must be part of the 'items' AQL domain. For more information read the AQL documentation

| -| --sort-order |

[Default: asc]
The order by which fields in the 'sort-by' option should be sorted. Accepts 'asc' or 'desc'.

| -| --limit |

[Optional]
The maximum number of items to fetch. Usually used with the 'sort-by' option.

| -| --offset |

[Optional]
The offset from which to fetch items (i.e. how many items should be skipped). Usually used with the 'sort-by' option.

| -| --archive-entries |

[Optional]
If specified, only archive artifacts containing entries matching this pattern are matched. You can use wildcards to specify multiple artifacts.

| -| --insecure-tls |

[Default: false]
Set to true to skip TLS certificates verification.

| -| --threads |

[Default: 3]
Number of working threads.

| -| --retries |

[Default: 3]
Number of HTTP retry attempts.

| -| --retry-wait-time |

[Default: 0s]
Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds (for example: 10s or 100ms).

| +| | | +|----------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command name | rt set-props | +| Abbreviation | rt sp | +| Command arguments |

The command takes two arguments, files pattern and files properties.

In case the --spec option is used, the commands accept no arguments.

| +| Files pattern | Files that match the pattern will be set with the specified properties. | +| Files properties | A list of semicolon-separated(;) key-values in the form of key1=value1;key2=value2,..., to be set on the matching files. | +| **Command options:** |

When using the * or ; characters in the command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| +| `--server-id` |

[Optional]
Server ID configured using the 'jf config' command. If not specified, the default configured Artifactory server is used.

| +| `--spec` |

[Optional]
Path to a file spec. For more details, please refer to Using File Specs.

| +| `--spec-vars` |

[Optional]
List of semicolon-separated(;) variables in the form of "key1=value1;key2=value2;..." to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| +| `--props` |

[Optional]
List of semicolon-separated(;) properties in the form of "key1=value1;key2=value2,...". Only files with these properties names and values are affected.

| +| `--exclude-props` |

[Optional]
A list of Artifactory properties specified as semicolon-separated(;) "key=value" pairs (for example: "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be affected.

| +| `--recursive` |

[Default: true]
When false, artifacts inside sub-folders in Artifactory will not be affected.

| +| `--build` |

[Optional]
If specified, only artifacts of the specified build are matched. The property format is build-name/build-number. If you do not specify the build number, the artifacts are filtered by the latest build number.

| +| `--bundle` | \[Optional] If specified, only artifacts of the specified bundle are matched. The value format is bundle-name/bundle-version. | +| `--include-dirs` |

[Default: false]
When true, the properties will also be set on folders (and not just files) in Artifactory.

| +| `--fail-no-op` |

[Default: false]
Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| +| `--exclusions` | A list of semicolon-separated(;) exclude patterns. Allows using wildcards. | +| `--sort-by` |

[Optional]
A list of semicolon-separated(;) fields to sort by. The fields must be part of the `items` AQL domain. For more information read the AQL documentation

| +| `--sort-order` |

[Default: asc]
The order by which fields in the 'sort-by' option should be sorted. Accepts `asc` or `desc`.

| +| `--limit` |

[Optional]
The maximum number of items to fetch. Usually used with the 'sort-by' option.

| +| `--offset` |

[Optional]
The offset from which to fetch items (i.e. how many items should be skipped). Usually used with the 'sort-by' option.

| +| `--archive-entries` |

[Optional]
If specified, only archive artifacts containing entries matching this pattern are matched. You can use wildcards to specify multiple artifacts.

| +| `--insecure-tls` |

[Default: false]
Set to true to skip TLS certificates verification.

| +| `--threads` |

[Default: 3]
Number of working threads.

| +| `--retries` |

[Default: 3]
Number of HTTP retry attempts.

| +| `--retry-wait-time` |

[Default: 0s]
Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds (for example: 10s or 100ms).

| ### Examples #### Example 1 @@ -559,38 +559,38 @@ This command is used for deleting properties from existing files in Artifactory. ### Commands Params -| | | -|-------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command name | rt delete-props | -| Abbreviation | rt delp | -| Command arguments |

The command takes two arguments, files pattern and properties list.

In case the --spec option is used, the commands accept no arguments.

| -| Files pattern | Specifies the files pattern in the following format: `[repository name]/[repository path].` You can use wildcards to specify multiple repositories and files. | -| Properties list | A comma-separated(,) list of properties, in the form of key1,key2,..., to be deleted from the matching files. | -| Command options |

When using the * or ; characters in the command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| -| --server-id |

[Optional]
Artifactory Server ID configured using the 'jf config' command. If not specified, the default configured Artifactory server is used.

| -| --props |

[Optional]
List of semicolon-separated(;) properties in the form of "key1=value1;key2=value2,...". Only files with these properties are affected.

| -| --exclude-props |

[Optional]
List of semicolon-separated(;) Artifactory properties specified as "key=value" (for example: "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be affected.

| -| --recursive |

[Default: true]
When false, artifacts inside sub-folders in Artifactory will not be affected.

| -| --build |

[Optional]
If specified, only artifacts of the specified build are matched. The property format is build-name/build-number. If you do not specify the build number, the artifacts are filtered by the latest build number.

| -| --bundle |

[Optional]
If specified, only artifacts of the specified bundle are matched. The value format is bundle-name/bundle-version.

| -| --include-dirs |

[Default: false]
When true, the properties will also be set on folders (and not just files) in Artifactory.

| -| --fail-no-op |

[Default: false]
Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| -| --exclusions | List of semicolon-separated(;) exclude patterns. Allows using wildcards. | -| --sort-by |

[Optional]
A list of semicolon-separated(;) fields to sort by. The fields must be part of the 'items' AQL domain. For more information read the AQL documentation

| -| --sort-order |

[Default: asc]
The order by which fields in the 'sort-by' option should be sorted. Accepts 'asc' or 'desc'.

| -| --limit |

[Optional]
The maximum number of items to fetch. Usually used with the 'sort-by' option.

| -| --offset |

[Optional]
The offset from which to fetch items (i.e. how many items should be skipped). Usually used with the 'sort-by' option.

| -| --archive-entries |

[Optional]
If specified, only archive artifacts containing entries matching this pattern are matched. You can use wildcards to specify multiple artifacts.

| -| --insecure-tls |

[Default: false]
Set to true to skip TLS certificates verification.

| -| --retries |

[Default: 3]
Number of HTTP retry attempts.

| -| --retry-wait-time |

[Default: 0s]
Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds (for example: 10s or 100ms).

| +| | | +|----------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command name | rt delete-props | +| Abbreviation | rt delp | +| Command arguments |

The command takes two arguments, files pattern and properties list.

In case the --spec option is used, the commands accept no arguments.

| +| Files pattern | Specifies the files pattern in the following format: `[repository name]/[repository path].` You can use wildcards to specify multiple repositories and files. | +| Properties list | A comma-separated(,) list of properties, in the form of key1,key2,..., to be deleted from the matching files. | +| **Command options:** |

When using the * or ; characters in the command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| +| `--server-id` |

[Optional]
Artifactory Server ID configured using the 'jf config' command. If not specified, the default configured Artifactory server is used.

| +| `--props` |

[Optional]
List of semicolon-separated(;) properties in the form of "key1=value1;key2=value2,...". Only files with these properties are affected.

| +| `--exclude-props` |

[Optional]
List of semicolon-separated(;) Artifactory properties specified as "key=value" (for example: "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be affected.

| +| `--recursive` |

[Default: true]
When false, artifacts inside sub-folders in Artifactory will not be affected.

| +| `--build` |

[Optional]
If specified, only artifacts of the specified build are matched. The property format is build-name/build-number. If you do not specify the build number, the artifacts are filtered by the latest build number.

| +| `--bundle` |

[Optional]
If specified, only artifacts of the specified bundle are matched. The value format is bundle-name/bundle-version.

| +| `--include-dirs` |

[Default: false]
When true, the properties will also be set on folders (and not just files) in Artifactory.

| +| `--fail-no-op` |

[Default: false]
Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| +| `--exclusions` | List of semicolon-separated(;) exclude patterns. Allows using wildcards. | +| `--sort-by` |

[Optional]
A list of semicolon-separated(;) fields to sort by. The fields must be part of the `items` AQL domain. For more information read the AQL documentation

| +| `--sort-order` |

[Default: asc]
The order by which fields in the 'sort-by' option should be sorted. Accepts `asc` or `desc`.

| +| `--limit` |

[Optional]
The maximum number of items to fetch. Usually used with the 'sort-by' option.

| +| `--offset` |

[Optional]
The offset from which to fetch items (i.e. how many items should be skipped). Usually used with the 'sort-by' option.

| +| `--archive-entries` |

[Optional]
If specified, only archive artifacts containing entries matching this pattern are matched. You can use wildcards to specify multiple artifacts.

| +| `--insecure-tls` |

[Default: false]
Set to true to skip TLS certificates verification.

| +| `--retries` |

[Default: 3]
Number of HTTP retry attempts.

| +| `--retry-wait-time` |

[Default: 0s]
Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds (for example: 10s or 100ms).

| ### Examples #### Example 1 -Remove the properties 'version' and 'release' from all the jar files in the maven-local repository. +Remove the properties `version` and `release` from all the jar files in the maven-local repository. ``` jf rt delp "maven-local/*.jar" "version,release" @@ -598,7 +598,7 @@ jf rt delp "maven-local/*.jar" "version,release" #### Example 2 -Delete the properties 'build' and 'branch' from all tar.gz files in the devops-local repo. +Delete the properties `build` and `branch` from all tar.gz files in the devops-local repo. ``` jf rt delp "devops-local/*.tar.gz" "build,branch" @@ -606,7 +606,7 @@ jf rt delp "devops-local/*.tar.gz" "build,branch" #### Example 3 -Remove the properties 'status', 'phase' and 'stage' from all deb files that start with DEV in the debian-repository. +Remove the properties `status`, `phase` and `stage` from all deb files that start with DEV in the debian-repository. ``` jf rt delp "debian-repository/DEV*.deb" "status,phase,stage" @@ -614,7 +614,7 @@ jf rt delp "debian-repository/DEV*.deb" "status,phase,stage" #### Example 4 -Delete the 'environment' property from '/tests/local/block.rpm' in the centos-repo. +Delete the `environment` property from `/tests/local/block.rpm` in the centos-repo. ``` jf rt delp "centos-repo/tests/local/block.rpm" "environment" @@ -622,7 +622,7 @@ jf rt delp "centos-repo/tests/local/block.rpm" "environment" #### Example 5 -Remove the properties 'component', 'layer' and 'level' from files in the docker-hub repository. +Remove the properties `component`, `layer` and `level` from files in the docker-hub repository. ``` jf rt delp "docker-hub/*" "component,layer,level" diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/git-lfs.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/git-lfs.md index a5176d9..d2663f8 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/git-lfs.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/git-lfs.md @@ -9,11 +9,11 @@ This command is used to clean up files from a Git LFS repository. This deletes a |-------------------|----------------------------------------------------------------------------------------------------------------------------------------------| | Command name | rt git-lfs-clean | | Abbreviation | rt glc | -| Command options | | -| --refs | \[Default: refs/remotes/\*] List of Git references in the form of "ref1,ref2,..." which should be preserved. | -| --repo | \[Optional] Local Git LFS repository in Artifactory which should be cleaned. If omitted, the repository is detected from the Git repository. | -| --quiet | \[Default: false] Set to true to skip the delete confirmation message. | -| --dry-run | \[Default: false] If true, cleanup is only simulated. No files are actually deleted. | +| **Command options:** | | +| `--refs` | \[Default: refs/remotes/\*] List of Git references in the form of "ref1,ref2,..." which should be preserved. | +| `--repo` | \[Optional] Local Git LFS repository in Artifactory which should be cleaned. If omitted, the repository is detected from the Git repository. | +| `--quiet` | \[Default: false] Set to true to skip the delete confirmation message. | +| `--dry-run` | \[Default: false] If true, cleanup is only simulated. No files are actually deleted. | | Command arguments | If no arguments are passed in, the command assumes the .git repository is located at current directory. | | path to .git | Path to the directory which includes the .git directory. | diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/managing-configuration-entities.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/managing-configuration-entities.md index 152f63e..9cfd5ac 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/managing-configuration-entities.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/managing-configuration-entities.md @@ -23,11 +23,11 @@ The CSV can include additional columns, with different headers, which will be ig |-------------------|---------------------------------------------------------------------------------------------------------------------------------------------| | Command-name | rt users-create | | Abbreviation | rt uc | -| Command options | | -| --server-id |

[Optional]
Artifactory Server ID configured using the 'jf config' command.

| -| --csv |

[Mandatory]
Path to a CSV file with the users' details. The first row of the file should include the name,password,email headers.

| -| --replace |

[Optional]
Set to true if you'd like existing users or groups to be replaced.

| -| --users-groups |

[Optional]
A list of comma-separated(,) groups for the new users to be associated to.

| +| **Command options:** | | +| `--server-id` |

[Optional]
Artifactory Server ID configured using the 'jf config' command.

| +| `--csv` |

[Mandatory]
Path to a CSV file with the users' details. The first row of the file should include the name,password,email headers.

| +| `--replace` |

[Optional]
Set to true if you'd like existing users or groups to be replaced.

| +| `--users-groups` |

[Optional]
A list of comma-separated(,) groups for the new users to be associated to.

| | Command arguments | The command accepts no arguments | ### Example @@ -59,9 +59,9 @@ The CSV can include additional columns, with different headers, which will be ig |-------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command-name | rt users-delete | | Abbreviation | rt udel | -| Command options | | -| --server-id |

[Optional]
Artifactory Server ID configured using the 'jf config' command.

| -| --csv |

[Optional]
Path to a csv file with the usernames to delete. The first row of the file is the reserved for the cells' headers. It must include the "username" header.

| +| **Command options:** | | +| `--server-id` |

[Optional]
Artifactory Server ID configured using the 'jf config' command.

| +| `--csv` |

[Optional]
Path to a csv file with the usernames to delete. The first row of the file is the reserved for the cells' headers. It must include the "username" header.

| | Command arguments | | | users list | comma-separated(,) list of usernames to delete. If the --csv command option is used, then this argument becomes optional. | @@ -92,8 +92,8 @@ This command creates a new users group. |-------------------|--------------------------------------------------------------------------------------| | Command-name | rt group-create | | Abbreviation | rt gc | -| Command options | | -| --server-id |

[Optional]
Artifactory Server ID configured using the 'jf config' command.

| +| **Command options:** | | +| `--server-id` |

[Optional]
Artifactory Server ID configured using the 'jf config' command.

| | Command arguments | | | group name | The name of the group to create. | @@ -115,8 +115,8 @@ This command adds a list fo existing users to a group. |-------------------|--------------------------------------------------------------------------------------| | Command-name | rt group-add-users | | Abbreviation | rt gau | -| Command options | | -| --server-id |

[Optional]
Artifactory Server ID configured using the 'jf config' command.

| +| **Command options:** | | +| `--server-id` |

[Optional]
Artifactory Server ID configured using the 'jf config' command.

| | Command arguments | | | group name | The name of the group to add users to. | | users list | Comma-seperated list of usernames to add to the specified group. | @@ -139,8 +139,8 @@ This command deletes a group. |-------------------|--------------------------------------------------------------------------------------| | Command-name | rt group-delete | | Abbreviation | rt gdel | -| Command options | | -| --server-id |

[Optional]
Artifactory Server ID configured using the 'jf config' command.

| +| **Command options:** | | +| `--server-id` |

[Optional]
Artifactory Server ID configured using the 'jf config' command.

| | Command arguments | | | group name | The name of the group to delete. | @@ -168,7 +168,7 @@ When using this command to create the template, you can also provide replaceable |-------------------|---------------------------------------------------------------------------------------------------------------| | Command-name | rt repo-template | | Abbreviation | rt rpt | -| Command options | The command has no options. | +| **Command options:** | The command has no options. | | Command arguments | | | template path | Specifies the local file system path for the template file created by the command. The file should not exist. | @@ -202,9 +202,9 @@ These two commands create a new repository and updates an existing a repository. |-------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command-name | rt repo-create / rt repo-update | | Abbreviation | rt rc / rt ru | -| Command options | | -| --server-id |

[Optional]
Artifactory Server ID configured using the 'jf config' command.

| -| --vars |

[Optional]
List of semicolon-separated(;) variables in the form of "key1=value1;key2=value2;..." to be replaced in the template. In the template, the variables should be used as follows: ${key1}.

| +| **Command options:** | | +| `--server-id` |

[Optional]
Artifactory Server ID configured using the 'jf config' command.

| +| `--vars` |

[Optional]
List of semicolon-separated(;) variables in the form of "key1=value1;key2=value2;..." to be replaced in the template. In the template, the variables should be used as follows: ${key1}.

| | Command arguments | | | template path | Specifies the local file system path for the template file to be used for the repository creation. The template can be created using the "jf rt rpt" command. | @@ -243,9 +243,9 @@ This command permanently deletes a repository, including all of its content. |-------------------|------------------------------------------------------------------------------------------------------------| | Command name | rt repo-delete | | Abbreviation | rt rdel | -| Command options | | -| --server-id |

[Optional]
Artifactory Server ID configured using the 'jf config' command.

| -| --quiet |

[Default: $CI]
Set to true to skip the delete confirmation message.

| +| **Command options:** | | +| `--server-id` |

[Optional]
Artifactory Server ID configured using the 'jf config' command.

| +| `--quiet` |

[Default: $CI]
Set to true to skip the delete confirmation message.

| | Command arguments | | | repository key | Specifies the repositories that should be removed. You can use wildcards to specify multiple repositories. | @@ -273,7 +273,7 @@ When using this command to create the template, you can also provide replaceable |-------------------|---------------------------------------------------------------------------------------------------------------| | Command-name | rt replication-template | | Abbreviation | rt rplt | -| Command options | The command has no options. | +| **Command options:** | The command has no options. | | Command arguments | | | template path | Specifies the local file system path for the template file created by the command. The file should not exist. | @@ -306,9 +306,9 @@ This command creates a new replication job for a repository. The command accepts |-------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command-name | replication-create | | Abbreviation | rt rplc | -| Command options | | -| --server-id |

[Optional]
Artifactory Server ID configured using the 'jf config' command.

| -| --vars |

[Optional]
List of semicolon-separated(;) variables in the form of "key1=value1;key2=value2;..." to be replaced in the template. In the template, the variables should be used as follows: ${key1}.

| +| **Command options:** | | +| `--server-id` |

[Optional]
Artifactory Server ID configured using the 'jf config' command.

| +| `--vars` |

[Optional]
List of semicolon-separated(;) variables in the form of "key1=value1;key2=value2;..." to be replaced in the template. In the template, the variables should be used as follows: ${key1}.

| | Command arguments | | | template path | Specifies the local file system path for the template file to be used for the replication job creation. The template can be created using the "jf rt rplt" command. | @@ -339,9 +339,9 @@ This command permanently deletes a replication jobs from a repository. |-------------------|--------------------------------------------------------------------------------------| | Command name | rt replication-delete | | Abbreviation | rt rpldel | -| Command options | | -| --server-id |

[Optional]
Artifactory Server ID configured using the 'jf config' command.

| -| --quiet |

[Default: $CI]
Set to true to skip the delete confirmation message.

| +| **Command options:** | | +| `--server-id` |

[Optional]
Artifactory Server ID configured using the 'jf config' command.

| +| `--quiet` |

[Default: $CI]
Set to true to skip the delete confirmation message.

| | Command arguments | | | repository key | The repository from which the replications will be deleted. | @@ -365,7 +365,7 @@ This command creates a configuration template file, which will be used as an arg |-------------------|---------------------------------------------------------------------------------------------------------------| | Command-name | rt permission-target-template | | Abbreviation | rt ptt | -| Command options | The command has no options. | +| **Command options:** | The command has no options. | | Command arguments | | | template path | Specifies the local file system path for the template file created by the command. The file should not exist. | @@ -381,9 +381,9 @@ These commands create/update a permission target. The commands accept as an argu | template path | Specifies the local file system path for the template file to be used for the permission target creation or update. The template should be created using the "jf rt ptt" command. | | Command-name | permission-target-create / permission-target-update | | Abbreviation | rt ptc / rt ptu | -| Command options | | -| --server-id |

[Optional]
Artifactory Server ID configured using the 'jf config' command.

| -| --vars |

[Optional]
List of semicolon-separated(;) variables in the form of "key1=value1;key2=value2;..." to be replaced in the template. In the template, the variables should be used as follows: ${key1}.

| +| **Command options:** | | +| `--server-id` |

[Optional]
Artifactory Server ID configured using the 'jf config' command.

| +| `--vars` |

[Optional]
List of semicolon-separated(;) variables in the form of "key1=value1;key2=value2;..." to be replaced in the template. In the template, the variables should be used as follows: ${key1}.

| ### Deleting Permission Targets @@ -393,8 +393,8 @@ This command permanently deletes a permission target. |------------------------|--------------------------------------------------------------------------------------| | Command name | rt permission-target-delete | | Abbreviation | rt ptdel | -| Command options | | -| --server-id |

[Optional]
Artifactory Server ID configured using the 'jf config' command.

| -| --quiet |

[Default: $CI]
Set to true to skip the delete confirmation message.

| +| **Command options:** | | +| `--server-id` |

[Optional]
Artifactory Server ID configured using the 'jf config' command.

| +| `--quiet` |

[Default: $CI]
Set to true to skip the delete confirmation message.

| | Command arguments | | | permission target name | The permission target that should be removed. | diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/package-managers-integration.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/package-managers-integration.md index 8740157..3c0eedb 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/package-managers-integration.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/package-managers-integration.md @@ -13,18 +13,18 @@ Before using the **jf mvn** command, the project needs to be pre-configured with |--------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command-name | mvn-config | | Abbreviation | mvnc | -| Command options | | -| --global |

[Optional]
Set to true, if you'd like the configuration to be global (for all projects on the machine). Specific projects can override the global configuration.

| -| --server-id-resolve |

[Optional]
Server ID for resolution. The server should configured using the 'jf rt c' command.

| -| --server-id-deploy |

[Optional]
Server ID for deployment. The server should be configured using the 'jf rt c' command.

| -| --repo-resolve-releases |

[Optional]
Resolution repository for release dependencies.

| -| --repo-resolve-snapshots |

[Optional]
Resolution repository for snapshot dependencies.

| -| --repo-deploy-releases |

[Optional]
Deployment repository for release artifacts.

| -| --repo-deploy-snapshots |

[Optional]
Deployment repository for snapshot artifacts.

| -| --include-patterns |

[Optional]
Filter deployed artifacts by setting a wildcard pattern that specifies which artifacts to include. You may provide multiple comma-separated(,) patterns followed by a white-space. For example

artifact-.jar, artifact-.pom

| -| --exclude-patterns |

[Optional]
Filter deployed artifacts by setting a wildcard pattern that specifies which artifacts to exclude. You may provide multiple comma-separated(,) followed by a white-space. For example

artifact--test.jar, artifact--test.pom

| -| --scan |

[Default: false]
Set if you'd like all files to be scanned by Xray on the local file system prior to the upload, and skip the upload if any of the files are found vulnerable.

| -| --format |

[Default: table]
Should be used with the --scan option. Defines the scan output format. Accepts table or json as values.

| +| **Command options:** | | +| `--global` |

[Optional]
Set to true, if you'd like the configuration to be global (for all projects on the machine). Specific projects can override the global configuration.

| +| `--server-id-resolve` |

[Optional]
Server ID for resolution. The server should configured using the 'jf rt c' command.

| +| `--server-id-deploy` |

[Optional]
Server ID for deployment. The server should be configured using the 'jf rt c' command.

| +| `--repo-resolve-releases` |

[Optional]
Resolution repository for release dependencies.

| +| `--repo-resolve-snapshots` |

[Optional]
Resolution repository for snapshot dependencies.

| +| `--repo-deploy-releases` |

[Optional]
Deployment repository for release artifacts.

| +| `--repo-deploy-snapshots` |

[Optional]
Deployment repository for snapshot artifacts.

| +| `--include-patterns` |

[Optional]
Filter deployed artifacts by setting a wildcard pattern that specifies which artifacts to include. You may provide multiple comma-separated(,) patterns followed by a white-space. For example

artifact-.jar, artifact-.pom

| +| `--exclude-patterns` |

[Optional]
Filter deployed artifacts by setting a wildcard pattern that specifies which artifacts to exclude. You may provide multiple comma-separated(,) followed by a white-space. For example

artifact--test.jar, artifact--test.pom

| +| `--scan` |

[Default: false]
Set if you'd like all files to be scanned by Xray on the local file system prior to the upload, and skip the upload if any of the files are found vulnerable.

| +| `--format` |

[Default: table]
Should be used with the --scan option. Defines the scan output format. Accepts table or json as values.

| | Command arguments | The command accepts no arguments | ### Running maven @@ -43,12 +43,12 @@ The following table lists the command arguments and flags: |-------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command-name | mvn | | Abbreviation | mvn | -| Command options | | -| --threads |

[Default: 3]
Number of threads for uploading build artifacts.

| -| --build-name |

[Optional]
Build name. For more details, please refer to Build Integration.

| -| --build-number |

[Optional]
Build number. For more details, please refer to Build Integration.

| -| --project |

[Optional]
JFrog project key.

| -| --insecure-tls |

[Default: false]
Set to true to skip TLS certificates verification.

| +| **Command options:** | | +| `--threads` |

[Default: 3]
Number of threads for uploading build artifacts.

| +| `--build-name` |

[Optional]
Build name. For more details, please refer to Build Integration.

| +| `--build-number` |

[Optional]
Build number. For more details, please refer to Build Integration.

| +| `--project` |

[Optional]
JFrog project key.

| +| `--insecure-tls` |

[Default: false]
Set to true to skip TLS certificates verification.

| | Command arguments | The command accepts the same arguments and options as the mvn client. | #### Deploying Maven Artifacts @@ -76,20 +76,20 @@ Before using the **gradle** command, the project needs to be pre-configured with |-------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command-name | gradle-config | | Abbreviation | gradlec | -| Command options | | -| --global |

[Optional]
Set to true, if you'd like the configuration to be global (for all projects on the machine). Specific projects can override the global configuration.

| -| --server-id-resolve |

[Optional]
Server ID for resolution. The server should configured using the 'jf c add' command.

| -| --server-id-deploy |

[Optional]
Server ID for deployment. The server should be configured using the 'jf c add' command.

| -| --repo-resolve |

[Optional]
Repository for dependencies resolution.

| -| --repo-deploy |

[Optional]
Repository for artifacts deployment.

| -| --uses-plugin |

[Default: false]
Set to true if the Gradle Artifactory Plugin is already applied in the build script.

| -| --use-wrapper |

[Default: false]
Set to true if you'd like to use the Gradle wrapper.

| -| --deploy-maven-desc |

[Default: true]
Set to false if you do not wish to deploy Maven descriptors.

| -| --deploy-ivy-desc |

[Default: true]
Set to false if you do not wish to deploy Ivy descriptors.

| -| --ivy-desc-pattern |

[Default: '[organization]/[module]/ivy-[revision].xml'

Set the deployed Ivy descriptor pattern.

| -| --ivy-artifacts-pattern |

[Default: '[organization]/[module]/[revision]/[artifact]-[revision](-[classifier]).[ext]'

Set the deployed Ivy artifacts pattern.

| -| --scan |

[Default: false]
Set if you'd like all files to be scanned by Xray on the local file system prior to the upload, and skip the upload if any of the files are found vulnerable.

| -| --format |

[Default: table]
Should be used with the --scan option. Defines the scan output format. Accepts table or json as values.

| +| **Command options:** | | +| `--global` |

[Optional]
Set to true, if you'd like the configuration to be global (for all projects on the machine). Specific projects can override the global configuration.

| +| `--server-id-resolve` |

[Optional]
Server ID for resolution. The server should configured using the 'jf c add' command.

| +| `--server-id-deploy` |

[Optional]
Server ID for deployment. The server should be configured using the 'jf c add' command.

| +| `--repo-resolve` |

[Optional]
Repository for dependencies resolution.

| +| `--repo-deploy` |

[Optional]
Repository for artifacts deployment.

| +| `--uses-plugin` |

[Default: false]
Set to true if the Gradle Artifactory Plugin is already applied in the build script.

| +| `--use-wrapper` |

[Default: false]
Set to true if you'd like to use the Gradle wrapper.

| +| `--deploy-maven-desc` |

[Default: true]
Set to false if you do not wish to deploy Maven descriptors.

| +| `--deploy-ivy-desc` |

[Default: true]
Set to false if you do not wish to deploy Ivy descriptors.

| +| `--ivy-desc-pattern` |

[Default: '[organization]/[module]/ivy-[revision].xml'

Set the deployed Ivy descriptor pattern.

| +| `--ivy-artifacts-pattern` |

[Default: '[organization]/[module]/[revision]/[artifact]-[revision](-[classifier]).[ext]'

Set the deployed Ivy artifacts pattern.

| +| `--scan` |

[Default: false]
Set if you'd like all files to be scanned by Xray on the local file system prior to the upload, and skip the upload if any of the files are found vulnerable.

| +| `--format` |

[Default: table]
Should be used with the --scan option. Defines the scan output format. Accepts table or json as values.

| | Command arguments | The command accepts no arguments | ### Running gradle @@ -108,11 +108,11 @@ The following table lists the command arguments and flags: |-------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command-name | gradle | | Abbreviation | gradle | -| Command options | | -| --threads |

[Default: 3]
Number of threads for uploading build artifacts.

| -| --build-name |

[Optional]
Build name. For more details, please refer to Build Integration.

| -| --build-number |

[Optional]
Build number. For more details, please refer to Build Integration.

| -| --project |

[Optional]
JFrog project key.

| +| **Command options:** | | +| `--threads` |

[Default: 3]
Number of threads for uploading build artifacts.

| +| `--build-name` |

[Optional]
Build name. For more details, please refer to Build Integration.

| +| `--build-number` |

[Optional]
Build number. For more details, please refer to Build Integration.

| +| `--project` |

[Optional]
JFrog project key.

| | Command arguments | The command accepts the same arguments and options as the gradle client. | #### Example @@ -176,13 +176,13 @@ The following table lists the command arguments and flags: |-------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command-name | docker pull | | Abbreviation | dpl | -| Command options | | -| --server-id |

[Optional]
Server ID configured using the 'jf config' command. If not specified, the default configured Artifactory server is used.

| -| --build-name |

[Optional]
Build name. For more details, please refer to Build Integration.

| -| --build-number |

[Optional]
Build number. For more details, please refer to Build Integration.

| -| --project |

[Optional]
JFrog project key.

| -| --module |

[Optional]
Optional module name for the build-info.

| -| --skip-login |

[Default: false]
Set to true if you'd like the command to skip performing docker login.

| +| **Command options:** | | +| `--server-id` |

[Optional]
Server ID configured using the 'jf config' command. If not specified, the default configured Artifactory server is used.

| +| `--build-name` |

[Optional]
Build name. For more details, please refer to Build Integration.

| +| `--build-number` |

[Optional]
Build number. For more details, please refer to Build Integration.

| +| `--project` |

[Optional]
JFrog project key.

| +| `--module` |

[Optional]
Optional module name for the build-info.

| +| `--skip-login` |

[Default: false]
Set to true if you'd like the command to skip performing docker login.

| | Command arguments | The same arguments and options supported by the docker client/ | #### Example @@ -207,15 +207,15 @@ The following table lists the command arguments and flags: |--------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command-name | docker push | | Abbreviation | dp | -| Command options | | -| --server-id |

[Optional]
Server ID configured using the 'jf config' command. If not specified, the default configured Artifactory server is used.

| -| --build-name |

[Optional]
Build name. For more details, please refer to Build Integration.

| -| --build-number |

[Optional]
Build number. For more details, please refer to Build Integration.

| -| --project |

[Optional]
JFrog project key.

| -| --module |

[Optional]
Optional module name for the build-info.

| -| --skip-login |

[Default: false]
Set to true if you'd like the command to skip performing docker login.

| -| --threads |

[Default: 3]
Number of working threads.

| -| --detailed-summary |

[Default: false]
Set true to include a list of the affected files as part of the command output summary.

| +| **Command options:** | | +| `--server-id` |

[Optional]
Server ID configured using the 'jf config' command. If not specified, the default configured Artifactory server is used.

| +| `--build-name` |

[Optional]
Build name. For more details, please refer to Build Integration.

| +| `--build-number` |

[Optional]
Build number. For more details, please refer to Build Integration.

| +| `--project` |

[Optional]
JFrog project key.

| +| `--module` |

[Optional]
Optional module name for the build-info.

| +| `--skip-login` |

[Default: false]
Set to true if you'd like the command to skip performing docker login.

| +| `--threads` |

[Default: 3]
Number of working threads.

| +| `--detailed-summary` |

[Default: false]
Set true to include a list of the affected files as part of the command output summary.

| | Command arguments | The same arguments and options supported by the docker client/ | #### Example @@ -240,13 +240,13 @@ The following table lists the command arguments and flags: |-------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command-name | rt podman-pull | | Abbreviation | rt ppl | -| Command options | | -| --server-id |

[Optional]
Server ID configured using the 'jf config' command. If not specified, the default configured Artifactory server is used.

| -| --build-name |

[Optional]
Build name. For more details, please refer to Build Integration.

| -| --build-number |

[Optional]
Build number. For more details, please refer to Build Integration.

| -| --project |

[Optional]
JFrog project key.

| -| --module |

[Optional]
Optional module name for the build-info.

| -| --skip-login |

[Default: false]
Set to true if you'd like the command to skip performing docker login.

| +| **Command options:** | | +| `--server-id` |

[Optional]
Server ID configured using the 'jf config' command. If not specified, the default configured Artifactory server is used.

| +| `--build-name` |

[Optional]
Build name. For more details, please refer to Build Integration.

| +| `--build-number` |

[Optional]
Build number. For more details, please refer to Build Integration.

| +| `--project` |

[Optional]
JFrog project key.

| +| `--module` |

[Optional]
Optional module name for the build-info.

| +| `--skip-login` |

[Default: false]
Set to true if you'd like the command to skip performing docker login.

| | Command argument | | | Image tag | The docker image tag to pull. | | Source repository | Source repository in Artifactory. | @@ -273,15 +273,15 @@ The following table lists the command arguments and flags: |--------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command-name | rt podman-push | | Abbreviation | rt pp | -| Command options | | -| --server-id |

[Optional]
Server ID configured using the 'jf config' command. If not specified, the default configured Artifactory server is used.

| -| --build-name |

[Optional]
Build name. For more details, please refer to Build Integration.

| -| --build-number |

[Optional]
Build number. For more details, please refer to Build Integration.

| -| --project |

[Optional]
JFrog project key.

| -| --module |

[Optional]
Optional module name for the build-info.

| -| --skip-login |

[Default: false]
Set to true if you'd like the command to skip performing docker login.

| -| --threads |

[Default: 3]
Number of working threads.

| -| --detailed-summary |

[Default: false]
Set to true to include a list of the affected files as part of the command output summary.

| +| **Command options:** | | +| `--server-id` |

[Optional]
Server ID configured using the 'jf config' command. If not specified, the default configured Artifactory server is used.

| +| `--build-name` |

[Optional]
Build name. For more details, please refer to Build Integration.

| +| `--build-number` |

[Optional]
Build number. For more details, please refer to Build Integration.

| +| `--project` |

[Optional]
JFrog project key.

| +| `--module` |

[Optional]
Optional module name for the build-info.

| +| `--skip-login` |

[Default: false]
Set to true if you'd like the command to skip performing docker login.

| +| `--threads` |

[Default: 3]
Number of working threads.

| +| `--detailed-summary` |

[Default: false]
Set to true to include a list of the affected files as part of the command output summary.

| | Command argument | | | Image tag | The docker image tag to push. | | Target repository | Target repository in Artifactory. | @@ -321,21 +321,21 @@ The **build-docker-create** command allows adding a docker image, which is alrea |-------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command-name | rt build-docker-create | | Abbreviation | rt bdc | -| Command options | | -| --image-file |

Path to a file which includes one line in the following format: IMAGE-TAG@sha256:MANIFEST-SHA256. For example:

cat image-file-details
superfrog-docker.jfrog.io/hello-frog@sha256:30f04e684493fb5ccc030969df6de0

| -| --server-id |

[Optional]
Server ID configured using the 'jf config' command. If not specified, the default configured Artifactory server is used.

| -| --build-name |

[Optional]
Build name. For more details, please refer to Build Integration.

| -| --build-number |

[Optional]
Build number. For more details, please refer to Build Integration.

| -| --project |

[Optional]
JFrog project key.

| -| --module |

[Optional]
Optional module name for the build-info.

| -| --skip-login |

[Default: false]
Set to true if you'd like the command to skip performing docker login.

| -| --threads |

[Default: 3]
Number of working threads.

| +| **Command options:** | | +| `--image-file` |

Path to a file which includes one line in the following format: IMAGE-TAG@sha256:MANIFEST-SHA256. For example:

cat image-file-details
superfrog-docker.jfrog.io/hello-frog@sha256:30f04e684493fb5ccc030969df6de0

| +| `--server-id` |

[Optional]
Server ID configured using the 'jf config' command. If not specified, the default configured Artifactory server is used.

| +| `--build-name` |

[Optional]
Build name. For more details, please refer to Build Integration.

| +| `--build-number` |

[Optional]
Build number. For more details, please refer to Build Integration.

| +| `--project` |

[Optional]
JFrog project key.

| +| `--module` |

[Optional]
Optional module name for the build-info.

| +| `--skip-login` |

[Default: false]
Set to true if you'd like the command to skip performing docker login.

| +| `--threads` |

[Default: 3]
Number of working threads.

| | Command argument | | | Target repository | The name of the repository to which the image was pushed. | #### Example -In this example, a Docker image that has already been deployed to Artifactory is incorporated into a locally created, unpublished build-info identified by the build name 'myBuild' and build number '1'. This local build-info can subsequently be published to Artifactory using the command 'jf rt bp myBuild 1'. +In this example, a Docker image that has already been deployed to Artifactory is incorporated into a locally created, unpublished build-info identified by the build name `myBuild` and build number '1'. This local build-info can subsequently be published to Artifactory using the command 'jf rt bp myBuild 1'. ``` jf rt bdc docker-local --image-file image-file-details --build-name myBuild --build-number 1 @@ -358,12 +358,12 @@ The following table lists the command arguments and flags: |-----------------------|-----------------------------------------------------------------------------------------------------------------------------------------------| | Command-name | rt docker-promote | | Abbreviation | rt dpr | -| Command options | | -| --server-id |

[Optional]
Server ID configured using the 'jf config' command. If not specified, the default configured Artifactory server is used.

| -| --copy |

[Default: false]
If set true, the Docker image is copied to the target repository, otherwise it is moved.

| -| --source-tag |

[Optional]
The tag name to promote.

| -| --target-docker-image |

[Optional]
Docker target image name.

| -| --target-tag |

[Optional]
The target tag to assign the image after promotion.

| +| **Command options:** | | +| `--server-id` |

[Optional]
Server ID configured using the 'jf config' command. If not specified, the default configured Artifactory server is used.

| +| `--copy` |

[Default: false]
If set true, the Docker image is copied to the target repository, otherwise it is moved.

| +| `--source-tag` |

[Optional]
The tag name to promote.

| +| `--target-docker-image` |

[Optional]
Docker target image name.

| +| `--target-tag` |

[Optional]
The target tag to assign the image after promotion.

| | Command argument | | | source docker image | The docker image name to promote. | | source repository | Source repository in Artifactory. | @@ -400,12 +400,12 @@ Before using the **jf npm install**, **jf npm ci** and **jf npm publish** comman |---------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command-name | npm-config | | Abbreviation | npmc | -| Command options | | -| --global |

[Optional]
Set to true, if you'd like the configuration to be global (for all projects on the machine). Specific projects can override the global configuration.

| -| --server-id-resolve |

[Optional]
Artifactory server ID for resolution. The server should configured using the 'jf c add' command.

| -| --server-id-deploy |

[Optional]
Artifactory server ID for deployment. The server should be configured using the 'jf c add' command.

| -| --repo-resolve |

[Optional]
Repository for dependencies resolution.

| -| --repo-deploy |

[Optional]
Repository for artifacts deployment.

| +| **Command options:** | | +| `--global` |

[Optional]
Set to true, if you'd like the configuration to be global (for all projects on the machine). Specific projects can override the global configuration.

| +| `--server-id-resolve` |

[Optional]
Artifactory server ID for resolution. The server should configured using the 'jf c add' command.

| +| `--server-id-deploy` |

[Optional]
Artifactory server ID for deployment. The server should be configured using the 'jf c add' command.

| +| `--repo-resolve` |

[Optional]
Repository for dependencies resolution.

| +| `--repo-deploy` |

[Optional]
Repository for artifacts deployment.

| | Command arguments | The command accepts no arguments | ### Installing Npm Packages @@ -422,15 +422,15 @@ The following table lists the command arguments and flags: |-------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command-name | npm | | Abbreviation | | -| Command options | | -| --build-name |

[Optional]
Build name. For more details, please refer to Build Integration.

| -| --build-number |

[Optional]
Build number. For more details, please refer to Build Integration.

| -| --project |

[Optional]
JFrog project key.

| -| --module |

[Optional]
Optional module name for the build-info.

| -| --threads |

[Default: 3]
Number of working threads for build-info collection.

| +| **Command options:** | | +| `--build-name` |

[Optional]
Build name. For more details, please refer to Build Integration.

| +| `--build-number` |

[Optional]
Build number. For more details, please refer to Build Integration.

| +| `--project` |

[Optional]
JFrog project key.

| +| `--module` |

[Optional]
Optional module name for the build-info.

| +| `--threads` |

[Default: 3]
Number of working threads for build-info collection.

| | Command arguments | The command accepts the same arguments and options as the npm client. | -| --project |

[Optional]
JFrog project key.

| -| --module |

[Optional]
Optional module name for the build-info.

| +| `--project` |

[Optional]
JFrog project key.

| +| `--module` |

[Optional]
Optional module name for the build-info.

| | Command arguments | The command accepts the same arguments and options as the npm client. | #### Examples @@ -474,14 +474,14 @@ The following table lists the command arguments and flags: |--------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command-name | npm publish | | Abbreviation | | -| Command options | | -| --build-name |

[Optional]
Build name. For more details, please refer to Build Integration.

| -| --build-number |

[Optional]
Build number. For more details, please refer to Build Integration.

| -| --project |

[Optional]
JFrog project key.

| -| --module |

[Optional]
Optional module name for the build-info.

| -| --detailed-summary |

[Default: false]
Set true to include a list of the affected files as part of the command output summary.

| -| --scan |

[Default: false]
Set if you'd like all files to be scanned by Xray on the local file system prior to the upload, and skip the upload if any of the files are found vulnerable.

| -| --format |

[Default: table]
Should be used with the --scan option. Defines the scan output format. Accepts table or JSON as values.

| +| **Command options:** | | +| `--build-name` |

[Optional]
Build name. For more details, please refer to Build Integration.

| +| `--build-number` |

[Optional]
Build number. For more details, please refer to Build Integration.

| +| `--project` |

[Optional]
JFrog project key.

| +| `--module` |

[Optional]
Optional module name for the build-info.

| +| `--detailed-summary` |

[Default: false]
Set true to include a list of the affected files as part of the command output summary.

| +| `--scan` |

[Default: false]
Set if you'd like all files to be scanned by Xray on the local file system prior to the upload, and skip the upload if any of the files are found vulnerable.

| +| `--format` |

[Default: table]
Should be used with the --scan option. Defines the scan output format. Accepts table or JSON as values.

| | Command argument | The command accepts the same arguments and options that the **npm pack** command expects. | #### Example @@ -506,10 +506,10 @@ Before using the **jf yarn** command, the project needs to be pre-configured wit |---------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command-name | yarn-config | | Abbreviation | yarnc | -| Command options | | -| --global |

[Optional]
Set to true, if you'd like the configuration to be global (for all projects on the machine). Specific projects can override the global configuration.

| -| --server-id-resolve |

[Optional]
Artifactory server ID for resolution. The server should configured using the 'jf c add' command.

| -| --repo-resolve |

[Optional]
Repository for dependencies resolution.

| +| **Command options:** | | +| `--global` |

[Optional]
Set to true, if you'd like the configuration to be global (for all projects on the machine). Specific projects can override the global configuration.

| +| `--server-id-resolve` |

[Optional]
Artifactory server ID for resolution. The server should configured using the 'jf c add' command.

| +| `--repo-resolve` |

[Optional]
Repository for dependencies resolution.

| | Command arguments | The command accepts no arguments | ### Installing Npm Packages @@ -525,12 +525,12 @@ The following table lists the command arguments and flags: | | | |-------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command-name | yarn | -| Command options | | -| --build-name |

[Optional]
Build name. For more details, please refer to Build Integration.

| -| --build-number |

[Optional]
Build number. For more details, please refer to Build Integration.

| -| --project |

[Optional]
JFrog project key.

| -| --module |

[Optional]
Optional module name for the build-info.

| -| --threads |

[Default: 3]
Number of working threads for build-info collection.

| +| **Command options:** | | +| `--build-name` |

[Optional]
Build name. For more details, please refer to Build Integration.

| +| `--build-number` |

[Optional]
Build number. For more details, please refer to Build Integration.

| +| `--project` |

[Optional]
JFrog project key.

| +| `--module` |

[Optional]
Optional module name for the build-info.

| +| `--threads` |

[Default: 3]
Number of working threads for build-info collection.

| | Command arguments | The command accepts the same arguments and options as the yarn client. | #### Examples @@ -583,12 +583,12 @@ Here's how you set the repositories. |---------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command-name | go-config | | Abbreviation | | -| Command options | | -| --global |

[Default false]
Set to true, if you'd like the configuration to be global (for all projects on the machine). Specific projects can override the global configuration.

| -| --server-id-resolve |

[Optional]
Artifactory server ID for resolution. The server should configured using the 'jf c add' command.

| -| --server-id-deploy |

[Optional]
Artifactory server ID for deployment. The server should be configured using the 'jf c add' command.

| -| --repo-resolve |

[Optional]
Repository for dependencies resolution.

| -| --repo-deploy |

[Optional]
Repository for artifacts deployment.

| +| **Command options:** | | +| `--global` |

[Default false]
Set to true, if you'd like the configuration to be global (for all projects on the machine). Specific projects can override the global configuration.

| +| `--server-id-resolve` |

[Optional]
Artifactory server ID for resolution. The server should configured using the 'jf c add' command.

| +| `--server-id-deploy` |

[Optional]
Artifactory server ID for deployment. The server should be configured using the 'jf c add' command.

| +| `--repo-resolve` |

[Optional]
Repository for dependencies resolution.

| +| `--repo-deploy` |

[Optional]
Repository for artifacts deployment.

| #### Examples ##### Example 1 @@ -621,12 +621,12 @@ The following table lists the command arguments and flags: |-------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command-name | go | | Abbreviation | go | -| Command options | | -| --build-name |

[Optional]
Build name. For more details, please refer to Build Integration.

| -| --build-number |

[Optional]
Build number. For more details, please refer to Build Integration.

| -| --project |

[Optional]
JFrog project key.

| -| --no-fallback |

[Default false]
Set to avoid downloading packages from the VCS, if they are missing in Artifactory.

| -| --module |

[Optional]
Optional module name for the build-info.

| +| **Command options:** | | +| `--build-name` |

[Optional]
Build name. For more details, please refer to Build Integration.

| +| `--build-number` |

[Optional]
Build number. For more details, please refer to Build Integration.

| +| `--project` |

[Optional]
JFrog project key.

| +| `--no-fallback` |

[Default false]
Set to avoid downloading packages from the VCS, if they are missing in Artifactory.

| +| `--module` |

[Optional]
Optional module name for the build-info.

| | Command arguments | | | Go command | The command accepts the same arguments and options as the go client. | @@ -665,12 +665,12 @@ The following table lists the command arguments and flags: |--------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command-name | go-publish | | Abbreviation | gp | -| Command options | | -| --build-name |

[Optional]
Build name. For more details, please refer to Build Integration.

| -| --build-number |

[Optional]
Build number. For more details, please refer to Build Integration.

| -| --project |

[Optional]
JFrog project key.

| -| --module |

[Optional]
Optional module name for the build-info.

| -| --detailed-summary |

[Default: false]
Set true to include a list of the affected files as part of the command output summary.

| +| **Command options:** | | +| `--build-name` |

[Optional]
Build name. For more details, please refer to Build Integration.

| +| `--build-number` |

[Optional]
Build number. For more details, please refer to Build Integration.

| +| `--project` |

[Optional]
JFrog project key.

| +| `--module` |

[Optional]
Optional module name for the build-info.

| +| `--detailed-summary` |

[Default: false]
Set true to include a list of the affected files as part of the command output summary.

| | Command argument | | | Version | The version of the Go project that is being published | @@ -716,10 +716,10 @@ Here's how you set the repositories. |---------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command-name | pip-config / pipenv-config / poetry-config | | Abbreviation | pipc / pipec / poc | -| Command options | | -| --global |

[Default false]
Set to true, if you'd like the configuration to be global (for all projects on the machine). Specific projects can override the global configuration.

| -| --server-id-resolve |

[Optional]
Artifactory server ID for resolution. The server should configured using the 'jf c add' command.

| -| --repo-resolve |

[Optional]
Repository for dependencies resolution.

| +| **Command options:** | | +| `--global` |

[Default false]
Set to true, if you'd like the configuration to be global (for all projects on the machine). Specific projects can override the global configuration.

| +| `--server-id-resolve` |

[Optional]
Artifactory server ID for resolution. The server should configured using the 'jf c add' command.

| +| `--repo-resolve` |

[Optional]
Repository for dependencies resolution.

| #### Examples ##### Example 1 @@ -783,9 +783,9 @@ JFrog CLI records the installed packages as build-info dependencies. The recorde **How to include all packages in the build-info?** The details of all the installed packages are always cached by the **jf pip install** and **jf pipenv install** command in the **.jfrog/projects/deps.cache.json** file, located under the root of the project. JFrog CLI uses this cache for including previously installed packages in the build-info.\ -If the Python environment had some packages installed prior to the first execution of the 'install' command, those previously installed packages will be missing from the cache and therefore will not be included in the build-info. +If the Python environment had some packages installed prior to the first execution of the `install` command, those previously installed packages will be missing from the cache and therefore will not be included in the build-info. -Running the 'install' command with both the **no-cache-dir** and **force-reinstall** pip options, should re-download and install these packages, and they will therefore be included in the build-info and added to the cache. It is also recommended to run the command from inside a [virtual environment](https://packaging.python.org/guides/installing-using-pip-and-virtual-environments/). +Running the `install` command with both the **no-cache-dir** and **force-reinstall** pip options, should re-download and install these packages, and they will therefore be included in the build-info and added to the cache. It is also recommended to run the command from inside a [virtual environment](https://packaging.python.org/guides/installing-using-pip-and-virtual-environments/). #### Commands Params @@ -793,11 +793,11 @@ Running the 'install' command with both the **no-cache-dir** and **force-reinsta |------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command-name | pip / pipenv / poetry | | Abbreviation | | -| Command options | | -| --build-name |

[Optional]
Build name. For more details, please refer to Build Integration.

| -| --build-number |

[Optional]
Build number. For more details, please refer to Build Integration.

| -| --project |

[Optional]
JFrog project key.

| -| --module |

[Optional]
Optional module name for the build-info.

| +| **Command options:** | | +| `--build-name` |

[Optional]
Build name. For more details, please refer to Build Integration.

| +| `--build-number` |

[Optional]
Build number. For more details, please refer to Build Integration.

| +| `--project` |

[Optional]
JFrog project key.

| +| `--module` |

[Optional]
Optional module name for the build-info.

| | Command argument | The command accepts the same arguments and options as the pip / pipenv / poetry clients. | #### Examples @@ -846,10 +846,10 @@ The following table lists the commands' options: |---------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command-name | nuget-config / dotnet-config | | Abbreviation | nugetc / dotnetc | -| Command options | | -| --global |

[Optional]
Set to true, if you'd like the configuration to be global (for all projects on the machine). Specific projects can override the global configuration.

| -| --server-id-resolve |

[Optional]
Artifactory server ID for resolution. The server should configured using the 'jf c add' command.

| -| --repo-resolve |

[Optional]
Repository for dependencies resolution.

| +| **Command options:** | | +| `--global` |

[Optional]
Set to true, if you'd like the configuration to be global (for all projects on the machine). Specific projects can override the global configuration.

| +| `--server-id-resolve` |

[Optional]
Artifactory server ID for resolution. The server should configured using the 'jf c add' command.

| +| `--repo-resolve` |

[Optional]
Repository for dependencies resolution.

| | --nuget-v2 |

[Default: false]
Set to true if you'd like to use the NuGet V2 protocol when restoring packages from Artifactory (instead of NuGet V3).

| | Command arguments | The command accepts no arguments | @@ -869,11 +869,11 @@ The following table lists the commands arguments and options: |------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command-name | nuget / dotnet | | Abbreviation | | -| Command options | | -| --build-name |

[Optional]
Build name. For more details, please refer to Build Integration.

| -| --build-number |

[Optional]
Build number. For more details, please refer to Build Integration.

| -| --project |

[Optional]
JFrog project key.

| -| --module |

[Optional]
Optional module name for the build-info.

| +| **Command options:** | | +| `--build-name` |

[Optional]
Build name. For more details, please refer to Build Integration.

| +| `--build-number` |

[Optional]
Build number. For more details, please refer to Build Integration.

| +| `--project` |

[Optional]
JFrog project key.

| +| `--module` |

[Optional]
Optional module name for the build-info.

| | Command argument | The command accepts the same arguments and options as the NuGet client / .NET Core CLI. | #### Examples @@ -927,10 +927,10 @@ The following table lists the command options: |--------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command-name | terraform-config | | Abbreviation | tfc | -| Command options | | -| --global |

[Optional]
Set to true, if you'd like the configuration to be global (for all projects on the machine). Specific projects can override the global configuration.

| -| --server-id-deploy |

[Optional]
Artifactory server ID for deployment. The server should configured using the 'jf c add' command.

| -| --repo-deploy |

[Optional]
Repository for artifacts deployment.

| +| **Command options:** | | +| `--global` |

[Optional]
Set to true, if you'd like the configuration to be global (for all projects on the machine). Specific projects can override the global configuration.

| +| `--server-id-deploy` |

[Optional]
Artifactory server ID for deployment. The server should configured using the 'jf c add' command.

| +| `--repo-deploy` |

[Optional]
Repository for artifacts deployment.

| | Command arguments | The command accepts no arguments | #### Examples @@ -962,14 +962,14 @@ The following table lists the commands arguments and options: |------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command-name | terraform publish | | Abbreviation | tf p | -| Command options | | -| --namespace |

[Mandatory]
Terraform module namespace

| -| --provider |

[Mandatory]
Terraform module provider

| -| --tag |

[Mandatory]
Terraform module tag

| -| --exclusions |

[Optional]
A list of semicolon-separated(;) exclude patterns wildcards. Paths inside the module matching one of the patterns are excluded from the deployed package.

| -| --build-name |

[Optional]
Build name. For more details, please refer to Build Integration.

| -| --build-number |

[Optional]
Build number. For more details, please refer to Build Integration.

| -| --project | | +| **Command options:** | | +| `--namespace` |

[Mandatory]
Terraform module namespace

| +| `--provider` |

[Mandatory]
Terraform module provider

| +| `--tag` |

[Mandatory]
Terraform module tag

| +| `--exclusions` |

[Optional]
A list of semicolon-separated(;) exclude patterns wildcards. Paths inside the module matching one of the patterns are excluded from the deployed package.

| +| `--build-name` |

[Optional]
Build name. For more details, please refer to Build Integration.

| +| `--build-number` |

[Optional]
Build number. For more details, please refer to Build Integration.

| +| `--project` | | | Command argument | The command accepts no arguments | #### Examples diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/release-lifecycle-management.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/release-lifecycle-management.md index f76ff3b..e5f8adf 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/release-lifecycle-management.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/release-lifecycle-management.md @@ -101,13 +101,13 @@ The file spec may be of one of the following creation sources: | Command arguments | | | release bundle name | Name of the newly created Release Bundle. | | release bundle version | Version of the newly created Release Bundle. | -| Command options | | -| --project |

[Optional]
Project key associated with the created Release Bundle version.

| -| --server-id |

[Optional]
Platform Server ID configured using the 'jf config' command.

| -| --signing-key |

[Mandatory]
The GPG/RSA key-pair name given in Artifactory.

| -| --spec |

[Optional]
Path to a File Spec.

| -| --spec-vars |

[Optional]
List of semicolon-separated(;) variables in the form of "key1=value1;key2=value2;..." (wrapped by quotes) to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| -| --sync |

[Default: false]
Set to true to run synchronously.

| | +| **Command options:** | | +| `--project` |

[Optional]
Project key associated with the created Release Bundle version.

| +| `--server-id` |

[Optional]
Platform Server ID configured using the 'jf config' command.

| +| `--signing-key` |

[Mandatory]
The GPG/RSA key-pair name given in Artifactory.

| +| `--spec` |

[Optional]
Path to a File Spec.

| +| `--spec-vars` |

[Optional]
List of semicolon-separated(;) variables in the form of "key1=value1;key2=value2;..." (wrapped by quotes) to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| +| `--sync` |

[Default: false]
Set to true to run synchronously.

| | ### Examples #### Example 1 @@ -148,13 +148,13 @@ This command allows promoting a release bundle to a target environment. | release bundle name | Name of the Release Bundle to promote. | | release bundle version | Version of the Release Bundle to promote. | | environment | Name of the target environment for the promotion. | -| Command options | | -| --input-repos |

[Optional]
A list of semicolon-separated(;) repositories to include in the promotion. If this property is left undefined, all repositories (except those specifically excluded) are included in the promotion. If one or more repositories are specifically included, all other repositories are excluded.

| -| --exclude-repos |

[Optional]
A list of semicolon-separated(;) repositories to exclude from the promotion.

| -| --project |

[Optional]
Project key associated with the Release Bundle version.

| -| --server-id |

[Optional]
Platform Server ID configured using the 'jf config' command.

| -| --signing-key |

[Mandatory]
The GPG/RSA key-pair name given in Artifactory.

| -| --sync |

[Default: false]
Set to true to run synchronously.

| | +| **Command options:** | | +| `--input-repos` |

[Optional]
A list of semicolon-separated(;) repositories to include in the promotion. If this property is left undefined, all repositories (except those specifically excluded) are included in the promotion. If one or more repositories are specifically included, all other repositories are excluded.

| +| `--exclude-repos` |

[Optional]
A list of semicolon-separated(;) repositories to exclude from the promotion.

| +| `--project` |

[Optional]
Project key associated with the Release Bundle version.

| +| `--server-id` |

[Optional]
Platform Server ID configured using the 'jf config' command.

| +| `--signing-key` |

[Mandatory]
The GPG/RSA key-pair name given in Artifactory.

| +| `--sync` |

[Default: false]
Set to true to run synchronously.

| | ### Examples #### Example 1 @@ -200,19 +200,19 @@ This command distributes a release bundle to an edge node. | Command arguments | | | release bundle name | Name of the release bundle to distribute. | | release bundle version | Version of the release bundle to distribute. | -| Command options | | -| --city |

[Default: *]
Wildcard filter for site city name.

| -| --country-codes |

[Default: *]
semicolon-separated(;) list of wildcard filters for site country codes.

| -| --create-repo |

[Default: false]
Set to true to create the repository on the edge if it does not exist.

| -| --dist-rules |

[Optional]
Path to a file, which includes the Distribution Rules in a JSON format. See the "Distribution Rules Structure" bellow.

| -| --dry-run |

[Default: false]
Set to true to disable communication with JFrog Distribution.

| -| --mapping-pattern |

[Optional]
Specify along with 'mapping-target' to distribute artifacts to a different path on the edge node. You can use wildcards to specify multiple artifacts.

| -| --mapping-target |

[Optional]
The target path for distributed artifacts on the edge node. If not specified, the artifacts will have the same path and name on the edge node, as on the source Artifactory server. For flexibility in specifying the distribution path, you can include [placeholders](https://www.jfrog.com/confluence/display/CLI/CLI+for+JFrog+Artifactory#CLIforJFrogArtifactory-UsingPlaceholders) in the form of {1}, {2} which are replaced by corresponding tokens in the pattern path that are enclosed in parenthesis.

| -| --max-wait-minutes |

[Default: 60]
Max minutes to wait for sync distribution.

| -| --project |

[Optional]
Project key associated with the Release Bundle version.

| -| --server-id |

[Optional]
Platform Server ID configured using the 'jf config' command.

| -| --site |

[Default: *]
Wildcard filter for site name.

| -| --sync |

[Default: false]
Set to true to run synchronously.

| | +| **Command options:** | | +| `--city` |

[Default: *]
Wildcard filter for site city name.

| +| `--country-codes` |

[Default: *]
semicolon-separated(;) list of wildcard filters for site country codes.

| +| `--create-repo` |

[Default: false]
Set to true to create the repository on the edge if it does not exist.

| +| `--dist-rules` |

[Optional]
Path to a file, which includes the Distribution Rules in a JSON format. See the "Distribution Rules Structure" bellow.

| +| `--dry-run` |

[Default: false]
Set to true to disable communication with JFrog Distribution.

| +| `--mapping-pattern` |

[Optional]
Specify along with 'mapping-target' to distribute artifacts to a different path on the edge node. You can use wildcards to specify multiple artifacts.

| +| `--mapping-target` |

[Optional]
The target path for distributed artifacts on the edge node. If not specified, the artifacts will have the same path and name on the edge node, as on the source Artifactory server. For flexibility in specifying the distribution path, you can include [placeholders](https://www.jfrog.com/confluence/display/CLI/CLI+for+JFrog+Artifactory#CLIforJFrogArtifactory-UsingPlaceholders) in the form of {1}, {2} which are replaced by corresponding tokens in the pattern path that are enclosed in parenthesis.

| +| `--max-wait-minutes` |

[Default: 60]
Max minutes to wait for sync distribution.

| +| `--project` |

[Optional]
Project key associated with the Release Bundle version.

| +| `--server-id` |

[Optional]
Platform Server ID configured using the 'jf config' command.

| +| `--site` |

[Default: *]
Wildcard filter for site name.

| +| `--sync` |

[Default: false]
Set to true to run synchronously.

| | **Distribution Rules Structure** ```json @@ -254,7 +254,7 @@ jf rbd --dist-rules=/path/to/dist-rules.json myApp 1.0.0 #### Example 2 Distribute the release bundle named myApp with version 1.0.0 using the default distribution rules. -Map files under the 'source' directory to be placed under the 'target' directory. +Map files under the `source` directory to be placed under the `target` directory. ``` jf rbd --dist-rules=/path/to/dist-rules.json --mapping-pattern="(*)/source/(*)" --mapping-target="{1}/target/{2}" myApp 1.0.0 @@ -279,11 +279,11 @@ Deleting locally means distributions of the release bundle will not be deleted. | release bundle name | Name of the release bundle to distribute. | | release bundle version | Version of the release bundle to distribute. | | environment | If provided, all promotions to this environment are deleted. Otherwise, the release bundle is deleted locally with all its promotions. | -| Command options | | -| --project |

[Optional]
Project key associated with the Release Bundle version.

| -| --quiet |

[Default: $CI]
Set to true to skip the delete confirmation message.

| -| --server-id |

[Optional]
Platform Server ID configured using the 'jf config' command.

| -| --sync |

[Default: false]
Set to true to run synchronously.

| +| **Command options:** | | +| `--project` |

[Optional]
Project key associated with the Release Bundle version.

| +| `--quiet` |

[Default: $CI]
Set to true to skip the delete confirmation message.

| +| `--server-id` |

[Optional]
Platform Server ID configured using the 'jf config' command.

| +| `--sync` |

[Default: false]
Set to true to run synchronously.

| ### Examples #### Example 1 @@ -317,17 +317,17 @@ This command will delete distributions of a release bundle from edge nodes. | Command arguments | | | release bundle name | Name of the release bundle to distribute. | | release bundle version | Version of the release bundle to distribute. | -| Command options | | -| --city |

[Default: *]
Wildcard filter for site city name.

| -| --country-codes |

[Default: *]
semicolon-separated(;) list of wildcard filters for site country codes.

| -| --dist-rules |

[Optional]
Path to a file, which includes the Distribution Rules in a JSON format. See the "Distribution Rules Structure" bellow.

| -| --dry-run |

[Default: false]
Set to true to disable communication with JFrog Distribution.

| -| --max-wait-minutes |

[Default: 60]
Max minutes to wait for sync distribution.

| -| --project |

[Optional]
Project key associated with the Release Bundle version.

| -| --quiet |

[Default: $CI]
Set to true to skip the delete confirmation message.

| -| --server-id |

[Optional]
Platform Server ID configured using the 'jf config' command.

| -| --site |

[Default: *]
Wildcard filter for site name.

| -| --sync |

[Default: false]
Set to true to run synchronously.

| +| **Command options:** | | +| `--city` |

[Default: *]
Wildcard filter for site city name.

| +| `--country-codes` |

[Default: *]
semicolon-separated(;) list of wildcard filters for site country codes.

| +| `--dist-rules` |

[Optional]
Path to a file, which includes the Distribution Rules in a JSON format. See the "Distribution Rules Structure" bellow.

| +| `--dry-run` |

[Default: false]
Set to true to disable communication with JFrog Distribution.

| +| `--max-wait-minutes` |

[Default: 60]
Max minutes to wait for sync distribution.

| +| `--project` |

[Optional]
Project key associated with the Release Bundle version.

| +| `--quiet` |

[Default: $CI]
Set to true to skip the delete confirmation message.

| +| `--server-id` |

[Optional]
Platform Server ID configured using the 'jf config' command.

| +| `--site` |

[Default: *]
Wildcard filter for site name.

| +| `--sync` |

[Default: false]
Set to true to run synchronously.

| ### Examples #### Example 1 @@ -357,9 +357,9 @@ The following command allows exporting a Release Bundle as an archive to the fil | release bundle name | Name of the Release Bundle to export. | | release bundle version | Version of the release bundle to export. | | target pattern | The argument is optional and specifies the local file system target path.If the target path ends with a slash, the path is assumed to be a directory.For example, if you specify the target as "repo-name/a/b/", then "b" is assumed to be a directory into which files should be downloaded.If there is no terminal slash, the target path is assumed to be a file to which the downloaded file should be renamed.For example, if you specify the target as "a/b", the downloaded file is renamed to "b". | -| Command options | | -| --project |

[Optional]
Project key associated with the Release Bundle version.

| -| --server-id |

[Optional]
Platform Server ID configured using the 'jf config' command.

| +| **Command options:** | | +| `--project` |

[Optional]
Project key associated with the Release Bundle version.

| +| `--server-id` |

[Optional]
Platform Server ID configured using the 'jf config' command.

| | mapping-pattern |

[Optional]
Specify a list of input regex mapping pairs that define where the queried artifact is located and where it should be placed after it is imported. Use this option if the path on the target is different than the source path. | | mapping-target |

[Optional]
Specify a list of output regex mapping pairs that define where the queried artifact is located and where it should be placed after it is imported. Use this option if the path on the target is different than the source path. | | split-count |

[Optional]
The maximum number of parts that can be concurrently uploaded per file during a multi-part upload. Set to 0 to disable multi-part upload. | @@ -391,9 +391,9 @@ Please note this functionality only works on Edge nodes within an air-gapped env | Abbreviation | rbi | | Command arguments | | | path to archive | Path to the release bundle archive on the filesystem | -| Command options | | -| --project |

[Optional]
Project key associated with the Release Bundle version.

| -| --server-id |

[Optional]
Platform Server ID configured using the 'jf config' command.

| +| **Command options:** | | +| `--project` |

[Optional]
Project key associated with the Release Bundle version.

| +| `--server-id` |

[Optional]
Platform Server ID configured using the 'jf config' command.

| #### Example Import a Release Bundle named "myExportedApp" and version 1.0.0 diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/verifying-artifactory-accessibility.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/verifying-artifactory-accessibility.md index a2f01d9..c33ca90 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/verifying-artifactory-accessibility.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/verifying-artifactory-accessibility.md @@ -9,10 +9,10 @@ This command can be used to verify that Artifactory is accessible by sending an | Command name | rt ping | | Abbreviation | rt p | | | | -| Command options | | -| --url |

[Optional]
JFrog Artifactory URL. (example: https://acme.jfrog.io/artifactory)

| -| --server-id |

[Optional]
Server ID configured using the jf c add command. If not specified, the default configured Artifactory server is used.

| -| --insecure-tls |

[Default: false]
Set to true to skip TLS certificates verification.

| +| **Command options:** | | +| `--url` |

[Optional]
JFrog Artifactory URL. (example: https://acme.jfrog.io/artifactory)

| +| `--server-id` |

[Optional]
Server ID configured using the jf c add command. If not specified, the default configured Artifactory server is used.

| +| `--insecure-tls` |

[Default: false]
Set to true to skip TLS certificates verification.

| | Command arguments | The command accepts no arguments. | ## Examples diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-cloud-transfer.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-cloud-transfer.md index b98db5a..1e039b4 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-cloud-transfer.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-cloud-transfer.md @@ -112,7 +112,7 @@ jf rt transfer-plugin-install source-server If the source instance has no internet access, follow these steps instead. -1. Download the following two files from a machine that has internet access: Download **data-transfer.jar** from [https://releases.jfrog.io/artifactory/jfrog-releases/data-transfer/\[RELEASE\]/lib/data-transfer.jar](https://releases.jfrog.io/artifactory/jfrog-releases/data-transfer/\[RELEASE]/lib/data-transfer.jar). Download **dataTransfer.groovy** from [https://releases.jfrog.io/artifactory/jfrog-releases/data-transfer/\[RELEASE\]/dataTransfer.groovy](https://releases.jfrog.io/artifactory/jfrog-releases/data-transfer/\[RELEASE]/dataTransfer.groovy). +1. Download the following two files from a machine that has internet access: [**data-transfer.jar**](https://releases.jfrog.io/artifactory/jfrog-releases/data-transfer/\[RELEASE]/lib/data-transfer.jar) and [**dataTransfer.groovy**](https://releases.jfrog.io/artifactory/jfrog-releases/data-transfer/\[RELEASE]/dataTransfer.groovy). 2. Create a new directory on the primary node machine of the source instance and place the two files you downloaded inside this directory. 3. Install the data-transfer user plugin by running the following command from the terminal. Replace the `` token with the full path to the directory which includes the plugin files you downloaded. diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-curation.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-curation.md index 2f2651a..f72ccca 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-curation.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-curation.md @@ -62,15 +62,15 @@ https://jfrog.com/help/r/jfrog-curation/configure-curation-pass-through #### Commands Params -| | | -|---------------------|----------------------------------------------------------------------------------------------------------------------------------------| -| **Command name** | curation-audit | -| **Abbreviation** | ca | -| **Command options** | | -| --format |

[Default: table]

Defines the output format of the command. Acceptable values are: table and json.

| -| --working-dirs |

[Optional]

A comma separated list of relative working directories, to determine the audit targets locations.

| -| --threads |

[Default: 10]

The number of parallel threads used to determine the curation status for each package in the project tree.

| -| --requirements-file |

[Optional] [Pip]

Defines pip requirements file name. For example: 'requirements.txt'

| +| | | +|-----------------------|----------------------------------------------------------------------------------------------------------------------------------------| +| **Command name** | curation-audit | +| **Abbreviation** | ca | +| **Command options** | | +| `--format` |

[Default: table]

Defines the output format of the command. Acceptable values are: table and json.

| +| `--working-dirs` |

[Optional]

A comma separated list of relative working directories, to determine the audit targets locations.

| +| `--threads` |

[Default: 10]

The number of parallel threads used to determine the curation status for each package in the project tree.

| +| `--requirements-file` |

[Optional] [Pip]

Defines pip requirements file name. For example: 'requirements.txt'

| #### Example 1 diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-distribution.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-distribution.md index 981ae28..e5d894a 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-distribution.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-distribution.md @@ -34,30 +34,30 @@ This commands creates and updates an unsigned Release Bundle on JFrog Distributi #### Commands Params -| | | -|------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command-name | release-bundle-create / release-bundle-update | -| Abbreviation | rbc / rbu | -| Command options | | -| --server-id |

[Optional]
Artifactory Server ID configured using the 'jf config' command.

| -| --spec |

[Optional]
Path to a file spec. For more details, please refer to Using File Specs.

| -| --spec-vars |

[Optional]
List of semicolon-separated(;) variables in the form of "key1=value1;key2=value2;..." to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| -| --target-props |

[Optional]
The list of properties, in the form of key1=value1;key2=value2,..., to be added to the artifacts after distribution of the release bundle.

| -| --target |

[Optional]
The target path for distributed artifacts on the edge node. If not specified, the artifacts will have the same path and name on the edge node, as on the source Artifactory server. For flexibility in specifying the distribution path, you can include placeholders in the form of {1}, {2} which are replaced by corresponding tokens in the pattern path that are enclosed in parenthesis.

| -| --dry-run |

[Default: false]
Set to true to disable communication with JFrog Distribution.

| -| --sign |

[Default: false]
If set to true, automatically signs the release bundle version.

| -| --passphrase |

[Optional]
The passphrase for the signing key.

| -| --desc |

[Optional]
Description of the release bundle.

| -| --release-notes-path |

[Optional]
Path to a file describes the release notes for the release bundle version.

| -| --release-notes-syntax |

[Default: plain_text]
The syntax for the release notes. Can be one of markdown, asciidoc, or plain_text.

| -| --exclusions |

[Optional]
A list of semicolon-separated(;) exclude path patterns, to be excluded from the Release Bundle. Allows using wildcards.

| -| --repo |

[Optional]
A repository name at source Artifactory to store release bundle artifacts in. If not provided, Artifactory will use the default one.

| -| --insecure-tls |

[Default: false]
Set to true to skip TLS certificates verification.

| -| --detailed-summary |

[Default: false]
Set to true to return the SHA256 value of the release bundle manifest.

| -| Command arguments | | -| release bundle name | The name of the release bundle. | -| release bundle version | The release bundle version. | -| pattern | Specifies the source path in Artifactory, from which the artifacts should be bundled, in the following format: \/\. You can use wildcards to specify multiple artifacts. This argument should not be sent along with the _--spec_ option. | +| | | +|--------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | release-bundle-create / release-bundle-update | +| Abbreviation | rbc / rbu | +| **Command options:** | | +| `--server-id` |

[Optional]
Artifactory Server ID configured using the 'jf config' command.

| +| `--spec` |

[Optional]
Path to a file spec. For more details, please refer to Using File Specs.

| +| `--spec-vars` |

[Optional]
List of semicolon-separated(;) variables in the form of "key1=value1;key2=value2;..." to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| +| `--target-props` |

[Optional]
The list of properties, in the form of key1=value1;key2=value2,..., to be added to the artifacts after distribution of the release bundle.

| +| `--target` |

[Optional]
The target path for distributed artifacts on the edge node. If not specified, the artifacts will have the same path and name on the edge node, as on the source Artifactory server. For flexibility in specifying the distribution path, you can include placeholders in the form of {1}, {2} which are replaced by corresponding tokens in the pattern path that are enclosed in parenthesis.

| +| `--dry-run` |

[Default: false]
Set to true to disable communication with JFrog Distribution.

| +| `--sign` |

[Default: false]
If set to true, automatically signs the release bundle version.

| +| `--passphrase` |

[Optional]
The passphrase for the signing key.

| +| `--desc` |

[Optional]
Description of the release bundle.

| +| `--release-notes-path` |

[Optional]
Path to a file describes the release notes for the release bundle version.

| +| `--release-notes-syntax` |

[Default: plain_text]
The syntax for the release notes. Can be one of markdown, asciidoc, or plain_text.

| +| `--exclusions` |

[Optional]
A list of semicolon-separated(;) exclude path patterns, to be excluded from the Release Bundle. Allows using wildcards.

| +| `--repo` |

[Optional]
A repository name at source Artifactory to store release bundle artifacts in. If not provided, Artifactory will use the default one.

| +| `--insecure-tls` |

[Default: false]
Set to true to skip TLS certificates verification.

| +| `--detailed-summary` |

[Default: false]
Set to true to return the SHA256 value of the release bundle manifest.

| +| Command arguments | | +| release bundle name | The name of the release bundle. | +| release bundle version | The release bundle version. | +| pattern | Specifies the source path in Artifactory, from which the artifacts should be bundled, in the following format: \/\. You can use wildcards to specify multiple artifacts. This argument should not be sent along with the _--spec_ option. | #### Example 1 @@ -184,12 +184,12 @@ This command GPG signs an existing Release Bundle on JFrog Distribution. |------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------| | Command-name | release-bundle-sign | | Abbreviation | rbs | -| Command options | | -| --server-id |

[Optional]
Artifactory Server ID configured using the 'jf config' command.

| -| --passphrase |

[Optional]
The passphrase for the signing key.

| -| --repo |

[Optional]
A repository name at source Artifactory to store release bundle artifacts in. If not provided, Artifactory will use the default one.

| -| --insecure-tls |

[Default: false]
Set to true to skip TLS certificates verification.

| -| --detailed-summary |

[Default: false]
Set to true to return the SHA256 value of the release bundle manifest.

| +| **Command options:** | | +| `--server-id` |

[Optional]
Artifactory Server ID configured using the 'jf config' command.

| +| `--passphrase` |

[Optional]
The passphrase for the signing key.

| +| `--repo` |

[Optional]
A repository name at source Artifactory to store release bundle artifacts in. If not provided, Artifactory will use the default one.

| +| `--insecure-tls` |

[Default: false]
Set to true to skip TLS certificates verification.

| +| `--detailed-summary` |

[Default: false]
Set to true to return the SHA256 value of the release bundle manifest.

| | Command arguments | | | release bundle name | The name of the release bundle. | | release bundle version | The release bundle version. | @@ -220,17 +220,17 @@ This command distributes a release bundle to the Edge Nodes. |------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command-name | release-bundle-distribute | | Abbreviation | rbd | -| Command options | | -| --server-id |

[Optional]
Artifactory Server ID configured using the 'jf config' command.

| -| --sync |

[Default: false]
Set to true to enable sync distribution (the command execution will end when the distribution process ends).

| -| --max-wait-minutes |

[Default: 60]
Max minutes to wait for sync distribution.

| -| --create-repo |

[Default: false]
Set to true to create the repository on the edge if it does not exist.

| -| --dry-run |

[Default: false]
Set to true to disable communication with JFrog Distribution.

| -| --dist-rules |

[Optional]
Path to a file, which includes the Distribution Rules in a JSON format.

Distribution Rules JSON structure

{
"distribution_rules": [
{
"site_name": "DC-1",
"city_name": "New-York",
"country_codes": ["1"]
},
{
"site_name": "DC-2",
"city_name": "Tel-Aviv",
"country_codes": ["972"]
}
]
}

The Distribution Rules format also supports wildcards. For example:

{
"distribution_rules": [
{
"site_name": "",
"city_name": "",
"country_codes": ["*"]
}
]
}

| -| --site |

[Default: *]
Wildcard filter for site name.

| -| --city |

[Default: *]
Wildcard filter for site city name.

| -| --country-codes |

[Default: *]
semicolon-separated(;) list of wildcard filters for site country codes.

| -| --insecure-tls |

[Default: false]
Set to true to skip TLS certificates verification.

| +| **Command options:** | | +| `--server-id` |

[Optional]
Artifactory Server ID configured using the 'jf config' command.

| +| `--sync` |

[Default: false]
Set to true to enable sync distribution (the command execution will end when the distribution process ends).

| +| `--max-wait-minutes` |

[Default: 60]
Max minutes to wait for sync distribution.

| +| `--create-repo` |

[Default: false]
Set to true to create the repository on the edge if it does not exist.

| +| `--dry-run` |

[Default: false]
Set to true to disable communication with JFrog Distribution.

| +| `--dist-rules` |

[Optional]
Path to a file, which includes the Distribution Rules in a JSON format.

Distribution Rules JSON structure

{
"distribution_rules": [
{
"site_name": "DC-1",
"city_name": "New-York",
"country_codes": ["1"]
},
{
"site_name": "DC-2",
"city_name": "Tel-Aviv",
"country_codes": ["972"]
}
]
}

The Distribution Rules format also supports wildcards. For example:

{
"distribution_rules": [
{
"site_name": "",
"city_name": "",
"country_codes": ["*"]
}
]
}

| +| `--site` |

[Default: *]
Wildcard filter for site name.

| +| `--city` |

[Default: *]
Wildcard filter for site city name.

| +| `--country-codes` |

[Default: *]
semicolon-separated(;) list of wildcard filters for site country codes.

| +| `--insecure-tls` |

[Default: false]
Set to true to skip TLS certificates verification.

| | Command arguments | | | release bundle name | The name of the release bundle. | | release bundle version | The release bundle version. | @@ -262,18 +262,18 @@ This command deletes a Release Bundle from the Edge Nodes and optionally from Di |------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command-name | release-bundle-delete | | Abbreviation | rbdel | -| Command options | | -| --server-id |

[Optional]
Artifactory Server ID configured using the 'jf config' command.

| -| --sync |

[Default: false]
Set to true to enable sync deletion (the command execution will end when the deletion process ends).

| -| --max-wait-minutes |

[Default: 60]
Max minutes to wait for sync deletion.

| -| --dry-run |

[Default: false]
Set to true to disable communication with JFrog Distribution.

| -| --dist-rules |

[Optional]
Path to a file, which includes the distribution rules in a JSON format.

| -| --site |

[Default: *]
Wildcard filter for site name.

| -| --city |

[Default: *]
Wildcard filter for site city name.

| -| --country-codes |

[Default: *]
semicolon-separated(;) list of wildcard filters for site country codes.

| -| --delete-from-dist |

[Default: false]
Set to true to delete release bundle version in JFrog Distribution itself after deletion is complete in the specified Edge nodes.

| -| --quiet |

[Default: false]
Set to true to skip the delete confirmation message.

| -| --insecure-tls |

[Default: false]
Set to true to skip TLS certificates verification.

| +| **Command options:** | | +| `--server-id` |

[Optional]
Artifactory Server ID configured using the 'jf config' command.

| +| `--sync` |

[Default: false]
Set to true to enable sync deletion (the command execution will end when the deletion process ends).

| +| `--max-wait-minutes` |

[Default: 60]
Max minutes to wait for sync deletion.

| +| `--dry-run` |

[Default: false]
Set to true to disable communication with JFrog Distribution.

| +| `--dist-rules` |

[Optional]
Path to a file, which includes the distribution rules in a JSON format.

| +| `--site` |

[Default: *]
Wildcard filter for site name.

| +| `--city` |

[Default: *]
Wildcard filter for site city name.

| +| `--country-codes` |

[Default: *]
semicolon-separated(;) list of wildcard filters for site country codes.

| +| `--delete-from-dist` |

[Default: false]
Set to true to delete release bundle version in JFrog Distribution itself after deletion is complete in the specified Edge nodes.

| +| `--quiet` |

[Default: false]
Set to true to skip the delete confirmation message.

| +| `--insecure-tls` |

[Default: false]
Set to true to skip TLS certificates verification.

| | Command arguments | | | release bundle name | The name of the release bundle. | | release bundle version | The release bundle version. | diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-pipelines.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-pipelines.md index 527b9c3..93f7907 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-pipelines.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-pipelines.md @@ -35,8 +35,8 @@ The following sections describe the commands available in the JFrog CLI for use | Command name | pl version | | Abbreviation | v | | Command arguments | The command accepts no arguments. | -| Command options | | -| --server-id |

[Optional]
Specify Pipelines server for which the version is to be fetched. If not specified, the default configured server is used.

| +| **Command options:** | | +| `--server-id` |

[Optional]
Specify Pipelines server for which the version is to be fetched. If not specified, the default configured server is used.

| ##### Example @@ -57,12 +57,12 @@ Get the status of the run for the specified pipeline | Abbreviation | s | | Command arguments | The command accepts no arguments. | | | | -| Command options | | -| --pipeline-name |

[Optional]
Name of the pipeline.

| -| --branch |

[Optional]
Name of the multi branch.

| -| --monitor |

[Optional]
Continuous monitoring until pipeline reaches end state.

Default time is 1 hour and 30 minutes.

| -| --server-id |

[Optional]
Name of the server.

| -| --single-branch |

[Optional]
To be used when using a single branch.

| +| **Command options:** | | +| `--pipeline-name` |

[Optional]
Name of the pipeline.

| +| `--branch` |

[Optional]
Name of the multi branch.

| +| `--monitor` |

[Optional]
Continuous monitoring until pipeline reaches end state.

Default time is 1 hour and 30 minutes.

| +| `--server-id` |

[Optional]
Name of the server.

| +| `--single-branch` |

[Optional]
To be used when using a single branch.

| ##### Example 1 @@ -89,9 +89,9 @@ Trigger a pipeline run. |-------------------|----------------------------------------------------------------------------------------------------------------------| | Command name | pl trigger | | Abbreviation | t | -| Command options | | -| --server-id |

[Optional]
Name of the server.

| -| --single-branch |

[Optional]
To be used when using a single branch. When used, branch_name argument is ignored.

| +| **Command options:** | | +| `--server-id` |

[Optional]
Name of the server.

| +| `--single-branch` |

[Optional]
To be used when using a single branch. When used, branch_name argument is ignored.

| | Command arguments | | | pipeline\_name | Name of the pipeline to be triggered. | | branch\_name | Name of the multi branch. | @@ -120,10 +120,10 @@ jf pl trigger myPipeline main/jobs --server-id repo21 |-----------------|---------------------------------------------------------------------------------------| | Command name | pl sync | | Abbreviation | sy | -| Command options | | -| --server-id |

[Optional]
Name of the server.

| -| --repository |

[Optional]
Full name of the repository where the pipeline source is stored.

| -| --branch |

[Optional]
Name of branch that has the pipeline source.

| +| **Command options:** | | +| `--server-id` |

[Optional]
Name of the server.

| +| `--repository` |

[Optional]
Full name of the repository where the pipeline source is stored.

| +| `--branch` |

[Optional]
Name of branch that has the pipeline source.

| ##### Example @@ -140,8 +140,8 @@ jf pl sync --repository jfrog/artifactory --branch main/jobs --server-id repo21 |-------------------|------------------------------------------------------------------| | Command name | pl sync-status | | Abbreviation | ss | -| Command options | | -| --server-id |

[Optional]
Name of the server.

| +| **Command options:** | | +| `--server-id` |

[Optional]
Name of the server.

| | Command arguments | | | full\_repo\_name | Full name of the repository where the pipeline source is stored. | | branch\_name | Name of the branch. | diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/README.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/README.md index 08b46ec..92d38a4 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/README.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/README.md @@ -42,5 +42,5 @@ To authenticate yourself using an Xray Access Token, either configure your Acces | | | |----------------|---------------------------------------------------------| | Command option | Description | -| --url | JFrog Xray API endpoint URL. It usually ends with /xray | -| --access-token | JFrog access token | +| `--url` | JFrog Xray API endpoint URL. It usually ends with /xray | +| `--access-token` | JFrog access token | diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/curl-integration.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/curl-integration.md index 7d4f876..79ab60b 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/curl-integration.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/curl-integration.md @@ -9,8 +9,8 @@ Execute a cUrl command, using the configured Xray details. The command expects t |--------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command name | xr curl | | Abbreviation | xr cl | -| Command options | | -| --server-id |

[Optional]
Server ID configured using the jf c add command. If not specified, the default configured server is used.

| +| **Command options:** | | +| `--server-id` |

[Optional]
Server ID configured using the jf c add command. If not specified, the default configured server is used.

| | Command arguments | | | cUrl arguments and flags |

The same list of arguments and flags passed to cUrl, except for the following changes:

1. The full Xray URL should not be passed. Instead, the REST endpoint URI should be sent.
2. The login credentials should not be passed. Instead, the --server-id should be used.

| diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-published-builds.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-published-builds.md index 821fc24..979f8fd 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-published-builds.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-published-builds.md @@ -10,13 +10,13 @@ JFrog CLI is integrated with JFrog Xray and JFrog Artifactory, allowing you to h |-------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command name | build-scan | | Abbreviation | bs | -| Command options | | -| --server-id |

[Optional]
Server ID configured by the jf c add command. If not specified, the default configured server is used.

| -| --vuln |

[Optional]
Set if you'd like to receive all vulnerabilities, regardless of the policy configured in Xray.

| -| --fail |

[Default: true]
When using one of the flags --watches, --project or --repo-path and a Fail build rule is matched the command will return exit code 3. Set to false if you'd like to see violations with exit code 0.

| -| --format |

[Default: table]
Defines the output format of the command. The accepted values are: table and json.

| -| --project |

[Optional]
JFrog project key

| -| --rescan |

[Default: false]
Set to true when scanning an already successfully scanned build, for example after adding an ignore rule.

| +| **Command options:** | | +| `--server-id` |

[Optional]
Server ID configured by the jf c add command. If not specified, the default configured server is used.

| +| `--vuln` |

[Optional]
Set if you'd like to receive all vulnerabilities, regardless of the policy configured in Xray.

| +| `--fail` |

[Default: true]
When using one of the flags --watches, --project or --repo-path and a Fail build rule is matched the command will return exit code 3. Set to false if you'd like to see violations with exit code 0.

| +| `--format` |

[Default: table]
Defines the output format of the command. The accepted values are: table and json.

| +| `--project` |

[Optional]
JFrog project key

| +| `--rescan` |

[Default: false]
Set to true when scanning an already successfully scanned build, for example after adding an ignore rule.

| | Command arguments | The command accepts two arguments. | | Build name | Build name to be scanned. | | Build number | Build number to be scanned. | diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-binaries.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-binaries.md index 1de77c8..b26c4b7 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-binaries.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-binaries.md @@ -24,12 +24,12 @@ This _**jf scan**_ command scans files on the local file system with Xray. | **Command name** | scan | | **Abbreviation** | s | | **Command options** | | -| --server-id |

[Optional]
Server ID configured using the jf c add command. If not specified, the default configured server is used.

| -| --spec |

[Optional]
Path to a file specifying the files to scan. If the pattern argument is provided to the command, this option should not be provided.

| -| --project |

[Optional]
JFrog project key, to enable Xray to determine security violations accordingly. The command accepts this option only if the --repo-path and --watches options are not provided. If none of the three options are provided, the command will show all known vulnerabilities.

| -| --repo-path |

[Optional]
Artifactory repository path, to enable Xray to determine violations accordingly. The command accepts this option only if the --project and --watches options are not provided. If none of the three options are provided, the command will show all known vulnerabilities.

| -| --watches |

[Optional]
A comma-separated(,) list of Xray watches, to enable Xray to determine violations accordingly. The command accepts this option only if the --project and --repo-path options are not provided. If none of the three options are provided, the command will show all known vulnerabilities.

| -| --licenses |

[Default: false]
Set if you also require the list of licenses to be displayed.

| +| `--server-id` |

[Optional]
Server ID configured using the jf c add command. If not specified, the default configured server is used.

| +| `--spec` |

[Optional]
Path to a file specifying the files to scan. If the pattern argument is provided to the command, this option should not be provided.

| +| `--project` |

[Optional]
JFrog project key, to enable Xray to determine security violations accordingly. The command accepts this option only if the --repo-path and --watches options are not provided. If none of the three options are provided, the command will show all known vulnerabilities.

| +| `--repo-path` |

[Optional]
Artifactory repository path, to enable Xray to determine violations accordingly. The command accepts this option only if the --project and --watches options are not provided. If none of the three options are provided, the command will show all known vulnerabilities.

| +| `--watches` |

[Optional]
A comma-separated(,) list of Xray watches, to enable Xray to determine violations accordingly. The command accepts this option only if the --project and --repo-path options are not provided. If none of the three options are provided, the command will show all known vulnerabilities.

| +| `--licenses` |

[Default: false]
Set if you also require the list of licenses to be displayed.

| | --format=json |

[Optional]
Produces a JSON file containing the scan results.

| | **Command arguments** | | | **Pattern** | Specifies the local file system path to artifacts to be scanned. You can specify multiple files by using wildcards. | @@ -104,11 +104,11 @@ This j\_**f docker scan**\_ command scans docker containers located on the local | **Command name** | docker scan | | **Abbreviation** | | | **Command options** | | -| --server-id |

[Optional]
Server ID configured using the jf c add command. If not specified, the default configured server is used.

| -| --project |

[Optional]
JFrog project key, to enable Xray to determine security violations accordingly. The command accepts this option only if the --repo-path and --watches options are not provided. If none of the three options are provided, the command will show all known vulnerabilities.

| -| --repo-path |

[Optional]
Artifactory repository path, to enable Xray to determine violations accordingly. The command accepts this option only if the --project and --watches options are not provided. If none of the three options are provided, the command will show all known vulnerabilities.

| -| --watches |

[Optional]
A comma-separated(,) list of Xray watches, to enable Xray to determine violations accordingly. The command accepts this option only if the --repo-path and --repo-path options are not provided. If none of the three options are provided, the command will show all known vulnerabilities.

| -| --licenses |

[Default: false]
Set if you also require the list of licenses to be displayed.

| +| `--server-id` |

[Optional]
Server ID configured using the jf c add command. If not specified, the default configured server is used.

| +| `--project` |

[Optional]
JFrog project key, to enable Xray to determine security violations accordingly. The command accepts this option only if the --repo-path and --watches options are not provided. If none of the three options are provided, the command will show all known vulnerabilities.

| +| `--repo-path` |

[Optional]
Artifactory repository path, to enable Xray to determine violations accordingly. The command accepts this option only if the --project and --watches options are not provided. If none of the three options are provided, the command will show all known vulnerabilities.

| +| `--watches` |

[Optional]
A comma-separated(,) list of Xray watches, to enable Xray to determine violations accordingly. The command accepts this option only if the --repo-path and --repo-path options are not provided. If none of the three options are provided, the command will show all known vulnerabilities.

| +| `--licenses` |

[Default: false]
Set if you also require the list of licenses to be displayed.

| | --format=json |

[Optional]
Produces a JSON file containing the scan results.

| | **Command arguments** | | | **Pattern** | Specifies the local file system path to artifacts to be scanned. You can specify multiple files by using wildcards. | diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-source-code.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-source-code.md index 0e7bad0..b317c1b 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-source-code.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-source-code.md @@ -29,7 +29,7 @@ This command also supports the following Advanced Scans with the **Advanced Secu **Note** * The **jf audit** command does not extract the internal content of the scanned dependencies. This means that if a package includes other vulnerable components bundled inside the binary, they may not be shown as part of the results. This is contrary to the **jf scan** command, which drills down into the package content. -* To generate the dependency tree for scanning purposes, the system will execute an 'install' command on the project if it hasn't been executed previously. +* To generate the dependency tree for scanning purposes, the system will execute an `install` command on the project if it hasn't been executed previously. *** @@ -40,30 +40,30 @@ This command also supports the following Advanced Scans with the **Advanced Secu | **Command name** | audit | | **Abbreviation** | aud | | **Command options** | | -| --server-id |

[Optional]
Server ID configured using the jf c add command. If not specified, the default configured server is used.

| -| --project |

[Optional]
JFrog project key, to enable Xray to determine security violations accordingly. The command accepts this option only if the --repo-path and --watches options are not provided. If none of the three options are provided, the command will show all known vulnerabilities

| -| --repo-path |

[Optional]
Artifactory repository path, to enable Xray to determine violations accordingly. The command accepts this option only if the --project and --watches options are not provided. If none of the three options are provided, the command will show all known vulnerabilities

| -| --watches |

[Optional]
A comma-separated(,) list of Xray watches, to enable Xray to determine violations accordingly. The command accepts this option only if the --repo-path and --repo-path options are not provided. If none of the three options are provided, the command will show all known vulnerabilities

| -| --licenses |

[Default: false]
Set if you'd also like the list of licenses to be displayed.

| -| --format |

[Default: table]
Defines the output format of the command. Acceptable values are: table and json.

| -| --fail |

[Default: true]
When using one of the flags --watches, --project or --repo-path and a Fail build rule is matched the command will return exit code 3. Set to false if you'd like to see violations with exit code 0.

| -| --use-wrapper |

[Default: false] [Gradle]
Set to true if you'd like to use the Gradle wrapper.

| -| --dep-type |

[Default: all] [npm]
Defines npm dependencies type. Possible values are: all, devOnly and prodOnly

| -| --exclude-test-deps |

[Default: false] [Gradle]
Set to true if you'd like to exclude Gradle test dependencies from Xray scanning.

| -| --requirements-file |

[Optional] [Pip]
Defines pip requirements file name. For example: 'requirements.txt'

| -| --working-dirs |

[Optional]
A comma-separated(,) list of relative working directories, to determine the audit targets locations.

If flag isn't provided, a recursive scan is triggered from the root directory of the project. | -| --exclusions |

[Default: *.git*;*node_modules*;*target*;*venv*;*test*]
List of semicolon-separated(;) exclusions, utilized to skip sub-projects from undergoing an audit. These exclusions may incorporate the * and ? wildcards.

| -| --fixable-only |

[Optional]
Set to true if you wish to display issues that have a fix version only.

| -| --min-severity |

[Optional]
Set the minimum severity of issues to display. The following values are accepted: Low, Medium, High or Critical

| -| --go |

[Default: false]
Set to true to request audit for a Go project.

| -| --gradle |

[Default: false]
Set to true to request audit for a Gradle project.

| -| --mvn |

[Default: false]
Set to true to request audit for a Maven project.

| -| --npm |

[Default: false]
Set to true to request audit for a npm project.

| -| --pnpm |

[Default: false]
Set to true to request audit for a pnpm project.

| -| --nuget |

[Default: false]
Set to true to request audit for a .Net project.

| -| --pip |

[Default: false]
Set to true to request audit for a Pip project.

| -| --pipenv |

[Default: false]
Set to true to request audit for a Pipenv project.

| -| --yarn |

[Default: false]
Set to true to request audit for a Yarn project.

| +| `--server-id` |

[Optional]
Server ID configured using the jf c add command. If not specified, the default configured server is used.

| +| `--project` |

[Optional]
JFrog project key, to enable Xray to determine security violations accordingly. The command accepts this option only if the --repo-path and --watches options are not provided. If none of the three options are provided, the command will show all known vulnerabilities

| +| `--repo-path` |

[Optional]
Artifactory repository path, to enable Xray to determine violations accordingly. The command accepts this option only if the --project and --watches options are not provided. If none of the three options are provided, the command will show all known vulnerabilities

| +| `--watches` |

[Optional]
A comma-separated(,) list of Xray watches, to enable Xray to determine violations accordingly. The command accepts this option only if the --repo-path and --repo-path options are not provided. If none of the three options are provided, the command will show all known vulnerabilities

| +| `--licenses` |

[Default: false]
Set if you'd also like the list of licenses to be displayed.

| +| `--format` |

[Default: table]
Defines the output format of the command. Acceptable values are: table and json.

| +| `--fail` |

[Default: true]
When using one of the flags --watches, --project or --repo-path and a Fail build rule is matched the command will return exit code 3. Set to false if you'd like to see violations with exit code 0.

| +| `--use-wrapper` |

[Default: false] [Gradle]
Set to true if you'd like to use the Gradle wrapper.

| +| `--dep-type` |

[Default: all] [npm]
Defines npm dependencies type. Possible values are: all, devOnly and prodOnly

| +| `--exclude-test-deps` |

[Default: false] [Gradle]
Set to true if you'd like to exclude Gradle test dependencies from Xray scanning.

| +| `--requirements-file` |

[Optional] [Pip]
Defines pip requirements file name. For example: 'requirements.txt'

| +| `--working-dirs` |

[Optional]
A comma-separated(,) list of relative working directories, to determine the audit targets locations.

If flag isn't provided, a recursive scan is triggered from the root directory of the project. | +| `--exclusions` |

[Default: *.git*;*node_modules*;*target*;*venv*;*test*]
List of semicolon-separated(;) exclusions, utilized to skip sub-projects from undergoing an audit. These exclusions may incorporate the * and ? wildcards.

| +| `--fixable-only` |

[Optional]
Set to true if you wish to display issues that have a fix version only.

| +| `--min-severity` |

[Optional]
Set the minimum severity of issues to display. The following values are accepted: Low, Medium, High or Critical

| +| `--go` |

[Default: false]
Set to true to request audit for a Go project.

| +| `--gradle` |

[Default: false]
Set to true to request audit for a Gradle project.

| +| `--mvn` |

[Default: false]
Set to true to request audit for a Maven project.

| +| `--npm` |

[Default: false]
Set to true to request audit for a npm project.

| +| `--pnpm` |

[Default: false]
Set to true to request audit for a pnpm project.

| +| `--nuget` |

[Default: false]
Set to true to request audit for a .Net project.

| +| `--pip` |

[Default: false]
Set to true to request audit for a Pip project.

| +| `--pipenv` |

[Default: false]
Set to true to request audit for a Pipenv project.

| +| `--yarn` |

[Default: false]
Set to true to request audit for a Yarn project.

| | **Command arguments** | The command accepts no arguments | #### **Output Example** diff --git a/jfrog-applications/jfrog-cli/get-started/configurations/jfrog-platform-configuration.md b/jfrog-applications/jfrog-cli/get-started/configurations/jfrog-platform-configuration.md index ad493fb..a6a4d00 100644 --- a/jfrog-applications/jfrog-cli/get-started/configurations/jfrog-platform-configuration.md +++ b/jfrog-applications/jfrog-cli/get-started/configurations/jfrog-platform-configuration.md @@ -20,16 +20,16 @@ This command allows creating [Access Tokens](https://jfrog.com/help/r/jfrog-plat | Abbreviation | atc | | Command arguments | | | username | The username for which this token is created. If not specified, the token will be created for the current user. | -| Command options | | -| --audience |

[Optional]

A space-separated list of the other instances or services that should accept this token identified by their Service-IDs.

| -| --description |

[Optional]

Free text token description. Useful for filtering and managing tokens. Limited to 1024 characters.

| -| --expiry |

[Optional]

The amount of time, in seconds, it would take for the token to expire. Must be non-negative. If not provided, the platform default will be used. To specify a token that never expires, set to zero. Non-admin may only set a value that is equal or lower than the platform default that was set by an administrator (1 year by default).

| -| --grant-admin |

[Default: false]

Set to true to provide admin privileges to the access token. This is only available for administrators.

| -| --groups |

[Optional]

A list of comma-separated(,) groups for the access token to be associated with. This is only available for administrators.

| -| --project |

[Optional]

The project for which this token is created. Enter the project name on which you want to apply this token.

| -| --reference |

[Default: false]

Generate a Reference Token (alias to Access Token) in addition to the full token (available from Artifactory 7.38.10).

| -| --refreshable |

[Default: false]

Set to true if you'd like the token to be refreshable. A refresh token will also be returned in order to be used to generate a new token once it expires.

| -| --scope |

[Optional]

The scope of access that the token provides. This is only available for administrators.

| +| **Command options:** | | +| `--audience` |

[Optional]

A space-separated list of the other instances or services that should accept this token identified by their Service-IDs.

| +| `--description` |

[Optional]

Free text token description. Useful for filtering and managing tokens. Limited to 1024 characters.

| +| `--expiry` |

[Optional]

The amount of time, in seconds, it would take for the token to expire. Must be non-negative. If not provided, the platform default will be used. To specify a token that never expires, set to zero. Non-admin may only set a value that is equal or lower than the platform default that was set by an administrator (1 year by default).

| +| `--grant-admin` |

[Default: false]

Set to true to provide admin privileges to the access token. This is only available for administrators.

| +| `--groups` |

[Optional]

A list of comma-separated(,) groups for the access token to be associated with. This is only available for administrators.

| +| `--project` |

[Optional]

The project for which this token is created. Enter the project name on which you want to apply this token.

| +| `--reference` |

[Default: false]

Generate a Reference Token (alias to Access Token) in addition to the full token (available from Artifactory 7.38.10).

| +| `--refreshable` |

[Default: false]

Set to true if you'd like the token to be refreshable. A refresh token will also be returned in order to be used to generate a new token once it expires.

| +| `--scope` |

[Optional]

The scope of access that the token provides. This is only available for administrators.

| ### Examples @@ -57,24 +57,24 @@ The **config add** and **config edit** commands are used to add and edit JFrog P |------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command Name | config add / config edit | | Abbreviation | c add / c edit | -| Command options | | -| --access-token |

[Optional]

Access token.

| -| --artifactory-url |

[Optional]

JFrog Artifactory URL. (example: https://acme.jfrog.io/artifactory)

| -| --basic-auth-only |

[Default: false]

Used for Artifactory authentication. Set to true to disable replacing username and password/API key with automatically created access token that's refreshed hourly. Username and password/API key will still be used with commands which use external tools or the JFrog Distribution service. Can only be passed along with username and password/API key options.

| -| --client-cert-key-path |

[Optional]

Private key file for the client certificate in PEM format.

| -| --client-cert-path |

[Optional]

Client certificate file in PEM format.

| -| --dist-url |

[Optional]

Distribution URL. (example: https://acme.jfrog.io/distribution)

| -| --enc-password |

[Default: true]
If true, the configured password will be encrypted using Artifactory'sencryption API before being stored. If false, the configured password will not be encrypted.

| -| --insecure-tls |

[Default: false]

Set to true to skip TLS certificates verification, while encrypting the Artifactory password during the config process.

| -| --interactive |

[Default: true, unless $CI is true]

Set to false if you do not want the config command to be interactive.

| -| --mission-control-url |

[Optional]

JFrog Mission Control URL. (example: https://acme.jfrog.io/ms)

| -| --password |

[Optional]

JFrog Platform password.

| -| --pipelines-url |

[Optional]

JFrog Pipelines URL. (example: https://acme.jfrog.io/pipelines)

| -| --ssh-key-path |

[Optional]

For authentication with Artifactory. SSH key file path.

| -| --url |

[Optional]

JFrog Platform URL. (example: https://acme.jfrog.io)

| -| --user |

[Optional]

JFrog Platform username.

| -| --xray-url | \[Optional] Xray URL. (example: https://acme.jfrog.io/xray) | -| --overwrite |

[Available for config add only]
[Default: false]
Overwrites the instance configuration if an instance with the same ID already exists.

| +| **Command options:** | | +| `--access-token` |

[Optional]

Access token.

| +| `--artifactory-url` |

[Optional]

JFrog Artifactory URL. (example: https://acme.jfrog.io/artifactory)

| +| `--basic-auth-only` |

[Default: false]

Used for Artifactory authentication. Set to true to disable replacing username and password/API key with automatically created access token that's refreshed hourly. Username and password/API key will still be used with commands which use external tools or the JFrog Distribution service. Can only be passed along with username and password/API key options.

| +| `--client-cert-key-path` |

[Optional]

Private key file for the client certificate in PEM format.

| +| `--client-cert-path` |

[Optional]

Client certificate file in PEM format.

| +| `--dist-url` |

[Optional]

Distribution URL. (example: https://acme.jfrog.io/distribution)

| +| `--enc-password` |

[Default: true]
If true, the configured password will be encrypted using Artifactory's encryption API before being stored. If false, the configured password will not be encrypted.

| +| `--insecure-tls` |

[Default: false]

Set to true to skip TLS certificates verification, while encrypting the Artifactory password during the config process.

| +| `--interactive` |

[Default: true, unless $CI is true]

Set to false if you do not want the config command to be interactive.

| +| `--mission-control-url` |

[Optional]

JFrog Mission Control URL. (example: https://acme.jfrog.io/ms)

| +| `--password` |

[Optional]

JFrog Platform password.

| +| `--pipelines-url` |

[Optional]

JFrog Pipelines URL. (example: https://acme.jfrog.io/pipelines)

| +| `--ssh-key-path` |

[Optional]

For authentication with Artifactory. SSH key file path.

| +| `--url` |

[Optional]

JFrog Platform URL. (example: https://acme.jfrog.io)

| +| `--user` |

[Optional]

JFrog Platform username.

| +| `--xray-url` | \[Optional] Xray URL. (example: https://acme.jfrog.io/xray) | +| `--overwrite` |

[Available for config add only]
[Default: false]
Overwrites the instance configuration if an instance with the same ID already exists.

| | Command arguments | | | server ID | A unique ID for the server configuration. | @@ -86,8 +86,8 @@ The _config remove_ command is used to remove JFrog Platform server configuratio |-------------------|--------------------------------------------------------------------------------------| | Command name | config remove | | Abbreviation | c rm | -| Command options | | -| --quiet |

[Default: $CI]

Set to true to skip the delete confirmation message.

| +| **Command options:** | | +| `--quiet` |

[Default: $CI]

Set to true to skip the delete confirmation message.

| | Command arguments | | | server ID | The server ID to remove. If no argument is sent, all configured servers are removed. | diff --git a/jfrog-applications/jfrog-security-features/sast/ignore-findings.md b/jfrog-applications/jfrog-security-features/sast/ignore-findings.md index 7699a7c..af4b782 100644 --- a/jfrog-applications/jfrog-security-features/sast/ignore-findings.md +++ b/jfrog-applications/jfrog-security-features/sast/ignore-findings.md @@ -2,7 +2,7 @@ #### Ignore a Specific Finding -The SAST scanner allows you to ignore a vulnerability finding simply by placing an `jfrog-ignore` annotation directly in the code. Place the `jfrog-ignore` annotation as a comment above the 'sink' line of the vulnerability (the final line in the data flow). +The SAST scanner allows you to ignore a vulnerability finding simply by placing an `jfrog-ignore` annotation directly in the code. Place the `jfrog-ignore` annotation as a comment above the `sink` line of the vulnerability (the final line in the data flow). The following example shows how to ignore an unsafe-deserialization issue: From ebde21b638f2c095f2f9c963b5ef2dd282be4715 Mon Sep 17 00:00:00 2001 From: Michael Sverdlov Date: Wed, 15 May 2024 17:22:11 +0300 Subject: [PATCH 19/57] Reformat command tables (#127) --- .../build-integration.md | 154 +++---- .../curl-integration.md | 2 +- .../generic-files.md | 406 +++++++++--------- .../cli-for-jfrog-artifactory/git-lfs.md | 2 +- .../managing-configuration-entities.md | 28 +- .../package-managers-integration.md | 28 +- .../release-lifecycle-management.md | 14 +- .../verifying-artifactory-accessibility.md | 2 +- .../jfrog-cli/cli-for-jfrog-distribution.md | 8 +- .../jfrog-cli/cli-for-jfrog-pipelines.md | 8 +- .../curl-integration.md | 2 +- .../scan-published-builds.md | 2 +- .../jfrog-platform-configuration.md | 14 +- 13 files changed, 335 insertions(+), 335 deletions(-) diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/build-integration.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/build-integration.md index 78bbd6d..4db7d4f 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/build-integration.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/build-integration.md @@ -46,15 +46,15 @@ Environment variables are collected using the `build-collect-env` (`bce`) comman The following table lists the command arguments and flags: -| | | -|----------------------|-----------------------------------------| -| Command name | rt build-collect-env | -| Abbreviation | rt bce | -| Command arguments | The command accepts two arguments. | -| Build name | Build name. | -| Build number | Build number. | -| **Command options:** | | -| `--project` |

[Optional]
JFrog project key.

| +| | | +|------------------------|-----------------------------------------| +| Command name | rt build-collect-env | +| Abbreviation | rt bce | +| **Command arguments:** | The command accepts two arguments. | +| Build name | Build name. | +| Build number | Build number. | +| **Command options:** | | +| `--project` |

[Optional]
JFrog project key.

| #### Examples ##### Example 1 @@ -85,18 +85,18 @@ The `build-add-git` (bag) command collects the Git revision and URL from the loc The following table lists the command arguments and flags: -| | | -|----------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command name | rt build-add-git | -| Abbreviation | rt bag | -| Command arguments | The command accepts three arguments. | -| Build name | Build name. | -| Build number | Build number. | -| .git path | Optional - Path to a directory containing the .git directory. If not specific, the .git directory is assumed to be in the current directory or in one of the parent directories. | -| **Command options:** | | -| `--config` |

[Optional]
Path to a yaml configuration file, used for collecting tracked project issues and adding them to the build-info.

| -| `--server-id` |

[Optional]
Server ID configured using the 'jf config' command. This is the server to which the build-info will be later published, using the jf rt build-publish command. This option, if provided, overrides the serverID value in this command's yaml configuration. If both values are not provided, the default server, configured by the 'jf config' command, is used.

| -| `--project` |

[Optional]
JFrog project key.

| +| | | +|------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command name | rt build-add-git | +| Abbreviation | rt bag | +| **Command arguments:** | The command accepts three arguments. | +| Build name | Build name. | +| Build number | Build number. | +| .git path | Optional - Path to a directory containing the .git directory. If not specific, the .git directory is assumed to be in the current directory or in one of the parent directories. | +| **Command options:** | | +| `--config` |

[Optional]
Path to a yaml configuration file, used for collecting tracked project issues and adding them to the build-info.

| +| `--server-id` |

[Optional]
Server ID configured using the 'jf config' command. This is the server to which the build-info will be later published, using the jf rt build-publish command. This option, if provided, overrides the serverID value in this command's yaml configuration. If both values are not provided, the default server, configured by the 'jf config' command, is used.

| +| `--project` |

[Optional]
JFrog project key.

| #### Configuration file properties @@ -151,24 +151,24 @@ By default, the command collects the files from the local file system. If you'd #### Commands Params -| | | -|----------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command name | rt build-add-dependencies | -| Abbreviation | rt bad | -| Command arguments | The command takes three arguments. | -| Build name | The build name to add the dependencies to | -| Build number | The build number to add the dependencies to | -| Pattern | Specifies the local file system path to dependencies which should be added to the build info. You can specify multiple dependencies by using wildcards or a regular expression as designated by the --regexp command option. If you have specified that you are using regular expressions, then the first one used in the argument must be enclosed in parenthesis. | -| **Command options:** |

When using the * or ; characters in the command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| -| `--from-rt` |

[Default: false]
Set to true to search the files in Artifactory, rather than on the local file system. The --regexp option is not supported when --from-rt is set to true.

| -| `--server-id` |

[Optional]
Server ID configured using the 'jf config' command.

| -| `--spec` |

[Optional]
Path to a File Spec.

| -| `--spec-vars` |

[Optional]
List of semicolon-separated(;) variables in the form of "key1=value1;key2=value2;..." to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| -| `--recursive` |

[Default: true]
When false, artifacts inside sub-folders in Artifactory will not be affected.

| -| `--regexp` |

[Optional: false]
[Default: false] Set to true to use a regular expression instead of wildcards expression to collect files to be added to the build info.This option is not supported when --from-rt is set to true.

| -| `--dry-run` |

[Default: false]
Set to true to only get a summery of the dependencies that will be added to the build info.

| -| `--module` |

[Optional]
Optional module name in the build-info for adding the dependency.

| -| `--exclusions` | A list of semicolon-separated(;) exclude patterns. Allows using wildcards or a regular expression according to the value of the `regexp` option. | +| | | +|------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command name | rt build-add-dependencies | +| Abbreviation | rt bad | +| **Command arguments:** | The command takes three arguments. | +| Build name | The build name to add the dependencies to | +| Build number | The build number to add the dependencies to | +| Pattern | Specifies the local file system path to dependencies which should be added to the build info. You can specify multiple dependencies by using wildcards or a regular expression as designated by the --regexp command option. If you have specified that you are using regular expressions, then the first one used in the argument must be enclosed in parenthesis. | +| **Command options:** |

When using the * or ; characters in the command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| +| `--from-rt` |

[Default: false]
Set to true to search the files in Artifactory, rather than on the local file system. The --regexp option is not supported when --from-rt is set to true.

| +| `--server-id` |

[Optional]
Server ID configured using the 'jf config' command.

| +| `--spec` |

[Optional]
Path to a File Spec.

| +| `--spec-vars` |

[Optional]
List of semicolon-separated(;) variables in the form of "key1=value1;key2=value2;..." to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| +| `--recursive` |

[Default: true]
When false, artifacts inside sub-folders in Artifactory will not be affected.

| +| `--regexp` |

[Optional: false]
[Default: false] Set to true to use a regular expression instead of wildcards expression to collect files to be added to the build info.This option is not supported when --from-rt is set to true.

| +| `--dry-run` |

[Default: false]
Set to true to only get a summery of the dependencies that will be added to the build info.

| +| `--module` |

[Optional]
Optional module name in the build-info for adding the dependency.

| +| `--exclusions` | A list of semicolon-separated(;) exclude patterns. Allows using wildcards or a regular expression according to the value of the `regexp` option. | #### Examples ##### Example 1 @@ -207,21 +207,21 @@ For example, the following command publishes all the build-info collected for bu ### Commands Params -| | | -|----------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command name | rt build-publish | -| Abbreviation | rt bp | -| Command arguments | The command accepts two arguments. | -| Build name | Build name to be published. | -| Build number | Build number to be published. | -| **Command options:** | | -| `--server-id` |

[Optional]
Server ID configured using the 'jf config' command. If not specified, the default configured Artifactory server is used.

| -| `--project` |

[Optional]
JFrog project key.

| -| `--build-url` |

[Optional]
Can be used for setting the CI server build URL in the build-info.

| -| `--env-include` |

[Default: *]
List of semicolon-separated(;) patterns in the form of "value1;value2;..." Only environment variables that match those patterns will be included in the build info.

| -| `--env-exclude` |

[Default: *password*;*secret*;*key*]
List of semicolon-separated(;) case insensitive patterns in the form of "value1;value2;..." environment variables match those patterns will be excluded.

| -| `--dry-run` |

[Default: false]
Set to true to disable communication with Artifactory.

| -| `--insecure-tls` |

[Default: false]
Set to true to skip TLS certificates verification.

| | +| | | +|------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command name | rt build-publish | +| Abbreviation | rt bp | +| **Command arguments:** | The command accepts two arguments. | +| Build name | Build name to be published. | +| Build number | Build number to be published. | +| **Command options:** | | +| `--server-id` |

[Optional]
Server ID configured using the 'jf config' command. If not specified, the default configured Artifactory server is used.

| +| `--project` |

[Optional]
JFrog project key.

| +| `--build-url` |

[Optional]
Can be used for setting the CI server build URL in the build-info.

| +| `--env-include` |

[Default: *]
List of semicolon-separated(;) patterns in the form of "value1;value2;..." Only environment variables that match those patterns will be included in the build info.

| +| `--env-exclude` |

[Default: *password*;*secret*;*key*]
List of semicolon-separated(;) case insensitive patterns in the form of "value1;value2;..." environment variables match those patterns will be excluded.

| +| `--dry-run` |

[Default: false]
Set to true to disable communication with Artifactory.

| +| `--insecure-tls` |

[Default: false]
Set to true to skip TLS certificates verification.

| | ### Example @@ -277,7 +277,7 @@ Now, when downloading the artifacts of the "master" build, you'll actually be do |------------------------|-----------------------------------------------------------| | Command name | rt build-append | | Abbreviation | rt ba | -| Command arguments | The command accepts four arguments. | +| **Command arguments:** | The command accepts four arguments. | | Build name | The current (not yet published) build name. | | Build number | The current (not yet published) build number, | | build name to append | The published build name to append to the current build | @@ -327,7 +327,7 @@ This command is used to [promote build](https://jfrog.com/knowledge-base/how-doe |--------------------------|------------------------------------------------------------------------------------------------------------------------------------------------| | Command name | rt build-promote | | Abbreviation | rt bpr | -| Command arguments | The command accepts three arguments. | +| **Command arguments:** | The command accepts three arguments. | | Build name | Build name to be promoted. | | Build number | Build number to be promoted. | | Target repository | Build promotion target repository. | @@ -363,14 +363,14 @@ Build-info is accumulated by the CLI according to the commands you apply until y The following table lists the command arguments and flags: -| | | -|----------------------|------------------------------------| -| Command name | rt build-clean | -| Abbreviation | rt bc | -| Command arguments | The command accepts two arguments. | -| Build name | Build name. | -| Build number | Build number. | -| **Command options:** | The command has no options. | +| | | +|------------------------|------------------------------------| +| Command name | rt build-clean | +| Abbreviation | rt bc | +| **Command arguments:** | The command accepts two arguments. | +| Build name | Build name. | +| Build number | Build number. | +| **Command options:** | The command has no options. | ### Example @@ -393,19 +393,19 @@ This command is used to discard builds previously published to Artifactory using The following table lists the command arguments and flags: -| | | -|----------------------|------------------------------------------------------------------------------------------------------------------------------------------------| -| Command name | rt build-discard | -| Abbreviation | rt bdi | -| Command arguments | The command accepts one argument. | -| Build name | Build name. | -| **Command options:** | | -| `--server-id` |

[Optional]
Server ID configured using the 'jf config' command. If not specified, the default configured Artifactory server is used.

| -| `--max-days` |

[Optional]
The maximum number of days to keep builds in Artifactory.

| -| `--max-builds` |

[Optional]
The maximum number of builds to store in Artifactory.

| -| `--exclude-builds` |

[Optional]
List of comma-separated(,) build numbers in the form of "build1,build2,...", that should not be removed from Artifactory.

| -| `--delete-artifacts` |

[Default: false]
If set to true, automatically removes build artifacts stored in Artifactory.

| -| `--async` |

[Default: false]
If set to true, build discard will run asynchronously and will not wait for response.

| +| | | +|------------------------|------------------------------------------------------------------------------------------------------------------------------------------------| +| Command name | rt build-discard | +| Abbreviation | rt bdi | +| **Command arguments:** | The command accepts one argument. | +| Build name | Build name. | +| **Command options:** | | +| `--server-id` |

[Optional]
Server ID configured using the 'jf config' command. If not specified, the default configured Artifactory server is used.

| +| `--max-days` |

[Optional]
The maximum number of days to keep builds in Artifactory.

| +| `--max-builds` |

[Optional]
The maximum number of builds to store in Artifactory.

| +| `--exclude-builds` |

[Optional]
List of comma-separated(,) build numbers in the form of "build1,build2,...", that should not be removed from Artifactory.

| +| `--delete-artifacts` |

[Default: false]
If set to true, automatically removes build artifacts stored in Artifactory.

| +| `--async` |

[Default: false]
If set to true, build discard will run asynchronously and will not wait for response.

| ### Examples #### Example 1 diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/curl-integration.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/curl-integration.md index 00ee3f5..f255c59 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/curl-integration.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/curl-integration.md @@ -13,7 +13,7 @@ Execute a cUrl command, using the configured Artifactory details. The command ex | Abbreviation | rt cl | | | **Command options:** | | | | `--server-id` |

[Optional]
Server ID configured using the jf c add command. If not specified, the default configured server is used.

| | -| Command arguments | | | +| **Command arguments:** | | | | cUrl arguments and flags |

The same list of arguments and flags passed to cUrl, except for the following changes:

1. The full Artifactory URL should not be passed. Instead, the REST endpoint URI should be sent.
2. The login credentials should not be passed. Instead, the --server-id should be used.

| | Currently only servers configured with username and password / API key are supported. diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/generic-files.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/generic-files.md index 38a5a7c..293a6e9 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/generic-files.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/generic-files.md @@ -11,43 +11,43 @@ This command is used to upload files to Artifactory. ### Commands Params -| | | -|----------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command name | rt upload | -| Abbreviation | rt u | -| Command arguments |

The command takes two arguments, source path and target path.

In case the --spec option is used, the commands accept no arguments.

| -| Source path | The first argument specifies the local file system path to artifacts that should be uploaded to Artifactory. You can specify multiple artifacts by using wildcards or a regular expression as designated by the **--regexp** command option. Please read the **--regexp** option description for more information. | -| Target path |

The second argument specifies the target path in Artifactory in the following format: [repository name]/[repository path]

If the target path ends with a slash, the path is assumed to be a folder. For example, if you specify the target as "repo-name/a/b/", then "b" is assumed to be a folder in Artifactory into which files should be uploaded. If there is no terminal slash, the target path is assumed to be a file to which the uploaded file should be renamed. For example, if you specify the target as "repo-name/a/b", the uploaded file is renamed to "b" in Artifactory.

For flexibility in specifying the upload path, you can include placeholders in the form of {1}, {2} which are replaced by corresponding tokens in the source path that are enclosed in parenthesis. For more details, please refer to Using Placeholders.

| -| **Command options:** |


When using the * or ; characters in the upload command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| -| `--archive` |

[Optional]
Set to "zip" to pack and deploy the files to Artifactory inside a ZIP archive. Currently, the only packaging format supported is zip.

| -| `--server-id` |

[Optional]
Server ID configured using the jf c add command. If not specified, the default configured Artifactory server is used.

| -| `--spec` |

[Optional]
Path to a file spec. For more details, please refer to Using File Specs.

| -| `--spec-vars` |

[Optional]
List of semicolon-separated(;) variables in the form of "key1=value1;key2=value2;..." to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| -| `--build-name` |

[Optional]
Build name. For more details, please refer to Build Integration.

| -| `--build-number` |

[Optional]
Build number. For more details, please refer to Build Integration.

| -| `--project` |

[Optional]
JFrog project key.

| -| `--module` |

[Optional]
Optional module name for the build-info.

| -| `--target-props` |

[Optional]
List of semicolon-separated(;) Artifactory properties specified as "key=value" pairs to be attached to the uploaded files.(for example: "key1=value1;key2=value21,value22;key3=value3".

| -| `--deb` |

[Optional]
Used for Debian packages only. Specifies the distribution/component/architecture of the package. If the the value for distribution, component or architecture include a slash. the slash should be escaped with a back-slash.

| -| `--flat` |

[Default: false]
If true, files are uploaded to the exact target path specified and their hierarchy in the source file system is ignored.

If false, files are uploaded to the target path while maintaining their file system hierarchy.

If Using Placeholders are used, the value of this option is ignored.

Note

JFrog CLI v1

In JFrog CLI v1, the default value of the --flat option is true.

| -| `--recursive` |

[Default: true]
If true, files are also collected from sub-folders of the source directory for upload .

If false, only files specifically in the source directory are uploaded.

| -| `--regexp` |

[Default: false]
If true, the command will interpret the first argument, which describes the local file-system path of artifacts to upload, as a regular expression.

If false, it will interpret the first argument as a wild-card expression.

The above also applies for the --exclusions option.

If you have specified that you are using regular expressions, then the beginning of the expression must be enclosed in parenthesis. For example: a/b/c/(.*)/file.zip

| -| `--ant` |

[Default: false]
If true, the command will interpret the first argument, which describes the local file-system path of artifacts to upload, as an ANT pattern.

If false, it will interpret the first argument as a wildcards expression.

The above also applies for the --exclusions option.

| -| `--threads` |

[Default: 3]
The number of parallel threads that should be used to upload where each thread uploads a single artifact at a time.

| -| `--dry-run` |

[Default: false]
If true, the command only indicates which artifacts would have been uploaded

If false, the command is fully executed and uploads artifacts as specified

| -| `--symlinks` |

[Default: false]
If true, the command will preserve the soft links structure in Artifactory. The symlink file representation will contain the symbolic link and checksum properties.

| -| `--explode` |

[Default: false]
If true, the command will extract an archive containing multiple artifacts after it is deployed to Artifactory, while maintaining the archive's file structure.

| -| `--include-dirs` |

[Default: false]
If true, the source path applies to bottom-chain directories and not only to files. Bottom-chain directories are either empty or do not include other directories that match the source path.

| -| `--exclusions` |

[Optional]
A list of semicolon-separated(;) exclude patterns. Allows using wildcards, regular expressions or ANT patterns, according to the value of the --regexp and --ant options. Please read the --regexp and --ant options description for more information.

| -| `--sync-deletes` |

[Optional]
Specific path in Artifactory, under which to sync artifacts after the upload. After the upload, this path will include only the artifacts uploaded during this upload operation. The other files under this path will be deleted.

| -| `--quiet` |

[Default: false]
If true, the delete confirmation message is skipped.

| -| `--fail-no-op` |

[Default: false]
Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| -| `--retries` |

[Default: 3]
Number of upload retries.

| -| `--retry-wait-time` |

[Default: 0s]
Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds (for example: 10s or 100ms).

| -| `--detailed-summary` |

[Default: false]
Set to true to include a list of the affected files as part of the command output summary.

| -| `--insecure-tls` |

[Default: false]
Set to true to skip TLS certificates verification.

| -| `--min-split` |

[Default: 200]
The minimum file size in MiB required to attempt a multi-part upload. This option, as well as the functionality of multi-part upload, requires Artifactory with S3 storage.

| -| `--split-count` |

[Default: 5]
The maximum number of parts that can be concurrently uploaded per file during a multi-part upload. Set to 0 to disable multi-part upload. This option, as well as the functionality of multi-part upload, requires Artifactory with S3 storage.

| +| | | +|------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command name | rt upload | +| Abbreviation | rt u | +| **Command arguments:** |

The command takes two arguments, source path and target path.

In case the --spec option is used, the commands accept no arguments.

| +| Source path | The first argument specifies the local file system path to artifacts that should be uploaded to Artifactory. You can specify multiple artifacts by using wildcards or a regular expression as designated by the **--regexp** command option. Please read the **--regexp** option description for more information. | +| Target path |

The second argument specifies the target path in Artifactory in the following format: [repository name]/[repository path]

If the target path ends with a slash, the path is assumed to be a folder. For example, if you specify the target as "repo-name/a/b/", then "b" is assumed to be a folder in Artifactory into which files should be uploaded. If there is no terminal slash, the target path is assumed to be a file to which the uploaded file should be renamed. For example, if you specify the target as "repo-name/a/b", the uploaded file is renamed to "b" in Artifactory.

For flexibility in specifying the upload path, you can include placeholders in the form of {1}, {2} which are replaced by corresponding tokens in the source path that are enclosed in parenthesis. For more details, please refer to Using Placeholders.

| +| **Command options:** |


When using the * or ; characters in the upload command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| +| `--archive` |

[Optional]
Set to "zip" to pack and deploy the files to Artifactory inside a ZIP archive. Currently, the only packaging format supported is zip.

| +| `--server-id` |

[Optional]
Server ID configured using the jf c add command. If not specified, the default configured Artifactory server is used.

| +| `--spec` |

[Optional]
Path to a file spec. For more details, please refer to Using File Specs.

| +| `--spec-vars` |

[Optional]
List of semicolon-separated(;) variables in the form of "key1=value1;key2=value2;..." to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| +| `--build-name` |

[Optional]
Build name. For more details, please refer to Build Integration.

| +| `--build-number` |

[Optional]
Build number. For more details, please refer to Build Integration.

| +| `--project` |

[Optional]
JFrog project key.

| +| `--module` |

[Optional]
Optional module name for the build-info.

| +| `--target-props` |

[Optional]
List of semicolon-separated(;) Artifactory properties specified as "key=value" pairs to be attached to the uploaded files.(for example: "key1=value1;key2=value21,value22;key3=value3".

| +| `--deb` |

[Optional]
Used for Debian packages only. Specifies the distribution/component/architecture of the package. If the the value for distribution, component or architecture include a slash. the slash should be escaped with a back-slash.

| +| `--flat` |

[Default: false]
If true, files are uploaded to the exact target path specified and their hierarchy in the source file system is ignored.

If false, files are uploaded to the target path while maintaining their file system hierarchy.

If Using Placeholders are used, the value of this option is ignored.

Note

JFrog CLI v1

In JFrog CLI v1, the default value of the --flat option is true.

| +| `--recursive` |

[Default: true]
If true, files are also collected from sub-folders of the source directory for upload .

If false, only files specifically in the source directory are uploaded.

| +| `--regexp` |

[Default: false]
If true, the command will interpret the first argument, which describes the local file-system path of artifacts to upload, as a regular expression.

If false, it will interpret the first argument as a wild-card expression.

The above also applies for the --exclusions option.

If you have specified that you are using regular expressions, then the beginning of the expression must be enclosed in parenthesis. For example: a/b/c/(.*)/file.zip

| +| `--ant` |

[Default: false]
If true, the command will interpret the first argument, which describes the local file-system path of artifacts to upload, as an ANT pattern.

If false, it will interpret the first argument as a wildcards expression.

The above also applies for the --exclusions option.

| +| `--threads` |

[Default: 3]
The number of parallel threads that should be used to upload where each thread uploads a single artifact at a time.

| +| `--dry-run` |

[Default: false]
If true, the command only indicates which artifacts would have been uploaded

If false, the command is fully executed and uploads artifacts as specified

| +| `--symlinks` |

[Default: false]
If true, the command will preserve the soft links structure in Artifactory. The symlink file representation will contain the symbolic link and checksum properties.

| +| `--explode` |

[Default: false]
If true, the command will extract an archive containing multiple artifacts after it is deployed to Artifactory, while maintaining the archive's file structure.

| +| `--include-dirs` |

[Default: false]
If true, the source path applies to bottom-chain directories and not only to files. Bottom-chain directories are either empty or do not include other directories that match the source path.

| +| `--exclusions` |

[Optional]
A list of semicolon-separated(;) exclude patterns. Allows using wildcards, regular expressions or ANT patterns, according to the value of the --regexp and --ant options. Please read the --regexp and --ant options description for more information.

| +| `--sync-deletes` |

[Optional]
Specific path in Artifactory, under which to sync artifacts after the upload. After the upload, this path will include only the artifacts uploaded during this upload operation. The other files under this path will be deleted.

| +| `--quiet` |

[Default: false]
If true, the delete confirmation message is skipped.

| +| `--fail-no-op` |

[Default: false]
Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| +| `--retries` |

[Default: 3]
Number of upload retries.

| +| `--retry-wait-time` |

[Default: 0s]
Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds (for example: 10s or 100ms).

| +| `--detailed-summary` |

[Default: false]
Set to true to include a list of the affected files as part of the command output summary.

| +| `--insecure-tls` |

[Default: false]
Set to true to skip TLS certificates verification.

| +| `--min-split` |

[Default: 200]
The minimum file size in MiB required to attempt a multi-part upload. This option, as well as the functionality of multi-part upload, requires Artifactory with S3 storage.

| +| `--split-count` |

[Default: 5]
The maximum number of parts that can be concurrently uploaded per file during a multi-part upload. Set to 0 to disable multi-part upload. This option, as well as the functionality of multi-part upload, requires Artifactory with S3 storage.

| ### Examples #### Example 1 @@ -125,7 +125,7 @@ This command is used to download files from Artifactory. |-------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command name | rt download | | Abbreviation | rt dl | -| Command arguments |

The command takes two arguments source path and target path (Optional).

In case the --spec option is used, the commands accept no arguments.

| +| **Command arguments:** |

The command takes two arguments source path and target path (Optional).

In case the --spec option is used, the commands accept no arguments.

| | Source path | Specifies the source path in Artifactory, from which the artifacts should be downloaded. You can use wildcards to specify multiple artifacts. | | Target path |

The second argument is optional and specifies the local file system target path.

If the target path ends with a slash, the path is assumed to be a directory. For example, if you specify the target as "repo-name/a/b/", then "b" is assumed to be a directory into which files should be downloaded. If there is no terminal slash, the target path is assumed to be a file to which the downloaded file should be renamed. For example, if you specify the target as "a/b", the downloaded file is renamed to "b".

For flexibility in specifying the target path, you can include placeholders in the form of {1}, {2} which are replaced by corresponding tokens in the source path that are enclosed in parenthesis. For more details, please refer to Using Placeholders.

| | **Command options:** |

When using the * or ; characters in the download command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| @@ -210,34 +210,34 @@ This command is used to copy files in Artifactory ### Commands Params -| | | -|----------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command name | rt copy | -| Abbreviation | rt cp | -| Command arguments |

The command takes two arguments source path and target path.

In case the --spec option is used, the commands accept no arguments.

| -| Source path | Specifies the source path in Artifactory, from which the artifacts should be copied, in the following format: `[repository name]/[repository path].` You can use wildcards to specify multiple artifacts. | -| Target path |

Specifies the target path in Artifactory, to which the artifacts should be copied, in the following format: [repository name]/[repository path]

By default the Target Path maintains the source path hierarchy, see --flat flag for more info. If the pattern ends with a slash, the target path is assumed to be a folder. For example, if you specify the target as "repo-name/a/b/", then "b" is assumed to be a folder in Artifactory into which files should be copied. If there is no terminal slash, the target path is assumed to be a file to which the copied file should be renamed. For example, if you specify the target as "repo-name/a/b", the copied file is renamed to "b" in Artifactory.

For flexibility in specifying the target path, you can include placeholders in the form of {1}, {2} which are replaced by corresponding tokens in the source path that are enclosed in parenthesis. For more details, please refer to Using Placeholders.

| -| **Command options:** |

When using the * or ; characters in the copy command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| -| `--server-id` |

[Optional]
Server ID configured using the 'jf config' command. If not specified, the default configured Artifactory server is used.

| -| `--spec` |

[Optional]
Path to a file spec. For more details, please refer to Using File Specs.

| -| `--props` |

[Optional]
A list of Artifactory properties specified as semicolon-separated(;) "key=value" pairs. (for example: "key1=value1;key2=value2;key3=value3"). Only artifacts with these properties names and values will be copied.

| -| `--exclude-props` |

[Optional]
A list of Artifactory properties specified as semicolon-separated(;) "key=value" pairs (for example: "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be copied.

| -| `--build` |

[Optional]
If specified, only artifacts of the specified build are matched. The property format is build-name/build-number. If you do not specify the build number, the artifacts are filtered by the latest build number.

| -| `--bundle` |

[Optional]
If specified, only artifacts of the specified bundle are matched. The value format is bundle-name/bundle-version.

| -| `--flat` |

[Default: false]
If true, artifacts are copied to the exact target path specified and their hierarchy in the source path is ignored.

If false, artifacts are copied to the target path while maintaining their source path hierarchy.

| -| `--recursive` |

[Default: true]
If true, artifacts are also copied from sub-paths under the specified source path.

If false, only artifacts in the specified source path directory are copied.

| -| `--dry-run` |

[Default: false]
If true, the command only indicates which artifacts would have been copied.

If false, the command is fully executed and copies artifacts as specified.

| -| `--exclusions` | A list of semicolon-separated(;) exclude patterns. Allows using wildcards. | -| `--threads` |

[Default: 3]
Number of threads used for copying the items.

| -| `--sort-by` |

[Optional]
A list of semicolon-separated(;) fields to sort by. The fields must be part of the `items` AQL domain. For more information read the AQL documentation

| -| `--sort-order` |

[Default: asc]
The order by which fields in the 'sort-by' option should be sorted. Accepts `asc` or `desc`.

| -| `--limit` |

[Optional]
The maximum number of items to fetch. Usually used with the 'sort-by' option.

| -| `--offset` |

[Optional]
The offset from which to fetch items (i.e. how many items should be skipped). Usually used with the 'sort-by' option.

| -| `--fail-no-op` |

[Default: false]
Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| -| `--archive-entries` |

[Optional]
If specified, only archive artifacts containing entries matching this pattern are matched. You can use wildcards to specify multiple artifacts.

| -| `--insecure-tls` |

[Default: false]
Set to true to skip TLS certificates verification.

| -| `--retries` |

[Default: 3]
Number for HTTP retry attempts.

| -| `--retry-wait-time` |

[Default: 0s]
Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds (for example: 10s or 100ms).

| +| | | +|------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command name | rt copy | +| Abbreviation | rt cp | +| **Command arguments:** |

The command takes two arguments source path and target path.

In case the --spec option is used, the commands accept no arguments.

| +| Source path | Specifies the source path in Artifactory, from which the artifacts should be copied, in the following format: `[repository name]/[repository path].` You can use wildcards to specify multiple artifacts. | +| Target path |

Specifies the target path in Artifactory, to which the artifacts should be copied, in the following format: [repository name]/[repository path]

By default the Target Path maintains the source path hierarchy, see --flat flag for more info. If the pattern ends with a slash, the target path is assumed to be a folder. For example, if you specify the target as "repo-name/a/b/", then "b" is assumed to be a folder in Artifactory into which files should be copied. If there is no terminal slash, the target path is assumed to be a file to which the copied file should be renamed. For example, if you specify the target as "repo-name/a/b", the copied file is renamed to "b" in Artifactory.

For flexibility in specifying the target path, you can include placeholders in the form of {1}, {2} which are replaced by corresponding tokens in the source path that are enclosed in parenthesis. For more details, please refer to Using Placeholders.

| +| **Command options:** |

When using the * or ; characters in the copy command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| +| `--server-id` |

[Optional]
Server ID configured using the 'jf config' command. If not specified, the default configured Artifactory server is used.

| +| `--spec` |

[Optional]
Path to a file spec. For more details, please refer to Using File Specs.

| +| `--props` |

[Optional]
A list of Artifactory properties specified as semicolon-separated(;) "key=value" pairs. (for example: "key1=value1;key2=value2;key3=value3"). Only artifacts with these properties names and values will be copied.

| +| `--exclude-props` |

[Optional]
A list of Artifactory properties specified as semicolon-separated(;) "key=value" pairs (for example: "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be copied.

| +| `--build` |

[Optional]
If specified, only artifacts of the specified build are matched. The property format is build-name/build-number. If you do not specify the build number, the artifacts are filtered by the latest build number.

| +| `--bundle` |

[Optional]
If specified, only artifacts of the specified bundle are matched. The value format is bundle-name/bundle-version.

| +| `--flat` |

[Default: false]
If true, artifacts are copied to the exact target path specified and their hierarchy in the source path is ignored.

If false, artifacts are copied to the target path while maintaining their source path hierarchy.

| +| `--recursive` |

[Default: true]
If true, artifacts are also copied from sub-paths under the specified source path.

If false, only artifacts in the specified source path directory are copied.

| +| `--dry-run` |

[Default: false]
If true, the command only indicates which artifacts would have been copied.

If false, the command is fully executed and copies artifacts as specified.

| +| `--exclusions` | A list of semicolon-separated(;) exclude patterns. Allows using wildcards. | +| `--threads` |

[Default: 3]
Number of threads used for copying the items.

| +| `--sort-by` |

[Optional]
A list of semicolon-separated(;) fields to sort by. The fields must be part of the `items` AQL domain. For more information read the AQL documentation

| +| `--sort-order` |

[Default: asc]
The order by which fields in the 'sort-by' option should be sorted. Accepts `asc` or `desc`.

| +| `--limit` |

[Optional]
The maximum number of items to fetch. Usually used with the 'sort-by' option.

| +| `--offset` |

[Optional]
The offset from which to fetch items (i.e. how many items should be skipped). Usually used with the 'sort-by' option.

| +| `--fail-no-op` |

[Default: false]
Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| +| `--archive-entries` |

[Optional]
If specified, only archive artifacts containing entries matching this pattern are matched. You can use wildcards to specify multiple artifacts.

| +| `--insecure-tls` |

[Default: false]
Set to true to skip TLS certificates verification.

| +| `--retries` |

[Default: 3]
Number for HTTP retry attempts.

| +| `--retry-wait-time` |

[Default: 0s]
Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds (for example: 10s or 100ms).

| ### Examples #### Example 1 @@ -282,34 +282,34 @@ This command is used to move files in Artifactory ### Commands Params -| | | -|----------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command name | rt move | -| Abbreviation | rt mv | -| Command arguments |

The command takes two arguments source path and target path.

In case the --spec option is used, the commands accept no arguments.

| -| Source path | Specifies the source path in Artifactory, from which the artifacts should be moved, in the following format: `[repository name]/[repository path].` You can use wildcards to specify multiple artifacts. | -| Target path |

Specifies the target path in Artifactory, to which the artifacts should be moved, in the following format: [repository name]/[repository path]

By default the Target Path maintains the source path hierarchy, see --flat flag for more info. If the pattern ends with a slash, the target path is assumed to be a folder. For example, if you specify the target as "repo-name/a/b/", then "b" is assumed to be a folder in Artifactory into which files should be moved. If there is no terminal slash, the target path is assumed to be a file to which the moved file should be renamed. For example, if you specify the target as "repo-name/a/b", the moved file is renamed to "b" in Artifactory.

For flexibility in specifying the upload path, you can include placeholders in the form of {1}, {2} which are replaced by corresponding tokens in the source path that are enclosed in parenthesis. For more details, please refer to Using Placeholders.

| -| **Command options:** |

When using the * or ; characters in the copy command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| -| `--server-id` |

[Optional]
Server ID configured using the 'jf config' command. If not specified, the default configured Artifactory server is used.

| -| `--spec` |

[Optional]
Path to a file spec. For more details, please refer to Using File Specs.

| -| `--props` |

[Optional]
A list of Artifactory properties specified as semicolon-separated(;) "key=value" pairs (for example: "key1=value1;key2=value2;key3=value3"). Only artifacts with these properties names and values will be moved.

| -| `--exclude-props` |

[Optional]
A list of Artifactory properties specified as semicolon-separated(;) "key=value" pairs (for example: "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be moved.

| -| `--build` |

[Optional]
If specified, only artifacts of the specified build are matched. The property format is build-name/build-number. If you do not specify the build number, the artifacts are filtered by the latest build number.

| -| `--bundle` |

[Optional]
If specified, only artifacts of the specified bundle are matched. The value format is bundle-name/bundle-version.

| -| `--flat` |

[Default: false]
If true, artifacts are moved to the exact target path specified and their hierarchy in the source path is ignored.

If false, artifacts are moved to the target path while maintaining their source path hierarchy.

| -| `--recursive` |

[Default: true]
If true, artifacts are also moved from sub-paths under the specified source path.

If false, only artifacts in the specified source path directory are moved.

| -| `--dry-run` |

[Default: false]
If true, the command only indicates which artifacts would have been moved.

If false, the command is fully executed and downloads artifacts as specified.

| -| `--exclusions` | A list of semicolon-separated(;) exclude patterns. Allows using wildcards. | -| `--threads` |

[Default: 3]
Number of threads used for moving the items.

| -| `--sort-by` |

[Optional]
A list of semicolon-separated(;) fields to sort by. The fields must be part of the `items` AQL domain. For more information read the AQL documentation

| -| `--sort-order` |

[Default: asc]
The order by which fields in the 'sort-by' option should be sorted. Accepts `asc` or `desc`.

| -| `--limit` |

[Optional]
The maximum number of items to fetch. Usually used with the 'sort-by' option.

| -| `--offset` |

[Optional]
The offset from which to fetch items (i.e. how many items should be skipped). Usually used with the 'sort-by' option.

| -| `--fail-no-op` |

[Default: false]
Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| -| `--archive-entries` |

[Optional]
If specified, only archive artifacts containing entries matching this pattern are matched. You can use wildcards to specify multiple artifacts.

| -| `--insecure-tls` |

[Default: false]
Set to true to skip TLS certificates verification.

| -| `--retries` |

[Default: 3]
Number of HTTP retry attempts.

| -| `--retry-wait-time` |

[Default: 0s]
Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds (for example: 10s or 100ms).

| +| | | +|------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command name | rt move | +| Abbreviation | rt mv | +| **Command arguments:** |

The command takes two arguments source path and target path.

In case the --spec option is used, the commands accept no arguments.

| +| Source path | Specifies the source path in Artifactory, from which the artifacts should be moved, in the following format: `[repository name]/[repository path].` You can use wildcards to specify multiple artifacts. | +| Target path |

Specifies the target path in Artifactory, to which the artifacts should be moved, in the following format: [repository name]/[repository path]

By default the Target Path maintains the source path hierarchy, see --flat flag for more info. If the pattern ends with a slash, the target path is assumed to be a folder. For example, if you specify the target as "repo-name/a/b/", then "b" is assumed to be a folder in Artifactory into which files should be moved. If there is no terminal slash, the target path is assumed to be a file to which the moved file should be renamed. For example, if you specify the target as "repo-name/a/b", the moved file is renamed to "b" in Artifactory.

For flexibility in specifying the upload path, you can include placeholders in the form of {1}, {2} which are replaced by corresponding tokens in the source path that are enclosed in parenthesis. For more details, please refer to Using Placeholders.

| +| **Command options:** |

When using the * or ; characters in the copy command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| +| `--server-id` |

[Optional]
Server ID configured using the 'jf config' command. If not specified, the default configured Artifactory server is used.

| +| `--spec` |

[Optional]
Path to a file spec. For more details, please refer to Using File Specs.

| +| `--props` |

[Optional]
A list of Artifactory properties specified as semicolon-separated(;) "key=value" pairs (for example: "key1=value1;key2=value2;key3=value3"). Only artifacts with these properties names and values will be moved.

| +| `--exclude-props` |

[Optional]
A list of Artifactory properties specified as semicolon-separated(;) "key=value" pairs (for example: "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be moved.

| +| `--build` |

[Optional]
If specified, only artifacts of the specified build are matched. The property format is build-name/build-number. If you do not specify the build number, the artifacts are filtered by the latest build number.

| +| `--bundle` |

[Optional]
If specified, only artifacts of the specified bundle are matched. The value format is bundle-name/bundle-version.

| +| `--flat` |

[Default: false]
If true, artifacts are moved to the exact target path specified and their hierarchy in the source path is ignored.

If false, artifacts are moved to the target path while maintaining their source path hierarchy.

| +| `--recursive` |

[Default: true]
If true, artifacts are also moved from sub-paths under the specified source path.

If false, only artifacts in the specified source path directory are moved.

| +| `--dry-run` |

[Default: false]
If true, the command only indicates which artifacts would have been moved.

If false, the command is fully executed and downloads artifacts as specified.

| +| `--exclusions` | A list of semicolon-separated(;) exclude patterns. Allows using wildcards. | +| `--threads` |

[Default: 3]
Number of threads used for moving the items.

| +| `--sort-by` |

[Optional]
A list of semicolon-separated(;) fields to sort by. The fields must be part of the `items` AQL domain. For more information read the AQL documentation

| +| `--sort-order` |

[Default: asc]
The order by which fields in the 'sort-by' option should be sorted. Accepts `asc` or `desc`.

| +| `--limit` |

[Optional]
The maximum number of items to fetch. Usually used with the 'sort-by' option.

| +| `--offset` |

[Optional]
The offset from which to fetch items (i.e. how many items should be skipped). Usually used with the 'sort-by' option.

| +| `--fail-no-op` |

[Default: false]
Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| +| `--archive-entries` |

[Optional]
If specified, only archive artifacts containing entries matching this pattern are matched. You can use wildcards to specify multiple artifacts.

| +| `--insecure-tls` |

[Default: false]
Set to true to skip TLS certificates verification.

| +| `--retries` |

[Default: 3]
Number of HTTP retry attempts.

| +| `--retry-wait-time` |

[Default: 0s]
Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds (for example: 10s or 100ms).

| ### Examples #### Example 1 @@ -354,33 +354,33 @@ This command is used to delete files in Artifactory ### Commands Params -| | | -|----------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command name | rt delete | -| Abbreviation | rt del | -| Command arguments |

The command takes one argument which is the delete path.

In case the --spec option is used, the commands accept no arguments.

| -| Delete path | Specifies the path in Artifactory of the files that should be deleted in the following format: `[repository name]/[repository path].` You can use wildcards to specify multiple artifacts. | -| **Command options:** |

When using the * or ; characters in the delete command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| -| `--server-id` |

[Optional]
Server ID configured using the 'jf config' command. If not specified, the default configured Artifactory server is used.

| -| `--spec` |

[Optional]
Path to a file spec. For more details, please refer to Using File Specs.

| -| `--props` |

[Optional]
A list of Artifactory properties specified as semicolon-separated(;) "key=value" pairs (for example: "key1=value1;key2=value2;key3=value3"). Only artifacts with these properties names and values will be deleted.

| -| `--exclude-props` |

[Optional]
A list of Artifactory properties specified as semicolon-separated(;) "key=value" pairs (for example: "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be deleted.

| -| `--build` |

[Optional]
If specified, only artifacts of the specified build are matched. The property format is build-name/build-number. If you do not specify the build number, the artifacts are filtered by the latest build number.

| -| `--bundle` |

[Optional]
If specified, only artifacts of the specified bundle are matched. The value format is bundle-name/bundle-version.

| -| `--recursive` |

[Default: true]
If true, artifacts are also deleted from sub-paths under the specified path.

| -| `--quiet` |

[Default: false]
If true, the delete confirmation message is skipped.

| -| `--dry-run` |

[Default: false]
If true, the command only indicates which artifacts would have been deleted.

If false, the command is fully executed and deletes artifacts as specified.

| -| `--exclusions` | A list of semicolon-separated(;) exclude patterns. Allows using wildcards. | -| `--sort-by` |

[Optional]
A list of semicolon-separated(;) fields to sort by. The fields must be part of the `items` AQL domain. For more information read the AQL documentation

| -| `--sort-order` |

[Default: asc]
The order by which fields in the 'sort-by' option should be sorted. Accepts `asc` or `desc`.

| -| `--limit` |

[Optional]
The maximum number of items to fetch. Usually used with the 'sort-by' option.

| -| `--offset` |

[Optional]
The offset from which to fetch items (i.e. how many items should be skipped). Usually used with the 'sort-by' option.

| -| `--fail-no-op` |

[Default: false]
Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| -| `--archive-entries` |

[Optional]
If specified, only archive artifacts containing entries matching this pattern are matched. You can use wildcards to specify multiple artifacts.

| -| `--threads` |

[Default: 3]
Number of threads used for deleting the items.

| -| `--insecure-tls` |

[Default: false]
Set to true to skip TLS certificates verification.

| -| `--retries` |

[Default: 3]
Number of HTTP retry attempts.

| -| `--retry-wait-time` |

[Default: 0s]
Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds (for example: 10s or 100ms).

| +| | | +|------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command name | rt delete | +| Abbreviation | rt del | +| **Command arguments:** |

The command takes one argument which is the delete path.

In case the --spec option is used, the commands accept no arguments.

| +| Delete path | Specifies the path in Artifactory of the files that should be deleted in the following format: `[repository name]/[repository path].` You can use wildcards to specify multiple artifacts. | +| **Command options:** |

When using the * or ; characters in the delete command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| +| `--server-id` |

[Optional]
Server ID configured using the 'jf config' command. If not specified, the default configured Artifactory server is used.

| +| `--spec` |

[Optional]
Path to a file spec. For more details, please refer to Using File Specs.

| +| `--props` |

[Optional]
A list of Artifactory properties specified as semicolon-separated(;) "key=value" pairs (for example: "key1=value1;key2=value2;key3=value3"). Only artifacts with these properties names and values will be deleted.

| +| `--exclude-props` |

[Optional]
A list of Artifactory properties specified as semicolon-separated(;) "key=value" pairs (for example: "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be deleted.

| +| `--build` |

[Optional]
If specified, only artifacts of the specified build are matched. The property format is build-name/build-number. If you do not specify the build number, the artifacts are filtered by the latest build number.

| +| `--bundle` |

[Optional]
If specified, only artifacts of the specified bundle are matched. The value format is bundle-name/bundle-version.

| +| `--recursive` |

[Default: true]
If true, artifacts are also deleted from sub-paths under the specified path.

| +| `--quiet` |

[Default: false]
If true, the delete confirmation message is skipped.

| +| `--dry-run` |

[Default: false]
If true, the command only indicates which artifacts would have been deleted.

If false, the command is fully executed and deletes artifacts as specified.

| +| `--exclusions` | A list of semicolon-separated(;) exclude patterns. Allows using wildcards. | +| `--sort-by` |

[Optional]
A list of semicolon-separated(;) fields to sort by. The fields must be part of the `items` AQL domain. For more information read the AQL documentation

| +| `--sort-order` |

[Default: asc]
The order by which fields in the 'sort-by' option should be sorted. Accepts `asc` or `desc`.

| +| `--limit` |

[Optional]
The maximum number of items to fetch. Usually used with the 'sort-by' option.

| +| `--offset` |

[Optional]
The offset from which to fetch items (i.e. how many items should be skipped). Usually used with the 'sort-by' option.

| +| `--fail-no-op` |

[Default: false]
Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| +| `--archive-entries` |

[Optional]
If specified, only archive artifacts containing entries matching this pattern are matched. You can use wildcards to specify multiple artifacts.

| +| `--threads` |

[Default: 3]
Number of threads used for deleting the items.

| +| `--insecure-tls` |

[Default: false]
Set to true to skip TLS certificates verification.

| +| `--retries` |

[Default: 3]
Number of HTTP retry attempts.

| +| `--retry-wait-time` |

[Default: 0s]
Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds (for example: 10s or 100ms).

| ### Examples @@ -412,35 +412,35 @@ This command is used to search and display files in Artifactory. ### Commands Params -| | | -|----------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command name | rt search | -| Abbreviation | rt s | -| Command arguments |

The command takes one argument which is the search path.

In case the --spec option is used, the commands accept no arguments.

| -| Search path | Specifies the search path in Artifactory, in the following format: `[repository name]/[repository path].` You can use wildcards to specify multiple artifacts. | -| **Command options:** |

When using the * or ; characters in the command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| -| `--server-id` |

[Optional]
Server ID configured using the 'jf config' command. If not specified, the default configured Artifactory server is used.

| -| `--spec` |

[Optional]
Path to a file spec. For more details, please refer to Using File Specs.

| -| `--count` |

[Optional]
Set to true to display only the total of files or folders found.

| -| `--include-dirs` |

[Default: false]
Set to true if you'd like to also apply the source path pattern for directories and not only for files

| -| `--spec-vars` |

[Optional]
List of semicolon-separated(;) variables in the form of "key1=value1;key2=value2;..." to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| -| `--props` |

[Optional]
A list of Artifactory properties specified as semicolon-separated(;) "key=value" pairs (for example: "key1=value1;key2=value2;key3=value3"). Only artifacts with these properties names and values will be returned.

| -| `--exclude-props` |

[Optional]
A list of Artifactory properties specified as semicolon-separated(;) "key=value" pairs (for example: "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be returned.

| -| `--build` |

[Optional]
If specified, only artifacts of the specified build are matched. The property format is build-name/build-number. If you do not specify the build number, the artifacts are filtered by the latest build number.

| -| `--bundle` |

[Optional]
If specified, only artifacts of the specified bundle are matched. The value format is bundle-name/bundle-version.

| -| `--recursive` |

[Default: true]
Set to false if you do not wish to search artifacts inside sub-folders in Artifactory.

| -| `--exclusions` | A list of semicolon-separated(;) exclude patterns. Allows using wildcards. | -| `--sort-by` |

[Optional]
A list of semicolon-separated(;) fields to sort by. The fields must be part of the `items` AQL domain. For more information read the AQL documentation

| -| `--sort-order` |

[Default: asc]
The order by which fields in the 'sort-by' option should be sorted. Accepts `asc` or `desc`.

| -| `--transitive` |

[Optional]
Set to true to look for artifacts also in remote repositories. Available on Artifactory version 7.17.0 or higher.

| -| `--limit` |

[Optional]
The maximum number of items to fetch. Usually used with the 'sort-by' option.

| -| `--offset` |

[Optional]
The offset from which to fetch items (i.e. how many items should be skipped). Usually used with the 'sort-by' option.

| -| `--fail-no-op` |

[Default: false]
Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| -| `--archive-entries` |

[Optional]
If specified, only archive artifacts containing entries matching this pattern are matched. You can use wildcards to specify multiple artifacts.

| -| `--insecure-tls` |

[Default: false]
Set to true to skip TLS certificates verification.

| -| `--retries` |

[Default: 3]
Number of HTTP retry attempts.

| -| `--retry-wait-time` |

[Default: 0s]
Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds (for example: 10s or 100ms).

| -| `--include` |

[Optional]
List of semicolon-separated(;) fields in the form of "value1;value2;...".
Only the path and the fields that are specified will be returned. The fields must be part of the `items` AQL domain. for the full supported items list check AQL documentation

| +| | | +|------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command name | rt search | +| Abbreviation | rt s | +| **Command arguments:** |

The command takes one argument which is the search path.

In case the --spec option is used, the commands accept no arguments.

| +| Search path | Specifies the search path in Artifactory, in the following format: `[repository name]/[repository path].` You can use wildcards to specify multiple artifacts. | +| **Command options:** |

When using the * or ; characters in the command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| +| `--server-id` |

[Optional]
Server ID configured using the 'jf config' command. If not specified, the default configured Artifactory server is used.

| +| `--spec` |

[Optional]
Path to a file spec. For more details, please refer to Using File Specs.

| +| `--count` |

[Optional]
Set to true to display only the total of files or folders found.

| +| `--include-dirs` |

[Default: false]
Set to true if you'd like to also apply the source path pattern for directories and not only for files

| +| `--spec-vars` |

[Optional]
List of semicolon-separated(;) variables in the form of "key1=value1;key2=value2;..." to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| +| `--props` |

[Optional]
A list of Artifactory properties specified as semicolon-separated(;) "key=value" pairs (for example: "key1=value1;key2=value2;key3=value3"). Only artifacts with these properties names and values will be returned.

| +| `--exclude-props` |

[Optional]
A list of Artifactory properties specified as semicolon-separated(;) "key=value" pairs (for example: "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be returned.

| +| `--build` |

[Optional]
If specified, only artifacts of the specified build are matched. The property format is build-name/build-number. If you do not specify the build number, the artifacts are filtered by the latest build number.

| +| `--bundle` |

[Optional]
If specified, only artifacts of the specified bundle are matched. The value format is bundle-name/bundle-version.

| +| `--recursive` |

[Default: true]
Set to false if you do not wish to search artifacts inside sub-folders in Artifactory.

| +| `--exclusions` | A list of semicolon-separated(;) exclude patterns. Allows using wildcards. | +| `--sort-by` |

[Optional]
A list of semicolon-separated(;) fields to sort by. The fields must be part of the `items` AQL domain. For more information read the AQL documentation

| +| `--sort-order` |

[Default: asc]
The order by which fields in the 'sort-by' option should be sorted. Accepts `asc` or `desc`.

| +| `--transitive` |

[Optional]
Set to true to look for artifacts also in remote repositories. Available on Artifactory version 7.17.0 or higher.

| +| `--limit` |

[Optional]
The maximum number of items to fetch. Usually used with the 'sort-by' option.

| +| `--offset` |

[Optional]
The offset from which to fetch items (i.e. how many items should be skipped). Usually used with the 'sort-by' option.

| +| `--fail-no-op` |

[Default: false]
Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| +| `--archive-entries` |

[Optional]
If specified, only archive artifacts containing entries matching this pattern are matched. You can use wildcards to specify multiple artifacts.

| +| `--insecure-tls` |

[Default: false]
Set to true to skip TLS certificates verification.

| +| `--retries` |

[Default: 3]
Number of HTTP retry attempts.

| +| `--retry-wait-time` |

[Default: 0s]
Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds (for example: 10s or 100ms).

| +| `--include` |

[Optional]
List of semicolon-separated(;) fields in the form of "value1;value2;...".
Only the path and the fields that are specified will be returned. The fields must be part of the `items` AQL domain. for the full supported items list check AQL documentation

| ### Examples #### Example 1 @@ -478,34 +478,34 @@ This command is used for setting properties on existing files in Artifactory. ### Commands Params -| | | -|----------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command name | rt set-props | -| Abbreviation | rt sp | -| Command arguments |

The command takes two arguments, files pattern and files properties.

In case the --spec option is used, the commands accept no arguments.

| -| Files pattern | Files that match the pattern will be set with the specified properties. | -| Files properties | A list of semicolon-separated(;) key-values in the form of key1=value1;key2=value2,..., to be set on the matching files. | -| **Command options:** |

When using the * or ; characters in the command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| -| `--server-id` |

[Optional]
Server ID configured using the 'jf config' command. If not specified, the default configured Artifactory server is used.

| -| `--spec` |

[Optional]
Path to a file spec. For more details, please refer to Using File Specs.

| -| `--spec-vars` |

[Optional]
List of semicolon-separated(;) variables in the form of "key1=value1;key2=value2;..." to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| -| `--props` |

[Optional]
List of semicolon-separated(;) properties in the form of "key1=value1;key2=value2,...". Only files with these properties names and values are affected.

| -| `--exclude-props` |

[Optional]
A list of Artifactory properties specified as semicolon-separated(;) "key=value" pairs (for example: "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be affected.

| -| `--recursive` |

[Default: true]
When false, artifacts inside sub-folders in Artifactory will not be affected.

| -| `--build` |

[Optional]
If specified, only artifacts of the specified build are matched. The property format is build-name/build-number. If you do not specify the build number, the artifacts are filtered by the latest build number.

| -| `--bundle` | \[Optional] If specified, only artifacts of the specified bundle are matched. The value format is bundle-name/bundle-version. | -| `--include-dirs` |

[Default: false]
When true, the properties will also be set on folders (and not just files) in Artifactory.

| -| `--fail-no-op` |

[Default: false]
Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| -| `--exclusions` | A list of semicolon-separated(;) exclude patterns. Allows using wildcards. | -| `--sort-by` |

[Optional]
A list of semicolon-separated(;) fields to sort by. The fields must be part of the `items` AQL domain. For more information read the AQL documentation

| -| `--sort-order` |

[Default: asc]
The order by which fields in the 'sort-by' option should be sorted. Accepts `asc` or `desc`.

| -| `--limit` |

[Optional]
The maximum number of items to fetch. Usually used with the 'sort-by' option.

| -| `--offset` |

[Optional]
The offset from which to fetch items (i.e. how many items should be skipped). Usually used with the 'sort-by' option.

| -| `--archive-entries` |

[Optional]
If specified, only archive artifacts containing entries matching this pattern are matched. You can use wildcards to specify multiple artifacts.

| -| `--insecure-tls` |

[Default: false]
Set to true to skip TLS certificates verification.

| -| `--threads` |

[Default: 3]
Number of working threads.

| -| `--retries` |

[Default: 3]
Number of HTTP retry attempts.

| -| `--retry-wait-time` |

[Default: 0s]
Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds (for example: 10s or 100ms).

| +| | | +|------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command name | rt set-props | +| Abbreviation | rt sp | +| **Command arguments:** |

The command takes two arguments, files pattern and files properties.

In case the --spec option is used, the commands accept no arguments.

| +| Files pattern | Files that match the pattern will be set with the specified properties. | +| Files properties | A list of semicolon-separated(;) key-values in the form of key1=value1;key2=value2,..., to be set on the matching files. | +| **Command options:** |

When using the * or ; characters in the command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| +| `--server-id` |

[Optional]
Server ID configured using the 'jf config' command. If not specified, the default configured Artifactory server is used.

| +| `--spec` |

[Optional]
Path to a file spec. For more details, please refer to Using File Specs.

| +| `--spec-vars` |

[Optional]
List of semicolon-separated(;) variables in the form of "key1=value1;key2=value2;..." to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.

| +| `--props` |

[Optional]
List of semicolon-separated(;) properties in the form of "key1=value1;key2=value2,...". Only files with these properties names and values are affected.

| +| `--exclude-props` |

[Optional]
A list of Artifactory properties specified as semicolon-separated(;) "key=value" pairs (for example: "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be affected.

| +| `--recursive` |

[Default: true]
When false, artifacts inside sub-folders in Artifactory will not be affected.

| +| `--build` |

[Optional]
If specified, only artifacts of the specified build are matched. The property format is build-name/build-number. If you do not specify the build number, the artifacts are filtered by the latest build number.

| +| `--bundle` | \[Optional] If specified, only artifacts of the specified bundle are matched. The value format is bundle-name/bundle-version. | +| `--include-dirs` |

[Default: false]
When true, the properties will also be set on folders (and not just files) in Artifactory.

| +| `--fail-no-op` |

[Default: false]
Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| +| `--exclusions` | A list of semicolon-separated(;) exclude patterns. Allows using wildcards. | +| `--sort-by` |

[Optional]
A list of semicolon-separated(;) fields to sort by. The fields must be part of the `items` AQL domain. For more information read the AQL documentation

| +| `--sort-order` |

[Default: asc]
The order by which fields in the 'sort-by' option should be sorted. Accepts `asc` or `desc`.

| +| `--limit` |

[Optional]
The maximum number of items to fetch. Usually used with the 'sort-by' option.

| +| `--offset` |

[Optional]
The offset from which to fetch items (i.e. how many items should be skipped). Usually used with the 'sort-by' option.

| +| `--archive-entries` |

[Optional]
If specified, only archive artifacts containing entries matching this pattern are matched. You can use wildcards to specify multiple artifacts.

| +| `--insecure-tls` |

[Default: false]
Set to true to skip TLS certificates verification.

| +| `--threads` |

[Default: 3]
Number of working threads.

| +| `--retries` |

[Default: 3]
Number of HTTP retry attempts.

| +| `--retry-wait-time` |

[Default: 0s]
Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds (for example: 10s or 100ms).

| ### Examples #### Example 1 @@ -559,31 +559,31 @@ This command is used for deleting properties from existing files in Artifactory. ### Commands Params -| | | -|----------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command name | rt delete-props | -| Abbreviation | rt delp | -| Command arguments |

The command takes two arguments, files pattern and properties list.

In case the --spec option is used, the commands accept no arguments.

| -| Files pattern | Specifies the files pattern in the following format: `[repository name]/[repository path].` You can use wildcards to specify multiple repositories and files. | -| Properties list | A comma-separated(,) list of properties, in the form of key1,key2,..., to be deleted from the matching files. | -| **Command options:** |

When using the * or ; characters in the command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| -| `--server-id` |

[Optional]
Artifactory Server ID configured using the 'jf config' command. If not specified, the default configured Artifactory server is used.

| -| `--props` |

[Optional]
List of semicolon-separated(;) properties in the form of "key1=value1;key2=value2,...". Only files with these properties are affected.

| -| `--exclude-props` |

[Optional]
List of semicolon-separated(;) Artifactory properties specified as "key=value" (for example: "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be affected.

| -| `--recursive` |

[Default: true]
When false, artifacts inside sub-folders in Artifactory will not be affected.

| -| `--build` |

[Optional]
If specified, only artifacts of the specified build are matched. The property format is build-name/build-number. If you do not specify the build number, the artifacts are filtered by the latest build number.

| -| `--bundle` |

[Optional]
If specified, only artifacts of the specified bundle are matched. The value format is bundle-name/bundle-version.

| -| `--include-dirs` |

[Default: false]
When true, the properties will also be set on folders (and not just files) in Artifactory.

| -| `--fail-no-op` |

[Default: false]
Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| -| `--exclusions` | List of semicolon-separated(;) exclude patterns. Allows using wildcards. | -| `--sort-by` |

[Optional]
A list of semicolon-separated(;) fields to sort by. The fields must be part of the `items` AQL domain. For more information read the AQL documentation

| -| `--sort-order` |

[Default: asc]
The order by which fields in the 'sort-by' option should be sorted. Accepts `asc` or `desc`.

| -| `--limit` |

[Optional]
The maximum number of items to fetch. Usually used with the 'sort-by' option.

| -| `--offset` |

[Optional]
The offset from which to fetch items (i.e. how many items should be skipped). Usually used with the 'sort-by' option.

| -| `--archive-entries` |

[Optional]
If specified, only archive artifacts containing entries matching this pattern are matched. You can use wildcards to specify multiple artifacts.

| -| `--insecure-tls` |

[Default: false]
Set to true to skip TLS certificates verification.

| -| `--retries` |

[Default: 3]
Number of HTTP retry attempts.

| -| `--retry-wait-time` |

[Default: 0s]
Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds (for example: 10s or 100ms).

| +| | | +|------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command name | rt delete-props | +| Abbreviation | rt delp | +| **Command arguments:** |

The command takes two arguments, files pattern and properties list.

In case the --spec option is used, the commands accept no arguments.

| +| Files pattern | Specifies the files pattern in the following format: `[repository name]/[repository path].` You can use wildcards to specify multiple repositories and files. | +| Properties list | A comma-separated(,) list of properties, in the form of key1,key2,..., to be deleted from the matching files. | +| **Command options:** |

When using the * or ; characters in the command options or arguments, make sure to wrap the whole options or arguments string in quotes (") to make sure the * or ; characters are not interpreted as literals.

| +| `--server-id` |

[Optional]
Artifactory Server ID configured using the 'jf config' command. If not specified, the default configured Artifactory server is used.

| +| `--props` |

[Optional]
List of semicolon-separated(;) properties in the form of "key1=value1;key2=value2,...". Only files with these properties are affected.

| +| `--exclude-props` |

[Optional]
List of semicolon-separated(;) Artifactory properties specified as "key=value" (for example: "key1=value1;key2=value2;key3=value3"). Only artifacts without all of the specified properties names and values will be affected.

| +| `--recursive` |

[Default: true]
When false, artifacts inside sub-folders in Artifactory will not be affected.

| +| `--build` |

[Optional]
If specified, only artifacts of the specified build are matched. The property format is build-name/build-number. If you do not specify the build number, the artifacts are filtered by the latest build number.

| +| `--bundle` |

[Optional]
If specified, only artifacts of the specified bundle are matched. The value format is bundle-name/bundle-version.

| +| `--include-dirs` |

[Default: false]
When true, the properties will also be set on folders (and not just files) in Artifactory.

| +| `--fail-no-op` |

[Default: false]
Set to true if you'd like the command to return exit code 2 in case of no files are affected.

| +| `--exclusions` | List of semicolon-separated(;) exclude patterns. Allows using wildcards. | +| `--sort-by` |

[Optional]
A list of semicolon-separated(;) fields to sort by. The fields must be part of the `items` AQL domain. For more information read the AQL documentation

| +| `--sort-order` |

[Default: asc]
The order by which fields in the 'sort-by' option should be sorted. Accepts `asc` or `desc`.

| +| `--limit` |

[Optional]
The maximum number of items to fetch. Usually used with the 'sort-by' option.

| +| `--offset` |

[Optional]
The offset from which to fetch items (i.e. how many items should be skipped). Usually used with the 'sort-by' option.

| +| `--archive-entries` |

[Optional]
If specified, only archive artifacts containing entries matching this pattern are matched. You can use wildcards to specify multiple artifacts.

| +| `--insecure-tls` |

[Default: false]
Set to true to skip TLS certificates verification.

| +| `--retries` |

[Default: 3]
Number of HTTP retry attempts.

| +| `--retry-wait-time` |

[Default: 0s]
Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds (for example: 10s or 100ms).

| ### Examples diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/git-lfs.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/git-lfs.md index d2663f8..cbeb9de 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/git-lfs.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/git-lfs.md @@ -14,7 +14,7 @@ This command is used to clean up files from a Git LFS repository. This deletes a | `--repo` | \[Optional] Local Git LFS repository in Artifactory which should be cleaned. If omitted, the repository is detected from the Git repository. | | `--quiet` | \[Default: false] Set to true to skip the delete confirmation message. | | `--dry-run` | \[Default: false] If true, cleanup is only simulated. No files are actually deleted. | -| Command arguments | If no arguments are passed in, the command assumes the .git repository is located at current directory. | +| **Command arguments:** | If no arguments are passed in, the command assumes the .git repository is located at current directory. | | path to .git | Path to the directory which includes the .git directory. | ## Examples diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/managing-configuration-entities.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/managing-configuration-entities.md index 9cfd5ac..9376772 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/managing-configuration-entities.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/managing-configuration-entities.md @@ -28,7 +28,7 @@ The CSV can include additional columns, with different headers, which will be ig | `--csv` |

[Mandatory]
Path to a CSV file with the users' details. The first row of the file should include the name,password,email headers.

| | `--replace` |

[Optional]
Set to true if you'd like existing users or groups to be replaced.

| | `--users-groups` |

[Optional]
A list of comma-separated(,) groups for the new users to be associated to.

| -| Command arguments | The command accepts no arguments | +| **Command arguments:** | The command accepts no arguments | ### Example @@ -62,7 +62,7 @@ The CSV can include additional columns, with different headers, which will be ig | **Command options:** | | | `--server-id` |

[Optional]
Artifactory Server ID configured using the 'jf config' command.

| | `--csv` |

[Optional]
Path to a csv file with the usernames to delete. The first row of the file is the reserved for the cells' headers. It must include the "username" header.

| -| Command arguments | | +| **Command arguments:** | | | users list | comma-separated(,) list of usernames to delete. If the --csv command option is used, then this argument becomes optional. | ### Examples @@ -94,7 +94,7 @@ This command creates a new users group. | Abbreviation | rt gc | | **Command options:** | | | `--server-id` |

[Optional]
Artifactory Server ID configured using the 'jf config' command.

| -| Command arguments | | +| **Command arguments:** | | | group name | The name of the group to create. | ### Example @@ -117,7 +117,7 @@ This command adds a list fo existing users to a group. | Abbreviation | rt gau | | **Command options:** | | | `--server-id` |

[Optional]
Artifactory Server ID configured using the 'jf config' command.

| -| Command arguments | | +| **Command arguments:** | | | group name | The name of the group to add users to. | | users list | Comma-seperated list of usernames to add to the specified group. | @@ -141,7 +141,7 @@ This command deletes a group. | Abbreviation | rt gdel | | **Command options:** | | | `--server-id` |

[Optional]
Artifactory Server ID configured using the 'jf config' command.

| -| Command arguments | | +| **Command arguments:** | | | group name | The name of the group to delete. | ### Example @@ -169,7 +169,7 @@ When using this command to create the template, you can also provide replaceable | Command-name | rt repo-template | | Abbreviation | rt rpt | | **Command options:** | The command has no options. | -| Command arguments | | +| **Command arguments:** | | | template path | Specifies the local file system path for the template file created by the command. The file should not exist. | #### Example @@ -205,7 +205,7 @@ These two commands create a new repository and updates an existing a repository. | **Command options:** | | | `--server-id` |

[Optional]
Artifactory Server ID configured using the 'jf config' command.

| | `--vars` |

[Optional]
List of semicolon-separated(;) variables in the form of "key1=value1;key2=value2;..." to be replaced in the template. In the template, the variables should be used as follows: ${key1}.

| -| Command arguments | | +| **Command arguments:** | | | template path | Specifies the local file system path for the template file to be used for the repository creation. The template can be created using the "jf rt rpt" command. | #### Examples @@ -246,7 +246,7 @@ This command permanently deletes a repository, including all of its content. | **Command options:** | | | `--server-id` |

[Optional]
Artifactory Server ID configured using the 'jf config' command.

| | `--quiet` |

[Default: $CI]
Set to true to skip the delete confirmation message.

| -| Command arguments | | +| **Command arguments:** | | | repository key | Specifies the repositories that should be removed. You can use wildcards to specify multiple repositories. | #### Example @@ -274,7 +274,7 @@ When using this command to create the template, you can also provide replaceable | Command-name | rt replication-template | | Abbreviation | rt rplt | | **Command options:** | The command has no options. | -| Command arguments | | +| **Command arguments:** | | | template path | Specifies the local file system path for the template file created by the command. The file should not exist. | #### Example @@ -309,7 +309,7 @@ This command creates a new replication job for a repository. The command accepts | **Command options:** | | | `--server-id` |

[Optional]
Artifactory Server ID configured using the 'jf config' command.

| | `--vars` |

[Optional]
List of semicolon-separated(;) variables in the form of "key1=value1;key2=value2;..." to be replaced in the template. In the template, the variables should be used as follows: ${key1}.

| -| Command arguments | | +| **Command arguments:** | | | template path | Specifies the local file system path for the template file to be used for the replication job creation. The template can be created using the "jf rt rplt" command. | #### Examples @@ -342,7 +342,7 @@ This command permanently deletes a replication jobs from a repository. | **Command options:** | | | `--server-id` |

[Optional]
Artifactory Server ID configured using the 'jf config' command.

| | `--quiet` |

[Default: $CI]
Set to true to skip the delete confirmation message.

| -| Command arguments | | +| **Command arguments:** | | | repository key | The repository from which the replications will be deleted. | #### Example @@ -366,7 +366,7 @@ This command creates a configuration template file, which will be used as an arg | Command-name | rt permission-target-template | | Abbreviation | rt ptt | | **Command options:** | The command has no options. | -| Command arguments | | +| **Command arguments:** | | | template path | Specifies the local file system path for the template file created by the command. The file should not exist. | ### Creating / Updating Permission Targets @@ -377,7 +377,7 @@ These commands create/update a permission target. The commands accept as an argu |-------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command-name | permission-target-create / permission-target-update | | Abbreviation | rt ptc / rt ptu | -| Command arguments | | +| **Command arguments:** | | | template path | Specifies the local file system path for the template file to be used for the permission target creation or update. The template should be created using the "jf rt ptt" command. | | Command-name | permission-target-create / permission-target-update | | Abbreviation | rt ptc / rt ptu | @@ -396,5 +396,5 @@ This command permanently deletes a permission target. | **Command options:** | | | `--server-id` |

[Optional]
Artifactory Server ID configured using the 'jf config' command.

| | `--quiet` |

[Default: $CI]
Set to true to skip the delete confirmation message.

| -| Command arguments | | +| **Command arguments:** | | | permission target name | The permission target that should be removed. | diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/package-managers-integration.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/package-managers-integration.md index 3c0eedb..bcab0d2 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/package-managers-integration.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/package-managers-integration.md @@ -25,7 +25,7 @@ Before using the **jf mvn** command, the project needs to be pre-configured with | `--exclude-patterns` |

[Optional]
Filter deployed artifacts by setting a wildcard pattern that specifies which artifacts to exclude. You may provide multiple comma-separated(,) followed by a white-space. For example

artifact--test.jar, artifact--test.pom

| | `--scan` |

[Default: false]
Set if you'd like all files to be scanned by Xray on the local file system prior to the upload, and skip the upload if any of the files are found vulnerable.

| | `--format` |

[Default: table]
Should be used with the --scan option. Defines the scan output format. Accepts table or json as values.

| -| Command arguments | The command accepts no arguments | +| **Command arguments:** | The command accepts no arguments | ### Running maven @@ -49,7 +49,7 @@ The following table lists the command arguments and flags: | `--build-number` |

[Optional]
Build number. For more details, please refer to Build Integration.

| | `--project` |

[Optional]
JFrog project key.

| | `--insecure-tls` |

[Default: false]
Set to true to skip TLS certificates verification.

| -| Command arguments | The command accepts the same arguments and options as the mvn client. | +| **Command arguments:** | The command accepts the same arguments and options as the mvn client. | #### Deploying Maven Artifacts @@ -90,7 +90,7 @@ Before using the **gradle** command, the project needs to be pre-configured with | `--ivy-artifacts-pattern` |

[Default: '[organization]/[module]/[revision]/[artifact]-[revision](-[classifier]).[ext]'

Set the deployed Ivy artifacts pattern.

| | `--scan` |

[Default: false]
Set if you'd like all files to be scanned by Xray on the local file system prior to the upload, and skip the upload if any of the files are found vulnerable.

| | `--format` |

[Default: table]
Should be used with the --scan option. Defines the scan output format. Accepts table or json as values.

| -| Command arguments | The command accepts no arguments | +| **Command arguments:** | The command accepts no arguments | ### Running gradle @@ -113,7 +113,7 @@ The following table lists the command arguments and flags: | `--build-name` |

[Optional]
Build name. For more details, please refer to Build Integration.

| | `--build-number` |

[Optional]
Build number. For more details, please refer to Build Integration.

| | `--project` |

[Optional]
JFrog project key.

| -| Command arguments | The command accepts the same arguments and options as the gradle client. | +| **Command arguments:** | The command accepts the same arguments and options as the gradle client. | #### Example @@ -183,7 +183,7 @@ The following table lists the command arguments and flags: | `--project` |

[Optional]
JFrog project key.

| | `--module` |

[Optional]
Optional module name for the build-info.

| | `--skip-login` |

[Default: false]
Set to true if you'd like the command to skip performing docker login.

| -| Command arguments | The same arguments and options supported by the docker client/ | +| **Command arguments:** | The same arguments and options supported by the docker client/ | #### Example @@ -216,7 +216,7 @@ The following table lists the command arguments and flags: | `--skip-login` |

[Default: false]
Set to true if you'd like the command to skip performing docker login.

| | `--threads` |

[Default: 3]
Number of working threads.

| | `--detailed-summary` |

[Default: false]
Set true to include a list of the affected files as part of the command output summary.

| -| Command arguments | The same arguments and options supported by the docker client/ | +| **Command arguments:** | The same arguments and options supported by the docker client/ | #### Example @@ -406,7 +406,7 @@ Before using the **jf npm install**, **jf npm ci** and **jf npm publish** comman | `--server-id-deploy` |

[Optional]
Artifactory server ID for deployment. The server should be configured using the 'jf c add' command.

| | `--repo-resolve` |

[Optional]
Repository for dependencies resolution.

| | `--repo-deploy` |

[Optional]
Repository for artifacts deployment.

| -| Command arguments | The command accepts no arguments | +| **Command arguments:** | The command accepts no arguments | ### Installing Npm Packages @@ -428,10 +428,10 @@ The following table lists the command arguments and flags: | `--project` |

[Optional]
JFrog project key.

| | `--module` |

[Optional]
Optional module name for the build-info.

| | `--threads` |

[Default: 3]
Number of working threads for build-info collection.

| -| Command arguments | The command accepts the same arguments and options as the npm client. | +| **Command arguments:** | The command accepts the same arguments and options as the npm client. | | `--project` |

[Optional]
JFrog project key.

| | `--module` |

[Optional]
Optional module name for the build-info.

| -| Command arguments | The command accepts the same arguments and options as the npm client. | +| **Command arguments:** | The command accepts the same arguments and options as the npm client. | #### Examples ##### Example 1 @@ -510,7 +510,7 @@ Before using the **jf yarn** command, the project needs to be pre-configured wit | `--global` |

[Optional]
Set to true, if you'd like the configuration to be global (for all projects on the machine). Specific projects can override the global configuration.

| | `--server-id-resolve` |

[Optional]
Artifactory server ID for resolution. The server should configured using the 'jf c add' command.

| | `--repo-resolve` |

[Optional]
Repository for dependencies resolution.

| -| Command arguments | The command accepts no arguments | +| **Command arguments:** | The command accepts no arguments | ### Installing Npm Packages @@ -531,7 +531,7 @@ The following table lists the command arguments and flags: | `--project` |

[Optional]
JFrog project key.

| | `--module` |

[Optional]
Optional module name for the build-info.

| | `--threads` |

[Default: 3]
Number of working threads for build-info collection.

| -| Command arguments | The command accepts the same arguments and options as the yarn client. | +| **Command arguments:** | The command accepts the same arguments and options as the yarn client. | #### Examples ##### Example 1 @@ -627,7 +627,7 @@ The following table lists the command arguments and flags: | `--project` |

[Optional]
JFrog project key.

| | `--no-fallback` |

[Default false]
Set to avoid downloading packages from the VCS, if they are missing in Artifactory.

| | `--module` |

[Optional]
Optional module name for the build-info.

| -| Command arguments | | +| **Command arguments:** | | | Go command | The command accepts the same arguments and options as the go client. | #### Examples @@ -851,7 +851,7 @@ The following table lists the commands' options: | `--server-id-resolve` |

[Optional]
Artifactory server ID for resolution. The server should configured using the 'jf c add' command.

| | `--repo-resolve` |

[Optional]
Repository for dependencies resolution.

| | --nuget-v2 |

[Default: false]
Set to true if you'd like to use the NuGet V2 protocol when restoring packages from Artifactory (instead of NuGet V3).

| -| Command arguments | The command accepts no arguments | +| **Command arguments:** | The command accepts no arguments | ### Running Nuget and Dotnet commands @@ -931,7 +931,7 @@ The following table lists the command options: | `--global` |

[Optional]
Set to true, if you'd like the configuration to be global (for all projects on the machine). Specific projects can override the global configuration.

| | `--server-id-deploy` |

[Optional]
Artifactory server ID for deployment. The server should configured using the 'jf c add' command.

| | `--repo-deploy` |

[Optional]
Repository for artifacts deployment.

| -| Command arguments | The command accepts no arguments | +| **Command arguments:** | The command accepts no arguments | #### Examples ##### Example 1 diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/release-lifecycle-management.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/release-lifecycle-management.md index e5f8adf..26fe248 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/release-lifecycle-management.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/release-lifecycle-management.md @@ -98,7 +98,7 @@ The file spec may be of one of the following creation sources: |------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command-name | release-bundle-create | | Abbreviation | rbc | -| Command arguments | | +| **Command arguments:** | | | release bundle name | Name of the newly created Release Bundle. | | release bundle version | Version of the newly created Release Bundle. | | **Command options:** | | @@ -144,7 +144,7 @@ This command allows promoting a release bundle to a target environment. |------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command-name | release-bundle-promote | | Abbreviation | rbp | -| Command arguments | | +| **Command arguments:** | | | release bundle name | Name of the Release Bundle to promote. | | release bundle version | Version of the Release Bundle to promote. | | environment | Name of the target environment for the promotion. | @@ -197,7 +197,7 @@ This command distributes a release bundle to an edge node. |------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command-name | release-bundle-distribute | | Abbreviation | rbd | -| Command arguments | | +| **Command arguments:** | | | release bundle name | Name of the release bundle to distribute. | | release bundle version | Version of the release bundle to distribute. | | **Command options:** | | @@ -275,7 +275,7 @@ Deleting locally means distributions of the release bundle will not be deleted. |------------------------|----------------------------------------------------------------------------------------------------------------------------------------| | Command-name | release-bundle-delete-local | | Abbreviation | rbdell | -| Command arguments | | +| **Command arguments:** | | | release bundle name | Name of the release bundle to distribute. | | release bundle version | Version of the release bundle to distribute. | | environment | If provided, all promotions to this environment are deleted. Otherwise, the release bundle is deleted locally with all its promotions. | @@ -314,7 +314,7 @@ This command will delete distributions of a release bundle from edge nodes. |------------------------|---------------------------------------------------------------------------------------------------------------------------------------------| | Command-name | release-bundle-delete-remote | | Abbreviation | rbdelr | -| Command arguments | | +| **Command arguments:** | | | release bundle name | Name of the release bundle to distribute. | | release bundle version | Version of the release bundle to distribute. | | **Command options:** | | @@ -353,7 +353,7 @@ The following command allows exporting a Release Bundle as an archive to the fil |------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command-name | release-bundle-export | | Abbreviation | rbe | -| Command arguments | | +| **Command arguments:** | | | release bundle name | Name of the Release Bundle to export. | | release bundle version | Version of the release bundle to export. | | target pattern | The argument is optional and specifies the local file system target path.If the target path ends with a slash, the path is assumed to be a directory.For example, if you specify the target as "repo-name/a/b/", then "b" is assumed to be a directory into which files should be downloaded.If there is no terminal slash, the target path is assumed to be a file to which the downloaded file should be renamed.For example, if you specify the target as "a/b", the downloaded file is renamed to "b". | @@ -389,7 +389,7 @@ Please note this functionality only works on Edge nodes within an air-gapped env |-------------------|-----------------------------------------------------------------------------------| | Command-name | release-bundle-import | | Abbreviation | rbi | -| Command arguments | | +| **Command arguments:** | | | path to archive | Path to the release bundle archive on the filesystem | | **Command options:** | | | `--project` |

[Optional]
Project key associated with the Release Bundle version.

| diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/verifying-artifactory-accessibility.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/verifying-artifactory-accessibility.md index c33ca90..e6dfc37 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/verifying-artifactory-accessibility.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/verifying-artifactory-accessibility.md @@ -13,7 +13,7 @@ This command can be used to verify that Artifactory is accessible by sending an | `--url` |

[Optional]
JFrog Artifactory URL. (example: https://acme.jfrog.io/artifactory)

| | `--server-id` |

[Optional]
Server ID configured using the jf c add command. If not specified, the default configured Artifactory server is used.

| | `--insecure-tls` |

[Default: false]
Set to true to skip TLS certificates verification.

| -| Command arguments | The command accepts no arguments. | +| **Command arguments:** | The command accepts no arguments. | ## Examples ### Example 1 diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-distribution.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-distribution.md index e5d894a..9ede73a 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-distribution.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-distribution.md @@ -54,7 +54,7 @@ This commands creates and updates an unsigned Release Bundle on JFrog Distributi | `--repo` |

[Optional]
A repository name at source Artifactory to store release bundle artifacts in. If not provided, Artifactory will use the default one.

| | `--insecure-tls` |

[Default: false]
Set to true to skip TLS certificates verification.

| | `--detailed-summary` |

[Default: false]
Set to true to return the SHA256 value of the release bundle manifest.

| -| Command arguments | | +| **Command arguments:** | | | release bundle name | The name of the release bundle. | | release bundle version | The release bundle version. | | pattern | Specifies the source path in Artifactory, from which the artifacts should be bundled, in the following format: \/\. You can use wildcards to specify multiple artifacts. This argument should not be sent along with the _--spec_ option. | @@ -190,7 +190,7 @@ This command GPG signs an existing Release Bundle on JFrog Distribution. | `--repo` |

[Optional]
A repository name at source Artifactory to store release bundle artifacts in. If not provided, Artifactory will use the default one.

| | `--insecure-tls` |

[Default: false]
Set to true to skip TLS certificates verification.

| | `--detailed-summary` |

[Default: false]
Set to true to return the SHA256 value of the release bundle manifest.

| -| Command arguments | | +| **Command arguments:** | | | release bundle name | The name of the release bundle. | | release bundle version | The release bundle version. | @@ -231,7 +231,7 @@ This command distributes a release bundle to the Edge Nodes. | `--city` |

[Default: *]
Wildcard filter for site city name.

| | `--country-codes` |

[Default: *]
semicolon-separated(;) list of wildcard filters for site country codes.

| | `--insecure-tls` |

[Default: false]
Set to true to skip TLS certificates verification.

| -| Command arguments | | +| **Command arguments:** | | | release bundle name | The name of the release bundle. | | release bundle version | The release bundle version. | @@ -274,7 +274,7 @@ This command deletes a Release Bundle from the Edge Nodes and optionally from Di | `--delete-from-dist` |

[Default: false]
Set to true to delete release bundle version in JFrog Distribution itself after deletion is complete in the specified Edge nodes.

| | `--quiet` |

[Default: false]
Set to true to skip the delete confirmation message.

| | `--insecure-tls` |

[Default: false]
Set to true to skip TLS certificates verification.

| -| Command arguments | | +| **Command arguments:** | | | release bundle name | The name of the release bundle. | | release bundle version | The release bundle version. | diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-pipelines.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-pipelines.md index 93f7907..8c7bd0e 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-pipelines.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-pipelines.md @@ -34,7 +34,7 @@ The following sections describe the commands available in the JFrog CLI for use |-------------------|------------------------------------------------------------------------------------------------------------------------------------------------| | Command name | pl version | | Abbreviation | v | -| Command arguments | The command accepts no arguments. | +| **Command arguments:** | The command accepts no arguments. | | **Command options:** | | | `--server-id` |

[Optional]
Specify Pipelines server for which the version is to be fetched. If not specified, the default configured server is used.

| @@ -55,7 +55,7 @@ Get the status of the run for the specified pipeline |-------------------|----------------------------------------------------------------------------------------------------------------------------| | Command name | pl status | | Abbreviation | s | -| Command arguments | The command accepts no arguments. | +| **Command arguments:** | The command accepts no arguments. | | | | | **Command options:** | | | `--pipeline-name` |

[Optional]
Name of the pipeline.

| @@ -92,7 +92,7 @@ Trigger a pipeline run. | **Command options:** | | | `--server-id` |

[Optional]
Name of the server.

| | `--single-branch` |

[Optional]
To be used when using a single branch. When used, branch_name argument is ignored.

| -| Command arguments | | +| **Command arguments:** | | | pipeline\_name | Name of the pipeline to be triggered. | | branch\_name | Name of the multi branch. | @@ -142,7 +142,7 @@ jf pl sync --repository jfrog/artifactory --branch main/jobs --server-id repo21 | Abbreviation | ss | | **Command options:** | | | `--server-id` |

[Optional]
Name of the server.

| -| Command arguments | | +| **Command arguments:** | | | full\_repo\_name | Full name of the repository where the pipeline source is stored. | | branch\_name | Name of the branch. | diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/curl-integration.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/curl-integration.md index 79ab60b..72c9391 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/curl-integration.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/curl-integration.md @@ -11,7 +11,7 @@ Execute a cUrl command, using the configured Xray details. The command expects t | Abbreviation | xr cl | | **Command options:** | | | `--server-id` |

[Optional]
Server ID configured using the jf c add command. If not specified, the default configured server is used.

| -| Command arguments | | +| **Command arguments:** | | | cUrl arguments and flags |

The same list of arguments and flags passed to cUrl, except for the following changes:

1. The full Xray URL should not be passed. Instead, the REST endpoint URI should be sent.
2. The login credentials should not be passed. Instead, the --server-id should be used.

| #### Example 1 diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-published-builds.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-published-builds.md index 979f8fd..05ec3d3 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-published-builds.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-published-builds.md @@ -17,7 +17,7 @@ JFrog CLI is integrated with JFrog Xray and JFrog Artifactory, allowing you to h | `--format` |

[Default: table]
Defines the output format of the command. The accepted values are: table and json.

| | `--project` |

[Optional]
JFrog project key

| | `--rescan` |

[Default: false]
Set to true when scanning an already successfully scanned build, for example after adding an ignore rule.

| -| Command arguments | The command accepts two arguments. | +| **Command arguments:** | The command accepts two arguments. | | Build name | Build name to be scanned. | | Build number | Build number to be scanned. | diff --git a/jfrog-applications/jfrog-cli/get-started/configurations/jfrog-platform-configuration.md b/jfrog-applications/jfrog-cli/get-started/configurations/jfrog-platform-configuration.md index a6a4d00..7726c21 100644 --- a/jfrog-applications/jfrog-cli/get-started/configurations/jfrog-platform-configuration.md +++ b/jfrog-applications/jfrog-cli/get-started/configurations/jfrog-platform-configuration.md @@ -18,7 +18,7 @@ This command allows creating [Access Tokens](https://jfrog.com/help/r/jfrog-plat |-------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Command name | access-token-create | | Abbreviation | atc | -| Command arguments | | +| **Command arguments:** | | | username | The username for which this token is created. If not specified, the token will be created for the current user. | | **Command options:** | | | `--audience` |

[Optional]

A space-separated list of the other instances or services that should accept this token identified by their Service-IDs.

| @@ -75,7 +75,7 @@ The **config add** and **config edit** commands are used to add and edit JFrog P | `--user` |

[Optional]

JFrog Platform username.

| | `--xray-url` | \[Optional] Xray URL. (example: https://acme.jfrog.io/xray) | | `--overwrite` |

[Available for config add only]
[Default: false]
Overwrites the instance configuration if an instance with the same ID already exists.

| -| Command arguments | | +| **Command arguments:** | | | server ID | A unique ID for the server configuration. | ## Removing Configured Servers @@ -88,7 +88,7 @@ The _config remove_ command is used to remove JFrog Platform server configuratio | Abbreviation | c rm | | **Command options:** | | | `--quiet` |

[Default: $CI]

Set to true to skip the delete confirmation message.

| -| Command arguments | | +| **Command arguments:** | | | server ID | The server ID to remove. If no argument is sent, all configured servers are removed. | @@ -100,7 +100,7 @@ The _config show_ command shows the stored configuration. You may show a specifi |-------------------|-----------------------------------------------------------------------------------------| | Command name | config show | | Abbreviation | c s | -| Command arguments | | +| **Command arguments:** | | | server ID | The ID of the server to show. If no argument is sent, all configured servers are shown. | ## Setting a Server as Default @@ -110,7 +110,7 @@ The _config use_ command sets a configured server as default. The following comm | | | |-------------------|-----------------------------------------| | Command name | config use | -| Command arguments | | +| **Command arguments:** | | | server ID | The ID of the server to set as default. | ## Exporting and Importing Configuration @@ -123,7 +123,7 @@ The _config export_ command generates a token, which stores the server configura |-------------------|--------------------------------| | Command name | config export | | Abbreviation | c ex | -| Command arguments | | +| **Command arguments:** | | | server ID | The ID of the server to export | ### Import @@ -132,7 +132,7 @@ The _config export_ command generates a token, which stores the server configura |-------------------|---------------------| | Command name | config import | | Abbreviation | c im | -| Command arguments | | +| **Command arguments:** | | | server token | The token to import | ## Sensitive Data Encryption From 33d621010372e889bacee2396e3f4ecac392d7b9 Mon Sep 17 00:00:00 2001 From: Eran Turgeman <81029514+eranturgeman@users.noreply.github.com> Date: Sun, 19 May 2024 14:40:09 +0300 Subject: [PATCH 20/57] Updating Frogbot documentation with OpenID-Connect guidelines (#128) --- .../assets/oidc-configure-integration.png | Bin 0 -> 40171 bytes .../.gitbook/assets/oidc-identity-mapping.png | Bin 0 -> 58975 bytes .../.gitbook/assets/oidc-new-integration.png | Bin 0 -> 27225 bytes .../setup-frogbot-using-github-actions.md | 87 ++++++++++++++++-- .../frogbot-scan-pull-request.yml | 7 ++ .../frogbot-scan-repository.yml | 7 ++ 6 files changed, 94 insertions(+), 7 deletions(-) create mode 100644 jfrog-applications/.gitbook/assets/oidc-configure-integration.png create mode 100644 jfrog-applications/.gitbook/assets/oidc-identity-mapping.png create mode 100644 jfrog-applications/.gitbook/assets/oidc-new-integration.png diff --git a/jfrog-applications/.gitbook/assets/oidc-configure-integration.png b/jfrog-applications/.gitbook/assets/oidc-configure-integration.png new file mode 100644 index 0000000000000000000000000000000000000000..52d8ab117e469f3fe3b8f646c26a35c41e34d920 GIT binary patch literal 40171 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 literal 0 HcmV?d00001 diff --git a/jfrog-applications/.gitbook/assets/oidc-identity-mapping.png b/jfrog-applications/.gitbook/assets/oidc-identity-mapping.png new file mode 100644 index 0000000000000000000000000000000000000000..026abe01f5b952efc73f2c2fa71e8f6678df95ec GIT binary patch literal 58975 zcmeFYRa9JC)Gi1F0)zw-G!WdK;O_438r-FDhY;M|3wL*y;O_4365QbyCpkI)=zi&k z`_SFv)>u`wYcJh%F8Ss+X9dbg34eHp@eT|O?1QL?fE*YY1S=TWn;w|ApgZ6y!6;y0 z?+Q%#`DH};`Eg|cR)!|#24G+!fwA$>GV=SVUN5eb{1C9%pSo*FNrUWpQNax~DFcEAn%X}uxnHa#JDxmV zc-o%aN#E@P6K%n9<>&Ba=_J5$1rw;@uN|_4g#;&U_`yEpdx24U!6ru&>%N7$dm~_Y z(>Cb;0G70Hnk031e{=Jqn6IIQ0S!h9v(93PK?1ct*@v+n(6tYi4v*`SI%GGFT!&YT zD}*ReZxnP#&q3F1Ga2%Bk}2co2@D087fHpuE*BUfTV|e-^=$x76h+4lUnx&OIn1}+ zm>31>4w8>d0_GpFOa{0KPT090+wMZ5@Aa$hA5zVKhP&HSevsUU%?vV$~4pXm>23ujmylN8FUB6rXVyr4dXA+9*IxE?_k! zv`K*`4pRJL7q(@2XTwF*Oj`7zR0~|(g^3eyN?48EmD&>+!MaONC71Lies`VK2#L4` zEvHFTFEGj{`?^`*s(_1%K){6w>kfB!**G1OJR)hX0A;_`RooOFjFTi>-SumUST`kv3oVN*-?U|OC*&@K2HO?D3}n$0VqO;i%mWD!@gwJXvj@hn6SQRrhv`ibRYC&; znSuL`5*jlCOwQ}G{`YB}H+|5)I_z^$1MMExFbdwAYlOxSMn8$HQI;Sbd6=EvyZi)m zf)e@({S}<|BRoDog9y~bk4s#nK15xfkqDA41So!48OkpI9}$phA1r>n%fQcn&jzE& z-^OE_t+0-rEx#z7-b2aIkrKtA4j^~)G-N@@j^{hYe6B%N^djd~%sh~x%6FL3RG=}1 zyn+oCoE)>OCR_M)>;unlJ4P{XHm*Kqut#o3(D=a}ZP_1N(6cjw*7P${$QwW3z^-4k zi3x5Jusblh;I>ecq3G>y?Yb3WDsPIhW}v_LN_LfYSpGcep3$SxWv_Ueqs4^J`%eFp zbsfUST!W1orw-cjy(9Rn@0WJ>uE90Nvp6RjHwLYM(eC&)vtPSsnzy`HVnW8AknZ5UA~B*(wUNJ z_iW)Yy*;A6;~BHrFSE>J;bW`WtJ&Q8>E`WpeYE+EPP!sYcC;EMDke^&FlJp}#po8y z?0P>l)zV6RrDkrmfJmN8f|0mRvZHRNEZ4@>kZD-+ChLzeN&2Q{wqTU2zhf0=Hlu&- zl5x_p=gW>-OY>-GsRuOon0u`7ZT2k_EENpyRu|V34>M@k=A@{Mjh|*KGAv@AA)etl zbf4j5Vn_x{mSien(zZA@@2<74?R02#sBl1WK=}MF1h)sZhtV~pCHaZ%q3Svf(;RC8 zON#Ar+xQ@1OJ$R#x=-hm)%d#LlhlHgd7h6{%ZS~s%I=$y7HTzW^LVlN-BPwvjahQHOURhb0t45mX?3Ihdu}*#Q4_ZuzJ-$L6^-nm&?ozp&AMFfMseS7rYsZzzN!rDe2 z7e*iIh){>N&%y;-6;B3|)<_-2?|7%i+NY(6;EPjX1-cvDn%>U*1CJHLvmnAK}I zNjTZxI{gq9kQK1n>gZ#PWX@8^f|MN|uiyK%M=-7@&KZBA#`aMUDH_MtGx29-vB7M7 z5w*0Iho$e*yXzqNiiEjE zYC$SKl5A_fV@~IQCWUaf#|D9k%tB@LjvbW#*G3}Rm`B|GLF*CH(c1)cpfh=J646j& ztVK!-tLxWZirrnsJ;fBolA;S?ntJ~s$8ca?V=kI>1O%*QXEp0d_@!-kcTZ_J;S+NtVgjkQ$d zZVlj!21C;*J;= zRMXk38@9}PV$<9(QhlP+BImviYt0AP*rusyTjJh#th_?rR9H4?nMC7vIl}haQRd!8AJKEp^9)K! zIE}DY>uhay$!5@MteJ94sg|Wtt#Xvz@!5yVeE2cI^yEzAj zmD;9dx87$d@!iak3r%Xx_!F0<7MF1QQ^T8$laYsSH?G)S9DB#>*Y7zcJZ^Vnd$Iz1 z57Tsj$Q(HwRL;5A#pjM$tB0-@uA^7Zm&-2L=Z`krc`wsACZ2BSeXhJ7vUK^ZDxCVP zb`Eo9wvLrF<6a?mvl7`VR)800IW1-&sqZxFBoB($?6@Zbzyv4b;?(iGqrqilhXao|OglH+?Hz18OG=>(?q^98PSY zOA7PMrAvlwbp0zuu<7$Ni^>of#*-ilhuKzZJj$mx=l-^;dkZceuE? z8~}YoHaP*IKh;6MIPs0`?5x>nXdE3KsU7L5tpG+ew5+VGG+*gx=;)|GC8%tjE$zNJ zQCZp&{BGpmb_5J;^#CT;b|zMqxUcPg)3vg<Ul?A9vJFfpU^QZFv%=}Z4gXZiX)-H@lRdlB|qm=XCtwA`$)%OML0K*=I6${!u80!K^tw9|CE z-v*J&31pLMx}3KBh?5dI#e1=}OfYbqm#j?I7p(-DDn~~{sq8l%r$ec$DYhr(CHPW5 zAR%zU{v^f_Fa8f^2uW}LyA=c`051jk5e)pFIzb;euZ=WAoS)l*a27@#u1P@5Tm@hF# z{!`lv)cwfszCoY=-|yZsq0jkv_$A99+ci=O7}lDhqg<*c>{+T}%YP`73JAJEmLkNu^Al#BReJRChfmq#p+{n0OLk9V--kwr0nc@ zl=FkBBs4T>K|w+92l|JGG99^ZQ@Cz##T!$S49kZVJbd1xdW_$~WVvEH4IHibhhr*Z z60Hu`EgLbdhR(?#mVJ@M!9@B;lj)`(RmzRgIj;jN-Cdy1rsq}3lQ;3BI|(x?no zR~XMwlK`_$KF37c%zeh)@o%pV3tMJN7u}Xue0_bZ9iC7N)k#uJrwfxb^@3*YKm2_6 zd#*O&uN@x?;xs>1npRbejia$d37;>JvnpPDcL_4MouFH0(Z$`O2 z#NCqyxi?ee_Y=`p(=#aqFK0Y~Ib&lwvD(i8EQ!yTo}}y~{y^7rJkyE#49ny*zTGej zQetA@OnE|sBbm%Fu|0ds@p4IEcQ3&}^}K1t=1J{$Fddv8SQnb1#RoZ>}nC$QD$={`;nTUFB@si)M~u+}MUIF7(Q zk_T6Drr=M7+#8;jn+J4F-9U`mx_!IfR}p=Q3r%3Paf@w*%8PG(jm04$&HcjmRCTA8 zE;q0}IIw)N^FVLXBdk5vUC(l^=Q!Ctr-G``HXhDRBe$*9n$q!56?||YxiGvO+swf^ z?b(lu$F{)~^&%*!oS*&Z!L_n=x?6N!YUrJr=5WF#;vbHkSA8jAI+U4}O~`y@sktEk zepYo!_ugbWN%FufZAJ4+`7o|~`FgifaqHkjinGyy&{3Irp~4o2^Qq%YOoE+gy!7S; zUNG7x2NRQhWaKSj;jq+n<<;8=CiA7-!Q|N3qJ?Um^|T`jcYfHE0JfTaJ_$^B<_EO< zqaqwT=TPVVw-(EV(_i-2NwkP7zTcILjp}+gI=*DmyU;7!gV`zi{z5i7@Ha%Gp0Y9%(hu zMh@4fUBoBhQv%QJ_BJ16X2u=UA?ph#Ow4)sE@FZ+V z9;$dz=EwzuE@e2-_dDDk;nD;K9$urtoC$CoZ05-a*_<#a6Mx-T48Nmc5ro7$2~rJ5kGdr zJ)F0~+4Onp>c}_PZZvywuU1_+vM3nNVzI(s%V`_y-hH1u351!0v%#J+%haVLrSlv< z9882Tzeq+>Mny%-Cq6`DTBPwN*BxhP_}mw`d%Rp&UEOU|g&$CI?4z4h+dp8N4xpAx zVW}0txPJ-_3zNFMds!h2go+~M8(ChKq}oLI=P2ZvCdB32jYY%GBby8&nRk1chGw#t z-Ip&=5Fa_=gq|Z(5P5#~I1r+MzW!yM*QDxo>*RVk>$9-uYu_`ZR0NjEt*Pdvy zMaBD*bdwOuP2}h=yQmsZHnM&|pHptg6?lBFbB0R>ED_j1E!ZPeg64kFH5=LAt17(x z{vBeW+Sy+X8*nA0HDP0W@op|^(wk$6!}!>*q!C>^x%Nl~!fMS+D`wOnNo>P(@^!mi zVvgF_K%B~ZP8-2mEYvgU_!S1*ZP~oHcVV|bVenKObe4LQgy>Bm`a`xVH?$xfH|-jW z#XMqm3GGuHzBM5fB_&iqEG*72Hw@q@AOUMK8ueA6b+D`%;NZJ|dI zlPwf_P#}G0ivUM#WQ2y|YX7htKGuX&sUAh;^PfCyA}TyIMnXTbf#h(mS}t;~I~i*O zXfmZ8o7vTH*A64;O@9AnVs`CiILmKrjz6r-2p3o1WP@druR8PY}{yc@(t!1#VJ~Z&I#Td z*U9McWnoTMCSkeAz*K=F^t`2_6gapKb%}_gtgQ22uqG6 zca3sK*uzdSdEqrU=vys ziICI4wS;skOhPJD|L3P5O#_3H;QFZMmgX42EKB_#fZ_KCtAj@;p6BLtHdg^~COg7b zd*>D_wZc?rqn;BbN^m_h7>NyWJr(p(eBVE8dPL2;6K#mvT8ILDI4;EGR8%7Fivzf? z<|P%=^c<;)h~x)Rhe^}@5k%W<;-xIgC|a4+cd$2E$OBQ5`m1W6)mp+@pAD(6PR6$z zn^nO70o)+alz_;hX2Fn=1%fVKwNKrjh`nPdG&bO8`YnY#ufb=zKEK-7|^&U8EstG!DP=_(9rn7wCX}Dh& zC>J1%?y)-4skI1qC%+Nd?kOa4mLAALkd_Tidz!Q&l#hD2-XHi`2xU$im`mX+csU-T zTyuo#e!W5RGOX@6&Rn&7rm%g12^K3F&cTw%!70(CJhVNlAxcLtszLpQ$wL0>GgE!I z;MF+Y&FLh6cZ!I_X!^5z-*n9_7T1Eq(k$N?1W^>aS|S2#GD>ORUlnvi7BCh znVhvvHEN_HazwKzmpTT8o?QnsV-bH`FQ9*&H>NH`dD2n zzO9&IYuk~)$;JMg7M>{9^EVqg6`jw~nc7MwciVzK{H&HDay(u*y%QRzrsFiDOMr)3 zsws1-d9HFuFP-6@mpyw%-Bu((&NM~9sI!?-Y;7FqOo&@}Ic`kqst%^HrijQaR z#k$K+)JLQ4n&_7|GTtq9zuacF-D~wvQ>5le^q#G;RR=1@^0iT`6s}YePHy?XKguiS z-Yx`lc>9k*nQsko{!2TmeH@=bi8s{ZQR&%s$NV{AdpLLvtg7c>D>ghBGEvFLELxw=H|0iG@siLQ}) zi^Y4hY71?`2UGnoC(#UPjv6h$5~Sq&w5{AeIYF0iKbU(^(yf>wm3x58y@)$`-Mu{P z<+)XzZFdL2z+$lzXelpvnoj#hO6DnO9&K{GaXvUSq~yJbsJ%7HT^{r=V}kNZhTxlI zQvNnMLHqK2Mt7u z9Azeti~MP)oEzdJ>-FreG3}p5=Agg>Fq`%a84&-d`zRbtAnfUiRqg#B8peSaBq!=d z^iaq@WXS^oSfrk(dl;(EZzAUZ4CDVd(%432tumxZ_pCjs#o)5nKfCYUziG^~YT0T-lbF2kq+*IVs8iAagTf5faRB+iKVC zqE=@EZU6X41#qbKaFS?E5lVAojPD7n7ty%l$hazmJ`8!qXs*f{coYGzW`l9XuRp`NfL2lSghIY)CwNc-Z~g zBMahkjf|qskvXM4&i7bmi%HYwDJ`WYHd`(;B3URmV1DZ2Gg^o_BfjVxVEj@$zG_w{ zC*g*VfapC{pef$y?Boep-^|T57^ATA6q6?j%~3q8oAB-=nf3xKCVWFi+!J1Xu1?TJ zjB-lbVE~9|2Zg{)Vi`TaqWby=Cma`sQ zXh^e9uolM%QmK!^Gpth&)kM!?~@|t`3)dvFmr01_noW(@i=7 zAK<^!fabm8cQ3|GNj1~A7K`=~JI}Q#hEMf8oH18>6Kb=-sVTdIZUh0G*5~)j_KT8@ zSNCwi@nv`jj?DLKp+-~uOChsBd@Cy&waZ=dCv)W94&$ANm)zdmWl^fzpQ9`vPG)^D zQw6pl$0MFO3xwlqr?O?;gJ2LcBo}WEDudOjNZZ5Jn3`JOYZ6m}_Jx>4FU1pbvKILV zRJ)h0ii7X)zbMhw5t_|#&16CDVkqTukIe*efE%B zkgNz4jp_GxVP$O~d=uwUIQr~BCHMoXsGB(S(5#3w%I5(dlWT;}Z`tT*r}5*LvSJCV z@+%>6-7u*wJzS8FLcs!JCWM(}G$jkc(4!0kRhB&gd)Mh_&xgY=40bxJ)Nfa>+WMSO zkfM1czc9-{h}QNejK}mQYP!Oo`6zl*yY|)&_s{l<-?S9Ny}9)^8=(;wHMAE^+4uzP zqxGW_N-8QY-p0iNZP6wWO2L?);Lq*wMS)UVo~rV@*HntX&N8{5bFZnsd^sYvES_C? zN?DfTeXO1Y9tck5;&^Bcp`!bkZ=IYJ)@9D&ZtrfE)RoSqQB%At)5zdMWnaOpnk*EI zp$?}M_R|iYAGc_Sfbrsq#n%~jnyges=KQ*?Wbl&_jYNgL`WC!jLk|nnG_opq{p)^@ zUK$LpySUwP`A1v9nEF=f8>vfr^`zRPC21}#?82p$W%ihQ1g7sG<)nJ8Ppe-)4W!x* z9B1wC$8)dED|uqX)EGQ?Fuqx@cp#2aF{`Y!CH3_QeR6aEaIShTXlUQha5GgcaTP64#VQk`VpO6L}5@7+fdy9bNnaI z=Y9{}r~US5!fPBBsZz^Q^3STCl>(}RLR_HDW)jkJZdr?xJIm@o8ah1XYrg7JpYGrQ zFEH05Xn1(_v3{(b(mZ1RI}O3xn~j@G{fS=fXAyrVrG$ja_>u*lUFt41nRk_-2b)9k z26u1Fx7p+edbFCoe7d)r(GZi6%E03=86`>wCn9Cv?nB1R&WmXmc< zc(8b}z}{7Td<%kE<-qn2Ra+vl25Pr&fq=vayW^5{P4=3M;m4lwhKu+Dr4L7wu|hVu z=d#$C1JPYIafzvU5D|6f5)`6{V9S;Jj5mtT1OHfWjNv?OTB&3N^wDuIEs?cn^;>{ zAM?9g4YG{m5dn+V@=Q$yTP-YMVPPm93eFe#&0R7tzCTbrJ|e?F;L2pd^c9gevswz- zs;e&64{{WVZ&+1Vlz18Wah)F}9~Bnzk4m@AF6dUgPF+|C=BX&XOs+=76Ap{2%BV74 zFMt6S)HXWvBMv;FW-_^|IU|nm zO(wsKa!9sr=jCZ%fni~p+BoZ(J~-K;30R4e zbrIzX1Qm>P;8Hivh`kT|?qp@sNmzB8E5eaJlt6+L%k*tZPUJ|ip~ZJ>N(OXqhAQIk zb|ng&|FX_W2WxJBXM_hcN8z2lML94qkkj+wI|Yh&2s4+~2{Oi!VnHwO`s)rK&*P^1 zHpf6;onu7>C7OVmykhNj!<(Z4M}MPFnST@$6_@uAUdw##tBVTQtRCHpelHkL595A>cDzo2o3?H03Up^3 z9TYK1Nvi$Ayk~#=>;aiuA%P0NZW87M)M^alc?-xsa=zvG1qDeS%yYiY;Ig}EwI7+c znqSPHuJLNrNr23}DE2%l0hkY876ct*5)ud(nojFa{y}Ku{_SC${(IZZFT&q`@+yE{ ztkAp#uNp}5il#EFb9k~eovFsg;&Sst+>q~E9QA3mx8%LMgQ_+=wHc5Y&1k&p02!oy zTie@0MYBiQ`9hx*%Csyr8TF`%C!YE9Oy(j=8|@eP%#VoJT&aNvvv4_BP2qCHFS`53 zbsuEjECE|c_NVrP2~VhItA)LL~Z>`!N+YAv}XObS%D(AET(o2m&t zJ*`TNqewci*u%$ivh4u2wi(2d1OnDcf!S_c^D=*| zRiS2wY`y)-l!CHmnmy2>D^HpOilK%Mnfc>X&xWd$Vb&MtgH@fSq0X(vq86gDyLx@n>_PKT*6xQH-3)o{z)-5iFqzdA3sT&6e`-y!>1pYM7>}#n_3pySVpU?z))X;L z*Xj(lnxLvcFm_j_Ft+M&d=Qu;f`~6$656!f&-#&2;IO^5HCCwDG$d2 zvn~-UfG}yH&P?LlH*b&&vM9{;U`xxcOT0=dH{P6vc16;e`2mGnl+kYcZuBF;@ z<1oFC2TL)j0>#DTM9R}@gE*F!V+;h8oa&q8oSeW?S&;@ivRf;AoSYhEb<)c!^eGaw(>U z_*{gTP>@mOjEyU%MF&w)cScdubSp>>Ll%h+GgUqU4bkEQ=nI57n!sEuq2B+?((!nO z!qxiW#=YO%8k#|{EudAGyaqG}1*8}|>@(=Xg=TBC7HCUJ$qq_|&0ag|eNzy>cyl(> z(E$-lLWiG_Qu+=<6>sLVqJ!6nM3@B12Qu5?*2j!E2D{=zourM z@%ZT%mYzIcHosa=le7^bjT9`bf&kxyxYq$@si+(;y7C2<*d7&vyzo5O<~DqwBkmuQ z|6@Hkey`k~{lSlkof3b=wNqa>(WweOdPM=2VAMNpwe#z1h0NYaL4lUWZ?gvR?Rui< ziK+uFM1vcAVj?0rZ;#ZXw?=7s@-8)mE2+7-5;3tb`z9w9TMI!B^kEy;V+F6Xu+-k6 zV9b_8Y_1jTtqusWf#5AKW2)|oSaR~hufB- zCae4O-4$OWDa#230qxer(2{8!_TEN9C>3AGQp2#hg+spxlYt;6#+(%DxJ!~h(PM`js`uA~th61^p*poqs{Bu7tTbPp7{h?Oz=T87n;=pp575hT#CX6%zw~(*-Q-LqT#TU=^d}yNN@bs(T2dA`x=Vq z^k{VTWM?%OeJqDw^oHhAb{3^SC$ksUr~GbayWrKR8jDqD)7g&4_jy4(@kw!l;_;T5 zi#<0aMlJOi;^736u{wIp!1=8{TAHXX&8x{#&&eNWZ>Aosy2uGEacxBnHANr8R1!ku z@t{A#4Oa$)a-gcgW3p$bDIdhgE2kqV_iQKMQ$IY`T610w2q zk<`1#^ZUjXj2^N)zb z6+HP!EPU_&bKr_2&~{sj|i#p zo!J5Q;^!Biz_;X=3q$Wg(D_yLUc)d7cVt^k1m17{#>-8Sf>0ApX58W3&J)j~pFY3XU6A|tU0^&MtkoxbxUfGJ}e5x=FIN#KslalJEE-^QU z24VM~puC8R^vdY8c#5_=j;cxopL5WOUHJ7ML|M)Nf`lENZe+xGu~AV~I^z{FEFcKU zNP>%s*>G*}yC&wQhQ_;Y62taP`T25LE*J$`2;HBNX4*YqW<6huJbX1i>l^OMN@$Sh z=x>#e73eC+V1WRb7y<4peC_kv+&_^s=^dxJU2uvHhNf`;s`AzwLyAX3LHB2cLvw}N z)|7RrG4@{}Fp}uRHWen-p-+Q`|9f{Ue*==P!&txZzlOvd0f<_6J+iMx|JP&yg&c-q z+0i9|?4*CfV6H_#)H=2+mc?(k5g0f-E(o(ir-l&!t3^&w&|^ifmT>aF3_tuU!_P~S z75MLN5dO;WSImwZ{-0rhCfWaMq+y!U$7*+poXX)|yX21kn?EOYWF`H*fpM8Ft}(Rk~^F!;V@@XnyBpFFh!In&%)-1lnGu&HfT3rzN7 zfRTds9sKqWl$sU58H*)eEN;)>l+==*Yzl-|-uZW`C6Xx$h-UOpp}lZjXnOg~dEK5G zla?l30UK|8)kqZs1PV$&n$g*tPc9|t4z@_UZ4dzfcA4#9t90>K{j;_O>E#hXC+jH7 zw4q{iF%aI2{PeBS{x^01I??jEAP0y5@R)3(+-}!?r8TPate2PKr}CD(c<$#T7hCHm zxwR#$)zNXq8p5KYWXQ7YKZqqiiw-98*ez05- z6@OXafrafi$9tEJ_tZGq-nzUOimokRCsoonJsgYre8vm~4K*GtEunbm?#{6{ZsJ(@ zM5LV@7h13;hF7B2`-8sgU6GF_X!rLR`uK=1xMOoP0K!=uSwJyp^clad>^9lrHo(XU+{2{izQDhvdk zR9o+_R+~Pd#^z})FKq3t-^=NV;d-*Yp@aUCvxwVdHw={f^Ck7 zDu)@4gp|xfmBf@uG&oB>et!GLG1AB94Wp?_JkZ7Yt-9d#*f7EUWJ3Z=;UIMeHI`cB zgW_QL%;oC5>Bh#9#7plCvb+uL?nv*1ZMZbmG-KRg$5z`YH=h;|+m0SChAg~Uz-;C; z{pXWQ{tNeWqeSCaB^}^@A}R;0qpHF znCD!wh-{FEh>6K6zMAt$tF@ox`lq=ETVhQ3Tk48O1YlLfboCI)>7fedLWael?462Z zsWDFmF+QMcv8%vh_OESi^?^^=?{NedRT3A7OGrR4S}gHQt6oPlF<5A%IUKVJ+(AJ# zW@0b~Oi>9}Zi~wC=>}P1y*d?sCv*Pv4ne8Q`Ok_Mzshk@UgQ$Ac~-nVra*jbsbD20 zx)voE@e*B(8e_OF+Jx!7{rJ1ua`PN!ZQzI{nKb#D`*KJzdn2C{9s`RA8ckMPYqbFh zkcy~+HI5M4Uv2A1H(+qMTQ#tP4_<91%3s(9GwK@azw@8j&ud+?DaD>;u!6BjC0l?o zfAEaHCKe197B(A1ykc}(;@ey#h*2do;@`CaeL{%d8tnq#41^NWXNLht*Y=o>n1J=$r4;S5hX;&$zDtbj(lxqwKfyzS!RDB$HTJD)sSTwVU==B5KW7z`b&f|(gtHJ z56=DinC5bQx5~Lk0d1ku9f62AZ|p}!XK2+1`(I#yf-6HE8Lb>qW{BYIR4;Ggfc4>E zGPEZYJySzcZIQ5^nVwx53fF2oQ7MWK;;F!3lC-e}@HGAO^zcYN*L#s|weQ&mi-ay}Q;=GM{g2@A^@=GszD8@o~cG#cDJE!lr?o z%L7{kSt-j>L?uKR3vx{TR2h{db)p$H8wz%9HbvG@ht; z0^{x;xhW&$Cc0pI2Qq96h4x$jmypmwqtNWAu929SM|a8DQ70VOpjT@2H?qoKfRqr1 zP(EhMa`=0|;mVMMC#wO(N+gN&>n~;^$>$mngM=dg<|`(6N$LR#zd|egOW5+H`+f3i zD)h4_{qIjGG9dm9+UUO_h7y9XEkP4X=- zJ^c|WUW^RA0ThfsU3cvL7b}A%^GER4Rkyn>w*IYkYv1yI_MI48jG}y>Ac(?Es?v+3EKf7Ws3WRH^Og2^i4xZ^X zM1+2d<>SA~|KHb)0&8TI&b}#|%cDdN9g8Dgt=wSQJKx@J5?L)Rj~qoJc6R@n=c?4_ zn`!B4-QgZFcKCPH?B07-XeK9CgM+Pa0OSzU-#BisZrb*?_N%6Aduxx`c#38$XjNZA z)g31rCD|n`i{L4WTvrvKd$tR*Bn3xyS4Xnac4#OnS|1Rwv+93jBVMRf($Z5TQ|IL# zI`nTOUrd&{@rd>pG}@!-ZrBep8mxDM{N6LE4-_S=7xBfJpm>T5peDOa3)_0E1Ewq0 z+-)-zoWFR1N%cefdZm8NA_uH!|J#k#DJPk6>*9U!O}3+X#~+AMav{pf$*1GHx_h@| zllaF&^Pk!5?=^g@1-mAG6pU)zaNi&Kz9U;zz(W~l78De;qh^G}xCy|9~am`um3WpnDfu@Q9KRu%|+28=IAw4WqiUF#q`Sm?BQmQEKI*joI) z&~RXDQM}W|ey?U1hpBJv$b3>g^=HN4`F49G5(tnextwS88}x^9pnj~+;G{W;Io+ks zJ$6NiYzl@0g^2s4q`WV(yLNl;{xGQj{lT7+5=PwKF(sH@*ygVhzJ1Z-DIGh>m2uWO>4B%}s=?}WH zJL*Dzhwve{Alee|lQehLAuiq>o&DihQcuWU*`hL#e1}>?G;b8B%$F_xFvH+6qyyq~ zvo#FQUjgGA$5pYa9m>pvddR{rvdJgO9B~IT1tnqbdwXOHje0bUrZVxUH0qt)+-ZUq z>O$l0(UwHgJ9ztx4R9tpX_iy1_ViJYps@Z7LrIJ={E@W8#F7I$B-?l2a-*_CJ*~eu zoUnIk(Dii=$C^&#AFMV}grcu#Z%1;USD!5}t&#!L0*pMK=vmL!&SnNDr)}y^IC$XV zo+V+Ia5~nnZ94NUigHc0O=dk;?m~cx9tiGd$8HXyz|0q}7ntcXvkP^z>ijeSO368*ZB1Cx5AYl1F%p6$K}d;=GMfj1Z>Y+>USUD6=ox9W}`}FTA*y?E$3U)bT^Rtmxp~#&)P(|gws5> zEMtoZg#gPTm`m}`8a3YVIP4`OXRVyNKjPMJs>vLcKW6y*3L`AgGUg}G7&d6dvQm;&rp={$>dvY(V zXijQxT#C=my&U`L^_lZ-`_dL>0*4JlLqp@if>m=wYO3U^`+1A0Pg@#7C=O>#ql0gs+gaFr&T&i5tFQvCAIxV?cE(Jx55FuVfC8KAg`v`VuLgmCRV;x8MPfKWX4p( z<*r1!^oy(KgC2^3(e~$%NwrA$rCGY?FC@0R5~`&|6C+m>_qo~6sBzk(syxcKtpqn2 z5o@@Xr|vz|y^a*HEYJSYIS*PP(phZZh|;Qa2bL;!aU0GBmvRk|YE&UX|1nWkN$%sM*`binROe3qgm@W}IfTl~JSFBWciX z@+{2}H@EE$L?{+#!r;E-A@gyzyjv#{I1yQ@Rq=@1WV7B93=!WB&0X-p6nsv31THxx zsRFY#?RuD@jSYQp*5oer7+-6{hc9#D)B7AvvmUC|-vJkJxA-`MAnQywvMwGTi(Qb@ zc`Tmr%2b70jYkGZ>wLXcF!@KSQi6yKEiG^=mLwXM@2wDNNtb& z62vN0b4yIPyX)dW)%U@EpetDv(obU%Yk@(2HyCr*qO|QxaI)tzvux@hH;qauHZnc| zpXkVbtlR%$?>(cM=-TjKMGzG!qJq+;N>{4%qVy)c1c=gmr1vH&BE3es0-=S_LocHA zUIT+`*kzynSIY>=HC1MUDpQU=^-DMc~h8_NkhZ4 z;=&|V&a=aV`=q@-HX}WN_h7MU#lHCC`)nb)&SRJPUtwAU<|_R%uKp+2Gd)iT^u3I! zd$4vbZ?~^(qXXahxN|qr3HGB`H?UJSgi^N;H_%b62O$|X!Yk+H@6i0bQs7LjGks2l zv-8M~{6ohS&OJB+)Sm@tDn3$`vMe3l-+Y`nlZjh!)!kV7PMWDkCCtDUK*ouHEazU_ zJsMjiorbkXhnIy_I*du(>l&A}rh`X}1kiHIJgeOUS?3>!&PpL0p_ zlQ2eBl2q=q#L-0KM#>xKCes`xk;9ClA-WHq52(p|c^`j4QhN@oJwMG)tv6tytH-Ga ze0LcgGsAvxyhm|Q(HugRe_gn?EA+$lLh8yS_P3c_OSv2?*0l_EZgwibyI()G?H+eX zGaOz)^}@uPY(&Eh_+F(}-LB*7?8dc6Zp1e?lWtG@a#y|PmqHxwy!QDOyYJ(%+4=oz zXkBdN0^6ZZ)K%cqS3&ON5>Gvt7fw!wE`t>>NZ!?ClFiYsM^%OsKDiie_GEJ}SD97V ztq(!)8djPQAjL)ehUUCCZ?LQw2|`rkov7u+yz2wbV*|VixH5oYkg#BKdVhxa46!$9 z+A1Mqr+)VL;?-QFqpJiaikI(Nq3@RbO0@iWbhht4+Qu ztkN4$L;fX2t~}>bZ?*6__i#T*dlhWhZ!QvGI3T0#&%Q0%O#uttsZ~pdAV31SXOr)% zQajQPC>JYNOpYeQ7w6tV(_CGM1#L%z^eUdk=p7Jnnx>#XHKL9bA}WF$Mo?#LGF zBbZ>=?KzrP(;*0`nMhJV>_O?xXgCY(YU?Fdi9u9^Kh(|3fr?P zh2k;~#3%YBBo=M0<#Oxdcr&vONB*FQWzjX4Yh2fMwJyO#Yc2sb_kAo<;-R`aiJkaZ z(VkKIo}na=T2IZKHu9P%e{DGTn^BWfCTF3(w^YK3!2|yi@fN}CL8UfO%lq1%S_?>O zqx6qv2L(xw1ST@OsTIY)=v$+|p&oj7tEvoGjCb4mxEbvc%ZWu@=80d}D7jh-+7G`3 z$pv4%WX7W6Zjd4!Uhj*z5LbM4l zbd}wB7TK&XM$-wKWY8u2uyWQe$l2#HRsAyf<%)Z};H)sKP?V7X z#G=8-zu7BzKxIec;y|l^#>-;_YqmEAg-mEP3WS_iY+B;i8&tZ=Uf=z_`iWVc(?o>^ z``0I~WeiGrF^03Pm#nDW-W-iXn7O3ebOl2e=mUg8sRSbg-dyNlkj&0bAWxb>61cI? zcJVC^LqqaxfR=<`FrKvMX1;yCl-8>a@2{|Ndkx>Mmf{|@yd!MGTJKP~)O9htU$|)m z($@;K_f|gT+Vpnl60z}X2!DFB`z@uHAkWLHp1zsr5>4CcOLs&wBpv-hFC3sahxYEa zwKQ0+gD=XJK}n$ro&dbdZJB4gRN7=`925Fb35InPujeKF1(1B?oa#xYbL)_JOY^e1 z1i7K_bNcLXHGs6VMMV=$-0};i8ZCKl#=g--TCxAll0#{F_5RH(jVYgsjX^?^*4-{9 zi5|s0ua!5b?ax4PDajs%`43?L9U`<@}Ri&M=hXltb zn%ornM=pLbNy_HTCoft*tL$H4c7Ap`9fCyR!gsnWLCeK z?&sg)5Qe@z`RY<`stOB`Ty&MMO7!@Br&S)ZU?Ux>bDJ%ta`x}myk=C$aBA~+ew#;P z_f&K^&4PqsRLkJale4d+k1Lw0`iC{5thGCyR%eQ*DoSADYsigUrw2U(s()C~b+)*ST5`2(Pb{>&i{5t;C5(Y6QNDE1y=}diRlrTj@#FIqtCI zePzNm0bJXT;-ZD$?5A+q4X@)h+vU2UefpnQoNf+}YSBjNCkt7M6I7^dEtUjkd7665 z);{D|FdB|}lu6DX6Ax9n`>b81NU5Fls^#k(aK>IazBXI=)K|mB({aGMOaII?=|G{_ zvo@m__UT!4WRK8J&vo}7BJI3-Z9_IF-J7qVpE<&Y_@LxGCe+j{(GfRW^ttDf4og%Y zC@#*sUnID(8{*(THdL+7Rxa^@VIhIlTN8N;6e^ojuL7Pu^I$Zp-9+N?ny5b|%K=uW z`JZ;>JLdHld{*MNDgh6uV`gzpx;!d(LddQ4?iBpVF^k-%^J3^8gP?;4!QK~@qGBswn83j*PH;Q~=+R@I#`9jyT1PTAgnik?l=yl9$V3=dRuDb4ukA7c0z)GuC;3zLXBI4I9ideuN}+ z&BezAfkk>P+2ud!1K!4thV@k$k#n{hlkCJ_F|NAic*>XQj(c>7>(-NVCcKlP?JYjCQjA)AITu2Yr08X2dlSu`9~`Kj3h!PSy+{< za=W~XGT&aihHc(RiW~rWqqjyHuW^GLl@giUPkm>s>RQKT>7!u7aUR+=$swqV27j-^ z1x926V=>G2gZ+mCPMWnO%Yp>Z6K$vA(*kDs)01BA>Lo*spIaHp^{eq}MKrUNv|cJ*sj1buvs&gn+3wHIKe$mbm^^?oOLk{k?fnjb?>-IcW~g2mmL{5+ zlswL&{GIp<%z~?I9PEO+UuGQSv7^hMS8iC!`x>6r%QqI+tDJCP7*`|RM!AOGT)(z6 zHvY4w!XEL@X8tCNo=;*DQvQXvw&EX}f(I_u)B;EGb}&a39){N!zFza$Q-zXt#nSIF z=kH2pxHM&2x2>^-MV=g`X6}#rSaZy`Se=G=u5(GnY4DtKIuufP@Da&aeNtPUyp77e zL5EQ<7hF5o4b+umX3Jwg>QT{{fuN2MfkjR<_O2o<@2xv~7Y)HDc2rIH1W=3Z!8veJ zPj|bQlHQS5hY?a(c$ecv(OsB0V>?>%G{@ef?8ztM$nOhY5UREAm6R1r;p|x{D z@GH2uipx9WXVc04+1#3Q)N2<@PQ6FN#hddPatI}w2xcr)2FEW z4+}mX7}$p#+7|L=nhP(pi62UIJI04*oW|Zck4jMLcF)?jKKJf8PW{|b(v9RU7V)N) zPo+@P5mM<;en=Q-cJ+iTI^1k>qkS<_XhiFlakaNFq3pmTg^U}F(^E)?LZUCc2#BTM z-KVF!!cvb&>9p-DmJh4~E@T~U^46z*#1dKsw(krFSgdwBJdhM`Rc)TbhwD3 zZ&AzXegOM+9mlpYbP+l#OfIHl6et{7sDbq+@BT4O|MO7`22Df?tu~whGksH@0%)~e zk?eyW;AKGz41mty!h$>$P2-MV$Fcc&}lIyAFjil@VStzbOd z%O~5(M2@EvUhp`4$}#PD#X#UPBk$Akx;j#K!!d0_RtwXrvRg2wMIuE^WnH#*w$8sA zo-473cHa*C*-TIAI9)fMRnAV3nOloZ2SZKABi9p@hz zpTOd8%b^tLJRM)4HjdzTpH()&42*4ha9GNDm$0m77L0(o7d-nP(5#1MLht!s{D55F zTnZPFAGZ{!cso-n=fKXvUoqTIUt0xJhr#wUIsl4nL&Y|=_Mp`(aJxPtWTjuB%UlU( zwYqfgCa0mM>O*xfNfhps*<{9RZrPam* zQMq_DZKK_7uM8TB+P_Pt?;J?t5rCZ;$QS7dwp?AwKbrEY+4FsWJj1KV@KO_hDP4mc z$^wapkn2XH!TupWa*1Fgk!Ry7Ogh-=adOT?*w}Q{t~fve+O9i|F*Y|)nYV^;bjQGb&Y=Mf1&-ivRHg4sIwN(P5dpY34Z)7LD^6h zAo#=P%~JuMcJ^GQ|Igi&Dlc`CR^4Bq)GpC%CI3^AlZM?P>wAR$F>I08xp&|K%TY;A zq9Z!_moxiK8Jgi`iM;SNNGT#00g9JyJUs6g?(+W&-~EwYB!mSSym?{&afNLAwQc!E zWQR*k@0R$d|L9wc7wEA_Oid>s0{K%xWg#b{Oa%U6-m9)Y;q&;YJX|iS;Cm^_p8)~L z->s|gX!!E4^~#^Y3zE)NRz?a;J_xP=g$+JA3Ky2&k`O^?= zrv_*%j6CT%{+|C;6i}xW;WPN#@bb4JL}zp7`SRak_X1IWs&IYtZ$qIV5M#R;|9tU3 z*ApZHoP4G8mBgP0X(TI9Hb&HwCjPCbK2ZS3KAML`e;e{q!1WcnAAQ~b8;lj;mVagn z!TxO+12in^$Q?-?x{D~G2oX6Fj$%4LD z0i>&1jtsCXe9Xk(^D1*OFKd0o&=oK`YiRLt1@l#u+XBkygj6VmC%g}(Vv?iA0_!PQ zPtYgWFw&we`}1S9BfpxrFSPP2Y~&s}xk0WO39W=&kKV;|1;D~CB0}}n&HcRJ6}oHM zPTB8TEzqUj!r0xh#Eo~MNk+3f7Ya5j!UvC^e1ifDjmCDD`&I^(4#a(+(lkl03tQdh z@0|KJKZnOE{g18!;+qc*4dU#DGA4BgsGmB#e8#lutpi)$&8`{GnR@`abrwJZ)tOH# zZcKlL6)SVeS=owH2k-rR z{DOT~*MqgTajD$O2(FFkCKe=QW_#8jg1O9_0}7t)!+?TU$CQ0Mm|#$D76+_( z+e~)`Uw7x?YE!m|c?kad7QA=0XN+KXyap`v!An#FUz8H{@ zOcbrMEk@*OK0h0RLjvVp13~gLV%5K~8e|{fRd?#SD;<7mASWSK4J#cqE6bU>^Iw{i z;!e%%lGcYA>N1ekLe1-?PT`XzHEK;$bvmT&OoS7y;F@SKQ=3VI+Lxj&nvIcc*JS*t zEhbBA3#*rz8R<6YCFhMZ=vLhwcx(<0kH(7^PNu;-^#-z+2bYxhC@2&!eB83)^9F`{ zxE@>K$`jtps}zEpNw}@50Skn)QAt1z`vpwF13c^0gEM#K%g%bExj8JK4+nGe6L7Uk zUT!E*ctdr)PXnXU#h*KI9g04oTpUe&pYZFMucUl6JFiqGYXq%2Ps0Egh3$W#qh+R- zRbq8v<__qpXd%Zbl|=~M_XXIs-;7m4zq3&8aI!1q*hY-Bly+)gvG3aKlCZ?C{`ejj#ltJEIyJz(-B2Z+K}(f}7*|v^W6;O8i5mGDc~t zUD`;A=@~amJG_?h@y$B-a>kF=R{qB;{0@;+%GSKCfIY>)(v^*|x&}+b7_Tp@d2?_s zHO6+p@}R(jh?s;iStz5=iG7jTNl586S4~9xsP{$==&>MoNWe-BEgPHlBG>UBJuSn_ z>wvI54G>KAXjQ8}BRD-9PKlgyr+7Fc&rgJNm{OCJG{sC~e7%J9c=w;0v+z~;ChMzQ z**_i%Ss(E<{c?)^u9WKvibo?kq8gP3I`!&3?WWS0y?olxeb?KTmsW<2R>)}P6|k5h z_0wbvj?WM5yhpY z8Sn22ZM*PGPK0I-tQ;-B)13K;ra4bj*}RzPqmEl%ok@=BiDB3W4-0P!=Jp z<-$nJVu=dCPN=o*L^ONHbeRw=Z0-)M7?oL7q`1)0-BIQh_m)CJ#zvQ%D-+4b`JK03X81I}1ik;q zo9#E{M|5L!!E+*kX30$EwPhcN6of%Lw^2NN?vD0w!2SX0g4XbYy>hqxwvab!0N=m9vZJjeS$WgzQsObMDR!MhClUWp+jd*A( zxo|yk-Hh+LwbYfoD=Dv~bRS6Irey_i4k5k6RNaurLI8B{RGjNk?_^>)^J;wiisrv!lUx|E2GIj{hcBP(0~2#-&6j-JfL*2@QuB{cOr7X{b z+llW3rx;_qvi{riGUNRG%kc9CV|MXgsQ8Qt7f(;&(bC6nB7S_oRpWc4jy`cr`gs2* zKNu(dh*~p_$8xy#+2z;Ge6sNOQU8j^_kIJ3C7&FKy8pf$uLN)2Xl1i{X(TTs=tSl> zQx&K8e`>}5Frk)r|4u?;AJEj~bIC=X{~bMwjI8gq+IfjCV@Jv@Gx|T7J)oFp0n%d7 zaC_O`G{He0$hWQXof-Zf1p2LYa zgbrMLrslhVU>}aW^E+G1Q-WdLVr{&Et+uQ2;^9qxSjq zc3T_U&;XI%U8C+RlKEI6yp;2X4g^n#QlujAB4m1cX1$A$ zjooE-)|46N-ynWmvC$+~`+RBz)6Gx1>EqkAkNsU>nmOt=`en&#s$YA99>Tl3NwN$; z+B`h{OPfDv8fUsXDmE^s+mD}ytQSwoucLo;=}Tz?@{t)&E*&tQbr$c-TcCB(N=H3^ zYR&$Xx%>lAu|F>_uZxEZqo=1Z9Z`er(x9Y3K1BF5@Nnl^(K~qI)p75ms^i8DJ6# zRT{DC+NH18Z}&fish;^n>5P7JKu37H7*Y5Y1!;`x97TH(|ov+od zqJ9G37k9`-a-x0b{YI9bOYF55xvww%OZBp(Byr{EfS-zBenHOFS9XJDS2gl8dbzkw zPO=*g``PyQiK11OmG85N7ZrNCzzeUMe_tO>id6#l#SO-AxEO(aST$0)0U2wzIqA$# zq->-&j^FTNk)lB7Q77l3?zJ|@RNj4w`_odU&`3~K4;TlDNZ{5-!F&3*jk?2*w^s_+ph@wW}Iwih9T!a>;M~(`6lz`JT_R+si!-x@};;6d!mJ?b)kON_v3Ml1$}0csmdZ zv9jurk)fFr@sHAAO^YLyN@bNQnp#52$_p0oW-Htt11m)hCZWPz{if8+x+nSR)C_Fy zOR$DCE>>#SQ=Fb?BwYA#2{^nQQ0M^Tr`>scz^3NSy*+!;k&|(`<;`GQc%2XcaO0`Q zv^6XQ?ce#bg({zZjVQYNXzaVJWwj780Ks;KrLOj+d?j`=b*{lS5OZIuDE@4RhUJ=% z=TQ8{tw|UqhrOkel6q{l)aS=jo;&gOp(HUs^@(E~>km8eiAA@}G;>vLOC}HRI}X!| z&-2x8CfT#Fv&hY!*_2m0-iJ*Q#}cOkCpc7~tI;i{9iFp)Sb(_tiGZX^BV6zom5Vno zvFS!nu46qm3vIYl>-etHX{fdSf!}%CxM|RvMfZ?p(V5GP#-aV6?@BCUoCbI(k`p<( za>^Ty_U_dhh1{M}P&uG9tTn5oxo9NvZLC`%XS_28SK2lb%t^bBPjSOxu1WtoW}DR# zn>Ab-U~(Z*_N1WD^NqWp7rcl~VpGVV(hcchPCL49%GT)Xk@Sk#&h&WvLBW^6z<^yF z+vz7-^)*fVNs&dMk*SX8=FdEN@o|E`>g4M@?XoFHboUqA5yL7W>ME#n+WhQo?eAUj z!?n-tcX7ZHc@KoX7SzZC^+DPzuMfkPYboajt&aFz=C+vxG&qU9#y`4GVRvSSrUI;% zMGGi@vQVWRZcldgnB)9JPwa`GFbRBgT*+MVbv6zWCbB?RMZ}$9y*|CHXCJY)XYiLd z5^!81a9-|#V&C2YS@qW3bkPB^8`(&cnR1WTf5h!>M=!73dA>9_WWL|kS|V7ZnlLm@ znizcH+bu2#LdfXt(iNOJv@8Y=EH|H=J}UPekW4NL9%1OSml;V|ceOYvbT_qMX*AkN z>Z4LQaVd}qhh%P-B>I1c&MAlZxGzPemc$BiXDw+<>ujDG?}>3Ow+0tQ3`)CBd}%7TSSPK!F!WiBVf2iq5x7jSg(yZ^Y0z z|BT+Z^q{%dx|cq(>J>-Frhx1ZEMC1S#@b`Qsl-2HeMVziv^aG(J&qb^oc$#r>dEtq z44cW@bgn)CHEHzOQ(NT4Ytv+inaEbGhey$gJra5{Kso=wC8Sey_I-7P>2%TZ59ro+ zai67^>+s-rGsIIfiO7`c{Hq#(vs+{M!I;n6jK(*~o_rW?;V&8+GYvDrxP@5|ruZ~x zeB<>2o4+8)$HQrpfE3AC*pqKhsNCVv*QRci2gsybpsJ1^E z=5rL;Cw{>5SfPRw)~sM=Sw60(H&soHt~(giaKcp0Rq1LI+bMM4!cH~{w^xT#CcvZV z*fxb64)I8O5^`kF<%yd)yR{5In&)dN`B!-kjmUOU3}ZA!upf9MVLlNCcGT_AYd{zKzIhd!pit*=E$ttoT_69+kaq zc@jOy3eyP}yfMoQs@lb@mR;Emu6M#n-n9kwoj>ev%!hMdr^uP|C^D^gw=LNeX-4pD zgKXabo*nva@VQP=q{SFoZC%fNh65#QySY{(e4B8Aq{q={HBunI>`IRl&DOyycHxfR z{jtq9BQm}!iX}_2Yn3EL_eY^ZkQw$cwAs|7c!n`(-k0dzX}_pG76IngGx0GL^(`@v zB0&*zj_$?!l#J(o9a-tr!>nR~JHzIY?}Ebd>a>z)u`4;%af7}w$Y^wg->XYcElJ^J`|?gekxxH zQc&AgXFF3R5zFOQiV+@SM%A(IB8cPHA@4#%H{_~|waA7V&_l&gF z2jc45+dGsR322y)DUNV`Jsw4V=I#DGLRB4axi>vFVOP`K11&9M_nvk3HCcK3fySNG zGtKKoPN!5Lwkiig4~23v-FBzj=iaaLdQtG+T0HJI)4uGgj;3OzU%z&f8VNg<-0o+4 zG#@7&OCaL$74cG1F=~^5S(sg?-g)c$hDw-H!J?|@`sc`b*Q=3z)Pr!i&Tw!qI&IOi z??FNWFL<`T=McfRHeEw9=i8GRm$1-?^!Hl{%k17jQe$s^DQT=fl@j+EAn?pPDlm`qJK(_A{gvVMt8u`9Cv`T@nsR&RxZQrayrma`d28qSlOVQmlhzb%5hX;D z7iua#oV&l;t~gow%JHjmYSH_)OAQpyO)!UQN9EbVREGO=W|lmsBoTN3%G;#FCJhx=*VSa6A0XRa<0F}832l5WuX zb<;(a9v!$aCiixeZBuhqbKrRo=P<&Y(-vl87)!-K_fcXibsM)yeRnnWrKW#{vIs3d zN_10#w!l1sFSo&=BdQEQYP)E*i;?qgfT#wyLh0!Z@9kz>bdDKmLU+4}Ho2bCfHn_$ z0?!(IGjNSj57QpUSBk9_%t^-VSbd*b=elHHTNDfLJ7%L73y_T)$n{#JySVEe9K?ht zN3rBKQbvoqeK~JFu=XI?biGc;#oSS?%wxZdDBhjPQWceD&b~AF8uv$dr})PIkqo;qC7Ro{NZk)iwoR~7Z66qT20U#;J+qg)~)Wc3Z|fGe7^OrQM; zqKx4Mr2V?5San*=dTP>MiNwR9DtCT=Bl}1$<2w1G9zV z#ao+DXDVnR@w5|%$S&S1M{0x4q#W(?r;@V~*0v*}2u^B3b91LHgNoo*`*8?rPhV_# zDAeg7!`L<(Aq*ccf+EB`d(6?W#3>!PJn(Md7E7kBH$?mpejpA%Nmk2*FOF_(JYxpy z7epqO$zV>DfcteoSu*HU_x5HlLU3)Dw|U$BtI?~?&B8u}ocfs^$t3L@DlsENhee2!;#>H=>?OB7Zby-OsN^7{L#wpC~T<_9}rpHu48+ml}5(qZ?W z1^OD`w^c}PbSH9jeP!y{ZxF1XH=WIc`<-BoX#-1pK$rO*+LIF>E7x89Q`(PU{s)+- zK`p3j-?_j0{C4?$d(3xa8_~<6w)T`3!o%I4%N6zW`2H@8j)iwJL{}KM1$-UZ=G=XR zcZuA#vTQ<3n@>H0J&z!B`mg6~U4Q+0N=rE`vbaFmuv@~`b8?F5kDBonyixz;V^2*` zqVv|Vl9~C9{kSbN9RSps2|UkxTz2tra82`arxY=i|$X#iTjcJeQ6a29UTJu zgwX`+HX6>8K@jk#QD+5;AiqLx5DK`*3U@KgGtzm2YW!9`P^oS3CaTn#e>d!Bzjj|ll zK1ZtbXmqcCPDYpvp~gUDT}E#>><4j^OUbj+Ck@5?dHzVOrKjKOimSs+W|I#m!o0hG zBk+z-e7s?uL5C;WU&L*xW^`=v?LS}DIBl{T&uKTrk= zuw|KD*`kM!6=}DfaEH_-htZy8M19E#z@{rj3afFlJ|k?& zcXZBNzlg&Q?8H=eXkgkW)6^9cdNAroE3x_~{F4MDbWf}E_WTO6NjCh|ntS){XpiEd z799otp}qE}_;D03I#$!-&{PhW+Xdj<&7{5_QU0DO?fP#NJcit)mm7v91YfOJJ@_!6 zB$F-su$5a;5A9*4GCd}hzC~Z+W_lYC(bWK6_fforuihUUx!S#c+`sNB4g&S)75RX> z6F3+BJwz*=b|NRc9jtj#d+C!+Pl&Iw5n$9M25k2VO}tIptG`K^KJ-1TVCVOPTswuE zKkwg=UaCOLErU%7i85%h@!<3^FRKJPG4nCE_}e(HLdRiPn?Q*P2voorfJ{yq94a}yV2H08lDs(7Ws^Wwa# z!b(Q=OAQe|x$ix1mHv-#UMOzk$iqOT^)Bfg?aNoTp7yqxO-l9Th!?w2bM3Vj(DF^Y zUy%e|PTq43y;bHRFA(-Tyz8KC^737QvOF)B_#(rZ47YBLa*FI;qsZPtt&JdH=9{j@ zaYKPKT!J?7sbv-9;emx8@T-Gh)(d85$H^_ypkrqZqn>)3ojsV|?iA>KT%t9l#sfuY?co-?#mHCN|NO&o8`gMmslWqrdrr_MU%5fTk@&CTuz( zQv8PT2A&+<(gbv%@wm67VUG?fs;;?}Ig9L8rlqcYeL&*9F@CgKsFM5m5MJZB*chF= zc2v8SWWLANu$#i}bhdkXi9QykX0wVG5e~Owpmm>@T5phM=&1GwL;at^2n?C=jqg9U z?9=z=K93u#hxwj$Ht^`>pExqiRFj6k^+bZxWW=e~-cM#j+ToRz}P{J+!wFUbFUr2h8< z`rqr~e=o=XeS!Y>z5QQy@xNT^|Fg_ddhcEh?(*!~tn=HnpmhVXf0A1KTiW07(u8Nd znC8{Umhe?O-u{!KGQ2dvJ0X7K(0s$?7Tm*t_n*}C20rskva3;!pBdN~0w`qvO`gA# zbv~G%IFr_vmQe@FX3WdIlhV~)F8_8E^o;;7nc$faYlj(0xWs-6-YpkdPC}*Wmg5Ge z@bfky<-eWWgq!}n$N|2D*k0liO)#1j2GpijwHWYnL+ zpLkII86hySh!8=lg%BKy9i)40)e*AJqSu6a9Z0kpJHVVLl6AB(-WMM!!7*+Bih`=^^Fs zfKY0`>h;a+X=vl*S>Y*l#3y?!k7s#pa(qtW05Vx+uaO(>;V`b1;kC4*x_ZJ2EM7Ca zQWnPm$ilsX?bL2C5ON0JVE5E&r57)}s*<(((_%q8zQ(|wHH@SeOSx{|nP;o1<-U;0 zhRc$?VYO9ayc-Fs!9j1+hO$3&?=9ZU=$wdVRff&q;@hZuG<)`|w2(#nlh&i4Z*q4G zs-5Az8O=IbR0_(I<(A8XKh5_~Mw83^SLwXBzKZ3ztrJn_3}i^8o-}PNajjZ5;cMTK z{_=nb|K3ui{a7z}DVj|^o+FV{rDSLOVnjs;Oc6U8bBa?x}V_O@OwtZ-P~} zT0(}iU42iyhTS045~9dNI3YICND!W9g2Z80wVQzr)KNXN7lb*Q7j?tgD%1}JzCeX> zzlIj~XBFZtWYgXBDd0hMkj6{r?b~Eymg0>5VKS4eO;+Q3)Ud65KRlMmOPdX7{x-lwE-^4mNy$x zqx`lTdaz5+3)~*pt7mEN-hb#u6N4-}`WwlC;vQxlB}0WOVFRS#K-E|BfWY;s`(C-= z{!GKJCil6cilK zi`SR{wx%0cie-Izw#Z{}w%*EovZ(^;xtw@bdzSRmG^oO6opgT#MDN|wry&pKgsCJZ zts;|8q^BQ2P8K_&H^Z!v=SS($FywWB1wzI`R(SyG$=|c()bTqSo4UMs6RZ@z61mi$ zS{(avmw^t%Fnj74Q28Mrhy6v)FCAMwQdRkqFmG_^N-HgiWpTox)mHxuk!TdgSlx9(%U?U_J2w z>nU|$RK%qL@IvH>)&9V9>!PYJnHZGwmRCc=`RUpIxr%v?9^%dVNOpWLxKfri-~<6d z#*JK_@$cgWlXH>1R8jY!V_VSZu69jQ1omFP@D!A&uS%Q~zu-;g11z#VSBcjtaLwbh z(8i~POB&7IFB$E04p!7I?ULTT*GW{Mujv!}DPU_14!|yji_X7+MbLP>hqAGY$k7F2 zg!Yge+mT`MFgU8~f=cJu=%pVu`YRioN?(dVj1v_Zc6Vk>SYM5L ze7SyThK@Li`<%cW=(F%BOmzGfb^*S-kv^wY`xD(lZpz)-0|`cFW*#T&6zgbyAf;vS zyx5A~pGkvJJuqSAL^;Hm)Mqc7HWE<_%=7UEVuG*n+0XLTo>kqU+=4@c1A(7s`nR_% zaLblB-Tk}{`hA`iod21*_xj1)TAw1!?PP!7s<|p4ZB#l>?}fW#*v?~rACE&`r>ldi z64CD4)9vMF3J&0 zXw}AO2~_m)-q(7_A@A%lC1EI$>;~a*CUA$L4Oo^h^ zrW=Lj^)6~AH>1P~T6CQb=bHIU8D7c~+!F5$L+yOAaHO@Jt^AtVE7_SSaAgA4@&YYz zk}6Uzo9fDa#b)A5aUd#V?P8WTg_s<}BG%GsXRm=?A`*8n@^{QaQlyTAg=sx{{Mb=w z+iWBMD$3YP(sZ4{+y^E;f&LKYKzTk-JPCAJ_gOrL_wFVu&uZb86cnnGpA2jWMUa`|$B@?2lrM(F?8{ zVWgd7*?N4_1)(6N9*^pxFdi67Y zGX2Vp4~?4k6&w+gTokViMO~O@nlNzw%za#N9Beo2M!kLDdY9LzFJYekBUb&;^|}6|lqd+*(^32T z<$4cPS{~vtrCQl@Y3D{XpP+LSd7+|F?M89s%9h9?JrWgA|x>luh zgCV9OD6*$4NmE5=hX-EfDb!q<0qI`vYyZi_w&hsoc08e3@WAh~VK1R70>EI6S=BOG zN}^5_SGbMX1HHCPFQ#*W&F;pE9`$8W9gh#`cFYSr8$UI>Ymds$fTJcp-5&@HB|MFrqA2e`?9lhMsnr_&JZxn$~!$o9BaqP{Z$X#2v@HPzH*Lq zFrf%B@6g-SX?9gohhH+@L@8}j6kOZ(i<25*MRTAvE-+vmJY>I#%)T6X zY3us}vsUI+t6m?l2Zn+3~KgwZ`+Z0>hpZ8tJzts+2F`sik9@?LsUpvng8L1 z3DOQG`Rx@#l&M&KoAHQO=Ns<|x8WmQxL#5R{Ylt$YfDQkI`U*zR&yt?$ukLXl>UfE z0Ms|)H36J3?l+g3p@}%Yzn8t@%iVO-L_SosQ~3Xr(>JzRmKj zT<|Wa|LwhhcLrW^Lt4L4D*q{0)KMBNu-9WL273zo^ zxLoeilOyWID6~u}FUOxAwJ~w91R^ z%fvmrtN8oeZxSUNF&_e)=QDAKDVX&!C2|e6o+5&|&5=k;fzI^>MBqUcZ8@+j@P)X7 zl8xehkz5ULqace#KUsmbwIO8s_U_4S62QYn&eL@D;3#&fd?B*`X(A`dr-P$fG z5>|6>`Sl0Mf>KU#Pet=f3P?z*tk#d;y(qidc{m!+LUhkaSZdBc(V2F#QDf9u6l`D0 zw-aALZv6G_c&4P?apEi^>ifYIcpB#EoarNztX7Gl6?<*C-_mb;2iwCTB`h!!8tUfJj7L7*xsiA=jfd(?WY8J^+ZOK_Cx`*D7>C&d7 zu{#v=20rusntXav%_G>W_+pfXc3F#FTS_HwRS%z?WJnM$B{w(cn%Lf7Djph#Z8DO& zf#i_5;2rv&M=$T;!7A@F`gcICI*sW$YJiqkZ{9eIdU%HSf3^3PQBij9+pvNlh$xMe zfOHFpbeKpDO7|$;-5p}l5+jXDNOul1;4L|nbceuD0}KpZGtb2h{{GK;)_Om@>s`-U z?}s1Xn7OV!d!M_G^Ei)v?)xOqF{$AWbU3Ks_m^!oO%3KKRQZVV!;LBqO~FH7|xoMAg{5P00o8gH?-I zB~es|FGb4brf-K3fKBYqWc?TGI1(oTo|A2RJy^A@>`!0k7@#DZ5^KH z;Ai8Ck&*S!QC&Qr`icVxp1sNbHi7$R%xmPMLLk8nOD(6sgHYt9D}5ydkA{0FDGhIC zRK?Y!cIJLJ!<_)7O-AVpUo`j^Ubqxz`y1U)(U-m{t$y%kL4?s&`@4Us3`M|MbvDxH zyY#({%mH`#|K$TLbBY}sR;y#7Lw z<}g=Fxr9hu;hhmQKIGhzct^6c*LI2O)15~gBw64xE#JvQf6l54(jV(yM|VF~wF#>dwQ{5~kWxiKc0#oe~x0_W*AFrOx(x*ej>Cw`Sc zvNh~2?CAv=aTP*9A#>tob`c-CUPQg{eqfEcnz4E!l<5# z^rA2RKfWwz5F4M6kj8gVY1N0|Gi&SGrrfSaWa{SvS9P4V?&2r+n9>8C94i#kmlwzf z9O~#BmC^&kv^NybJ#|2<6gPSIH2o<$rbjy;$Ry25OdNuH-diBXfGouY^65_Aqdb3` zHiUV^G2sioi;w=>MqtD~#j}X8mR^0hvoX~=P+?=1EasFy<@!r|b&0wy6|`Zf{GD*` zhS_itWr&JNv%wRUMBc=Wz$H%g8ot+@KzYu@H>iAK-A-GS#_N3E%itE-Fzr@20r99i z-{kjw;Ez@T&&bDYeYwJ-T`>QZtg0ikm?|PS8MpARxWc(p*=B%SgEK%(1(dFw03A&2Fas3)D!OOf)oivM)MpJUvt3etiz5j#HWU0uXJ!Y!Xt2LW(M^Uib$FVjE^t{5 z=N@V#DG(;5f-^A|`pIhwAtN$s4ux3ojh;J^>=F{(gVg$bs}p;MIV$Z*l7vr^OXeuj ztuuFk!xnK)a6^`zCU9}-_0Cv6->%;2lSKzv-LYAEv4YNYapOX{S0+3~hW=A|nid-| zsT@b$bgKjKL?f>~B*iOOinzS6uu@xeCig7LhqKP#ht9p#LZin1c+mQ^^BUa_)~e#T zT|guMaqLZ|F~bu2u~EaBUa(41aZ<*#REHlkC~oZ6dy8(BAk4nSd==WfxVO}ZN6+A? zSc0DuGmix#q5i4IxWKhf?-h>Kt;pAR8lQD#+qI7Xm!v#f8!hGQ(k+g6OrP*Jtf8#% z;H!?bWxp-&9AQ7!Xe^g<-&n)FK`32WHNhuBx8s#8-5KWR zVU}mlx(zpnYvnL_UmL2~T9Q7>x_8vxko4aAacT&u_kGD+|3uvx7;1wq^2|yA^lVTK z2$BQP{1ibEL7vYbVa0RkhskP3Ug}Up9^XLz;K!Lp8a0NbA6MFM*ktbDU}qnPVv0C| zjyJ+IWMx$OuN)1|;IT`ji3)Ewx14n6bqB@VC6n0el3Qo{6 z6<+OIrl6rO5I5Usbn7o*7Dp^OKw)!v00}YUiVl46tS_RtvDvc8GvFCIhOK!!0&pao z33|o9UV}%=2uQkZQmnd_gy(o2fX=Cnvo6Dzl~(A$`t4&@jcR2Mp~HH&-D=aH>Jtf{ zKi`vwE?e6CFn;NIedMc}sFJdBKV|>ReCk)zc5(UCYTH9~jxhNRApel!aXf04Q&CGDf{0C2ycQsbo0mGI^i;}l2q%u{%w6AXct!to zBu<$+3~4Bf8!EUf$W{XXhs3tXBG0nNIl0z6QTNn!f>+dajC!E%O*WzQ@FF5m)_i=8 z8RoNp41hHrovT^o@kJv&k1aUwWgJP*jp`pc2#TFqpn< zy3d>dFay2kgz%np;VhRoY3jWr3od}0%pHn{XtN3{K=Y&7X$IbOfdvASU=j2dw z+fc^jV31u(9veF6a`1Q^IqnzGUz~@Wogw(|+2vS0m>!mE`H^^U{oYap+*Ibv55W3>UQOiH`HNpDg40$A&B zhukA^rJw+H&Rf_aTdjhS9^^;+J~=gujX41$BTpGkic>s=HxdUYBJa8j)_s)r9)lzT zC?;0@s?(K?`Wf)->k0po3Oxan!sny`5^tj1M+LJZI~&lJz54v>GQKf2o?-`<>SvbG z@~Kg)Izm*STck*HjeC${YHR?Z$?=J&besNSC&OJ)X z#8M+i0pJV4m*!@!OG5g8NY|=`@7rkl$?5}A?3L+3OPfNqxr+FT~YX}~>ypK8Fsd6Oe@UR^P4*954`e_V( z4qzU0+~DjIbeJrkl%F(+2z58qR$h_d33}ucqCieWrLWT4Evd4&<`(lRR{%nKbA7Th zLY$?{xX^NjQnR%2=&Qe&8yvEci@Lt;@Xh9@cN8#zNXEj5o3O3wiw+w}$16Llrcnko zji>v6GGA1e6}X1USz>>3X|`m1<1PN#7Ung}UAh(zfxDxNM^WAx+n6m%A#dZC`%kqd zxC+-%_XGc{ig*Ps{k1i4z@# zMydi47#ZS(fu+&i7(t}zHbL|)%qPlb}FG^u95}af`yKJ$XSu~*JKmeR(@uTM}G%xN44mwhN?!1%Moh13aSeZBv zL^);t?$?8BS}d_{k47?oN2nTTFx$X7iq2tcFR`9;yf#9xx!i)+mP8HI*+zZbMzfSK zx@1^bBfA88d?h55lDk4!lAyM$i1-rbl63&si_415^<1L{z%K=1Dgc_jOKcOo3|lGm z0#O}FhB*Ao7e0MG4-*wV@cf@Z7!cJO|G@Y+&U6!idY|6plz07&GgSgF^gdtwtBy0} z1_D(#`J#+3v~E{I(g=Vko-#x*N8TQ?3=Zq?aq0-Ug4g=Ix%aB4AoqI9QEpkdzC0cT zu8_5y3Pdb^BOXzB-Nz2-zPSy=8Gc{;f550fWbWxXG6t}&b$|VC4Cy{u2p)BrG%rAw zOEv=?kS;MxRdXMuI5$Aufj;8Q0<(%o1771et(#VKnuLJWN<)Kt4B7roz?CT5WV16a zpZl)ie1vD>w^X>`A74+RNzT3cFU)3KOmNpjy#E{JGGxixESNVo-~a1M7@bSj*(;0EL8}5J9|gU^Gsim1EJ8-4`RL4@d?s>1 zSc6wLYRxrW9%~-TDCMtp4>f|=6EXkmaETM(+1`?Lna|d17IuHl9Q1OqSTof<^gltW zsWLT05|4l^vR^G@YAIu7eLDAOX`-^ef3?XUn2!bFXd zVoFiJ`trIyBMXt^vp6I8sU@7>ph3grxNAY9K#NDHFD<;wd`;X9*&Ol&IO1M+b8S|$ zWM!1iV=1k2o${}6j%0}EFah-8RY|~410B%NRo;Ybld&eiMNSG>|e;|ml|7Y z7iw)=3JuJyo&)yK)XYe@jxvN-pbxjBCQ0ViQ7aL2$tq-BBe^#8+3fDYtegfGn^}%Q zkIq7ba)*;96-ncP%OU)<{ze*RCKWrfu0nhUzujhx)!#|#oUV=9nwgXrreA41j*)-y zVi++~B_}K0iF>dG0LMHa%EyfocYu6XjOi+7E5!)K@3&^JR^~K%CZ1*1teZ1_7dA}b}=K9EMxb*BEL)rLgb)b%r?jQdk%h`>S*dJ3K+-&{@%gnJ<8 z2ficV;0*%F2uR828;_7Veh^O+Y!yz=?v=Z0(SzYR4zpmhqy4972#fK)qyuc512z9C zDryIY{44NCcpVZP#wc3OGT-nOe^HqUe`hie%R`y#&-aUPFTN$)JchsEjVv*7VM?@+ zL|teaNEwqmTte;gvk^eho!=}9k^8_g<5s>AWnCr|r4cK)v7DdV^RP7YX%K-ixGmw^ zv=NU~sj~ME&#-4lR+Fd>shbA-VOs!Gc`gQ^;Eye3X3ZszTe zA16@R6Y)Dh!k2%BIaAHC5>l@YzhxWVraMSdv-&_zx zq5$7C5SIS1bw9ai*3RswB5?7GD{#8!W50`}uJO3I;U8e&D7|<=ePp^;D>YYFP}Tpa zQ$HsV2JOtFY)T4hJT5Wn&x6Xf-4%GF&8vcwn_eskfmw8)fLFeJbrJDa5OVO~%`*$| zd;w&o^$2#|DAMV4zZ76_v*H0f468P8XZiPS43d<6$936ON^w=gT<{S3QtE#S4&S^ zR4seJoLyCRg++pX@8y&%Y+mEK0PO$D{tCu4U;y!%z@#|Uis^w*@*xl({g>oXeygAW zCS2jGC&kKsjd9Y=H|iH(4Q*1Adbl*U?d=roGVX>SE!2_FM_j}FzAC3<{}*0SWGB2b zuc+p}el7if>`m688@oVAo^!d-h0Jp|f0&xrvs)Lv82m(wz%CfiMoxD@Eh%J40NX89 zyMbBeuJ-R!l`%`|-plrqPHv%DksRyQu*2`|o6Y23)2s$z)I;I+Ra+FEO-> z_9smQniKE1&5Q(~_Qr)g?mf;nur9;Gwesirnlmm?*UQLjy=ncKB2u4OPHr(K>bw#o zcCW~X0^p}-(k#ccl_lRq05w~LuuSd#tDEw_(ZVFf!=;{)lpAHc=%&WuwH@5Hs7ISv zJr{dvin)2BF^{p5_Uxi_#ASc;ma&%pcae(@3i*eo40Yekv{LsLcSmPnV)vzt=;}2= z_?1V!t)=+;msH-h8vyFaBYUaOacOWP|8r&(e0}}ufu`wEbofdz5JQ_LPQGW~0#6h@pULMLi3lw#?Ci(|S@!OKnH zfsk9%+O*rvrh^xIjgkFTyPxG(mM465mjR_2+gNPic#rc) zBN~|~yl_^?bkGR_Knb@ z35L4CHKPixfYNQjm>pxG<)!)>&li(K6A3!2%~74jE4cQ4iQ3_ z`ErZ{F!UiISDs)&_f7lcv^KPPO`2LN5HK1lG}Hv#`0UYrGYx?vTOIu!F<6IzYp-?u z(7UL~Y}cIEt5f;a?x+D!%0mb4H*Z*vcoj@&K}t$-q^Me?hw!C1jx08~^w~XVxLZ6I z6d7SV6EawSG&5Ag1hwd!Iderju;n~+9=`FZild!ZSVl%QXi8M9ra-Iw zal@H12o$#=z26b{y**nsxk3YK>0MJS13h@EV!uv)7E&RqAt3V<(7`N#YaQ&+@H-!) zqzldhKWcn^OkgwhBg1~YK?TH>k(5{{?mg)^DW!}^63}?(Zm|T2m;jHZle)~Ve@!ek z`&s2XUnWH3^*;&wg7#xoPbO*|ICGQ}8_b1GCNa78@^H-zCma`#uGAK4Y5hor!-zq` z;GrEma0%GwaS{lk`pF3`kgO1(2JlkvJ49E&9~S=Z9%$>4ep(f1SnHU3RmEYPfr-oI z`faNu?eERjl0c;6fsKYbaMcPwFz-I6LwjS!%a5)>hbD1G-Gi|#Ro#Mie6ddf^oq+G#Ll04*)68jB$?-A(o3(j z(~HvZ8w*TJ*X|%DVRn9{+U*8jH`u84W6h*zvtI=W{np$2ML1q%@qX;JDOf6SJ{v$e zkLksJprRo8Is#e+?{yRF>PW&EBO(uMu9%P@QWHyU9)!7v`p z+^PpZz`6yaM365l_!T;eD&h_U3ed909ITH>3U+GIQz-CG{@bTYBf<~p;t$4>LA5#= zfMmeCvTtS3V8p@VdQY;b6>OB1HBnR$;dim3d@^ET&;GOzM11xbYE%l7qF@`7=k*j! zG@pLiSlQ;OZHbvVHaE%pZ0_8A(*_89~)m_;J5lBv)j`Z1IhWZi~*gqqlaoI&J2t3iGVhP|l#X z#sI~bAYqdW4BgOF%KFCkdoRV(pw*5Xtfq&(}nq z>bAdqAC7pR8HB9HP`Sry0;Ez=L}%Od;Q$YleYFs0@2sj-j|UL69uf>NMTkpu5prj$ zN+1neaJBBM8pmf+e<)z`y-mH@+2-ZwKjr2>)ja|}buFDF)p|_mG5LM#GKlgYJmW(W zTrBCpb~(y*g40miH`LnKB&E~b;qA#b9WQFXF)mVL?>NZ6QBY6<6YKd-pKHkef`L;C zrKvN5FpHujNLF4Amlw2 z7duJAPA@@8^uvWV;(BYf1e~j$HLDG`P>`GB4gBiRhdqs0xU8QUyCv?C)0RuuQk44@ ztxY~2^>EHhWD?F@W@}vK?v&{}P2w)9Uh1PG_1*&$SimZT`qH?pq95oTE;G2_*~qVx z?GwS@v7Lyx%UoH<3l-#HP_RGZR|mxmjW-lgx8Ef>2*5=<8Sak;KK|!e!69%WK}tfh zmBf7jbk5-B^3n!{n-V8n$w`= z{=m|Xunvhn8_PYT(FVy6zc$uN|0RuZAXNkpG$}YD5rJ<@kt}~@z#nO>4LH_5Z+hOK zYU&`od%Yoy|1b4HbnTu(EaeCKu1i0*nL|h+)~!>QT>66CxPli#1n9!QwTWD8#VpR9 zBxH+5810r@e>KG{08|M1QGWBH9YjVL;D3leb$Qt38)P2w!&31IuLpkX9&2IS*Hb<~h%F#>=ZQXu*C7YlN{IH!gvv;sf<J1Hs%+h=!GBR(BU*rG zIwQ(Dy|7in%kwa*K{?f>!h7^Q1}l%pEq`IT|Nb;!wg1Zo7gUa|1b84Hi*E06hJdV= zLmZH`(0;t8@+G2DXepTAq$c;}Ncy1ivVaL|`Ssh&3B^x)g}S8#;$BnT0Q{!9mTL&Y z3i&3#rP&IH(F|4Ejj@s(neC40Du_Om0CRbNITSO!Z= zx)j|(9njEu<`somqSZ>zo%{j^(&mXSb#9yh$$2_eZ~QjUu0_l z2?{!fXjEEy;NVoP5$c@1WF#^rbW?qkX|NjH4y0H4nJlPwb4*}FB3o`g*k}aS9;0cX@agJ9pSN0=wruv24Hv<653(BYxiq8B1X=;+u;nlv8 z1U}ong*KHtPaAc*Xa6xm`ksd!pfhRk@3M@7waTSzRhuN-QjY1}KrSc^!W?#2hIC5q z4(ZxjxIMZ>TzC&i2&e|NLGJ-dq>dCoI=!v98D~H~%)!H>pK;cX(t!K>98H@YbmaN= zPcu-mo%wmiZ)XPZjQrDI;-TpS=#pl_2X!z@P)c?nA?H!+S*| z@d%wEU3jz$5^4ic&r@UqYS!hQ&jrTub^vD-2y5`(={`NDDNi=<@Kjb2SObZ>G}O_U z6X2u+epSvrvx?1M0Kd0LKp}LBQsXHses(Y=_n3aDkPUaxbYKA_+%#WF43M!hEbU2^ zv??#suYJZ(*6<2{>ciGcpOdhU6=;RDr2L$lgJlUYN)-zBjA zin){F3q|t|jUZ%1;G6jY{0{DcUtA5y&CE7reinO{bhByAwQ1+;_jW+%h1Crknh{yV z%;=AlI|xC|0)dkQGs|x_js<3fM~js3>GCap=(8C)(uqCAAJR2%z0Ckzs7h1A3q$}} zf`e~RA-<%Y3-JLZ`ySq%0@@C_8G^G_T9f!MXD+l^nIP5AfKZ@jJtit1>O{9mAQ6#- zWhsU4#nDckn(tO?G-%oQU^AT%A$3n?FzqqSqa;hVM`&qg6+2RYUw2!!S=+7qtA%Jm zy`Tx=k9qMNo4;S-a6p*Kud=kCWnn9BVP?8a?a&{gI$mZ0z1h^zl)z(bU|1a8g-Jv$ z7JJFZ_ikvQ(`Z-22O32EfpkZ#lHMy{(8Z1mv8tKXFHQVVX2iD(Ij5zo_m|RDU&JQ$ zFm#=HMJMQ}F?3nQ!{c%q992lyMn^Uh`xOL?@N0myEs9)D4G!{BQPYp7YdqLE@~5jC z&?AU9CT@GC4m<#3EQFgi2~^xi%d`I?JV-p$B*sigXTC7vT(AS^aJINTjT6$7{k1iR zNx=*_a3PtxL-h^}*B;bX(5VD8`8+Qg27^L(?FdE18C3rR3&?1)4p%+J7&?L1Gri=~ z*uge)1IA$kfCL8c2lo-cj~Vu+NiOs)_?4S2%PEbl0y6hqwT3x#{#(roui2}lizbN( zZC>A#^1wmQquDWa!H!hVf9ObS`0toxUHvA+!NJw_4Qc1zB&}RQSZkv>A+?t%E3HYg zRFpBVp0QiX$sy@6u}zu(PJh@1)ZXYZx-kY*cZB`1U3Js9k}MD>e8ZYwoEyb3GOE)e zV#1dg^sDjTKwNCFfop}EG4Tso{)8|lqt7*8UcGO&=E7u`uGn~ki~^SFbF zlL=*41?+C>br=nCsw6-|&k&#XUw4cjpf~?3@)vR1R;H6&zu|Pm4)d15t~kuwX-_av za;X4Hnv=aywB5#wTGoI{&oj=W)zZv8^}EHik*HGoxoYlnNfaP`CB}RtWU4viJMkPH z3CYDaj)c1}3yh+|8=}NFlACbq_{Czb=ndj?E>|8rK@0U%M9Iy34|%16TYM9CasmdA z6o>H-jYNe{D4Pkq!9M|WF32S>RX-=C|J{`-v=H%;zFU8^OFr`?iuP@CCoD#e4eT$e zdAvsO8$$nlB+)7eCyI9H`tcky1O_Ks6b9`YQ2G0;msUGheXwPjMYY0p4{l*MdF{eG z_@CKe^MX#Yf|3YqAzqHl)mvjN(|%^=!!fC_IaD?wyXc-c6oRvu*F>0;@udCkixiM$JhsKcAA`@bf@( zgYCBJ)u6>iQ-B-^l0B$208^1>IuI3JxJTRASG-CaS zxmP)q{V4mUJT3e9X-5M&)*d)bLuHp`Jr|-Y)Z0A9_WABTWW*7S&%;OcKhtfe{v;owE`$qrpAR5dfzTVaDhF6osZO zit=Q{7YAYIwM}A0y|!Iff5XFRALKH{#J6%*cU3#9R!T1wXS_F>Q8Bz@)uA4ALR)IM zZ|m?(g<*YYD9bsM@Rih_vn7{vR(vBJ@KrrF?#0($n9!PGHSQn z4mzirD%@umQZ~o_49csqJFoYw-Mh+$8VP<6i0iuhrWkj`jpg+WX}(u692%Cku1Pad?w!WRSVveDKs{CsAQwdbT%*D< zAM$ARYLji2F}sDBo*r;mAeunQxCc8HCbfk8a%)pno_p8IYnETzUA1*k>i$mpZFuba zUD$N>^QUi7ETh0-f%eox13tW&uSS9rX8ZR_IjqkQ3%zQm9H+d0JIya)toD<@ow_x)D|7)SJOFAAbJ-M zTV1nv{Hrq)n(CFyLX;?jil1ZQalRgQTwq(i`8!O`j$vKW>4k%*j)fY?PcyuxW_>}W zK#s#P5}nlYXg9y^$>nxzW~Fno_)GtBgqR6!olJ9F z84=VZ2ZFxcRoUM?G0g2rLq*lTs122Ymp`f%75lP%*5ukl=tQ~?lV$doQjo?h?T74Ne`%_)r+McV38ng;e{I(m1 zN*ONnnT{W+&@Hk5*>bEi!YS2jRUYk7@$-+UrBK3we1`iYVUfax^=O}ynXK9woRMK> z;MUzBc`^w7Q|{3s zf*KQX@>~U_qqftKf^$NHn%8+zCm}da(PX86V&AgIr?V?uA=dds^dXCzTAV7}V92pb z5VzJ;jlwK(mc6(dFp|% z=o?HgOjP^;-nqOb(+xY2U6yS+IU-$5t(-b3LP2ULz+lG2Bg|5WrY`W&M3Xk&al(A)ZefHS z)bV&t;7M*^&0XeAFSrcBX*}0x%SP+88*;UjV5foCYj{I`?>IiOkWZ0FMU&(z-Zi3A zt*o3w!<{+x%xLs?*ENh|;exbcP?ecC0W$Ab4Rz4q-PK#Ue^8?fM|qzN+q>isosQQt zbxY_bjMFUF_yw~|Ja}q_)LW})YR{sp0C%1(mqxMSRxPOB!H2}l=czr;rZ8@aVFQJH z6^6xzGUK=Gw-Trm($f1R} zz-5&t4At`1EDTe#ztL*bcN_cDDQXh^s2Dxzd5wt7nlr>j-q>R+l@E7aJ}FqUSFCEZ z{=t8@bpYQ?X! zM^Y)iw@mUHbMs7QkRFnvR#aXfCeFEpY9o)hjoe`kv#zHEbrQQd)&6mK_Yy?txcry?9(j;twO1pY!gzKWkw&dI~ zD?_elPHL=qNq7!V{xt(oq0e}ad*g;`g#NXX!rTYI5{i)%(HDh=u<@`gGAcQo+`A~` z7Lhx8f++|W9`tc$2994EwT#bdB_q~z(Fa74%C8SHVA~&2aI(CN#vho|nbbTW*j^Bw39ZkG|-X9|o_nQzhiJN68j>(Gogc z!Gqe>KgQo(d}-|)^6p()k6}&wd)#s5b}9}Xrgl3=;lf-jLLu+M)BNBE&Opw=n6{}B z{RQ8+S0<+g92fRl?`Tlv~Vw-G0c6BTTjvqJ67bgNw09+&{6&@FH5)HwCN!(=V< zuhSW+%fSj1%hZ`a${-?i@qt1XmGxL0&j>P%bq9zW=KJ&{l#}gi!8sl zV%^p{Rpu9hw&9FLLoY6>Y0eIO9v_#earsu{wYO=JDLGpIS|AqMTr%xvdiJiT@A%<} z3{1|~?vOk8{?^|H9xx;!JtRCJP4;)_0p zJ41%AJHH+E4-PWejXL~Tw?%5&nVA|I@_(sC^JTW#;U4#TE2X@@=#)Fv&EF`Op9KX4 z$?UEy2dm<>~b1S9OW4^!gkpzDm*U1FASAX-*4YxFu}Xgi$meV*_URt zzP3i~j0hl+{Jt9OaXH}Ef!3`X-`5X-*E?QUd-jj2yze-eeMg+S}Ew0I{qdN)mFuecmkZl>XexAc0ylqO z7DIve7=+hx|6-iR<^iQx&1$J#6vGY}^IGhii=Ssv2TJLK=cim0^MZ&-l9=V!MOP?f z0HtIEXkISXvA{T`PH;5#C_SJ?ji}`N@|J#GW zQ26f<{qG$7cR~8^BJ=;#RaC(+!=mtfCpaSBy?yh!x;l7w?{>@F>%cu`0qWYSr&ZOU z5BvKy*6A;0=-P9f%7i=*Ha=#AWZdD$mIL?Uau|FIcy1Wi#5lQRhY>P_g}SfFu71XmVYL7g?<-%5I8WpFZ75EebC?P2|n z2iRur8)eCavd!JpwOQY(V736a+4028N%)GIq&!*XF;km^BYBD=dAnJ^p3^ zoRCLbo|gb{NLQgFzqEAxa-Smvpf_n~t>MK!mjws5#DIXF3uH(1;Dthm4O!zf#l_~n zM@{CshO+a#eD)FWY}njJ(#6*Lqck{H6AZ4r+#^XT$Xw~KIn@FSqr?Cn@<13pR=)EB zyZ;l11Y?Yg=_ zvhd2)8NF&dZTA|`N6lz3eN)|`TKP&{xSHN}oIrkg)3o9~Y=QwWQM6}JMTg?-QQZua4ie7mjHOJ`I^Wzr-79uwLK}dG5&*dnzYaT)arbZn&Mh-(q z+tQSbJ;n?JHE&2B?Wwi`4Zf48;N!ct5aboWF?ZUdC`TnAAkfz^U0gd&j`QtmYM-d? zYiabUTxfLbjpm!(npjz}jwv>*ZS|Y=Qfu5{(rtH`HMl!_f(xSMqQ_mh}ssFo4$euCxJ z(ne&#mk0T0&HHzUIJdfINc$%S=$pz`5Y~2*yD_^xezh%8g>bUlPG^sHZ?1n_PT!jH zK3Z2X9p4q5KS@Q$^vP}?)g5PpKW3(HH{uf*?fkCpm-;F&Q@M_N?vuTes|}8p7N25* z9zz#)ZTddeX6zOUSDLkj?4=%s*tw?EOWOjFxcSbtks@PS=)rn41h)GRIX*}-z{|zB zyN_S`yF|dAUHN+C-~tKw*mlYd9grw{`{vD-LDWdA*k~a8NHLfh(zK~vUMPXwtIa%g zx1XxZuK)#=_nyc*I~3KSG9)S`NcR!CjSr+aYjp8IbXC|xbu9ngqn|PJ%cYGnfh9zW zwKKkcMh6GtIyHNx<-}>CXY0yjM`O2ff(Qjs|Ky<&a%o@a0x3xZo2<$V1)o>Rr@qt0 zV}xyAvZt^8>NNfAOx=95rCq~l+mlJ=kAt5yO^}#+E-Wj&d_PGdXvAl`?U_8Y`lb=x zs2m0&d|$%(b*g2cv-P^&lI`&Gb4dD~=CG4eU1ua+)^FrZtxk#!1;M&}O7&1b9a%<#Zcc01gTVkP3d+ny)U3K|0RhQ!4k};T{x=V`fNvuPX zpzKle&a(&_t-DTRWnVFFdzyB9@_jN3k@%?fpt6E5P$Ng^!lcV``fR>Tpyfi_%Em^N zTI$30x44pWkvXt7iK=xn8Ezq=wvEG>wjH7yB!KnU5MO{YG%*DEjxZ}Ow=D4eu{b)W z-VRHbkL>ZQX<5qXNer+@Pmj(R~YvAnp)Lx6L zb4~amjkvF!&d8>n+kbm;? z(x^mp)hBVTNUQej=#`CeaXItm_yU3?kSs@_(>N|VH6nKBh|4JwH&%AfL=>mJO&b&N z;O^M*Ya^NER+m>U?v~Rt9*NL$LL9WoD#O`QHPid?RQ2lSyeU$$+_Gi=SPB?*h;+5Ec(am z(Nt|eo%ZC>$DrMVgI3(}hF2R;D^LFBrg1r}Zp?d$_z8aJ&&iuXQ(}JLFTRWY%xwel zkehTS_njP(M`@<%qfMKMPudV%sp8DOOr5NJK5vHbtkmWC8L| zr*wTWvl2*$L`kd-lJ28q zp7k>1uCA*IQoyeEGDku2q{X`{wS-%c0;_t8I|yVkIZ4rNNh?V%e>0dg1~)ToT#eFg z`OFc)TPb(=`+NVaIGK3RLek2H^yzBxAB!|xXyrl!PkSq*3A1;H8&7kzDA{H9fH~T$ zaSsBl+I=7OTbD8Zdnj>QT6x8^y+%>9g?CZqmc}mRI~JvPXO0Nhq-puq z$<;O!l2He%dzX7turJ-yQq?Av(RicM^w%b7BFQ`54FlsyA$jxLv^@>?;U-g`uudpP zA&`DL6VgKlDN-C@(CEBWzdb!~kjbDsL$%x|Q99N>j#t`-U1s-_KQ)V^_mNfmz3ZAx1eR5OADn1MrxG$_22G44{Fin`7pC*zd`Z-`zK|}4 z2*a)>y(v8G%ysM!3h$YK3F!Q<80=AOJ>oX0k&MNwB7Qm5Er-gIyCVDhnt`x7mU>v- z$a2!*L`o{385fh62FKz}{c@$uDyrH8QrYc^>~P))U}=>kv7fE4{ewhLPf{YeZZZe? zFSAwyY@znG&(YR)4zlJ&DYS@En-w&=bV^R{)Xis~W^{Ias{H$%RC-FThkdiv=kD0D}9-#C6LA@>WI}Y!JkbC0Dbd7X}_xk~d4Q#SPPIR+6Mny6? z99S>uLS(nKugn%x1eM*qRx)_OrN=aGD&_C|&@Bg?9{qb;d z9olqXwp8qb^tpQgKVx$hj z_u^Rv9RPaiY-pTw+vjVL!BtkPDviJNQw0FMDr_O9mk6&PU@N{SR@}XKHZ~C;OSGX> zD!~dR04$TxPf>p@bMpBYt5>z3S?Jw>^RDmr-9e zIM#t4hW6UF7O4Ye(h~qIR)o`4bOan5a)+_Vg(5XdKkKGAk~~dht_pN#cIQJtSU@?{ zNqzU`F4gQ=ai^Js4xJ-{O~Rtt#x7qj_J*X{M)1aE({ibt8wz+Pzj0q6($_@*ai&M$ z0Q}H-V;|%M#||bqyrR0a62RSC6@}JZQqw6K0JcTcaDTe6_npGvSW%rvlb7&S4d9|4 zSQt|M<(Rb>N$N;A-PE&n_u3GXOQW@md2{ hsGRq677qcIggikqi+L}}`wH-<^bGX0o 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 Y&xkHAhv%=KXQS^mR3OS_N|vww3w1uCYybcN literal 0 HcmV?d00001 diff --git a/jfrog-applications/frogbot/setup-frogbot-using-github-actions.md b/jfrog-applications/frogbot/setup-frogbot-using-github-actions.md index 86245fe..e44f399 100644 --- a/jfrog-applications/frogbot/setup-frogbot-using-github-actions.md +++ b/jfrog-applications/frogbot/setup-frogbot-using-github-actions.md @@ -4,17 +4,21 @@ * Go to your repository's **settings** tab and save the JFrog connection details as repository secrets with the following names: * **JF\_URL** (JFrog Platform URL - Example: `https://acme.jfrog.io`) + > You can also use **JF\_XRAY\_URL** and **JF\_ARTIFACTORY\_URL** instead of **JF\_URL** * **JF\_ACCESS\_TOKEN** (JFrog access token) - * **JF\_GIT\_TOKEN** (GitHub access token - Read note below) - -> You can also use **JF\_XRAY\_URL** and **JF\_ARTIFACTORY\_URL** instead of **JF\_URL**, and **JF\_USER** + **JF\_PASSWORD** instead of **JF\_ACCESS\_TOKEN** -> -> You can utilize [${{secrets.GITHUB_TOKEN}}](https://docs.github.com/en/actions/security-guides/automatic-token-authentication) for **JF_GIT_TOKEN**, which is an automatically generated token by GitHub. -> However, this option comes with a limitation: a workflow, such as Frogbot itself, cannot trigger another workflow. Consequently, if you have additional workflows intended to activate upon the creation of a new pull request, they might not be initiated. -> To resolve this issue, you can generate a [personal access token](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens) and use it as JF_GIT_TOKEN. + > You can also use **JF\_USER** + **JF\_PASSWORD** instead of **JF\_ACCESS\_TOKEN**. + > + > + > Instead of using **JF\_ACCESS\_TOKEN** and providing an access token as a GitHub secret, you can utilize the GitHub [OpenID Connect (OIDC)](#connecting-using-openid-connect-oidc) authentication protocol. + * **JF\_GIT\_TOKEN** (GitHub token) + > You can utilize [${{secrets.GITHUB_TOKEN}}](https://docs.github.com/en/actions/security-guides/automatic-token-authentication) for **JF_GIT_TOKEN**, which is an automatically generated token by GitHub. + > However, this option comes with a limitation: a workflow, such as Frogbot itself, cannot trigger another workflow. Consequently, if you have additional workflows intended to activate upon the creation of a new pull request, they might not be initiated. + > To resolve this issue, you can generate a [personal access token](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens) and use it as JF_GIT_TOKEN. + ![](../.gitbook/assets/github-repository-secrets.png) + * Under **Actions** > **General**, check the **Allow GitHub Actions to create and approve pull requests** check box. ![](../.gitbook/assets/github-pr-permissions.png) @@ -34,3 +38,72 @@ 4. Return to the default branch. 5. Now, create a file named **frogbot-scan-repository.yml**. Again, populate it with the provided [template](templates/github-actions/frogbot-scan-repository.yml) and push it into the **.github/workflows** directory at the root of your GitHub repository. + +
+ +

+Authenticating using OpenID Connect (OIDC) + +#### General + +The sensitive connection details, such as the access token used by JFrog Frogbot, can be automatically generated by the action instead of storing it as a secret in GitHub. +This is made possible by leveraging the OpenID-Connect (OIDC) protocol. This protocol can authenticate the workflow issuer and supply a valid access token. Learn more about this integration in [this](https://jfrog.com/blog/secure-access-development-jfrog-github-oidc) blog post. +To utilize the OIDC protocol, follow these steps: + +#### JFrog Platform configuration + +1. **Configure an OIDC Integration**: This phase sets an integration between GitHub Actions to the JFrog platform.
+ A) Navigate to the Administration tab In the JFrog Platform UI
+ B) Click `General` | `Manage Integrations`
+ C) Click `New Integration` | `OpenID Connect`:
+ ![](../.gitbook/assets/oidc-new-integration.png) + D) Configure the OIDC integration:
+ ![](../.gitbook/assets/oidc-configure-integration.png) + +| NOTE: | +|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| The value specified as the 'Provider Name' should be used as the 'oidc-provider-name' input in [Workflow configuration step 2](#workflowstep2) below. | +| The 'Audience' field does NOT represent the 'aud' claim that can be added into identity-mapping configured in the 'Claims JSON' (shown below). Only claims that are included in the 'Claims Json' created during step 2 will be validated. | + +
+ +2. **Configure an identity mapping**: This phase sets an integration between a particular GitHub repository to the JFrog platform. + + An identity mapping is a configuration object utilized by the JFrog Platform to associate incoming OIDC claims with particular selected fields. These fields might include `repository`, `actor`, `workflow`, and others. + To configure the identity mapping, click on the identity mapping created in section 1 and then click on `Add Identity Mapping`. In the 'priority' field insert the value '1' and fill in the rest of the required fields:
+ ![](../.gitbook/assets/oidc-identity-mapping.png) + + You have the flexibility to define any valid list of claims required for request authentication. You can check a list of the possible claims [here](https://docs.github.com/en/actions/deployment/security-hardening-your-deployments/about-security-hardening-with-openid-connect#understanding-the-oidc-token). + Example Claims JSON: + + ```json + { + "repository": "repository-owner/my-repository" + } + ``` + +### Workflow configuration + +1. **Set required permissions**: In the course of the protocol's execution, it's imperative to acquire a JSON Web Token (JWT) from GitHub's OIDC provider. To request this token, it's essential to configure the specified permission in the workflow file: + + ```yml + permissions: + id-token: write + ``` + +
+ +2. **Pass the 'oidc-provider-name' input to the Action (Required)**: The 'oidc-provider-name' parameter designates the OIDC configuration whose one of its identity mapping should align with the generated JWT claims. This input needs to align with the 'Provider Name' value established within the OIDC configuration in the JFrog Platform. +3. **Pass the 'oidc-audience' input to the Action (Optional)**: The 'oidc-audience' input defines the intended recipients of an ID token (JWT), ensuring access is restricted to authorized recipients for the JFrog Platform. By default, it contains the URL of the GitHub repository owner. It enforces a condition, allowing only workflows within the designated repository/organization to request an access token. Read more about it [here](https://docs.github.com/en/actions/deployment/security-hardening-your-deployments/about-security-hardening-with-openid-connect#customizing-the-audience-value). + +Example step utilizing OpenID Connect: + +```yml +- uses: jfrog/frogbot@v2 + env: + JF_URL: ${{ secrets.JF_URL }} + JF_GIT_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + oidc-provider-name: frogbot-integration +``` +
\ No newline at end of file diff --git a/jfrog-applications/frogbot/templates/github-actions/frogbot-scan-pull-request.yml b/jfrog-applications/frogbot/templates/github-actions/frogbot-scan-pull-request.yml index 4ee34fe..36cc638 100644 --- a/jfrog-applications/frogbot/templates/github-actions/frogbot-scan-pull-request.yml +++ b/jfrog-applications/frogbot/templates/github-actions/frogbot-scan-pull-request.yml @@ -5,6 +5,8 @@ on: permissions: pull-requests: write contents: read + # [Mandatory If using OIDC authentication protocol instead of JF_ACCESS_TOKEN] + # id-token: write jobs: scan-pull-request: runs-on: ubuntu-latest @@ -146,3 +148,8 @@ jobs: # [Optional] # Add a title to pull request comments generated by Frogbot. # JF_PR_COMMENT_TITLE: "" + + # [Mandatory if using OIDC authentication protocol instead of JF_ACCESS_TOKEN] + # Insert to oidc-provider-name the 'Provider Name' defined in the OIDC integration configured in the JPD + # with: + # oidc-provider-name: "" diff --git a/jfrog-applications/frogbot/templates/github-actions/frogbot-scan-repository.yml b/jfrog-applications/frogbot/templates/github-actions/frogbot-scan-repository.yml index 7d89f4a..49c7d2b 100644 --- a/jfrog-applications/frogbot/templates/github-actions/frogbot-scan-repository.yml +++ b/jfrog-applications/frogbot/templates/github-actions/frogbot-scan-repository.yml @@ -8,6 +8,8 @@ permissions: contents: write pull-requests: write security-events: write + # [Mandatory If using OIDC authentication protocol instead of JF_ACCESS_TOKEN] + # id-token: write jobs: scan-repository: runs-on: ubuntu-latest @@ -140,3 +142,8 @@ jobs: # [Optional] # Add a title to pull request comments generated by Frogbot. # JF_PR_COMMENT_TITLE: "" + + # [Mandatory if using OIDC authentication protocol instead of JF_ACCESS_TOKEN] + # Insert to oidc-provider-name the 'Provider Name' defined in the OIDC integration configured in the JPD + # with: + # oidc-provider-name: "" \ No newline at end of file From 3c0286c9005bc5d9ce464e4c5b4993df6cb59494 Mon Sep 17 00:00:00 2001 From: Eran Turgeman <81029514+eranturgeman@users.noreply.github.com> Date: Sun, 19 May 2024 15:57:01 +0300 Subject: [PATCH 21/57] Fix broken OIDC link (#129) --- .../frogbot/setup-frogbot-using-github-actions.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/jfrog-applications/frogbot/setup-frogbot-using-github-actions.md b/jfrog-applications/frogbot/setup-frogbot-using-github-actions.md index e44f399..7de8022 100644 --- a/jfrog-applications/frogbot/setup-frogbot-using-github-actions.md +++ b/jfrog-applications/frogbot/setup-frogbot-using-github-actions.md @@ -9,7 +9,7 @@ > You can also use **JF\_USER** + **JF\_PASSWORD** instead of **JF\_ACCESS\_TOKEN**. > > - > Instead of using **JF\_ACCESS\_TOKEN** and providing an access token as a GitHub secret, you can utilize the GitHub [OpenID Connect (OIDC)](#connecting-using-openid-connect-oidc) authentication protocol. + > Instead of using **JF\_ACCESS\_TOKEN** and providing an access token as a GitHub secret, you can utilize the GitHub [OpenID Connect (OIDC)](#authenticating-using-openid-connect-oidc) authentication protocol. * **JF\_GIT\_TOKEN** (GitHub token) > You can utilize [${{secrets.GITHUB_TOKEN}}](https://docs.github.com/en/actions/security-guides/automatic-token-authentication) for **JF_GIT_TOKEN**, which is an automatically generated token by GitHub. > However, this option comes with a limitation: a workflow, such as Frogbot itself, cannot trigger another workflow. Consequently, if you have additional workflows intended to activate upon the creation of a new pull request, they might not be initiated. @@ -40,7 +40,6 @@ 5. Now, create a file named **frogbot-scan-repository.yml**. Again, populate it with the provided [template](templates/github-actions/frogbot-scan-repository.yml) and push it into the **.github/workflows** directory at the root of your GitHub repository.
-
Authenticating using OpenID Connect (OIDC) @@ -56,7 +55,7 @@ To utilize the OIDC protocol, follow these steps: A) Navigate to the Administration tab In the JFrog Platform UI
B) Click `General` | `Manage Integrations`
C) Click `New Integration` | `OpenID Connect`:
- ![](../.gitbook/assets/oidc-new-integration.png) + ![](../.gitbook/assets/oidc-new-integration.png)
D) Configure the OIDC integration:
![](../.gitbook/assets/oidc-configure-integration.png) From 055b82462be1178f3faa2d7d5358831b6f09d76b Mon Sep 17 00:00:00 2001 From: Eyal Ben Moshe Date: Wed, 22 May 2024 13:55:00 +0300 Subject: [PATCH 22/57] Reference the setup-jfrog-cli docs in the GitHub Actions Marketplace (#130) --- .../ci-integrations/github-actions.md | 212 +----------------- 1 file changed, 2 insertions(+), 210 deletions(-) diff --git a/jfrog-applications/ci-and-sdks/ci-integrations/github-actions.md b/jfrog-applications/ci-and-sdks/ci-integrations/github-actions.md index a3bcbaa..4f509b8 100644 --- a/jfrog-applications/ci-and-sdks/ci-integrations/github-actions.md +++ b/jfrog-applications/ci-and-sdks/ci-integrations/github-actions.md @@ -1,212 +1,4 @@ # GitHub Actions -Setup JFrog CLI - -This GitHub Action downloads, installs and configures JFrog CLI, so that it can be used as part of the workflow. - -In addition, the Action includes the following features, when using JFrog CLI to work with JFrog Platform. - -* The connection details of the JFrog platform used by JFrog CLI can be stored as secrets. -* There's no need to add the _build name_ and _build number_ options and arguments to commands which accept them. All build related operations will be automatically recorded with the _Workflow Name_ as build name and _Run Number_ as build number. - -## Usage - -### General - -```yml -- uses: jfrog/setup-jfrog-cli@v3 -- run: jf --version -``` - -### Storing JFrog connection details as secrets - -The connection details of the JFrog platform used by JFrog CLI can be stored as secrets. You can use one of the following two methods to define and store the JFrog Platform connection details as secrets. - -1. [Storing the connection details using separate environment variables](broken-reference). -2. [Storing the connection details using single Config Token](broken-reference). - -#### Storing the connection details using separate environment variables - -You can set the connection details to your JFrog Platform by using one of the following environment variables combinations: - -1. JF\_URL (no authentication) -2. JF\_URL + JF\_USER + JF\_PASSWORD (basic authentication) -3. JF\_URL + JF\_ACCESS\_TOKEN (authentication using a JFrog Access Token) - -You can use these environment variables in your workflow as follows: - -```yml -- uses: jfrog/setup-jfrog-cli@v3 - env: - # JFrog platform url (for example: https://acme.jfrog.io) - JF_URL: ${{ secrets.JF_URL }} - - # Basic authentication credentials - JF_USER: ${{ secrets.JF_USER }} - JF_PASSWORD: ${{ secrets.JF_PASSWORD }} - or - # JFrog Platform access token - JF_ACCESS_TOKEN: ${{ secrets.JF_ACCESS_TOKEN }} -- run: | - jf rt ping -``` - -| Important: If both Config Token(JF\_ENV\_\*) and separate environment variables(JF\_URL, ...) are provided, the default config will be the Config Token. To make the above separate environment variables as the default config use `jf c use setup-jfrog-cli-server` | -|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| - -#### Storing the connection details using single Config Token - -1. Make sure JFrog CLI is installed on your local machine by running `jf -v`. -2. Configure the details of the JFrog platform by running `jf c add`. -3. Export the details of the JFrog platform you configured, using the server ID you chose. Do this by running `jf c export `. -4. Copy the generated Config Token to the clipboard and save it as a secret on GitHub. - -To use the saved JFrog platform configuration in the workflow, all you need to do it to expose the secret to the workflow. The secret should be exposed as an environment variable with the _JF\_ENV\__ prefix. Here's how you do this: - -```yml -- uses: jfrog/setup-jfrog-cli@v3 - env: - JF_ENV_1: ${{ secrets.JF_SECRET_ENV_1 }} -- run: | - # Ping the server - jf rt ping -``` - -As you can see in the example above, we created a secret named _JF\_SECRET\_ENV\_1_ and exposed it to the workflow as the _JF\_ENV\_1_ environment variable. That's it - the ping command will now ping the configured Artifactory server. - -If you have multiple Config Tokens as secrets, you can use all of them in the workflow as follows: - -```yml -- uses: jfrog/setup-jfrog-cli@v3 - env: - JF_ENV_1: ${{ secrets.JF_SECRET_ENV_1 }} - JF_ENV_2: ${{ secrets.JF_SECRET_ENV_2 }} -- run: | - # Set the JFrog configuration to use by providing the server ID (configured by the 'jf c add' command). - jf c use local-1 - # Ping local-1 Artifactory server - jf rt ping - # Now use the second sever configuration exposed to the Action. - jf c use local-2 - # Ping local-2 Artifactory server - jf rt ping -``` - -| Important: When exposing more than one JFrog configuration to the Action, you should always add the `jf c use` command to specify the server to use. | -|------------------------------------------------------------------------------------------------------------------------------------------------------| - -### Setting the build name and build number when publishing build-info to Artifactory - -The Action automatically sets the following environment variables: _JFROG\_CLI\_BUILD\_NAME_ and _JFROG\_CLI\_BUILD\_NUMBER_ with the workflow name and run number respectively. You therefore don't need to specify the build name and build number on any of the build related JFrog CLI commands. - -In the following example, all downloaded files are registered as dependencies of the build and all uploaded files are registered as the build artifacts. - -```yml -- run: | - jf rt dl artifacts/ - jf rt u aether artifacts/ - jf rt bp -``` - -### Setting JFrog CLI version - -By default, the JFrog CLI version set in [action.yml](https://github.com/jfrog/setup-jfrog-cli/blob/master/action.yml) is used. To set a specific version, add the _version_ input as follows: - -```yml -- uses: jfrog/setup-jfrog-cli@v3 - with: - version: X.Y.Z -``` - -It is also possible to set the latest JFrog CLI version by adding the _version_ input as follows: - -```yml -- uses: jfrog/setup-jfrog-cli@v3 - with: - version: latest -``` - -### Downloading JFrog CLI from Artifactory - -If your agent has no Internet access, you can configure the workflow to download JFrog CLI from a [remote repository](https://www.jfrog.com/confluence/display/JFROG/Remote+Repositories) in your JFrog Artifactory, which is configured to proxy the official download URL. When creating the remote repository, select the Generic package type for the repository. - -Here's how you do this: - -1. Create a remote repository in Artifactory. Name the repository jfrog-cli-remote and set its URL to https://releases.jfrog.io/artifactory/jfrog-cli/ -2. Set _download-repository_ input to jfrog-cli-remote: - - ```yml - - uses: jfrog/setup-jfrog-cli@v3 - env: - # JFrog platform url (for example: https://acme.jfrog.io) - JF_URL: ${{ secrets.JF_URL }} - - # Basic authentication credentials - JF_USER: ${{ secrets.JF_USER }} - JF_PASSWORD: ${{ secrets.JF_PASSWORD }} - - # JFrog platform access token (if JF_USER and JF_PASSWORD are not provided) - # JF_ACCESS_TOKEN: ${{ secrets.JF_ACCESS_TOKEN }} - - # Same can be achieved with a Config Token using JF_ENV_1 environment variable - # JF_ENV_1: ${{ secrets.JF_SECRET_ENV_1 }} - with: - download-repository: jfrog-cli-remote - ``` - -* See instructions for configuring the JFrog connection details under [Storing JFrog connection details as secrets](broken-reference). - -### Set up a FREE JFrog Environment in the Cloud - -Need a FREE JFrog environment in the cloud to use with this GitHub Action? Just run one of the following commands in your terminal. The commands will do the following: - -1. Install JFrog CLI on your machine. -2. Create a FREE JFrog environment in the cloud for you. - -**MacOS and Linux using cUrl** - -``` -curl -fL "https://getcli.jfrog.io?setup" | sh -``` - -**Windows using PowerShell** - -``` -powershell "Start-Process -Wait -Verb RunAs powershell '-NoProfile iwr https://releases.jfrog.io/artifactory/jfrog-cli/v2-jf/[RELEASE]/jfrog-cli-windows-amd64/jf.exe -OutFile $env:SYSTEMROOT\system32\jf.exe'" ; jf setup -``` - -### Example projects - -To help you get started, you can use [these](https://github.com/jfrog/project-examples/tree/master/github-action-examples) sample projects on GitHub. - -## Developing the Action code - -### Build the code - -If you'd like to help us develop and enhance this Action, this section is for you. - -To build and run the Action tests, run - -```bash -npm i && npm t -``` - -### Code contributions - -We welcome code contributions through pull requests. - -Please help us enhance and improve this Action. - -#### Pull requests guidelines - -* If the existing tests do not already cover your changes, please add tests. -* Please run `npm run format` for formatting the code before submitting the pull request. - -## License - -This Action is licensed under the [Apache License 2.0](https://github.com/jfrog/setup-jfrog-cli/blob/master/LICENSE). - -## References - -* [JFrog CLI Documentation](https://www.jfrog.com/confluence/display/CLI/JFrog+CLI) -* [GitHub Actions Documentation](https://help.github.com/en/categories/automating-your-workflow-with-github-actions) +The **Setup JFrog CLI** GitHub Action automates the process of downloading, installing, and configuring the JFrog CLI, enabling its use within your GitHub workflow. +For comprehensive documentation, visit the [GitHub Actions Marketplace](https://github.com/marketplace/actions/setup-jfrog-cli). \ No newline at end of file From 12e171b9137b8dbd407fc8d5fc1dc693c4727fc4 Mon Sep 17 00:00:00 2001 From: Eyal Delarea Date: Wed, 29 May 2024 10:25:41 +0300 Subject: [PATCH 23/57] Add CLI Command Summaries docs (#132) --- .../.gitbook/assets/build-info-summary.png | Bin 0 -> 11547 bytes .../.gitbook/assets/jf-build-scan-summary.png | Bin 0 -> 9762 bytes .../.gitbook/assets/jf-scan-summary.png | Bin 0 -> 36891 bytes .../.gitbook/assets/rt-upload-summary.png | Bin 0 -> 25198 bytes jfrog-applications/SUMMARY.md | 1 + .../jfrog-cli/cli-command-summaries.md | 142 ++++++++++++++++++ 6 files changed, 143 insertions(+) create mode 100644 jfrog-applications/.gitbook/assets/build-info-summary.png create mode 100644 jfrog-applications/.gitbook/assets/jf-build-scan-summary.png create mode 100644 jfrog-applications/.gitbook/assets/jf-scan-summary.png create mode 100644 jfrog-applications/.gitbook/assets/rt-upload-summary.png create mode 100644 jfrog-applications/jfrog-cli/cli-command-summaries.md diff --git a/jfrog-applications/.gitbook/assets/build-info-summary.png b/jfrog-applications/.gitbook/assets/build-info-summary.png new file mode 100644 index 0000000000000000000000000000000000000000..27f5de3d6d32b7510c0f7798d6c791f27357ef59 GIT binary patch literal 11547 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 literal 0 HcmV?d00001 diff --git a/jfrog-applications/.gitbook/assets/jf-scan-summary.png b/jfrog-applications/.gitbook/assets/jf-scan-summary.png new file mode 100644 index 0000000000000000000000000000000000000000..64d202218f48596d01f712441c43cc3897a7bb8e GIT binary patch literal 36891 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 Q8wMcoboFyt=akR{0Ange^#A|> literal 0 HcmV?d00001 diff --git a/jfrog-applications/.gitbook/assets/rt-upload-summary.png b/jfrog-applications/.gitbook/assets/rt-upload-summary.png new file mode 100644 index 0000000000000000000000000000000000000000..6de870ffd5943bfad883abc7b8be2d8b00c10909 GIT binary patch literal 25198 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 z≫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 Date: Wed, 5 Jun 2024 09:24:11 +0000 Subject: [PATCH 24/57] GITBOOK-129: change request with no subject merged in GitBook --- .../supported-technologies.md | 2 +- .../scan-your-source-code.md | 52 +++++++++---------- .../sast/supported-technologies.md | 2 +- 3 files changed, 28 insertions(+), 28 deletions(-) diff --git a/jfrog-applications/jfrog-applications/ide/visual-studio-code/supported-technologies.md b/jfrog-applications/jfrog-applications/ide/visual-studio-code/supported-technologies.md index 916afa6..c49c271 100644 --- a/jfrog-applications/jfrog-applications/ide/visual-studio-code/supported-technologies.md +++ b/jfrog-applications/jfrog-applications/ide/visual-studio-code/supported-technologies.md @@ -14,4 +14,4 @@ layout: # Supported Technologies -
FeatureGoMavennpmpnpmYarnPipPipenvPoetry.NET CLINuGetTerraform
SCA
Contextual Analysis
Secrets Detection
SAST
Exclude dev dependencies
Infrastructure as Code (IaC)
Autofix for direct dep.
License Violations
+
FeatureGoMavennpmpnpmYarnPipPipenvPoetry.NET CLINuGetTerraform
SCA
Contextual Analysis
Secrets Detection
SAST
Exclude dev dependencies
Infrastructure as Code (IaC)
Autofix for direct dep.
License Violations
diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-source-code.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-source-code.md index b317c1b..0c8772c 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-source-code.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-source-code.md @@ -1,4 +1,4 @@ -# Audit your Source Code +# Scan your Source Code The _**jf audit**_ command allows scanning your source code dependencies to find security vulnerabilities and licenses violations, with the ability to scan against your Xray policies. The command builds a deep dependencies graph for your project, scans it with Xray, and displays the results. It uses the package manager used by the project to build the dependencies graph. Currently, the following package managers are supported. @@ -20,7 +20,7 @@ The command will detect the package manager used by the project automatically. I This command also supports the following Advanced Scans with the **Advanced Security Package** enabled on the JFrog Platform instance. To enable the Advanced Security Package, contact us using [this](https://jfrog.com/advanced-security-contact-us/) form. -* **Vulnerability Contextual Analysis**: This feature uses the code context to eliminate false positive reports on vulnerable dependencies that are not applicable to the code. Vulnerability Contextual Analysis is currently supported for Python and JavaScript code. +* **Vulnerability Contextual Analysis**: This feature uses the code context to eliminate false positive reports on vulnerable dependencies that are not applicable to the code. Vulnerability Contextual Analysis is currently supported for Python, Go and JavaScript code. * **Secrets Detection**: Detect any secrets left exposed inside the code. to stop any accidental leak of internal tokens or credentials. * **Infrastructure as Code scans (IaC)**: Scan Infrastructure as Code (Terraform) files for early detection of cloud and infrastructure misconfigurations. @@ -36,34 +36,34 @@ This command also supports the following Advanced Scans with the **Advanced Secu #### Commands Params | | | -|-----------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| --------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Command name** | audit | | **Abbreviation** | aud | | **Command options** | | -| `--server-id` |

[Optional]
Server ID configured using the jf c add command. If not specified, the default configured server is used.

| -| `--project` |

[Optional]
JFrog project key, to enable Xray to determine security violations accordingly. The command accepts this option only if the --repo-path and --watches options are not provided. If none of the three options are provided, the command will show all known vulnerabilities

| -| `--repo-path` |

[Optional]
Artifactory repository path, to enable Xray to determine violations accordingly. The command accepts this option only if the --project and --watches options are not provided. If none of the three options are provided, the command will show all known vulnerabilities

| -| `--watches` |

[Optional]
A comma-separated(,) list of Xray watches, to enable Xray to determine violations accordingly. The command accepts this option only if the --repo-path and --repo-path options are not provided. If none of the three options are provided, the command will show all known vulnerabilities

| -| `--licenses` |

[Default: false]
Set if you'd also like the list of licenses to be displayed.

| -| `--format` |

[Default: table]
Defines the output format of the command. Acceptable values are: table and json.

| -| `--fail` |

[Default: true]
When using one of the flags --watches, --project or --repo-path and a Fail build rule is matched the command will return exit code 3. Set to false if you'd like to see violations with exit code 0.

| -| `--use-wrapper` |

[Default: false] [Gradle]
Set to true if you'd like to use the Gradle wrapper.

| -| `--dep-type` |

[Default: all] [npm]
Defines npm dependencies type. Possible values are: all, devOnly and prodOnly

| +| `--server-id` |

[Optional]
Server ID configured using the jf c add command. If not specified, the default configured server is used.

| +| `--project` |

[Optional]
JFrog project key, to enable Xray to determine security violations accordingly. The command accepts this option only if the --repo-path and --watches options are not provided. If none of the three options are provided, the command will show all known vulnerabilities

| +| `--repo-path` |

[Optional]
Artifactory repository path, to enable Xray to determine violations accordingly. The command accepts this option only if the --project and --watches options are not provided. If none of the three options are provided, the command will show all known vulnerabilities

| +| `--watches` |

[Optional]
A comma-separated(,) list of Xray watches, to enable Xray to determine violations accordingly. The command accepts this option only if the --repo-path and --repo-path options are not provided. If none of the three options are provided, the command will show all known vulnerabilities

| +| `--licenses` |

[Default: false]
Set if you'd also like the list of licenses to be displayed.

| +| `--format` |

[Default: table]
Defines the output format of the command. Acceptable values are: table and json.

| +| `--fail` |

[Default: true]
When using one of the flags --watches, --project or --repo-path and a Fail build rule is matched the command will return exit code 3. Set to false if you'd like to see violations with exit code 0.

| +| `--use-wrapper` |

[Default: false] [Gradle]
Set to true if you'd like to use the Gradle wrapper.

| +| `--dep-type` |

[Default: all] [npm]
Defines npm dependencies type. Possible values are: all, devOnly and prodOnly

| | `--exclude-test-deps` |

[Default: false] [Gradle]
Set to true if you'd like to exclude Gradle test dependencies from Xray scanning.

| | `--requirements-file` |

[Optional] [Pip]
Defines pip requirements file name. For example: 'requirements.txt'

| -| `--working-dirs` |

[Optional]
A comma-separated(,) list of relative working directories, to determine the audit targets locations.

If flag isn't provided, a recursive scan is triggered from the root directory of the project. | -| `--exclusions` |

[Default: *.git*;*node_modules*;*target*;*venv*;*test*]
List of semicolon-separated(;) exclusions, utilized to skip sub-projects from undergoing an audit. These exclusions may incorporate the * and ? wildcards.

| -| `--fixable-only` |

[Optional]
Set to true if you wish to display issues that have a fix version only.

| -| `--min-severity` |

[Optional]
Set the minimum severity of issues to display. The following values are accepted: Low, Medium, High or Critical

| -| `--go` |

[Default: false]
Set to true to request audit for a Go project.

| -| `--gradle` |

[Default: false]
Set to true to request audit for a Gradle project.

| -| `--mvn` |

[Default: false]
Set to true to request audit for a Maven project.

| -| `--npm` |

[Default: false]
Set to true to request audit for a npm project.

| -| `--pnpm` |

[Default: false]
Set to true to request audit for a pnpm project.

| -| `--nuget` |

[Default: false]
Set to true to request audit for a .Net project.

| -| `--pip` |

[Default: false]
Set to true to request audit for a Pip project.

| -| `--pipenv` |

[Default: false]
Set to true to request audit for a Pipenv project.

| -| `--yarn` |

[Default: false]
Set to true to request audit for a Yarn project.

| +| `--working-dirs` |

[Optional]
A comma-separated(,) list of relative working directories, to determine the audit targets locations.

If flag isn't provided, a recursive scan is triggered from the root directory of the project.

| +| `--exclusions` |

[Default: .git;node_modules;target;venv;test]
List of semicolon-separated(;) exclusions, utilized to skip sub-projects from undergoing an audit. These exclusions may incorporate the * and ? wildcards.

| +| `--fixable-only` |

[Optional]
Set to true if you wish to display issues that have a fix version only.

| +| `--min-severity` |

[Optional]
Set the minimum severity of issues to display. The following values are accepted: Low, Medium, High or Critical

| +| `--go` |

[Default: false]
Set to true to request audit for a Go project.

| +| `--gradle` |

[Default: false]
Set to true to request audit for a Gradle project.

| +| `--mvn` |

[Default: false]
Set to true to request audit for a Maven project.

| +| `--npm` |

[Default: false]
Set to true to request audit for a npm project.

| +| `--pnpm` |

[Default: false]
Set to true to request audit for a pnpm project.

| +| `--nuget` |

[Default: false]
Set to true to request audit for a .Net project.

| +| `--pip` |

[Default: false]
Set to true to request audit for a Pip project.

| +| `--pipenv` |

[Default: false]
Set to true to request audit for a Pipenv project.

| +| `--yarn` |

[Default: false]
Set to true to request audit for a Yarn project.

| | **Command arguments** | The command accepts no arguments | #### **Output Example** @@ -122,4 +122,4 @@ Audit the project in the current directory, excluding all files inside the _node ``` jf audit --exclusions "*node_modules*;*to_exclude" -``` \ No newline at end of file +``` diff --git a/jfrog-applications/jfrog-security-features/sast/supported-technologies.md b/jfrog-applications/jfrog-security-features/sast/supported-technologies.md index 656afc5..6c6d614 100644 --- a/jfrog-applications/jfrog-security-features/sast/supported-technologies.md +++ b/jfrog-applications/jfrog-security-features/sast/supported-technologies.md @@ -1,4 +1,4 @@ # Supported Technologies -
JavaScript/TypeScript

Supports JS up to ECMAScript 2016/ES7. TypeScript is also supported.

Note: JSX is not supported

PythonSupports Python versions 3.0 to 3.11
JavaSupports all Java versions up to version 19
+
JavaScript/TypeScript

Supports JS up to ECMAScript 2016/ES7. TypeScript is also supported.

Note: JSX is not supported

PythonSupports Python versions 3.0 to 3.11
JavaSupports all Java versions up to version 19
GOSupports Go vesions up to version 1.22
From f399cbea124d423360cb7ff139f025299f0833ed Mon Sep 17 00:00:00 2001 From: Lina Daher Date: Mon, 17 Jun 2024 12:17:36 +0000 Subject: [PATCH 25/57] GITBOOK-130: change request with no subject merged in GitBook --- .../gitlab-templates-for-jfrog.md | 31 +++---------- jfrog-applications/frogbot/setup-frogbot.md | 43 +++---------------- 2 files changed, 12 insertions(+), 62 deletions(-) diff --git a/jfrog-applications/ci-and-sdks/ci-integrations/gitlab-templates-for-jfrog.md b/jfrog-applications/ci-and-sdks/ci-integrations/gitlab-templates-for-jfrog.md index 04be35d..cad22ef 100644 --- a/jfrog-applications/ci-and-sdks/ci-integrations/gitlab-templates-for-jfrog.md +++ b/jfrog-applications/ci-and-sdks/ci-integrations/gitlab-templates-for-jfrog.md @@ -13,10 +13,10 @@ The script does the following: ### Installation -1. Ensure you have the connection details for the JFrog Platform. Don't have a JFrog Platform? [Set up](broken-reference) a free JFrog Platform instance in the cloud now -2. [Store](broken-reference) the JFrog Platform connection details on GitLab +1. Ensure you have the connection details for the JFrog Platform. Don't have a JFrog Platform? [Set up](broken-reference/) a free JFrog Platform instance in the cloud now +2. [Store](broken-reference/) the JFrog Platform connection details on GitLab 3. Optionally set the URL of your Artifactory Docker Registry as the value of the **JF\_DOCKER\_REGISTRY** variable -4. [Add](broken-reference) the **setup-jfrog** pipeline script in your GitLab pipeline +4. [Add](broken-reference/) the **setup-jfrog** pipeline script in your GitLab pipeline #### Storing the JFrog Platform Connection Details @@ -79,7 +79,7 @@ job: If your GitLab environment is air-gapped, you would want your pipeline to avoid downloading the **setup-jfrog** script and also JFrog CLI from `https://releases.jfrog.io/artifactory`. Here's how you do this: -As shown in the above [Including the Script](broken-reference) and [Referencing the Script](broken-reference) sections, you have the option of copying the **setup-jfrog** script into your pipeline, and thus avoiding its download. Since the **setup-jfrog** script downloads JFrog CLI from `https://releases.jfrog.io/artifactory`, you should also configure the script to download JFrog CLI from a remote repository in your JFrog Artifactory instance. Follow these steps to have JFrog CLI downloaded from your Artifactory instance: +As shown in the above [Including the Script](broken-reference/) and [Referencing the Script](broken-reference/) sections, you have the option of copying the **setup-jfrog** script into your pipeline, and thus avoiding its download. Since the **setup-jfrog** script downloads JFrog CLI from `https://releases.jfrog.io/artifactory`, you should also configure the script to download JFrog CLI from a remote repository in your JFrog Artifactory instance. Follow these steps to have JFrog CLI downloaded from your Artifactory instance: 1. Create a remote generic repository in Artifactory pointing to `https://releases.jfrog.io/artifactory/` 2. Add the **JF\_RELEASES\_REPO** variable to GitLab with the name of the repository you created @@ -89,7 +89,7 @@ As shown in the above [Including the Script](broken-reference) and [Referencing Configurations can be done via Project Settings > CI/CD > Variables: | Variable | Usage | -|----------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | JF\_DOCKER\_REGISTRY | Docker registry in Artifactory. For more info, see [Getting Started with Artifactory as a Docker Registry](https://www.jfrog.com/confluence/display/JFROG/Getting+Started+with+Artifactory+as+a+Docker+Registry) | | JFROG\_CLI\_BUILD\_PROJECT | JFrog project key to be used by commands which expect build name and build number. Determines the project of the published build. | | JFROG\_CLI\_VERSION | Use a specific JFrog CLI version instead of the latest version. The minimal version allowed is: 2.17.0 | @@ -164,24 +164,3 @@ $ jf mvn clean install * Pip * Pipenv * Yarn Berry - - - -### Set Up a FREE JFrog Environment in the Cloud - -Need a FREE JFrog environment in the cloud to use with these templates? Just run one of the following commands in your terminal. The commands will do the following: - -1. Install JFrog CLI on your machine. -2. Create a FREE JFrog environment in the cloud for you. - -**MacOS and Linux using cURL** - -``` -curl -fL "https://getcli.jfrog.io?setup" | sh -``` - -**Windows using PowerShell** - -``` -powershell "Start-Process -Wait -Verb RunAs powershell '-NoProfile iwr https://releases.jfrog.io/artifactory/jfrog-cli/v2-jf/[RELEASE]/jfrog-cli-windows-amd64/jf.exe -OutFile $env:SYSTEMROOT\system32\jf.exe'" ; jf setup -``` diff --git a/jfrog-applications/frogbot/setup-frogbot.md b/jfrog-applications/frogbot/setup-frogbot.md index ef129cd..ce48155 100644 --- a/jfrog-applications/frogbot/setup-frogbot.md +++ b/jfrog-applications/frogbot/setup-frogbot.md @@ -1,51 +1,22 @@ -# Setup Frogbot +# Setup #### What's needed for the setup? * **JFrog Platform** server. (If you don't have a JFrog Platform, you can set up one for free) - * **CI server** to run the scan tasks. #### Select your preferred CI server: -- [GitHub Actions](./setup-frogbot-using-github-actions.md) -- [Jenkins](./setup-frogbot-using-jenkins.md) -- [JFrog Pipelines](./setup-frogbot-using-jfrog-pipelines.md) -- [GitLab CI](./setup-frogbot-using-gitlab-ci.md) -- [Azure Pipelines](./setup-frogbot-using-azure-pipelines.md) - -
- -Optionally - set up a FREE JFrog Platform in the Cloud - -Frogbot requires a JFrog environment to scan your projects. If you don't have an environment, we can set up a free environment in the cloud for you. Just run one of the following commands in your terminal to set up an environment in less than a minute. - -The commands will do the following: - -1. Install [JFrog CLI](https://www.jfrog.com/confluence/display/CLI/JFrog+CLI) on your machine. -2. Create a FREE JFrog environment in the cloud for you. - -**For macOS and Linux, use curl** - -``` -curl -fL "https://getcli.jfrog.io?setup" | sh -``` - -**For Windows, use PowerShell** - -``` -powershell "Start-Process -Wait -Verb RunAs powershell '-NoProfile iwr https://releases.jfrog.io/artifactory/jfrog-cli/v2-jf/[RELEASE]/jfrog-cli-windows-amd64/jf.exe -OutFile $env:SYSTEMROOT\system32\jf.exe'" ; jf setup -``` - -After the setup is complete, you'll receive an email with your JFrog environment connection details, which can be stored as secrets in Git. - -
+* [GitHub Actions](setup-frogbot-using-github-actions.md) +* [Jenkins](setup-frogbot-using-jenkins.md) +* [JFrog Pipelines](setup-frogbot-using-jfrog-pipelines.md) +* [GitLab CI](setup-frogbot-using-gitlab-ci.md) +* [Azure Pipelines](setup-frogbot-using-azure-pipelines.md)
Advanced - Customize advanced settings with frogbot-config.yml -* [Creating the frogbot-config.yml file](./frogbot-configuration.md) +* [Creating the frogbot-config.yml file](frogbot-configuration.md)
- From e5f8b59a5b012a3d76d008681062b2782b72d4e1 Mon Sep 17 00:00:00 2001 From: Lina Daher Date: Mon, 17 Jun 2024 12:21:50 +0000 Subject: [PATCH 26/57] GITBOOK-131: change request with no subject merged in GitBook --- .../gitlab-templates-for-jfrog.md | 2 +- ...-the-jfrog-plugin-to-the-jfrog-platform.md | 41 ++++--------------- .../connect-vs-code-to-the-jfrog-platform.md | 26 ------------ 3 files changed, 9 insertions(+), 60 deletions(-) diff --git a/jfrog-applications/ci-and-sdks/ci-integrations/gitlab-templates-for-jfrog.md b/jfrog-applications/ci-and-sdks/ci-integrations/gitlab-templates-for-jfrog.md index cad22ef..8e724c3 100644 --- a/jfrog-applications/ci-and-sdks/ci-integrations/gitlab-templates-for-jfrog.md +++ b/jfrog-applications/ci-and-sdks/ci-integrations/gitlab-templates-for-jfrog.md @@ -13,7 +13,7 @@ The script does the following: ### Installation -1. Ensure you have the connection details for the JFrog Platform. Don't have a JFrog Platform? [Set up](broken-reference/) a free JFrog Platform instance in the cloud now +1. Ensure you have the connection details for the JFrog Platform. 2. [Store](broken-reference/) the JFrog Platform connection details on GitLab 3. Optionally set the URL of your Artifactory Docker Registry as the value of the **JF\_DOCKER\_REGISTRY** variable 4. [Add](broken-reference/) the **setup-jfrog** pipeline script in your GitLab pipeline diff --git a/jfrog-applications/ide/jetbrains-ides/connect-the-jfrog-plugin-to-the-jfrog-platform.md b/jfrog-applications/ide/jetbrains-ides/connect-the-jfrog-plugin-to-the-jfrog-platform.md index fff0e98..7ea0b8d 100644 --- a/jfrog-applications/ide/jetbrains-ides/connect-the-jfrog-plugin-to-the-jfrog-platform.md +++ b/jfrog-applications/ide/jetbrains-ides/connect-the-jfrog-plugin-to-the-jfrog-platform.md @@ -2,30 +2,6 @@
-Optionally set up a free JFrog Environment in the Cloud - -Need a free JFrog environment in the Cloud, so that JFrog IntelliJ IDEA Plugin can connect to it? Just run one of the following commands in your terminal. The commands will do the following: - -1. Install JFrog CLI on your machine. -2. Create a FREE JFrog environment in the Cloud for you. -3. Configure IntelliJ IDEA to connect to your new environment. - -**MacOS and Linux using cURL** - -```bash -curl -fL https://getcli.jfrog.io?setup | sh -``` - -**Windows using PowerShell** - -```powershell -powershell "Start-Process -Wait -Verb RunAs powershell '-NoProfile iwr https://releases.jfrog.io/artifactory/jfrog-cli/v2-jf/[RELEASE]/jfrog-cli-windows-amd64/jf.exe -OutFile $env:SYSTEMROOT\system32\jf.exe'" ; jf setup -``` - -
- -
- Connect the JFrog Plugin to an existing JFrog Environment You can connect the plugin to your JFrog environment using one of the following methods: @@ -34,13 +10,12 @@ You can connect the plugin to your JFrog environment using one of the following Once the plugin is successfully installed, connect the plugin to your instance of the JFrog Platform: -1. If your JFrog Platform instance is behind an HTTP proxy, configure the proxy settings as described [here](https://www.jetbrains.com/help/idea/settings-http-proxy.html). - Manual proxy configuration is supported since version 1.3.0 of the JFrog IntelliJ IDEA Plugin. Auto-detect proxy settings is supported since version 1.7.0. +1. If your JFrog Platform instance is behind an HTTP proxy, configure the proxy settings as described [here](https://www.jetbrains.com/help/idea/settings-http-proxy.html). Manual proxy configuration is supported since version 1.3.0 of the JFrog IntelliJ IDEA Plugin. Auto-detect proxy settings is supported since version 1.7.0. 2. Under **Settings (Preferences)** | **Other Settings**, click **JFrog Global Configuration**. 3. Set your JFrog Platform URL and login credentials. 4. Test your connection to Xray using the Test Connection button. - -![](../../.gitbook/assets/connect-idea-to-jfrog.png) + + **Using Environment Variables** @@ -51,12 +26,12 @@ The plugin also supports connecting to your JFrog environment using environment You may provide basic auth credentials or access token as follows: -> **_NOTE:_** For security reasons, it is recommended to unset the environment variables after launching the IDE. +_**NOTE:**_ For security reasons, it is recommended to unset the environment variables after launching the IDE. -- `JFROG_IDE_PLATFORM_URL` - JFrog Platform URL -- `JFROG_IDE_USERNAME` - JFrog Platform username -- `JFROG_IDE_PASSWORD` - JFrog Platform password -- `JFROG_IDE_ACCESS_TOKEN` - JFrog Platform access token +* `JFROG_IDE_PLATFORM_URL` - JFrog Platform URL +* `JFROG_IDE_USERNAME` - JFrog Platform username +* `JFROG_IDE_PASSWORD` - JFrog Platform password +* `JFROG_IDE_ACCESS_TOKEN` - JFrog Platform access token
diff --git a/jfrog-applications/ide/visual-studio-code/connect-vs-code-to-the-jfrog-platform.md b/jfrog-applications/ide/visual-studio-code/connect-vs-code-to-the-jfrog-platform.md index a175d9a..73b8d5f 100644 --- a/jfrog-applications/ide/visual-studio-code/connect-vs-code-to-the-jfrog-platform.md +++ b/jfrog-applications/ide/visual-studio-code/connect-vs-code-to-the-jfrog-platform.md @@ -1,31 +1,5 @@ # Connect VS Code to the JFrog Platform -
- -If you don't have a JFrog Platform instance, create a free instance in the cloud by running one of the following commands in your terminal. - -**MacOS and Linux using cUrl** - -``` -curl -fL "https://getcli.jfrog.io?setup" | sh -``` - -**Windows using PowerShell** - -``` -powershell "Start-Process -Wait -Verb RunAs powershell '-NoProfile iwr https://releases.jfrog.io/artifactory/jfrog-cli/v2-jf/[RELEASE]/jfrog-cli-windows-amd64/jf.exe -OutFile $env:SYSTEMROOT\system32\jf.exe'" ; jf setup -``` - -The commands will do the following: - -1. Install JFrog CLI on your machine. -2. Create a FREE JFrog environment in the cloud for you. -3. Configure VS Code to connect to your new environment. - -
- -\\ - Once the JFrog Extension is installed in VS Code, click on the JFrog tab: ![jfrogTab](../../.gitbook/assets/vscode/jfrogTab.png) From f75421127d7fc5ae33296c85d61f3697eb997301 Mon Sep 17 00:00:00 2001 From: Or Zinger <94623525+orz25@users.noreply.github.com> Date: Tue, 18 Jun 2024 16:22:10 +0300 Subject: [PATCH 27/57] add threads flag to audit command (#134) --- .../jfrog-cli/cli-for-jfrog-curation.md | 18 +++++++++--------- .../scan-your-source-code.md | 3 ++- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-curation.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-curation.md index f72ccca..2bf9dce 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-curation.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-curation.md @@ -62,15 +62,15 @@ https://jfrog.com/help/r/jfrog-curation/configure-curation-pass-through #### Commands Params -| | | -|-----------------------|----------------------------------------------------------------------------------------------------------------------------------------| -| **Command name** | curation-audit | -| **Abbreviation** | ca | -| **Command options** | | -| `--format` |

[Default: table]

Defines the output format of the command. Acceptable values are: table and json.

| -| `--working-dirs` |

[Optional]

A comma separated list of relative working directories, to determine the audit targets locations.

| -| `--threads` |

[Default: 10]

The number of parallel threads used to determine the curation status for each package in the project tree.

| -| `--requirements-file` |

[Optional] [Pip]

Defines pip requirements file name. For example: 'requirements.txt'

| +| | | +|-----------------------|---------------------------------------------------------------------------------------------------------------------------------------| +| **Command name** | curation-audit | +| **Abbreviation** | ca | +| **Command options** | | +| `--format` |

[Default: table]

Defines the output format of the command. Acceptable values are: table and json.

| +| `--working-dirs` |

[Optional]

A comma separated list of relative working directories, to determine the audit targets locations.

| +| `--threads` |

[Default: 3]

The number of parallel threads used to determine the curation status for each package in the project tree.

| +| `--requirements-file` |

[Optional] [Pip]

Defines pip requirements file name. For example: 'requirements.txt'

| #### Example 1 diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-source-code.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-source-code.md index 0c8772c..5cacc99 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-source-code.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-source-code.md @@ -36,7 +36,7 @@ This command also supports the following Advanced Scans with the **Advanced Secu #### Commands Params | | | -| --------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +|-----------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | **Command name** | audit | | **Abbreviation** | aud | | **Command options** | | @@ -55,6 +55,7 @@ This command also supports the following Advanced Scans with the **Advanced Secu | `--exclusions` |

[Default: .git;node_modules;target;venv;test]
List of semicolon-separated(;) exclusions, utilized to skip sub-projects from undergoing an audit. These exclusions may incorporate the * and ? wildcards.

| | `--fixable-only` |

[Optional]
Set to true if you wish to display issues that have a fix version only.

| | `--min-severity` |

[Optional]
Set the minimum severity of issues to display. The following values are accepted: Low, Medium, High or Critical

| +| `--threads` |

[Default: 3]
The number of parallel threads used to scan the source code project.

| | `--go` |

[Default: false]
Set to true to request audit for a Go project.

| | `--gradle` |

[Default: false]
Set to true to request audit for a Gradle project.

| | `--mvn` |

[Default: false]
Set to true to request audit for a Maven project.

| From 37ccfc405720cd121acf3699ebaed0c094905d8d Mon Sep 17 00:00:00 2001 From: Assaf Attias <49212512+attiasas@users.noreply.github.com> Date: Mon, 24 Jun 2024 14:58:09 +0300 Subject: [PATCH 28/57] Audit - only run specific sub scans (#136) --- .../cli-for-jfrog-security/scan-your-source-code.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-source-code.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-source-code.md index 5cacc99..ddc2045 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-source-code.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-source-code.md @@ -65,6 +65,11 @@ This command also supports the following Advanced Scans with the **Advanced Secu | `--pip` |

[Default: false]
Set to true to request audit for a Pip project.

| | `--pipenv` |

[Default: false]
Set to true to request audit for a Pipenv project.

| | `--yarn` |

[Default: false]
Set to true to request audit for a Yarn project.

| +| `--sca` |

[Default: false] Selective scanners mode: Execute SCA (Software Composition Analysis) sub-scan. By default, runs both SCA and Contextual Analysis. Can be combined with --secrets, --sast, --iac, and --without-contextual-analysis.

| +| `--iac` |

[Default: false] Selective scanners mode: Execute IaC sub-scan. Can be combined with --sca, --secrets and --sast.

| +| `--secrets` |

[Default: false] Selective scanners mode: Execute Secrets sub-scan. Can be combined with --sca, --sast and --iac.

| +| `--sast` |

[Default: false] Selective scanners mode: Execute SAST sub-scan. Can be combined with --sca, --secrets and --iac.

| +| `--without-contextual-analysis` |

[Default: false] Selective scanners mode: Disable Contextual Analysis scanner after SCA. Relevant only with --sca flag.

| | **Command arguments** | The command accepts no arguments | #### **Output Example** From 71ee7488e3d662177700305ac29eb5d6e65b73b5 Mon Sep 17 00:00:00 2001 From: Nitin Khanna <150972011+leapfrogger@users.noreply.github.com> Date: Thu, 4 Jul 2024 13:01:47 -0700 Subject: [PATCH 29/57] Fixed typo and italicization (#137) --- .../jfrog-cli/cli-for-jfrog-security/scan-your-binaries.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-binaries.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-binaries.md index b26c4b7..52c0c46 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-binaries.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-binaries.md @@ -84,7 +84,7 @@ jf s "*.tgz" ### Scanning Docker Containers on the Local File System -This j\_**f docker scan**\_ command scans docker containers located on the local file-system using the _**docker client**_ and _**JFrog Xray**_. The containers don't need to be deployed to Artifactory or any other container registry before it can be scanned. +This _**jf docker scan**_ command scans docker containers located on the local file-system using the _**docker client**_ and _**JFrog Xray**_. The containers don't need to be deployed to Artifactory or any other container registry before it can be scanned. *** From b1f3e53d6bd49ea58468792e41e3f86e336fd14e Mon Sep 17 00:00:00 2001 From: Alex Domoradov Date: Fri, 5 Jul 2024 02:41:18 +0300 Subject: [PATCH 30/57] Update package-managers-integration.md (#140) --- .../cli-for-jfrog-artifactory/package-managers-integration.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/package-managers-integration.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/package-managers-integration.md index bcab0d2..32c6212 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/package-managers-integration.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/package-managers-integration.md @@ -53,7 +53,7 @@ The following table lists the command arguments and flags: #### Deploying Maven Artifacts -The deployment to Artifacts is triggered both by the deployment and install phases. To disable artifacts deployment, add\*\* **-Dartifactory.publish.artifacts=false** to the list of goals and options. For example: "**clean install**\*\*-Dartifactory.publish.artifacts=false"\*\* +The deployment to Artifacts is triggered both by the deployment and install phases. To disable artifacts deployment, add **-Dartifactory.publish.artifacts=false** to the list of goals and options. For example: "**jf mvn clean install -Dartifactory.publish.artifacts=false**" #### Example @@ -61,7 +61,7 @@ The deployment to Artifacts is triggered both by the deployment and install phas Run clean and install with maven. ``` -jf mvn clean install -f path/to/pom-file +jf mvn clean install -f /path/to/pom.xml ``` ## Running Gradle Builds From 7eb7d30284d5e3cf5073e29d415812454aa81d5a Mon Sep 17 00:00:00 2001 From: Eyal Delarea Date: Thu, 11 Jul 2024 09:44:57 +0300 Subject: [PATCH 31/57] Improve Command Summary docs (#141) --- .../jfrog-cli/cli-command-summaries.md | 28 +++++++++++-------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/jfrog-applications/jfrog-cli/cli-command-summaries.md b/jfrog-applications/jfrog-cli/cli-command-summaries.md index 9852224..0bd02bb 100644 --- a/jfrog-applications/jfrog-cli/cli-command-summaries.md +++ b/jfrog-applications/jfrog-cli/cli-command-summaries.md @@ -4,15 +4,7 @@ The **Command Summaries** feature enables the recording of JFrog CLI command outputs into the local file system. This functionality can be used to generate a summary in the context of an entire workflow -(a sequence of JFrog CLU commands) and not only in the scope of a specific command. - -Each command execution that incorporates this feature can save data files into the file system. -These files are then used to create an aggregated summary in Markdown format. - -Saving data to the filesystem is essential because CLI command executes in separate contexts. -Consequently, each command that records new data should also incorporate any existing data into the aggregated markdown. -This is required because the CLI cannot determine when a command will be the last one executed in a sequence of commands. - +(a sequence of JFrog CLI commands) and not only in the scope of a specific command. An instance of how **Command Summaries** are utilized can be observed in the [setup-cli GitHub action](https://github.com/jfrog/setup-jfrog-cli/blob/master/README.md#JFrog-Job-Summary). This action employs the compiled markdown to generate a comprehensive summary of the entire workflow. @@ -37,10 +29,15 @@ This action employs the compiled markdown to generate a comprehensive summary of ![jf-scan-example](../.gitbook/assets/jf-build-scan-summary.png) + ## Notes for Developers -To use the **Command Summaries**, you'll need to set the `JFROG_CLI_COMMAND_SUMMARY_OUTPUT_DIR` environment variable. -This variable designates the directory where the data files and markdown files will be stored. +Each command execution that incorporates this feature can save data files into the file system. +These files are then used to create an aggregated summary in Markdown format. + +Saving data to the filesystem is essential because CLI command executes in separate contexts. +Consequently, each command that records new data should also incorporate any existing data into the aggregated markdown. +This is required because the CLI cannot determine when a command will be the last one executed in a sequence of commands. ### ⚠️ Attention: Files Remain After CLI Execution The CLI does not automatically remove the files as they are designed to remain beyond a single execution. @@ -48,9 +45,16 @@ As a result, it is your responsibility to you to manage your pipelines and delet You can clear the entire directory of `JFROG_CLI_COMMAND_SUMMARY_OUTPUT_DIR` that you have configured to activate this feature. + +To use the **Command Summaries**, you'll need to set the `JFROG_CLI_COMMAND_SUMMARY_OUTPUT_DIR` environment variable. +This variable designates the directory where the data files and markdown files will be stored. + + ### How to Implement? -If you wish to implement your own summary, follow these steps: +If you wish to contribute a new CLI command summary to the existing ones, +you can submit a pull request once you've followed these implementation guidelines: + 1. Implement the CommandSummaryInterface 2. Record data during runtime From 48bc7f5500b018b2bc8a6647f3e74358737605d7 Mon Sep 17 00:00:00 2001 From: Eyal Delarea Date: Thu, 11 Jul 2024 11:58:04 +0300 Subject: [PATCH 32/57] Update Frogbot GitHub actions templates (#131) --- .../frogbot/setup-frogbot-using-github-actions.md | 2 +- .../templates/github-actions/frogbot-scan-pull-request.yml | 2 +- .../templates/github-actions/frogbot-scan-repository.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/jfrog-applications/frogbot/setup-frogbot-using-github-actions.md b/jfrog-applications/frogbot/setup-frogbot-using-github-actions.md index 7de8022..c43f7d6 100644 --- a/jfrog-applications/frogbot/setup-frogbot-using-github-actions.md +++ b/jfrog-applications/frogbot/setup-frogbot-using-github-actions.md @@ -100,7 +100,7 @@ Example step utilizing OpenID Connect: ```yml - uses: jfrog/frogbot@v2 env: - JF_URL: ${{ secrets.JF_URL }} + JF_URL: ${{ vars.JF_URL }} JF_GIT_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: oidc-provider-name: frogbot-integration diff --git a/jfrog-applications/frogbot/templates/github-actions/frogbot-scan-pull-request.yml b/jfrog-applications/frogbot/templates/github-actions/frogbot-scan-pull-request.yml index 36cc638..df77d39 100644 --- a/jfrog-applications/frogbot/templates/github-actions/frogbot-scan-pull-request.yml +++ b/jfrog-applications/frogbot/templates/github-actions/frogbot-scan-pull-request.yml @@ -18,7 +18,7 @@ jobs: env: # [Mandatory] # JFrog platform URL - JF_URL: ${{ secrets.JF_URL }} + JF_URL: ${{ vars.JF_URL }} # [Mandatory if JF_USER and JF_PASSWORD are not provided] # JFrog access token with 'read' permissions on Xray service diff --git a/jfrog-applications/frogbot/templates/github-actions/frogbot-scan-repository.yml b/jfrog-applications/frogbot/templates/github-actions/frogbot-scan-repository.yml index 49c7d2b..1291bfc 100644 --- a/jfrog-applications/frogbot/templates/github-actions/frogbot-scan-repository.yml +++ b/jfrog-applications/frogbot/templates/github-actions/frogbot-scan-repository.yml @@ -22,7 +22,7 @@ jobs: env: # [Mandatory] # JFrog platform URL - JF_URL: ${{ secrets.JF_URL }} + JF_URL: ${{ vars.JF_URL }} # [Mandatory if JF_USER and JF_PASSWORD are not provided] # JFrog access token with 'read' permissions on Xray service From cce21159e1b3aa6b6a031d9e3b2f21586aee9403 Mon Sep 17 00:00:00 2001 From: RobiNino Date: Sun, 14 Jul 2024 16:40:43 +0300 Subject: [PATCH 33/57] Fix broken link --- jfrog-applications/jfrog-cli/cli-plugins/developer-guide.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jfrog-applications/jfrog-cli/cli-plugins/developer-guide.md b/jfrog-applications/jfrog-cli/cli-plugins/developer-guide.md index cf0cb80..0d754c7 100644 --- a/jfrog-applications/jfrog-cli/cli-plugins/developer-guide.md +++ b/jfrog-applications/jfrog-cli/cli-plugins/developer-guide.md @@ -58,7 +58,7 @@ Well, plugins can do almost anything. The sky is the limit. 2. You can also add other Go packages to your *go.mod* and use them in your code. 3. You can package any external resources, such as executables or configuration files, and have them published alongside your plugin. Read more about - this [here](jfrog-cli-plugins-developer-guide.md#having-your-plugin-use-external-resources) + this [here](developer-guide.md#having-your-plugin-use-external-resources) ## Including plugins in the official registry From e13b617c18c427d05cdd4623374b96d6dc167a0a Mon Sep 17 00:00:00 2001 From: Bar Vered <161704690+barv-jfrog@users.noreply.github.com> Date: Tue, 16 Jul 2024 10:26:07 +0300 Subject: [PATCH 34/57] sbom ingestion documentation (#138) --- .../enrich-your-sbom.md | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 jfrog-applications/jfrog-cli/cli-for-jfrog-security/enrich-your-sbom.md diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/enrich-your-sbom.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/enrich-your-sbom.md new file mode 100644 index 0000000..4cd03ba --- /dev/null +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/enrich-your-sbom.md @@ -0,0 +1,43 @@ +# Enrich your SBOM JSONs & XMLs + +The sbom enrichment command takes an exported SBOM file in XML/JSON format and enriches your +file with package vulnerabilities found by XRAY. + +This _**jf sbom enrich **_ command enriches a file that is found on file_path. + +*** + +**Note** + +> This command requires: + +* Version X or above of Xray +* Version Y or above of JFrog CLI + +*** + +#### Commands Params + +| | | +|-----------------------|-----------------------------------------------------------------------------------------------------------------------------------------| +| **Command name** | sbom-enrich | +| **Abbreviation** | se | +| **Command options** | | +| `--server-id` |

[Optional]
Server ID configured using the jf c add command. If not specified, the default configured server is used.

| +| **Command arguments** | + | `file_path` | the sbom file path. + +#### Example 1 + +Enriches an XML file + +``` +jf se "path/to/file.xml" +``` + +#### Example 2 +Enriches a JSON file +``` +jf se "path/to/files/file.json" +``` + From 60a10f7e7e64b8a70ad3f1ab89abed9ec3971c97 Mon Sep 17 00:00:00 2001 From: Lina Daher Date: Sun, 21 Jul 2024 15:47:52 +0000 Subject: [PATCH 35/57] GITBOOK-133: Lina's Jul 21 changes --- jfrog-applications/SUMMARY.md | 1 + .../count-contributing-developers.md | 92 +++++++++++++++++++ 2 files changed, 93 insertions(+) create mode 100644 jfrog-applications/jfrog-applications/jfrog-cli/cli-for-jfrog-security/count-contributing-developers.md diff --git a/jfrog-applications/SUMMARY.md b/jfrog-applications/SUMMARY.md index e7493bf..91639fb 100644 --- a/jfrog-applications/SUMMARY.md +++ b/jfrog-applications/SUMMARY.md @@ -33,6 +33,7 @@ * [Scan Published Builds](jfrog-cli/cli-for-jfrog-security/scan-published-builds.md) * [Scan your Binaries](jfrog-cli/cli-for-jfrog-security/scan-your-binaries.md) * [Download Updates for Xray's Database](jfrog-cli/cli-for-jfrog-security/download-updates-for-xrays-database.md) + * [Count Contributing Developers](jfrog-applications/jfrog-cli/cli-for-jfrog-security/count-contributing-developers.md) * [CLI for JFrog Curation](jfrog-cli/cli-for-jfrog-curation.md) * [CLI for JFrog Distribution](jfrog-cli/cli-for-jfrog-distribution.md) * [CLI for JFrog Pipelines](jfrog-cli/cli-for-jfrog-pipelines.md) diff --git a/jfrog-applications/jfrog-applications/jfrog-cli/cli-for-jfrog-security/count-contributing-developers.md b/jfrog-applications/jfrog-applications/jfrog-cli/cli-for-jfrog-security/count-contributing-developers.md new file mode 100644 index 0000000..5bf7f37 --- /dev/null +++ b/jfrog-applications/jfrog-applications/jfrog-cli/cli-for-jfrog-security/count-contributing-developers.md @@ -0,0 +1,92 @@ +# Count Contributing Developers + +{% hint style="info" %} +This feature is supported in JFrog CLI version 2.60.0 +{% endhint %} + +The `git count-contributors` command allows JFrog users to easily determine the number of Git developers contributing to their code. The counts indicate the number of contributing developers to the **default branch**. + +This information can be helpful when purchasing an Advanced Security subscription, as the number of developers is often a key factor in pricing. + +We provide several options to obtain the developer count: + +* **A single repository**: Analyze a single Git repository by providing the repository name. +* **Across a project/group**: Analyze multiple repositories organized under a project/group by providing the owner command option. +* **Across multiple Git servers**: Analyze repositories across various Git servers by providing a YAML file as an input file with the required parameters outlined below. + +Supported Git providers: + +* GitHub +* GitLab +* Bitbucket + +### Usage + +The git count-contributors command can be run from the JFrog CLI with the following syntax: + +``` +git count-contributors [command optios] +``` + +| Command Option | Description | +| ------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| --scm-type |

(optional)
The type of SCM to use for the analysis.
Supported Values: github, gitlab, bitbucket
Example: --scm-type=github

| +| --scm-api-url |

(optional)
The base URL of the SCM system's API endpoint.
Format: The full URL, including the protocol
Example: --scm-api-url=https://api.github.com

| +| --token |

(optional)
The authentication token required to access the SCM system's API.
In the absence of a flag, tokens should be passed in the JF_GIT_TOKEN environment variable, or the corresponding environment variables 'JFROG_CLI_GITLAB_TOKEN, JFROG_CLI_GITHUB_TOKEN or JFROG_CLI_BITBUCKET_TOKEN'
Example: --token:your_access_token

| +| --owner |

(optional)
The owner or organization of the repositories to be analyzed.
Format: Depending on the Git provider. On GitHub and GitLab, the owner is typically an individual or an organization, On Bitbucket, the owner can also be a project. In the case of a private instance on Bitbucket, the individual or organization name should be prefixed with '~'.
When using this option without a specific repository name, all repositories will be analyzed at the group/project level.
Example: owner=your-organization

| +| --months |

(optional)
The number of months to analyze for developer activity.
Default: 1
Example: --months=6

| +| --detailed-summary |

(optional)
Generates a more detailed summary of the contributors.
Default: false
Example: --detailed-summary=true

| +| --repo-name |

(optional)
List of semicolon-separated(;) repositories names to analyze, If not provided all repositories related to the provided owner will be analyzed.
Example: --repo-name=repo1;repo2

| +| --input-file |

(optional)
The path to an input file in YAML format that contains multiple git providers.
Example: --input-file="/Users/path/to/file/input.yaml"

| +| --verbose |

(optional)
Enables verbose output, providing more detailed information.

| + +### Example Commands + +**Single Repository** + +```javascript +git cc --scm-type=github --scm-api-url=https://api.github.com --token= --owner=jfrog --months=4 --detailed-summary=false --repo-name=cli-core +``` + +Required Parameters: + +* \--scm-type +* \--scm-api-url +* \--token +* \--repo-name + +Output: + +``` +// Some code +``` + +**Group/Project** + +```javascript +git cc --scm-type=gitlab --scm-api-url=https://git.vdoo.io --token= --owner=vdoo --months=3 --detailed-summary +``` + +Required Parameters: + +* \--scm-type +* \--scm-api-url +* \--token +* \--owner + +**Multiple Git Servers- YAML File** + +```javascript +git-servers-list: + - scm-type: bitbucket + scm-api-url: "https://api.bitbucket.url" + token: "token" + owner: "owner" + repositories: + - "repo1" + - "repo2" + - scm-type: gitlab + scm-api-url: "https://api.github.com" + token: "token" + owner: "owner" +``` From 9da6606ab8218c6d8c817cab22a3f986f444f647 Mon Sep 17 00:00:00 2001 From: Lina Daher Date: Sun, 21 Jul 2024 15:55:41 +0000 Subject: [PATCH 36/57] GitBook: No commit message --- jfrog-applications/SUMMARY.md | 1 - .../setup-frogbot-using-github-actions.md | 85 ++++++++--------- .../count-contributing-developers.md | 92 ------------------- .../jfrog-cli/cli-for-jfrog-curation.md | 40 ++++---- 4 files changed, 54 insertions(+), 164 deletions(-) delete mode 100644 jfrog-applications/jfrog-applications/jfrog-cli/cli-for-jfrog-security/count-contributing-developers.md diff --git a/jfrog-applications/SUMMARY.md b/jfrog-applications/SUMMARY.md index 91639fb..e7493bf 100644 --- a/jfrog-applications/SUMMARY.md +++ b/jfrog-applications/SUMMARY.md @@ -33,7 +33,6 @@ * [Scan Published Builds](jfrog-cli/cli-for-jfrog-security/scan-published-builds.md) * [Scan your Binaries](jfrog-cli/cli-for-jfrog-security/scan-your-binaries.md) * [Download Updates for Xray's Database](jfrog-cli/cli-for-jfrog-security/download-updates-for-xrays-database.md) - * [Count Contributing Developers](jfrog-applications/jfrog-cli/cli-for-jfrog-security/count-contributing-developers.md) * [CLI for JFrog Curation](jfrog-cli/cli-for-jfrog-curation.md) * [CLI for JFrog Distribution](jfrog-cli/cli-for-jfrog-distribution.md) * [CLI for JFrog Pipelines](jfrog-cli/cli-for-jfrog-pipelines.md) diff --git a/jfrog-applications/frogbot/setup-frogbot-using-github-actions.md b/jfrog-applications/frogbot/setup-frogbot-using-github-actions.md index c43f7d6..77d397f 100644 --- a/jfrog-applications/frogbot/setup-frogbot-using-github-actions.md +++ b/jfrog-applications/frogbot/setup-frogbot-using-github-actions.md @@ -2,22 +2,23 @@ ### Github Prerequisites -* Go to your repository's **settings** tab and save the JFrog connection details as repository secrets with the following names: - * **JF\_URL** (JFrog Platform URL - Example: `https://acme.jfrog.io`) - > You can also use **JF\_XRAY\_URL** and **JF\_ARTIFACTORY\_URL** instead of **JF\_URL** - * **JF\_ACCESS\_TOKEN** (JFrog access token) - > You can also use **JF\_USER** + **JF\_PASSWORD** instead of **JF\_ACCESS\_TOKEN**. - > - > - > Instead of using **JF\_ACCESS\_TOKEN** and providing an access token as a GitHub secret, you can utilize the GitHub [OpenID Connect (OIDC)](#authenticating-using-openid-connect-oidc) authentication protocol. - * **JF\_GIT\_TOKEN** (GitHub token) - > You can utilize [${{secrets.GITHUB_TOKEN}}](https://docs.github.com/en/actions/security-guides/automatic-token-authentication) for **JF_GIT_TOKEN**, which is an automatically generated token by GitHub. - > However, this option comes with a limitation: a workflow, such as Frogbot itself, cannot trigger another workflow. Consequently, if you have additional workflows intended to activate upon the creation of a new pull request, they might not be initiated. - > To resolve this issue, you can generate a [personal access token](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens) and use it as JF_GIT_TOKEN. - +* Go to your repository's **settings** tab and save the JFrog connection details as repository secrets with the following names: -![](../.gitbook/assets/github-repository-secrets.png) + * **JF\_URL** (JFrog Platform URL - Example: `https://acme.jfrog.io`) + + > You can also use **JF\_XRAY\_URL** and **JF\_ARTIFACTORY\_URL** instead of **JF\_URL** + + * **JF\_ACCESS\_TOKEN** (JFrog access token) + + > You can also use **JF\_USER** + **JF\_PASSWORD** instead of **JF\_ACCESS\_TOKEN**. + > + > Instead of using **JF\_ACCESS\_TOKEN** and providing an access token as a GitHub secret, you can utilize the GitHub [OpenID Connect (OIDC)](setup-frogbot-using-github-actions.md#authenticating-using-openid-connect-oidc) authentication protocol. + * **JF\_GIT\_TOKEN** (GitHub token) + + > You can utilize [$\{{secrets.GITHUB\_TOKEN\}}](https://docs.github.com/en/actions/security-guides/automatic-token-authentication) for **JF\_GIT\_TOKEN**, which is an automatically generated token by GitHub. However, this option comes with a limitation: a workflow, such as Frogbot itself, cannot trigger another workflow. Consequently, if you have additional workflows intended to activate upon the creation of a new pull request, they might not be initiated. To resolve this issue, you can generate a [personal access token](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens) and use it as JF\_GIT\_TOKEN. + +![](../.gitbook/assets/github-repository-secrets.png) * Under **Actions** > **General**, check the **Allow GitHub Actions to create and approve pull requests** check box. @@ -30,50 +31,40 @@ ### Frogbot GitHub Action Templates 1. Begin by cloning the GitHub repository to your local environment. - 2. Switch to the target branch where you'd like the pull requests to be scanned. - 3. Create a file named **frogbot-scan-pull-request.yml**. Fill it with the provided [template](templates/github-actions/frogbot-scan-pull-request.yml), and then push it into the **.github/workflows** directory at the root of your GitHub repository. - 4. Return to the default branch. - 5. Now, create a file named **frogbot-scan-repository.yml**. Again, populate it with the provided [template](templates/github-actions/frogbot-scan-repository.yml) and push it into the **.github/workflows** directory at the root of your GitHub repository. -
+\ + +
-Authenticating using OpenID Connect (OIDC) -#### General +Authenticating using OpenID Connect (OIDC) -The sensitive connection details, such as the access token used by JFrog Frogbot, can be automatically generated by the action instead of storing it as a secret in GitHub. -This is made possible by leveraging the OpenID-Connect (OIDC) protocol. This protocol can authenticate the workflow issuer and supply a valid access token. Learn more about this integration in [this](https://jfrog.com/blog/secure-access-development-jfrog-github-oidc) blog post. -To utilize the OIDC protocol, follow these steps: +**General** -#### JFrog Platform configuration +The sensitive connection details, such as the access token used by JFrog Frogbot, can be automatically generated by the action instead of storing it as a secret in GitHub. This is made possible by leveraging the OpenID-Connect (OIDC) protocol. This protocol can authenticate the workflow issuer and supply a valid access token. Learn more about this integration in [this](https://jfrog.com/blog/secure-access-development-jfrog-github-oidc) blog post. To utilize the OIDC protocol, follow these steps: -1. **Configure an OIDC Integration**: This phase sets an integration between GitHub Actions to the JFrog platform.
- A) Navigate to the Administration tab In the JFrog Platform UI
- B) Click `General` | `Manage Integrations`
- C) Click `New Integration` | `OpenID Connect`:
- ![](../.gitbook/assets/oidc-new-integration.png)
- D) Configure the OIDC integration:
- ![](../.gitbook/assets/oidc-configure-integration.png) +**JFrog Platform configuration** -| NOTE: | -|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| The value specified as the 'Provider Name' should be used as the 'oidc-provider-name' input in [Workflow configuration step 2](#workflowstep2) below. | -| The 'Audience' field does NOT represent the 'aud' claim that can be added into identity-mapping configured in the 'Claims JSON' (shown below). Only claims that are included in the 'Claims Json' created during step 2 will be validated. | +1. **Configure an OIDC Integration**: This phase sets an integration between GitHub Actions to the JFrog platform.\ + A) Navigate to the Administration tab In the JFrog Platform UI\ + B) Click `General` | `Manage Integrations`\ + C) Click `New Integration` | `OpenID Connect`:\ + ![](../.gitbook/assets/oidc-new-integration.png)\ + D) Configure the OIDC integration:\ + ![](../.gitbook/assets/oidc-configure-integration.png) -
+ 2. **Configure an identity mapping**: This phase sets an integration between a particular GitHub repository to the JFrog platform. - An identity mapping is a configuration object utilized by the JFrog Platform to associate incoming OIDC claims with particular selected fields. These fields might include `repository`, `actor`, `workflow`, and others. - To configure the identity mapping, click on the identity mapping created in section 1 and then click on `Add Identity Mapping`. In the 'priority' field insert the value '1' and fill in the rest of the required fields:
+ An identity mapping is a configuration object utilized by the JFrog Platform to associate incoming OIDC claims with particular selected fields. These fields might include `repository`, `actor`, `workflow`, and others. To configure the identity mapping, click on the identity mapping created in section 1 and then click on `Add Identity Mapping`. In the 'priority' field insert the value '1' and fill in the rest of the required fields:\ ![](../.gitbook/assets/oidc-identity-mapping.png) - You have the flexibility to define any valid list of claims required for request authentication. You can check a list of the possible claims [here](https://docs.github.com/en/actions/deployment/security-hardening-your-deployments/about-security-hardening-with-openid-connect#understanding-the-oidc-token). - Example Claims JSON: + You have the flexibility to define any valid list of claims required for request authentication. You can check a list of the possible claims [here](https://docs.github.com/en/actions/deployment/security-hardening-your-deployments/about-security-hardening-with-openid-connect#understanding-the-oidc-token). Example Claims JSON: ```json { @@ -81,7 +72,7 @@ To utilize the OIDC protocol, follow these steps: } ``` -### Workflow configuration +#### Workflow configuration 1. **Set required permissions**: In the course of the protocol's execution, it's imperative to acquire a JSON Web Token (JWT) from GitHub's OIDC provider. To request this token, it's essential to configure the specified permission in the workflow file: @@ -89,11 +80,8 @@ To utilize the OIDC protocol, follow these steps: permissions: id-token: write ``` - -
- -2. **Pass the 'oidc-provider-name' input to the Action (Required)**: The 'oidc-provider-name' parameter designates the OIDC configuration whose one of its identity mapping should align with the generated JWT claims. This input needs to align with the 'Provider Name' value established within the OIDC configuration in the JFrog Platform. -3. **Pass the 'oidc-audience' input to the Action (Optional)**: The 'oidc-audience' input defines the intended recipients of an ID token (JWT), ensuring access is restricted to authorized recipients for the JFrog Platform. By default, it contains the URL of the GitHub repository owner. It enforces a condition, allowing only workflows within the designated repository/organization to request an access token. Read more about it [here](https://docs.github.com/en/actions/deployment/security-hardening-your-deployments/about-security-hardening-with-openid-connect#customizing-the-audience-value). +2. **Pass the 'oidc-provider-name' input to the Action (Required)**: The 'oidc-provider-name' parameter designates the OIDC configuration whose one of its identity mapping should align with the generated JWT claims. This input needs to align with the 'Provider Name' value established within the OIDC configuration in the JFrog Platform. +3. **Pass the 'oidc-audience' input to the Action (Optional)**: The 'oidc-audience' input defines the intended recipients of an ID token (JWT), ensuring access is restricted to authorized recipients for the JFrog Platform. By default, it contains the URL of the GitHub repository owner. It enforces a condition, allowing only workflows within the designated repository/organization to request an access token. Read more about it [here](https://docs.github.com/en/actions/deployment/security-hardening-your-deployments/about-security-hardening-with-openid-connect#customizing-the-audience-value). Example step utilizing OpenID Connect: @@ -105,4 +93,5 @@ Example step utilizing OpenID Connect: with: oidc-provider-name: frogbot-integration ``` -
\ No newline at end of file + +
diff --git a/jfrog-applications/jfrog-applications/jfrog-cli/cli-for-jfrog-security/count-contributing-developers.md b/jfrog-applications/jfrog-applications/jfrog-cli/cli-for-jfrog-security/count-contributing-developers.md deleted file mode 100644 index 5bf7f37..0000000 --- a/jfrog-applications/jfrog-applications/jfrog-cli/cli-for-jfrog-security/count-contributing-developers.md +++ /dev/null @@ -1,92 +0,0 @@ -# Count Contributing Developers - -{% hint style="info" %} -This feature is supported in JFrog CLI version 2.60.0 -{% endhint %} - -The `git count-contributors` command allows JFrog users to easily determine the number of Git developers contributing to their code. The counts indicate the number of contributing developers to the **default branch**. - -This information can be helpful when purchasing an Advanced Security subscription, as the number of developers is often a key factor in pricing. - -We provide several options to obtain the developer count: - -* **A single repository**: Analyze a single Git repository by providing the repository name. -* **Across a project/group**: Analyze multiple repositories organized under a project/group by providing the owner command option. -* **Across multiple Git servers**: Analyze repositories across various Git servers by providing a YAML file as an input file with the required parameters outlined below. - -Supported Git providers: - -* GitHub -* GitLab -* Bitbucket - -### Usage - -The git count-contributors command can be run from the JFrog CLI with the following syntax: - -``` -git count-contributors [command optios] -``` - -| Command Option | Description | -| ------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| --scm-type |

(optional)
The type of SCM to use for the analysis.
Supported Values: github, gitlab, bitbucket
Example: --scm-type=github

| -| --scm-api-url |

(optional)
The base URL of the SCM system's API endpoint.
Format: The full URL, including the protocol
Example: --scm-api-url=https://api.github.com

| -| --token |

(optional)
The authentication token required to access the SCM system's API.
In the absence of a flag, tokens should be passed in the JF_GIT_TOKEN environment variable, or the corresponding environment variables 'JFROG_CLI_GITLAB_TOKEN, JFROG_CLI_GITHUB_TOKEN or JFROG_CLI_BITBUCKET_TOKEN'
Example: --token:your_access_token

| -| --owner |

(optional)
The owner or organization of the repositories to be analyzed.
Format: Depending on the Git provider. On GitHub and GitLab, the owner is typically an individual or an organization, On Bitbucket, the owner can also be a project. In the case of a private instance on Bitbucket, the individual or organization name should be prefixed with '~'.
When using this option without a specific repository name, all repositories will be analyzed at the group/project level.
Example: owner=your-organization

| -| --months |

(optional)
The number of months to analyze for developer activity.
Default: 1
Example: --months=6

| -| --detailed-summary |

(optional)
Generates a more detailed summary of the contributors.
Default: false
Example: --detailed-summary=true

| -| --repo-name |

(optional)
List of semicolon-separated(;) repositories names to analyze, If not provided all repositories related to the provided owner will be analyzed.
Example: --repo-name=repo1;repo2

| -| --input-file |

(optional)
The path to an input file in YAML format that contains multiple git providers.
Example: --input-file="/Users/path/to/file/input.yaml"

| -| --verbose |

(optional)
Enables verbose output, providing more detailed information.

| - -### Example Commands - -**Single Repository** - -```javascript -git cc --scm-type=github --scm-api-url=https://api.github.com --token= --owner=jfrog --months=4 --detailed-summary=false --repo-name=cli-core -``` - -Required Parameters: - -* \--scm-type -* \--scm-api-url -* \--token -* \--repo-name - -Output: - -``` -// Some code -``` - -**Group/Project** - -```javascript -git cc --scm-type=gitlab --scm-api-url=https://git.vdoo.io --token= --owner=vdoo --months=3 --detailed-summary -``` - -Required Parameters: - -* \--scm-type -* \--scm-api-url -* \--token -* \--owner - -**Multiple Git Servers- YAML File** - -```javascript -git-servers-list: - - scm-type: bitbucket - scm-api-url: "https://api.bitbucket.url" - token: "token" - owner: "owner" - repositories: - - "repo1" - - "repo2" - - scm-type: gitlab - scm-api-url: "https://api.github.com" - token: "token" - owner: "owner" -``` diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-curation.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-curation.md index 2bf9dce..2d78d94 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-curation.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-curation.md @@ -13,9 +13,11 @@ The 'curation-audit' is a JFrog CLI command designed for developers to scan thei For a full list of the package managers and build systems supported by the curation-audit command and the required Artifactory and Xray versions to use it please see: https://jfrog.com/help/r/jfrog-curation/curation-support-matrix curation-audit command supported package managers and build systems: + * Npm (npm) * Maven (mvn) - Requires xray 3.92 and above, and Artifactory 7.82 and above * Pip (pip) - Requires xray 3.92 and above, and Artifactory 7.82 and above + *** ### Commands @@ -26,44 +28,38 @@ Audit your Project with JFrog CLI curation-audit command Prerequisites: -Make sure your JFrog Artifactory admin configured the curated remote repository you are using during your build process. For more information refer your Artifactory admin to: -https://jfrog.com/help/r/jfrog-curation/configure-curation-pass-through +Make sure your JFrog Artifactory admin configured the curated remote repository you are using during your build process. For more information refer your Artifactory admin to: https://jfrog.com/help/r/jfrog-curation/configure-curation-pass-through -1. **Connect JFrog CLI to JFrog Platform** +1. **Connect JFrog CLI to JFrog Platform** - Connect the JFrog CLI to your JFrog Platform instance by running the following command: + Connect the JFrog CLI to your JFrog Platform instance by running the following command: ``` jf c add ``` - - When prompted for the access token, use the token generated from Artifactory. For more details, refer to the [adding and editing configured servers documentation](https://docs.jfrog-applications.jfrog.io/jfrog-applications/jfrog-cli/configurations/jfrog-platform-configuration#adding-and-editing-configured-servers). + * When prompted for the access token, use the token generated from Artifactory. For more details, refer to the [adding and editing configured servers documentation](https://docs.jfrog-applications.jfrog.io/jfrog-applications/jfrog-cli/configurations/jfrog-platform-configuration#adding-and-editing-configured-servers). ``` jf c show ``` - - It should present Artifactory server just added (with default true) -

-2. **Configure JFrog CLI for Project**
- Ensure your project is configured in the JFrog CLI with the repository you would like to resolve dependencies from. Here are details for each package manager: - - - **NPM:** - - - Set the resolved repository using the [**jf npmc**](https://docs.jfrog-applications.jfrog.io/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/package-managers-integration#setting-npm-repositories) command inside the project directory. + * It should present Artifactory server just added (with default true)\ + \ - - **MAVEN:** - - - Set the resolved repository using the [**jf mvnc**](https://docs.jfrog-applications.jfrog.io/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/package-managers-integration#setting-maven-repositories) command inside the project directory. - - - **PIP:** - - - Set the resolved repository using the [**jf pipc**](https://docs.jfrog-applications.jfrog.io/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/package-managers-integration#setting-python-repository) command inside the project directory (The only package installer supported for now by Python is "pip"). +2. **Configure JFrog CLI for Project**\ + Ensure your project is configured in the JFrog CLI with the repository you would like to resolve dependencies from. Here are details for each package manager: + * **NPM:** + * Set the resolved repository using the [**jf npmc**](https://docs.jfrog-applications.jfrog.io/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/package-managers-integration#setting-npm-repositories) command inside the project directory. + * **MAVEN:** + * Set the resolved repository using the [**jf mvnc**](https://docs.jfrog-applications.jfrog.io/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/package-managers-integration#setting-maven-repositories) command inside the project directory. + * **PIP:** + * Set the resolved repository using the [**jf pipc**](https://docs.jfrog-applications.jfrog.io/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/package-managers-integration#setting-python-repository) command inside the project directory (The only package installer supported for now by Python is "pip"). #### Commands Params | | | -|-----------------------|---------------------------------------------------------------------------------------------------------------------------------------| +| --------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | | **Command name** | curation-audit | | **Abbreviation** | ca | | **Command options** | | @@ -72,7 +68,6 @@ https://jfrog.com/help/r/jfrog-curation/configure-curation-pass-through | `--threads` |

[Default: 3]

The number of parallel threads used to determine the curation status for each package in the project tree.

| | `--requirements-file` |

[Optional] [Pip]

Defines pip requirements file name. For example: 'requirements.txt'

| - #### Example 1 Curation-Audit the project in the current directory. Displays all known packages that were blocked by Curation Policies. @@ -96,4 +91,3 @@ Curation-Audit the project in the current directory using 5 threads to check the ``` jf curation-audit --threads=5 ``` - From 08661e8c1d2a63eeb773b3ae9dcb0d4cc91786eb Mon Sep 17 00:00:00 2001 From: Yahav Itschak Date: Wed, 24 Jul 2024 18:01:35 +0300 Subject: [PATCH 37/57] Update multipart-upload flags (#142) --- .../jfrog-cli/cli-for-jfrog-artifactory/generic-files.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/generic-files.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/generic-files.md index 293a6e9..99f8f0c 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/generic-files.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/generic-files.md @@ -46,8 +46,9 @@ This command is used to upload files to Artifactory. | `--retry-wait-time` |

[Default: 0s]
Number of seconds or milliseconds to wait between retries. The numeric value should either end with s for seconds or ms for milliseconds (for example: 10s or 100ms).

| | `--detailed-summary` |

[Default: false]
Set to true to include a list of the affected files as part of the command output summary.

| | `--insecure-tls` |

[Default: false]
Set to true to skip TLS certificates verification.

| -| `--min-split` |

[Default: 200]
The minimum file size in MiB required to attempt a multi-part upload. This option, as well as the functionality of multi-part upload, requires Artifactory with S3 storage.

| -| `--split-count` |

[Default: 5]
The maximum number of parts that can be concurrently uploaded per file during a multi-part upload. Set to 0 to disable multi-part upload. This option, as well as the functionality of multi-part upload, requires Artifactory with S3 storage.

| +| `--chunk-size` |

[Default: 20]
The upload chunk size in MiB that can be concurrently uploaded during a multi-part upload. This option, as well as the functionality of multi-part upload, requires Artifactory with S3 or GCP storage.

| +| `--min-split` |

[Default: 200]
The minimum file size in MiB required to attempt a multi-part upload. This option, as well as the functionality of multi-part upload, requires Artifactory with S3 or GCP storage.

| +| `--split-count` |

[Default: 5]
The maximum number of parts that can be concurrently uploaded per file during a multi-part upload. Set to 0 to disable multi-part upload. This option, as well as the functionality of multi-part upload, requires Artifactory with S3 or GCP storage.

| ### Examples #### Example 1 From e9d9970b9a5dff73bc44872fac13b097808c28c9 Mon Sep 17 00:00:00 2001 From: Robi Nino Date: Wed, 31 Jul 2024 16:47:45 +0300 Subject: [PATCH 38/57] Update image of build info summary (#143) --- .../.gitbook/assets/build-info-summary.png | Bin 11547 -> 187254 bytes .../jfrog-cli/cli-command-summaries.md | 8 +++----- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/jfrog-applications/.gitbook/assets/build-info-summary.png b/jfrog-applications/.gitbook/assets/build-info-summary.png index 27f5de3d6d32b7510c0f7798d6c791f27357ef59..4822d43a055ae57eb93aa15d66c7ad95956b9825 100644 GIT binary patch literal 187254 zcmeFYWmsIvwlGY9ga9G91%kU1+&#Fv2iL}}ao6DP5L_E~2^QSl1Hs)p(8$+w&di*7 z?>&FNe|JC6?p<9~Yn829R;wbE6eLlQJ|Mxsz@SJ=iL1cCz=y-Yyv}<22AcDku=@c9 z=AEFGn3$5Zm>7wYlfAi>tr-lAR7A2Sf|lwqPL6IuoUr99_`=`~_*b;A3WKL$rI-Vw z#@)))UCS{+H_CVUc}El~rOK!0tf&#;utMVoirb=5h{#pd_SbDhh! zKfws+zd{=$l@whL7e_vZIS3D#9i*n5l@{=S>vtrKZ0XR_N@lL6#_exb`r-w2$0V6~ z&gfJ-&i(b$XnFCwRSzbPCR`QRx<(j|`pRF^QDU1PCR}C1)-y*c(&)90F&;^OR1vp+ zOhqBLdJK5jcH3ABtr;e-uy-qb_LUMKj9(x(^F4`Fk_B7K z(SR<(FmF-#oR|2_H9lt~|DM_hZ*-B2UglMxo-(J!kC*hA7k#HXN-;qOBlTgluzsn< zch_!wHr8oa6~b%Oa?#x#n{D(sv5NG#ZZ zLnK6^)a6zg#{4x_{lFV-_kM6_e;Z5LEvc7?Yu5rn7N{Do?{sZ~?R*)`-$J_k;E_SY zOs7CZZICvM7@aT}1cKS}e+>)sQR<8QYgG{{w1!)bn;yTbc#`k0jN{(_{%+9oZXCMw zZ;c3$k$Q5`E=A5R`2Ch?hSfMPA3j0WQcYnOWp@iqvnRqBZqw}o=fW#GxtzVv;v<3~N> zrC&@_sF>i89DUMJm43!?q$ldr?y8?*75O#fdz#3G@GKTKgkNp!SCACpYtd*~(Y7@1{7a~8VZf~vMiZ``~b_@({ z4+ruF`u!$otDBMA<6Ypr_Q)sa>oqiGhy`(-wFHG6RLec^k zrtlp1{@1a5!%1hrL4)r;&f_b8@NiF0Pr+vER3glYdsy>J{CO4!To-TBs}_e~di4EK z9=#Q`pQ@rL8&;m*-=@8?X(6)s`KH64_$_=s2}XYa1q=S?+*jaMJUN8=@7_x9WO|Tl zaMb+eztArs-uc7jy&{Aw>EUs}ZwMmzNwg-g{`2(#!ufX#coC_$*!iTM;jG31OQaKT z;VwmB;~gm8NQedno=--VAnt-5N+_;J}>(K*#!nJ?Nf13`j?7WK`ppHK{6)Bi+yi4N_%hg~*F}^y|7%UQLz)B5hU|Kl034liok-(O55_2e8MUQrJNGI>JG*Gz$^0ISh@_lCOU@X2s(^pGdeysg|ane zpjeR#W0~)qsWp)+eq*R-=tJCtNOJK}-iXF-*@SwPT9syJ`GZPyrFs4jwaiM5QjKCa zrPD~ATwd*UmF%Jk<=g^;GGFnhln4Je@_o|eD&&$TWj~mrqdo{^P{_-U3(M#1iH=ug zSg^NS;*Ed(@y*c+*>cs=!fIVdoROZfNuyY!Y=NkXv&t7B55PTzKZQM&IsLVg&6^fe z^j?=**P?aeRdyzC?q|H1FEKx3wLX2b>z_wIca=PPIJ|O|bpao3Og$A!E+Ws3&ghmc z=7EKY7n|o}7jmn+m0v1-H>IlL4ai%`Wj_<)0T*F7YB<7K)2wRd^X9*NpBiFWQZjAX zxcF+68y^#&t6V(&p#bx9=MQ!hVv~T&55E$BOdhVdPzhujDA?zNGx5@b)1>5@(i+me zIU7Gkb1{Bew|V&f)%XXCESs*$g6)F6ovq-6cM7oTULU#cbst%uarOW(3Y?;m5|I+c zK)~Qt=~A_%5u(wk0j?@r=vtVqtf&I5q5<$YwK)lFR{+Yonyc?tWmf6kO0zSwzuN`r z57P9~#47hH&llJ&S1hreUZ2{W67w8z2lHX^uyc110t9)1HzU*gl77xEu48U%dmfY0 zv$S(%LuJE)*F4|qpud92QZ>@mPy)u_x%~);a6que3o)MXpKyNw^$8;Ifw)@bu~k--aVa$Zd6r z$zIhy28?sAK-{JnIcc7&V2EiLW8ZjgBE%+?v+34tAxB_N<;-c$ymq%O5Of^$-tbT*Ri@p?#vs!1{j-Jc_}Qc`BYmz#=_g>{S%i3gOfylJkmna zadT;MG73@~Is7c74!tXg>zMk~IEo!S!`3Q2g;9yO)E0_@f)W5Ei;*5IQ5oZr>LlhY zDFqG-lH_ci`6A|XH3 z&87B=$H3b0+I)3y>M`rVdo;U+JA~-gNcF*ts?o(ba;Ip^5s?zvv-~Ah*$d3?G3_TM zoTzs>_pEwQ?=>PCcW{RbymKE%9#Lm8i-{SgXwYyPCTg;4O@Gw)=JjrxZ?m+&pIcMx=jO%kZdl_7GWM9)>*YCX;>}WNVADjmEzm`Wv!JW`ux|O|P zZX75d*xuHS>c9c$d}YRAu+#lyKKwwrDdRzzD)UixRHmC@m#OonVivU9{hmoyccEzw zaQ_3lAG;TuOY@<6tyRWEeXG2B{+GrgC?7%o zJMh4ajgQSm_e2lYz*l1|^Xv|2-a7i+9qpR=jw{*jp+URm{x0Pwddqy5)S>!xFS=JjXSFbB!~iL`7+jx!F9_IGZKAPF1F#?E%?GrLX9nv&XyF1t~K z?9L*{cfsMVeTeGaCO?{6-aW~$FYBaHV(MX5VX{Z@5BRrFDEKJZ(bCZ$B}HS|xquuW z1&bp6dHaFsFDrT$Wj7BxmoFD~0oTHF-}~Ho&IP-f@AJS$`;tEf zuX8bk1R(rR$cM7`nwcQ^&EBqc;xT+eEXRJr$%1^3w(T} zrVoD{qZ9inWOR?Otg!}D8nk&n?Q?OwhXVs?>iLB`rnK3Ke>`!}_YatVf8i2BVGyAI zFrcqT9_(MW;luOb{z|{jf|kLEsESETL%*sfPG)9y&X)Ern;!~wpc#k`QrgZiFgTQd zysxBHC@!G*m#oyZT(soncunj9Oh%^m#%4?&0Ea*D!0>zULX!Y97b6l6fUTV~uZIBH zziRM8(|=?$lac(Zii?c^nU=f~iI}~U83`v73lj^OAQA})3BQx6Ij@TN=Rd)r{{+Y^ zU0fV^nVH?)-I?6knCzV_m|1yvc$ir}F@O5R2(7{B4777G@?f-cCjU2*zwn5gIh#0H zIk;Ha+mZZ%*T~r3)kT1e?2m^2e*WE0GY_l(v}EV}=dhpyWd5UsnU#r!`ET4%Q2sx1 zd6ld@%xtyAtpLzDgSH{a%Ff2g|1W_5RrH@G{{gD?4^UQ4mVbi&qv(HvsymxGiP;07 zjk*Z_XTkmi{%7Hzfc(sVjQt;T@$ZTLS1xp>1(Eof|6VmgBw-2yYv@7}T8S&FLBCKk z`{RL~fd0_@`wLCKGP2i%cb4@mc6g&a8z=6ftpWP*gfJZSAH9AHqRNw7Vd8DZfWa2F?F-EW#zf$ zXX&2%S*nb@W6Qt{BQ$>)coLXbZ-rrC|B)O|5k`jpX1;o-$NgVQ(WKszpiQIyZ!k1} zVK!=i;khwBm{ipNiSrNiXyFHN|7hm#WL`R^Fp2fvNB_~V|JI$i;y3>d8_CodA_*GD z_51I;V*gL~|HKPV_VC}Zp;_)hJCXrJ_<2S8zeWxPg+=%IZ`j_lJHx&eAMb#3xc|G~ z|Ew1fF8JTD!DsNif==bes}}G7G0FeJ;x8;t{NI-#3kFu1?Hoo=@V~8qWfH7%N$Y+C zb{m7W08VzFxi!bU0mL>K<Gx=@S|Zn^QKfT#Okp!!myGfR$mqNqc7Rw8 zHFG+W5lM_U+c@w3mnN`e^S0r?aRPK!XQCKQ=^0o-i~@#Uy2e|;s_S0aRl@AOW?I#f zm3~CbHRqwu&|-z!%kJnJ!!XqP+5+FYvaTxiiiKz1<<3Z*mBj+86@(XXbLahr#ogkj zAMU70=-FbmKHsX(q`+zN^Aq4e({T5wZs=Q-4&?3>aFWJ)x9+~VyMS9iRpxAQeDd-m zn!sYy_gbDcYzY>b;fpSyvvJ-1yz>rn-i_-j2XNDIDl4kgZMM4`4M)G*%d}tEn~L1z zy2#mka=iH2(^w8#@tYpNk&U_E^JDUlAoo%XzW<)~tHM!#)IzdU__nfcN7rwk* z^Voeal&4KFm$b<9j(sdS`K3}nRhNm@rGHXrwN$y_NG+gp^7})BayDI$$lo(f5+p2v zD6VVYP|VmZ%$M2xq-MhdNNBWOp1~4YurAiNow&!T2jb}dSQ+P(B*T!u@)oOFX{fb2 z6Jhu4e_1X)4{Md27BXDGh$X{~G!^=qIlS?3rRjAX)Wi7<>i&eb1Iln+&<1orftwli zN$`1HN`2x#?7W;9A{lz!s?XY#osKted_qYwBe1U#QF!MGegXqxc=n{azE>g1@8MXhp*HZ^-MDDnzZY@2h38Jqq)}5h&3v9 zALc+BujifiWvVo5Q)_QISC@Wd+8Sf(eHYv-Er=ATG=KoQ25{U4)HNyhe;*XY+FG0o z)w-tnxOr`tm7Ey9JZRe8V#W&DJv|cjA4%p-b?S82bFNLhKE0#etuNWCuI{jSc3P?_ z6ppwJBl32rLIRz!)l>u2Dv)Z}{@&lE0e>teeY&_8+NLL|7xJ^q=KpHfzKhd-lOXGKJkqE{3s5gVW^@6i96dG)#PSd0IG^_! z`aR7Xcs$=9z6Tv!NYUmB%&M2iSC>`@tIb+`(O)f%H!fWHYip>{1VmzlGx6Cv>lQjA z;QFnsBn>B?ObWf!bW=Y97zIo#B}Q>_d@WTH{M**Evh`?mX7+OYlx+lN$0C%Hg43jF zGFUc##1NhtNNg@22>I44`+coPFYs;LeEB_l=22h{%54y)U{3vVRW7|+Kgn+*`O#6_ z(=~g8*l#7r{gq-=N1`QY9nxAB+E4#43lnrr0^ zfnAyda3??PB=CB&nU(0%;#?(D2V9V7kOHt+&tY1E3e@TYUa45fx7m91tWtd1zE1LN zWxAc|bXvi;pit+T97y0hZz-6Yr#tdSAa)A>xJzW%^9JREDc|iO=ElOkdhaYX)4Smf zAOx^F3gT)4?xhbB`JU8@3%4EgBA<47oecwWtcuf5X6eo)5ojlfU;z@X8;sft_Fost}gjfoQ~VU6faZkxJl1kH^>ARkH2!n_PK1<+lu6`ZV18MPqICA zeW6+;o-2K9+YabY3Eh1$d>Ov;sKB=_da=8ylcTtp6YAxQ58jTIqu<-rZeu2|>%2T@ zn&X2zc2l&esC@?@>>;}k7fgeB^@6uHLw9Aeop&y^CrPskvgI7)ufH{v#60{)$|*73 z?vJ4%_k^4dGsOx#lxBN8Ue2Fx{9L6gs*-Wd-)+&fQC$qh z2)9-Z+pDwJfBh{(5bpSzXH##&_@w;yOuEtHtSf~Vr`dc6;02`iLdziT0bw^{fii#M#gR8Qwdb!LouJ|6Qb!S_8a2vouUbmAp3LS;8-e8{@5C%NQlAW9e z@y0Hm%R-5-_Nh`iXSrOAaPnOt$%^ z6hf5$o;t&)`FiZX^;;~(JPp`*1p?HaNai0W3NIXx4(G|LyEshn`dXWt-64?>6Po&I z+46{auDg-VW>fal^RGot&oQk`UO+i*u&D7galzoqMXqmC*(v{t?X;P9Q}yLSxhsKY zEY(V^*ha0iU+lH^q|WM6H`VgG{i7P-enl%ALD}1ZAEtfN`7TR&cQ}uw9GSU`d-?W& zJhp*rGfnV(nly~a8gkNXSQne19G2e8o~LWE?s^K|^sSGs=&fx~l{X}G?drT+9yA9R zHjuX7AP{?h8T{zepznQH)F`7;b(M2Vi1U%pweFQ*pVr%4UE9ln(|~f3y<~&Qcyh^= z{IHMaI-sVw=6?50Uz;$X{`T_B2Jl=USHD^v;|-?h4b~gdSsqUCMcEgba<7aifN^OS z<%%It)%SiEw|%!b^TaN?+a#7j zst(whCh}!pTyv%l!U~D-*={vexD)XjlitPs;BwY7tFUk$jHySHZM_Pd_!vU+X7=Z9 z*7Zbvl- zdN1(ku-a#_s_LhDZ(We<_b^=Dv5lmPu_LNc?(3NsCi~IhXTWf!-j!_s5`6_)|5%H!k2c3(x8ymr2WBe`EoMTYcP&S*id#PE?TRYU1Oj&wjRB zolw**A#TvVKyFroi%lrayyI!(!pM!m-1Q#zTur8Bd>hDUCfCgppBoyn&VJrdjX zHdmF<2Y>$6Bx3p{v5BrESKz#mA$wm@hwkj;qN31!|J}ORdEvotHd8jgJ-SvP7uYFt zomvRZu<`y0ylL<5u^Cy_W)XXrc+tFi)=u48J!inXDCK9cxt|-s1=MnsFE(N45kua8 zhBAhILCHQxV@mTngvYGIM{NPmo0?2-vN!31L9Q`h!n_W^6YXai#|0SS?3f3tXZV#6 zlG82CSs#2VV5tI$j!!g4!X*AJxj-1#jm7ct^E;+JHWs^r%3&II)CDPNslI5$3b4xtliaUx62O4Ecuojq>3@)+;6Z5NNyo$arhjr{xb^1BOtH96E8V z&ht*Nga@q{l~g+PD&h|_9{L5*}f;Y85WH~rb1{?ro<8smg<#G zGdWhbXiIXey);nPD1TNRev`1Z{>82A-620}bXR!4m&uII(ZCcwCj$>MZ3$r*3oIct zao_Z^R}ddrF(gu|UBbL8D?@z;m0^5smQ+2}oB&G416Eu-jcqBd9s0QbDv!K~rdgVoCivf%#XOX3J*JL81&NSe|zWOD!OaY@3?> z?<)(hr!p8kgv#t}s+)8+&Zt|II_>9UX&>_QQvD2m;DAAl9h;~X8Ad0Y8}5|exSwvP zH*)rwn=;NuFYfULXM26{CTfq$D^@l!A!1dO;YWVNZR&mo|_1cq=q^%{3tL zmf1;uwvOyGj&NmOjRiEh68a?UzqJ5q*hZXiagpwek)S*+dUi`WV!!Y23A8{G7Sb4s zHo9cOa_OdwdwNUe+D-y5MPAsMW;6D8+xn^Z%=?qeShy-HjoHgO@|nh``v%{6nP%pH zw6URULWcgzwn)->Ebn)L29F3qHv*!+J0Qp$ciH-}({nh!2nCGKc24mkRHzvxIo_Y{MV}g?u&*BCBg*(+ zcRgOo9?w^3CY;lT^X)^JyAKUp6N6Ozj00$FXHqSI2tz?ur>+abA#jH}?0F~#)c+!M z<<@+C1D{=N-L=jSH^|PGxWN0NQHo$eEV||?5=I<2UqZn(yN<0l;5-5g0zil3r`@)+ zGH;YNUuO`zcAM`9toJIW{ zlOrzsc7#6bjlnr4kt}81lau?ENB}(|&Lm{azUNrlb*7UJ6;S|gN19AE-G^UIdt0oA z1T6$y@bWk-czK*GIZ(lb=JRyBco*o!IlQAz{)!JU2}#WVlY#j7FY~*KP_J;`#sZ~=zMG8uQR>0%^HsUDpZ?R z@4Z+(Y$3kH*dXh%xgH{)jLTrV$O}l!J|w$kQr~V`LVY+W=pQX^7h=}9nmn2sq?kDS zMWocT-Bsm!2vGqyGrSe76)uFFRnvil1SV0}{9dwXw8kv*CJ0t&7|{*~qmQ%fJ-R|C z?}6)V3fos}XW4YKu_(tpFNFeR0hL&CiLk%n{&YwR*OMqw2T0i+GT-Cck7uYPTEWx? zA>$7$o#|HD5V%``V-ez!`G!db#0GT6YQv*5D>50^&G2>IVp|ex>TsS746jTJ1{G=`*6D>hgFZWkOlIY>2)Lp0RMgH5k5)b8Q|!r>0=1EyO~1-k4gUD+DER`TQ)NivLoC6+Qz@Rmo0E1r2@3JBadOL20t9Lh@1aq8oPY5IDi@E`I%ud3{uvRJb<#n3P_I zmq}GCxTDn+x}h3i67RI8NbLNZWe>!-^!z$$O+jr=$S5;`U>SaH8HF7`b{jRRpOqH{ znHA!#ExuP5aTbQZ=d}laXixQhFmTEjDP~EK_ff(RYa1Apw$$RtaO%u| zu#yJ?K72EzgeiYs+ais{FfsiAJ!ofy3`x92i9;Tz!A2FIj|ID&`=f673Gr|~7X;Y4 zN|)Eee{=9&BRUi;br1y}AEw_$M>TW`xKMU!n%IMm*U1md=|OS|^sgk~oYL<$H$wci zN|n=QSDEyrDQ0}y+E6ogwJ9sgs)+7bChc-g45?~m47h5`n2!nT8mOfi&}heO&%Y8g zW9^Zn%iJnZ4{Pck8eqgSKc=@ehW(y5y<`)G$k_6<*l%|9Q4q<9CkeVJ`FPJC=I4(7a=}B%OdLWw z64}W-3p*Xj#5+u&cpK+WJ55WERo6BtoJ{-&JzG)rDQ(`|9=BLLdQu*Z^j4M^nPz0A z3H>ca2w+_?!o{hddksHU!9C(C?E2CEXj=7DBcySUdhR8Q-`$L8t-ER zVxV5ZiH|EQQ;TPfT!y|simh`s7!y?$Zvz(8CN<|~V$}uVQd4a+ywL8YD3=9S1j5fM ziV&1tT^DdgLcSd2`qsY3K_&d4LK2B^vNh^hD&{dS$lMl}`WDbtrv|HhLW(sqQ*otp z5LG6Z|N8Q0Z5#6-Sm46{P`2q!^2jn8DrZ9CeXiEnvLX>3ertAbmuK{AvZwOu{w3*{ z3=e8UjrXWeGoZS5hE~(MMyOGO%u-%(l+m;#%jltFnJc=B^P%wdmIQ2kM{r#=v%Z^N zca(tNL{;-z!UiQeC51x&w{(7NtTR&jInb^;Zf{YWXG>gvZ0JeJB^!+mPJQTs=Bt!9 zK^dP7Kvzw1rT7e8sBW&4Z4JLMQN_h9wYWKb0W<+LOyoA&Pz~#52y3D=j%)c9lRx1i z$gqx3bRNp^iN`PSdPx;|FZ?k|Pk?zHfnxdt`QK;Zs+KqoYr$sFZNRl5a3)Y{Gj(m}-mTdiE0f=G zp|ft0cQ=d?eiM`wBijVANm-(r)c;uVOa-dF)vuwaoGo;C{_9|A%J%J?HVFpluF#>z z?n1VN+`T({8p8sozL(jmYcx>rr&Y4I_8fBVq3Hss4@u)4%$1;+ zyxQ|1cA-O6P6>JCIHX_TgOsdm8F$x!xb#z%GSrGL)p6KB^kG4_$&8N`{KEFP{qv-S z_Sm>CCPw@f&zEgSD>AT=X9(#SXJ@;UO$<@jy~6`KAPWU?b9Uw zCYj_0;$oXzc4q7fU`?Ql%XFgV3;w~=^ecr6(G2IwN4qXqBqP`{xZSEp;x!MJF~LTN z+(?UUi=B}-V~erWjg2JF(N__03*}cM?L7mjx9fe%`9qTr7BRhyzbq02Uv9kPL#FDv znG-}`iy4Dme4s&SA;h5(7~3}GXI<}L ziw3ShzAsN9kE1EYMF7gi{g?JsMW}}C<5t&n&0tjEOJqm<&byCFKK&t9c!$({*4vyd zy(3JgQEh{CQgh2t@0Rxr6v64JL+|zbG#3dwTbJ0&9V=tc05<;33aPg+93@Jc>E-u) z(%0X(U*xi~*xX6gksS{{m%)=!vZ{ZYZLq>gOH|;Y)P_zZ*2_#f_5<3;6sX|C+mRW# zjvB?s56I#eRul`S=}y!kJq{O`Sso2B8PX9{)?`PL(M@HqqFr;obV)BJ2t2@aJ3UFFxAK#MJMJp**GWVt1?be8E!*Y z05-owgT0O|^5C)haCY*Jw%h5v<|@atA`bjFQo%2q#Tgehk^<>2nz)h_mccCbT9xr7 z75oNKwZ9GIsoi2?W3O)qCi_(uBzCds(FV4~^b{EprVH_))K{n2YDpejy>!D*aMqf3 zc6-srr>CU$!u+FGApaNTm&34Bus4-L$o7aVmOh|+zQnR8?HI-EhY(W#{t!lZ^^IVcw)&@2hxJQVqkGR6 zIgM&EZM5gU+qqOLnjp=;j%G6u0z47LMO|9=OP0uzS0#=)P_E~RoYV+(%|e*m`prl5 ze-Vi>y_H(C+6{~i{?^ZExq@YLx;>dINWPrcBlak}6Kv|Wy>bp|x&f@XJ_Zjj%;4S( z9DpKJ0Wf}gSQ`N_{u&OJd(ylq` z&AX7^uA~AJZQS>!qtHkzp<(wYO)p^T@OGD~6v>P)5(4jbX@M;=>M1fXxFsDOsEH-U!aa% z9w;B4EF0{Ii&Osw{Nbmy1LKxB&Ss)LP{j#|I}mhaT0-`$wy3e{)h*OrzG-vEGESCa z_5sF*gaH}0FeM5*eA`Q)L7FguLXlSAo)t%keCB?0`&X=^kq%;^*`5^w zu{gv>Pib|&^XFcspKsL&+b-GaT&KdoOHeOomiOC@pnG^WeNj z0dXA@*R3&W?@yF6j-Oa`N_h`8vMN+HY%WvFMTx|>;4g7yLedTv&pm$Tt-Tp>jBBdU z<44Ztu1%E&6t||fcbX?BsHbv?A;$B$9VMM;N})+{e)b!oMJroEvrFa}cP!N)Y{J}+ ze!DsgsujjUb()1_ZyAZUYm9po?0iE?{)4#$4v`A7crWX})HA$u+X2=Y&%YCOY`y$a z#~VN+*nFjK`LnfxIwTt5MdbHPm*W%CZ5Ttq!7~D}oH@#DCyo=xfElii-H@+N_CekQ zRA|ircPXjuTfbn)%@m7|leXIFOnuEIU=t-ta8EoUN#yFo&wqGThOs>y zuK?@r42CYv3gn`$@lMNy@(e3Q>2{7;wHlRqiTzA;Sml=Yog-1oY$Rvf#_?CfA(O|( zD->DO-e)wy+HBuwQN|LmsO$m*M~&75p6 z*T_wNvtuX?F5&Rsrhic{4GPu|ZVIv_F2;>LeLZPr#XQ*;dTv@?X{rt3ZEmhTvtsw{ z#j;_Y@0&GGUnlbTrF*JVHUF6;va{qp_*j!$@sZx0Urb%Ev^S8#W9WzuZ2(p(|5apH z!!fckUMUU+{C1lak9V1xv6B2GL)2*0>o8N3`P{bPw8N>N^5lvvDE#$r)@r95D#6Vq z{Lv~7BG%2M`dD3FKj4KLhgSzVP*KT$A~-Im?lo5V6AMq?1p;%ss;dp?)-Jr3gh zp*y36i~8283mk&8bNpz-jYE9#N~46aCP(fH!=#Az>pRS}e~-mDb6a(*u#D5iy8dmJ z>BCZ@hu=sj&2HFGC3#q%tQgON&Il@(*Ex?ko5uy}_i?S+>f6z*IN2hEi9YSUNRxbE z^Zn+-|J&J}{Dp5==hM!O73cpj;{LM}6;MJy5hVEQ1T{Y}vo2N`pPnI2V{e<(_# z@S(wo;d`n6g9q%%q+VeZBhFi5r^zf;MM0ir!o?D*0I4UbAdK{2++9cn~;*b==)b zb-geB_hB;|f{p0mSPNyxsaBy)XubqOVTsWkj}hnUrys6T2f~K0#fV7i7|_eqT&M4U z4Zp1u)s=;^=xj*)V0wr74Sqbf1~xy14Q349LwHW+1N5qw4L?d}HJh9b==umD?q)xv zBQ*(6k1Dpsz@|DKtexLR-(i~r+>^fJfsC=85>2L3(BDB-W@Y|gI{cV9y$hU|#2UT* z*u%q5iu&+m9|@|p_1NjZi7p#QU1JTyY2?)O$n>yhMg3FbNq8$RT9ls0PCln_b|x^? zNq%I4JRtBsB+kPolu0eT3hu7CtIk>Ak%a!LOqbsEoc8GY?+6jE8ispPs}C5PWFTjWRw8|`XqcUs@&yFAB+9+lLVM4h?L?*qZx zvoJDXC9#_dv^_E+R?SXDU51%~9D;%O;;vmR+;epgT@MNHl8B#Op$b!+LCB;!8+$t?4>e^ zOS$=e^$r{-{^XI+q%tS5|1RH2C&hu5S#jJPPdrjImvlu)>n;7)>y!Z>2_aD_wZzWH zqlzYfWN=+TPUex!x!6O1sL$0SGIIlmURwNNdizTkgld%IDSj}^R}T?tr-bd&7B7CO zZK-xe+E>xiv_%p?p40-)tsVQ^0qrw$HY9I>_`y;FeH1Ro%cM|RAHxWDd8|5PE%{{H z21;U+${p>2inl|)Abv};EoTE@DvpjNsp@kzOMPCo3Gz!!zV>Eda-H|xO z86GTiuQySi;n~@B!0xbVS1=Fgt9D*uU=-kK^unYxj`zD?s5BKJnMrl@$)EFkAmjNV zAiHBTSG=yrY3zgm`CUPLT7pgB@#LPO_Wn#>bxY$ z%;jaOQD>}t5RQ+w-du@83Y1#6O&SRMz9Y!7>^I~Y3&k;M&t z?#&W%Njnuia(CMd7dgMa#*+sUVkn2z^;WEyQxpF_$_N|?n#h3eZcN2%!ijj_`Je7= zidX~~vV*tubHqr9;#ZdOak#!dim655HiTQ`regZoD$<9tvnSLyD4$RQja3s?E!Nr< zHI96-Mf3YrNyP$e^n5!Ai*py+;_OS80!m{LztyG$N%O~BNa(*NqrCJPKsd9q+j^8? zstn%utS&z15lBsTW}0xsjzI=_;+!1~d;X&BjZ}Pc8bjr>9r}@NrFtPA^mBYo+-s$Cu<^YPAXjwWwBuYI^#e6lNm2gSi7OLL1m(^<*fd?(bg)3jZk{QtG!>5A+l}vuCZ}Qi##&^>98ghTM9^cmx1Nw&yZS*No zybV0=cLN8lz6hD$SgL-L+vS?_ryRYBGTaP8ogfH4lwI?)YiHEP#ULLvbP$U{ImPut z3(2Csbm_{MYh9*CFUN2WH8g0HH~2K@)dfq*u#gJWCKVxB#(RP~)wU_7GYoi-+jb8N zYKXL@eiJGX6c0@xB_l$Hen|tf*-K;P`3V++>6)V4YOXcR-0b#iZQNvrhCtn>EgY&KD^u`F&+11CMg?A*-TY?iZCu`mUy7 z`cpzw=HsdSpp8Ab9NE|h(3nLr{3?N6+wcNNhQyF&`No-PPFihj#DZ)~m@M&4|0PG+ z7erW@!tyLhE1PiN@=t29Y?C~LSWuCjIH9aw?n`+N14JC!Va#`k&0tXYM37K1IGob= zPCjIUoK-R>osKV9E3|_a<0xrgD&;-v>Y7Dk`!{QxVVCgqyG0{yrtKv1ASb<`KhU2w?hUAX8q;om}^4$K=7mx1Q zF%K(b#IRk~g2En-^lJSazE1*hF1bH)h&VoiPHWSOywrslh9Gn}ExXgCpe~o+7T(V) zbCg-*efN)lixE|4%V(G75NXh1&goCvlYP?8={zGNs(nE zy?=$=TRy%tb$}KM-1f z7h1KgPd87W{>nLkB({|SJzy|PHOR145hO=Zb2SJt#$scsv?q}1*Xy~a8sA#va5}pZhekKw-lEo;Iy(OH!XAjrt#^2e{;@G{51gQsop~N^l2{Hz% z6eFx%c3nEL0yscm`fOd%ir#sb@gk@XlU)|3LXn5JSu_oLu-j4U^^Nq1EZ*1+_v?V1 zs3VW!)YP8g=XxDt@wYer&nWp=2T{lRxK8eJv?Se==Y|uS3&gxnDZbw&ptK z+MmO8Ig8-W(6N9$kv!$M;`y`-T8=!ccH<#{>U64A$z0Uh=`$+9)>Hnw+fu8$Vcg9X z!<>DDApf^m7|@$QuimoT!#Z{mQQB)_fT6LGYN_}G{!V{Is6b=?>B5Ae5ir43&LypY zcGvdh->luMKezlSiNtmvk{g^dqBG{iVFF62L~X-_uSxT2Mxq6*ZZdMXxp$^iN~cqZ zA~o$Q3fqz(E3~M8$G8dS)giL;29(x0s3-#!A-k*^IFxH5r{g# zCKv)hdD4+~wK}lbef�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∋cuNp@Zd#wd{{ICYVMv~yl8Gsm?{6o2+&8N`I_?`;(S-pbXWR}y(u)l1 zR?x&&!2v>4KL$G~_1zfC0Wk|O1e02}9w^T}n!YCT3W+iyZDBE_j>3qg)M%Hp*_92x zOh4()w|MS_3Lnt=r@V*tea($v_2QRUG z;Q3SE3C4zOVpI9u$lYjjxq~K+(Q^6e>do2drh}6%u+;c1Q_Vf3O#$ywSP`D~YAV~u z^kZ5ummKxUKqI5aUgk)tU1J}w`(9T3npPu3%1g69_k*SP~L#5A}UficB1W4mnH9`N*3Hn1W$??Z2HG-hLuk1RYhj2EI>5>g3j z2#dPLazJo-GA4j1kffd+ALg&VBeFs$*kh@Pr}Z;ti>O3G&3aX#uEUb+@>-2n=BRO3 z&t#&;&UZ&B7-F3}&F9G_KerGLj0DN$Z5? z8>LZoJ@xczRlx;PrQo=rO=3-{dzuPE|AX?@E+r(;Zz0R$40F}9kNH%hHa7>ffJ z5(yn_fQ6iep_-0?fgk>pi-VHbS_Dkcp|RC+3^N&Bh7M~VH?-=#eEm`n13+VZd^D%| zqWPlyI+-3*e28v^D?vd`D=yF4l)!wN?6fpj$c9eP+cQuTgnl2+RnOUo(g<#!oYKzD z9E%V-nhsA zm#zbIVu$l%m;6o8wUtC$cx@(HqJ8he0igix7==(T`9V#XTeKlrm43d5tZ`blZ95z* z2Urlh(JWKkf0aKx!0+##`=pz;;Qm&5{`Cw*-y9TWmDEwd5FMY94K;SF9JQX}nVf6( z^Aj9#Ih47A%RsZL$SMEMcFGm*b8&`oU+f@Dws^{Fh8qlo;u2+$m$xKMd2QEK^uhH< z&+?ffdgqcI>@QAFkUzHz3N9f-x8)xI^ZO6#^yTT@H)uc~GO^WKUf2G0$$B5>sGHd` zA=eGyS?#PvG@YWwzqoP)y?Nxl;D3}9>~|g7zJD!s%j8vAKB&o76bWrNWJW@X^DI_J zbjEMmJ}d~bN^9ef(O>RrBdCrLIi@RM5ol*qdPR=V9s2$h_U`0qn&MXbas)ip7%%DN z=~HDL@-0&WzS_e${nqJ*l7|r5g6%~X-R#|(*Fp^p+ca4|&1lJ*n}^#rZL_b_pFX@? zB0RHXxQw{&^&c6?Ji9DuKIUZjp(ZV(q0*;wTa@o?>f@6XG9-L*YPFvsmNQD8rfSm| zCTX(WV$mbpQg8N)*cmS#6aQf(A~EIUYw&37VSlc6pHB8Ji&OVA`lWcs%J(*XCRjPEy6G}An#9vb6?XdIm6730|S%8UEV!(XxdZV z;TZzQy}Ykb@owLf4MzQH?P4?CRvmbrd1b6n5l1~*P9J_Mz7@&DSs2}jBI+y|A_8cQ z9xMg_PuOYD`ZI76#y+fTZRRc+%C{h536Ae=*zdQwWEK1Ft3)Y#tLPd&n^rS+kbo&) z8#S+YSHv!HXg(Xe;dc&sW@8``H#vZ?ARHYCBu5;Rz(&mz&7%-M28x@?I1O)w3qv=Z zHHmb_4=e{+0E7CL0a4Zb!zW*~OcK35F<-=^b7h&7r!UKwz^skAk=viRdcX}Mg!}h! zs~eOd^F2XDR5Pa=h%`T#s-`V^6>V#SR{VMW&t`E|f;xj(>`UM!`GAMEYm07zx3v9?ahu`D+6L^d4^T$$N&M z$H^oBw(iTTt(|xVz-|`eb?Xm{lUn$Xc>jjx8N{#nuV0jUknXCH>`+nGlc=`;X#FC| zrXhxnw?%qw3x&EN_+;18!z19s{lHh(OkbUEqe#!1=i5@

x3^)ND;Jx*?4KGm^sZ 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 z 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 delta 11187 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 diff --git a/jfrog-applications/jfrog-cli/cli-command-summaries.md b/jfrog-applications/jfrog-cli/cli-command-summaries.md index 0bd02bb..69331cf 100644 --- a/jfrog-applications/jfrog-cli/cli-command-summaries.md +++ b/jfrog-applications/jfrog-cli/cli-command-summaries.md @@ -10,15 +10,13 @@ An instance of how **Command Summaries** are utilized can be observed in the [se This action employs the compiled markdown to generate a comprehensive summary of the entire workflow. ### Currently supported commands: -`jf rt upload` - -![rt-upload-summary-example](../.gitbook/assets/rt-upload-summary.png) - - `jf rt build-publish` ![rt-upload-summary-example](../.gitbook/assets/build-info-summary.png) +`jf rt upload` + +![rt-upload-summary-example](../.gitbook/assets/rt-upload-summary.png) `jf scan ` From 28d5fe56ebbbefac7cef8a8cce5ebc49bf2926b7 Mon Sep 17 00:00:00 2001 From: Assaf Attias <49212512+attiasas@users.noreply.github.com> Date: Tue, 6 Aug 2024 12:25:00 +0300 Subject: [PATCH 39/57] Add documentation for new Scan vuln flag (#144) --- .../jfrog-cli/cli-for-jfrog-security/scan-your-binaries.md | 2 ++ .../jfrog-cli/cli-for-jfrog-security/scan-your-source-code.md | 1 + 2 files changed, 3 insertions(+) diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-binaries.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-binaries.md index 52c0c46..db9a453 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-binaries.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-binaries.md @@ -31,6 +31,7 @@ This _**jf scan**_ command scans files on the local file system with Xray. | `--watches` |

[Optional]
A comma-separated(,) list of Xray watches, to enable Xray to determine violations accordingly. The command accepts this option only if the --project and --repo-path options are not provided. If none of the three options are provided, the command will show all known vulnerabilities.

| | `--licenses` |

[Default: false]
Set if you also require the list of licenses to be displayed.

| | --format=json |

[Optional]
Produces a JSON file containing the scan results.

| +| `--vuln` |

[Optional]
Set if you'd like to receive all vulnerabilities, regardless of the policy configured in Xray.

| | **Command arguments** | | | **Pattern** | Specifies the local file system path to artifacts to be scanned. You can specify multiple files by using wildcards. | @@ -110,6 +111,7 @@ This _**jf docker scan**_ command scans docker containers located on the local f | `--watches` |

[Optional]
A comma-separated(,) list of Xray watches, to enable Xray to determine violations accordingly. The command accepts this option only if the --repo-path and --repo-path options are not provided. If none of the three options are provided, the command will show all known vulnerabilities.

| | `--licenses` |

[Default: false]
Set if you also require the list of licenses to be displayed.

| | --format=json |

[Optional]
Produces a JSON file containing the scan results.

| +| `--vuln` |

[Optional]
Set if you'd like to receive all vulnerabilities, regardless of the policy configured in Xray.

| | **Command arguments** | | | **Pattern** | Specifies the local file system path to artifacts to be scanned. You can specify multiple files by using wildcards. | diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-source-code.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-source-code.md index ddc2045..c644e5d 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-source-code.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-source-code.md @@ -70,6 +70,7 @@ This command also supports the following Advanced Scans with the **Advanced Secu | `--secrets` |

[Default: false] Selective scanners mode: Execute Secrets sub-scan. Can be combined with --sca, --sast and --iac.

| | `--sast` |

[Default: false] Selective scanners mode: Execute SAST sub-scan. Can be combined with --sca, --secrets and --iac.

| | `--without-contextual-analysis` |

[Default: false] Selective scanners mode: Disable Contextual Analysis scanner after SCA. Relevant only with --sca flag.

| +| `--vuln` |

[Optional]
Set if you'd like to receive all vulnerabilities, regardless of the policy configured in Xray.

| | **Command arguments** | The command accepts no arguments | #### **Output Example** From 8642445b3ebe3f30bcc3f81b1bb8a16e4078ab79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20ESTEGUET?= <106679334+ehl-jf@users.noreply.github.com> Date: Mon, 12 Aug 2024 15:48:30 +0200 Subject: [PATCH 40/57] Add worker-cli documentation (#139) --- .../cli-for-jfrog-platform-services/README.md | 11 ++++++++ .../platform-workers-add-secret.md | 22 ++++++++++++++++ .../platform-workers-deploy.md | 22 ++++++++++++++++ .../platform-workers-dry-run.md | 24 ++++++++++++++++++ .../platform-workers-execute.md | 25 +++++++++++++++++++ .../platform-workers-init.md | 24 ++++++++++++++++++ .../platform-workers-list-event.md | 21 ++++++++++++++++ .../platform-workers-list.md | 23 +++++++++++++++++ .../platform-workers-undeploy.md | 23 +++++++++++++++++ 9 files changed, 195 insertions(+) create mode 100644 jfrog-applications/jfrog-cli/cli-for-jfrog-platform-services/README.md create mode 100644 jfrog-applications/jfrog-cli/cli-for-jfrog-platform-services/platform-workers-add-secret.md create mode 100644 jfrog-applications/jfrog-cli/cli-for-jfrog-platform-services/platform-workers-deploy.md create mode 100644 jfrog-applications/jfrog-cli/cli-for-jfrog-platform-services/platform-workers-dry-run.md create mode 100644 jfrog-applications/jfrog-cli/cli-for-jfrog-platform-services/platform-workers-execute.md create mode 100644 jfrog-applications/jfrog-cli/cli-for-jfrog-platform-services/platform-workers-init.md create mode 100644 jfrog-applications/jfrog-cli/cli-for-jfrog-platform-services/platform-workers-list-event.md create mode 100644 jfrog-applications/jfrog-cli/cli-for-jfrog-platform-services/platform-workers-list.md create mode 100644 jfrog-applications/jfrog-cli/cli-for-jfrog-platform-services/platform-workers-undeploy.md diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-platform-services/README.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-platform-services/README.md new file mode 100644 index 0000000..2e3ff24 --- /dev/null +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-platform-services/README.md @@ -0,0 +1,11 @@ +# CLI for JFrog Platform Services + +This page describes how to use JFrog CLI with JFrog Platform Services. + +Read more about JFrog CLI [here](https://jfrog-external.fluidtopics.net/r/help/JFrog-CLI/JFrog-CLI). + +**Managing Workers** + +JFrog CLI allows you to fully manage your platform workers. + + diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-platform-services/platform-workers-add-secret.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-platform-services/platform-workers-add-secret.md new file mode 100644 index 0000000..d135ebd --- /dev/null +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-platform-services/platform-workers-add-secret.md @@ -0,0 +1,22 @@ +# Add worker secret + +## Overview + +This command is used to edit a worker manifest to add secret that can be used for deployment or/and execution. + +| | | +|------------------------|---------------------------------------------------------| +| Command name | worker add-secret | +| Abbreviation | worker as | +| **Command options:** | | +| `--edit` | \[Default: false] Whether to update an existing secret. | +| **Command arguments:** | | +| secret-name | The secret name | + +## Example + +Add a secret name `my-secret` to a worker initialized in the current directory. + +``` +jfrog worker add-secret my-secret +``` \ No newline at end of file diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-platform-services/platform-workers-deploy.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-platform-services/platform-workers-deploy.md new file mode 100644 index 0000000..6e27854 --- /dev/null +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-platform-services/platform-workers-deploy.md @@ -0,0 +1,22 @@ +# Deploy a worker + +## Overview + +This command is used to update the worker definition (code, description , filter, secret ...) on your Artifactory instance. + +| | | +|------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command name | worker deploy | +| Abbreviation | worker d | +| **Command options:** | | +| `--server-id` | \[Optional] Server ID configured using the config command. | +| `--timeout-ms` | \[Default: 5000] The request timeout in milliseconds. | +| `--no-secrets` | \[Default: false] Do not use registered secrets. | + +## Example + +Deploy a worker to server with id `my-server`. + +``` +jfrog worker server deploy --server-id my-server +``` \ No newline at end of file diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-platform-services/platform-workers-dry-run.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-platform-services/platform-workers-dry-run.md new file mode 100644 index 0000000..d90c50a --- /dev/null +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-platform-services/platform-workers-dry-run.md @@ -0,0 +1,24 @@ +# Test a worker + +## Overview + +Dry run a worker. The worker needs to be initialized before running this command. + +| | | +|------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command name | worker dry-run | +| Abbreviation | worker dr | +| **Command options:** | | +| `--server-id` | \[Optional] Server ID configured using the config command. | +| `--timeout-ms` | \[Default: 5000] The request timeout in milliseconds. | +| `--no-secrets` | \[Default: false] Do not use registered secrets. | +| **Command arguments:** | | +| json-payload | The json payload expected by the worker. Use `-` to read the payload from standard input. Use `@` to read from a file located at . | + +## Example + +Dry run a worker initialized in the current directory, with a payload located in a file named `payload.json` from the same directory. + +``` +jfrog worker dry-run @payload.json +``` \ No newline at end of file diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-platform-services/platform-workers-execute.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-platform-services/platform-workers-execute.md new file mode 100644 index 0000000..ee89eca --- /dev/null +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-platform-services/platform-workers-execute.md @@ -0,0 +1,25 @@ +# Execute an HTTP-triggered worker + +## Overview + +Execute an HTTP-triggered worker. + +| | | +|------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command name | worker execute | +| Abbreviation | worker exec, worker e | +| **Command options:** | | +| `--server-id` | \[Optional] Server ID configured using the config command. | +| `--timeout-ms` | \[Default: 5000] The request timeout in milliseconds. | +| **Command arguments:** | | +| worker-key | The worker key. If not provided it will be read from the `manifest.json` in the current directory. | +| json-payload | The json payload expected by the worker. Use `-` to read the payload from standard input. Use `@` to read from a file located at . | + +## Example + +Execute an HTTP-triggered worker initialized in the current directory, with a payload located in a file named `payload.json` from the same directory. + +``` +jf worker execute @payload.json +``` + diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-platform-services/platform-workers-init.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-platform-services/platform-workers-init.md new file mode 100644 index 0000000..7bbe173 --- /dev/null +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-platform-services/platform-workers-init.md @@ -0,0 +1,24 @@ +# Initialize a Worker + +## Overview + +This command is used to initialize a new platform worker. + +| | | +|------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command name | worker init | +| Abbreviation | worker i | +| **Command options:** | | +| `--force` | \[Default: false] Whether to overwrite existing files. | +| `--no-test` | \[Default: false] Whether to skip tests generation. | +| **Command arguments:** | | +| action | The action that will trigger the worker (BEFORE_DOWNLOAD, AFTER_DOWNLOAD, BEFORE_UPLOAD, AFTER_CREATE, AFTER_BUILD_INFO_SAVE, AFTER_MOVE, GENERIC_EVENT, BEFORE_CREATE_TOKEN, ...). | +| worker-name | The name of the worker | + +## Example + +Initialize a new BEFORE_DOWNLOAD worker named `my-worker`. + +``` +jfrog worker init BEFORE_DOWNLOAD my-worker +``` \ No newline at end of file diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-platform-services/platform-workers-list-event.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-platform-services/platform-workers-list-event.md new file mode 100644 index 0000000..2f27f5e --- /dev/null +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-platform-services/platform-workers-list-event.md @@ -0,0 +1,21 @@ +# List events + +## Overview + +This command list all the available events on your Artifactory. + +| | | +|------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command name | worker list-event | +| Abbreviation | worker le | +| **Command options:** | | +| `--server-id` | \[Optional] Server ID configured using the config command. | +| `--timeout-ms` | \[Default: 5000] The request timeout in milliseconds. | + +## Example + +List event supported by a server identified by `my-server`. + +``` +jfrog worker list-event --server-id my-server +``` \ No newline at end of file diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-platform-services/platform-workers-list.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-platform-services/platform-workers-list.md new file mode 100644 index 0000000..65edb16 --- /dev/null +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-platform-services/platform-workers-list.md @@ -0,0 +1,23 @@ +# List registered workers + +## Overview + +List workers saved on your Artifactory instance. The default output is a CSV format with columns `name`,`action`,`description`,`enabled`. + +| | | +|------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command name | worker list | +| Abbreviation | worker ls | +| **Command options:** | | +| `--server-id` | \[Optional] Server ID configured using the config command. | +| `--json` | \[Default: false] Whether to use JSON instead of CSV as output. | +| `--timeout-ms` | \[Default: 5000] The request timeout in milliseconds. | + + +# Example + +List all workers registered in a platform named `my-platform` with detailed data. + +``` +jfrog worker list --server-id my-platform --json +``` \ No newline at end of file diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-platform-services/platform-workers-undeploy.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-platform-services/platform-workers-undeploy.md new file mode 100644 index 0000000..57e37f8 --- /dev/null +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-platform-services/platform-workers-undeploy.md @@ -0,0 +1,23 @@ +# Undeploy a worker + +## Overview + +This command is used to remove a registered worker from you Artifactory instance. + +| | | +|------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command name | worker undeploy | +| Abbreviation | worker rm | +| **Command options:** | | +| `--server-id` | \[Optional] Server ID configured using the config command. | +| `--timeout-ms` | \[Default: 5000] The request timeout in milliseconds. | +| **Command arguments:** | | +| worker-key | \[Optional] The worker key. If not provided it will be read from the `manifest.json` in the current directory. | + +## Example + +Undeploy a worker name `my-worker` from an Artifactory instance identified by `my-server`. + +``` +jfrog worker undeploy --server-id my-server my-worker +``` \ No newline at end of file From 1a2d9c34edb9314064b0d02039c30edfdf14c45d Mon Sep 17 00:00:00 2001 From: Bar Belity Date: Fri, 16 Aug 2024 14:18:08 +0000 Subject: [PATCH 41/57] GITBOOK-137: Updating supported technologies --- .../jfrog-applications/frogbot/supported-technologies.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jfrog-applications/jfrog-applications/frogbot/supported-technologies.md b/jfrog-applications/jfrog-applications/frogbot/supported-technologies.md index bf67427..d3a74a7 100644 --- a/jfrog-applications/jfrog-applications/frogbot/supported-technologies.md +++ b/jfrog-applications/jfrog-applications/frogbot/supported-technologies.md @@ -1,3 +1,3 @@ # Supported Technologies -
FeatureGoMavennpmYarn v1-v3PipPipenvPoetry.NET CLINuGetTerraformGradlePnpm
SCA
Contextual AnalysisComing SoonComing SoonComing Soon
Secrets Detection
SASTBetaRoadmapRoadmap
Infrastructure as Code (IaC)
PR Scan
Monitor Scan
Autofix with new PR for direct dep.
License Violations
+
FeatureGoMavennpmYarn v1-v3PipPipenvPoetry.NET CLINuGetTerraformGradlePnpm
SCA
Contextual AnalysisComing SoonComing Soon
Secrets Detection
SASTRoadmapRoadmap
Infrastructure as Code (IaC)
PR Scan
Monitor Scan
Autofix with new PR for direct dep.
License Violations
From 70faabbde299fa3ab6e11c0e58f8de9880428da4 Mon Sep 17 00:00:00 2001 From: Asaf Ambar Date: Sun, 18 Aug 2024 15:57:49 +0300 Subject: [PATCH 42/57] Add Go support for Curation documentation. (#147) --- .../jfrog-cli/cli-for-jfrog-curation.md | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-curation.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-curation.md index 2d78d94..8784b24 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-curation.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-curation.md @@ -4,19 +4,20 @@ JFrog Curation defends your software supply chain, enabling early blocking of malicious or risky open-source packages before they even enter. Seamlessly identify harmful, vulnerable, or risky packages, ensuring increased security, compliance, and developer productivity. -For more information see: https://jfrog.com/curation/ +For more information see [**here**](https://jfrog.com/curation/) The 'curation-audit' is a JFrog CLI command designed for developers to scan their projects and identify third-party dependencies that violate the restrictions set by the Curation service. This command provides detailed insights into the specific package policies that are being violated, leading to their blockage by the Curation service. Additionally, when feasible, 'curation-audit' may suggest alternative versions of the packages that comply with the Curation policies. ## Supported package managers & build systems -For a full list of the package managers and build systems supported by the curation-audit command and the required Artifactory and Xray versions to use it please see: https://jfrog.com/help/r/jfrog-curation/curation-support-matrix - -curation-audit command supported package managers and build systems: +Curation-audit command supported package managers and build systems: * Npm (npm) * Maven (mvn) - Requires xray 3.92 and above, and Artifactory 7.82 and above * Pip (pip) - Requires xray 3.92 and above, and Artifactory 7.82 and above +* Go (go) - Requires xray 3.92 and above, and Artifactory 7.87 and above + +For a full list of the package managers and build systems supported by the curation-audit command and the required Artifactory and Xray versions to use it please see [**this matrix**](https://jfrog.com/help/r/jfrog-curation/curation-support-matrix) *** @@ -28,7 +29,9 @@ Audit your Project with JFrog CLI curation-audit command Prerequisites: -Make sure your JFrog Artifactory admin configured the curated remote repository you are using during your build process. For more information refer your Artifactory admin to: https://jfrog.com/help/r/jfrog-curation/configure-curation-pass-through +Make sure your JFrog Artifactory admin configured the curated remote repository you are using during your build process. For more information refer your Artifactory admin to [**this page**](https://jfrog.com/help/r/jfrog-curation/configure-curation-pass-through) +

**Note**: Some package types require 'pass-through' curation configuration on the remote repositories in Artifactory, in addition to configuring curation on them. + 1. **Connect JFrog CLI to JFrog Platform** @@ -44,8 +47,8 @@ Make sure your JFrog Artifactory admin configured the curated remote repository jf c show ``` - * It should present Artifactory server just added (with default true)\ - \ + * It should present Artifactory server just added (with default true) + 2. **Configure JFrog CLI for Project**\ Ensure your project is configured in the JFrog CLI with the repository you would like to resolve dependencies from. Here are details for each package manager: @@ -55,6 +58,8 @@ Make sure your JFrog Artifactory admin configured the curated remote repository * Set the resolved repository using the [**jf mvnc**](https://docs.jfrog-applications.jfrog.io/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/package-managers-integration#setting-maven-repositories) command inside the project directory. * **PIP:** * Set the resolved repository using the [**jf pipc**](https://docs.jfrog-applications.jfrog.io/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/package-managers-integration#setting-python-repository) command inside the project directory (The only package installer supported for now by Python is "pip"). + * **GO:** + * Set the resolved repository using the [**jf goc**](https://docs.jfrog-applications.jfrog.io/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/package-managers-integration#examples-4) command inside the project directory. #### Commands Params From fb756684a467f5f1547eadf5d38c0c2c9ea8e0f8 Mon Sep 17 00:00:00 2001 From: Eyal Ben Moshe Date: Thu, 22 Aug 2024 08:02:45 +0300 Subject: [PATCH 43/57] Rename Artifactory's JFROG_CLI_TRANSITIVE_DOWNLOAD_EXPERIMENTAL variable (#150) --- .../cli-for-jfrog-artifactory/environment-variables.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/environment-variables.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/environment-variables.md index 2e4642f..5bebd86 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/environment-variables.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/environment-variables.md @@ -16,7 +16,7 @@ Some of the Artifactory commands make use of the following environment variable: | **JFROG\_CLI\_BUILD\_PROJECT** | JFrog project key to be used by commands that expect build name and build number. Determines the project of the published build. | | **JFROG\_CLI\_BUILD\_URL** | Sets the CI server build URL in the build-info. The "jf rt build-publish" command uses the value of this environment variable unless the --build-url command option is sent. | | **JFROG\_CLI\_ENV\_EXCLUDE** |

[Default: *password*;*secret*;*key*;*token*]
List of semicolon-separated(;) case insensitive patterns in the form of "value1;value2;...". Environment variables match those patterns will be excluded. This environment variable is used by the "jf rt build-publish" command, in case the --env-exclude command option is not sent.

| -| **JFROG\_CLI\_TRANSITIVE\_DOWNLOAD\_EXPERIMENTAL** |

[Default: false]
Used by the "jf rt download" command. Set to true to download artifacts also from remote repositories. This feature is experimental and available on Artifactory version 7.17.0 or higher.

| +| **JFROG\_CLI\_TRANSITIVE\_DOWNLOAD** |

[Default: false]
Set this option to true to include remote repositories in artifact searches when using the 'rt download' command. The search will target the first five remote repositories within the virtual repository. This feature is available starting from Artifactory version 7.17.0. **NOTE:** Enabling this option may increase the load on Artifactory instances that are proxied by multiple remote repositories..

| | **JFROG\_CLI\_UPLOAD\_EMPTY\_ARCHIVE** |

[Default: false]
Used by the "jf rt upload" command. Set to true if you'd like to upload an empty archive when '--archive' is set but all files were excluded by exclusions pattern.

| *** From 2feac583ffe85d95ebd1178e6d4c40f282d8ec87 Mon Sep 17 00:00:00 2001 From: Lina Daher Date: Thu, 22 Aug 2024 12:31:25 +0000 Subject: [PATCH 44/57] GITBOOK-140: change request with no subject merged in GitBook --- jfrog-applications/jfrog-cli/cli-for-jfrog-curation.md | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-curation.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-curation.md index 8784b24..6a4a7a5 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-curation.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-curation.md @@ -29,9 +29,7 @@ Audit your Project with JFrog CLI curation-audit command Prerequisites: -Make sure your JFrog Artifactory admin configured the curated remote repository you are using during your build process. For more information refer your Artifactory admin to [**this page**](https://jfrog.com/help/r/jfrog-curation/configure-curation-pass-through) -

**Note**: Some package types require 'pass-through' curation configuration on the remote repositories in Artifactory, in addition to configuring curation on them. - +Some package types (except npm packages) require 'pass-through' curation configuration on the remote repositories in Artifactory, in addition to configuring curation on them. For more information, see [**this page**](https://jfrog.com/help/r/jfrog-curation/configure-curation-pass-through)**.** 1. **Connect JFrog CLI to JFrog Platform** @@ -48,8 +46,6 @@ Make sure your JFrog Artifactory admin configured the curated remote repository ``` * It should present Artifactory server just added (with default true) - - 2. **Configure JFrog CLI for Project**\ Ensure your project is configured in the JFrog CLI with the repository you would like to resolve dependencies from. Here are details for each package manager: * **NPM:** @@ -59,7 +55,7 @@ Make sure your JFrog Artifactory admin configured the curated remote repository * **PIP:** * Set the resolved repository using the [**jf pipc**](https://docs.jfrog-applications.jfrog.io/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/package-managers-integration#setting-python-repository) command inside the project directory (The only package installer supported for now by Python is "pip"). * **GO:** - * Set the resolved repository using the [**jf goc**](https://docs.jfrog-applications.jfrog.io/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/package-managers-integration#examples-4) command inside the project directory. + * Set the resolved repository using the [**jf goc**](https://docs.jfrog-applications.jfrog.io/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/package-managers-integration#examples-4) command inside the project directory. #### Commands Params From 10cf44c9447798ebfd94bb6d06df22185228fd1d Mon Sep 17 00:00:00 2001 From: Eyal Ben Moshe Date: Sun, 25 Aug 2024 09:39:44 +0300 Subject: [PATCH 45/57] Improve RT's JFROG_CLI_TRANSITIVE_DOWNLOAD variable info (#151) --- .../jfrog-cli/cli-for-jfrog-artifactory/generic-files.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/generic-files.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/generic-files.md index 99f8f0c..8021c9b 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/generic-files.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/generic-files.md @@ -113,7 +113,9 @@ This command is used to download files from Artifactory. > Download from Remote Repositories:\ > \ -> By default, the command only downloads files that are cached on the current Artifactory instance. It does not download files located on remote Artifactory instances, through remote or virtual repositories. To allow the command to download files from remote Artifactory instances, which are proxied by the use of remote repositories, set the **JFROG\_CLI\_TRANSITIVE\_DOWNLOAD\_EXPERIMENTAL** environment variable to **true**. This functionality requires version 7.17 or above of Artifactory. The remote download functionality is supported only on remote repositories which proxy repositories on remote Artifactory instances. Downloading through a remote repository that proxies non-Artifactory repositories is not supported. +> By default, the command downloads only the files that are cached on the current Artifactory instance. It does not retrieve files from remote Artifactory instances accessed via remote or virtual repositories. To enable the command to download files from remote Artifactory instances (proxied through remote repositories), set the **JFROG_CLI_TRANSITIVE_DOWNLOAD** environment variable to **true**. This feature is available in Artifactory version 7.17 or later. Note that remote downloads are supported only for remote repositories that proxy other Artifactory instances. Downloads from remote repositories that proxy non-Artifactory repositories are not supported.\ +> \ +> **IMPORTANT**: Enabling the **JFROG_CLI_TRANSITIVE_DOWNLOAD** environment variable may increase the load on the remote Artifactory instance. It is advisable to use this setting cautiously. ### Usage From 3bd411fff535e4bd8d9b1756e909d9f511dfc6fd Mon Sep 17 00:00:00 2001 From: Lina Daher Date: Mon, 26 Aug 2024 14:15:00 +0000 Subject: [PATCH 46/57] GITBOOK-141: change request with no subject merged in GitBook --- .../frogbot/setup-frogbot-using-github-actions.md | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/jfrog-applications/frogbot/setup-frogbot-using-github-actions.md b/jfrog-applications/frogbot/setup-frogbot-using-github-actions.md index 77d397f..fe4bdbe 100644 --- a/jfrog-applications/frogbot/setup-frogbot-using-github-actions.md +++ b/jfrog-applications/frogbot/setup-frogbot-using-github-actions.md @@ -57,7 +57,10 @@ The sensitive connection details, such as the access token used by JFrog Frogbot D) Configure the OIDC integration:\ ![](../.gitbook/assets/oidc-configure-integration.png) - +**Notes**: \ +The 'Provider Name' value should be used as the 'oidc-provider-name' input in Workflow Configuration step 2 below. + +The 'Audience' field does NOT represent the 'aud' claim that can be added to identity-mapping configured in the 'Claims JSON' (shown below). Only claims that are included in the 'Claims Json' created during step 2 will be validated. 2. **Configure an identity mapping**: This phase sets an integration between a particular GitHub repository to the JFrog platform. @@ -85,7 +88,9 @@ The sensitive connection details, such as the access token used by JFrog Frogbot Example step utilizing OpenID Connect: -```yml +When using OIDC integration, you might encounter failures in Xray scans or JFrog Advanced Security scans due to token expiration. + +``` - uses: jfrog/frogbot@v2 env: JF_URL: ${{ vars.JF_URL }} @@ -94,4 +99,6 @@ Example step utilizing OpenID Connect: oidc-provider-name: frogbot-integration ``` +**Note**: If this occurs, try extending the "Token Expiration Time|" in the 'Identity Mapping Configuration" phase to ensure the token remains valid until all scanners are triggered, which may vary depending on the project's size. + From d4514fc8613a260df001085a0491c321bb72b3f5 Mon Sep 17 00:00:00 2001 From: Bar Belity Date: Tue, 3 Sep 2024 10:23:06 +0000 Subject: [PATCH 47/57] GITBOOK-139: Restructure and simplify JFrog Frogbot pages - easier templates, flow --- .../.gitbook/assets/image (1).png | Bin 0 -> 118471 bytes jfrog-applications/SUMMARY.md | 25 ++- .../setup-frogbot-using-azure-pipelines.md | 2 +- .../setup-frogbot-using-github-actions.md | 104 --------- .../frogbot/setup-frogbot-using-jenkins.md | 2 +- .../setup-frogbot-using-jfrog-pipelines.md | 2 +- jfrog-applications/frogbot/setup-frogbot.md | 4 +- .../frogbot/scan-execution/README.md | 2 + .../scan-pull-requests/README.md | 0 .../pull-request-scan-results.md | 0 .../scan-azure-repos-pull-request.md | 0 .../scan-bitbucket-server-pull-request.md | 0 .../scan-github-pull-request.md | 0 .../scan-gitlab-pull-request.md | 0 .../scan-repositories/README.md | 4 +- .../view-security-alerts-on-github.md | 14 +- .../README.md | 202 ++++++++++++++++++ .../oidc-authentication.md | 66 ++++++ .../scan-git-repository-full-template.md | 155 ++++++++++++++ .../scan-pull-request-full-template.md | 161 ++++++++++++++ .../setup-frogbot-using-gitlab-ci/README.md | 91 ++++++++ .../gitlab-full-template.md} | 20 +- 22 files changed, 708 insertions(+), 146 deletions(-) create mode 100644 jfrog-applications/.gitbook/assets/image (1).png delete mode 100644 jfrog-applications/frogbot/setup-frogbot-using-github-actions.md create mode 100644 jfrog-applications/jfrog-applications/frogbot/scan-execution/README.md rename jfrog-applications/jfrog-applications/frogbot/{ => scan-execution}/scan-pull-requests/README.md (100%) rename jfrog-applications/jfrog-applications/frogbot/{ => scan-execution}/scan-pull-requests/pull-request-scan-results.md (100%) rename jfrog-applications/jfrog-applications/frogbot/{ => scan-execution}/scan-pull-requests/scan-azure-repos-pull-request.md (100%) rename jfrog-applications/jfrog-applications/frogbot/{ => scan-execution}/scan-pull-requests/scan-bitbucket-server-pull-request.md (100%) rename jfrog-applications/jfrog-applications/frogbot/{ => scan-execution}/scan-pull-requests/scan-github-pull-request.md (100%) rename jfrog-applications/jfrog-applications/frogbot/{ => scan-execution}/scan-pull-requests/scan-gitlab-pull-request.md (100%) rename jfrog-applications/jfrog-applications/frogbot/{ => scan-execution}/scan-repositories/README.md (87%) rename jfrog-applications/jfrog-applications/frogbot/{ => scan-execution}/scan-repositories/view-security-alerts-on-github.md (51%) create mode 100644 jfrog-applications/jfrog-applications/frogbot/setup-frogbot/setup-frogbot-using-github-actions/README.md create mode 100644 jfrog-applications/jfrog-applications/frogbot/setup-frogbot/setup-frogbot-using-github-actions/oidc-authentication.md create mode 100644 jfrog-applications/jfrog-applications/frogbot/setup-frogbot/setup-frogbot-using-github-actions/scan-git-repository-full-template.md create mode 100644 jfrog-applications/jfrog-applications/frogbot/setup-frogbot/setup-frogbot-using-github-actions/scan-pull-request-full-template.md create mode 100644 jfrog-applications/jfrog-applications/frogbot/setup-frogbot/setup-frogbot-using-gitlab-ci/README.md rename jfrog-applications/{frogbot/setup-frogbot-using-gitlab-ci.md => jfrog-applications/frogbot/setup-frogbot/setup-frogbot-using-gitlab-ci/gitlab-full-template.md} (91%) diff --git a/jfrog-applications/.gitbook/assets/image (1).png b/jfrog-applications/.gitbook/assets/image (1).png new file mode 100644 index 0000000000000000000000000000000000000000..a89b6378eeb5cc27cea6f0edf7f41e24c77789da GIT binary patch literal 118471 zcmeEuQn+qT>tON(zAD`yK)SFvt`DmO04@8^+my#!sb|5 zToS7-4#%Y()l>7xX~z>B5)eqPbM$e?hgTc4ii$TvEHCrp3Yp8*<#|eqwXw-0%h9-+ zmaI#7434ii0RaRA(0>htg$IFr{}1uL-hti-#3zvd_3gi(90&+N#9IGPnQ$Q>_+l&n zS&1(%I1qnyKIQ*j`FC;CK7UmM_21R}V`Tn6c3Pote>dUu=4R#G37B-J=p{5zJ->!V z+ANH^LOpf^HYVmA?O-jtE(qiHoR8$yZ{Jkk6z@e~Ne9{kBNq8qG;2=Qk+3abNxPFk zL|xiFuTkhRe1j8X7MNlP1P~BFzHO*)T(knwF4?sRfL<}1s;OzP%rEJL5sR%&LDV-k zs;jEIxxF;IzbvnDV5B9_FDfP_pr9TeDXA!>CMVz9d-{pvj3(BVtxYG#EHXEyD?BzX zDkp#fLYICP0B3Zyw6I;Ar@XgY$bE3wnp&F+saUcwG1=QX-re5V+ddUHt13sQX~}uk zl$6N*6wmE-$`wkIk7PF3yLymthKw}l@eAT$WrxK^G%+_(QIqq0?Vo8~#Zo(NaUwW? zPE1suA==9oiL9}= z`L57ceo_(*5fvE$B{3z_?c(guD80j$M6QvDk+pHfn|8Z3?a$%oSMbO*PA)2Xtkn70 z*>V1^j0^!?(PS?hG7KFu${F@$Ui8>aQQ>Gr`i^!kZpm80k@e$k+@h~y$gML z4Fv;p?xHp>@l91-9ezX@%*^w1kZ%ydP_Eb^Z^@nRC9f_*Jo@)^9$myl3Ri@la(yB- z%zRRBLWhpfrlwZLgxTonnBArm=J>5uZGs(K#k~tYs_V^So1LCaObgy4jB?RgWs&cr zr@}M~GZIU$s`$ufS*^2>)|9*@yxM*Kjz3N9w7$C(#K#&H=);;%zh97nHeJ1*l4|p* zQolZwKv|JW9NG}PnI2R1gg>cyEk9f}vJQEd(y&g%VKSdJf~z@HD* zzR8iv`uf`2JNV(Lv5Jb46LY7HGX`3fVhE8f?3+OeA3EY6P_yhlPAhE&5~j9sshv3lB59j)o7n$+2xw+eedh`(G`XoYcPjr_l+^=ZWcPuR|FV1nRxfhm}?h5Ze zhaH!Ed*5Jg>YS@(B&2q5u)4kH#vtrBFdbc^d&Wlw7I?_+_h$quB06j>@bY!TJp$uI z(M?xnT<)zyBg?cRzx94EPZx|`0Rc(@cgQNYT0ce3@7Jl6f?iK*)T4Bq z4xoEpUG6;W-|@Jf>3p$zobD&gVjDZpO_spb)%xWbNGlgI@4-1N-UD`ZZ^syr8k*$e z^E4-scxUC=3(OL(MgMF+C)gw!3K!_$HE1(y%I`+V1eHh%2!Qvvx>#~;Oj^vB!^ueh z9a$cJCnW{z^cV@xbt5Uf+OnkWX`4;yS#g_?S$I0so^zbXS^3V$bdk%J6D+TT^zyE491f>{CdrvHRbo$om%NnsuTwk3nztBDflc->2-C` zT4l|}He-QI(fgEiTn`?M@c3AeFM8|B#2A<_pkRD^YOduam5p_ES#&0y6%`jXL_y7V zKiNKf{UH9v?e-zjbl>ZWBRapH2%a`_(Uh>7oKtU^00l6mfYbi9T%WfEP_Yok% zxI*c!tDK?KH0&kMmz6_U^Koh_JoiKJ8iPSPYf~hf=xuy(w`y&a*oL!rrAdwWu2rqr z7}b_BJJT=x3o5+2B!km)Q07J_7t4jEMI4^`s*;u$ezB3lg)F)ucx+7Ypq5fQUY`m} z3txfWP^jCuIB63Tqw2-C<2fD-EL2!3oN~m|u&PhR(kRsr$6u%B6$OgfvOcq=RU1O7 zp*k!8uG*kbDe1pK7ft+mrBXY87_Q^0{*;ms0hVLTG&8fn!R7hv8Oq`V7EaZUREFqa ztmtO>Oaf9>Q-h7dwa=-4UiRTCmi_%+jHSMD5&dP?uCrPQ3YL zFeDWo9FE0JpBQ_FY%c-q(?#a3DN+Ct7X0Tmh^MBu(ah4cqN2j}s$yxe>P3D|3uf-@ ztdcQjwi7B7ClI$yB>JIc>lw0I)EdGY*Drzh_d15DB4W}U zKA`zL86J2RVIVDEaXFFfIYG?!gi+LPQ!6VsuYkRitMz@%$X}Ju54UxVtrSEbI3Dm4 z&CE!T5V!{{3=D1GBP%ixDaPu$8z#f;y*Hs_clJKeWac3cxHG%v5TZr4#K8xEAl1AW zaE}?|J=rH?v-IhMF|b*ESmxFBQuW%(z8SK1*>3W=TcAnGF>9~##d?I5{7U)Z$xl5T z(B(FQ0{r&XOwRBQ>ORS=;a}=t*^efp(0(n>{lHT-`OtYTnbw~4m$2Ps|4rt=-rtOs})eyWp%o1n}78Mbo;8guhA(#*G;j3=J{w_%w`A&Dfex4bM@SNI(z zBh|O-jV2epo0R;%yX@Ja=dK??kq)M%@~tteDlNeXlRhz$FJ&akR(DnIH3y-8t2J8$ zKp)0@`UvyOh$p&Mlr=fR-Hm%SSDlbNm` z2VHqjymgVd?9cBqULk|gu@0@3m2lR;5PnTl2w=ze_9f;1HSA%MpTYw$PuKSp!(#@V zOM$wzy1d3wo}w=P0WF~R0>;9rscptNC))nzoxW2_^1YDd8UjJEGOV_&-_kq9RNLt= z#-lB{9_r4Xj_d_IkoPVbv64b7g+X1z$zmfu!xnE^_LtXv*p_4_^WFIgNFk%Kd1<#J zT)SX0?w!58TTBS!qX=j~AYEOny9;|;D;|df05~Take{!B9!xURtzDfdk^B$ji>VKUy!B$?!&fY>meD?>-ybO@9$A^#bTo9Yij8Vm|wvG&p20|@5GeLznk9w3Q zzMwF@qB2*MoeBv~Iud5RIcd^zGMc6O zonN4xpIK%)MLuLm{IZg2dr$CCzsAQ3)lNpEiK#`z7bJeQ3tC;`g-dI&RKD%T!DIf! zxHL02>j-*QS64GY;1zwI-g)n@_5X?KC70@5BpQNU6;wnzDA_s?P)i@IEVy6&`pRA^ zQ^NYKqO{7YLy0%P-N;{~gwdED#o7+((+b)tjzd^5F@7A^?44+3YHuE()9fFauBori zWLjES%*n^ORwq$tK2i72;$I7mPm1;>3i%{ZDl_jDO*+`x^HjTYNJw-vVP*LE6{V-A z+nNh16k*#;COdI|;PBB;pP8a-YpSfGsmt=V9W>-{j!Hut^U>X+|ey`y5)wD+kMgu`fh}W(-X-L3Cje;cT>YuHE zC$|J#L+k6~8*^>>#oNn09VCN=4K2M^Cv1iSTDjV>AJm;ezr>0#7ni1b~lul2JvW(x_< z@o{i)8Df{VC40rF%Eo6PNuva2kNfC|gl}&7n=o#?Gjbo7wiiJqU&#Mb{<|A~O!I(* z@KyWaHZ-2Eb*88_j`b(nyh9+17><*TI-efzP)7JkI(2$}N>Bd6uW$o*^6z6jnW^JZ zeIXfpPbYd@JaCptribm~K$!>(e0A1#2gQx&bNgOLil#Ed?5vHAwY9V=q)vYq=m`+v zd+w^$8$JS2w>~^hal3haW#V?6xh{d_N-xbX^Bz+;nI9RM)F1`g)EbzBOL(ZGR!U{Z z#Lyol)14*L%gHHVYhX`WckET(-rjn3+@o93^;I-q<-`raeI5Bdxgo+qj2}F4y|eav zr!?dzk6aB8H`6_Fzc&}g5FBr?d?m!YAURqsu7fs5=WN<)D=Ce{zhp%z<8n274RpYh zWN<&+lsW_ABliGDae)TDIavl7alOvlV@x0%?C-WemQ6KTt4DcOKQD6p&d&7(`c*6V z@j6BWhmVSmgvF;lXEMRn?xkZT{iyZCGal>3$H(2GsHE6_GrBc>oh;>EBC%!7r^e;+ zhhl7OhHzSb0enp@*vRjB#Xn9B)ASxns-a;28iB+!9-vi(#-71Z1en$9*TJ-p#}m)3 z{}h7GBWZM|bnu&|>~FHv;?rG6&jai#L1Cf1wAqoOiB!MHgcRG)%piOYXJ*rbw5nWR z&i8$LKt4XQk7rms{wZ)94}I^em` zFmV->l}}Gk1I-519R&n{JHw(lA2^*T6zS%V>*Ec}?Tgi->FfmKIGUYRoQw}~ows;? zI58%w9*bCNO<>b}b>ufkM{YDUe>`Ca%MMj3;TZ*PGcmEay1reP_EsX+9gclX6DDlX z2n(ymxzJ&P2fuc6+%A?W<|lhNG;O)kyizXFS@4T*dF&}UHS7HV=y=-ngssti+s>1@ z*sMVfTW=SV$X0Dni$@rQaLd~re7^|zO5wBwbD0%7qS9>tJfk_O4A-LhI*1BCl0A6C za|N2rN_P-m=&ouoRuPk7$%|x-dU*v$wBGKnv}|ZtSX^wZCNg1p@^g3EH!OUzjW4YC z$;o-*e#Y3t9@ZsrvUB=;&wFyV+}hpW?>`$P0G1_)&P;5*ZSb0f#P@mxH}8D6*jugA zTTMQurlu~Xpe&k5hkjmIP&(2UJ@i+}+!Q4|nPQEtaC>{GGm)0bq)S^uF56BA4a0QL z(A30pd&ji+5dj(UVq;|_#`?Rj?Wfr9)T17t zt1k9f`fMb$w})G_L$lTZ3q|D>Kg!#O@$(a;;A2+8pRWWwglMXExZRiFPXn*ihC%l& z-^6LVpHyXLZZaJGQdG^2xQI1!F8_R2NNif);2PF{-!F;A>DH{?SH>w)h@G0%Nc`1S z*O?PZ^;>ZB-ZrkV^Jc26PZaa$2DjST#ydwQlid%eMjsV@XGgPj_Yz!{tE9A4mp`p* zzj5NMOZ#r1=wq1n4XiF7=`V#m+XUp*hk)+6wbfNJnK^8@@y*$??07H|!*>P`DH2yt zgWvETqMkN@=D~rs20;W`DWQQZo`M<@S;@9Pr-0f*jW5odk0$$Hb<%<<_1o zARzdn1Y*fP0?KR-$%}1C&<2*bQY5{#a%2|QtR^ZetEj1#65UelMw<3oqnpiVOCU0if^^|5D z{K1@wKh*$wLB+!O`gvsAm4Ked!DODDe^~}4FL>!W|EsN*wJ{L!m$L9@r`4){@ zV>+vyj^`_4hT(W~NY%%lkm9d%(&&1bO)qrVKrWU2u#$@U{3F;ol?vS_kU#!|o12Jb z=w$=1%7st}S2M^YZ(yKVQmk^yn*QvQbq-73+p?v=giDnU=n&_d7|K9?grwi=-i*FT zM97fOX#YIS=tSz>m7aorul5yWNWE}Z|gx9BzV(v-Z zQC)Eqn4f)oXPP68SCrDaWIZg)n*es4<$U`aqd#cVuG8wkJ*FA`NL%or3TF@M` z#Cd=E3ac#`%4Z_f`cv5LncG+lga>OP??%JC#KqVd%y8=mdK=Lh3-iAQLd?=$c98e3TA zpY2H3#zSir)dbeR?}x|lj$&mMK?yvWz{9r)4kART*AzeqNrOs$njTVTJjg;GFH^|v|>Jlo}{Ftbh23K zr)NlqA_X73*;s4JZs)Je79-R{gwV4L7c*Zggk^=(gaQ>9V zrC3elTHi#|YNYmkeur%eL!wD%ZnyQY60GB=SAIJxE4})=XaByG{E!GKuKbBsY3s+1LBbg0=Y|)BN4qa7@PmJs= zR^n=qNTr3O&GmfC6v-PZdVD&H%HnDSo}%kuQ4~6~XQe0_4uJe6KwN-Kc2ATy3Xc$a zb8kxA@&?d}ggCjHJiV^t*Q)ks6N=!C?rLEcyGcthu*HnpCd zo#gPqsNgYnFFa@f^p&vNTOFNj^OB9`BQrVIbmJ&|x%D*Hwg)a;rOeI=Kur|v+bz2@ z+!-R_7}bzARR!Rj-IdG$?JK2GfT!Rr&I~e=pr^}zCUkJ!=BIH`2?ST%^WdU+xM_#q zUzwqyP;L@#W~1{d_GD~_1gYMe0hg1B(tkKknC~SE&dqcJ*sPyl!|qH?(GCyap3cK@ zv8z%l5Qee9Rq7!RG;h_^gMJCN&5fj}9UH(HwP#j~4|5s-)xodqppVvtzJIdD>oYP| zFYfK0Msm8La14}ER5M`HEl>zRp)ovsRJ22!nfId188q_N*smF<&*rQ@OS=!fMh0X1 zfj_iax94`KEjyAk?lD&gL>){NsL<*V!PX@IJYmkyVX*^kate2Zla>y2o$+$PtWl-s zzbzaJ4-QzOtJO2_U6x4xX(p$siGhd;Dw8+W#Hi zn#?39;J01&oWABZz?(lFl&)f!4P#Ko!;a-r4!7yu7%(F1`1ffWhYx0vYTl zCL%UEmp(D+I=`(*u(r^&iLD>0x+&~fIr{P#wFg!o@~LHn46b@x&99&2rb~?z=Uh3l zfu@QcZ@17LA7(?&K=A5J90;X-(q7#RU$1M4(;@{fpa3S)+?_s<|P6qQ(nfd@tfgk zQ&FbDy@2wf&flpN=<;pdmKs88(-)*?E-6v=WhF}IT(4syk7K9o(YP)xo!D@VBAqdg*UyHltJLe&rHrtms1eDH11B%WG0B5 zK);_BanANPmSaq+E*d4E8aS307uAW~AiPnh@hGUa&~v%+4U>8brjQ>ws|aKmL9J%f zwtiWwDQ+S`Hr4vDpiD^-PA1YB#g(On5%>D92mZPGkw!{q*PR*5a;C@WlD)NIilpk@8=i%pDJ{Vtg-zTxmhaQHi7?>PbM|zS;_fFbVpQpwse&s8~ zBhG73celqQLNBg@Yxr!&f2@?j2r<=D(}FX_+0-sWg7LJK)nOLeI|^U({eWZ z`r;rqShMP2LzvJ5`4|-LM&?Z9sk`;kcTo3?=BaWu^Rb(n$kG%WPW>Q7lE8Ko8zm5; z1P>7_(&#wtraN3Ysw-+b(EJyAW|Is2Wq33LRNj-HZ{i9iO6 zxt1cF7P{!1)Tdn`F4eYY6(Gum7SWeNFGKtU2%mX#vbebPb0$~GfCKXTfy!pV$`RX8 zlbJ|JxW0ind90zD9EA@zUMl$^UFPQ($L!1Si(%J#r8+XB z1ZH|XgR0k*^Hjc&kCQP zbDRXp7-M6zz|S5wi8q|zO0)=}^tpZV!D_{yG7_%3;|C zW<$4bKX5J}$y~jV5}0{@LtYVFA))mQFKhd)S9qsm>eEk!-n&| zK(MCNUiMwrOcge$t0&++Fhs3w2uwA@mAQC%&Sg^3ls`2o$I48)qX zM$gdK>~Pvow?0ezvC;T`8HP?nMu_lQ;wQ%hM(3ueYlAV9=!&>a(Fw?hY%0qw z|Gn9cBYh$Cw=c8@G;xmfd zfKGWu0}`%x9S8qu*|q2+3kz-Ca*?>Ea_#oGI#V4} zW5KHrd$!!;;nFFWDd6rbnbk&SCP-y_aUZahHO;jG|` zudiTXZUi^*mC^un%!1z1A6;xKO z=f<^=S1k=KkN0Cj8S5*xJ2d{dK)A3JIupQ6l;pRN!NK3$?mhZwBrm)~k(2w-J-QhQ zOo!hFUDr1lz2%>=@U{}Rwff@Cg;0;N$>G88flr(auvuI^L79~5ZV!oD!OeJ94?m(c z%EkGQ;=POyS1o*OP$0g%v#*269FlJ0if&@a3dc7O9KKDgc#GKaLW>+L(SE;}j9$mV zvs}Q^ZyF3P)0&RaXlSe(Exn231BdjA&X0|nU?zDiq;-KY93a?0L0x63dbR5qz(1^? zgO^D&KM+s3S-;*{zWTUvltFTuPlMbNu8yi}FSob74NC))=Bqy60%G!p=-cWxfEEO+ z1|7+-9Y5zW4~}$4=tx}9>$*t%vwe>yGnL(hj#f!eSz&{iz3m1g!|@Ub4_2Ir);na; zm%TyeHrqX^9S(+jKB(&FxMc8nkhuP!tQpv3M}^^keH*$8Kmb()#``b?`g$!b&WpMA zd669xEn$c;SZwLBIhV7;Uykobkp264&!$IL4rrvmWVpYG8fQ#QjHiV=idVJp-U~f} zh(Zlau9)WHDf)VK@p;7#2GY6BwOtH}pX;`8=cZTk`zJ}JYq9{X$&9Mh&oLO8wO@iV z{}}hqpRm5rvWACZWAoS|c?0j=@w_SRSN~2$iq=D6U7RfovADV0`taF6k%eodtr5@d zu4?qv6SLaK!IE^I?R*(D7aiG=II^vwq%0VXC#5CEp;2~%pS5Q{TTlpm#$#cUN@d<# zM0Iw5fyv2%3>52-RgyDVVH5aDVKrhWVGZmxqP*k-6?wkN16QL>WwR#46Gx1ZoBCLy zd45OH#8T}05qO)(*L(BU8}A&F^%T$MtY+%_UMClXj{GPTE$p@zYeZSyOTO4LnN(0z zRP}{L4a7lzj$OQwjQiT;jtrT}RmSsmfgc>wtDSUrB%k0ps|RZG0Qk^hH5FNrw@1qP z@*ZW~_0}np<)+Qxs9mF9I+D?ZL7l~m-V91vb!5+DtQCT5>*7B<{joY0Uq#*LsHW^I zeI23Y29dSATKg#RX{r5&3XJ|~=Ly(T$^%NC_Rzpk4pfl4`}yg^U_52A_j`PJIYgld zdD7o9D17Gt{Z}Se#;^l#GzLGbHyB++H4P!3TK^0t8(RylPb@DJ2vf}{uLHtjcs*n< zZQidV0vJ%EGekYqcVF=Y3y9YU6nO<7^BO&h9N_Hi>|uH93J9yJ{n7E zAiD}D&X%@ids6RDr+5bQ$bV2^LE1iva#lL1CEo9w|Z@08KL93K|8G9Z>nzh%b%$i%R=eO*p z%Kyx%=&8N=xxu04z(RHln*jtqAJ!n&Jp>x?ARlkXeWh1?F+(Q#QgeeGyebkNO8Edz zV$mCrS6KH}oLkFZx9Y=S`_*SCbF0XPd-gmjoL}5EUZ%gk8q@8?1OD^cF9*iA^% zI2{+0?pYrrG~9olr1&-Ub4`FpV%HMyVrLm)S~^fZU#$Sq{Wv$g<2HZFO2%YLbjpSk|raXP@*W{VVkm|x0y@uu`O}d-~I!1%*4_-e2DRTurzkE+b zZKUOtrr3y6T=Bf=1GHaSkMCX|w-qWn>=`zvm2Y_a5-6{gyGB8COxF13!484_$U}4qTX)+AqMP+r zuF+kfCwg@k=6i;Eo$hcKW8)fb^YOA%4SS*qSr4-fm=sM2Ve`KeYO#P#0?L(1Tm zps-)fGl9Az&N>H!WG_;*%m{e?*1?~_5T-!`hVBg-Vdh{`|Kx&H0ZerEpe730A_(kU z?v3~Ou>$;7h8_mkW6E0LQ`@)Ar+Y@yjkp$RUaWSFm!b(DSan2uoaUB`gp?0*3J4tC z6YV1nN?=Y*w4D*g&FO?VsZwWnMRr@*>D^xAQY~C?WX4D~$@y~nh|vdv zg26(2@0m@4ZZ!ibHXa7kPHP6_CTokbsPp~_`dCozb_DwhLw$^o5bOo#2f3a$0N08( zk}a@Ijj5z7$hyyq&DibwbfU|MOcn#C1e1|`DT2jW;<8vR%Hk>QLB4l<69>fq94o_) zxbHglTUnBqPfuWFJ8};>LVBe#6}>_-9!1-7Hv<7bOS_+-u#*YKS-4#aV-OLv`r6g9 zS%9i4vo4JC434uq6nF^`9CBI6^#L;Yn>?b)IzbPFFdH`$6)S6zsgI38MxKm~y;l+B zIWF_~VX#IBg4usdp8bDDL!|Fx}e=qLJs7|l(R*RfnX zKo5HrSy%QJ-0afHKUoC2M=GU3sGXN57vWKumc?C*IA(|09D7O6r?AH&*{ey$; zOlcoi%oJxEneBst+o?AodK-+|L)?9H$M9>#$eeH?)>8@k-80^?6E;Phcnkyp%xfR- zqTg_vf{Pn2n0tefeGgnGlKgzycsq2NpF1+Hq18YBJVT83SMwrx@fuge%~WjZ%yRou zjeJ`Sc@d5yd3lhDsevsw7fcFU*i1uXKJ~9iVQRxy-<9V7Occ+GnbvEJ`@$^3T)vX8 zZ?{I4mCMtwnjwQ7$o)BW;a6MH2RdVM5yB4@-4Hg+}eC7Y7z z;Vw2H@u$(7ML_1&tHlC0__$Ey2LuTT6>)ZWM|*@SWz}E-Jt~-9GSJn+I`WIj?G)+# zK>FAq+d^YID_|!chPvJ-Oz^#IWVPI`M60M;DN1>+%_>U37po)caTdU4p_XH+NCe4k zP2?IFwV>9CsFrMFYWcME_fScB4^P_DsS3?Uy-RlvE+mE#{^SOu^S5FAnC2p?U>C2U znR9^j8X^@zd51YOS4D5d`BIR-?oeTZ05KW9qU#7X#4b%!1{fU)QKrSo4Hax-r7L+Ov!+)+N;J>E{H(om*kL zf6XYk3sRc!L5r_$VO3@M-ThthvYUqApL$s>?Nj%OIgd`&;yvzFK#pQli<_g`fgA$5 zsBC7|Il53-r+Uj7DA}r2yVRZYEAdU42T1zT;c2X{799plu)&*C6TxN)9 zm{Q;hvyZfmj;MS^-c2Uy5;IA4=1>#hjeR$EyZfesx8Biv@ZnKE+CadAj~vFnQfYYgA*N`}&Rsgu{ZWHao8HeQEmsaw zjW*)Jc`+CeIaK(PA!EH6kLKhd3ya{|wZK!-p-CM2LVV)mFPoeWD0;(h*9;W zx*ScDTha^cX2E#qR7eO?_!%~pFppscR{yli^099dVTIok?5|)lZP~obhy{2yI6TC9 z`mwuam6>S@J~I;yMSBH?Q;8%YPosp^jtm>G=Q>z~-)2b)+%(V{*x6KIl}6dS0RD{; zroNhBR~ii2G~B&ReUA9pKxxCgPaqXbe1nj(e6rwRHXW!{7>3FOO*k9a&q4eK#39}5Y@f)8lK^m=&oS}`T37rG@8;6k8&*yg?e)W86f z+lZ~%F8Y-V`@{diC=vNvus(AW(GKGlcTP!>I->u@&iKoj>ED6Rr!X&sycZG0?Z0FG zXS(k6_n4SYGiRV^{x2E+mHdkR{h=Qb#ly(|v!wsX=ffBF4S2pa2YH+SQqf<@$JQYJ z1P?5^KV<$aQ>;oporDM4O{St$^W+P|qSe{~)^ z;%}8?xi{pPOofhfj^FY})Gss;#pR+;%4Rc@z7z}wJEF7X-~G9LNT_?dzw35q7nlCO zbgvMAuc3Z9_Spf>nb}Hi?N7i$Xdq+ujTnk1g@{A`=vD%vzc$3Wyol2Q@L|}~FoMnh z>6&>T%$pVyQOb8H zRRjULYH~^Pd{Ze&qOnQXiF(CK-s(YM{_avMB%ng}l{c5T>_m%yx6`K*A{hhGKl@DR zW#hXw#n1$|3g4d&h5`tA$CZ5@`p?nDko;>fBrARzq5cCDfI{DW=-o@%`;XDpr6v4E z8Er#iywX2Gf%1(qV5lmHe~xaC|2N8d=GEnu{|O4&ZmhDW%YlN6+AXuL@16J^BE!6&c7yf6IGSY3;k{Ptoxk=8Ud zH*aHWd6LKiXkvD=;K;^IOWw>UM+zQZT2?jDw~MnoM=uu){+DNi5{MzyXJupgyad8= zAV6qCOG8VBdlPojFUBS9-aaj_6D zi=LT|hV5SavvVn8g34XerUHFUBh4}h243~uce0<+e4?t%KJqwxqEcx%TY5{6%Wq`8 zS__V8b!OxwXDF+tp~>qjgC!D=9pLF02+mYeYGP0(6N^W$HmE46px`H3NaAARYHI5H zdU}QiGf9S6KP^3iAgDl0L&Lzi!e=OeA}w_?|%VI!`;!OnnBtk9-0ZBWp(Ev}Yn#J5hiLFz33Z>jHSKR~d~9uPEi4qq#@3J&LyYP3<>zm* zQf)H*SOU(WYig{QPN%2-<@ra!z`#ykU(NJnpq3s+d`GU2%>H>=@9^;O8?C@G4-wg= zUTF84np%JH?+Q9pmECTaW9IjXKQ?^0XH?C-T<>R;-hurNX|zX2R%v)BDaMC1Y_iJ; zZvPg-&%eGGfRncQRC#p1Z8He6uu%)=-y_ebLla5^TECG-DStT)7Je9T=aR82gq4N^ z{}lQ3vpm(G4a7EtP$^q$I^%Bh;+a2D-6H4FCJcw(G_7h9B-{MYYy3E&%*(Iy67u{lroBm#9pEJKVSSRkQ z*YX!vEI=2qMn~8*hmY0d!^?spbKWmG4Vb~m+x>g0rQL7qEBb-M0`8`iCuCm}p91)M%Kk%~{m2~m} zMqQ75>*j7~4k7UvsIc}Wl{b1>_lkn4*`HT-EvrD%OF zNOe*!xa+#OP}QXcj3H*Btn2Ko9J9(zJUsj+FzR!dnOlxcj=LN^sQijg)Q#c&v0KAh zP?Y7qA7b+DzG^b56>W1X=%Ga&AjIyhp^*?c?Wr#+=ZlOX=#WjRiz{ztY&Pmd!juzP z^DONHrkA#7+(Kj}0)|4ZetYEfO0I0&T(lD2gYLR-F z)KXDLBQ7)5!ors*SDCXP!AKB%TT#cff2{U*kGzOjJe7;oykWXCTYal6JN*yBb_sF~ z%8$`z369%rAbQ_<>9C?7kn?6*B)7GtCG5ODOc zwG(>XOk52U9%Ppg(P{IhBMVSEdSY6NKZ%el{#35ybMmaA^}mg;7&L~1qmu}CAW1lJ zr|Zq_b#k>2SB~SsA>=NxDv9-s~$D@(@#(dYoC!t;5|HG&x6N+UlR}WWF*qm&m)D zW=pK}nOG=LQVS}pgUd-tQwWS6S=5#rG**82c|BxVsZ(!h*e~w?grCJ-)c@aQ7*&2o#YEe5lC0-$B`=Q zi##zv%|plyhKI9+hmp}Bppd6|T|i!yz%>YEl#L4!Q^g3IT!P~;#IGWXgN-&^vxb6# zgl{K~`pw>6ATvPc=6J~iitm#UVaUqL%Fij0vR~R{0lCM>$rvfMT}DTZ)J+x5Ya4x( z^c1hxJsub_ve`AU{_qiyP;ib;j(x6G#RTw6wYk0gQnsXkDPRGC3yLaPVw_Bj6zq)p z#ovEekp7*5c|tB`GX2c<4g^GpZ=12}`T~FM0Na{(DO5%kcRZ=Jmr5-_m1tAZR^%>RZy`jwkx*ns<2{P72CE^NyWBp+qP}n zddJ#(?Ps5J)-QNJ&0M+W?4ys)8?Cjw_c{!{Un4Rci~zC*{vxn@IQa}luO#0^1UxN8U6Z3K@HacZ1B~D( z3`}%nJew=QrTsgzXoMcjZG1#D-dUlc?#9wwk~a<0{U>JsUw=ZbdnO0rVek-|8yn@u zZfj?EnF>Jt1Op#mP`HWjPBA^0Y``qTkS?}uV zA|@>A;`+jWO#3HJZv57c0@{m-!RLDv77r^TZCSO}sMDr564Z7vU7T*DE$zR3oJriz zeiZdDW1kzd$IuEf4haC*GiY>3@K-=%;zaCIzU(XpAmFdySW_o=H-}-37Rtwx7AZ(b74`mh6IT*l}3(uzbA=C&VMoBW`_; z-NnX+f~ro}#8ZbNq}(uTP-Rhnywcg21^CN`zg|->^=;C1YEw-{I&m!vTaUXf+ecA5 zby{~Pr#l&+#SXe^dUb|f(5AC^ufUSp$?#2mhl=B|MBHN%eA1IPnsmD25rotkPbrUI zZFfslTZ8k5I=X!Q7ux5X2&+H$1P!Y@=c5{LH_5MH0oqj0bhRFb8qT-2Or zqEd>a0dCq_JdEE)yIq2>2^=OdWoNEyQta41=$zbkzlSzo?C4wQ zuPjbR|Bequu25>*kug(mNoh&(;wK^3seeBeq-NkO9Uf%us@GAuqBH+7Mg zs%fe2xlp-9Ohb*@A+7=^Wd9@r*}2@-QXl(;5d{;s<~1DxN(i0FT|wiOo%x!TT}z!y zG&Bd|-s^eG4erhXNZ8OeosAa{+p-dfz=z?XvIWNSeQdEga4a?6M}%Y77!SK#~$nG6u-0Vj@Y*~oG=8k!k9edNd_VWjYjRN9v{K71CoQ0-vdJ54G)+%i8YF8#)r z5W{S0&n;Th{n}avV7&~wXd0x_d1uDgKTBlC`2Cjk(8TRxY6n<4^jRgHwZ9!taGfIX z*rvMW7>Yhq44$qxjV%wm4&SO8$0ARVW}GeF7ToUNH^C%Grg1>vL`QuerCt-FX zWu|1DCZjA_Wcx29JOSkGXP*(HCEnbQERyg?p;u61eNjfC8tEkG*KhS+qLUfZ|j2U=FwMKNsDH)Jiw&QK{ffGB7d3qz$GM7GaW8wf{!T*knm2^PSu=j^d|jCc|V#Nt3#*2YB#01 zlS(Wg5JW9gR)RmvuB}IajOqwAqj3 zwbVa%2vyVB+SYcl^pY284>0@Gk8ek=ePJ>Y3m%ATy2W$#BPt|{FuR_hh?WjX&*+4& zzk6xHX*>cNp8 zGF(CV@IzhOU-@k093A%~X|NfmXC6)$1tD!01$6~@VIx446_prUg{m^aUgw0HTwK>5 zE>RGf6h3liLJUd!?js|kqe(~NW4%4Zp&5QY!734)`FA{nx^_Ca#>9trKo-ziH-uha zr}~F4Cm;9ce+g~AjpQO^>H~i|7|;8O(TdX68Z@ffh_U>sjlteLC;IO0&dtfZM`<4& zLs&KnXEDeLD;|%8YR;;ZjfDvpiL1F0QbO`PU|J5E&#i0QCCoC5L^e(Uw^0Uuk zFPU^&B+F5(;)R@1>jjWOXVo3Hr}mtrJeByFA6*$tF=GTU0xuDE?-Yq603J`N%e%$~ zK=p~(JHhuhftQ#Hb;EZ(nM)Y_qY>;cFjpB87Z)d3{);Sw5J1@wMzb-&gvC|7p)hTx zr>z9*VqoAvYlM)?5Fk2I%9r7p{#&AEvlwy}*0&d{(7z5fd3HAoff7 z`e+@A4qmgVY8}{U@F+uRs)v3LPl+oHP4bL8{s@pB^RYqzX|*iXhoA*iQDg_a36AV7 zBI=f~KT)J$ZHQch@%Dqg%$i@1J*Nzt5vqP=z59GXM=HMNO(sEUeQqqSs0Jr-x( zE+ph1+2>o7N!7PkS?AUVVvUMTCgM>=qNwczq?Xoolu~>*x3XZUs=Q0TuB~c<%MA!q zObYsz8sc*V&C5vv@x>rBv;bCZGT=h;&JefoWF~~ zi<`klY@rRC@(0Vzmi6_0JIUee`n<98;I*=3nPw(uAH=!{R=Qih(!EcZc4xZ&8K$n$ z&h*c8{T+r`nsZu>HQ=`0Gk>+hxv4BxX$pX#dE=w1_+9}OrC@lftoNxHLWx@C=lDLK z-~j;v?Qgp`^bb0mAwqLb#lf|wn5GD`U489jm1Ql-WtGYU?S8cRaR2-F9GX*}As*wm zi(&Z&Vz3d#PT!4|KH40T0El%f~KJG)uK{-M=WY6bVcMSW{}GUUQ>fHy}b zRbJmIi%W!d#ddRFtwsTC^1!H2o<=LD?yH;-@<^VC8STc#rk&UOE4PbZNbs;O z!IT9a*R@IGwB^(hWl!6DzyrvLK=LARQM?x35VW0y!AL6UPTu0IPkWupm~p1&`+~ zN=b%&BcoyAoOoO@)?@ZUcsBqU; zI9(J=hu3djZM1Y4ULuiz38Omem_DE-2V&cQc}1>Z&C)&3*l!NqpQJPh)ZHM+jAih( z-Q0rw^@E(O)_!WLZsFsEVuMCr!%L4Bvw_T5T0w*vk7AC}dVUrt&Amq1YU82*^ziMI z)^(3q|F*s7jUB!>bjaWZIS40q2m8zB)xE$D?0X*7;7FTlT?u#W!_T%Wa|*8w}~dEOh!Ew#mg29`am9qb5N{)DBU-2pr3kz z2ZsDAgMRK%817!>Cis@fP(aUzk0QRXM+ica`ME>@X7a9OeGcZBTNX@BB|I2cX!x~t z6~OYFnwaY0!=KwNsbT^GUJ=AN*hY(;Jt5E0dXQ=z`x2#Su**0u97_WT_`ZDXTrJu2 zIn^byn17(aDf^m`FE_74qbX>8d-O!DlcdDB8Z1CCas{%jC006&joDb|R98#h&||{K z{Q19r?{r1M!|Yop2^VyCf#MDMz!pvr2XX?#AJHi` z@vU*BA-9rC_rlldDmH@0(Gh;JMak$USNZlkPG$2Ag7h=IiZ1FxqZ?{8=`Oa9XHE@zs z3H>nA{o%FP=*aSg-;|TlkvV{ksU{OP*#KIS$V0Q)fc)PuC`2$<;mm`(HN04@0THwt z_g9eZeko>F1`E?dAW}s~MPq~-VZzHpnv^JU6HhIq+gU+O$F+0l(>D4|c{qSwoO&5h zb8uWlLZOGrGjDi%u8~o((zk4%mVfiqOxv-zbls?PnCW-WK3O1m;UPx)1__G+5=yLb zw53=Em!M8rNx(AKz^rgIhHjm{>^mcxrn@wGonj`go?5cIp~;o&FYwmAK)o^i<$PvuF2c&_+i{AcRMagNDSKJAF8*C-$PrYej8E z*^r7&Ma4gDp5&#NVR55Vm9|F+!6sNym?VEt59zbjT;Uor83>D^R8s5hj5-pR3eDpo z3G4kV2T(aI3u;m5Nv!YR3S)9KJAcW;aQVg}t(EWC_}SV1OaVtux^pFrcHw6xR>^ZOk_ zHd~ETMkq>*kItvUC-W?y~V}Ql|=Ck&7fj* zkD=t3>ReoI?8rM_rq`-UjiY06P{EA!xfwiZ^d`r!JR(imf6m$LIfKOk*uN6%{FwD0 zKN5cBRUYot)civzawUTMSNhOFpJl8{;E@l#xKz!J7?>`zx~y1g(5d_;o%( zA;&VuTHX#e=J)5frYaaKJE7gk#Uk63DXpOfODSM}#meGLYxoi*ww;~kz#CE3?#7ZR zzEtzF$i!!`ywdI>%?kq_mp`1#^&P1T`P$WY!;pE}b82hfxJKSE9THzb&u8 zAhfLrC0f}t%kQnQh|_!x=%{OIR@p&TYpblPtPtc-*8X-%&mO`7mtu8>X}GnEkWzhz zE%k?^l=&wvDQ&9h%~X2ZDc#rN9~b2LO!bw7TsW^f!mbWVKPF&Ql(P(mQ_OVNG)ju= zICJ8ghwtOb(o7ABP?b@8M)n}kQBfiYmwuk)Y3=5#iR~dN<~#aEC8u$jj|}sW>_(!~ z#V$yrSseB*CUC;?_lwfh8Jdeuqhlz{Wdt(P#daZFmQnE}bnIC1&UguHrK8|G;=AD! zu*Dn3r)kNjx1yp=`E+#UgbSK832X&6=rn(Z^-CG1i0Xv+9teTEA-*jk{OmJMPYSLO z)a&>S&X36iV_>q3&L=Bhw5`0P#9^vQ*M+}hfl&v;*!zq~%CGxUkM5w?f#CjA(ss6n ztmjZqgcwFr$bo44GebQ(ho&WkA5$A3p4tL0l4}aP+hKXo%ty;GLmO| zMx=U6CeI=z?%2-P=1cwn$B5l1XW-CclY*=&eEROVc|a7-8_c{g)E#c5WpJCc>T*jf zu8FW7w+;&&%szP&r$ChJ9WYZ7Yk2Aq=TgL|@yW(X{K@Rvtu>s9|awrOR4nkI*$zUQaN^V8FN$ zMtG~CFM`*P!~1!*M}L_#BGBZZI7!f|sreRiS0n;!AZ}zaa;pZn$c^fN)JK^|p4Y`d zGQ!kO2J5(J*e;YSwY>h@P$%^~&&;`Uvk??^9(hOMIM)#lL&_x5<7v{0TM`$%E?YvG zljM2*hdh3xB)mwsy|_c%(!yvQ-W4CKk(>tv2POY)2WT*`m(_>qr zG-i&5MVM0P`6?$!m(2A!C@$LdH!_F|MVnTyqRcIaQ2Z?3h8@lk8|aBLUmPNt2Cz74yym;$~j5=mNa4E_#3NW z3G4HjyU!m)RI$eRp_&GB`m zqD}IA#%Qe1CLi^y94T!Y+o9=X&~K$5PxQ~E9g*PU&HRD zd{_F>#oA8HAg7RP={JFa7_wdxZl*>fszo%FwA8#wZEUb9Xk>H|02(jr!F2A`CUF$h zQZ@!wsFQ)*62-XiE}mtOCMn6Ge5a$&WS3TijP%lsAZ2Lmr{rlv>FKxl`!P9oU=gB} zyC*FN9Ti_|PDOL^sJ_6U+Zw_J5+3G&n~p1`jHNP+wkhWi(;rnXnPcF& z$fi}x|GqiNXDdZM3$m)>?bo#VE9e{JaWua~QVI%hWO#8&Nidn12gd>Q3|iJMb1DU> zWwbkgQHw~V2tSczrTP!6O+6MwZLwqZjh`~E?juKt_4SUmvW6l7?OTapOR%C+Dak1c zO7m&IH05bXtNxu!cLHmEs(!#H2wyYD@deouM#o|ZcOhaXDsHd0eCcQ5Vylqhc3~!9 z|1;!GQ_%joi#!U4z}p-FM!(oo=i;!p_jg8Y1fDm}{ujCo!dJihOGV-Rl%*T=m*=OO zzHoHUhmwSkXL7wV$8N6x4WngVoA!G>C43_chvWILn_2>Kq>aYY@0Dl zE<7B!hh%JadUdw(Izsv5I%s3x$e7{dY_<7m;^Xb)FEvwlF_3nDMqT!b2YfZ6ABc@b zkeOE~)6Fj(RGfX9MfUDf!Dpflb1H(XqHC5$C+jNd%5e_<2>6;uA+!rWRMlg;(}}Xl z8ina(y8}uhUCu1VjOL}sf7_|zR8ak}D6cr|>YWvthkKjdl2uW*{vtzsM*-$ptxPgJF51rVd3lrh@AQIT<1y!v#z{(ww!Hss7>;5)ox4&nk#aY2Am!@*a4nqa?>L+E?i(64 zJul*z2%%6H=m}0^K&hlKbAO+Vj_na++)qA1r2Yt8F^{^y92%7izgr@DVwwm> z;>qr>+b(NCWP_d~5 zaCtq~{RemA{ro^@=rgu?S*uOf92OO|z z(~80G8GI2JXYZS)n0Z>R;9aS)Gy5e>qN}dD);kq>=%VK08l(u|H#Tg+g2Qx1`m(Z^`aeh_@>c8MEN^gY*1O3b~y3ApO@A_|HVgwY|H7q&9 z-=)1!Ei`iB2o_+Qr!}jMgS8P93v-!^84oR3Igmk9SXh9#By8QZk?|aTWyMXypg1+F zMhI8#me`C9_$+ldH7yY&`1t%%lj+wjm1)seR#E`!Hg!cD1gMJ`e2|X!MDgBn`(#0} ziK!W*Csd)3@mx{MHm!Y5qU)^Qf;daPHHX+fzjnjpM>0kymr%GuA)iRD@kS|CJcy&4 zc3iudmEZSh7QM-8K|#UcV<4Tq1EMh{Tl`R*P7|O}dLIk1X!-uvVS9_i1d_s*ohFE; zy#@@P*UX_11Z}%wK2Mag09f7|ahBZCp4%a-dbiQMj|TuK^mJr8LA60HSTabFq;txu z$@xG18mdOcf+G&|&Wzr3+L*u*An2MYh!onjzNe)g&H3bB=J39)4#+|xnf@C06@iIg zEwo5YoV2fN7q1mo=yF^RXt2ykB zsjaK-O*WP>#s_=LKQy+>ktOO4??h3>Pr<=HBNDg*zk+YwIE6FE`zlBz@{^=$d;nq9 z_eLJ24$Jf7 zUqz{-umPx5nV_aeh=E5ZCldj$<{rDX;^6=CF(i>xUK{3X`^lU3U-&p!#@1%2=%_$B z9OmK-YKb$;8%n4MN#ha`ossZT*3Zjl?@}P3#1G}MgZA&fLlq<n%%ykcE(^;#;sZf(Mg)CY@V;GLRV=_^xpd?W55ehg3%+7sDnyt8ECuXpLI>%t7AYj9sevy1M<)=OR+gQnK|pv23TkMNJ{+6SRIs z$4k?<`&{DyS9=#pLh5SuWFwux7*UZ!ygxF*7i~U{W8LeN`_5AL^YbtvhL`8Nmr8#~ zh)n01ciZ}0Q6w{|PNX6sBxts@P}I6tkQLK$4f##)Zv>~p8#|?)=fk7pYE`_}hmwEh?E7h%c`(|{WS0Pr>MXyuj?ep`~j0_y-;+4J$*B|)2 zxA0+xzp4>?qEx#pgtV<504wc!X`o%QyP3}OE`_=cscm4WNqA7eZ-eX6$U%`5nkjTa z`}yVo?*lr_$!YzibG+?k5=V+%6B=K^TBXq>YSkBo=yhwt%jTuL?bW==&2>6jX69&T zfPExbn>q0QS%S{}sAPjgm19WZVb%3h=tx()B_-X)Z50AMDmvOEU5~k$88#+fwWH0N z*8xw_(aA(Q?-1YqTCG?U+P`tJjbA~O--&G~LPR+>rocFQ$;g!B;=XDQ8j3VkmnJ$) z9{Q7{vYwUEEE!90N@L;T@!D+npl(LQ#0bFi?nkmQ%%-`<|@V%*%< ze?eXf@JFs1yZDSpnT?x_b?o(=gD;0k?Cp26h){B2yr*nDF4J0H8%QcEuXr_E;n@#@ z?HXeitjIPG9wAM!I}n$Vk?q@>@P3O!n;)Ux!1p+qBMRPx2xch>X5?#8ddi+`{tj6? z3Wvj=d*3v%%0zqn(67ED2%fEauatIsa#3l2jbqx%k7c$8%b+DH^`>`ElOdlIsz-K) z8b|k`xEV>#5fJ~2C%1c}AA+lewsqb8nQaEAow>%|wkmE)Lvs|B*KQ;?EQu4=MK?=J zor*j}TWp;wckpKAwXsYrQAj5yhKGe?TCG1za&>y~w|E=}F=DBtO{@Q`kq17ueAaP+I>`~iR>`xCg#swzAY2I0r z`BuZ7Y1)J1D^D4`hTsS8N7h~}B{UoG77$NCZj!B-a4t?K{NdAhUBXrL+R5((Ia}LXe@mC%(JC=U*m}*7mw?VcMA6-zB8?`q)%=@6lh4^&aT!gX3_hQ^bjP zT}gZB%(-nha-DTcIzy`qgSpOlzw?rh)%pBtbvwF^RbrG{Z~r*iV&{cyl#&F=&`a5N z$I+%Dp$UYaKd?K9U*K0UzpGtM($9fIxYX6-cz)oj6iSOcrX<9Qi1QZ*hzKt)afC-i zeBD2=F`rt#z1x!IK0w#z-a6&Y<}mG1cJZ{PueLinEsBNMa90GK^v$}mdv4KwJMGkb z2nZ0{)SG@zBO+f9$-&2Y+Vt@FHEN}8HQ{E}VY7Mu609HOg1qE>KTA}^Me9hX{CDi0 z3^Gxyx17<%jfL(>(+B>H$67{R!cJATJ*B`{TL$j9nzl)iWEj|T{0%?mDTbgK>L zJ(22_s$3^Pk0bsoYU}O5LHg_Z#+JtOQIuyUN><1F%Y_|5pVj*ddFdNkFjQ4u{)c$$pgH-i>UVvFQVy- zijQ}E8Ju@-LqSwHIy!+(Q2}oPIj(Au$8mC~z;|cDz-IC*pe;@2TK$ALB{>THXClS5Qis|p!h_i3nOkF2TjFS5 z2^yG#FtWUq(v!*l-PAqvj0h43diT)KT=2~CPyPr_cEl)_6qmH>ZGJUp}g8> zX0=N_;*Y`MH;z>$)@jACLYLEED_QP!ua}OGq`PG0_tycTi`Jpz7}_T}FI3#_lFg%l z5!{i)H;G9~w8UgAEbA$K-IQt2T_K-LIdCmRr;HWBm-Jb)5a%ytY z8klyb+t)QU*M3E+RwUG9eZ4^G(%hw|cNL%(A~+7e@ajLL8KVA zltBl+sw);vOh6l>A$=7y-{J-fCxax!^AX{37YGktr-R?CYk)u=LB^&3b-bOXAy#uc-ehMToOAN5V6vpWZLcuQ;NfjLP6~lh!pM@~a3pdN5 z9~c>$HtAC%hYP+hU6Ji+MA^@MThFT&P4PUR<;7_g3jB8G$S_pwE3QV*vM9$qsnJQU znBC={>G!#NkbFAl-|)nQMP!L73|^ zc8_UKW~Ev!;0d;Ka>WHEGrFT3pF&nCcn@v%94y=4h1$w_T*FzZl{0)Bw~?d7pfqvU z$&a>jV_n>=^p$wsTH1*FiZ)5%A>7x0-mzo3J0mNvPpsX+EC%VsaAH@|DqL~)5rjij3a}Xd z6_ra2>ST0{u1)_Vg@}mL?d0U7Eat3WuAw))<+Nd5T+wz{{&I$cGoH>qoWNz0pq7HA z>afe@p6;1%rOIk&=k%bjIy=yi1C(W|O0VO5TL?yFZ+~wRf&a40%*J-r(s%LM>h}a4 zvlr6d(H;vg@8_EB28fIpFC7BH9Sn$9e}dF?C^_;8#6a-7Il6`3G|2AF%B2{k|`+`{&h2H(0~n^*62@^nb!jV2+}&T7OE%FHnr}GHk@{&AB8t{ zs zuy#$9h-R?Zj7GBi z@ks!sj;LUYzU)1>-n~fN=r~1TlC;Lx%sz;Dek+=PYd~S~rwr}CCZ~Y-XacaQn zbU7u-=DA3_co*}TZEkP4$@949_xEb2&2u*Zu31)EW}SKkE@7{s?S&69=JB{L@b+^5 zEc+PytNRv7#`$IKp&&nRWrb@yP#7y<_hKKXLs{z)G|P!TPi8ux_HPQ93OrajxB%mA zU>8Y+RG5rfgiuJ1z6>sh@L_+%yPH+G^xvI2hK&B?ZEnPlA56+L?^^Ckw;)Gw{`H#nLei)msEF8@%HB$9+Wz$ivu_1*|y`jgRd;OhmDlq_Z z8=8>F@ZZn*?}v`aUrbIB=@wYEe{k&3gaBrqUg7toe?>t5+Zq96>34ufS2k#pAOL{; z{&&^LPCbCJq6Ujf@lX0EY6w8gL*+PQ{PpiS_#Z4P683`Cw6x9%UI{m+0CPXkL0uX?3vZJrx*0!dhF@G6Apoyj-r;6C zX@dx)WVqNl)Kyheq-K)-nypPNLVEg1J{A_22+ml`|Bff17YamLksW&{>4FH7QlelH zG<_0|$plma2_fCZApsJXhd7T!!~cBEQg$%l0ZBYv?+`D-;G<2C)Sf&EttR8W5{*Z<$XmI{r_ zL-AT_dOGV)Mw6>1OBT`he{3KypOVl{mTLl_o+VdHv+ByChT@(`;y=a@5=0s0vxF1f zMhS%#gQ|RNY|#l@*-B&I_Wn zH-R+;7_Dub#N4C*9z7Zax$#HlPe5nsBNLIF+&Hc0G9jU@&9BYR&r?e5xv#amsEEQ2 z1_tM6J`08aFAk2D<;7)No)!Dy@%8noAxv4dE%I5-488%q1EFJpyd<~ zi+AVfwZ6WZQVwsiPA1l2v${FE?(iO)Ta65}b4+d=oNk-SEhfj=gbF$#Ow^98XliH{ z6y%ps4qw|bl9QA9c6Y}vtZFu;2^a=sHxMWlFF#$wS zP=7m?QX*_3jn~r90u?FN`svqqn13E%Q;^gZ5GH_Na^Kw8z(hq|QB_V^UP;ax8$st# z5+b`D9eziCVDo9XJi80$@=78YP|eT^e#jgrdiw;JP#eysCO3Z1z%LMPZq3QZC(T@3)>I<@CX>VF!S;X zY&@J^7Jym`bL_to5fy>t$JSuY1b1RqOitdvvZ4ldnZqMO?I2X0Z-np)xfQP@GQ-~w4&@%f9WY+AR9A*_1 z`Abeuaj2ch=g^jtpl{x%QvcXnu5sOOf{vx-)YLK~Gjni3aJO8WwQF-(9%i`+FW_%i#rU=k$7F|ughb98VW7)8_6Yes zaUA@4DQt<=Iz7Vy2#Lq0lvi}WPo-DIs2--`fB)YNoe<^iB79mrVs&SuzR8%Jn%aA# zzboN={4;kjCZG@2hk=dQi!J2HJ_`nhP>opt^25%;q{x(#LtcJx3ynIsw32S!t&wdVfziWnfyZa+3;eb(~u@MuGc&5-_si{a|(%Eif9%+BQkh@AY}CIiM> zFxoOc>5mO02tKF}a86!@TrC$54~H^JSPW%sHplOa`tJRTfEw4Pp+@7 zpEt8zXw0L^StuY>%St&?7lJ>9hqBKCfv7WEz7{0&x}%X(m=uEf%@6gJftzT$t7~X| z-AA-`PHpsc3j11lZuYAZw2I2179)6qBLNHUVe$+t;VTQ}OuQMGHI{~ovw^Urxu@m$ z>@HXyCnLH;dSc?N>(onrmJbH{;V6{V^LJ1XKRvyjkx&>DU1MWSEv4%oujinvtE%5y zx|;b@m&iX$whm#X2ISGXnD$j0AH8hlaC^#Rk~|j*i-`3Lhle&qp{7IDf%4f|)zhm6 zKaa;}Yu8yCenqthya>G8I3hWuE0xd!tMRXL5tnYA_`X3jqP zR5~h89!bP%(L)9)WTM+O)e|HtCW`UdfYxIrp5w0R@@|-U@VN=6%I&7A|U|gqEv=`36281*{t$Q>e1t)r( zm$vzN95>%V*Jk^oh#?@r!F2~)c3coDD>vMz8v6-$Z^y<&dN?26hU8>z{l;#vM1TqN zR%V`EFihptQdK(M+i}}0cU$A(MrwD}YzBCf(LiBsfl=1;_4vf<<*xOrvNF=0-K&^v z5G+bHLyI<(6L?2Q4la&{`ueZvyT-=pKoQgChpvghKrvW&ctrUJ`n!0(|7Zd9vb|sL zP9ZEk)H!{efr7qSb=(gh9zynfE>Sd_&sP87_YzolX#{GTd>h`dUBLx_XsSt=<(8Hd zX7gP#bi4bhoQ`1Sdi40^J1EK)YgHxf<;`_Xq#iRy%Xsc*hO0{4q!sOte}_)DYZzT zj=a0S^EgK5ySuuPkyiC1gsi9ueN*O_u4q2d#9i#LQZkc?D!abxp;hn(BahY z?a7bUQdHIbi*skp3sI7Vnqq*Mo?6Yx&3G)+;k7(HO$iRaxg9!ndbC%@m8Q47J9z{55Ln(zUKT3x-CyvMm6djCYUwGDj~Ak-@uh3xbg>3O28KlVL~o4C zs`VMjKXP(%bR`$!Bt*lC_)uh7*h{W@y<5Xr<(2<)w~+Q!8f|rQg%vLGkP9&Ul}jpcx%gE+}_+xDAbr5Tf1%_`TTpQ*7;T zJkSH8Vw3dTl*#28Pj?e7oLoNR%l%*OUSD55Jl<}^yLf03_&3#(q&evI1)*nL@u=h(FZ_rk_ZWEmx+?4%8OPE8A_1QbfpYGclHg?s# zjwdJi2z1s0BYrb5V4boyq9tXrn9YO?xu4V}1Ys=Reub>qs13**-U;HP$5XbXUF zR#qw~7qZYI+(If*0?J!`aD&Uj!a_d{H?*G};4iMsNX0HTf;}Erc;4eHqV9G7hK1b| z{5vT2{MUVc$Aq38LSRjUn3$R<`CaQx1f9)Y;5H~AIVHAFj}OPl-TW)xM3&PAkRDyk zFI)L584I(r)VH^q6l-%8f{1;--Q{h7m=S24)7FMMlBh$&(=2H$03Rt$kMoOP#z|RE z4jLYUadj)B%jr+O?#(;bx%5WkUiZ`K_4KyQm(r&MgAHrBd$`WsbncdKyJ1`~3uJx2L{=#WtVdCtIn$4kLM@U1bw_&9;@35f+^)x%0sgD9n%a#%co025<4;NK=z z=bhhQ=Z-P0Fp9vY8i6;`=}r&~5&s2jf{3#60dV0so9UVWn8&{Q?5wOTV*FNw3__xj znU#XZ%FLFQnTd^!frW-F&#&daVcr-t!bp)u#kI>*3d%4R-d{FNmfTiwdp*)7IGrBf zoEF=K>@gj=r|hF4h=zYbb#S^Lu2shn^`?%nqvAZPk{hFAn_&-!y2e2ygRoOcsb3$Og1SaQLbWh9TllHGvasSu71*NT?DB#r9Hi3hjotco zEK$cYhvra68t`<91No`SWlb~f*7w>U#5UsFjE}X{4@;$e^@{dh{$;h~9}no5sD3ce z`2(7>exic)c_stW6hk8z%#EE1q&`uYki7=Cbn#%~qMfnK4oG!<^*BdDS6x#Q#~%t>3d}-T zyn203>sI5nvoo*fH~C85VIjdD$qQQ72y6Sm3Zka0@-H%)I@aHEj9M)%@tjiwAt0tU z`uf1FR18Hp#tTEP(5*#jdfjE8BPmnt zOy8F~I=W~p#9^}*v3Jn6{+kTI}Aq&Sb^FtzU^Yqvk3SK#j5f;(ISz??m zO(C(w9ERzgh&J487n{zszOJs=o0*FXk}#j|otewct&K5cM@>CBB+ZX^D@Cy6YHI3v z8LJBSe!V2>m9 zDH!aTvA;w+Q&(9T0`*Xuxbx5mv0a5_sOd` zAhlF6b&!R@fxs$}w_^A}Zg#0;L&p(j%3@_b zoQS0Os4ks(jcP(W1ve3N@y_n9E$t5M%Mbfv9p)q_AJT}l2&l-m@{Mkc0|j|WS89FR z7CIu7t((92>v3@(}u2Z13$pkx$Len(6Nv@D>F(fO7_ZV2Y<0oY~*cd_HHj& zB_{p;0YX#c4faX{Ie-pknA}$JW@QPF?c=#QZDVg6D4&(C=S>-~R+}!`T}!OU&iW;xEg)WSCs+@3nhGT59-Vc}tpb7hn@;qAZROYZ4hEi5SMbH<)^F7SPlSmXP~PQ;1T zJU2D}d^P4EpOn9F8-bmR`4QfP+3QVh2ew(21l_D>W-LROABV1$gAp(ZB`2&iNLTtP zOyav5>Q@}!Z`EAFA_J!5h2<`{pP)2xasA%j0C2UzqMtcY5-eO}RB)u3nZ=YzZnlc_ z_-g<&>#UMG1B6oiZWk9I<*;Nt!QVaj+Am!kpHKGZGs81D1E2~|{;}`%w)XJB!c3jI z{y73&ny@hVI?9A@5eB|4zF$-Y4MkWKjObyI782WseQRH?B^=E;6fM$87iu}CF6woa z)zJ~@H$$|L;C{B=b`yOWY?5y}%j|q1p{g1(LeZBvmv|@;lx`3kDvOOe^z{1y)P(vwvA55w%M_rblg$L zwr$(CZQHhO`>Vb;#(tkK|1y$Mm0VSIUTe)Y=du3wq}D7*^h0>eHGe+HV}X8s5~q;8 zmxk8zalfH{f_3!gb3rTN0T&FfOREIZaIJJ3$c|&KKw8@zFIJeAwJf1?sHf~J!$87* zuEuSZlvU_~M76b5n|m|4Nn;)GEmlPz`ZXN2M#8`|A%o_8vA z1X)WuuX8Qob2tt5%U&-XT~(BHVCa;fQc)Yy`-kLxpdX$uII^+e(KP($M?|&=<9b}6 zLX4EQM2Pc4gQY3-9KD1z6}NY`jaMxJ%)7GgisqQ;lMW_gVk(EG;xM2i_P;sd?|$C9 zu+i+NHV;)!K2BE$yWzVhgQDfXk@RHuOc>uNAwY5TV-bFT`@D7gDl4t!rs5>${SG!U zA}@o^J8NL?;F!+-O0-G(o8oR-O&20TdB^MazeLVTCeVIA`wZ#eViHJd3g9?v;7P*T zIubj!mE4ygtO;H$DZSmC;o!gt%X?XO)CCsv<@AHEcNmU*h-}~*y^jx%Rs&FUAAX+K zur6y5Az()rMWGKn*^kD~PV_K7k3MoXr>E1=+oQ}+xJE{vUE~~)-u-+09L=Bch2G?5 ztjeh^oF{0~ayn(9jG!kr+ZWBN%nK_w?{i%{{Y38MZdM%;OulBNWq(xx$xK`lBCzfUwMQ@>MS>!68B5}1D zwPNn=ukhRr3=RD=L=d6)*&X+%dzN&GoMVtO*xv;#rO{})=I`$BD=R9A7jVLZ<6)c5 zyD~shLvQcI3)ujpteKh5^|`JCP^w2%AI!E`s?kudulcIwRv|k2ve{h0Y`>Y8SFmb? zpQelq@P3w7R&JLkx~i(m$8a4T9^zUzK_*^ebW;8O`M#2hYB4F_Cv%lguDb0a`7FSX zR!qDjx9O|8-c4*JxAQdHbPmWUe&BVo`C`WO(LbyNl`JYLzwe}M#fp<~GlmMpU>)?r!av65_ky#_zqdwM+GxZKF}?BnBCz^Rk30m?c(Lu(;Mta(&8>`qe-M~?omzxho@caW=! z4}*-_E-pT`tu|`YGK_FPcCI*6H`_M?!+gEMy`^0opTlE*3|iXCjt(9`&Cy?aQ*s0o z6e09`c56xUNAov|6th)$MIf-}c_w0LBAI5_WATy+aD2(JD!vyyM#}crT>^wIuV`2Y zaT2x4t|rwrCWFh}Q(#8+$oqO*4U&fqVPV|(KpLTGs`=@zl4eP<``vO@u#`HdFrRDU z-AHDqa}{DCLIGF)QYbdXJ{#-pe$rsj_lP`O8_N?dUpj`|4Xt$T7icnd0zZB4cO&on z0yfeD{1p6er5z0kA=BE--C)1-6a01=t@e+yo$_+98_+w7WPxgm~RUxBzhY53{888~DAJ80SF z1QhIuq@IB%qi%2SzC|k_G zmDE*HkOGB=yStl2S?sFTW$p*ReYk5=3K*NV6;KYBgq3(Sq-!Pt^X+aB^%nD(p?$&C ztJWVbRV!a9faqY%!q_9Jt2Qh|qlL9=crwle?VwXGtuU7hiaeCa`?kt2UD1+DiII>~ z+M)r$&{1G`irzFb^p)3|tS&XPU#-TZ3K8xk%|MotBpTiMa?uq?*ztJ_lfIp=__Ja( zJUxK@So-^t6$7Y&)+O?_co@o*3cd`akg(U(U2(Y5XFl2_N zoRC;M(9;80Xv-W?=Ne`_WBU32@g6(l!Uk%jJ8&b&88Nq#2C5FRm%rleKgE@MC?vJp zI~!jpZb7ZXR0XEaM8t!2nnPM+O{bbQZuVLGJ zVaBr}5ipFz={u4GaX=+kN?6@5RBT~#$3Y|u^Mj6>!P3apva}+$O^tqm+f>7DAl`Wb z#mH5%3odJ#YVy4$ot9TW{O9gHa}ddnVy~EgEKEXHQA-ZgK~gJ=l`yjpI!$0GvSZ24 zaZ_^{l_}kvIW+Bpb*75a9t%nDewSo|`2?Nk1ol*jiWhulbQZ^zwEq-}zO5MTf0Tcp zGZ-Hu3UPY>;bqWVYWS`@Q76@)f`Eh72u%az*wQh{cK3IMS=MgAp=fVl|$!nMmj zOy}{T>EHbR@?ye4A7j~RVMK1Y=hXH5UHcsMBp}EE{%SUp4Qo| ze8}i~w4DHmrHh&}e`F~uugq`wvjYFZ-?vJ60|Dj~(F4G6--t>W2;kg84cBDVPC(*`15^FSG~&=h9Xf-vjn$|>*?I>8AjK)y`{DF zvek%hk`nl_@q8Hz7dx_XzN)MO9~1L^SGBXoXz0(ZtjJKm<#KIBPG{uij!2Zp0ZzK+ zE(YSaIK$t%AB(yJWaNG$tq(YJi&m}CVR4q~_F|xGX9|FqPUovPy5)mr* z@j;^3nuxfvzByP0peO+3{_T}H3f*6%dmTdjG`H^T)}vgIr-X~g*4 z3B(XbBEJp^K4o76Cyp3pY{JqtilVwc7tH~&GN&zo&Pzs;L!*<&b>%_0H(!(Vb9~L4AxkVC_10eQ+$JN@M5T*_&zUm zImE~q$&H6DJ*emcT;AGuhBg0x27%^QfI&bEc+qFBZ(+mFk^{hp0@yr;$Sd^i;AJq= zdD3eI^=3~S0PTCIfz~QdZq=b}cc^JKOaT3l-dpzJfW9BH_*_zz>f$gKMMZ5)L<}jL zM?L{(C1rUZ2^gRJjaup4!gDda$#=5Ff%Q2)Jxml)fUj6Hy1jiHsy%7qXE?9)obm|XNyccGP1=0t zwu-;~w~_H58pOZMUX_SG2M>fj#K;PZ`Q>ZVo2%&=HmyZvAZDnz*hq2F$ET;B`yWjl ztob_5o7IoJ@G? zAeivrMBkmH?gx0if87NH`0I&Nsd}8L9s@UHzcCSv-I!@uiF`V5US7I6#|Tu|o&jzN zB;QOx9S6{8{#bt)n8e=d?C9&K7;jdm4a|`n;{4J04k;B^*3a#-rFl94!P&K~?OJ$6 zZFRS3w;L%qRX%y%M>u9Wx3cimsq1~@(6a4M%Y}@ns=Uf5RQS1*AdmsI?LVsm z{^Ke8=kQU*^D!b7cNSUiXh%^gU|m?s!iF}$Fe$gf+gb}-p3ormE_*$?@t z)?j?pxfX?|-~x|s`|YQ7BQp!Lu;_p_q=$(~TS5U^J{bquL(UZ6BcOaID#2?H3wLC< zX4e{-;_L343+o4m=^-Z3QW&LjgaZi6Un(kE{()O>Z&zoq5V<0R1V=0ltZYIZ+&mrZ zMYRPbP`L&EZEo|*sy(^@EHi*AQa5RQ-0QIFw?;+HjqEj#Q}zBbob&Wc8o~2%1|ahr zpHg1MbH*YQAh-D0NbKnPV$1h77R#GW6)rKM9`?)B3P<<)C=x2pEs@Yz_7wu!nYmt3 z$XK9QK>f}}1?=8;tc%BX`c3%CJlLC?W(m>amFv zk7T!A;@LNyE)M&tEC$}*cICy+VC3-gv=wl)AQsNA%tW5IuBHN7RLmWl5Q!)5Yx=gr zNt28K6)bXiylvE6Ma;yesI5Vowc&Dlj)K`R67(&Mw)|OE3v&4D`w$Wx-p;?wJ!d6m z|IlCUFdXW*&Q??rAL8Fj%)d^8_{il!cY@>gP}n*yc+7tUP|+(EhX@}BV6wqOoqX5k1Qp*k}J9_02b-BJQpMBFa_`#i*eHs z6x6Q&drLy|C?vHBI@c_PzbL>c6OV!MTi%dKH~{GvF(UQR8G)LvqJ%vzk)zrd@8@SV z`7sb5&Yfro!_4BUFTr;f%MZZ+G{^c!qmC61`0kyl>+<}Z6uq*rH5PSEE)p>66=!<_ zh$p3#bVT2*I!609q(SxxFb4TN5)&EG4keRWydv{nw*33OID^EINUo3Fo*2p zeTc!ZUbP|p6Aa{hfxvPt(x8L_ss@~eNJ7WNw1rQnjnVquZh z=H<@8+{#SjQTN6pJiPRSLslZMWU;G*)r|)}7D|)no#Vk~78izUQ(hSv9GMU?F`LEO z$ayuo@$0o#1+6^?cZ%yJapQI*JVKgd{&0sQCdQimOYxsIJ98%!6E7=-169=^viuwb zjqAKRVZ0WyzvW)Hbof6eo&y|wR4{_cTs|iEuUh&+nvWmJRtB+T)i)+kM$Z)v4t9Mw zedvU^V%G&VF-W+I%sZ-ZI{SdNQ&D($mgm5;Gzhhxc43AqR0@-WiPB=vF2#O0LyLor z4FxN+KQE~DqfpSSm*nQg)*#U5H#Y(2K8Y~OHfh!M(UH zY!G=lvtk4ymxhCrgMv7nq&G9Xel5(=$azddvUecL=bTrx zm7-U#*IF_=Ts${PL|_RM;IiV8(^Qw2*IMSAZgT8PY&hXc@^#HS%_^BeXcYL7^owLB0qOwUx9-&g2BcW>@ zo9w?I-*C3&wrA8C{h)IQr)y>Ongp?qS*ufNULc`^YogU8Czk1tz#+In+L%sm3g`fj z6K&qB&xzz1^9%lPMp#_Dyk*w_`Q#^7N+yS!BH6R7_fXrq&rKOfS8ib`YwibZ+^Rqs zzjV6bt8598Fbc1hrU9g?I@WX+oJgw0!(I=V7uUA3rKRi6@$V*DpRVGKC~`A(xsKM> zYqyv>&6AO^Kno#kyo>oNmoYG0i4ik%Ww?80`1R-{!fPnR?VN$CUUf|@ipWK!c)bJ^ z)K=3W{Kc^?j|;N)4DOfEGA{O8?$e^goBNyhyQHaF0HNDd?z)*c2w72tawnv~Ul|1d zTp$tL_)Jb_^Ct!cMf2!&_Nl&(rfYt50*p4{8Ts(8Q0ZD5HLjeltXzo~Kce^{a(s`& zIF;Y$O&(WjoLzubz-K4^=`mSgEM(8nSSW}?J*|>QX%8kK^`d6B1LGU((poabQ9j$_ z(^#GZ_qvPFBqo}}E zeP#w7W)Jf+n1ZS!bNi)vxsPV;zy!oq-*j1G|A@BO@sIfXFrG}|zcFQ-1!k1@0B zgM)#dreh72$kK>{P+PN)k&}vM=VlDS(C-U$&8!~sSR7{fVxq|se@=2Kj|QY>ppBj- zIjS`^HEwxAezI>l<0pTplP$dLwZ;kwflz58DDEAD4rOyl7Z)BHg$~cAn1mzWi}8Ui<>cT{zv*6C&DArvBcT=ZFOx5hTU@Z8#*129 zKE~9JI|y#et~e=VYL5~p3P zi7{oFGpj|tb(ir5mJjUxSEbi29nyV^obS>_c88b_h>@?kBs?^^)9Id;r5ug|_K!1C z*(D`;#)XBkNJBqBuc!SG>PVY2d~76gZ{#=7s_N)ECkkuYAz_MTPVBW1P0~ z6$8<;;&atQ=UC7VT2@TZex!ZKOj}MUo6nIL?ABP=G$fz_kTJ%4t3{TpmwQKI6v8{e zNR}e2iKS6Q z9WggKy7jQt%G#Vr{%%f_&VkkGtMm|j2Ve`~p{bNRG6cZ-dxyq71^VXL*aQX&jsXAY z^*ot|D-zvl1Oez;X{6y&ilPi?afE(tOO!1kRY``*&{^?`%15WcQG^6Xf}B=PIu@E% zcTM$-m`cBra~1%f|F~LTd0nMi9s`&YtV@9)`UMmP{2C9)0+@^1N%@j4^6d9<5R)5S z+y-w*o=HK31XZinewD?#%h+WLq6ZP*JL1&QUlH?ikdgDIgc!U!lc(6Us&zRm?e8}y z6tKv6;>#nyr*ql)F63or{~~2uT#5xnyW|HbMYh%WM}b$(2j6VwLBsSr_xeCZzv&Hs zV`SxZh`t~(6WM7Fi_l25xIFoVfQX-XpbAZVLQ|@&WJ#jg^Fu_nq=U9U&#Nkv8We8MoeEqjobSz{9Sg6^((8CA8_adqLaC!ZsAtr{5x<`@&$MM#PT= ztRhSB7VT+yevYhKHSl@&_#nI0UQyN&@h!hJboP0l1xdc9+@-Dn+MuSiJ>FKO*{_#a zN?I0{D}3P2M7B8q8vA?RCMdr$r2D&1-H=|Qof<>BRxnVLU+iQU`Nclg4DAD4k*1Rp zPSIF{z%)5?&Hc)Sb-ySF=YSyye;|;)@9#VTth0H0$Y?Ff-!y_mgbn%)3X{;azgZrG zde4Q$g_%1mNvYci9F`a~!!KE_^vn(DsAR&G-eCSfo?Q}i$L7R1%$Q<#@vn)dUFchb z7z7mc7nheKb}+a1fB|{vAAfyfpU!RD$;wKoYqi9gdNFU?=f2hm%{I=}$j&!bS(Y^) zU%}pR3WADm6X{oD;-;QQ!AJF1Bk-c4cv%F&%frJMmsimCfw3V9RtB)#GXl)m)J~*W zkSxPKo!`#!olD|k;MjhE{nEGyMRO}CVyhZyGl}XdZ-W|@)u6fANZ_nUb!yFJ`y&WTm{2C`1!ma?sN;WQSlj++Z6AZS%(RFo=vbb+9 zGhv^GiAkv4A~~@~GI)NjE-%j&8f}@LQSDET+74hy!SUA<*-f!s|BMmV4d{aEvSJM+g?`y;Up7bvz~-%bPJ1&=W?%=>dpH6fI? zxuwM~6W_YBv_CZyquCvyzJ4^Yu=fkns`?8%dBZ$T=zhp;FY9hYHp11Lviq{)YK9V@ zV2c9}o-y9aLt}^qT?5;W_V)OA1SI)IT}5vlOS*#O{y?HR?GPri3X#%MlOXMyh?vVV zLfXnQgA)64ktY_MqR=7Vd)NEP2h#&ue<>R%?uPa(?xP))(eiBuXHA z@za(&*iTW9bZ2&2cCH>wUs`DCNs~-+*4U;_9|5ue41QQ>R3wzM<8xmYT@B})ditoo zExEqVaeRdEygC#=qeO{H?;^n&aG1M_w#S|6xew>Nc_A!rRRVnXjIP&^&F0_Rq>x!e zxUE#Hy1?K-`xi-H`EQsu75(Iu#H)%YE3Q2nc~z&oNM8SFM>2u`#eL z_Lm{9vgvPvsxclzULe4MQ=~br{>wMcNsrY1NwRnn&@Qf09e19c(0C8|a> zgwTXH(xb07HLu#I_}G)BZOrhGJYSC?WR1PNvZm%yIj^Z*TwiWU!(pTN*|AV%G?!=I zt-M?MqMiQrUOxsz7F%abcv5c07`cZpKs+U40d!vcrFdXRn zt9frC)K;p)jK}L=-p%b291E@mCtD-d{r9Bg^mie;KXYu2mvvL8}J_0h#l;Tm~pXx@-<*a_K| z!ofDtjl2oJhqXQITkBxJXlN1)2XjfK(t6y`bkNb2jL)%oF;>cFU@+`~NQliMFNEs* zZEQ;Fx=f>rqmRX(iB@~3UnGklfhZv{J$z`qwAM>)m$mPM+v`AXE?4NF zsP)Wvg53=d+dNM_*>$*3!H1vV@__I!e5fbLA;E7mVxh&qN%(PNZG`Cwe?(%Y;$gU( z{(%T<@6*in4Kr?48HX<0;12}%$0R~XQ@{v2F}1YhVgUn67Zw>TyEsu@rE*gh!96)V zhiweA=V%J9>HeTkU74>kOigQZaXxkdz7PF*A4?Y)g}6QNUcj*w&mWX%(H|@gYEByi zr|Bes0Vv_$THAO!JRqsxA)(d-)lCzU?OE#L;+~n84+7HQA>cVcmX`}%4A5iz)d@1{ zL!H}ed)?WIWFc*m16AbCQdo}*FPQs!@;K}1Axw+~Osg8p)EOSI>6(|pa-;K_W+hWp zc5j@?Z?_szD-tGl+);6)hcVyXh%9?+3oVk?bK`KVj9{b3?8Dp!*ID3%|p$ zUT;TdH5Lj@_@V@I>fJ4u`y&nKEcgQSF`wluTt1msyjAK{C_>yLyK4cTLPRwjziMC5 ziuZ@GS7_;vF{tmt5{m-P`8U?c$q;)zc&vSw_V>nfxy6DHsm41(U-ww4gx-PfIEVpb z?|^gwL_na`n#YeUVM>&`Y~J&*i&YlV;eUCS*(iYrId9=gyNdsgbqQdAq!`dAL-zFh zz#-yK8d+>q&L?%_I)TpO;MVEk8WpOM2+X7G%?KnbRiOIPX%Nqwe3YVd37LswdHBi| z>b9WVFz)c~>T?Q1MLgKOjVC9T12C~pZY?0eMy zM8pC!*Eit^kJLU~ZkB#vInVAc@?U+nq}Llc4v07glto7bzekzFeZKjwYWD$u^$WY1 z!+>YC1+6CSZXcJsLDB0yjLr*FS3*5%&44-lVst}Tj|c+YLYi2S4TzY`^m4pnXXn@} zA(UO^ew#gZih-f2!<}(rXO2~^GT63gB>Iewltb|K*$5E|Y@!U8u8L`D(HGAzIT-8@ z4cNMk;!J*qeXkw=^W%r4lPp4HzCjbLIy0f?Hg{7I$JKpZqXQdKX)edyC+*tVmPZ5WeHIO`(tvEgAon#`6@5=p8e|uXEkT1;URiJ`)o)0B&7K2VE zu~Y&J=;`LLpdlq@r3g=#Wk9BOTf|xnUpx^6Qp1m`x+QX($FX*0dG*)&-8)hgL_nXs zgrmT^ihr>w6FZ55TYg6}b~C}7uM8e<|6TYhc%#xIp@44+7E(erIj~%V5>`_7P^w}) zzoJtt)$=n0XXah^Hhn6S2b1>Xrx+A1i?QBL#R^r}yR1ihvvY{cujO@RP3;hvup=KR zODj_#JKX$t5%L>n!vub;`E8=5J^Akx?+P|!E6U&p9<@%tc)X*axNaa@NOPk$e%tq( z067CiQ`jLX=l>H~_rW0mx*^+c&5HxKs&ql|wJ#9$$f`wycKogvJckrmUB+z2Z!T zQ}rCP%|4^_(8PtgyT~IF-r6#bKpiAPvb4@8mRRukZG(ZFvsC=@+eFFR>$xz#Ro4ed zS3_Wmzm9%I-AD_iCP!uQ8G^JH7xWIi zpVA$-IRuVEByYoiD!`WpF^o_YTBh7PZu1w36z{lnN&e{J(4ooQ$Hv={!z!p6CYkGYQh=n1M}+Iq{?<9S`t$z-yP zLB5g@xm5%DX_RAF`zCkFkuxJ;2dneEgv0Qiy0ZKrMe02jw{bb+w(SE9ETB(4B7u4$ zktO6%9iI5sVYnzK>ZV>yscwFT_x5LOY!sApHpO3LpxO^+a^w_>0LxXY&9g2jX{kq5 zcOOOIhY;4kdwg>K?%9p8Cvwa{SOLIPkrx>#95dG_727O_KrIWi8PgH;cMlJ}lN!qyPg-x4cVd_^ve zJF9F{HF2VxWs5TngzL2fM>=wrc_;B+^oa*+~1GZH{l8i;Hs0 z{IvC8L*JpVbsCKw8k@YKrJ&%ADMgo*2D^M#5kX@`izQS|?4Dx%K`c@%F)&mEwUU$k zOu{#b=m8704D0wI4q*aW{Wx|)R6TP#V#J>c5p8%XMMH}UXj zpWam0l$1~gJknEc=Z_p;LuzR}9WrdlVUWk~HGT^{3NrM-Rg_tD#!q`ZB+rD)$I^e9 zK8Zrf=HCg#r}3P)khI^25Z5NT%bJwhwJA_n@Z?jOvPSJ3j>O zUL9rRWe*ikO9R2{5L$316^|$;>E0U>8oOsWa|cyBl*IGp1tW0*OxOJv7dT zv#>PdhuCw8`(xRkwhKu+X!&e)m(@Scotu#WL9RwQ@2rNILkE< zsuQ>byh04K75IB|GC9R@B^2lc<_f2d)SNo1B^|TA$I$f2UIAcT&QZ1Ap36D>b?h!)WLwqf>`&o&f6P zPZN`uLcMPiNg$e9NwqP<^>Ll_9Rvj!NnYm)-js&SO#K1w3jr&*FSWOME0wyYfn)zjuOg4{uCa;*n zYXivF_tJMnl{Tx6x~?vas+dToS-GfA$V$yFqqiW4t?p?E(GQ^H0e5giq1W+wwQ8o* z-T84?A1L45aT(&&5+ZYw*&pBL!+W`jnATe7&lQWEhkYqPrKfc#k{+E&{N=~R<*?r8 z$Lyi+@nb-T>vt>Q0gE`k!YEU%C-wp@3`V7jgyKr@p*lit-6ta@2|6pekFlblZ85(; zJecUv710?`Nf%|B&6`MtYZG(^dPn+E%}`ZK$gWWo{vh)D$G_Mdf~eN7))FF0A%p}l zNW4J)!qkh?^V3Vw?@HZdRf{mqG2Yds&b}C6t5dz(A4f0yQg+gyv%^dm2AMJD#AFcg%croDn!#VAhmlA&MRQJsjYJcGxJ-8x@Q7SXN63 zNYgmdG=47{b$)#&Eh?0jmdeFxOJfg>$ANALD?PnM^F+mAe2{?ytll})rfhR*{H=(rsyN#Qd3d7&Ozx-?IIkXtI6!=P@qS|2j^b&4kSMf*B$8bKS%k^w9o z*=hteu92T!!u;{70K$w{LVmX^Hfpamcztx@j$|DtX0xe;tysm({Nj#9!kA!cUvCYm zK>W|FJR;KDIr`5%7U~D!(r$~2e2erC_?eFtW7^LW5e~bD<&C{jy!X=Yioz=fyWdNF zeGO!*92FTor6G&<9O8xy^iQw$_fuDZq-MzQJezP3`R{z8vd}k2e`;3GSME3pP29f`I`vAYSjZIkH4jMw*cq$B2yGSb&Gmqrpn!9FB zuXOV7Fz){tyFh&a*Fw~{f5y|NCnw$K`1qK)15!vqENV$vRcDxY?B-6Rajl?TLdlpE z1_evI)ICIR4o@sZb8VSg{s{Wd_nNu6MLPuIc3_UId?@H+vC=Ul&n!?;)Bie||G5^` z`u{wM%k|8S1U!7?0-6y_$i)18eO#TLl)JvPk-Dl|T0ugCXdLZG%=!5_B4chwtRAN( zA~Jxx9I56Xm6E7?nrb#vV{>_#*}`$eYaB-=+#_0US2<3k?E9Y=@$c3-z-v^EjHo8#YiJypRM=Mb z*OmZ-hrN97LqtS`B%j?*?qQ&2DCHudHxqEzD)t-y-nxj+<3bbQnFUzJqEfMOU`-)k z#*ey^+c_UFzFw|a7L-*~2zYRp$5tQG^!HGp@9c6kRmTmZ_YN;>%pA;gWK^uI5TLJC z-OBRf>~;dyzg-4r{)YvSlhfn!O1Gss4+#hJgaAD`#>>XeetdT1wIvkQ{xzuy$W!BT zce#Ir8vY-PB48x4org6*f&F;T4BHQYbYwFJGP9DaYiR5kD=!L z0s;b6A~{`3LfX#8rl3NHKn58dE1}l7BCbx-T#{+#&vR9_-Zki`YL#?dUBi#@uIzKq z3JgQRT-JOm0OKHl9qr%<9RuB(jg*=gz%zh?k{HRz$Ozi<8k!pmJNyLl0U$F50$vgh zj0A{waGEYLvG6zBJxuuJu3MOje0_zE%knDF6n1w{TWLMw0IbVW^!)>sc=R;QIg^7sCPQP5$K$GJem1U->qJWx}e132- zr>2{fVq@m~o8I!{Fu55tut`sm95pdxp=~K_W?=Dlv>c(W)6?~6R^?e zwPDni?I{4qucNJb4}>;ZjFuRd78K zwl@~KZoI-FaNh>_?<-gSxeT^6H3P)LKHC<|XTiZ=SGwv=&mwDgiM2#e(i+*h+KxSm zhDQJ}09HoM*ZCU~0O%x&=OzM9vq>O}m^hEka!o*ukaLKfl>4=R$p9r5Hv>1O-QbFs zn>89m%EY7jmoM9SO_e7I8Pr!;aOg_CgPVbnhmeQ1mi}yBlowh;d%MR4-Z=n>0>(t$ zY|YEy;vnVjn~}kT3?QBW((_&K4-`3$Xa@y)J2AR$w^hGf4Gav+b;Cx8+7>Sz~KyNlxZYHY;a!nc3AR2rLcX6}SG;%B!7;=%%*tx8p^tjS~#S z<=Oe}1|J+LUUDMSjX@fA@c=uWe#y%Jy~i}uBB|*h#CB%G!)*&5iDQN-&QYZS;|4Ab z4S^m>X*eB;>nbBP{k6*LO8{Wt2tO#3^~7)>6p^3#;&ZzKQX8_#c-zZ;+7w{+ z#iJ(VM?UWeQ_3k-wop&hOkcKfan#v8BE34`c%iU)k227-wF*t83C$%9?Rb*8-*mge zYrbOR>fQyW2LA3lz^ytzu(`3qWYYQFt&_vVxTpfqM!%(1U2Qyc)`g8p0!Xff6;Xw{ zE#cPn8y`Jx0DcjvQWQTg=FG{S*qvS7`#VVIN5>bF*UT=P=hNBK=l!9s=N{MEmTQJI zQm_t*HNq0AyXnBGLmav6$H5Q2-Y<}eUk~$nvYu3Q6lGPa1C1G+j)qH<7ty(N9uH}C zN91_xO=-@2mQo;)Pq{=-$c#sTBeI3=1C5j(014Uo6@YEk@u)dlwRt^F62<3oc^{(9 zwMB;hXQh;->+PV-p@9Vnh1kutHAaYiqp>LK;_R$wo;?zPOz*snu;RNvZq)6#HNgFY z4)Nx+<(Xkg1vpc>ZrHwHUgK>~1aEf>01LFL-jBNaK$56+u~2cr^LaKl465=VcnTI) zXV=*&Oo8%mcT@I2Ktf4owkf8PQ{vn6>zk)x&)uheVsHPqHnBz^pQ@pyk3f$rIeaE=x>+bWh3B=cr^^XUv>tM$;{vwm9N*|m3 z7&S0o;bbr!^|0SgHnU>dNAcyVo3sfR~ob%gg4jVVNx%%*<9cuj5Vd zOCErcedp*3;ivE=9-n)5T^$I=(Nwy{pFfdl+zYI_wTpZb-88}nNaR7c%Ff9Q1bG0?w4UdmdZ_{f-2>Hx|&?Tt*2zKkP1= z1W@&JXe%Zr*k!Awcj$ymUY?tKrfExe=qP?{9=8)~yV@wl@1{#07afnu?=9Ju(yNlDN5l%o;zuT1SX zC$D03bF5YD($S?M!f%TwNp#V{1-bxfb+$h-#0Z@0^g{m6NK}h1?f<@c0hu97(7_l& zJ$RLbq)X2$S#wq%-vE3bo7vujG5~~oDw8|3CU_^(Xp#z#xL+*?2^AUqteNOWu06M- z;@~|+aU?A1<@pt0;Wx}L5XRah75SE$mIGH4N4{s|%X)1~s)mST4T#nDm|15=IJ5C!5-Sa} z{Nlvm5#1UM4>*e@B?NTL?dB*i^@zbywm}?PoG+={zE?x^y1`2_Osq3?R=2THxFrsr_Tg!Rj2jb|R&R0{JFHl*1^J{L9&aql zTx;0N==}6_B=4rU)8%`{5Qk@ksB2u^3Gqb~5f-(vJsD*o($fWU|TP<{v32ZWhzIU7ri+zRsCjI}PIH%G*noPB*`)JkS8U&2K9a(-2RnDHchf319P_ zqmokUDJe-kw$reqDJnKp9}@sfpd0qX&C7LdVqNgF)t5>Y?9z81=+I-YOGbYHOV{l3*XZ92orqP}i>0;x0W0ZpaE z4HZeHea_cqk>6Gj@+HwUu51G($-9`I0BT}n4C?!vJGTcuuk3ejs@W-@0m-#3&yO52 zf~>e?;cWuuz^p-R;vc1EHR1p-Ig{Oth^X;tLKxSkr@Nx_YK)W*kkbmWw#~K4OlL&W z`9jn;-q-Ep9*<+cjz}TN8iqX(j|13CisAjZsm^Xz@A%55Hj_8auZ{V6f7}eIPAg!b z0q%1~g#~C1n4*PuRpFrf5%Ik0LE)EX@Z!0O~O z86IP7Q8%I%jE_QnaefDuQdMPd+v0JBLloq6C%>&oaxK1sxK2xdT(~%#JMjLwyd3t? zy_s0Wx8OpfF>W6YmUJ!%$7Fg?P-<5`=bT<%US6LsUMCqWGqvWq(NSfs24Dkvl=~F2 zA|D+qz}EuoU|#2!mP|hbtyvp{c;6KZurRk_O{=MGKy5-)%aJF8$PI^nM2U-16CkDYEUw%xIf?zm%H9d&xn{mwgcKQr&A^PzsHu&Zj<+Sgj^f3cBpXOPa# z_Tp@zr(pYED+Il={C)Yd^!^UZ$+_|%O+9Or1OsP2@4l4U(-Q^zA>-FU+Y=;8T2rB# zxGQw%7TG11g5yB)dwrF8OUx zZohmsD>cnfN5kWI&D0Q&hZYPS5nMiwUwU^zoKzkeJMU*^=M=2k@nrGCOLk<%!)&i? zZ6inCmp4i)`=i{B;n*3)*);m5J*oxRa$R%RNOXb_Md>1ZJiLeBWhZVP%x{9fO0P$c zQh9^O8eHE%bS)>4Gczqtm!THFmboyd^dc#wZSw+2V9ptz1UCO*5x#^-{0L-smL-G+ z17GJ2TBGjJ5Y0gNUH;M-ZNkcZfN_O7*uT?kqu2ne`<*H8y`^TmVoiNLd#!UWCXknK z9A|Xnxc;&+`7*j@?K0k@4OCM(3jI1}>CUr60w*7R*CeFv8aa0X477zW#<*}gz*Z(O z=*AP7sR=uaSKyA3p)GZisdp*rx7Ro?d|R?^8bhxdOqGV;geoU|C==f8Ev}wYE*#VY zbx+B0=A&7iniTLXyGa*vqI8xe$`qUC4k!XCWUf*xq|Q?B|D1$?9Y800bQ*vV(R{?K zh@XN}wBP=frb1u|!5#Kk(G(4_LNxp6>uqo2OMx=S$UaGqMM=%8oq{7!j!E}o{gPZ7 zJtNrg9zIFAgEaI#tN8e6a*{R3LVqMn4lVy36I7^c2dE<4OY8W;U}$z8JCVe-`nP&a z4I9SG(}SW4&o73CPVJr|%GHKJNvMr$EoliJGAQcV-~I!~e!EM)u)03l57D9e*`t!= zC}z_o1Qe4PXI;{SPN|8>OOKuOT1 zKe~1$E&pSWasMD($Dp;*{wHDnHw9?Z^|(Gp{{Psci6N?UFI^RO>{0oWf*I)Ey&M8` z>wc&(OH%&l*pLF^phI%WWVLH@qbf>MQ}cE0fFasT0EiB_koF%LAt9fel$YhB{)|GY zKB>85nvVZ5Kz_LY{1aQjN~VWMnG!Ts&hcMug91T^f%K|Th5Qqs%zTafGZ(vQ4e9as zZ};|10p2Ypq{)u&--Ap{2H>cio=Rm&{}%antjg{D`Wa=;RYghi??cuZgxZN0Y90k= znuYdTP5O{ z)y(PU^wir=4sgjv&dyHD%PI5(55Kv-Esxunn%YuRW9Oyf<)kvtG|Y7_Ej`^yr}1Tb zt7S<;=1WT9zqi|&g~Hhl>dc5a=9C(wTXx`p`^i+Ks{}DII_i_u4rX}m+BJ0y*Fn?V zKR)Tb&is5}CbDs=kNUet4~C}SqhYq%KFybU9=EHiT@w~I{HA08YGC#4?&29SAd%&QGylAt9GWSrsNT1zoyYey0QISYUlxVl9fA*vk9k-=P4kL1;&NYtbNg07Bxf zr@Z_9nyC!U`1LjO+_1C%pO3|Gg>O`&OtbL`3ChK$Xq~;Nv2)kN1tB3Ib_`M-)9k`% zG+c7gS5(#!BrFi<@bJD_{c9p}XIH3%xWGz<5IuinEd#^U_V)HLIrYG!v+nBZ4`+c_ zqXyf<|6u1EqJXB!pAyn@pecEP6@tG!;TLj(XII7Vvdh19r7fGG4nbFVsB6okQ-v3S zyO1FIVm#7Q62{tGtntfNP&~p2=zl!R{EmqsfX2{Y)ACUI+lz4P9Zg+ad^lPWsE5W0 zwsCN|5AX2u`{pmj@6XYn{pr~m_qoQsL-NIVld+uvf3LsX^u9*X2tR$4(JcplgauXA zRr$P58;?pYFKux;jLl%kApg0}Y!JL#aZ}K)^>lR)g|H|q?|sfK?C9ta;O7;*yF_@v zVRG^Gtg5MJW?_k-SkD0er7Wwvmihfn34n`fw_i5d^DF2E)RX%egCpGI{VHFEL~ElH z`2J8REh!!F$zaShGylFG^rx|=20=;qZ+e3mM9`n}M3MK=h5?7qr@#IU#r?u$E<4LC zy{88UQC9FN4{tYt>8a^=r>XO#uQVbbzqc;qK$scf-mA${*xw*mJ>!UoDF362U-fl$ zpNrrBa=;Y?ogs*c4OYS;y)P3q;fs~k&xuNFSfDX1`Fvhp{w&d6D~?nHFS#gk z$cDiX9stWIO^D=rq@~q&yPWHS2jtf^z|Wi~B;@C~4^$C?4GP9*`qEY2(g*w{LxPEe zH8P(Aw7+E)4?042b&rew8aY?2XsLg`p=6-lunG1mhQH_Lb__BauEJ5pf>n06&odSU zYo&Kw!t5kmsc&f+9$klqkoM&DDe$|qAiwZ*40``VbhFFp_dJ@}*Bfx}+T0i5Uo4t{ zoUm*)M?Kz2w;cUA{3k-Ex~viv7UvQ`vwDrv`4k`W8DdrN*FG+E5q>;24%AG0vHi5u z1M1`=Aok^@c3c9jmjfRj3io*wjC$jk$Zv<@X;VJ_YYL$E=ZFTqi)4k_sZ5^JDtct?i^rW=HObjfJWUwxgkGB)=ytzWYr=Pz* z1*~vzmI9^rqugvNT^eio ztheIbwP2uoecUN!tsO^oC?ytZX{oURpD#0xj~Q_0G0-Zw|BN`Tiiq<69T+%>LNVfX zgSW*&M{hQNtzJ*#;Q;|VXm~l(P6hlWm6YQ91N%S02_ttuCg&!yutgXI%^-O5_*`0p zihlhPF&WN~De{>ZfB3PY`!}}mGdh?bN9U&pL5JvJk*-$y(f5zDL|O=8HrX^iY`*`z z3IDkB#EHtWi|v9-fmuoUJa@e<)s}w$TM%Vz?VzSFdwD6P@)rdbwgP--o--1aSw+QZ z4MHJujph3Hcki}JQYVlY{rsF!l$7-SX0À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 Q%`91$l!f4Z_SU#i+2PxE(+jeJ z*v#&zc&G~6+JL?K{?VSaKDKgWOqR$Dy0%&ny$E{RmYB7LS!R+o0f8;seyW=G5FJw} z49e=t>h#P^U*;hQxsxo2^@mZSJ4z=qQA*{NSL$Gq(6fjeTgDiCaweL=6*8 z0T#vcDtGPoM6F7LfcT}k&cj7=x@?Wo+4C2K3-jFTQ-}pGgs{IuYZ}vTcaMOfVNQ`^ zf0}Ii$lt_H2b7d354|;4TGD})@XkiuEAC>Tjj*PH-|R6U7O=Fu{i?~OcbeBVh!w9^ zMY5AaKgD+^OR#ks>BHZN&9g59>mcfN%wmyXUB+a zTU3%uJ5w%zc>xqPhg5<_%nnwoN$ zj04Q?H*)Az)XR@Wceu{xa%x@O(a}*F^=jG?QqBHo!AK&+dT|`f<$UhH>}RPTsmbG` z9WzHKe_{ou8SK-Ns7xdi`bI|``X1ZuqZ~bHhw3dQt7*zKRlhrDL~JxYtiEymJgd{z zLU92=H(_1g05GQVvhVpgp$`n!WrB)2JyNrkH^V{H|^kr=k?0Q&F%I6dAGHV z_Zv|AfPmtCKXtB5sQC`iX&<8Aue>pL_dH(LH8-BNWM>p7+TWh3OG{q&6(`)>+|Zb7 zf&J`XB$)c4CC?ToulK7L4)h9*miM`i_CbaWmwVTQp!a*#4z2VghmA<+rVf1^&R@0@ zrl58Z^4IHIXB{&eD`8gvW2&#+@sTCU2xSrB-2-ZSa2hT`%Z_mX$$w9>1}i~R<$f5A zBkJN`Sc>Mp=#cSg-ky?=fsqkDrgRgH|1liHmi2M3$&vINd~o&pYAEyF{uSm1eUyhqe3&(}L#pViKx~REl2=Z1 zA+JPx+MA1~CrKvG)x#@~z(aAi`&t!d)E!Lfwn~vkqxDa`*FXnPEw|lWcc0`U3%s`7 zM8Zo|vd8mQ%VNy@#xLlO!c{zE+7p|$w%W!^fbG|Ng@g#31LYYy+BZdUtcpb2Wr*ol ze~DoTmyn>H;qCWhcYI8f@pF9q*BgH+g4~4z;0Z)fWb~cCPPyAuAs&~zH}v+>y~A}K=i9{iIze(*3J3#a zpz(D1m)%dGd)~4UGI%|1pnd%cuo}!-c)!n1ZJ}syakgH+K2NQf5*MX7n4yTYc&N1Y zI)1`z)Yoe*&wG8zcPrEcJ^xoQ4gVCY@Adzl(H{IQhY9Jc|G_8v;?AJRL#*UF4 z!~tG5UDx-e0)y-vI!ON&!Ujd1#9;>0X)DW8TAI-nuKiITBf>Af=9pr&S??YO0Wll$ zPm{2|Pl7(W1A~W<5D8MeiPKZ_{eHyj+qnB%XA$U-b9S~DbhE-@W{rtaAh7kb9dGqJvbb}svzQbQiwDe%YyY#oosn09pQvE4v%CCydb0Z*^jx@c zNE4Y=8tm{MYq#UHH1N5KV zRjr-!y$P4U`E7mO-?Nhpg^gXZV__6bii%TO6@dpNi{7uV9^kKUYE%K(AP2Qj z4Ej*bxZ2~;dcwb{6L>qlfk!!F=E;p$(kS_I(x| zXt;7Yl5P9Q{Np1cG%(u?_)(~umeh4YtHIX%{67d#0+lGKX{TUGaSTHFNJ71EvH9mF z)0QF1)YOQX;Q?mtK8Qc{I|oO#ISYwAOR7^H=}2%i=j}|F_)=K3aa^q=l@8$Zs^@bC z$Lbe93ZD}l!${IEAC0jT3LrsK?*!Db52B3*<12q3u9ni^ZQ-T;F_vjXW-t@ZjaBGf zq-1CI=V0UL`tuc|w>R4-f%y`^vaP#bcwdm^ zOzB?US5xkIP1M!PS5$?y!|Zk)9U6j7-aS0z7>ZClz(Ri8dcEfL)>cv)EsIUHH8sU- zpNWtj+rjiX#EjWVP3(mKlADSdd#eQl<6A=7d5T9-mDCtGhmQW@bg>(pu=g&MW#ksA zilq;Axxndo`jY}P(Z`2S_%b}4g`JhDMpmt=y1hKevXs(bEv#Jq7XbcYl&1K^{*97_ z8!VXfj>dxMKYmOZ5@s(2*_cfp`1 z{#mbXZUCH9`3UWggn>mW2e_bM9jJSf<#>;R5gd!cY`r>NAL^?*BNZ1@Quj4PY$(-H z)GFv|`fE)&)OLLA|D0`QGN;Yr7@)sYhKS1|Dt9=o4bphN^>>~EVjddfg`BdvJP{Fb z?EHpb8zspZ4gB0QRW|aZ*`#WQ$ECGyM*VN6BYSf@#-)UEt#~K4?-bN;>gh z5c$!caPi8t+AZIjSrZa46xC>z$CNR-KsFV7BdBWdJ>>kMMFkZZqC~~BTWYD;}ued`Dojl?`+h-Ip`YpOM$;dMyJ(B0`3XlyYk)7 z4IR}s;Pb4LP6i%6x4O<-Oiptucw$0j*BmITerx*peqXtIj9*@1mxRHicfMkbW~^sDw1cBsRK`XDUMmeJBV#KB zkHOyWs=ZL>PN0q#j4wi_xqeWrGoW19n&dU$QkRCZZ@UK{&{=`MxGEp0p@iL@n`)H& z2K4x?5m~T4|x<5_?14PZcgsPN{3np)=K{p>Up-WZIqN z7%wFy6=h}RkFCCrG|7>qNr>JtEp*9YUHhAqWsTnba0h9eWLgM#|87H5N!?tK03VDL z?q@GZ&o}U&B_W)iL}@#H)JUgG0V@h91N(2oFf`Mj^Z^DDxA@su4p! z?8-xQIxTTEAsA6Fv3C-S2b8p)h>FsZXXqutL^0SX zB@DsD#CVgu3_soquU{sZZkjP%H(_>uz1*D(4yn=b(s5^>L4SjWmZr7!DdPaY zVXeFEWL&yo43vtb)(B#x-xVx{A(l)-w~ABj?kI zwtFugOVIkN`v`RZ^0Elm66MTCR>r89Frjo%>@Erz`;X7o2+UN`n}G)_o0FN<1R_5V zh=j$laJCyV#`Ws-jw=lIFp=UQLtd}tCA6h;-@nAFgWATCBC-VqOO2V}zrcQ6@xI+` zy}56=JWV`?hGXfuDI71*3o9@0!>dX5Tzr$(%OXZPL*3MuGO5dW&HMFSa<9_CR`!iS z!IS|8%W()znldaV8f94wmL_u>Gfk5@zJ#3oSGMwF)x5H>S96F`c7=mr;`rybJc0O- zl=9NSZ0-a+;}8^bd}E)c-Z;`t!%>eT=$Y69!?9`KGA zF_l%HlKdpf_CwuMpA|US+_<;A9q%@=IC#KiiROgz?V2sj{Xk~g&By))x=ybycLUiO zaXXA|;^K@=V*Eum~Mp|8ItH(CTr5(qmbE;NixSs5?1n}BA(Ph(D{ShspGIc z=!J=SKvi@W8oye|Dz@kmt3vTBXYw3tc0*EZ_(sxiHp2fIa7os2e8$;Hh`+8oqNR5AI=r*#~{v(1M13(fv5+DATI4B=6{6Fy!f;?hEzY9=1hS zYx(^IO~MvsLh!LqQcgE6bp;#k(~?;B_Y86dnZQm^@WH0VW?ZXr1POxT7@$JVZ) zj_9D0PgicjLPsxy+QsoriIL*an2oo$qZH|0=~F~L=*hXt{Gq4{?>6(ilN;;vQ;V}K z4?*-KDee$Lgkx<#zmcGV{nsyHkc8co>{Cd?^#1U+5&Kwd{W)-7wgZWpLQBkTId&{W zez)Ozek6X6K+D3rhn$cdK3a+>T~O?a%omX6`m%=fSdcA9kD_Ma1l5zY+ZS(n^Y2bw z-#r&nMU`gDfdpW{vaoTfe}aN zf67)Of&i|9{O^9WLO)$8T^7A;J#_TQ=m+Uew!aLic?e+@EIFkWP+g)DSVz&=7HyK1+J8I*L(elf?HIUjOnr z-Uo*Ci4=J242BRUEY0WP5fV74U^V`o!Y?Efk#yJ`TwG_1^?RbckLNT;6RYP?S4ccB z+a;^3t+Koy*P$fB_}Yw7M#x|{37t|fxv&p-gxy1}fpp-QU^k(koIl}NnlQy)w02Yb zql0mRmBM2a5HxS`R&Y!O1_mM@MDW?tJi4AI+Z?%3LNAD9=H=bZOgIyJiTD#!>TlK3 zGaG+oPVEE*^|NnyT`Z?WD*%u25G~2cw|Dh7ZD)AA)utm-6hbgmT?}JH_-zaE0Py!w zMlg@JhzMysyuYQTrSK8qdqsnIE$vKc>cT!}vZ6u3fMqP;9La#V%9s2V74_Et;z!3f zyS~zG<`qu=lsN~BMe@3unm7tEOlpwvj*`|UFm0Z?qrCd5&iYumj^@+-IADgp@y7+-Y( zp9>l!Q2;Xw7|t9YTfjVWGBI7HAJ*jdOd}B4Dxxv4urQfcC{SQ}IRVz2u;WgG!0rOO z%C5LDXT&2xjpR>S?C@MsSqYatIoV&ACH$1DC)maTaPoUy9B&DQf8*I2Y=$~|k)4*C zGoj^vNpS!nVw@T~U%LI>cSN;95Faq*){!TP*;rleo*$1~ro+nmWN5ZHx3n}f<0w*rvW2X z!^gy+hr}u^>MpbYT^MHTQzpK!tKHUh?j0<3oZNTer|*diVvS#D!gVhP4P_DG5zU-U z*^~mN2Vv$9CV1a2C)d|l_=g{l76L+M1mwS=g9&UJfO))}o}C57F3>z_ix^C!AiC8 zDJX}Agiw7GYmr+q()$!<_fb@VM5o9yZPBQuLqZfF@dZxD>j()P9K7A@J+*=Na_Hp( z*a|15B+bq#De@lec0~kta9k@8h4}lErXV695)ZkQl%uFJ&!D|tLqP}2sW9K~Fmlm% z+)BVmp?z*wpPy%=r5)q$*5r6}1*(1`f1dvoml&LRkLe9;gjhB@VQX&TM_2QgoP_-`!& zHbWQfAjg1CFQK+|bn~xFeTRflN4G&uNdaCZW~ru*CxuNBmYa$EC~d;WangbMf!a}VjBGa zVF83>O*yzPHMKNZH@_u7pKk!S&b4$tmf``Vbf6Il#)rp^$NA(S`uK8_JZ6(@P1e?a zlz!#3yLQlYf5~ee6#y8pP-vxu%}OZZn7|0iCuFb(gQZV>Z(nauCpcdiO?J_a5Mg3s zR3;Fp(UX7sX* z8ZAgQbBV%GHk&<@V68Pgowr=Hl8|y-nkb2uLOvhvOx&Mx$ti0yi=e#QHfEO0KhSYAO> z$@hMF;dT1;%gMn(qseUyGsCO#cXAT>?RSW#lDx|EdXDOl z{*5HSrZanITaY9h?xtEjAQw)s08w&ItRNCkt?j*jkxUY3kpePNrNc`o?WWeczyp%t#HEB3vWFlZX{Z$3p6S1jly|M1&ez+(+*38rF3*wbv%) zDhf%g#)gGNx!SO@I7#k{dS{JB)!%P`+^dqR3XM*)$K3K=!>ZSUZ=0^?)6zhkjh)oM zUK#MD6$L&y6V^-YU_(O#mIb}%85*w0Sg7m5wO3HazT1z8_V$$x&ew48);2a}l(g+t z>=2wgxX7ahBg@Cbu2=Ob&MFRIUk2cW)Tq?gm&|XN=o>qpcBZeVr;Crn zCW#=EggJ^XB_DY|z1cL)&`N5xG4S{vl#fM3xSW?sX^3`0rQ_Le9_C85s{PzO-IjO< z&a|2<%RJYQiqvuQ>D+F)O-<%tOKk3RF}Ff6qvl{(Hm~4<-Nc43&wna-PvC22Cg$f< ziW zV`FMEaxqJ5(G7z3--1?nRP&a${ks2;d%TR(s^-l^e*P+78_iQPh2cD|KMi& z;@cY#mg(x?uX`by?vhf^^K$sszOI9bxscy4B3)n-8+(fSiA)^`3O^}2Z&TKU1iEu1 zLw`wzT_?AQ(y3v6#hIEdl z?ux9;(c;zA!Ig@oN%2R%%i5RHl$qrfw1n}?Gked0y9vN4A%5|TE%N`dVXnM|h2!Vv zlHSZ;q@CT^6iD`_Kf7B%1n(e(EKFQI0){U#HN`9SunK#G0G|8nT|+~|-ad~OohQN5 z;uFVOrn{1{m6ha|=K|Van+Pr&u>Bx(1rrze}-=_!H)~rtU-Q@^t zTsKt`5^`Rc#`moyHh{O;s1K2^O~}aP1?Xc5=ER2kMa@XxmlyT8n&*C99}iAOn?{X1yj<2x$(6hdT8Re5ZJDZ>WO*7n1$o!#3H@heoRtDQ6FR-2RzRsh`^%7d0 zo!y$Y*f)}?02qY>*$*Q7Y(TT>RC*ig_w|0}zuhUD$kychfdS);19HdMRy55lLy z`s`8;UJ4RY?qPa{fC2`ykk-@i=jCsz>`{xtl7J}z%!xptrRT_7z`C2uOHhC?k&LC~ znVei+AEdCW`t88f5}DH!lfon_uoK=RgCuoxc?uGy(<^1s(9uv*NE$$}9SS9NDz_3X4Eu35&VZEWD5uzh~bTX8*qx6F#xA$W@-xL8Q; zScoN9P?Zi2N-7JJypI=CQ#G@5h-Yn=s;U@u(g|uVo$D(qyuEa&u^hdbrJ# z?6Ht6`ZsJ=S@lX0zlI?_Lnpm7JMwX@ug3aUJqg*dwy68c6bW>)g6$|A+T>B(z<4^( z)7=*MQ4tkIl;;>2)V{bTfrpEk8PLC~P09G-vzdF>fcL$!p}juAZ-^qQAdP1TQEVU* zZ~Kg<^`|a{1r;3xIccZ!h=u)`Rav4Wyb7M38|GUMk4k()db=z&wN0idqJYj z^OBQjj?}X~)A-(Au6@lH#IVwGO2Mcn=)h`9m>>BPhF@9QgT_$X)v<({Fs^~L$k+&in-;cPIx=Sr5R7+-Nh$X-{I(IW0x zyY%JNl2dSS0cJgPFw~LLXg5T+Wjc@7?`7L)!BIlrL$)%(_&kZvUHax!1q|&(RUWTk z#or`OPw~a+=|;y!WJFnG;uxppG=J6vC(2q}hcu^1l!{x5L(hfJGD8K4=%X;s#Tz@_ z-{&$%7gwV~jacO62f2N8>PhJrnMT&Jv5WN6oSvGAIv^lL*=m0q={!OIisN;Cn03AF z;SNoau5)#i-9+{JRa|*N$|r*jTGZ5w@lN=Tb-}3)vZmS|k>K5J!&k87{&c4%)UgUh z_def*o5Ms_j}*?n<}|IfzFzX&&Y>Z4 z7^mFXU)?Ve{>?&fy5ELlAUo1zOH{p?Wdr8Ycyx?&VOH*B|7d3q&8M4+YM6R(?AI?x zLz5_9gWjb;&EU8&>Twt4J+k_H#6`cwc@!jUuuh*adPi4teNlHf&6#F57bVq%dKT8} zI}?*AB4PQjK|zNI?T;RNnyJZo>L=<3$hiJW!jqVYY1*rrsi_vl!;ONK1_L7lNa#W* zZ{TmnWRQUDKBI5}h8k_3#FF2oC@bd`%r7lXJH~>eSe_TI1pX+XC?qZp@Ce3Kq49ue z^2`$Pc=Oj<09O$O_XTm~s4qP4*Z8CC7O z+4CV?qD+#@e$9((Sp^~l?JotYI@Gk(9Ykf4Ise}E zFED1eUkjeQdiP-Hx$hCi&)r(i2}YGb>CVYdZf?;)Tv#^ zyIV6xx$paBk+QmHGZa=`L@pRGzwx<*_pjsek7u#lCMX^=va&L%Nc|AQiO5HQW~*bX zgCZ+%n)vA-qn|)}wHuT$TYh{lvy4Ki-5=ez@w|*9?T+gwX{EUmfUS1<+ptgx2BLpl zonXN}VIfc_k{~8nP(&z@#@pZxlWLGH!Nv9YaiF)ap{@@394YBQP{(YkxGsz6NwlI+ z?K=aLg_VWa_dC`g9y$pZ2d(`k=EdPzr@0QLa;{A6JC|De>y0O|&BTwVpN@+*uW$4~ z;;gJpy_2mA+R@^itu!2{QWcZF#Yr4MVnVf z`HfoBR%EzQex6AhSIN3t{7~q6&+JL5ZYYpjWKf1^#NGVccbs_pCk}A(N#anm4v<8o zck*UysO)C(HL!DVsH(3s42nF<0~8^u>|E~92^89^2z%>5+sOX$xw=N0ta4+hK5Q3( zqg}mZ`%dKS)D#XLPG5I!IbB3pDn$dJ1Y%p4QG@#HbKMma;wVw?gxJ`C;#S^L6PLd< zU6x-B&xO!WX9W>RM8k}ggLC{7Sf0=D@PGdN7Q-fn<17n$-C#Isbaer`G?H9u8O`Jz zz<*RuIvD+x6p1fv57hYUwBA>qQwHge4k@ofcb>j_0$5Mu|D`xB$|h=pE`Bjkr08cN zHM3U)KbC||Sy(wiZ_3PTx*84XG0ES@s-ESM(n@4QKQfCV8}5a#;4apVshye`h?4US z{fbA>Zxj7enTL)TC*gnqCO}xIl-MycOI5Is1e}|_Q@XsKmY`9#^x17^0e|!TeG~Rd z@abA$iLC*WjBuoUmpwz0KazOpUQJ|m_Y`XWb4UV;6V#Emfxt9Q$b?gi)>`|a1}9Y6 zSX}%on~>p#oDDqPhE;j5G^1-jTtuKMGjVimY>o?d9_#KCww#JqrP0%|amhTh=m0D& zJ97jqCz63fl$e=c>SWS*39H^sm*(iqijDcUhTGomc7F;P%NKrBN#7Oiw(2U>uA}0igrUKa26jFDY{pPb5S|GtSK!WW` zs%9QH$dvc+uHz@P1q>P+Q8}!QuxS4zCv<SRX-M(2o|K{f}F;xjLv~qEeD(pLZu&(KWFDv5wS1@32mPe-6NNT#}7NKIz;oA zP{_V{0(C70_N(xd5EFA`>!v5_7DmM z8atDN2IP+}3uY!i{*XOBycy`bKCO&CZWT5*S9S9wyWizNrM5^LFvFuzS2Qv(3NH)l zQ-a|RB|L+<3v%oF-P@e=?#p8-p{89utq}e5cUpHV%`@LbjGCo-SQ{ibs*5dPRmc!w-`FgqwZAwHI7IK46uDl@ zfK34j6#j6q4{|&@SvW>)E_g!vBpy%1SsCpogH191S14E~(Mu>aLq*$ojJ+xBJk_=~ zD_UuZ!Rsu22l}usN`a3R4Gl^MyNca47Szo+fE~pm<)z2fvHW(uq3iuL$FAePV?{jn zK2Y(VDr+X>(pYpP#oY!hc+VaO<>%+;L(Xcyz5oR*dz8j~LWCgxtt$2fxx5BoRnY?f zOkM$DPol;g=Mq_w6;$#qn@v?mCEP1n$bR%X-YT;8CxCTkL*CyWq*&gA820stqtXCr zpH&l+ZL1L=jo|*D*St``9 zl3aiW^C&Tp=r9~+BDK=5bHv4cK^H%X0je0iOao9gy{=qh7GD(92!#Ct`{44$7Mz9pEL7zk<~S z@coiFPD(G;O|8{`(+GG-x;=3nsR{A&(;1fhR|I5;1WILgVx;{4(u{;Y=Bc0N73F7W z%KV#_9c31T@W-Yl-EW-3qA+y%bl5-S{-CseY*DyAK>|9s-u?UQ>$GD2EpIX8!J=a6 z<*Az|#C{^LE!EA;n{4#@Tw;a z4}a(N>Xodw;gA7epDCIaOCNeF*H$-q)t15^+eneP&?**R90 zr#$Um=A|^rt7FN*%hI`VcR#xFpt6D>3%9oRq`Jg9zB^n?4Ppj!-{1JWam0^glZdHh z-1Zqns%mIFKUY5{J?5EV1%a7emys4CCfWS?f<_wp9W)RY;qPv+IE5{(9^jw>HCIJ7 z91-ls_podXzaV|xM87+UB`7Of`uzC3T{^g6B@3O$q*7m5X|s^w_2S^{{B+>+q-JRu zhW!xn;Lh#J!sWJ`@Zx+}!%V96INtqOt(ek*8a*c-Tc{WV-89^TjZP zIPhw4NqmQ>uR)kjYpY?VB(j}B*}MY+m4c};8Jo=1x9gz~`{*A#tlR2JbUP}aXsD^x z+AM$jb2q%+ifwexim{kC;!omKl&fY;?iLBwc%^!#mf`sa2jLa7L|_Gp%u^1UBjKESb$fAI<-O zu8_WFWCE^9I}~yZI`w+L0=UnY+g=wsAJ>xhJw4k9o(FmjkpER?{i3^1D^80kf|;DE zk(88j9b{o@TGd$@*(oYIaNQ@x7X%yyz|#ELRdFZ+By4~K4;@SR^72z`VeA|w{8cE1 z_d#>vnx>WtMTP6{-;D)rTE+6f0;Q$^xG3qI?(XR^P}ttu-q*9Tvar-&U76_xrvg%q zJ+hy)adCKiHph|Cj=(MZ@2{{V@A{fo-p)(MD|BY)?fvm2?)2>JvM=@5T0#dDaJUOW z0+`cwLZ3lulE_sw6AT0d#7PN_6wD3qLz$K3TDvETGC9xzF+YuGd3m*O-8oi}k%zU< zKdTh&>tbbAcp62G}0YBIH8C}l?H10hg-MnOeqiHmI*4qPT@4qGt?6XgxNff4q&wG$tpNdn2^H!F z)_TFsN6d5pbOwy+4dA#RWZQU;P7c{h8?PT1>N2V~UNr#4ctL_F!wT#3&_r4%M@N04 zSyL2@Jp!4pZ>2hs^j(_>>PD&vcR%I}i>FevQmCN}Ccde~~ z7Qcg7RGMjCoSxyJ9v2fL@)kkSWwN745Gj=(St&kWxV3kzfEkFzN>r@)s&8#R{!4n`(Y~D{~6G|bF6ki zVYC8-((6j?TJP?je&hXpr}{aFyHj)XugDi|CKfh244>(VsaqNw?*T1dvl>>>XBer` zmGd@kO46{7Jwp=!4G=CYw%&}7EifVa$frjX@h${v64mF=t+X2T>~?GAp!GAuu<+)k)Ii!(R&F)KLc~Cx z?%Pdtj-LT>e@;F2ORdT_8mNhZRbyMVxQr$|6KrFCa~LgXC2-rua&Wi-T9(Zs#m+_C zITP=5edeMlUkeg}VVO#SYdm+oWm0me-7gp*8&&4JyKOu>JsZYG!*SWTgTSDmEiW&= zzWeQUT71Cc^w!qnyI;Q z!Lwy)=E35_4~>fsgz!A6%!4w+hriAoV1LyAYr;uT-vT-H3eCR}Ml^;-UdEYFG|KDF3+=M>6|FAb=oXa*!Cry@0My>k{Eo_A9oWx?h}m0m|Koo43duyR~C?F8=zy7J-%UU(fokIhR29XH_m zu+L~t`fxZKLK4XrprWGGQc?-zO-XmN)s!(eh#n)uA^v%n$U39gsKa@nL|3 z|38NUknzQL-9nRk9$)6pxN!J=vY8ToXanG9DplAiK5)(kA|BUbn|Q}|j1h<#B~`<( zc6!;hr8LgjcX#Z!it6SywV^OlVbe;n3Jiy(v%4$+9ldyPbxhMrMawZyIp7&(d3b)D z@9`E&S`qY~c4Pv0c2@|nJ@>(M7C=WGb&V7zf%=9zM@Pq~+QP!Xc&Sm8Snr2g9aOaa zLh?+Yjd5SBWTlHeB`7M0s{uO3?lqTYLX+r}xY%88v_49L*dQIyrB+UguYb^f%tf#Z zIJkl9<3GD~j2&c#GKvuvNWby5JJ8Y5IXjD$ge(~rt*&cXpzUjcWP2i2UsMz~EiFlg zx*Cz(oyfAMha^}K0|^Zc`^}+DdLJE~XlrYHyaJNia4`ybO%O?aOb{TqFp0=~4UZA! za7D5Zy1+AEZ1kg!ky`e|~4r()^rgwNPM4mwul|DHI+eBD2Mkq0t4one`Agvo8ds(DZ5@ISnmOzf|4> z9w8-mP6!05Y%C?|fd1?NnHQ3lj=qnwuX`lVNeuq9ytG^pZVL4GjUodS)9q)rl#Y(| z%b~-UG|OubcemE2W^=M_|-L5C(+h7MDE0FC?i%O#` zP!&6*e3vDm(@HkfH&01TCOY9-bbrx~`C;pv(ZWH^qcYSQre3=I0KpL3o0!AmSnEFdC_m7`gN= z#2>2W*4EOR?Fj-1gORwqv}-&0tv$y~1tk=j@7gXZ3l$Um-DHuv2xLEhVzv(4E2+rC z?{j_R!&!_L4G=4{va)BH>33$G;74Hg{OeWQ+$a7QE+NCK%(Ddkq?Uw_gkoW4rUkTI z1?4KE|BRH=G(gpmm6cyQ5198D7Ze<7uHClwf#ek>sS><@2T0^0@_Kg?aF(iudPZoN z$O*{_Ba);HHX9;PQoTJS>KYpBUON}66+?aI#Ow*-A!_n!+Usj;XxR8}cefIL$7mR6 zoS(Vqv|Dhwr-v>lTW#7zp`Anr2kIN^jZN}qBv@E#0mT&Bp3#F?JuBN!5z!caV)KvH z{Q%8J3!F_)<##LH;7#%ef9KEuJp)QFu8 zRn5p)epaF^ce~$!RbtuNb!Ok#7n{Q}Fz|fOLF}R(^OjFy+So`Ew zWAaa|J4?&+C1$3^;YAL)C`?pd_C`XWf!G1)C1A)p`2%$7OI~SDz;{I4T)(gNxdr|O zjrVQ!5c#>vey}^ue2O8pm(zO-5+rP?=X4ovyM{s(`OdrqJZz~i0DbDevF*PWQFk1m zMf!qLozfYR{e=6?26Sq}&){>ui=frMI6tPP8mp|JHOM8h%76*=seq&3HtO+9j0wxr zIiBtN9mJXv6-xR)(*i!(mrGce92B{!YFd|sdT5w>WKvkOQ7jDHP~lbd9}lE&vxETX^lDoLGxa|o2_a~OZk}2;j&yn2W{p^yF@48YY|_RG0{mn()iYi_cGI!^|vZ z+BMSBwE&lpfjqgzSShmUK0lEwn%Mb-_ykyZ_~Wmu`PWh{h)HfBp0t24o0|>qIMH;U zn~?5*-dbI9D8&7h>5-D$_A_&e0|PqhnFX`XuFZz|gtEF?T-RqX!-4`vl^Yny4*gI} z697Sb+sb@r<0Q2-HH|t-uMItc;eUM;+IUGQi5RN7ifGMvev<>jWkz%bqL|=Bb(RJS z2#UhI-#Auhr?)e6wV^vGJ-Io7fq{;X49AfTT_RMuHn%qpfJn5?(Ty0L^!0YCP1474 z(Ejgj_@CWSMg~yph8O!lt^9lJZf@0U^y~BMokYy+07V?y6yhl0%~p_GPRBzHp6?5K zeS6nX+jxI><>cg`qInS(?*HYBg+)n9DmEj*mP}!aKc_rRA#8=?qBA%IcvyJ&Bg3n_ z92_ic)R0;oIz-y^??9zq5)#K$M=kI1l71QSg^t-5!%4P5Oe!h4xiQ=sf|SWh;f0Vt zg^qs=l+gonY!aIkmhv~-91J=g6eQHB1b-kHluIj$7(AhrJZ<8jZ;Pp!^%s)IM+j`3 z+#2v)eSL23&#LmfI|n-7)XtCgcD9e-es_C8;&OAh0tzoI)Ua|h%AM7v+(3k)c^t>M z#K?&fwi8~Sb^x=!`xhT%c$#EfT~*a`=}p&E7!{rF8qm*AlZ7y7MJHALAp?DLP}=GC zY6Wb>h9b#Bg0+G;(#zAmJTy+G{GV?e9AIG?!ah`^p){KQZh$}#~T3^af=lTShE8x~$GBAGwl@W6ZnA;aM8tmBG*WW|cBhk?PT zljsJ%%c14)MkH>*P)Ea?1_<2rG{C-1e;eKVX4nL%ubH{qnlh4GGc^>~#OUwN8_0RB z^v{)7Rx;?hZ3D`2Gd(>u1#NU>^tau{&Oq2+Xw-JXyDO87!NJP5x}-RYj8|D(Rm@!Z zN^Gng^gh1FRhKCRH!iis`XOC&BDrjh-W_ItMjxW{rzH$K=89iVTB9az>sQ-8o>FN6w z1r6`nnTpOi!C`OB?X61(K`ZCmiT|@iWo4<`m5=w@)KqkA{98J~D}XIQC`}i5uw$U@ zzV9KtH#RmN9A>}rKP*jfta~4vFm%=(WzY?^Z2*-ki_f0{9Nhadva{*6!UN{!=8!!H za%MgO4)-(-?MB(+Tl zYkX~@Ex?Gc5QrgP{r#Y(v&?KvJVDLGHC;x_U95;Ygk4lz>;#>)mG>_vHPzViWT2{ujhLmV&iHS7Y>HuD z!AVRe()zRwjg7UFGBtEma4>O0RPgP=Qh}<`>R1?d%V##uBR%077u)5|XDMO4M<^c^ zHSPWF0Qt3 z=8L@pV}p;}sh;Lpm6;+kEG};OWdD2}fV(Q7i&b_$SaEanFbta5@T0X8(o{9?npXc~ zGib5_L~cn)&C4mQl2R?uIGBN;bMe8bj6ss$Bj9pl=Xt`OgxFC<NQTHO&9k%54nvd8x%_|zn zzN|dRxah%{oHZ_q+(&qobpy1{IBLn;_Ji#_7(vqe<C(wDu`C zDm$BFnv&W0qcN`j2pCvkl=u0mS>EJ>g)h6gh1t>3aadRcm)j|%C@BDaJ1dsZGT4+= zo}ABu2L8wiRxLEtvzFbxx|>%f7R5}(+@XIMk@9JBS&4wacWW!ouC6QkV8c7F;sv;9 zWO_cFU-!*L^53LqMOE!84KlEGU8Vnv#{Q2(&p4)w6`C|)>+sZX(bUQ;OiH!D%!Y<) zM5l#0Sim_XU(~Cby|~f^up1$w0JxLEuWL)$oSWf3MAVnLN^rbQ6?(%&_CkOQSBVo2 z(AW+8_=Hh(&&Wit?s1?ogSYB{CT_7Myirf)DO2ZFkqJIL46$dtZ?OrWirM}8943ur z7DQ?OO}k}3>RX$73Qi1afpf&N{gMLIMbI zgZJSoZ)Kp@^WYu5+2?B^5Gy7w74Q5kV107bk!_g-ZFi z7WBRU7idBHE(z(ngDJYG6o#g@#@EZtH=`PP1pEo$>0EC53Z6YNMl{^q+#Bw{_gaq4Q2^iZf&rjZr?Al49nhkF zjnb@lQIS4CULciNsaj=gC+BjX>hlgWPeDwN%k7D%(+cpFzVwm+QW-#t{(D!6qPVa$ z*I%2dD4}4WQTuh}QzTzTo%QS6n$8k8=Kuw5?`TD3;lbI0_P`N>Tu-$@?EU|bILF{Y z{s5vgvnZ(1K$SB^gMDu9t5F^~$(QZz#FiEh{MGhY)ZK6$0Y>A@fG2F5jqm-VD5Ie; zas=FE=J8OieV++_pFVuj^2R2M3=gM+(9%lBjHo)ZO%Ns?BFd4sp#9lX^J804ata}x zODZ*dL}H(T4ahN(zNI0;TY`A-bvpARO9sD217vsGx|#f$ALybv z(#esqQTMM~kU$?ipPnF)*Fg0quEG!f>i#G3@WmqTs#^ujVqMrl2sF>eOt8zbf_^+L zr_>fk(5c4R4z{m+_stRKa;q!Oju>+KA!>Vn4HX(@EHecZ!(~L&)S*ND=eDQ{G zY^PNI3G^|6sYMi49v?DShZ!U#xx9me1&vhy{O5BKMFbpgr+dx01#?X{6pE}7)wRJd z-KE!(cy#>^u;sz7+b#dN_Yz6}TzSUHYmVm2+{@~72H)_C*YwW&?<%BCqY(4tC`IU( z?6`n@u8S2#_nlD%qi~J}`4TyOGN{i5UFs-#HY}z_G65{&2wull88avS>k1XyrlTZ2 znP!Kw^%c5`^6iAHmxwWbIw^TMi6R-3>`)fHTAKJ>7%Uvsgz}IORoKy=D8IVeQG5Ks zeDGEt(BS=bG3oOBL0edhf79b|yD7HjR3;9%$o?ttH~E4F{itE(i%4&UhJm3#6(@ai z^`M{)DKEG9nl9_qPL>3n>Qk=S&dz&w8eEB>2SKd)mY&+U-OzF~6M3nSe=T#r3K0Js zcDp)qdR~}DAXXHB9<>o-9TG!tKvT@Tl+;#;_{Ij-+*ZeOTLDHi3=WexRSgT6j>;_s z$>LiFlh9D;IJ$9iX3ryxM1#M^3#g8W7^|(ZVkQ2}f)N2q*SEU9y11kaH&?=uGKv5Y z8>C&4Mn6wv=0OsvqBCe^R9TYw5+Lz>>?RUkl+&zTpBhFw>RCc7ov-q>m$Tt8 zVnhTsr#TgIhNObvdLcoZ3t*gsT+Ph;?w{#-Kge(JNX%V$^!Yp7$nfxy82@v>fgJCk zxo83m`rd)p6H&f1N%EwPaMf2>HOal#lGhNIW#>3YE#3o^=XjpaR6|S*H40D=Eo1+a zrHomDu;>Y~lIAQXT}B#lGEaJqL)L`Tz?`EtCgPqQ z9WTFKa?F=?inN9eA#ybTF_GZEovz(@CR$0vTW&n*w(*4N@Ao5X@Llgb7n*baS3lkf6x$$`hVO<2fnyfCp-OE7< zWt*CUg_oNIPii(FbZZtR4*PGQ7e`n?^VAyA)l3<3%n8J`MlWBFpsH(A9s)v)13}JE zR82xcSDZ3|K!@Ll8Fl|a|3Hv??_j^}p;hPomBHuuOIbsM+jGUW`fG7^$N8VD zcdeuB;=<>VB$aLFI|Pp(FDlwDNk|ab)bi>}BmXNO+hbjEF;xCn4z9h*?2pqy?Wq9G zU*c`KXA%*jlRo}SW~c>vDM#Y!Uz*A-ib+F50~*twJHxBd z0GQQ2K!EAV0}e7)W@c{}KJOUZ5D?p&aLa!jnU)rp^-UF@e~<&3mf_(sOx#lrcE(@Q z{0qfXMIgaSDR<5}b3|H0vC#?3Gc#u=1X=u;r?P-Z%*)HRGca)hxWBJfpO0(huyIb- zczIu4c!YCOkVbuUe3zW z3b%4XA|Tq=Yj1WriRg!tVp_QUeV3Gyy!BqN;bKjxZs(`VB!Ip3Qot=`X`{YH=f*j= zz%fr6p@KgeJ~kGgUR({>8p2U?$qX%t6-RIB;aK3nN7+X5T(K55;hvS3ONNq@7f~hP zBXLZOt!fenoFt9<{%63xTynZ0V92%5_)Eyr=HvdcAEA9uD7qXqlj~8qWEgUmf2(jy znF|;LHs~lyzVc2H5wd&v{g^(CSoQUFh!(!CjwZ5r3yzMKO=l5Kjq3^C>_!(VI=6Rs zJa1z+ckmG?@V?M?t}{<-;b>o09aITH$Dv?i#MNGvjy2xyZtt>cR3mSvxNYQvkuSQJ z8Pk(v6a)l(&q5@4|IqfFqra^hBW%c% zc0#V?4>))HH{9CC_bo*i2kpYc!e`a}ebdj77wwv@8790At@ZewU-6lmA2p3(HQ@&4?R z+IW^lbSFd1e@0vyXF?ASZb>VJ3Xyi0;kw`Ivg*YUeLjmmO69jql3e*GC>y3Gx zNgW(u&|$+d5fyRujJtK%Smts><_z}Yeu8;0)w6Q6zt3Bo`rqz4Y`ng|-E;yFZxZ~j zv5CGUF$;nh=EkAvZs&jJ_J=#8i;0TQ{pgz$F=nY5{;T|X*+Mh`d@)IZZuG`xA3wHI z><BB-mUENpJte4YOsf0{F&M16bMC5gIbOFFG|HweAAR ztgN$W%FlcwQ&-Zb!n~p=_bCY5{-ZkJ)Ppj>1!R+Hy!q{w4bfm1fY;&u#-*rhS zxt6JbWbR977xH2Cl|iO%QOw^(r7>)fmkySETSsTTb=&&R9TlP|U_s9Om7mtGV3aHl z5>6Rt?q1Ce<=q%zA;?h%$Q@?HOy@O?j)rh4x)z%Luxw^nWv$^B2%~7nekIaI0HmPw zDiu|g<>i%FB^LFS&q0H{dicoIgiN%j{Kscd-3O=re%!f zDVIch8H;QlL$3l8y)}mL?Li{YqF9+2)kDmK@4HIG+1@`mQwZ%Di>RfL==z_>)znD@ zZ_6wOAl0RnbPPCZbc%5OT{t)9`nV6fKpRy-E#6yY@dD36v9aaLSGeerI?Z=fCd*JaS(9{`BZ#9dwOYV zN>Mxyh8g~}nHE2eje<;zi98eG^IoDA(irEtnhl_3zdbRY>NT(*oARX+|9r;lDnEB*bx%7|?q zgT`bK_hcF=b_kR)CFRXbq7~|M;AtLJ{dGbU{`>6Jjx4SGI-ECN3%borFBDtyh4~*~Hc(1s#DMw(o(6&j`~dJY;+MFLBeO3dKcMi7 zD~kc~5a!7&#jJSW7M?+HPyGS5b7ZzXgct>&ouFwXKMnbRfD!O%Hh(^?2O_c^3-|2dk(z=% zxZif_L97Cp)!#+5a$G!K*BXey>n*of-r+bS3k!P&B-cQV8L507)K^{DQTR|#mCYwf2spV9!rdct^zEc}x~B}uPPdJ@Eh=;~-}WvN6lmn?1l<1K*= zIJrdMPueX?xE8I3MKbtP^r|Y#btm`2<*}W|_Ox0E^;Ces)B5ZSyOh+4N5iT}I$&jY zdUURws+2m(P*JJ||DQ17ufkpu@*n?)!yM*p4rZXlv30iN;(C!-PA6k0mGBJllX~j1 zt`Oqs8UAcZqGB{sj79`j4xb+YGW>Km=ayH6iIKdQ_CP&gQu^k{;St&afhjD*sjc6% zd_FuI4Om$Cqr>sT!YSd>th^kg?wp@66buXus)~&b0y%k$g@r|6bSWS#d{JMC{EZ zJ0@-GnC0iA$5)?0!={YJ5ei$^B#(mgO>>J}o49K12bfuhjG=mej$z1`B?CdujE7lMwfauY?_OrAEM3BdI>p;9sj z3Y%`|7oVdp16bwz!c)i?nLlC^K8R<)<0RlDQXLQ_5@1z6G82AMYzrUvQ$To3AA=)u zb*ygSsl`q}G%P#}pfk=bCTF-t#*gx%(`+?B5%ceNOK1F`gT5zR49xF z_DQppPRIK!I(~iE%wQuWLt#r!7=>EmgwHpV$4x*u@_r`dO}(r=oOe8Q@s~tF^a;726hUQ#Ht|ix9OAkWy0s5~U#c$^R36Mn-q`7LHA4 zDA6SgdZ%MQ%7ixsV0mc}m+8~BU(T($y6Vc=a&-P|-Ry;8Ue(c&@Pfd5mj~dPru9&g z^+G}beYkYqN?fxwqQFhN2vX`(|M?HBkp+I+!Q4oeW4~2gaygf^#@7ZJ7nZKk+L+oe zn*+$3)!a<#^XtxqI=b@m;(Y-!_uzpd*U<$ko->cv*NUCjxR*}a&CVn`#1Vsz&z{O! zEe&NA;M6#=I>kE08gA+QYz;$?u%ss=$JAe2^OWtkl1R?hf{90>8|>MB+7Qc`Bv6ze zv=$c}9)G3g%1jK1^S++DySxilYszb`&MvK0^05z~yoQ6^CLhq3VPSD#1A#l!Eb`5T zsn;?UUP-(mWysUl;$T!wN!mTBoGmUm330F`D!dcdbMpQ^vg!CZm$n0ApU*hU;_Sk3 z0Vs!vaBffXZoCDFR%cvgE8ztfR+CB|cnJBo6KJihtOpj<%T30DD067?=UK@8E3QMw z&BeO+YFr%mQHH2I#3(kp2=k$=I;JGY5fU2B?dr>?48Umb%^hH*@P`zlEDb*A{&IUm zDa_ceRM)&$kuj-iN_+EvEz`YorvCG}K(PM8+FCFI&bsZ+c!u02dDBkx;4H`LrY-;T zW;%!XuBf)Q`t^v;Tae6A^2OUEKOrJkLW;fnQOGxvD^qP?+U1DS9*Y3!t2 z%6vv`DsNhF50^6@d)o~GpLf8>Q)oiB+U+1*CFz9cWl;&B)?)NC@TPi(xP1`e^SlqA zjbkaw1zgZq2NxpYnCF)8t-M~&H9`|;MdX=w9#05-78X_C$8H#Y1c)tjb8f{nTFxDh zj9e$`ym)Cyjkai9G})|t0_t}7i?tS}wvY#r_Z!~4bZll*zV!yRbj*9%OoUVV6u+1)ZPM^N5Z+M85+Cd9m-wf%)-Hs)n!# zqc=6v$@&BR3^4GKWwbQs7Z-y)UA@T2$tW~@)dK^VDS+DGaba=G8D{PpZIdn^(DfyU19Ykwu|xu7={DER9-(a}5!YK?3lllP^0Bs%sF(G-%wT6M;alrFt(b8MVjtn z?__0VR-m9|Qk39l>C^=d4)kAHrN7*Fa=Oo%N-2T1c4)*YT6X1RNM4fiTJ??#oUe;S|8ySWWiW}e8G|D+^6 z=C5j8<s|1>?2MM&M00Vt4#dBMLVbslCQJ&@Gaee&Gf{~dRbQ$(jkk)oD7EBT$+xGbP%~0% zupIt2-$JX_TElMYOcBe{%Q(gbLTW$G^$Cu3dBY3A)f9v<5egUarIj;jq0;6>yXBqt zAY-sL*bw)&tAvXEGrhI`s-^|0KTDy!j}HSxC^aQN5tVQ3WE4RL*~D94Ufft2n$<6v z9fMryp*&cgvXse1$~DM>hc5$9ngXm zVn<_HH31*DRLxu}u=Tk~#nJ43l38W)_j|g^NPT6~4b{+FD#!Ws`kG*q-r7(QqLKZ$ zwpUV7LOAvb3V>qlRranHOUoC+DqzMH zcq%PaYBIaXz4wKeCN^5q3|ON$PW7Q&oSaz|RT_{6vScLQmYLc+kg%^6Q+NIfPwiJ& zb!`3oxux~9tNw3Cml@{io1&d$3^c6Q(atA4{7*d9u9IYBWH^C$x){xu+qI!=Lc}9Z zC?_^8*>zDD<-cUKwD3eULf!?9oehM%j((lge~bV4I#~coD*|HNW}H5m)~l({QK88Q z-Dgr@Bc;7K*abt^P3G{lctA?KS`}Q2r;@{+&p|z69sQG@sfJdy)2?@aJNU|u{`h!= zdx1VpMp|~wYm+e7#2OY%q*%9|$$IwtDItwVj&oL(qOfvVubgTCx?)4`pF^h>zzG|xl zm}*f@ETZmupX<>HMDl40U(-Ew+8p;ur+FPKx0(u`PlTuzrdFJRKLbFk~4 zh;HfrqHMK`_xW0vZ@4fr_ZUWAe7;(|vxZk7P-9EdEen=&y85l|z2|6$^Y_`R$M0}`jik-i2hjmJpC=*FE>`4T_+MGPL5j9^sk{!`Qlb;6 zKYesf#BkQKyJEDSE3|n6FIf9m;PwSYn|rU|pZ1|hxDVU^d8M%; zUi*L&6yw74HZFyMRCuVaK|LG~O#RlZ${~E1aL5=ZdbD zM?&Iv>DGtY^j*qtm-k9SRzx&Hxw0&v=SgHLb((`RUDQRxvuH5j~@^8)GxL)8N_VPK>4TLY6DTyavni7B1s4sfG?OqMEq*7KXh>-NR*6vf)>q1?t&oMhr+VaJ6o)N2<-Ygw6u!0HcyLN`GT*==9Wt<1;hGzl zJM9M#RQPzD7kj~3BwVZ$@jdsPaMu|}0Si9%*#%~G2gzEF(`1p@sgVJKWrO!Vl2vN6 zC-#w>v1K{M#Is{viX8?yNTvHRI1bwtSt0ZSEsYc$Gp?P0k!xtzlhFE4S=>LD z_pm7-T$Bu6-(Oxg);bJaK1!vBu-niqxgGaSWxgH0bFqONPd7l)f`I@`OSoFw9MhA# zw0JknFIc9`d^;h%WpOD9ZnrZCSj|LE4d;sv+c%L|smz{S-n%IKsp%&vG`O9b0nJ5V zWpXQ$&WRf>dZK|uqBg4?PP~=60I3lMZK2hRD~gPod>;EI{sx=<#^MN$UIEhvb#;M$vFRSWpEv4tgDNaoP3z>ryY?wS0~Wd9Zl= z=Tjka{ZnpyFy;V{-|05&vtQSm?4vcvK6$lrQ$k=5xH372zzg+GR@(@}b z{gE*zCQ;u}U)y40ruWb!u8T1AK@iCYc`*#x%q&qJ1z=B_n^}HG18+RO<_4}{W{yUS zjnOkY8N9RdIMIu!$^O>61~v}uR#*HL_!2a$u$&c_!}`O;#kUN6P&Xh?|6oSJUKcBd za8tBRDn^0(c$e9sn2X}{qsiR7D7XHHOic-SpM~jM`t;Lr3D9r=`D;RA`s?wc z#f5jMLrqB=D;XOvht03x34SvRYkKN+d^D6#2&qtougL~FZP#}mX#<)`N6Bhw$cf|W z=4It-@j5{rB8?gjAIFc7P|;9au19-c+j+@a@2#np)|O|*Q@KX=@(;L*FR6KK58;Lw zOa1bep06#mtjcjENl^~E`fJmAtGVyngFGly#NJxM4`gwH^Ym2>vZyCIpYup~1ztq$~+YJ=E+-NFXp;jqTcoCN0^kFv(f8+F)Y{NzWJ3 z6dW7H=YAn7K3^L6PJpN~mVGU6LQt_ecDck)ABE>I^Xr7+)Z=Qi)W%k$&Gno$100qc z1iIBCb`T*a-*hHHMkBOZ=}MRs{}cC$hQ{e&msT;s0}PyjEWFPL>2HDjPii_k47l@F zi;F8OEMi8#sA5Xo6sL6_7}Jx}QbaM<-?uWYHkzMTe9pK}^@x*$2cD%yxQvcVA$g2I zV7sxJ49kc5edrlFs|v2+zXbJrOMhXp&tVGs7~no8P^p4pF5FdM;uke*co2Z zUym2%C@D{T0PLHFR(DmB0&|8eEG`}ge(c_7HT!bfYSdvz=0wJIP1v?3gIh-@TcN{q zOA}?V8_3Qa)v5{2W?O6y#)1SUNET=lRFB3ry%gMgL=>x>!c6b(D< z2_A7zeP$M6NZ5eFvtKg5!ha8&nHjtPOvZTIdF!X02vb;DmvF9Sy4lJI8u&mcq>V~$ z#R4CKqP;sg(&ou3s%TGbhSfkUcm!r)$(Z^eDs~D|)Qhe1tj2|f6W@jT+Ea|;DxiQ3 z0b&s3MMB1ua1$}Fe5z}jT~t)mQX*;1IWRbeInWyJHgYhk)B2ID7jd3BOt-C?&)L5^ zaMf#bjCbZjUpRCwh#k>8fDl4JR$@W`EE{4-8oEO<Bcp?D%bzmHrKsu)?$b@8Vq#oRX*QV0oFn86_b;so zq%s4DQ!8^nd2~}bQH&4MlElBlf`WtlQER-msQ=D)t z2K7s2bdcAY*3egaxLpYR)9$tIw3}OcBBtb%AX?3M&F`G${S?wFzu5F!=4XeX0)pqp zHn13=#uo_}?e{I|me$g=BOQ}bZ2ME>Sjlx{(aNN0=|oMh;9dt-wozh^z&<;q5VOP& z*?j+$ce_8AsO3DQTN?9b0R1{&|{5lrN!cl}g95XNGSgy;w6} z)MSY9?kcV{p5pf<0a>fvvzv3Kd95$FzH~EVTm?BvlVwhgY~{Hyc8Q;9%)G3!)Af8T z!wcf=&c&y;z1(T;_+|DMFua|4@9oPg_BI}$qe?($M%Kp^x@DLbOnR-bGqgh}+%fvmoX$xGw=-hxnXuPQtf z&}Ib0FQLX7N-Kvz@AkV0`;mZu@j-a76m1jY!eqrXDUs_T%CPWC9H(7FQ0Ng;$ zi&2-jAS(#h0aRoXlCUq7N#jAB?rRsHy&O&)W}!M?2RIL|M8sv!)+X zS>U?;YYEt~aHlcnbGJEtTe&}v0sVXw#ii-74NP{wXF*SfqlyL|5p{x*7IxFS3l^3w z`*F2$8cBTc3HfrY1kVghLr^4BMVuGVUJ#KeBrUtl0;23oZV00G-ON1mi=r%XY1y8J zlQgldVE0d$5ca6`G0vobW!rMP8Aj+Va|D?xtO#jWHQ9jMU@7q|WA5~L^E<oW6XePoUt!w2)(HU!O1Hy4-If6Fq@@YLdtvPS)Eaz=lf z{-8JwIr?JSV&0vX8!PRXWTk{%v%!jzFF71lsOWLEQnjFK2>n4m4Q-MTONnT4l`>Sh zI#9h#QYOvo*4y96fhBuJlp$ZRiivCMk9T@87~CJDooE01){%pQ?HYC;X~;iZ zb-lctuCYSL%FKNCO&mlqx+hG&J=em6)WCb#5H!kjaC7=Ic z=fcUwdD?ZlzOli6hGMVD1=objQ+CnVJ^nas#jz^%fa%#yKX(18I50EGai`#YO3ugg z`XSME9ivPmvJ2=J@V?u#G_zWyfyLcWzszAOEzMffS{mAh>hutc;D$o4q)(Ysn#j=c z-g|KayVB$aqemKq|5ls%GU+Y53X$TC>{}WAA(sah+tn~1i8V8J4%VI=Gyb|UP?f5? zyUem13SzI<=4E6u++v=YY^kHnI0_wSV%GV(pGBwo{HIEh9h8Q_sE6~YVX#z?oMekY zLS;u^_dr1ET5P5xk#-WWeCC)g4N$8H~50;Epf_-3&0@PwF=7i zVelM&4p-l=hJ{M0Q2?_*rp>g`E`}dMl5{qePM{9zooh2CR?rCq=gTZkrWT(&0?UkF zDW&Z8<>^~#Dx*)ADt}o9HW@RHfK;=-T6{Xkd9(3EsX7NmZi&LD6 zupQybARxz`B8Rvj{pgZxWU%W{TR+v}mPV?-4VUnJFE{!r>e}^-ZODn{mq^%g8rBhuqp-)04CAs zdpW(asgg8hsE!Q+qrPbSj?>h1FpdUy#`frh<}kg zV2+yOU&RN~vdWx=BtFx8qPqA7#`eOz!KfFKDFo1RUK9sX=9>hjCYVWVbE^B%oRKp@ zAk}6sr(^p`qJg}+<8fm7Y}H#$|GO`3h%t2(fJGW`)=jd}?|tjNf5OJ13zgo@*ZpaB zBn%oF6yPuaVBGe#+Qb;dQ@bBQ-6?&naMq)0a@YjXBSwHXp!_Sl`hqpTI87EPIz9ha z>?BgXbdc;yKNGm_#$yiuv$c~{+oi>QdHdDb!_dm?W)%MhG37a2XW+)&+m-e5VByQv zINugAf7Wh;;WlBvpPhV2C|(bF95}RaBLAcRqF&0&3vaPnGm~L`*>h<-tK<@`uquTeAngIwZKfHI*YuQ)>lUp!W1&yHZz7BL$C)+r5zGh(iRjxM)1h$}Ig67CNEg7& zRR_=(z?$Db8%Bh{!?Cl0ZsWA9dfwVAZQb_3#0g$6ozkfCFF*I3r+!!~Z@D4LCxV&g z;9K0oQ7Q>d+}noJc_YOs4vMC{jsd6Do&Mk}f&0u#Q;Nz?+4qwJj9eYOD;piVO@DP; z+-m!Wv=gD*G4IBPkNEzAX?-+?ni#|+WO+;I9@Abp7<3>U=Y3yuP3AomlxlL?^=g}~ zfeKV;6HEm5*wMDjP(&e{z z4&-rozls?TI8~8Lx3+}7bVEsw5c=GB@yvV}vI67nO)3ZOu|k+8n^Omw8z&2ky`$UD zLCD41XOwNSKgO$v^I%YK>VpEANNwNW8G7+ZD9nTH@ARl+B}x1$X|WHNM98;5lXh|c zniR`VLHC?Dzpk4CP#gmJ45q)Kqk*Ht+3miwauY!E%4C0A_Qt9~;gjAwe)N}9<4 zRak^`S|*&0xMRdo^6NfK=L!p?k%!B`SQWOE5s$21!3A*ton%Sq#sIUEu|Z#Lcw~42 z2B72U`g+pn#}maITMs;u;7r#PdYGOe^u;6Nj}0!4)#(c+vc*klBbpS+I9hUAX0EWO z0>ke=B3-P8A~sZ&s4jLVbgq;5^wK*RnT?^zL*IuoEB3#oWH4LGLz&fa+90VhRrmB# zG9nb5#p~Pqz!z)YCop}uOd#T9w>g;n*rc=mcJV6wsTy-He&iArBDpg%{hC-Gj@y*S z@+Vi-gdEH|mIN+p4V4A@mqMJ5*nq{tnFyrBLnT6tF?5h6?&T23DW*M#a-%~}0=}z1 z(Xl(VrUU<8Ya^u>fj|zmVUZeg(G=zl2|P2(PHj`fX-P&;2#dsYBUCFs+k}XUip%OO zcQlQy0jo;pc(%UX^>l~nOCCA=2j6XIG`G(8ezn1PoCt8%PFn)LF8O5H`ugo%wP!1; z;xWi+YiiI;$1xFCXy0Jw)+Qvr#zw~nxMGeg2S9mLWL=<;;XUtC^H;yme*CG<9W~bEJN-n zVxX(>K_#XLRG}j2%kIN*Rxhn!Hn89}hZu%eU^4nu25;AKR629fG;&wS!ru}tQ*}s$ zT%K@x6(l|xXCYvvu3|JJJ2}o-ZHx4)?u+dJ)&TLXbUu|T103omV6|7|`c_AVGCcd( z7PlHO4h1p3$TmwOL8f(D4a;=ul~%#|T<+u*1-?)vC#LKCu;oe?Iw|=vEY8~-kKOiz1&%7O#6oJWvpCR$)XTWyEO1wPLy#mrN&8>~+l^L(XR13DKK){{Lb>)6Lc<+%+IZh9 zKOmZow^#O6)&`M|)M*e)bRNjUvVoQQ$yja{n|8X-Cn)7ru}#vn)GZr;NJ9C8jq`H+ zFy~=5cKX^d-vf~W_Tp5Mw~N27mJPFNoo_Lpmi1;l0|pC!LFtG8qUo6KH2pq7M$s^! zXUQ}~og1gA8&_N%VSA;+!SsBI`r~_9uRrD&2iyueiY_|86&f2g#4}2}^6;PWop0h zb%%gezUmKmg1@?hWh1HJnjUz6_o)EexErs3oXeT>x}{JYnR->}@hh6T$ z1sz8;W(-?}MQVc2CCsF=iyQ z_6PU;`!)9BVAD`Ra8C^6Z{nxz3dk&-?}%E^jywZ2QMF$&bAF=ZGRnkQt?W<{z&N*|m*EmQ1epy3L?UdP5#DK__>-u> zZxi-++n_;rf%6Rz^eAa>-1GMyqDXS}|M5e0Th=?ot>-yqFTlv<;En8j0!mHde8M$e z@bCZo{jZXk$rmy16?W>P7A0a(I0&D`4SFx|BCmA}KO}&@LK7l63Mim!?>*uC`{Vy= zz6H`7n^04pOJZN9Ielf%;?(#-(&d2qEZ#EbuMT4z#rD_8{uo~yJp}5e-ktrA0qNaj z81^=&+vYiMD;P>N-~At8XD^J2jl1U3=m`_f3%8RI37t~k^W@F{pwt|!oJ`0 z_WxT4B!-I~y%VZhX6#?H`p>T&v6LjfH3q1WcvOG)_Gh2xHSiK7yp~(P{;>T29iPr1 zMzp}!s$el>%zwV`j|Z0}D2nI|HrrY1|8`Vi0P5(|qHs=7Xh$4Hhk2sQtfEZ?{R6e6 zvf)3Yp;L!waUFP**sRU8Nj`huizAATHR5OfEOtNQReCOj;Bpy@xQ(&VV=Y2U`g(V{ zoES0nMcVA_oB|J}=YYzRf@XIUlMY37`za7L5YoX5?@(8tmz!^FxDTqU5)t{GFIE4P zS9%`xuT=z^_w!l|fo~!rVxpq`NT|plHlNRrEBhgwCi=tb2@w(Aua68@auL>RZPm3! zS&fxm!jp57ndMDe-Z4R6>){%?oI;-|a zd7XO?Td&&zFv!gKAeIjR-u$}^_tSpd`v9?Tq8p2p9q-pB*TNLoxv1Da(jbJNRxjh! zYW}b_zk&_Dw46Nkk<0Fb-k3pP{k1?pL*ETSqcv8RFxd@Oc$V@&D z2#8KkajfsRXQ&m^^Ay=gq4Fswd^_+<17;j<7xsn!z1K!a8LP>H1;=vwSwZ}@2xjFu zqpIw5GuKiKF;iBSzdxi0rHlVGaSswdXU;h{IndvcxYg>PvCL2y6Cj(J{%&L6i%lW>Y>yY z`J?_ha{b=wFw#7UA#GVv^U~b=`0V-A`<@+?kd5?>rZlR`p|E zJvk#WMG}uEyiAiPGb!^;)$7DsPrS)?_mUR&o9FS5c9*U2Zed~nU~O-1)=w{}UT4mQ zqQZmj#0W2B|2c1lBY*RCKd|w(UzxY}seTgB@ze22$w?x^!-s~2xxSoOqm?#Pw-O%S z@O$0yuhO@2a!h=4I_~3tE%i>1Ntm6Vu6AGd#aCtUK122Pw(D}=n+aWirfv_E-ir4= z%JVPZJiFt5JN*W#{H^csDBgZke%JmyR6C4=IA3~pc=Wt=UXXrLdXN`i;}9X0h@@c^ ztoiagYT^I21{~i4(&$s=JK>W%S-CQLwWsmd-FAH@3~Nt3JOUkFj8{jOY0A7@kEe1^ z>W^F>$^1n3>9J`j3-bGV`-xxgA?*T#0-bB>>S_V7u+8eh@r`<-70WNu>#xPRJ%{vs zq)c=GIx4o)smAK|%X#k?;@2y01r067lc78f_A(46`Qd1yBV3xw|0oHbW2lVxz5#iK zwM7@(sIPt`2og!4#7DPvDhKV4d)(!%H&%|yqS8un{nORV)~rMQBHxme4NfrmT&!pV zAm^yJe#Q}vc8f_Xkwaf5M0R$1IcamagEA>uY7CC~IUcuP;ji}^p2@%6yVIED-SBlLFrByI01-Lc)ik+{uLqVl=RZAmW8Wec8=_8H>*K!#f8{5wH2yF+aRbw`qIuXryc7LDR zRVzaAc6Ihf%yYcObv!IPrO8*ZE0O`F% zc3)9!36Z6%Cv`ZHkiaJ!k#RHu@c9P!yv+hoC=igxe(Gl+pW7RC%YaFLhUa#Ue$rT` zdMy{RFq%>3W9qNB*XDN6rS;UL*){sso20gvVo>Fp%c7#T)2O!t)OEKr9F&%41O_Rt z+ulubV(*Y&kArVd)Ael^h}?HTN)c^i_hry+aef|v#G^Z_Zf;Gk7nAF+r`Fm$&U?Y@Z~7LW513*_MZ{cN_1A0}jL51! zqY$sD4$I#n8XNMZdSii(s((SrpR%eUxd@sAgP*Ly#xzV(6T^XbtI10xPpGV!~&ZL*^@MRmgX!GMhp_RxNJ zc&rRWDYu^=-@hvIx0ZZHR}(?RV0`f!;l5)h8YSz8M-63udby}OKi<|7TjXrSO`6bh zWS#Bq7G_4^CHk_9{r`49ny(?qa|=B+kBCal-{rBq=82oMSMu%AZ8?AGUyS;vh)H}! z9V(xe+|9|BXokAxy>Ms1{0Zd1B85>kN3w96jOvr_=JgQM+nF$cB^O5hVs?Azs%9$ ze@0V1ue}cX24!7GOvslA;3{6{)0AMnBb9|Q!11Xod1W#NdSmm3B}e?)WqVbQe0 zNsz3DN8E;YRFU}*gvo{5h{8lhM4G%Gs^Y3aoqG?I*j}^ET*mo9_{s8FXCz+gPpg3w zgp{w-h+G_>T*-Y@-^r)ai?$w5`x{_*%FG>YOK0e`?BpiT+62Vv*FEDMXKegDo2MAre@kKSey{w=! z{t8j3oFn9Q7Jn^6(V+IJnbeZG7X544@1aEtq(X{(`=2F~@eKk)V*IR9bsY4=sk{J8 z{nOQC`Ckj5f)1Xi%RPE0qmphM%F&Dl^FCD-`Qb%LiKWez9tTk^BRuq7wt7IYm;nhlYUgR52mLS0zq@5dyf0kRzzRbika51wn zv2l`8+3GZu7q{En80ZX|Q2=1fnC}%>gW^2R%s%qcR2#fx{K~&vu4VW4$9ZY%FRgXa z3Z-7K2RT)HcA$hDB+~=TBK|szdHA7-#7G`qbagka?PdS8=?+Ni+mF+)$Fc}ibtKhr)1+d{) zj`r+-#1ZQY8vH&PfkIYuZ~T=-W6UCQn%nqM+SJ#w&Kp@qf2i`Y_l_euHyB-letux!d|R~$ykSk+Xk%KMpHT~A1=i#ko-MHYjZvz^l^rl@1+L|zPx;T867BhzIRUUZij zIbUljnR|q?(}4|T%5YgB+SBW6$yuS}}oaI@^Ym#pEh^z6M*54ed!4fxR>@ z9F(c(BL>MiSvR>PJDyK?yg>nd>Sp@&lBNC8)E}OQKlbG|rVFm`^?hv-6v)Ik4hAE4 zf!WH++T?}Qnw8x}8l4p7d;9WLh^yNTASNXQO2Z#%J9!ZSbcboOR{nMc)f~O6|Dld2-`~~=NDT+vdC6~%bg>{Xlv{5^`*-Kf)OT?t7!MUZabkAv3R*GJ`o_1mP zdsu{5<^Aks)6~&kSbV^BWO03;Xg_J$SFRsY=4G;vR7JEje1^hndkuvy4qu$TVX1N| zqC;YDnkP&YVweotwcPbxEL_Ytzdz2Uh6ODjWcsB!7BkORd^BC*7K_}yF>Kf@9nowx z>RqZU+nedRE(}TTjPY7p;hosMMr3YGF`qMd=X6^a19PRMK6-;(%syW~rviw#r7w{f z)yk}IY&liY7jLyU`^@}>eb+iXN;0>Wkhhe*xa_-p1Zj$iu(pxc7ZE^HSy4_~)g~Kk z*I*&?->Sv8pSt4U`%TokNWvdBA)3HD#;yLPID(`m&zFqrT;M_>N7^xceENGL!U%+@ zH7y5{PfV@N?QsBF78UCu1|lNj&WLU&7ZZ;BjGgEr|p1JfduO(j!Q+=En&aV)f& z$!9Rd1V2sb^=$mSr zMpaM`4^nYcu~kh^%`m}Fs)p|@Xy`WY;_m?>Iua5lmeQ1Vw&uE$+A4g?-k%DBKfe1* zLF`HiVCU|-8O$=EyFfruQMK0pD!2Hm6cIKs{1LPdPk|>L*S?V<;E#FB#^PeZxIMvv zL9JC+Cp-68bkxb3Y&aJE4lE%9k`m%nvvn#)c?Jd4M)9+2EnmHS0TGupjGS%Rt<8Zy zT|i;5fdaR~&SRC~09<2cC6$?4l`G7T$1}A#AxtHT<)*N(>gR@K@5Jo~Ck-9|2Q0VZ(W| z^9tNQ5W_I_;zCrM562qWF{dYuRBl7x9nwyIb!i9;3LxpQ+2Qtl!A0))bv1Q6e`!Cb z%C1aOP;oR<`$dbUJtQwY@iQ~m&_2H7fyN87Dg8R9yz62S=g%Jr!X8WsGR5R}o5o3T zjTn|HUp*slBnG~yi0vBf=vIe?h9M&}k(Ji$^`$>D`{0lFiAPFo)_lhQOKp)r_=3Ds z5T+&?P$D`g;HttJmh#@Jb{=2d6vaF&FvxFm8+I^N`TC*h&B$Pc5!&n*{3-%uDt)Lp z8cLg8{jFJUi3vK?rl#2^rui3=(o@3;gBomLrPl-ybiV1aqRH7>YRUGb+5e(Io<+9@ z@0?g$4HF>qAzG%h!oxix#61;9!Yyx){v5#{Fmu%)93&pRASXK@kg4-r87}0n+b4KS zGOl7&HaIwtBVr+FRZq=FMZ-r0-Z;CUZ5_Dlpheqm(8brF3HRd=2(U6!sS^zl)vW=C zKxSn9J`qoZ^m)NgBC6#OcwFO&Vv6L%Sin7vPahX_dj5{j-aGv+9dM1;jJAb_Nzg#n zMRwp~r-?9}4HNWurCK5_J#s*J&?jH+T{v&M|3fv_>0f6U0yuoGcve0S**OndhZeHE ztbt3{!~vQS0rnaRe8_~)MKCxQk;zjXkpaQ_;ye=v9~vRLzIOBu!YTgI$`N{|yiIIkT^FA*s z%sY`cZ;Ly(R&j{%f)p@#J{PcALij+vGbw4u>h*%-40^q$Pu2VyG>~nnQfbNppxP2x zLU@>sV|FwE*9WsVgOf~2)+=wts!*t2f#B;S!gKc8`5Z`H_vcG=Ivokwb263kgl}}# zACwA%-rGI4{|z<3A?(Gd<$sF2BZVNV;DOsX4vbpKBD6-=^tG8s+Ew58KgKf)*kyM~ z4Ga#<@rJumQE^{Ic&8I|6B3<&%cU||p$Hd;;zZE{tM9qRetx%gQjIe#$Ff3v_Zvd2=+7JwcCQ&iJD!t4W9nhTW+nodHGQBwxM3_@s94Y~cG;!f4Ohc+5 zvtcTojRtHkEqHer8 z)eM{JUhXc&Aee$+F=OKfc`!{$R;!irTxwSWz6ob6Qlua**YJoTg0aH%+9wA5LH6BX zu=mtdEhUFL*Kw$lfhU(D|`4=NvTzhZNsA4AYtYJIAlv<0*||3oy| zNmVLp3;WwG$iocoEW{l3Ct1k}-gnNlsDLS`-QRe;@06^-trx_BKuW61glnc3hXy7B z*Wk9#qX2Z_M8(Ec85R*2bH1&`6h!fzSy}XPHJI9`Bw({LsQok>0B20Vzxm?;Xu4m@ zm+T3*DNEN(yNfgOnBo(|%XEqc20{WqH70mUt{Sy%(K!Wgdm7@iV!%~4)V`7>M{jAL z;fCsy>6=38HiY5}D!{RA9cF36;rTw~l{Nuy& zVJUADg%&h2@K`WFg*OfyFLaLo*yP4tSY}-q?6Os&3hv?JyhxwtX0pUex_c+INaN%W435YTrVVkW}+MGAf%M*MMcB z0L=o&${B9Wxrc|*u*uJYJL)0SkTasAH0l99OD8^s_@ooNE~%sEwmjLy#{KDfL>?Xg z;JpP^9l@5Wls==is@YI#S?XO`P}Yz~8$6JH`l)nR0MMO?oIm!H1X)M0j&rLw`ma#8wvNf!^Uao;%a+yK)RkSdgG^B-8QHPLO7?mkue`YzM4|_aErau zlyqgj@mzn=suW9PcneG~K%?E-Z0H051vxMZ=TjJ+hmE61Iml1Ox@eX2 z`p?oE!H5oDr9-p?(J&*_9nniC%v2<2HpKe2;$hLTmVJ+yZP1!65fTl{0=g6e(ZjL4 zh_Lp;c{+4ev(SSwmnmd>65msPy{LVaa8iwR;(ukJwyS+Vj^ zISA+=X9-wqr*Ws;lA=Lp<{qf_5osC8%1+3s58`6$6pxFkz2aJNhxn&_zx#d5QR-7DUyqm1VOM_UTK@6KpiqLzzsxTh)l8>@~`;j(ue=}Zm zOnD&dT@4H3s`U~(5AWT_f4$3hl#Ivm-s=W`P)Una0u>MtNtJDHi>EEwiAk0{09si`-Hf-VOFntYrCub|pY{#H>wf3MI#DbQ@x>s~hbxd;&y-IL^8HC5Z7YaWAZp0Tf90qCft@P|oOT*Cfai zIk`LWH6y@^^YgOrw{?m6lG1%Evtj*DLhmTuZ~J@tK&1A?!a*T5MUOSs`|r2EDc%tb zozE*8oEw>8k%JK_NU3SbB2>I9()z~3Q*+hAJ_k5NQPe%}nCA{piVo`66rX@K+MoW$ z$OXUMWwGPGFKy^9kMRy9z?VCFP9}nCLxZR>x6(V7O9a2sjoNC%tx`O@p8)s>3R;Qe#)G z>R8<$XXF9O4FI_Ng6GzR7ji=Km?HEn1yaFIQt2EmvtB)n^CxOCsweK?ez*Qn2*Bza zHfG(>pWZz+7$|H7k}R>Vt}cXmoJb_p^ykZg`+JklrpRMtE%%r8Z`6Mjm>X z3kMSJ(s9ln1jr(Z_W?ZtxdxfmRn67*E;eBOjXe<~7nMvDXiXnjc@ZOLRwpykQiDuV zlh3KBDC^nSS=ncrd7%#M@{CI*WF#FMR}NDa$;rDfE6M$r8zf?uEu?b9D5+Ag&X@gX*G*RFif1HVt8F5Ng{nZcS0?h^L$&9o$CHo zLcBjD=(+<@c-Z%~HuLo%R_J$z^^EV;Q5^FhEEbk~iVRC9Pp0q}zQa7am3H*LW_9{X z8_S<^-{a9c;m8q+hdS2O=H?oTh=~UW1@%%=sHm>=r3GG?kzy_V59fW}f~lri3O>93xKY5&^;fN+t7tD{f-K1{)bvaGN}Gf|DR1e&#x(tSqFkFpN77#N@WF z618OqRxo^W2~n#B@BqHJHe+@AV{8jE>#;;2p>7uhV-lXamgzVPTi%2vxWaSH2L@lk z-~y60Ww3XO(*G6GAEH826Y&lB43CW5YsIp#?tELEV^!a*vl;}t3qCS7YHn>wbqXQv z4=Snw*Ecb>Ffk5e#qTvNyyhkvoVmM0wG#WVVP`DF3iV)%T(!+r5#=Za%u@SU6_*mv zvT459%e@Us`5O!iJ1Ie$mDRes%Bz)*wM#Mgk4xuoj01%MVmx~wvR;DMa1YM9uSU7q zu<@{c{YZ(rb>4ie?Jz8rRMpYnVJcO$nK&2(Fd~tY3x}j6_C1Dt&;;JH%_t{nHw#&C zk+J6*8eM?sVU$kH1z*nP5Xv3JFJBxygfRLjS03Q#GCk5U<<$ZBKb~6=9YKh) zmM&Su*YjK_y$RAbHr-tzq3-h{eNXg{11dBv{A_G|M8$H>#@yz?A)4ZPnwMK!n4ei2 zx^>?K4RxY_ zKimIjU6P?mY?#swbk1O^_hJ|E?Zt8NafIu?}V6;&3u zI(8oIVHN*tcl_DgILmJ$wT-?_E!B*cmhl5=3dFma`B|b_+P@EqzmAI@co0nj<#w1& z>GfLV`k$eIVrNEfj5QP^mGu8VpY;2A!}PZ^KD93^ufSP&gjlZzUK_rKd7@EbwM zF8uLLhIV4y!q MQ8|$^AsxT}19}+I_y7O^ literal 0 HcmV?d00001 diff --git a/jfrog-applications/SUMMARY.md b/jfrog-applications/SUMMARY.md index e7493bf..d7447ed 100644 --- a/jfrog-applications/SUMMARY.md +++ b/jfrog-applications/SUMMARY.md @@ -66,19 +66,24 @@ * [Supported Technologies](jfrog-applications/frogbot/supported-technologies.md) * [Setup](frogbot/setup-frogbot.md) * [Frogbot Configuration](frogbot/frogbot-configuration.md) - * [Setup Frogbot Using GitHub Actions](frogbot/setup-frogbot-using-github-actions.md) + * [Setup Frogbot Using GitHub Actions](jfrog-applications/frogbot/setup-frogbot/setup-frogbot-using-github-actions/README.md) + * [OIDC Authentication](jfrog-applications/frogbot/setup-frogbot/setup-frogbot-using-github-actions/oidc-authentication.md) + * [Scan Git Repository Full Template](jfrog-applications/frogbot/setup-frogbot/setup-frogbot-using-github-actions/scan-git-repository-full-template.md) + * [Scan Pull Request Full Template](jfrog-applications/frogbot/setup-frogbot/setup-frogbot-using-github-actions/scan-pull-request-full-template.md) * [Setup Frogbot Using Jenkins](frogbot/setup-frogbot-using-jenkins.md) * [Setup Frogbot Using JFrog Pipelines](frogbot/setup-frogbot-using-jfrog-pipelines.md) - * [Setup Frogbot Using GitLab CI](frogbot/setup-frogbot-using-gitlab-ci.md) + * [Setup Frogbot Using GitLab CI](jfrog-applications/frogbot/setup-frogbot/setup-frogbot-using-gitlab-ci/README.md) + * [GitLab Full Template](jfrog-applications/frogbot/setup-frogbot/setup-frogbot-using-gitlab-ci/gitlab-full-template.md) * [Setup Frogbot Using Azure Pipelines](frogbot/setup-frogbot-using-azure-pipelines.md) - * [Scan Pull Requests](jfrog-applications/frogbot/scan-pull-requests/README.md) - * [Scan GitHub Pull Request](jfrog-applications/frogbot/scan-pull-requests/scan-github-pull-request.md) - * [Scan Gitlab Pull Request](jfrog-applications/frogbot/scan-pull-requests/scan-gitlab-pull-request.md) - * [Scan Azure Repos Pull Request](jfrog-applications/frogbot/scan-pull-requests/scan-azure-repos-pull-request.md) - * [Scan Bitbucket Server Pull Request](jfrog-applications/frogbot/scan-pull-requests/scan-bitbucket-server-pull-request.md) - * [Pull Request Scan Results](jfrog-applications/frogbot/scan-pull-requests/pull-request-scan-results.md) - * [Scan Git Repositories](jfrog-applications/frogbot/scan-repositories/README.md) - * [View Security Alerts on GitHub](jfrog-applications/frogbot/scan-repositories/view-security-alerts-on-github.md) + * [Scan Execution](jfrog-applications/frogbot/scan-execution/README.md) + * [Scan Git Repositories](jfrog-applications/frogbot/scan-execution/scan-repositories/README.md) + * [View Security Alerts on GitHub](jfrog-applications/frogbot/scan-execution/scan-repositories/view-security-alerts-on-github.md) + * [Scan Pull Requests](jfrog-applications/frogbot/scan-execution/scan-pull-requests/README.md) + * [Scan GitHub Pull Request](jfrog-applications/frogbot/scan-execution/scan-pull-requests/scan-github-pull-request.md) + * [Scan GitLab Pull Request](jfrog-applications/frogbot/scan-execution/scan-pull-requests/scan-gitlab-pull-request.md) + * [Scan Azure Repos Pull Request](jfrog-applications/frogbot/scan-execution/scan-pull-requests/scan-azure-repos-pull-request.md) + * [Scan Bitbucket Server Pull Request](jfrog-applications/frogbot/scan-execution/scan-pull-requests/scan-bitbucket-server-pull-request.md) + * [Pull Request Scan Results](jfrog-applications/frogbot/scan-execution/scan-pull-requests/pull-request-scan-results.md) * [Frogbot Badge](frogbot/frogbot-badge.md) ## CI & SDKs diff --git a/jfrog-applications/frogbot/setup-frogbot-using-azure-pipelines.md b/jfrog-applications/frogbot/setup-frogbot-using-azure-pipelines.md index 7954d48..3761a41 100644 --- a/jfrog-applications/frogbot/setup-frogbot-using-azure-pipelines.md +++ b/jfrog-applications/frogbot/setup-frogbot-using-azure-pipelines.md @@ -1,6 +1,6 @@ # Setup Frogbot Using Azure Pipelines -**Important Notice**: For Scanning Pull Requests, it is advisable to refrain from setting up Frogbot using Azure Pipelines for open source projects. For further details, please refer to the [👮 Security Note for Pull Requests Scanning](../jfrog-applications/frogbot/scan-pull-requests/#security-note-for-pull-requests-scanning). +**Important Notice**: For Scanning Pull Requests, it is advisable to refrain from setting up Frogbot using Azure Pipelines for open source projects. For further details, please refer to the [👮 Security Note for Pull Requests Scanning](../jfrog-applications/frogbot/scan-execution/scan-pull-requests/#security-note-for-pull-requests-scanning). To install Frogbot on Azure Repos repositories, follow these steps. diff --git a/jfrog-applications/frogbot/setup-frogbot-using-github-actions.md b/jfrog-applications/frogbot/setup-frogbot-using-github-actions.md deleted file mode 100644 index fe4bdbe..0000000 --- a/jfrog-applications/frogbot/setup-frogbot-using-github-actions.md +++ /dev/null @@ -1,104 +0,0 @@ -# Setup Frogbot Using GitHub Actions - -### Github Prerequisites - -* Go to your repository's **settings** tab and save the JFrog connection details as repository secrets with the following names: - - * **JF\_URL** (JFrog Platform URL - Example: `https://acme.jfrog.io`) - - > You can also use **JF\_XRAY\_URL** and **JF\_ARTIFACTORY\_URL** instead of **JF\_URL** - - * **JF\_ACCESS\_TOKEN** (JFrog access token) - - > You can also use **JF\_USER** + **JF\_PASSWORD** instead of **JF\_ACCESS\_TOKEN**. - > - > Instead of using **JF\_ACCESS\_TOKEN** and providing an access token as a GitHub secret, you can utilize the GitHub [OpenID Connect (OIDC)](setup-frogbot-using-github-actions.md#authenticating-using-openid-connect-oidc) authentication protocol. - - * **JF\_GIT\_TOKEN** (GitHub token) - - > You can utilize [$\{{secrets.GITHUB\_TOKEN\}}](https://docs.github.com/en/actions/security-guides/automatic-token-authentication) for **JF\_GIT\_TOKEN**, which is an automatically generated token by GitHub. However, this option comes with a limitation: a workflow, such as Frogbot itself, cannot trigger another workflow. Consequently, if you have additional workflows intended to activate upon the creation of a new pull request, they might not be initiated. To resolve this issue, you can generate a [personal access token](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens) and use it as JF\_GIT\_TOKEN. - -![](../.gitbook/assets/github-repository-secrets.png) - -* Under **Actions** > **General**, check the **Allow GitHub Actions to create and approve pull requests** check box. - -![](../.gitbook/assets/github-pr-permissions.png) - -* For open-source projects: Create a new [GitHub environment](https://docs.github.com/en/actions/deployment/targeting-different-environments/using-environments-for-deployment#creating-an-environment) called **frogbot** and add people or public teams as reviewers. The chosen reviewers can trigger Frogbot scans on pull requests. - -![](../.gitbook/assets/github-environment.png) - -### Frogbot GitHub Action Templates - -1. Begin by cloning the GitHub repository to your local environment. -2. Switch to the target branch where you'd like the pull requests to be scanned. -3. Create a file named **frogbot-scan-pull-request.yml**. Fill it with the provided [template](templates/github-actions/frogbot-scan-pull-request.yml), and then push it into the **.github/workflows** directory at the root of your GitHub repository. -4. Return to the default branch. -5. Now, create a file named **frogbot-scan-repository.yml**. Again, populate it with the provided [template](templates/github-actions/frogbot-scan-repository.yml) and push it into the **.github/workflows** directory at the root of your GitHub repository. - -\ - - -
- -Authenticating using OpenID Connect (OIDC) - -**General** - -The sensitive connection details, such as the access token used by JFrog Frogbot, can be automatically generated by the action instead of storing it as a secret in GitHub. This is made possible by leveraging the OpenID-Connect (OIDC) protocol. This protocol can authenticate the workflow issuer and supply a valid access token. Learn more about this integration in [this](https://jfrog.com/blog/secure-access-development-jfrog-github-oidc) blog post. To utilize the OIDC protocol, follow these steps: - -**JFrog Platform configuration** - -1. **Configure an OIDC Integration**: This phase sets an integration between GitHub Actions to the JFrog platform.\ - A) Navigate to the Administration tab In the JFrog Platform UI\ - B) Click `General` | `Manage Integrations`\ - C) Click `New Integration` | `OpenID Connect`:\ - ![](../.gitbook/assets/oidc-new-integration.png)\ - D) Configure the OIDC integration:\ - ![](../.gitbook/assets/oidc-configure-integration.png) - -**Notes**: \ -The 'Provider Name' value should be used as the 'oidc-provider-name' input in Workflow Configuration step 2 below. - -The 'Audience' field does NOT represent the 'aud' claim that can be added to identity-mapping configured in the 'Claims JSON' (shown below). Only claims that are included in the 'Claims Json' created during step 2 will be validated. - -2. **Configure an identity mapping**: This phase sets an integration between a particular GitHub repository to the JFrog platform. - - An identity mapping is a configuration object utilized by the JFrog Platform to associate incoming OIDC claims with particular selected fields. These fields might include `repository`, `actor`, `workflow`, and others. To configure the identity mapping, click on the identity mapping created in section 1 and then click on `Add Identity Mapping`. In the 'priority' field insert the value '1' and fill in the rest of the required fields:\ - ![](../.gitbook/assets/oidc-identity-mapping.png) - - You have the flexibility to define any valid list of claims required for request authentication. You can check a list of the possible claims [here](https://docs.github.com/en/actions/deployment/security-hardening-your-deployments/about-security-hardening-with-openid-connect#understanding-the-oidc-token). Example Claims JSON: - - ```json - { - "repository": "repository-owner/my-repository" - } - ``` - -#### Workflow configuration - -1. **Set required permissions**: In the course of the protocol's execution, it's imperative to acquire a JSON Web Token (JWT) from GitHub's OIDC provider. To request this token, it's essential to configure the specified permission in the workflow file: - - ```yml - permissions: - id-token: write - ``` -2. **Pass the 'oidc-provider-name' input to the Action (Required)**: The 'oidc-provider-name' parameter designates the OIDC configuration whose one of its identity mapping should align with the generated JWT claims. This input needs to align with the 'Provider Name' value established within the OIDC configuration in the JFrog Platform. -3. **Pass the 'oidc-audience' input to the Action (Optional)**: The 'oidc-audience' input defines the intended recipients of an ID token (JWT), ensuring access is restricted to authorized recipients for the JFrog Platform. By default, it contains the URL of the GitHub repository owner. It enforces a condition, allowing only workflows within the designated repository/organization to request an access token. Read more about it [here](https://docs.github.com/en/actions/deployment/security-hardening-your-deployments/about-security-hardening-with-openid-connect#customizing-the-audience-value). - -Example step utilizing OpenID Connect: - -When using OIDC integration, you might encounter failures in Xray scans or JFrog Advanced Security scans due to token expiration. - -``` -- uses: jfrog/frogbot@v2 - env: - JF_URL: ${{ vars.JF_URL }} - JF_GIT_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - oidc-provider-name: frogbot-integration -``` - -**Note**: If this occurs, try extending the "Token Expiration Time|" in the 'Identity Mapping Configuration" phase to ensure the token remains valid until all scanners are triggered, which may vary depending on the project's size. - -
diff --git a/jfrog-applications/frogbot/setup-frogbot-using-jenkins.md b/jfrog-applications/frogbot/setup-frogbot-using-jenkins.md index ff424c4..f675498 100644 --- a/jfrog-applications/frogbot/setup-frogbot-using-jenkins.md +++ b/jfrog-applications/frogbot/setup-frogbot-using-jenkins.md @@ -1,6 +1,6 @@ # Setup Frogbot Using Jenkins -**Important Notice**: For Scanning Pull Requests, it is advisable to refrain from setting up Frogbot using Jenkins for open source projects. For further details, please refer to the [👮 Security Note for Pull Requests Scanning](../jfrog-applications/frogbot/scan-pull-requests/#security-note-for-pull-requests-scanning). +**Important Notice**: For Scanning Pull Requests, it is advisable to refrain from setting up Frogbot using Jenkins for open source projects. For further details, please refer to the [👮 Security Note for Pull Requests Scanning](../jfrog-applications/frogbot/scan-execution/scan-pull-requests/#security-note-for-pull-requests-scanning). #### 🖥️ Follow these steps to install Frogbot on Jenkins diff --git a/jfrog-applications/frogbot/setup-frogbot-using-jfrog-pipelines.md b/jfrog-applications/frogbot/setup-frogbot-using-jfrog-pipelines.md index 787c20c..4c020aa 100644 --- a/jfrog-applications/frogbot/setup-frogbot-using-jfrog-pipelines.md +++ b/jfrog-applications/frogbot/setup-frogbot-using-jfrog-pipelines.md @@ -1,6 +1,6 @@ # Setup Frogbot Using JFrog Pipelines -**Important Notice**: For Scanning Pull Requests, it is advisable to refrain from setting up Frogbot using JFrog Pipelines for open source projects. For further details, please refer to the [👮 Security Note for Pull Requests Scanning](../jfrog-applications/frogbot/scan-pull-requests/#security-note-for-pull-requests-scanning). +**Important Notice**: For Scanning Pull Requests, it is advisable to refrain from setting up Frogbot using JFrog Pipelines for open source projects. For further details, please refer to the [👮 Security Note for Pull Requests Scanning](../jfrog-applications/frogbot/scan-execution/scan-pull-requests/#security-note-for-pull-requests-scanning). * Make sure you have the connection details of your JFrog Platform. * Inside JFrog Pipelines, save the JFrog connection details as a [JFrog Platform Access Token Integration](https://www.jfrog.com/confluence/display/JFROG/JFrog+Platform+Access+Token+Integration) named **jfrogPlatform**. diff --git a/jfrog-applications/frogbot/setup-frogbot.md b/jfrog-applications/frogbot/setup-frogbot.md index ce48155..7c76344 100644 --- a/jfrog-applications/frogbot/setup-frogbot.md +++ b/jfrog-applications/frogbot/setup-frogbot.md @@ -7,10 +7,10 @@ #### Select your preferred CI server: -* [GitHub Actions](setup-frogbot-using-github-actions.md) +* [GitHub Actions](../jfrog-applications/frogbot/setup-frogbot/setup-frogbot-using-github-actions/) * [Jenkins](setup-frogbot-using-jenkins.md) * [JFrog Pipelines](setup-frogbot-using-jfrog-pipelines.md) -* [GitLab CI](setup-frogbot-using-gitlab-ci.md) +* [GitLab CI](../jfrog-applications/frogbot/setup-frogbot/setup-frogbot-using-gitlab-ci/) * [Azure Pipelines](setup-frogbot-using-azure-pipelines.md)
diff --git a/jfrog-applications/jfrog-applications/frogbot/scan-execution/README.md b/jfrog-applications/jfrog-applications/frogbot/scan-execution/README.md new file mode 100644 index 0000000..f26f45e --- /dev/null +++ b/jfrog-applications/jfrog-applications/frogbot/scan-execution/README.md @@ -0,0 +1,2 @@ +# Scan Execution + diff --git a/jfrog-applications/jfrog-applications/frogbot/scan-pull-requests/README.md b/jfrog-applications/jfrog-applications/frogbot/scan-execution/scan-pull-requests/README.md similarity index 100% rename from jfrog-applications/jfrog-applications/frogbot/scan-pull-requests/README.md rename to jfrog-applications/jfrog-applications/frogbot/scan-execution/scan-pull-requests/README.md diff --git a/jfrog-applications/jfrog-applications/frogbot/scan-pull-requests/pull-request-scan-results.md b/jfrog-applications/jfrog-applications/frogbot/scan-execution/scan-pull-requests/pull-request-scan-results.md similarity index 100% rename from jfrog-applications/jfrog-applications/frogbot/scan-pull-requests/pull-request-scan-results.md rename to jfrog-applications/jfrog-applications/frogbot/scan-execution/scan-pull-requests/pull-request-scan-results.md diff --git a/jfrog-applications/jfrog-applications/frogbot/scan-pull-requests/scan-azure-repos-pull-request.md b/jfrog-applications/jfrog-applications/frogbot/scan-execution/scan-pull-requests/scan-azure-repos-pull-request.md similarity index 100% rename from jfrog-applications/jfrog-applications/frogbot/scan-pull-requests/scan-azure-repos-pull-request.md rename to jfrog-applications/jfrog-applications/frogbot/scan-execution/scan-pull-requests/scan-azure-repos-pull-request.md diff --git a/jfrog-applications/jfrog-applications/frogbot/scan-pull-requests/scan-bitbucket-server-pull-request.md b/jfrog-applications/jfrog-applications/frogbot/scan-execution/scan-pull-requests/scan-bitbucket-server-pull-request.md similarity index 100% rename from jfrog-applications/jfrog-applications/frogbot/scan-pull-requests/scan-bitbucket-server-pull-request.md rename to jfrog-applications/jfrog-applications/frogbot/scan-execution/scan-pull-requests/scan-bitbucket-server-pull-request.md diff --git a/jfrog-applications/jfrog-applications/frogbot/scan-pull-requests/scan-github-pull-request.md b/jfrog-applications/jfrog-applications/frogbot/scan-execution/scan-pull-requests/scan-github-pull-request.md similarity index 100% rename from jfrog-applications/jfrog-applications/frogbot/scan-pull-requests/scan-github-pull-request.md rename to jfrog-applications/jfrog-applications/frogbot/scan-execution/scan-pull-requests/scan-github-pull-request.md diff --git a/jfrog-applications/jfrog-applications/frogbot/scan-pull-requests/scan-gitlab-pull-request.md b/jfrog-applications/jfrog-applications/frogbot/scan-execution/scan-pull-requests/scan-gitlab-pull-request.md similarity index 100% rename from jfrog-applications/jfrog-applications/frogbot/scan-pull-requests/scan-gitlab-pull-request.md rename to jfrog-applications/jfrog-applications/frogbot/scan-execution/scan-pull-requests/scan-gitlab-pull-request.md diff --git a/jfrog-applications/jfrog-applications/frogbot/scan-repositories/README.md b/jfrog-applications/jfrog-applications/frogbot/scan-execution/scan-repositories/README.md similarity index 87% rename from jfrog-applications/jfrog-applications/frogbot/scan-repositories/README.md rename to jfrog-applications/jfrog-applications/frogbot/scan-execution/scan-repositories/README.md index 576a4fc..b226cc3 100644 --- a/jfrog-applications/jfrog-applications/frogbot/scan-repositories/README.md +++ b/jfrog-applications/jfrog-applications/frogbot/scan-execution/scan-repositories/README.md @@ -2,8 +2,6 @@ Frogbot scans your Git repositories periodically and automatically creates pull requests for upgrading vulnerable dependencies to a version with a fix. -![](../../../.gitbook/assets/fix-pr.png) +![](../../../../.gitbook/assets/fix-pr.png) _**NOTE:**_ The pull request fix is presently unavailable for older NuGet projects that use the package.config file instead of the PackageReference syntax. - -#### diff --git a/jfrog-applications/jfrog-applications/frogbot/scan-repositories/view-security-alerts-on-github.md b/jfrog-applications/jfrog-applications/frogbot/scan-execution/scan-repositories/view-security-alerts-on-github.md similarity index 51% rename from jfrog-applications/jfrog-applications/frogbot/scan-repositories/view-security-alerts-on-github.md rename to jfrog-applications/jfrog-applications/frogbot/scan-execution/scan-repositories/view-security-alerts-on-github.md index 83f7f67..5fb828a 100644 --- a/jfrog-applications/jfrog-applications/frogbot/scan-repositories/view-security-alerts-on-github.md +++ b/jfrog-applications/jfrog-applications/frogbot/scan-execution/scan-repositories/view-security-alerts-on-github.md @@ -1,29 +1,29 @@ # View Security Alerts on GitHub -For GitHub repositories, issues that are found during Frogbot's periodic scans are also added to the [Security Alerts](https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/managing-code-scanning-alerts-for-your-repository) view in the UI. +For GitHub repositories, issues that are found during Frogbot's repository scans are also added to the [Security Alerts](https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/managing-code-scanning-alerts-for-your-repository) view in the UI. -![](../../../.gitbook/assets/github-code-scanning.png) +![](../../../../.gitbook/assets/github-code-scanning.png) The following alert types are supported: **1. CVEs on vulnerable dependencies** -![](../../../.gitbook/assets/github-code-scanning-content.png) +![](../../../../.gitbook/assets/github-code-scanning-content.png) **2. Secrets that are exposed in the code** -![](../../../.gitbook/assets/github-code-scanning-secrets-content.png) +![](../../../../.gitbook/assets/github-code-scanning-secrets-content.png) **3. Infrastructure as Code (Iac) issues on Terraform packages** -![](../../../.gitbook/assets/github-code-scanning-iac-content.png) +![](../../../../.gitbook/assets/github-code-scanning-iac-content.png) **4. Static Application Security Testing (Sast) vulnerabilities** -![](../../../.gitbook/assets/github-code-scanning-sast-content.png) +![](../../../../.gitbook/assets/github-code-scanning-sast-content.png) **5. Validate Allowed Licenses** When Frogbot scans the repository periodically, it checks the licenses of any project dependencies. If Frogbot identifies licenses that are not listed in a predefined set of approved licenses, it adds an alert. The list of allowed licenses is set up as a variable within the Frogbot workflow. -![](../../../.gitbook/assets/github-code-scanning-license-violation-content.png) +![](../../../../.gitbook/assets/github-code-scanning-license-violation-content.png) diff --git a/jfrog-applications/jfrog-applications/frogbot/setup-frogbot/setup-frogbot-using-github-actions/README.md b/jfrog-applications/jfrog-applications/frogbot/setup-frogbot/setup-frogbot-using-github-actions/README.md new file mode 100644 index 0000000..11fc275 --- /dev/null +++ b/jfrog-applications/jfrog-applications/frogbot/setup-frogbot/setup-frogbot-using-github-actions/README.md @@ -0,0 +1,202 @@ +--- +description: Install Frogbot on GitHub using GitHub Actions +--- + +# Setup Frogbot Using GitHub Actions + +## Prepare GitHub to work with Frogbot + +Perform the following steps to allow GitHub and Frogbot to work together: + +### Step 1: Provide connection details + +
+ +Set Frogbot's connection details as GitHub secrets + +Go to your repository's **settings** tab and save the JFrog connection details as repository secrets with the following names: + +1. **JF\_URL** (JFrog Platform URL)\ + Example: `https://acme.jfrog.io`\ + You can also use **JF\_XRAY\_URL** and **JF\_ARTIFACTORY\_URL** instead of **JF\_URL.** +2. **JF\_ACCESS\_TOKEN** (JFrog access token)\ + You can also use **JF\_USER** + **JF\_PASSWORD** instead of **JF\_ACCESS\_TOKEN**.\ + Instead of using **JF\_ACCESS\_TOKEN** and providing an access token as a GitHub secret, you can utilize the [GitHub OpenID Connect (OIDC)](oidc-authentication.md) authentication protocol. +3. **JF\_GIT\_TOKEN** (GitHub token)\ + You can utilize [$\{{secrets.GITHUB\_TOKEN\}}](https://docs.github.com/en/actions/security-guides/automatic-token-authentication) for **JF\_GIT\_TOKEN**, which is an automatically generated token by GitHub. However, this option comes with a limitation: a workflow, such as Frogbot itself, cannot trigger another workflow. Consequently, if you have additional workflows intended to activate upon the creation of a new pull request, they might not be initiated. To resolve this issue, you can generate a [personal access token](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens) and use it as JF\_GIT\_TOKEN. + + + +
+ +### Step 2: Allow Frogbot to open Pull Requests + +
+ +Allow Pull Requests + +Under **Actions** > **General**, check the **Allow GitHub Actions to create and approve pull requests** check box. + + + +
+ +### Step 3: Create execution Environment (open source projects only) + +
+ +Create a dedicated execution environment for Frogbot + +Create a new [GitHub environment](https://docs.github.com/en/actions/deployment/targeting-different-environments/using-environments-for-deployment#creating-an-environment) called **frogbot** and add people or public teams as reviewers. \ +The chosen reviewers can trigger Frogbot scans on pull requests. + +![](<../../../../.gitbook/assets/image (1).png>) + +
+ +## Create the required GitHub Actions templates + +### Step 1: Navigate to the project you wish to scan + +Clone the GitHub repository you wish to scan to your local environment: + +```shell-session +> git clone +> cd +``` + +Switch to the branch you'd like to scan with Frogbot: + +```shell-session +> git checkout +``` + +### Step 2: Set up Repository Scan + +In the branch you'd like to scan, create a file named `frogbot-scan-repository.yml`. Fill it with the provided [template](./#basic-frogbot-scan-repository.yml-template) and push it into the `.github/workflows` directory at the root of your GitHub repository.\ +You can see more advanced options in the [full scan repository template](scan-git-repository-full-template.md). + +
+ +frogbot-scan-repository.yml template + +```yaml +name: "Frogbot Scan Repository" +on: + workflow_dispatch: + schedule: + # The repository will be scanned once a day at 00:00 GMT. + - cron: "0 0 * * *" +permissions: + contents: write + pull-requests: write + security-events: write + # [Mandatory If using OIDC authentication protocol instead of JF_ACCESS_TOKEN] + # id-token: write +jobs: + scan-repository: + runs-on: ubuntu-latest + strategy: + matrix: + # The repository scanning will be triggered periodically on the following branches. + branch: ["dev"] + steps: + - uses: jfrog/frogbot@v2 + env: + # [Mandatory] + # JFrog platform URL + JF_URL: ${{ secrets.JF_URL }} + + # [Mandatory if JF_USER and JF_PASSWORD are not provided] + # JFrog access token with 'read' permissions on Xray service + JF_ACCESS_TOKEN: ${{ secrets.JF_ACCESS_TOKEN }} + + # [Mandatory if JF_ACCESS_TOKEN is not provided] + # JFrog username with 'read' permissions for Xray. Must be provided with JF_PASSWORD + # JF_USER: ${{ secrets.JF_USER }} + + # [Mandatory if JF_ACCESS_TOKEN is not provided] + # JFrog password. Must be provided with JF_USER + # JF_PASSWORD: ${{ secrets.JF_PASSWORD }} + + # [Mandatory] + # The GitHub token is automatically generated for the job + JF_GIT_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + # [Mandatory] + # The name of the branch on which Frogbot will perform the scan + JF_GIT_BASE_BRANCH: ${{ matrix.branch }} + + # [Mandatory if using OIDC authentication protocol instead of JF_ACCESS_TOKEN] + # Insert to oidc-provider-name the 'Provider Name' defined in the OIDC integration configured in the JPD + # with: + # oidc-provider-name: "" +``` + +
+ +### Step 3: Set up Pull Request Scan + +Create a file named `frogbot-scan-pull-request.yml`. Fill it with the provided [template](./#basic-frogbot-scan-pull-request.yml-template), and then push it into the `.github/workflows` directory at the root of your GitHub repository.\ +You can see more advanced options in the [full scan pull request template](scan-pull-request-full-template.md). + +
+ +frogbot-scan-pull-request.yml template + +{% code fullWidth="true" %} +```yaml +name: "Frogbot Scan Repository" +on: + workflow_dispatch: + schedule: + # The repository will be scanned once a day at 00:00 GMT. + - cron: "0 0 * * *" +permissions: + contents: write + pull-requests: write + security-events: write + # [Mandatory If using OIDC authentication protocol instead of JF_ACCESS_TOKEN] + # id-token: write +jobs: + scan-repository: + runs-on: ubuntu-latest + strategy: + matrix: + # The repository scanning will be triggered periodically on the following branches. + branch: ["dev"] + steps: + - uses: jfrog/frogbot@v2 + env: + # [Mandatory] + # JFrog platform URL + JF_URL: ${{ secrets.JF_URL }} + + # [Mandatory if JF_USER and JF_PASSWORD are not provided] + # JFrog access token with 'read' permissions on Xray service + JF_ACCESS_TOKEN: ${{ secrets.JF_ACCESS_TOKEN }} + + # [Mandatory if JF_ACCESS_TOKEN is not provided] + # JFrog username with 'read' permissions for Xray. Must be provided with JF_PASSWORD + # JF_USER: ${{ secrets.JF_USER }} + + # [Mandatory if JF_ACCESS_TOKEN is not provided] + # JFrog password. Must be provided with JF_USER + # JF_PASSWORD: ${{ secrets.JF_PASSWORD }} + + # [Mandatory] + # The GitHub token is automatically generated for the job + JF_GIT_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + # [Mandatory] + # The name of the branch on which Frogbot will perform the scan + JF_GIT_BASE_BRANCH: ${{ matrix.branch }} + + # [Mandatory if using OIDC authentication protocol instead of JF_ACCESS_TOKEN] + # Insert to oidc-provider-name the 'Provider Name' defined in the OIDC integration configured in the JPD + # with: + # oidc-provider-name: "" +``` +{% endcode %} + +
diff --git a/jfrog-applications/jfrog-applications/frogbot/setup-frogbot/setup-frogbot-using-github-actions/oidc-authentication.md b/jfrog-applications/jfrog-applications/frogbot/setup-frogbot/setup-frogbot-using-github-actions/oidc-authentication.md new file mode 100644 index 0000000..0620780 --- /dev/null +++ b/jfrog-applications/jfrog-applications/frogbot/setup-frogbot/setup-frogbot-using-github-actions/oidc-authentication.md @@ -0,0 +1,66 @@ +--- +description: Authenticating using OpenID Connect (OIDC) +--- + +# OIDC Authentication + +## **General** + +The sensitive connection details, such as the access token used by JFrog Frogbot, can be automatically generated by the action instead of storing it as a secret in GitHub. This is made possible by leveraging the OpenID-Connect (OIDC) protocol. This protocol can authenticate the workflow issuer and supply a valid access token. Learn more about this integration in [this](https://jfrog.com/blog/secure-access-development-jfrog-github-oidc) blog post. To utilize the OIDC protocol, follow these steps: + +## **JFrog Platform configuration** + +1. **Configure an OIDC Integration**: This phase sets an integration between GitHub Actions to the JFrog platform. + 1. Navigate to the Administration tab In the JFrog Platform UI + 2. Click `General` | `Manage Integrations` + 3. Click `New Integration` | `OpenID Connect`:\ + ![](../../../../.gitbook/assets/oidc-new-integration.png) + 4. Configure the OIDC integration:\ + ![](../../../../.gitbook/assets/oidc-configure-integration.png) + +{% hint style="info" %} +The 'Provider Name' value should be used as the 'oidc-provider-name' input in Workflow Configuration step 2 below. + +The 'Audience' field does NOT represent the 'aud' claim that can be added to identity-mapping configured in the 'Claims JSON' (shown below). Only claims that are included in the 'Claims Json' created during step 2 will be validated. +{% endhint %} + +2. **Configure an identity mapping**: This phase sets an integration between a particular GitHub repository to the JFrog platform. + + An identity mapping is a configuration object utilized by the JFrog Platform to associate incoming OIDC claims with particular selected fields. These fields might include `repository`, `actor`, `workflow`, and others. To configure the identity mapping, click on the identity mapping created in section 1 and then click on `Add Identity Mapping`. In the 'priority' field insert the value '1' and fill in the rest of the required fields:\ + ![](../../../../.gitbook/assets/oidc-identity-mapping.png) + + You have the flexibility to define any valid list of claims required for request authentication. You can check a list of the possible claims [here](https://docs.github.com/en/actions/deployment/security-hardening-your-deployments/about-security-hardening-with-openid-connect#understanding-the-oidc-token). Example Claims JSON: + + ```json + { + "repository": "repository-owner/my-repository" + } + ``` + +## Workflow configuration + +1. **Set required permissions**: In the course of the protocol's execution, it's imperative to acquire a JSON Web Token (JWT) from GitHub's OIDC provider. To request this token, it's essential to configure the specified permission in the workflow file: + + ```yml + permissions: + id-token: write + ``` +2. **Pass the 'oidc-provider-name' input to the Action (Required)**: The 'oidc-provider-name' parameter designates the OIDC configuration whose one of its identity mapping should align with the generated JWT claims. This input needs to align with the 'Provider Name' value established within the OIDC configuration in the JFrog Platform. +3. **Pass the 'oidc-audience' input to the Action (Optional)**: The 'oidc-audience' input defines the intended recipients of an ID token (JWT), ensuring access is restricted to authorized recipients for the JFrog Platform. By default, it contains the URL of the GitHub repository owner. It enforces a condition, allowing only workflows within the designated repository/organization to request an access token. Read more about it [here](https://docs.github.com/en/actions/deployment/security-hardening-your-deployments/about-security-hardening-with-openid-connect#customizing-the-audience-value). + +## Example for OpenID Connect Usage + +``` +- uses: jfrog/frogbot@v2 + env: + JF_URL: ${{ vars.JF_URL }} + JF_GIT_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + oidc-provider-name: frogbot-integration +``` + +## **Troubleshooting** + +### Scan failures due to token expiration + +When using OIDC integration, you might encounter failures in Xray scans or JFrog Advanced Security scans due to token expiration. If this occurs, try extending the 'Token Expiration Time' in the 'Identity Mapping Configuration' phase to ensure the token remains valid until all scanners are triggered, which may vary depending on the project's size. diff --git a/jfrog-applications/jfrog-applications/frogbot/setup-frogbot/setup-frogbot-using-github-actions/scan-git-repository-full-template.md b/jfrog-applications/jfrog-applications/frogbot/setup-frogbot/setup-frogbot-using-github-actions/scan-git-repository-full-template.md new file mode 100644 index 0000000..c009623 --- /dev/null +++ b/jfrog-applications/jfrog-applications/frogbot/setup-frogbot/setup-frogbot-using-github-actions/scan-git-repository-full-template.md @@ -0,0 +1,155 @@ +# Scan Git Repository Full Template + +Here you can find the full template for Frogbot repository scan workflow: + +```yaml +name: "Frogbot Scan Repository" +on: + workflow_dispatch: + schedule: + # The repository will be scanned once a day at 00:00 GMT. + - cron: "0 0 * * *" +permissions: + contents: write + pull-requests: write + security-events: write + # [Mandatory If using OIDC authentication protocol instead of JF_ACCESS_TOKEN] + # id-token: write +jobs: + scan-repository: + runs-on: ubuntu-latest + strategy: + matrix: + # The repository scanning will be triggered periodically on the following branches. + branch: ["dev"] + steps: + - uses: jfrog/frogbot@v2 + env: + # [Mandatory] + # JFrog platform URL + JF_URL: ${{ secrets.JF_URL }} + + # [Mandatory if JF_USER and JF_PASSWORD are not provided] + # JFrog access token with 'read' permissions on Xray service + JF_ACCESS_TOKEN: ${{ secrets.JF_ACCESS_TOKEN }} + + # [Mandatory if JF_ACCESS_TOKEN is not provided] + # JFrog username with 'read' permissions for Xray. Must be provided with JF_PASSWORD + # JF_USER: ${{ secrets.JF_USER }} + + # [Mandatory if JF_ACCESS_TOKEN is not provided] + # JFrog password. Must be provided with JF_USER + # JF_PASSWORD: ${{ secrets.JF_PASSWORD }} + + # [Mandatory] + # The GitHub token is automatically generated for the job + JF_GIT_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + # [Mandatory] + # The name of the branch on which Frogbot will perform the scan + JF_GIT_BASE_BRANCH: ${{ matrix.branch }} + + # [Optional, default: https://api.github.com] + # API endpoint to GitHub + # JF_GIT_API_ENDPOINT: https://github.example.com + + # [Optional] + # By default, the Frogbot workflows download the Frogbot executable as well as other tools + # needed from https://releases.jfrog.io + # If the machine that runs Frogbot has no access to the internet, follow these steps to allow the + # executable to be downloaded from an Artifactory instance, which the machine has access to: + # + # 1. Login to the Artifactory UI, with a user who has admin credentials. + # 2. Create a Remote Repository with the following properties set. + # Under the 'Basic' tab: + # Package Type: Generic + # URL: https://releases.jfrog.io + # Under the 'Advanced' tab: + # Uncheck the 'Store Artifacts Locally' option + # 3. Set the value of the 'JF_RELEASES_REPO' variable with the Repository Key you created. + # JF_RELEASES_REPO: "" + + ########################################################################## + ## If your project uses a 'frogbot-config.yml' file, you can define ## + ## the following variables inside the file, instead of here. ## + ########################################################################## + + # [Optional, default: "."] + # Relative path to the root of the project in the Git repository. If left empty (without providing "." yourself as default), a recursive scan is triggered from the root directory of the project. + # JF_WORKING_DIR: path/to/project/dir + + # [Default: "*git*;*node_modules*;*target*;*venv*;*test*"] + # List of exclusion patterns (utilizing wildcards) for excluding paths in the source code of the Git repository during SCA scans. + # JF_PATH_EXCLUSIONS: "*git*;*node_modules*;*target*;*venv*;*test*" + + # [Optional] + # Xray Watches. Learn more about them here: https://www.jfrog.com/confluence/display/JFROG/Configuring+Xray+Watches + # JF_WATCHES: ,... + + # [Optional] + # JFrog project. Learn more about it here: https://www.jfrog.com/confluence/display/JFROG/Projects + # JF_PROJECT: + + # [Optional, default: "TRUE"] + # Fails the Frogbot task if any security issue is found. + # JF_FAIL: "FALSE" + + # [Optional] + # Frogbot will download the project dependencies, if they're not cached locally. To download the + # dependencies from a virtual repository in Artifactory, set the name of the repository. There's no + # need to set this value, if it is set in the frogbot-config.yml file. + # JF_DEPS_REPO: "" + + # [Optional] + # Template for the branch name generated by Frogbot when creating pull requests with fixes. + # The template must include {BRANCH_NAME_HASH}, to ensure that the generated branch name is unique. + # The template can optionally include the {IMPACTED_PACKAGE} and {FIX_VERSION} variables. + # JF_BRANCH_NAME_TEMPLATE: "frogbot-{IMPACTED_PACKAGE}-{BRANCH_NAME_HASH}" + + # [Optional] + # Template for the commit message generated by Frogbot when creating pull requests with fixes + # The template can optionally include the {IMPACTED_PACKAGE} and {FIX_VERSION} variables. + # JF_COMMIT_MESSAGE_TEMPLATE: "Upgrade {IMPACTED_PACKAGE} to {FIX_VERSION}" + + # [Optional] + # Template for the pull request title generated by Frogbot when creating pull requests with fixes. + # The template can optionally include the {IMPACTED_PACKAGE} and {FIX_VERSION} variables. + # JF_PULL_REQUEST_TITLE_TEMPLATE: "[🐸 Frogbot] Upgrade {IMPACTED_PACKAGE} to {FIX_VERSION}" + + # [Optional, Default: "FALSE"] + # If TRUE, Frogbot creates a single pull request with all the fixes. + # If FALSE, Frogbot creates a separate pull request for each fix. + # JF_GIT_AGGREGATE_FIXES: "FALSE" + + # [Optional, Default: "FALSE"] + # Handle vulnerabilities with fix versions only + # JF_FIXABLE_ONLY: "TRUE" + + # [Optional] + # Set the minimum severity for vulnerabilities that should be fixed and commented on in pull requests + # The following values are accepted: Low, Medium, High or Critical + # JF_MIN_SEVERITY: "" + + # [Optional, Default: eco-system+frogbot@jfrog.com] + # Set the email of the commit author + # JF_GIT_EMAIL_AUTHOR: "" + + # [Optional] + # Set the list of allowed licenses + # The full list of licenses can be found in: + # https://github.com/jfrog/frogbot/blob/master/docs/licenses.md + # JF_ALLOWED_LICENSES: "MIT, Apache-2.0" + + # [Optional] + # Avoid adding extra info to pull request comments. that isn't related to the scan findings. + # JF_AVOID_EXTRA_MESSAGES: "TRUE" + + # [Optional] + # Add a title to pull request comments generated by Frogbot. + # JF_PR_COMMENT_TITLE: "" + + # [Mandatory if using OIDC authentication protocol instead of JF_ACCESS_TOKEN] + # Insert to oidc-provider-name the 'Provider Name' defined in the OIDC integration configured in the JPD + # with: + # oidc-provider-name: "" +``` diff --git a/jfrog-applications/jfrog-applications/frogbot/setup-frogbot/setup-frogbot-using-github-actions/scan-pull-request-full-template.md b/jfrog-applications/jfrog-applications/frogbot/setup-frogbot/setup-frogbot-using-github-actions/scan-pull-request-full-template.md new file mode 100644 index 0000000..d6669b1 --- /dev/null +++ b/jfrog-applications/jfrog-applications/frogbot/setup-frogbot/setup-frogbot-using-github-actions/scan-pull-request-full-template.md @@ -0,0 +1,161 @@ +# Scan Pull Request Full Template + +Here you can find the full template for Frogbot pull request scan workflow: + +```yaml +name: "Frogbot Scan Pull Request" +on: + pull_request_target: + types: [opened, synchronize] +permissions: + pull-requests: write + contents: read + # [Mandatory If using OIDC authentication protocol instead of JF_ACCESS_TOKEN] + # id-token: write +jobs: + scan-pull-request: + runs-on: ubuntu-latest + # A pull request needs to be approved before Frogbot scans it. Any GitHub user who is associated with the + # "frogbot" GitHub environment can approve the pull request to be scanned. + environment: frogbot + steps: + - uses: jfrog/frogbot@v2 + env: + # [Mandatory] + # JFrog platform URL + JF_URL: ${{ secrets.JF_URL }} + + # [Mandatory if JF_USER and JF_PASSWORD are not provided] + # JFrog access token with 'read' permissions on Xray service + JF_ACCESS_TOKEN: ${{ secrets.JF_ACCESS_TOKEN }} + + # [Mandatory if JF_ACCESS_TOKEN is not provided] + # JFrog username with 'read' permissions for Xray. Must be provided with JF_PASSWORD + # JF_USER: ${{ secrets.JF_USER }} + + # [Mandatory if JF_ACCESS_TOKEN is not provided] + # JFrog password. Must be provided with JF_USER + # JF_PASSWORD: ${{ secrets.JF_PASSWORD }} + + # [Mandatory] + # The GitHub token is automatically generated for the job + JF_GIT_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + # [Optional, default: https://api.github.com] + # API endpoint to GitHub + # JF_GIT_API_ENDPOINT: https://github.example.com + + # [Optional] + # By default, the Frogbot workflows download the Frogbot executable as well as other tools + # needed from https://releases.jfrog.io + # If the machine that runs Frogbot has no access to the internet, follow these steps to allow the + # executable to be downloaded from an Artifactory instance, which the machine has access to: + # + # 1. Login to the Artifactory UI, with a user who has admin credentials. + # 2. Create a Remote Repository with the following properties set. + # Under the 'Basic' tab: + # Package Type: Generic + # URL: https://releases.jfrog.io + # Under the 'Advanced' tab: + # Uncheck the 'Store Artifacts Locally' option + # 3. Set the value of the 'JF_RELEASES_REPO' variable with the Repository Key you created. + # JF_RELEASES_REPO: "" + + # [Optional] + # Configure the SMTP server to enable Frogbot to send emails with detected secrets in pull request scans. + # SMTP server URL including should the relevant port: (Example: smtp.server.com:8080) + # JF_SMTP_SERVER: "" + + # [Mandatory if JF_SMTP_SERVER is set] + # The username required for authenticating with the SMTP server. + # JF_SMTP_USER: "" + + # [Mandatory if JF_SMTP_SERVER is set] + # The password associated with the username required for authentication with the SMTP server. + # JF_SMTP_PASSWORD: "" + + ########################################################################## + ## If your project uses a 'frogbot-config.yml' file, you can define ## + ## the following variables inside the file, instead of here. ## + ########################################################################## + + # [Mandatory if the two conditions below are met] + # 1. The project uses yarn 2, NuGet or .NET Core to download its dependencies + # 2. The `installCommand` variable isn't set in your frogbot-config.yml file. + # + # The command that installs the project dependencies (e.g "nuget restore") + # JF_INSTALL_DEPS_CMD: "" + + # [Optional, default: "."] + # Relative path to the root of the project in the Git repository. If left empty (without providing "." yourself as default), a recursive scan is triggered from the root directory of the project. + # JF_WORKING_DIR: path/to/project/dir + + # [Default: "*git*;*node_modules*;*target*;*venv*;*test*"] + # List of exclusion patterns (utilizing wildcards) for excluding paths in the source code of the Git repository during SCA scans. + # JF_PATH_EXCLUSIONS: "*git*;*node_modules*;*target*;*venv*;*test*" + + # [Optional] + # Xray Watches. Learn more about them here: https://www.jfrog.com/confluence/display/JFROG/Configuring+Xray+Watches + # JF_WATCHES: ,... + + # [Optional] + # JFrog project. Learn more about it here: https://www.jfrog.com/confluence/display/JFROG/Projects + # JF_PROJECT: + + # [Optional, default: "FALSE"] + # Displays all existing vulnerabilities, including the ones that were added by the pull request. + # JF_INCLUDE_ALL_VULNERABILITIES: "TRUE" + + # [Optional, default: "FALSE"] + # When adding new comments on pull requests, keep old comments that were added by previous scans. + # JF_AVOID_PREVIOUS_PR_COMMENTS_DELETION: "TRUE" + + # [Optional, default: "TRUE"] + # Fails the Frogbot task if any security issue is found. + # JF_FAIL: "FALSE" + + # [Optional] + # Frogbot will download the project dependencies if they're not cached locally. To download the + # dependencies from a virtual repository in Artifactory, set the name of the repository. There's no + # need to set this value, if it is set in the frogbot-config.yml file. + # JF_DEPS_REPO: "" + + # [Optional, Default: "FALSE"] + # If TRUE, Frogbot creates a single pull request with all the fixes. + # If false, Frogbot creates a separate pull request for each fix. + # JF_GIT_AGGREGATE_FIXES: "FALSE" + + # [Optional, Default: "FALSE"] + # Handle vulnerabilities with fix versions only + # JF_FIXABLE_ONLY: "TRUE" + + # [Optional] + # Set the minimum severity for vulnerabilities that should be fixed and commented on in pull requests + # The following values are accepted: Low, Medium, High or Critical + # JF_MIN_SEVERITY: "" + + # [Optional] + # List of comma-separated(,) email addresses to receive email notifications about secrets + # detected during pull request scanning. The notification is also sent to the email set + # in the committer git profile regardless of whether this variable is set or not. + # JF_EMAIL_RECEIVERS: "" + + # [Optional] + # Set the list of allowed licenses + # The full list of licenses can be found in: + # https://github.com/jfrog/frogbot/blob/master/docs/licenses.md + # JF_ALLOWED_LICENSES: "MIT, Apache-2.0" + + # [Optional] + # Avoid adding extra info to pull request comments. that isn't related to the scan findings. + # JF_AVOID_EXTRA_MESSAGES: "TRUE" + + # [Optional] + # Add a title to pull request comments generated by Frogbot. + # JF_PR_COMMENT_TITLE: "" + + # [Mandatory if using OIDC authentication protocol instead of JF_ACCESS_TOKEN] + # Insert to oidc-provider-name the 'Provider Name' defined in the OIDC integration configured in the JPD + # with: + # oidc-provider-name: "" +``` diff --git a/jfrog-applications/jfrog-applications/frogbot/setup-frogbot/setup-frogbot-using-gitlab-ci/README.md b/jfrog-applications/jfrog-applications/frogbot/setup-frogbot/setup-frogbot-using-gitlab-ci/README.md new file mode 100644 index 0000000..9d932fa --- /dev/null +++ b/jfrog-applications/jfrog-applications/frogbot/setup-frogbot/setup-frogbot-using-gitlab-ci/README.md @@ -0,0 +1,91 @@ +--- +description: Install Frogbot on GitLab repositories using GitLab CI +--- + +# Setup Frogbot Using GitLab CI + +## Prepare GitLab to work with Frogbot + +1. Make sure you have the connection details of your JFrog environment. +2. Go to your GitLab repository settings page and save the JFrog connection details as repository secrets with the following names - **JF\_URL**, **JF\_USER**, and **JF\_PASSWORD.** + +> _**NOTE:**_ +> +> * You can use **JF\_XRAY\_URL** and **JF\_ARTIFACTORY\_URL** instead of **JF\_URL**. +> * You can use **JF\_ACCESS\_TOKEN** instead of **JF\_USER** and **JF\_PASSWORD**. +> * Ensure not set these tokens as **protected** in Gitlab. + +3. Add a job named **frogbot-scan** to your `.gitlab-ci.yml` file in your GitLab repository. Use the following for execution: + +
+ +Frogbot template to scan Repository and Pull Request + +```yml +frogbot-scan: + rules: + - if: $CI_PIPELINE_SOURCE == 'merge_request_event' + when: manual + variables: + FROGBOT_CMD: "scan-pull-request" + JF_GIT_BASE_BRANCH: $CI_MERGE_REQUEST_TARGET_BRANCH_NAME + # Repository scanning is triggered by any push to the default branch. + # If you'd like a different branch to be scanned, replace $CI_DEFAULT_BRANCH in the line below with the name of the branch, wrapped with quotes ("). + - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH || $CI_PIPELINE_SOURCE == "schedule" + variables: + FROGBOT_CMD: "scan-repository" + JF_GIT_BASE_BRANCH: $CI_COMMIT_BRANCH + variables: + # [Mandatory] + # JFrog platform URL (This functionality requires version 3.29.0 or above of Xray) + JF_URL: $JF_URL + + # [Mandatory if JF_USER and JF_PASSWORD are not provided] + # JFrog access token with 'read' permissions for Xray + JF_ACCESS_TOKEN: $JF_ACCESS_TOKEN + + # [Mandatory if JF_ACCESS_TOKEN is not provided] + # JFrog user and password with 'read' permissions for Xray + # JF_USER: $JF_USER + # JF_PASSWORD: $JF_PASSWORD + + # [Mandatory] + # GitLab access token. Ensure the token has the following permissions, depedending on your GiLab deployment type: + # Self hosted: api, read_api, read_user, read_repository. + # Cloud: api, read_api, read_repository + JF_GIT_TOKEN: $USER_TOKEN + + # Predefined GitLab variables. There's no need to set them. + JF_GIT_PROVIDER: gitlab + JF_GIT_OWNER: $CI_PROJECT_NAMESPACE + JF_GIT_REPO: $CI_PROJECT_NAME + JF_GIT_PULL_REQUEST_ID: $CI_MERGE_REQUEST_IID + + # [Mandatory if the two conditions below are met] + # 1. The project uses yarn 2, NuGet, or .NET to download its dependencies + # 2. The `installCommand` variable isn't set in your frogbot-config.yml file. + # + # The command that installs the project dependencies (e.g "nuget restore") + JF_INSTALL_DEPS_CMD: "" + + script: + # For Linux / MacOS runner: + - | + getFrogbotScriptPath=$(if [ -z "$JF_RELEASES_REPO" ]; then echo "https://releases.jfrog.io"; else echo "${JF_URL}/artifactory/${JF_RELEASES_REPO}"; fi) + curl -fLg "$getFrogbotScriptPath/artifactory/frogbot/v2/[RELEASE]/getFrogbot.sh" | sh + ./frogbot ${FROGBOT_CMD} + + # For Windows runner: + # + # - $getFrogbotScriptPath = $(if ([string]::IsNullOrEmpty($env:JF_RELEASES_REPO)) { "https://releases.jfrog.io" } else { "$($env:JF_URL)/artifactory/$($env:JF_RELEASES_REPO)" }) + # - Invoke-WebRequest -Uri "$getFrogbotScriptPath/artifactory/frogbot/v2/[RELEASE]/getFrogbot.sh" -UseBasicParsing | ForEach-Object { & $_.Content } + # - .\frogbot ${FROGBOT_CMD} +``` + +
+ +{% hint style="info" %} +In the `gitlab-ci.yml` file, Make sure that either **JF\_USER** and **JF\_PASSWORD** or **JF\_ACCESS\_TOKEN** are set, **but not both**. + +For more advanced configuration, use [GitLab full template](gitlab-full-template.md) to see all available options. +{% endhint %} diff --git a/jfrog-applications/frogbot/setup-frogbot-using-gitlab-ci.md b/jfrog-applications/jfrog-applications/frogbot/setup-frogbot/setup-frogbot-using-gitlab-ci/gitlab-full-template.md similarity index 91% rename from jfrog-applications/frogbot/setup-frogbot-using-gitlab-ci.md rename to jfrog-applications/jfrog-applications/frogbot/setup-frogbot/setup-frogbot-using-gitlab-ci/gitlab-full-template.md index 5f74293..eb60253 100644 --- a/jfrog-applications/frogbot/setup-frogbot-using-gitlab-ci.md +++ b/jfrog-applications/jfrog-applications/frogbot/setup-frogbot/setup-frogbot-using-gitlab-ci/gitlab-full-template.md @@ -1,22 +1,8 @@ -# Setup Frogbot Using GitLab CI +# GitLab Full Template -To install Frogbot on GitLab repositories using GitLab CI: +Here you can find the full template for Frogbot: -1. Make sure you have the connection details of your JFrog environment. -2. Go to your GitLab repository settings page and save the JFrog connection details as repository secrets with the following names - **JF\_URL**, **JF\_USER**, and **JF\_PASSWORD** - -> _**NOTE:**_ -> * You can use **JF\_XRAY\_URL** and **JF\_ARTIFACTORY\_URL** instead of **JF\_URL**. -> * You can use **JF\_ACCESS\_TOKEN** instead of **JF\_USER** and **JF\_PASSWORD**. -> * Ensure not set these tokens as **protected** in Gitlab. - -3. Add a job named **frogbot-scan** to your **.gitlab-ci.yml** file in your GitLab repository using the code block below. - -**Important** - -* Make sure that either **JF\_USER** and **JF\_PASSWORD** or **JF\_ACCESS\_TOKEN** are set, **but not both**. - -```yml +```yaml frogbot-scan: rules: - if: $CI_PIPELINE_SOURCE == 'merge_request_event' From f04496b7a2da88e8f1911db0233f34e2ea0713d5 Mon Sep 17 00:00:00 2001 From: Yuvarajan Date: Mon, 9 Sep 2024 19:19:37 +0530 Subject: [PATCH 48/57] Update cli-for-jfrog-cloud-transfer.md (#152) --- .../jfrog-cli/cli-for-jfrog-cloud-transfer.md | 191 +++++++++--------- 1 file changed, 97 insertions(+), 94 deletions(-) diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-cloud-transfer.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-cloud-transfer.md index 1e039b4..f0670d7 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-cloud-transfer.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-cloud-transfer.md @@ -12,9 +12,27 @@ The Artifactory Transfer solution currently transfers the config and data of JFr In this page, we refer to the source self-hosted instance as the source instance, and the target JFrog Cloud instance as the target instance. -### Artifactory Version Support +### Noteworthy Details -The Artifactory Transfer solution is supported for any version of Artifactory 7.x and Artifactory version 6.23.21 and above. + * **Artifactory Version Support:** The Artifactory Transfer solution is supported for any version of Artifactory 7.x and Artifactory version 6.23.21 and above. If your current Artifactory version is not of compatible version, please consider upgrading the Artifactory instance. + * **Supported OS Platforms:** The transfer tool can help transfer the files and configuration from operating systems of all types, including Windows and Container environments. + +### Limitations + +The following limitations need to be kept in mind before you start the migration process + +1. The Archive Search Enabled feature is not supported on JFrog Cloud. +2. Artifactory System Properties are not transferred and JFrog Cloud defaults are applied after the transfer. +3. User plugins are not supported on JFrog Cloud. +4. Artifact Cold Storage is not supported in JFrog Cloud. +5. Artifacts in remote repositories caches are not transferred. +6. Federated repositories are transferred without their federation members. After the transfer, you'll need to reconfigure the federation as described in the Federated Repositories documentation. Federated Repositories +7. Docker repositories with names that include dots or underscores aren't allowed in JFrog Cloud. +8. Artifact properties with a value longer than 2.4K characters are not supported in JFrog Cloud. Such properties are generally seen in Conan artifacts. The artifacts will be transferred without the properties in this case. A report with these artifacts will become available to you at the end of the transfer. +9. The files transfer process allows transferring files that were created or modified on the source instance after the process started. However: + * Files that were deleted on the source instance after the process started, are not deleted on the target instance by the process. + * The custom properties of those files are also updated on the target instance. However, if only the custom properties of those files were modified on the source, but not the files' content, the properties are not modified on the target instance by the process. +10. When transferring files in build-info repositories, JFrog CLI limits the total of working threads to 8. This is done to limit the load on the target instance while transferring build-info. ### Transfer phases @@ -34,31 +52,15 @@ The transfer process includes two phases, that you must perform in the following You can do both steps while the source instance is in use. No downtime on the source instance is required while the transfer is in progress. -### Limitations - -The following limitations need to be kept in mind before you start the migration process - -1. The Archive Search Enabled feature is not supported on JFrog Cloud. -2. Artifactory System Properties are not transferred and JFrog Cloud defaults are applied after the transfer. -3. User plugins are not supported on JFrog Cloud. -4. Artifact Cold Storage is not supported in JFrog Cloud. -5. Artifacts in remote repositories caches are not transferred. -6. Federated repositories are transferred without their federation members. After the transfer, you'll need to reconfigure the federation as described in the Federated Repositories documentation. Federated Repositories -7. Docker repositories with names that include dots or underscores aren't allowed in JFrog Cloud. -8. Artifact properties with a value longer than 2.4K characters are not supported in JFrog Cloud. Such properties are generally seen in Conan artifacts. The artifacts will be transferred without the properties in this case. A report with these artifacts will become available to you at the end of the transfer. -9. The files transfer process allows transferring files that were created or modified on the source instance after the process started. However: - 1. Files that were deleted on the source instance after the process started, are not deleted on the target instance by the process. - 2. The custom properties of those files are also updated on the target instance. However, if only the custom properties of those files were modified on the source, but not the files' content, the properties are not modified on the target instance by the process. - ### Before you begin 1. If your source instance hosts files that are larger than 25 GB, they will be blocked during the transfer. To learn how to check whether large files are hosted by your source instance, and what to do in that case, read [this section](#transferring-files-larger-than-25-gb). 2. Ensure that you can log in to the UI of both the source and target instances with users that have admin permissions. 3. Ensure that the target instance license does not support fewer features than the source instance license. 4. Run the file transfer pre-checks as described [here](#running-pre-checks-before-initiating-the-file-transfer-process). -5. Ensure that all the remote repositories on the source Artifactory instance have network access to their destination URL once they are created in the target instance. Even if one remote or federated repository does not have access, the configuration transfer operation will be canceled. You do have the option of excluding specific repositories from being transferred. +5. Ensure that all the remote repositories on the source Artifactory instance have network access to their destination URL once they are created in the target instance. Even if one remote or federated repository does not have access, the configuration transfer operation will be cancelled. You do have the option of excluding specific repositories from being transferred. 6. Ensure that all the replications configured on the source Artifactory instance have network access to their destination URL once they are created in the target instance. -7. Ensure that you have a user that can log in to [MyJFrog](https://my.jfrog.com/login/). +7. Ensure that you have a user who can log in to [MyJFrog](https://my.jfrog.com/login/). 8. Ensure that you can log in to the primary node of your source instance through a terminal. ### Running the transfer process @@ -120,6 +122,17 @@ If the source instance has no internet access, follow these steps instead. jf rt transfer-plugin-install source-server --dir "" ``` +If the above is not an option, you may also load the transfer plugin manually into the on-premise plugins directory to continue with the transfer process. + +**Step-1:** Download the dataTransfer JAR file from here (https://releases.jfrog.io/artifactory/jfrog-releases/data-transfer/[RELEASE]/lib/data-transfer.jar) and add it under $JFROG_HOME/artifactory/var/etc/artifactory/plugins/lib/. If the "lib" directory is not present, create one. + +**Step-2:** Download the dataTransfer.groovy file from here (https://releases.jfrog.io/artifactory/jfrog-releases/data-transfer/[RELEASE]/dataTransfer.groovy) and add it under $JFROG_HOME/artifactory/var/etc/artifactory/plugins/. + +**Step-3:** Reload the plugin using the following command. +curl -u admin -X POST http://localhost:8082/artifactory/api/plugins/reload + +If the plugin is loaded successfully, source instance is all set to proceed with the configuration transfer. + #### Step 3: Transfer configuration from the source instance to the target instance *** @@ -151,6 +164,10 @@ jf rt transfer-plugin-install source-server --dir "" If the command output shows that a target URL isn't accessible for any of the repositories, you'll need to make the URL accessible before proceeding to transfer the config. You can then rerun the command to ensure that the URLs are accessible. +If the command execution fails with an error indicating that the configuration import failed against the target server due to some existing data, before using the --force flag to override it, consider reviewing the configuration present in the cloud instance to ensure if it's safe to override. If you would like to preserve the existing configuration in cloud instance whilst transferring the additional data from on-premise, refer to the link here (https://docs.jfrog-applications.jfrog.io/jfrog-applications/jfrog-cli/cli-for-jfrog-cloud-transfer#transferring-projects-and-repositories-from-multiple-source-instances). This section describes a merge task instead of transfer, to sync the data between the instances. + +NOTE: Users will not be transferred while executing merge. Only Repositories and Projects will be merged with the cloud instance. + *** **Note** @@ -200,8 +217,24 @@ Disabling the configuration transfer might take some time. #### Step 5: Push the files from the source to the target instance +### Running pre-checks before initiating the file transfer process + +Before initiating the file transfer process, we highly recommend running pre-checks, to identify issues that can affect the transfer. You trigger the pre-checks by running a JFrog CLI command on your terminal. The pre-checks will verify the following: + +1. There's network connectivity between the source and target instances. +2. The source instance does not include artifacts with properties with values longer than 2.4K characters. This is important, because values longer than 2.4K characters are not supported in JFrog Cloud, and those properties are skipped during the transfer process. + +To run the pre-checks, follow these steps: + 1. Install JFrog CLI on any machine that has access to both the source and the target JFrog instances. To do this, follow the steps described [here](#installing-jfrog-cli-on-a-machine-with-network-access-to-the-source-and-target-machines). -2. Run the following command to start pushing the files from all the repositories in the source instance to the target instance. +2. Run the following command: + +```sh +jf rt transfer-files source-server target-server --prechecks +``` + +**Initiating File Transfer:** +Run the following command to start pushing the files from all the repositories in the source instance to the target instance. ```sh jf rt transfer-files source-server target-server @@ -256,6 +289,45 @@ While the file transfer is running, monitor the load on your source instance, an You have the option to sync the configuration between the source and target after the file transfer process is complete. You may want to so this if new config entities, such as projects, repositories, or users were created or modified on the source, while the files transfer process has been running. To do this, simply repeat steps 1-3 above. +### Running the transfer process - Exceptional cases +1. **Transferring files larger than 25GB:** By default, files that are larger than 25 GB will be blocked by the JFrog Cloud infrastructure during the file transfer. To check whether your source Artifactory instance hosts files larger than that size, do the following. +Run the following curl command from your terminal, after replacing the ``, `` and `` tokens with your source instance details. The command execution may take a few minutes, depending on the number of files hosted by Artifactory. + + ```sh + curl -X POST /artifactory/api/search/aql -H "Content-Type: text/plain" -d 'items.find({"name" : {"$match":"*"}}).include("size","name","repo").sort({"$desc" : ["size"]}).limit(1)' -u ":" + ``` + + You should get a result that looks like the following. + ```json + { + "results":[ + { + "size":132359021 + } + ], + "range":{ + "start_pos":0, + "end_pos":1, + "total":1, + "limit":1 + } + } + ``` + The value of **size** represents the largest file size hosted by your source Artifactory instance. + + If the size value you received is larger than 25000000000, please avoid initiating the files transfer before contacting JFrog Support, to check whether this size limit can be increased for you. You can contact Support by sending an email to [support@jfrog.com](mailto:support@jfrog.com) + +2. **Routing the traffic from the source to the target through an HTTPS proxy:** +The `jf rt transfer-files` command pushes the files directly from the source to the target instance over the network. In case the traffic from the source instance needs to be routed through an HTTPS proxy, follow these steps. + + a. Define the proxy details in the source instance UI as described in the Managing ProxiesManaging Proxies documentation. + b. When running the `jf rt transfer-files` command, add the `--proxy-key` option to the command, with Proxy Key you configured in the UI as the option value. For example, if the Proxy Key you configured is **my-proxy-key**, run the command as follows: + +```sh +jf rt transfer-files my-source my-target --proxy-key my-proxy-key +``` + + ### Transferring projects and repositories from multiple source instances The **jf rt transfer-config** command transfers all the config entities (users, groups, projects, repositories, and more) from the source to the target instance. While doing so, the existing configuration on the target is deleted and replaced with the new configuration from the source. If you'd like to transfer the projects and repositories from multiple source instances to a single target instance, while preserving the existing configuration on the target, follow the below steps. @@ -301,15 +373,7 @@ The `jf rt transfer-files` command pushes the files from the source instance to * **Phase 3** attempts to push files that failed to be transferred in earlier phases (**Phase 1** or **Phase 2**) or in previous executions of the command. * If **Phase 1** finished running for a specific repository, and you run the `jf rt transfer-files` command again, only **Phase 2** and **Phase 3** will be triggered. You can run the `jf rt transfer-files` as many times as needed, till you are ready to move your traffic to the target instance permanently. In any subsequent run of the command, **Phase 2** will transfer the newly created and modified files, and **Phase 3** will retry transferring files that failed to be transferred in previous phases and also **in previous runs of the command**. -#### Using Replication - -To help reduce the time it takes for Phase 2 to run, you may configure Event-Based Push Replication for some or all of the local repositories on the source instance. With Replication configured, when files are created or updated on the source repository, they are immediately replicated to the corresponding repository on the target instance. Repository Replication - -The replication can be configured at any time. Before, during, or after the file transfer process. - -#### Files transfer state - -You can run the `jf rt transfer-files` command multiple times. This is needed to allow transferring files that have been created or updated after previous command executions. To achieve this, JFrog CLI stores the current state of the file transfer process in a directory named `transfer` under the JFrog CLI home directory. You can usually find this directory at this location `~/.jfrog/transfer`. +To achieve this, JFrog CLI stores the current state of the file transfer process in a directory named `transfer` under the JFrog CLI home directory. You can usually find this directory at this location `~/.jfrog/transfer`. JFrog CLI uses the state stored in this directory to avoid repeating transfer actions performed in previous executions of the command. For example, once **Phase 1** is completed for a specific repository, subsequent executions of the command will skip **Phase 1** and run **Phase 2** and **Phase 3** only. @@ -387,10 +451,6 @@ By default, the `jf rt transfer-files` command uses 8 working threads to push fi jf rt transfer-settings ``` -### Build-info repositories - -When transferring files in build-info repositories, JFrog CLI limits the total of working threads to 8. This is done in order to limit the load on the target instance while transferring build-info. - ### Manually copying the filestore to reduce the transfer time When your self-hosted Artifactory hosts hundreds of terabytes of binaries, you may consult with your JFrog account manager about the option of reducing the file transfer time by manually copying the entire filestore to the JFrog Cloud storage. This reduces the transfer time because the binaries' content does not need to be transferred over the network. @@ -399,71 +459,14 @@ The `jf rt transfer-files` command transfers the metadata of the binaries to the To run the file transfer after you copy the filestore, add the `--filestore` command option to the `jf rt transfer-files` command. -### Running pre-checks before initiating the file transfer process - -Before initiating the file transfer process, we highly recommend running pre-checks, to identify issues that can affect the transfer. You trigger the pre-checks by running a JFrog CLI command on your terminal. The pre-checks will verify the following: - -1. There's network connectivity between the source and target instances. -2. The source instance does not include artifacts with properties with values longer than 2.4K characters. This is important, because values longer than 2.4K characters are not supported in JFrog Cloud, and those properties are skipped during the transfer process. - -To run the pre-checks, follow these steps: - -1. Install JFrog CLI on any machine that has access to both the source and the target JFrog instances. To do this, follow the steps described [here](#installing-jfrog-cli-on-a-machine-with-network-access-to-the-source-and-target-machines). -2. Run the following command: - -```sh -jf rt transfer-files source-server target-server --prechecks -``` - -*** +#### Using Replication -**Note** +To help reduce the time it takes for Phase 2 to run, you may configure Event-Based Push Replication for some or all of the local repositories on the source instance. With Replication configured, when files are created or updated on the source repository, they are immediately replicated to the corresponding repository on the target instance. Repository Replication -> If the traffic between the source and target instance needs to be routed through an HTTPS proxy, add the --proxy-key command option as described in [this](#routing-the-traffic-from-the-source-to-the-target-through-an-https-proxy) section. +The replication can be configured at any time. Before, during, or after the file transfer process. *** -### Transferring files larger than 25 GB - -By default, files that are larger than 25 GB will be blocked by the JFrog Cloud infrastructure during the file transfer. To check whether your source Artifactory instance hosts files larger than that size, do the following. - -1. Run the following curl command from your terminal, after replacing the ``, `` and `` tokens with your source instance details. The command execution may take a few minutes, depending on the number of files hosted by Artifactory. - - ```sh - curl -X POST /artifactory/api/search/aql -H "Content-Type: text/plain" -d 'items.find({"name" : {"$match":"\*"}}).include("size").sort({"$desc" : \["size"\]}).limit(1)' -u : - ``` - -2. You should get a result that looks like the following. - ```json - { - "results":[ - { - "size":132359021 - } - ], - "range":{ - "start_pos":0, - "end_pos":1, - "total":1, - "limit":1 - } - } - ``` - The value of **size** represents the largest file size hosted by your source Artifactory instance. - -3. If the size value you received is larger than 25000000000, please avoid initiating the files transfer before contacting JFrog Support, to check whether this size limit can be increased for you. You can contact Support by sending an email to [support@jfrog.com](mailto:support@jfrog.com) - -### Routing the traffic from the source to the target through an HTTPS proxy - -The `jf rt transfer-files` command pushes the files directly from the source to the target instance over the network. In case the traffic from the source instance needs to be routed through an HTTPS proxy, follow these steps. - -1. Define the proxy details in the source instance UI as described in the Managing ProxiesManaging Proxies documentation. -2. When running the `jf rt transfer-files` command, add the `--proxy-key` option to the command, with Proxy Key you configured in the UI as the option value. For example, if the Proxy Key you configured is **my-proxy-key**, run the command as follows: - -```sh -jf rt transfer-files my-source my-target --proxy-key my-proxy-key -``` - ### Frequently asked questions **Why is the total file count on my source and target instances different after the files transfer finishes?** From 4e5f166ca95d7610d2c302bf51be958f60b9ce0b Mon Sep 17 00:00:00 2001 From: Bar Belity Date: Sun, 15 Sep 2024 08:43:15 +0000 Subject: [PATCH 49/57] GITBOOK-135: Lina's Jul 21 changes --- jfrog-applications/SUMMARY.md | 1 + .../count-contributing-developers.md | 219 ++++++++++++++++++ 2 files changed, 220 insertions(+) create mode 100644 jfrog-applications/jfrog-applications/jfrog-cli/cli-for-jfrog-security/count-contributing-developers.md diff --git a/jfrog-applications/SUMMARY.md b/jfrog-applications/SUMMARY.md index d7447ed..e5fdacc 100644 --- a/jfrog-applications/SUMMARY.md +++ b/jfrog-applications/SUMMARY.md @@ -33,6 +33,7 @@ * [Scan Published Builds](jfrog-cli/cli-for-jfrog-security/scan-published-builds.md) * [Scan your Binaries](jfrog-cli/cli-for-jfrog-security/scan-your-binaries.md) * [Download Updates for Xray's Database](jfrog-cli/cli-for-jfrog-security/download-updates-for-xrays-database.md) + * [Count Contributing Developers](jfrog-applications/jfrog-cli/cli-for-jfrog-security/count-contributing-developers.md) * [CLI for JFrog Curation](jfrog-cli/cli-for-jfrog-curation.md) * [CLI for JFrog Distribution](jfrog-cli/cli-for-jfrog-distribution.md) * [CLI for JFrog Pipelines](jfrog-cli/cli-for-jfrog-pipelines.md) diff --git a/jfrog-applications/jfrog-applications/jfrog-cli/cli-for-jfrog-security/count-contributing-developers.md b/jfrog-applications/jfrog-applications/jfrog-cli/cli-for-jfrog-security/count-contributing-developers.md new file mode 100644 index 0000000..0df8049 --- /dev/null +++ b/jfrog-applications/jfrog-applications/jfrog-cli/cli-for-jfrog-security/count-contributing-developers.md @@ -0,0 +1,219 @@ +# Count Contributing Developers + +{% hint style="info" %} +This feature is supported in JFrog CLI version 2.60.0 +{% endhint %} + +The `git count-contributors` command allows JFrog users to easily determine the number of Git developers contributing to their code. The counts indicate the number of contributing developers to the **default branch**. + +The command works by counting the contributing developers for all commits performed within a time range you specify. The results are based on email addresses, thus giving you the specific number of unique developers. + +We provide several options to obtain the developer count: + +* **A single repository**: Analyze a single Git repository by providing the repository name. +* **Across a project/group**: Analyze multiple repositories organized under a project/group by providing the owner command option. +* **Across multiple Git servers**: Analyze repositories across various Git servers by providing a YAML file as an input file with the required parameters outlined below. + +This information can be helpful when purchasing an Advanced Security subscription, as the number of developers is often a key factor in pricing. + +Supported Git providers: + +* GitHub +* GitLab +* Bitbucket + +> This command is intended to assist you in gaining insights to your contributors count. However, we recommend that in addition to utilizing this command that you confirm the data. + +### Usage + +The `git count-contributors` command can be run from the JFrog CLI with the following syntax: + +``` +git count-contributors [command options] +``` + +| Command Option | Description | +| ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| --scm-type |

(optional) The type of SCM to use for the analysis.

Supported Values: github, gitlab, bitbucket Example: --scm-type=github

| +| --scm-api-url |

(optional) The base URL of the SCM system's API endpoint.

Format: The full URL, including the protocol Example: --scm-api-url=https://api.github.com

| +| --token | (optional) The authentication token required to access the SCM system's API. In the absence of a flag, tokens should be passed in the JF\_GIT\_TOKEN environment variable, or the corresponding environment variables 'JFROG\_CLI\_GITLAB\_TOKEN, JFROG\_CLI\_GITHUB\_TOKEN or JFROG\_CLI\_BITBUCKET\_TOKEN' Example: `--token:your_access_token` | +| --owner | (optional) The owner or organization of the repositories to be analyzed. Format: Depending on the Git provider. On GitHub and GitLab, the owner is typically an individual or an organization, On Bitbucket, the owner can also be a project. In the case of a private instance on Bitbucket, the individual or organization name should be prefixed with '\~'. When using this option without a specific repository name, all repositories will be analyzed at the group/project level. Example: `owner=your-organization` | +| --months | (optional) The number of months to analyze for developer activity. Default: `1` Example: `--months=6` | +| --detailed-summary | (optional) Generates a more detailed summary of the contributors. Default: `false` Example: `--detailed-summary=true` | +| --repo-name | (optional) List of semicolon-separated(;) repositories names to analyze, If not provided all repositories related to the provided owner will be analyzed. Example: --repo-name=repo1;repo2 | +| --input-file | (optional) The path to an input file in YAML format that contains multiple git providers. Example: `--input-file="/Users/path/to/file/input.yaml"` | +| --verbose |

(optional)

Enables verbose output, providing more detailed information.

| + +#### Example Commands
+ +**Single Repository** + +```javascript +git cc --scm-type=github --scm-api-url=https://api.github.com --token= --owner=jfrog --months=4 --detailed-summary=false --repo-name=cli-core +``` + +Required Parameters: + +* \--scm-type +* \--scm-api-url +* \--token +* \--repo-name + +**Group/Project** + +```javascript +git cc --scm-type=gitlab --scm-api-url=https://git.vdoo.io --token= --owner=vdoo --months=3 --detailed-summary +``` + +Required Parameters: + +* \--scm-type +* \--scm-api-url +* \--token +* \--owner + +**Multiple Git Servers- YAML File** + +```javascript +git-servers-list: + - scm-type: bitbucket + scm-api-url: "https://api.bitbucket.url" + token: "token" + owner: "owner" + repositories: + - "repo1" + - "repo2" + - scm-type: gitlab + scm-api-url: "https://api.github.com" + token: "token" + owner: "owner" +``` + +Sample Output: + +
{
+  "total_unique_contributors": 4,	-	        The number of unique developers (dedup)
+  "total_commits": 4,				-	The number of commits examined on the default branch (total)
+  "scanned_repos": [				-	The repositories that were scanned
+    "test-go",
+    "test-cli-core"
+  ],
+  "report_date": "2024-07-22T12:08:04+03:00",	-	The report date
+  "number_of_months": "5",			-	The time range specified
+  "unique_contributors_list": [			-	The evidence of the last seen developer
+    {
+      "email": "dev1@users.noreply.github.com",
+      "name": "`Developer 1",
+      "last_commit": {
+        "repo": "test-cli-core",
+        "date": "2024-02-22T14:21:55Z",
+        "hash": "3463b55aa453fb5dd3d5e7c6ebf45a3e33710e72"
+      }
+    },
+    {
+      "email": "dev2@users.noreply.github.com",
+      "name": "Developer 2",
+      "last_commit": {
+        "repo": "test-go",
+        "date": "2024-03-24T07:56:17Z",
+        "hash": "8b102603458044b434689fc3832e12d30af12d15"
+      }
+    },
+    {
+      "email": "dev3@jfrog.com",
+      "name": "Developer 3",
+      "last_commit": {
+        "repo": "test-cli-core",
+        "date": "2024-02-25T15:15:19Z",
+        "hash": "de88b95a38242b9984877a8e928ceafedb147843"
+      }
+    }
+  ],
+  "detailed_contributors_list": {		-	With verbose; detailed evidence per user
+    "dev2@users.noreply.github.com": [
+      {
+        "repo_path": "test-go",
+        "last_commit": {
+          "date": "2024-03-24T07:56:17Z",
+          "hash": "8b102603458044b434689fc3832e12d30af12d15"
+        }
+      },
+      {
+        "repo_path": "test-cli-core",
+        "last_commit": {
+          "date": "2024-02-25T12:40:40Z",
+          "hash": "0941c5ce1007501c2793efa0e09b0e9531b8d503"
+        }
+      }
+    ],
+    "dev3@jfrog.com": [
+      {
+        "repo_path": "test-cli-core",
+        "last_commit": {
+          "date": "2024-02-25T15:15:19Z",
+          "hash": "de88b95a38242b9984877a8e928ceafedb147843"
+        }
+      }
+    ],
+    "dev1@users.noreply.github.com": [
+      {
+        "repo_path": "test-cli-core",
+        "last_commit": {
+          "date": "2024-02-22T14:21:55Z",
+          "hash": "3463b55aa453fb5dd3d5e7c6ebf45a3e33710e72"
+        }
+      }
+    ]
+  },
+  "detailed_repos_list": { -	With verbose; detailed evidence per repo
+    "test-go": [
+      {
+        "email": "dev2@users.noreply.github.com",
+        "last_commit": {
+          "date": "2024-03-24T07:56:17Z",
+          "hash": "8b102603458044b434689fc3832e12d30af12d15"
+        }
+      }
+    ],
+    "test-cli-core": [
+      {
+        "email": "dev3@jfrog.com",
+        "last_commit": {
+          "date": "2024-02-25T15:15:19Z",
+          "hash": "de88b95a38242b9984877a8e928ceafedb147843"
+        }
+      },
+      {
+        "email": "dev2@users.noreply.github.com",
+        "last_commit": {
+          "date": "2024-02-25T12:40:40Z",
+          "hash": "0941c5ce1007501c2793efa0e09b0e9531b8d503"
+        }
+      },
+      {
+        "email": "dev1@users.noreply.github.com",
+        "last_commit": {
+          "date": "2024-02-22T14:21:55Z",
+          "hash": "3463b55aa453fb5dd3d5e7c6ebf45a3e33710e72"
+        }
+      }
+    ]
+  }
+}
+
+ +[^1]: + +[^2]: + +[^3]: + +[^4]: + +[^5]: + +[^6]: + +[^7]: + +[^8]: From 520b89ff8dcd4ab86dac8fe3dd813b5fe95421ee Mon Sep 17 00:00:00 2001 From: Lina Daher Date: Sun, 15 Sep 2024 08:44:52 +0000 Subject: [PATCH 50/57] GITBOOK-143: change request with no subject merged in GitBook --- .../cli-for-jfrog-security/count-contributing-developers.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/jfrog-applications/jfrog-applications/jfrog-cli/cli-for-jfrog-security/count-contributing-developers.md b/jfrog-applications/jfrog-applications/jfrog-cli/cli-for-jfrog-security/count-contributing-developers.md index 0df8049..182ea6c 100644 --- a/jfrog-applications/jfrog-applications/jfrog-cli/cli-for-jfrog-security/count-contributing-developers.md +++ b/jfrog-applications/jfrog-applications/jfrog-cli/cli-for-jfrog-security/count-contributing-developers.md @@ -6,7 +6,7 @@ This feature is supported in JFrog CLI version 2.60.0 The `git count-contributors` command allows JFrog users to easily determine the number of Git developers contributing to their code. The counts indicate the number of contributing developers to the **default branch**. -The command works by counting the contributing developers for all commits performed within a time range you specify. The results are based on email addresses, thus giving you the specific number of unique developers. +The command counts the contributing developers for all commits performed within a specified time range. The results are based on email addresses, thus giving you a specific number of unique developers. We provide several options to obtain the developer count: @@ -22,7 +22,9 @@ Supported Git providers: * GitLab * Bitbucket -> This command is intended to assist you in gaining insights to your contributors count. However, we recommend that in addition to utilizing this command that you confirm the data. +{% hint style="info" %} +The CLI outputs may include an estimation of the contributing developers based on the input provided by the user. They may be based on third-party resources and databases and JFrog does not guarantee that the CLI outputs are accurate and/or complete. The CLI outputs are not legal advice and you are solely responsible for your use of it. CLI outputs are provided "as is" and any representation or warranty of or concerning any third-party technology is strictly between the user and the third-party owner or distributor of the third-party technology. +{% endhint %} ### Usage From f8e33df9d64d3bde1d7fdbf95a6f168d362901f5 Mon Sep 17 00:00:00 2001 From: Bar Belity Date: Sun, 15 Sep 2024 18:52:05 +0300 Subject: [PATCH 51/57] Update SUMMARY.md --- jfrog-applications/SUMMARY.md | 1 + 1 file changed, 1 insertion(+) diff --git a/jfrog-applications/SUMMARY.md b/jfrog-applications/SUMMARY.md index e5fdacc..1146f50 100644 --- a/jfrog-applications/SUMMARY.md +++ b/jfrog-applications/SUMMARY.md @@ -34,6 +34,7 @@ * [Scan your Binaries](jfrog-cli/cli-for-jfrog-security/scan-your-binaries.md) * [Download Updates for Xray's Database](jfrog-cli/cli-for-jfrog-security/download-updates-for-xrays-database.md) * [Count Contributing Developers](jfrog-applications/jfrog-cli/cli-for-jfrog-security/count-contributing-developers.md) + * [Enrich your SBOM JSONs & XMLs](jfrog-applications/jfrog-cli/cli-for-jfrog-security/enrich-your-sbom.md) * [CLI for JFrog Curation](jfrog-cli/cli-for-jfrog-curation.md) * [CLI for JFrog Distribution](jfrog-cli/cli-for-jfrog-distribution.md) * [CLI for JFrog Pipelines](jfrog-cli/cli-for-jfrog-pipelines.md) From e1f13243e9bc4c003541372060e884009c7eb2fa Mon Sep 17 00:00:00 2001 From: Bar Belity Date: Sun, 15 Sep 2024 18:56:27 +0300 Subject: [PATCH 52/57] Update SUMMARY.md --- jfrog-applications/SUMMARY.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jfrog-applications/SUMMARY.md b/jfrog-applications/SUMMARY.md index 1146f50..5c2f332 100644 --- a/jfrog-applications/SUMMARY.md +++ b/jfrog-applications/SUMMARY.md @@ -32,9 +32,9 @@ * [cUrl Integration](jfrog-cli/cli-for-jfrog-security/curl-integration.md) * [Scan Published Builds](jfrog-cli/cli-for-jfrog-security/scan-published-builds.md) * [Scan your Binaries](jfrog-cli/cli-for-jfrog-security/scan-your-binaries.md) + * [Enrich your SBOM JSONs & XMLs](jfrog-cli/cli-for-jfrog-security/enrich-your-sbom.md) * [Download Updates for Xray's Database](jfrog-cli/cli-for-jfrog-security/download-updates-for-xrays-database.md) * [Count Contributing Developers](jfrog-applications/jfrog-cli/cli-for-jfrog-security/count-contributing-developers.md) - * [Enrich your SBOM JSONs & XMLs](jfrog-applications/jfrog-cli/cli-for-jfrog-security/enrich-your-sbom.md) * [CLI for JFrog Curation](jfrog-cli/cli-for-jfrog-curation.md) * [CLI for JFrog Distribution](jfrog-cli/cli-for-jfrog-distribution.md) * [CLI for JFrog Pipelines](jfrog-cli/cli-for-jfrog-pipelines.md) From bc23e7ca9426ba24d1be3883ecbcd73778137c62 Mon Sep 17 00:00:00 2001 From: Bar Belity Date: Sun, 15 Sep 2024 16:12:40 +0000 Subject: [PATCH 53/57] GITBOOK-145: Update required versions for SBOM Enrichment CLI command --- .../enrich-your-sbom.md | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/enrich-your-sbom.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/enrich-your-sbom.md index 4cd03ba..56e275d 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/enrich-your-sbom.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/enrich-your-sbom.md @@ -1,9 +1,8 @@ # Enrich your SBOM JSONs & XMLs -The sbom enrichment command takes an exported SBOM file in XML/JSON format and enriches your -file with package vulnerabilities found by XRAY. +The sbom enrichment command takes an exported SBOM file in XML/JSON format and enriches your file with package vulnerabilities found by XRAY. -This _**jf sbom enrich **_ command enriches a file that is found on file_path. +This _**jf sbom enrich \**_ command enriches a file that is found on file\_path. *** @@ -11,21 +10,21 @@ This _**jf sbom enrich **_ command enriches a file that is found on f > This command requires: -* Version X or above of Xray -* Version Y or above of JFrog CLI +* Version 3.101.3 or above of Xray +* Version 2.60.0 or above of JFrog CLI *** #### Commands Params | | | -|-----------------------|-----------------------------------------------------------------------------------------------------------------------------------------| +| --------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | | **Command name** | sbom-enrich | | **Abbreviation** | se | | **Command options** | | -| `--server-id` |

[Optional]
Server ID configured using the jf c add command. If not specified, the default configured server is used.

| -| **Command arguments** | - | `file_path` | the sbom file path. +| `--server-id` |

[Optional]
Server ID configured using the jf c add command. If not specified, the default configured server is used.

| +| **Command arguments** | | +| `file_path` | the sbom file path. | #### Example 1 @@ -36,8 +35,9 @@ jf se "path/to/file.xml" ``` #### Example 2 + Enriches a JSON file + ``` jf se "path/to/files/file.json" ``` - From 7f184d2d8a40e57af9cd2cb02faad0cc493e42a7 Mon Sep 17 00:00:00 2001 From: Bar Vered <161704690+barv-jfrog@users.noreply.github.com> Date: Wed, 18 Sep 2024 16:46:03 +0300 Subject: [PATCH 54/57] Token validation flag documentation (#145) --- .../jfrog-cli/cli-for-jfrog-security/scan-your-binaries.md | 1 + .../jfrog-cli/cli-for-jfrog-security/scan-your-source-code.md | 1 + 2 files changed, 2 insertions(+) diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-binaries.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-binaries.md index db9a453..0b83584 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-binaries.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-binaries.md @@ -110,6 +110,7 @@ This _**jf docker scan**_ command scans docker containers located on the local f | `--repo-path` |

[Optional]
Artifactory repository path, to enable Xray to determine violations accordingly. The command accepts this option only if the --project and --watches options are not provided. If none of the three options are provided, the command will show all known vulnerabilities.

| | `--watches` |

[Optional]
A comma-separated(,) list of Xray watches, to enable Xray to determine violations accordingly. The command accepts this option only if the --repo-path and --repo-path options are not provided. If none of the three options are provided, the command will show all known vulnerabilities.

| | `--licenses` |

[Default: false]
Set if you also require the list of licenses to be displayed.

| +| `--validate-secrets` |

[Default: false] Triggers token validation on found secrets

| | --format=json |

[Optional]
Produces a JSON file containing the scan results.

| | `--vuln` |

[Optional]
Set if you'd like to receive all vulnerabilities, regardless of the policy configured in Xray.

| | **Command arguments** | | diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-source-code.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-source-code.md index c644e5d..93bc1e2 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-source-code.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-security/scan-your-source-code.md @@ -71,6 +71,7 @@ This command also supports the following Advanced Scans with the **Advanced Secu | `--sast` |

[Default: false] Selective scanners mode: Execute SAST sub-scan. Can be combined with --sca, --secrets and --iac.

| | `--without-contextual-analysis` |

[Default: false] Selective scanners mode: Disable Contextual Analysis scanner after SCA. Relevant only with --sca flag.

| | `--vuln` |

[Optional]
Set if you'd like to receive all vulnerabilities, regardless of the policy configured in Xray.

| +| `--validate-secrets` |

[Default: false] Triggers token validation on found secrets

| | **Command arguments** | The command accepts no arguments | #### **Output Example** From e64202f013cdf276b8008d92f8bb4c521ec6111c Mon Sep 17 00:00:00 2001 From: Robi Nino Date: Thu, 19 Sep 2024 08:58:35 +0300 Subject: [PATCH 55/57] Update python documentation and include twine (#158) --- .../package-managers-integration.md | 206 +++++++++++------- 1 file changed, 132 insertions(+), 74 deletions(-) diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/package-managers-integration.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/package-managers-integration.md index 32c6212..9a5decd 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/package-managers-integration.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/package-managers-integration.md @@ -693,136 +693,194 @@ jf gp v1.2.3 --build-name my-build-name --build-number 1 ## Building Python Packages -JFrog CLI provides full support for building Python packages using the **pip** and **pipenv** and **poetry** package installers. This allows resolving python dependencies from Artifactory, while (for **pip** and **pipenv**) recording the downloaded packages. The downloaded packages are stored as dependencies in the build-info stored in Artifactory. +### Pip, Pipenv and Twine +JFrog CLI provides full support for building Python packages using the **pip** and **pipenv** package managers, and deploying distributions using **twine**. This allows resolving python dependencies from Artifactory, using for **pip** and **pipenv**, while recording the downloaded packages. +After installing and packaging the project, the distributions and wheels can be deployed to Artifactory using **twine**, while recording the uploaded packages. +The downloaded packages are stored as dependencies in the build-info stored in Artifactory, while the uploaded ones are stored as artifacts. -Once the packages are installed, the Python project can be then built and packaged using the pip, pipenv or poetry clients. Once built, the produced artifacts can be uploaded to Artifactory using JFrog CLI's upload command and registered as artifacts in the build-info. - -### Example projects +#### Example projects To help you get started, you can use [the sample projects on GitHub](https://github.com/jfrog/project-examples/tree/master/python-example). -### Setting Python repository +#### Setting Python repository Before you can use JFrog CLI to build your Python projects with Artifactory, you first need to set the repository for the project. Here's how you set the repositories. 1. 'cd' into the root of the Python project. -2. Run the **jf pip-config**, **jf pipenv-config** or **jf poetry-config** commands, depending on whether you're using the pip, pipenv or poetry clients. +2. Run the **jf pip-config** or **jf pipenv-config** commands, depending on whether you're using the **pip** or **pipenv** clients. -#### Commands Params +##### Commands Params -| | | -|---------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command-name | pip-config / pipenv-config / poetry-config | -| Abbreviation | pipc / pipec / poc | -| **Command options:** | | -| `--global` |

[Default false]
Set to true, if you'd like the configuration to be global (for all projects on the machine). Specific projects can override the global configuration.

| +| | | +|-----------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | pip-config / pipenv-config | +| Abbreviation | pipc / pipec | +| **Command options:** | | +| `--global` |

[Default false]
Set to true, if you'd like the configuration to be global (for all projects on the machine). Specific projects can override the global configuration.

| | `--server-id-resolve` |

[Optional]
Artifactory server ID for resolution. The server should configured using the 'jf c add' command.

| -| `--repo-resolve` |

[Optional]
Repository for dependencies resolution.

| +| `--repo-resolve` |

[Optional]
Repository for dependencies resolution.

| +| `--server-id-deploy` |

[Optional]
Artifactory server ID for deployment. The server should configured using the 'jf c add' command.

| +| `--repo-deploy` |

[Optional]
Repository for artifacts deployment.

| -#### Examples -##### Example 1 +##### Examples +###### Example 1 -Set repositories for this Python project when using the pip client. +Set repositories for this Python project when using the pip client (for pipenv: `jf pipec`). ``` jf pipc ``` -##### Example 2 +###### Example 2 -Set repositories for all Python projects using the pip client on this machine. +Set repositories for all Python projects using the pip client on this machine (for pipenv: `jf pipec --global`). ``` jf pipc --global ``` -##### Example 3 +#### Installing Python packages -Set repositories for this Python project when using the pipenv client. +The **jf pip install** and **jf pipenv install** commands use the **pip** and **pipenv** clients respectively, to install the project dependencies from Artifactory. The **jf pip install** and **jf pipenv install** commands can also record these packages as build dependencies as part of the build-info published to Artifactory. -``` -jf pipec -``` +> **Note**: Before running the **pip install** and **pipenv install** commands on a project for the first time, the project should be configured using the **jf pip-config** or **jf pipenv-config** commands respectively. -##### Example 4 +**Recording all dependencies** -Set repositories for all Python projects using the poetry client on this machine. +JFrog CLI records the installed packages as build-info dependencies. The recorded dependencies are packages installed during the **jf pip install** and **jf pipenv install** command execution. When running the command inside a Python environment, which already has some of the packages installed, the installed packages will not be included as part of the build-info, because they were not originally installed by JFrog CLI. A warning message will be added to the log in this case. -``` -jf poc --global -``` +**How to include all packages in the build-info?** -##### Example 5 +The details of all the installed packages are always cached by the **jf pip install** and **jf pipenv install** command in the **.jfrog/projects/deps.cache.json** file, located under the root of the project. JFrog CLI uses this cache for including previously installed packages in the build-info.\ +If the Python environment had some packages installed prior to the first execution of the `install` command, those previously installed packages will be missing from the cache and therefore will not be included in the build-info. -Set repositories for this Python project when using the poetry client. +Running the `install` command with both the **no-cache-dir** and **force-reinstall** pip options, should re-download and install these packages, and they will therefore be included in the build-info and added to the cache. It is also recommended to run the command from inside a [virtual environment](https://packaging.python.org/guides/installing-using-pip-and-virtual-environments/). + +##### Commands Params + +| | | +|----------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | pip / pipenv | +| Abbreviation | | +| **Command options:** | | +| `--build-name` |

[Optional]
Build name. For more details, please refer to Build Integration.

| +| `--build-number` |

[Optional]
Build number. For more details, please refer to Build Integration.

| +| `--project` |

[Optional]
JFrog project key.

| +| `--module` |

[Optional]
Optional module name for the build-info.

| +| Command argument | The command accepts the same arguments and options as the pip / pipenv clients. | + +##### Examples +###### Example 1 + +The following command triggers pip install, while recording the build dependencies as part of build name **my-build** and build number **1** . ``` -jf poc +jf pip install . --build-name my-build --build-number 1 ``` -##### Example 6 +###### Example 2 -Set repositories for all Python projects using the pipenv client on this machine. +The following command triggers pipenv install, while recording the build dependencies as part of build name **my-build** and build number **1** . ``` -jf pipec --global +jf pipenv install . --build-name my-build --build-number 1 ``` -### Installing Python packages +#### Publishing Python packages using Twine +The **jf twine upload** command uses the **twine**, to publish the project distributions to Artifactory. The **jf twine upload** command can also record these packages as build artifacts as part of the build-info published to Artifactory. -The **jf pip install**, **jf pipenv install** and **jf poetry install** commands use the **pip**, **pipenv** and **poetry** clients respectively, to install the project dependencies from Artifactory. The **jf pip install** and **jf pipenv install** commands can also record these packages as build dependencies as part of the build-info published to Artifactory. +> **Note**: Before running the **twine upload** command on a project for the first time, the project should be configured using the **jf pip-config** or **jf pipenv-config** commands, with deployer configuration. -> **Note**: Before running the **pip install**, **pipenv install** and **poetry install** commands on a project for the first time, the project should be configured using the **jf pip-config** ,**jf pipenv-config** or **jf poetry-config** commands respectively. +##### Commands Params -**Recording all dependencies** - currently available for pip and pipenv. +| | | +|----------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | twine | +| Abbreviation | | +| **Command options:** | | +| `--build-name` |

[Optional]
Build name. For more details, please refer to Build Integration.

| +| `--build-number` |

[Optional]
Build number. For more details, please refer to Build Integration.

| +| `--project` |

[Optional]
JFrog project key.

| +| `--module` |

[Optional]
Optional module name for the build-info.

| +| Command argument | The command accepts the arguments and options supported by twine client, except for repository configuration and authentication options. | -JFrog CLI records the installed packages as build-info dependencies. The recorded dependencies are packages installed during the **jf pip install** and **jf pipenv install** command execution. When running the command inside a Python environment, which already has some of the packages installed, the installed packages will not be included as part of the build-info, because they were not originally installed by JFrog CLI. A warning message will be added to the log in this case. +##### Examples +###### Example 1 -**How to include all packages in the build-info?** +The following command triggers twine upload, while recording the build artifacts as part of build name **my-build** and build number **1** . -The details of all the installed packages are always cached by the **jf pip install** and **jf pipenv install** command in the **.jfrog/projects/deps.cache.json** file, located under the root of the project. JFrog CLI uses this cache for including previously installed packages in the build-info.\ -If the Python environment had some packages installed prior to the first execution of the `install` command, those previously installed packages will be missing from the cache and therefore will not be included in the build-info. +``` +jf twine upload "dist/*" --build-name my-build --build-number 1 +``` -Running the `install` command with both the **no-cache-dir** and **force-reinstall** pip options, should re-download and install these packages, and they will therefore be included in the build-info and added to the cache. It is also recommended to run the command from inside a [virtual environment](https://packaging.python.org/guides/installing-using-pip-and-virtual-environments/). +## Poetry +JFrog CLI provides partial support for building Python packages using the **poetry** package manager. This allows resolving python dependencies from Artifactory, but currently does NOT record downloaded packages as dependencies in the build-info. -#### Commands Params +#### Setting Python repository -| | | -|------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command-name | pip / pipenv / poetry | -| Abbreviation | | -| **Command options:** | | -| `--build-name` |

[Optional]
Build name. For more details, please refer to Build Integration.

| -| `--build-number` |

[Optional]
Build number. For more details, please refer to Build Integration.

| -| `--project` |

[Optional]
JFrog project key.

| -| `--module` |

[Optional]
Optional module name for the build-info.

| -| Command argument | The command accepts the same arguments and options as the pip / pipenv / poetry clients. | +Before you can use JFrog CLI to build your Python projects with Artifactory, you first need to set the repository for the project. -#### Examples -##### Example 1 +Here's how you set the repositories. -The following command triggers pip install, while recording the build dependencies as part of build name **my-build** and build number **1** . +1. 'cd' into the root of the Python project. +2. Run the **jf poetry-config** command as follows. + +##### Commands Params + +| | | +|-----------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | poetry-config | +| Abbreviation | poc | +| **Command options:** | | +| `--global` |

[Default false]
Set to true, if you'd like the configuration to be global (for all projects on the machine). Specific projects can override the global configuration.

| +| `--server-id-resolve` |

[Optional]
Artifactory server ID for resolution. The server should configured using the 'jf c add' command.

| +| `--repo-resolve` |

[Optional]
Repository for dependencies resolution.

| + +##### Examples +###### Example 1 + +Set repositories for this Python project when using the poetry client. ``` -jf pip install . --build-name my-build --build-number 1 +jf poc ``` -##### Example 2 +###### Example 2 -The following command triggers pipenv install, while recording the build dependencies as part of build name **my-build** and build number **1** . +Set repositories for all Python projects using the poetry client on this machine. ``` -jf pipenv install . --build-name my-build --build-number 1 +jf poc --global ``` -##### Example 3 +#### Installing Python packages + +The **jf poetry install** commands use the **poetry** client to install the project dependencies from Artifactory. + +> **Note**: Before running the **poetry install** command on a project for the first time, the project should be configured using the **jf poetry-config** command. + +##### Commands Params -The following are command triggers poetry install, while recording the build dependencies as part of build name **my-build** and build number **1** . +| | | +|----------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | poetry | +| Abbreviation | | +| **Command options:** | | +| `--build-name` |

[Optional]
Build name. For more details, please refer to Build Integration.

| +| `--build-number` |

[Optional]
Build number. For more details, please refer to Build Integration.

| +| `--project` |

[Optional]
JFrog project key.

| +| `--module` |

[Optional]
Optional module name for the build-info.

| +| Command argument | The command accepts the same arguments and options as the poetry clients. | + +##### Examples +###### Example 1 + +The following command triggers poetry install, while resolving dependencies from Artifactory. ``` -jf poetry install . --build-name my-build --build-number 1 +jf poetry install . ``` ## Building NuGet Packages @@ -923,15 +981,15 @@ The **jf terraform-config** command will store the repository name inside the ** The following table lists the command options: -| | | -|--------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Command-name | terraform-config | -| Abbreviation | tfc | -| **Command options:** | | -| `--global` |

[Optional]
Set to true, if you'd like the configuration to be global (for all projects on the machine). Specific projects can override the global configuration.

| -| `--server-id-deploy` |

[Optional]
Artifactory server ID for deployment. The server should configured using the 'jf c add' command.

| -| `--repo-deploy` |

[Optional]
Repository for artifacts deployment.

| -| **Command arguments:** | The command accepts no arguments | +| | | +|------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Command-name | terraform-config | +| Abbreviation | tfc | +| **Command options:** | | +| `--global` |

[Optional]
Set to true, if you'd like the configuration to be global (for all projects on the machine). Specific projects can override the global configuration.

| +| `--server-id-deploy` |

[Optional]
Artifactory server ID for deployment. The server should configured using the 'jf c add' command.

| +| `--repo-deploy` |

[Optional]
Repository for artifacts deployment.

| +| **Command arguments:** | The command accepts no arguments | #### Examples ##### Example 1 From 2598ee7054761fe6c2824646b444f8618f7899f3 Mon Sep 17 00:00:00 2001 From: RobiNino Date: Thu, 19 Sep 2024 09:52:31 +0300 Subject: [PATCH 56/57] fix poetry header --- .../cli-for-jfrog-artifactory/package-managers-integration.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/package-managers-integration.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/package-managers-integration.md index 9a5decd..e18ebcc 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/package-managers-integration.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/package-managers-integration.md @@ -815,7 +815,7 @@ The following command triggers twine upload, while recording the build artifacts jf twine upload "dist/*" --build-name my-build --build-number 1 ``` -## Poetry +### Poetry JFrog CLI provides partial support for building Python packages using the **poetry** package manager. This allows resolving python dependencies from Artifactory, but currently does NOT record downloaded packages as dependencies in the build-info. #### Setting Python repository From a0da383f4f996aa7cbc4cd44eda0c12e1eab695d Mon Sep 17 00:00:00 2001 From: RobiNino Date: Sun, 22 Sep 2024 14:15:56 +0300 Subject: [PATCH 57/57] Fix path to downloading extractor JARs documentation --- .../cli-for-jfrog-artifactory/package-managers-integration.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/package-managers-integration.md b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/package-managers-integration.md index e18ebcc..3a867ef 100644 --- a/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/package-managers-integration.md +++ b/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory/package-managers-integration.md @@ -33,7 +33,7 @@ The **mvn** command triggers the maven client, while resolving dependencies and > **Note**: Before running the **mvn** command on a project for the first time, the project should be configured with the **jf mvn-config** command. -> **Note**: If the machine running JFrog CLI has no access to the internet, make sure to read the [Downloading the Maven and Gradle Extractor JARs](https://docs.jfrog-applications.jfrog.io/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory#downloading-the-maven-and-gradle-extractor-jars) section. +> **Note**: If the machine running JFrog CLI has no access to the internet, make sure to read the [Downloading the Maven and Gradle Extractor JARs](#downloading-the-maven-and-gradle-extractor-jars) section. #### Commands Params @@ -98,7 +98,7 @@ The **jf gradle** command triggers the gradle client, while resolving dependenci > **Note**: Before running the **jf gradle** command on a project for the first time, the project should be configured with the **jf gradle-config** command. -> **Note**: If the machine running JFrog CLI has no access to the internet, make sure to read the[Downloading the Maven and Gradle Extractor JARs](https://docs.jfrog-applications.jfrog.io/jfrog-applications/jfrog-cli/cli-for-jfrog-artifactory#downloading-the-maven-and-gradle-extractor-jars)section. +> **Note**: If the machine running JFrog CLI has no access to the internet, make sure to read the [Downloading the Maven and Gradle Extractor JARs](#downloading-the-maven-and-gradle-extractor-jars)section. #### Commands Params