Introducing the Devfile AI Assistant

In software development, it’s important to be efficient. Whether you’re an experienced developer or just starting, setting up your development environment can be complex and time-consuming. That’s where the Devfile AI Assistant comes in. It’s designed to help developers create devfiles easily without needing in-depth knowledge of the devfile syntax or structure. It uses a devfile knowledge base to help you craft a devfile, making sure your development environment is set up right.

Note
Another tool that simplifies creating devfile is the VS Code Walkthrough Extension for Devfile. It provides an interactive guide to help users understand and utilize devfiles within Visual Studio Code. Using a wizard, you can easily create a devfile to customize your Cloud Development Environment.

What is a devfile?

Devfiles are configuration files that define development environments. They specify the components, commands, events etc. that make up a development workspace. They play a central role in the workflow of Eclipse Che.

In Eclipse Che, devfiles are used to automate the setup of development environments. By providing a devfile, developers can ensure a consistent environment across the team, getting rid of the "works on my machine" problems. When a devfile is applied, Eclipse Che provisions the specified containers, clones the necessary repositories, and sets up the workspace with all the tools and dependencies required for development. This makes them an essential tool for modern cloud-based development.

Devfile→Eclipse-Che→CDE

 

Step-by-step example of how to create a devfile

Let’s check out some real-life examples of how the Devfile AI Assistant can help you in creating devfiles for your projects.

  1. Start by providing a basic devfile.

    Request:

    Provide a basic devfile.

    Response:

    schemaVersion: 2.3.0
    metadata:
      name: basic-devfile
    components:
      - name: tools
        container:
          image: quay.io/devfile/universal-developer-image:latest
  2. Add a project to the devfile.

    Important
    Even though it is possible to define projects in a devfile explicitly, it is recommended to add .devfile.yaml or devfile.yaml file to the root of the repository which allows skipping the project definition on the devfile level.

    Request:

    Add https://github.com/eclipse-che/che-server git project.

    Response:

    schemaVersion: 2.3.0
    metadata:
      name: basic-devfile
    components:
      - name: tools
        container:
          image: quay.io/devfile/universal-developer-image:latest
    projects:
      - name: che-server
        git:
          remotes:
            origin: https://github.com/eclipse-che/che-server.git
  3. Add a new component to the devfile.

    Request:

    Add PostgreSQL component.

    Response:

    schemaVersion: 2.3.0
    metadata:
      name: devfile
    components:
      - name: tools
        container:
          image: quay.io/devfile/universal-developer-image:latest
      - name: postgres
        container:
          image: postgres:latest
          env:
            - name: POSTGRES_DB
              value: mydatabase
            - name: POSTGRES_USER
              value: user
            - name: POSTGRES_PASSWORD
              value: password
    projects:
      - name: che-server
        git:
          remotes:
            origin: https://github.com/eclipse-che/che-server.git
  4. Add a volume to the devfile.

    Request:

    Add 2Gi volume in home user directory to store Maven artifacts.

    Response:

    schemaVersion: 2.3.0
    metadata:
      name: devfile
    components:
      - name: tools
        container:
          image: quay.io/devfile/universal-developer-image:latest
          volumeMounts:
            - name: maven-artifacts
              path: /home/user/.m2
      - name: postgres
        container:
          image: postgres:latest
          env:
            - name: POSTGRES_DB
              value: mydatabase
            - name: POSTGRES_USER
              value: user
            - name: POSTGRES_PASSWORD
              value: password
      - name: maven-artifacts
        volume:
          size: 2Gi
    projects:
      - name: che-server
        git:
          remotes:
            origin: https://github.com/eclipse-che/che-server.git
  5. Add command to the devfile.

    Request:

    Add command to build a java project.

    Response:

    schemaVersion: 2.3.0
    metadata:
      name: devfile
    components:
      - name: tools
        container:
          image: quay.io/devfile/universal-developer-image:latest
          volumeMounts:
            - name: maven-artifacts
              path: /home/user/.m2
      - name: postgres
        container:
          image: postgres:latest
          env:
            - name: POSTGRES_DB
              value: mydatabase
            - name: POSTGRES_USER
              value: user
            - name: POSTGRES_PASSWORD
              value: password
      - name: maven-artifacts
        volume:
          size: 2Gi
    projects:
      - name: che-server
        git:
          remotes:
            origin: https://github.com/eclipse-che/che-server.git
    commands:
      - id: build-java-project
        exec:
          commandLine: mvn clean install
          component: tools
          group:
            kind: build
            isDefault: true
          label: Build Java Project
          workingDir: /projects/che-server
  6. Add resource limits to the devfile.

    Request:

    Add resource limits to all components.

    Response:

    schemaVersion: 2.3.0
    metadata:
      name: devfile
    components:
      - name: tools
        container:
          image: quay.io/devfile/universal-developer-image:latest
          volumeMounts:
            - name: maven-artifacts
              path: /home/user/.m2
          cpuLimit: 2
          memoryLimit: 4Gi
      - name: postgres
        container:
          image: postgres:latest
          env:
            - name: POSTGRES_DB
              value: mydatabase
            - name: POSTGRES_USER
              value: user
            - name: POSTGRES_PASSWORD
              value: password
          cpuLimit: 1
          memoryLimit: 2Gi
      - name: maven-artifacts
        volume:
          size: 2Gi
    projects:
      - name: che-server
        git:
          remotes:
            origin: https://github.com/eclipse-che/che-server.git
    commands:
      - id: build-java-project
        exec:
          commandLine: mvn clean install
          component: tools
          group:
            kind: build
            isDefault: true
          label: Build Java Project
          workingDir: /projects/che-server
  7. Add metadata to the devfile.

    Request:

    Add metadata based on the devfile.

    Response:

    schemaVersion: 2.3.0
    metadata:
      name: devfile
      displayName: Java with PostgreSQL Dev Environment
      description: A development environment for a Java project with PostgreSQL database support.
      language: Java
      projectType: Java Application
      version: 1.0.0
      provider: Eclipse Che
      tags:
        - java
        - postgres
        - maven
        - database
    components:
      - name: tools
        container:
          image: quay.io/devfile/universal-developer-image:latest
          volumeMounts:
            - name: maven-artifacts
              path: /home/user/.m2
          cpuLimit: 2
          memoryLimit: 4Gi
      - name: postgres
        container:
          image: postgres:latest
          env:
            - name: POSTGRES_DB
              value: mydatabase
            - name: POSTGRES_USER
              value: user
            - name: POSTGRES_PASSWORD
              value: password
          cpuLimit: 1
          memoryLimit: 2Gi
      - name: maven-artifacts
        volume:
          size: 2Gi
    projects:
      - name: che-server
        git:
          remotes:
            origin: https://github.com/eclipse-che/che-server.git
    commands:
      - id: build-java-project
        exec:
          commandLine: mvn clean install
          component: tools
          group:
            kind: build
            isDefault: true
          label: Build Java Project
          workingDir: /projects/che-server

Conclusion

Are you a developer looking to simplify setting up your development environment? The Devfile AI Assistant is here to help! It provides clear and accurate configurations, taking the complexity out of the process. Give the Devfile AI Assistant a try today!