# Showcase an example with every feature used in the form

{% hint style="info" %}
The purpose of this example is to showcase all available features in PFO. It should help you to kickoff your config with a quick copy paste, and try field behaviours in your environment.
{% endhint %}

This example includes a:

* `bitbucket-pipelines.yml` - needed for pipeline configuration
* `pipeline-forms.yml` - needed for forms configuration

## STEP 1 - `bitbucket-pipelines.yml`

Pipelines should be enabled in the **Repository settings** / **Pipelines** / **Settings menu**

<figure><img src="https://2614715257-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FQR41wZlyQDaFKYgHnadh%2Fuploads%2F18CWmYzSHMp0hwyjKjkK%2Fimage.png?alt=media&#x26;token=f4d13573-2c91-4132-9418-719717b849a9" alt=""><figcaption><p>Enable pipelines in your repository</p></figcaption></figure>

After this you should navigate to your `bitbucket-pipelines.yml` and edit the file. It can be done from:&#x20;

* the UI editor in Bitbucket
* any text editor you use for version control

```yaml
image: node:18

definitions:
  caches:
    sonar: /root/.sonar/cache
    frontend-node: static/frontend/node_modules
  steps:
    - step:
        name: Templates
        script:
          - &build-backend-script |
            npm install
            npm run build
          - &cd-frontend-run-install-script |
            cd ./static/frontend
            npm install -f
          - &build-frontend-script |
            cd ./static/frontend
            npm install -f
            npm run build
          - &cd-forge |
            cd forge
          - &cd-root |
            cd ../../
            
pipelines:
  custom:
    Demonstration pipeline: 
      - step: 
          name: Custom Step
          script:
           - echo "This step will run on a cloud runner.";
           - printenv
    Pipeline without forms: 
      - step: 
          name: Custom Step
          script:
           - echo "This step will run on a cloud runner.";
           - printenv

```

Commit your changes.

## STEP 2 - `pipeline-forms.yml`

Open your source code and **add a new file** on the root level, next to `bitbucket-pipelines.yml`, named **`pipeline-forms.yml`**.

If you struggle creating this file, check out this part of the documentation:

{% content-ref url="../../user-guides/user-guide/create-forms" %}
[create-forms](https://docs.meta-inf.hu/pipeline-forms/user-guides/user-guide/create-forms)
{% endcontent-ref %}

Edit the file with the following content:

```yaml
groups:
  - label: Mega Preset
    key: MEGA
fields:
  - &atlassian_base-url-text-field
    label: Atlassian base URL
    type: text
    name: ATLASSIAN_BASE_URL
    defaultValue: https://bitbucket.org
    mandatory: true
    note: Atlassian base URL
  - &workspace-text-field
    label: Workspace
    type: text
    name: WORKSPACE
    mandatory: true
    note: Bitbucket workspace
  - &repository-text-field
    label: Repository
    type: text
    name: REPOSITORY
    mandatory: true
    note: Bitbucket repository
  - &bitbucket-site-url-text-field
    label: Target Bitbucket site URL
    type: text
    name: SITE_URL
    mandatory: true
    note: Target bitbucket site URL
  - &environment-text-field
    label: Environment
    type: text
    name: ENVIRONMENT
    mandatory: true
    note: production or staging or other dev environment
  - &forge-email-text-field
    label: Atlassian account email
    type: text
    name: FORGE_EMAIL
    mandatory: true
    note: Atlassian account email
  - &forge-password-text-field
    label: Forge API token
    type: text
    name: FORGE_API_TOKEN
    mandatory: true
    secure: true
    note: Forge api token
  - &example-text-field
    label: Text field
    type: text
    name: EXAMPLE_TEXT
  - &example-regex-text-field
    label: Regex test field
    type: text
    name: EXAMPLE_REGEX_TEXT
    regex: ^([a-zA-Z0-9._%-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,})$
    note: Valid email addresses only
  - &example-select-field
    label: Menu
    type: select
    name: EXAMPLE_SELECT
    readonly: true
    defaultValue: Soup
    availableValues:
      - Soup
      - Meal
      - Dessert
  - &example-remote-select-field
    label: Remote Jira version
    type: remote_select
    name: EXAMPLE_REMOTE_SELECT
    availableValues:
      url: "https://hub.docker.com/v2/repositories/atlassian/jira-software/tags/?page=1&page_size=100&name=8"
      path: "$.results.[*].name"
  - &example-number-field
    label: Numbers
    type: number
    name: EXAMPLE_NUMBER
  - &example-textarea-field
    label: Big input here
    type: textarea
    name: EXAMPLE_TEXTAREA
  - &example-checkbox-field
    label: Agreement
    type: checkbox
    name: EXAMPLE_CHECKBOX
  - &example-checkbox-group-field
    label: Select any options
    type: checkbox_group
    name: EXAMPLE_CHECKBOX_GROUP
    availableValues:
      - Jira
      - Confluence
      - Bitbucket
      - Other
  - &example-radio-field
    label: Which radio are you listening?
    type: radio
    name: EXAMPLE_RADIO
    availableValues:
      - Radio 1
      - Blues Radio
      - HipHop Radio
      - Other
  - &example-date-field
    label: Deadline
    type: date
    name: EXAMPLE_DATE
forms:
  - name: Run selenium tests
    fields:
      - *atlassian_base-url-text-field
      - *workspace-text-field
      - *repository-text-field
    pipeline: run-e2e-tests
  - name: Upgrade app
    fields:
      - *forge-email-text-field
      - *forge-password-text-field
      - *bitbucket-site-url-text-field
      - *environment-text-field
    pipeline: upgrade-installed-app
  - name: Example with all fields
    fields:
      - *example-text-field
      - *example-regex-text-field
      - *example-select-field
      - *example-remote-select-field
      - *example-number-field
      - *example-textarea-field
      - *forge-password-text-field
      - *example-checkbox-field
      - *example-checkbox-group-field
      - *example-radio-field
      - *example-date-field
    pipeline: Demonstration pipeline
    groups:
      - MEGA
  - name: Example with all overwritten fields
    fields:
      - <<: *example-text-field
        mandatory: true
      - <<: *example-select-field
        readonly: false
        defaultValue: Meal
      - <<: *example-textarea-field
        mandatory: true
      - <<: *example-checkbox-field
        defaultValue: true
        readonly: true
    pipeline: Demonstration pipeline
    groups:
      - MEGA
```

Commit your changes.

## STEP 3 - Open Pipeline Forms

From the sidebar, open the **Pipeline Forms** menu.

Select your commit and select the form named "**Example with all fields"**.

Your form is ready to use!

<figure><img src="https://2614715257-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FQR41wZlyQDaFKYgHnadh%2Fuploads%2FpnoljntqKQsgknnrXQgl%2Fimage.png?alt=media&#x26;token=f123e873-ad46-4540-914d-5edf75eab15f" alt=""><figcaption><p>Example form in action</p></figcaption></figure>
