Skip to content

Releases

Taiga Support – Sprints, Stories, Status, and Team Data

Choose a tag to compare

@javiergs javiergs released this 18 Mar 20:43

This release extends Taiga integration by improving support for sprint navigation and adding status retrieval for user stories and tasks, enabling richer project tracking and analytics.

✨ New Features

📌 Sprint Support (Milestones)

  • Retrieve all sprints (milestones) for a project
  • Navigate sprint → user stories hierarchy
  • Uses Taiga API endpoint /api/v1/milestones

📌 User Stories by Sprint

  • Retrieve all user stories associated with a specific sprint
  • Uses Taiga API endpoint /api/v1/userstories?milestone=<sprintId>

📌 Status Retrieval

  • Retrieve user story statuses for a project
  • Retrieve task statuses for a project
  • Enables mapping of workflow states (e.g., New, In Progress, Done)

🔧 API Additions

New methods in TaigaClient:

List<TaigaSprint> getSprints(long projectId)
List<TaigaUserStory> getStoriesBySprint(long sprintId)

List<TaigaStatus> getUserStoryStatuses(long projectId)
List<TaigaStatus> getTaskStatuses(long projectId)

🎯 Purpose

These additions enable applications using TULIP to:

  • Navigate the full project → sprint → story → task hierarchy
  • Retrieve workflow status definitions for stories and tasks
  • Build sprint dashboards and burndown-style views
  • Map and visualize progress across different status categories
  • Integrate Taiga data into external tools with richer semantics

💻 Example Usage

TaigaClient taiga = new TaigaClient(host);
taiga.login(username, password);

// Retrieve sprints
List<TaigaSprint> sprints = taiga.getSprints(projectId);

for (TaigaSprint sprint : sprints) {
    // Retrieve stories per sprint
    List<TaigaUserStory> stories = taiga.getStoriesBySprint(sprint.getId());

    for (TaigaUserStory story : stories) {
        System.out.println(story.getSubject());
    }
}

// Retrieve status mappings
List<TaigaStatus> storyStatuses = taiga.getUserStoryStatuses(projectId);
List<TaigaStatus> taskStatuses = taiga.getTaskStatuses(projectId);

Taiga Support - Now retrieve Sprints and User Stories by Sprint

Choose a tag to compare

@javiergs javiergs released this 12 Mar 21:42

This release adds support for working with sprints (milestones) in Taiga

New Features

  • Retrieve project sprints
  • Added a method to obtain all sprints associated with a project.
  • Uses the Taiga API endpoint /api/v1/milestones.
  • Retrieve user stories by sprint
  • Added a method to obtain all user stories belonging to a specific sprint.
  • Uses the Taiga API endpoint /api/v1/userstories?milestone=.

API Additions

New methods in TaigaClient:

List<TaigaSprint> getSprints(long projectId)
List<TaigaUserStory> getStoriesBySprint(long sprintId)

Purpose

These additions enable applications using TULIP to:
• Navigate the project → sprint → story hierarchy
• Retrieve sprint planning information
• Build sprint dashboards or progress views
• Integrate Taiga sprint data into external tools

Example Usage

TaigaClient client = new TaigaClient(token);

List<TaigaSprint> sprints = client.getSprints(projectId);

for (TaigaSprint sprint : sprints) {
    List<TaigaUserStory> stories = client.getStoriesBySprint(sprint.getId());
}

Notes

In Taiga, sprints are represented as milestones, and the new functionality exposes this concept directly through the TULIP API.

A Lexer Module for Compiler Construction

Choose a tag to compare

@javiergs javiergs released this 10 Mar 02:42

This release introduces a Lexical Analyzer (Lexer) component, designed to support projects in compiler construction
and programming language processing
.

The lexer module provides functionality to scan input source code and convert it into a stream of tokens, which can then be consumed by a parser or other language processing tools.

New Package

tulip.compiler

The new lexer module allows applications to:

  • Read source code from text input
  • Identify lexical elements such as:
    • identifiers
    • keywords
    • numbers
    • operators
    • delimiters
  • Produce a structured stream of tokens for use in parsing stages
  • Support experimentation with language design and compiler
    construction

Example Usage

    Lexer lexer = new Lexer(sourceCode);
    lexer.run();
    Vector<Token> tokens = lexer.getTokens();
    for (Token token : tokens) {
       System.out.println(token);
    }

Adding RTDE Support for Universal Robots e-Series

Choose a tag to compare

@javiergs javiergs released this 07 Mar 03:19

New Feature: Universal Robots RTDE Client

This release introduces Real-Time Data Exchange (RTDE) support in the TULIP library, enabling applications to access real-time data from Universal Robots e-Series collaborative robots.

The RTDE client allows developers to connect to a robot controller and retrieve streaming data such as:

  • Joint positions
  • TCP position and orientation
  • Robot state variables
  • Digital and analog I/O
  • Runtime information from the robot controller

New Package

tulip.ur.rtde

This package provides classes responsible for:

  • RTDE protocol negotiation
  • Output variable configuration
  • Binary data parsing
  • Continuous robot telemetry streaming

Capabilities

The RTDE integration enables applications built with TULIP to:

  • Connect to a Universal Robots e-Series controller
  • Subscribe to real-time robot telemetry
  • Retrieve robot state information at runtime
  • Support robotics experimentation and teaching scenarios

Example Usage

RTDEClient rtde = new RTDEClient("192.168.0.10");
rtde.connect();

RobotState state = rtde.read();

System.out.println("Joint 1 position: " + state.getJointPosition(0));
System.out.println("TCP X position: " + state.getTcpX());

Purpose

This addition expands TULIP beyond software project management and AI integrations by introducing robotics connectivity capabilities.

With this update, TULIP now supports applications that combine:

  • GitHub repositories
  • Taiga project management
  • AI services (Groq)
  • Real-time robotic systems (Universal Robots RTDE)

These capabilities make TULIP a versatile framework for software engineering education, robotics experimentation, and research prototypes involving intelligent systems and human-robot interaction.

Adding Groq API client

Choose a tag to compare

@javiergs javiergs released this 05 Mar 08:23

New Features

  • Added Groq API client support to the TULIP library.
  • New package: tulip.groq

Includes:

  • GroqClient – main interface for interacting with the Groq API
  • GroqConfig – configuration class for API key, base URL, and model
  • GroqMessage – simple message object used for chat interactions

Capabilities

The Groq client supports:

  • Chat completions using Groq LLMs
  • Single prompt requests
  • Multi-message conversations
  • Configurable parameters (model, temperature, max tokens)

Example Usage

GroqConfig cfg = new GroqConfig(apiKey, baseUrl, model);
GroqClient groq = new GroqClient(cfg);

String answer = groq.chat("Explain the pipeline pattern in software engineering.");

Configuration

GROQ_API_KEY
GROQ_BASE_URL=https://api.groq.com/openai/v1
GROQ_MODEL=llama-3.3-70b-versatile

Purpose

This release extends TULIP to support AI-assisted features via Groq,
complementing the existing integrations with GitHub and Taiga.

Adding Taiga Client Integration

Choose a tag to compare

@javiergs javiergs released this 05 Mar 06:57

This update introduces support for Taiga.IO integration.

Previously, TULIP provided functionality only for interacting with the GitHub API. The library now includes a Taiga client module that allows applications to retrieve and interact with project data stored in Taiga. The new Taiga client provides methods to authenticate with the Taiga REST API and retrieve core project management entities, including:

Projects
Sprints (Milestones)
User Stories
Tasks
This addition enables TULIP to interact with both code repositories (GitHub) and project management platforms (Taiga).

v3.0

Choose a tag to compare

@javiergs javiergs released this 29 Nov 11:42
d12ff3b

This release introduces a major upgrades

🚀 Highlights

Unified GitHub URL Parser

A single method now correctly handles:

  • Plain repo URLs
  • /tree/{branch}/{path}
  • /blob/{branch}/{path}
  • URLs missing branch/path (defaults to main)

Enhanced URLObject

  • New isBlob() and isDirectory() helpers
  • Cleaner structure for owner, repository, revision, path, and kind
  • Improved debugging output

GitHub Token Auto-Loading

GitHubHandler now loads a GitHub token from: src/main/resources/tulip.properties
Falls back to anonymous mode with clear error messages if missing.

Better API Error Handling

User-friendly messages for:

  • Missing tokens
  • Rate limits
  • Invalid file/directory URLs
  • Blob/tree misuse

v2.5

Choose a tag to compare

@javiergs javiergs released this 04 Nov 08:47
Fixing listFilesRecursive

v2.4

Choose a tag to compare

@javiergs javiergs released this 04 Nov 08:15
Fixing getFileContentFromUrl

v2.3

Choose a tag to compare

@javiergs javiergs released this 04 Nov 08:08
Fix debug message