# Project creation using Lineaje cloud

## Bitbucket pipeline example

Here is an example of bitbucket-pipelines.yml. It assumes a user access token (REPO\_ACCESS\_TOKEN) is created for the project and stored under BitBucket->Project Settings->Respository Variables

```yaml
image: atlassian/default-image:3
definitions:
  steps:
    # This step exports all env variables required for other steps and stores it in 
    # build.env. build.env is then made available as artifacts thus making sure all
    # steps have access to these env variables
    - step: &set-version-variables
        name: Set Version Variables
        script:
          - export VERSION=${VERSION:-1.0.0}
          - echo export VERSION=${VERSION} >> build.env
          - export REPO_ACCESS_TOKEN=${REPO_ACCESS_TOKEN}
          - echo export REPO_ACCESS_TOKEN=${REPO_ACCESS_TOKEN} >> build.env
          - echo "Version set to $VERSION"
        artifacts:
          - build.env

    # This step triggers a project creation using Lineaje cloud
    # veecli upload command supports trigeering the project in Lineaje cloud
    # veecli accepts a json file as an input that has all inputs about the source code
    # including the url, version, the branch/tag, type, username/token to access the code
    - step: &generate-project-from-src
        name: generate project from src
        # Use amazon/aws-cli as the base image for this step as we have to issue s3 commands
        image: amazon/aws-cli:latest
        script:
          # Make sure to include build.env
          - source build.env
          # Define your aws access keys. This can come from repository variables for your project
          # This can be configured under BitBucket->Project Settings
          - export AWS_ACCESS_KEY_ID=$PROD_AWS_ACCESS_KEY_ID
          - export AWS_SECRET_ACCESS_KEY=$PROD_AWS_SECRET_ACCESS_KEY
          - export AWS_DEFAULT_REGION=us-west-2
          
          # PROJECT_NAME: The project in Lineaje portal will be shown with PROJECT_NAME
          #   $BITBUCKET_REPO_SLUG is the standard BB variabe that carries the project name
          #   You can change this if required
          # REPO_URL: Repo url that can be accssed via Lineaje Cloud
          # REPO_TYPE: Repo type. Accepted values are "github", "bitbucket", "gitlab", "git"
          # REPO_USER: Username who has access to this repo. This can come from repository variable.
          - export REPO_NAME=$BITBUCKET_REPO_SLUG
          - export PROJECT_NAME="$REPO_NAME-repo"
          - export REPO_URL="https://bitbucket.org/<project>/$REPO_NAME"
          - export REPO_TYPE="bitbucket"
          - export REPO_USER="user-abc"

          # Copy the Lineaje tool from s3 location
          # Refer Pre-Requisites section to learn more.
          - aws s3 cp s3:<bucketname>/lineaje-cli/config.json .
          - aws s3 cp s3:<bucketname>/lineaje-cli/veecli .
          - aws s3 cp s3:<bucketname>/lineaje-cli/input-src.json .
          - chmod +x veecli
          - chmod +w input-src.json

          # install jq. This tool wil be used to edit input-src.json
          - yum update --assumeyes
          - yum install --assumeyes jq

          # update the input-src.json
          # Update the project, version, srcurl, type, matchingref (branch/tag)
          # Update the credentails under repository_access_configs
          - tmp=$(mktemp)
          - jq '.project = env.PROJECT_NAME' input-src.json > "$tmp" && mv "$tmp" input-src.json
          - jq '.version = env.VERSION' input-src.json > "$tmp" && mv "$tmp" input-src.json
          - jq '.inputs[].SrcInfo.srcurl = env.REPO_URL' input-src.json > "$tmp" && mv "$tmp" input-src.json
          - jq '.inputs[].SrcInfo.type = env.REPO_TYPE' input-src.json > "$tmp" && mv "$tmp" input-src.json
          - jq '.inputs[].SrcInfo.matchingref = env.TAG' input-src.json > "$tmp" && mv "$tmp" input-src.json
          - jq '.repository_access_configs[].path = env.REPO_URL' input-src.json > "$tmp" && mv "$tmp" input-src.json
          - jq '.repository_access_configs[].type = env.REPO_TYPE' input-src.json > "$tmp" && mv "$tmp" input-src.json
          - jq '.repository_access_configs[].user_name = env.REPO_USER' input-src.json > "$tmp" && mv "$tmp" input-src.json
          - jq '.repository_access_configs[].token = env.REPO_ACCESS_TOKEN' input-src.json > "$tmp" && mv "$tmp" input-src.json
          - jq . input-src.json
          
          # Trigger the project creation job in Lineaje cloud
          # This step will only trigger the job in Lineaje cloud and return back
          - ./veecli upload --input input-src.json --type cli

pipelines:
  custom:
    deploy-to-prod:
      - step: *set-version-variables
      # Below 4 steps are just for illustration
      #- step: *build-artifacts
      #- step: *upload-artifacts-to-artifactory
      #- step: *push-image-to-prod
      #- step: *tag-branch
      - step: *generate-project-from-src

```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.veedna.com/integration-with-cicd-pipeline/generate-project-from-source-code/project-creation-using-lineaje-cloud.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
