Aql

JFrog Pipelines Documentation

ft:sourceType
Paligo

An Aql resource specifies an Artifactory query using Artifactory Query Language.Artifactory Query Language

An Aql resource can be used in the configuration of a FileSpec resource to specify file properties to match against.

An Aql resource can be used as an inputresource for the CreateReleaseBundle step. It defines the query that is used to create a release bundle.

YAML Schema

The YAML schema for Aql:

resources:
  - name:                       <string>
    type: Aql
    configuration:
      sourceArtifactory:   <artifactory integration name>
      query:               <string>
      addedProperties:
        key1:              val1
        key2:              val2
      mappings: 
        - name: mapping1
          input:    
          output: 
        - name: mapping2
          input:    
          output: 
Tags
name

An alphanumeric string (underscores are permitted) that identifies the resource.

type

Must be Aql for this resource type.

configuration

Specifies all configuration selections for the resource.

Tag

Description

Required/Optional

sourceArtifactory

The name of an Artifactory Integration.

Required

query

An Artifactory Query Language query string.Artifactory Query Language

Required

addedProperties

List of added properties that will be added to the artifacts after distribution of the release bundle.

  • key - Property key to be created or updated after distribution of the release bundle.

  • value - List of values to be added to the property key after distribution of the release bundle.

Optional

mappings

List of mappings that are applied to the artifact paths after distribution of the release bundle.

  • name - The friendly name of the mapping entry.

  • input - Regex match string for artifact paths.

  • output - Replacement for artifact paths matched by the "input" match string. Capture groups can be used as "$1".

Optional

Examples
Example 1: AQL with build name and number
resources:
  - name: myAqlResource
    type: Aql
    configuration:
      sourceArtifactory: myArtifactoryIntegration
      query: items.find({"@build.name":{"$eq":"buildName"}})
  - name: myReleaseBundle
    type: ReleaseBundle
    configuration:
      sourceDistribution: myDistributionIntegration
      name: name
      version: '1'

pipelines:
  - name: pipelineToUpdateResource
    steps:
      - name: myBashStep
        type: Bash
        configuration:
          integrations:
            - name: myArtifactoryIntegration
          outputResources:
            - name: myAqlResource
        execution:
          onExecute:
            - write_output myAqlResource query='items.find({"@build.name":{"$eq":"myBuildName"}})'

  - name: CreateReleaseBundlePipeline
    configuration:
      inputResources:
        - name: myAqlResource
      outputResources:
        - name: myReleaseBundle
    steps:
      - name: myCreateReleaseBundleStep
        type: CreateReleaseBundle
        configuration:
          releaseBundleName: ${JFROG_CLI_BUILD_NAME}
          releaseBundleVersion: ${run_id}
          dryRun: true
Example 2: AQL with file name
resources:
  - name: myAqlResource
    type: Aql
    configuration:
      sourceArtifactory: myArtifactoryIntegration
      query: 'items.find({"$and": [{"repo": {"$eq": "example-repo-local"}}, {"name": {"$match": "myFile.txt"}}]})'

  - name: myReleaseBundle
    type: ReleaseBundle
    configuration:
      sourceDistribution: myDistributionIntegration
      name: name
      version: '1'

pipelines:
  - name: myCreateReleaseBundlePipeline
    steps:
      - name: myCreateReleaseBundleStep
        type: CreateReleaseBundle
        configuration:
          releaseBundleName: ${JFROG_CLI_BUILD_NAME}
          releaseBundleVersion: ${run_id}
          dryRun: false
          inputResources:
            - name: myAqlResource
          outputResources:
            - name: myReleaseBundle
Example 3: AQL to add an additional property to the artifacts in the release bundle
resources:
  - name: myAqlResource
    type: Aql
    configuration:
      sourceArtifactory: myArtifactoryIntegration
      query: 'items.find({"$and": [{"repo": {"$eq": "example-repo-local"}}, {"name": {"$match": "myFile.txt"}}]})'
      addedProperties:
        myRunNumber: ${run_id}

  - name: myReleaseBundle
    type: ReleaseBundle
    configuration:
      sourceDistribution: myDistributionIntegration
      name: name
      version: '1'

pipelines:
  - name: myCreateReleaseBundlePipeline
    steps:
      - name: myCreateReleaseBundleStep
        type: CreateReleaseBundle
        configuration:
          releaseBundleName: ${JFROG_CLI_BUILD_NAME}
          releaseBundleVersion: ${run_id}
          dryRun: false
          inputResources:
            - name: myAqlResource
          outputResources:
            - name: myReleaseBundle
Example 4: AQL to map one path to another
resources:
  - name: myAqlResource
    type: Aql
    configuration:
      sourceArtifactory: myArtifactoryIntegration
      query: 'items.find({"$and": [{"repo": {"$eq": "example-repo-local"}}, {"name": {"$match": "myFile.txt"}}]})'
      mappings:
        - name: myMapping
          input: example-repo-local/myFile.txt
          output: example-repo-local/myFile_2.txt

  - name: myReleaseBundle
    type: ReleaseBundle
    configuration:
      sourceDistribution: myDistributionIntegration
      name: name
      version: '1'

pipelines:
  - name: myCreateReleaseBundlePipeline
    steps:
      - name: myCreateReleaseBundleStep
        type: CreateReleaseBundle
        configuration:
          releaseBundleName: ${JFROG_CLI_BUILD_NAME}
          releaseBundleVersion: ${run_id}
          dryRun: false
          inputResources:
            - name: myAqlResource
          outputResources:
            - name: myReleaseBundle
Example 5: AQL mapping paths using capturing groups in the input
resources:
  - name: myAqlResource
    type: Aql
    configuration:
      sourceArtifactory: myArtifactoryIntegration
      query: 'items.find({"$and": [{"repo": {"$eq": "example-repo-local"}}, {"name": {"$match": "myFile.txt"}}]})'
      mappings:
        - name: myMapping
          input: example-repo-local/myFile.(.*)
          output: example-repo-local/myFile_2.$1

  - name: myReleaseBundle
    type: ReleaseBundle
    configuration:
      sourceDistribution: myDistributionIntegration
      name: name
      version: '1'

pipelines:
  - name: myCreateReleaseBundlePipeline
    steps:
      - name: myCreateReleaseBundleStep
        type: CreateReleaseBundle
        configuration:
          releaseBundleName: ${JFROG_CLI_BUILD_NAME}
          releaseBundleVersion: ${run_id}
          dryRun: false
          inputResources:
            - name: myAqlResource
          outputResources:
            - name: myReleaseBundle
Example 6

pipelines.yml

resources:
  - name: Aql_ART_1
    type: Aql
    configuration:
      sourceArtifactory: myArtifactoryIntegration
      query: items.find({"@build.name":{"$eq":"art"}})
      addedProperties:
        key1: value1
        key2: value2
      mappings:
        - name: mapping1
          input: IN
          output: test1
        - name: mapping2
          input: IN
          output: test2

pipelines:
  - name: pipelines_ART_1
    steps:
      - name: step_ART_1
        type: PowerShell
        configuration:
          nodePool: win_2019
          inputResources:
            - name: Aql_ART_1
              trigger: true
        execution:
          onExecute:
            - write_output "executing step..."