Crates.io | backlogr |
lib.rs | backlogr |
version | 0.0.1 |
created_at | 2025-05-30 16:46:28.551254+00 |
updated_at | 2025-06-06 04:36:15.550747+00 |
description | CLI for interacting with the Taiga REST API |
homepage | https://github.com/lauacosta/backlogr |
repository | https://github.com/lauacosta/backlogr |
max_upload_size | |
id | 1695335 |
size | 62,290 |
A work-in-progress CLI for interacting with the Taiga REST API.
β οΈ Personal Tool Warning
backlogr
is tailored for personal CI workflows and only implements what I need.
It is not a general-purpose client and may never be. Current limitations include:
- Only supports User Stories (no tasks, issues, or epics)
- Basic status transitions only (New β WIP β Done)
- No bulk operations or advanced filtering
- Limited error handling and validation
export USERNAME=your_taiga_username
export PASSWORD=your_taiga_password
export PROJECT_NAME=your_project_name
# Create a new story
backlogr create
# List all stories
backlogr list
# Move story #10 to work in progress
backlogr wip 10
# Mark story #10 as done
backlogr done 10
# Delete story #10
backlogr delete 10
cargo binstall backlogr
backlogr --version
cargo install backlogr
backlogr --version
# Download the latest release for your platform
curl -L https://github.com/lauacosta/backlogr/releases/download/v0.0.1/backlogr-v0.0.1-x86_64-unknown-linux-musl.tar.gz | tar xz
sudo mv backlogr-v0.0.1-x86_64-unknown-linux-musl/backlogr /usr/local/bin/
# Requires Rust 1.85.1+
git clone https://github.com/lauacosta/backlogr.git
cd backlogr
cargo install --path .
backlogr --version
New
, WIP
, and Done
backlogr --username <USERNAME> --password <PASSWORD> --project_name <PROJECT_NAME> [COMMAND]
export USERNAME=myuser
export PASSWORD=mypass
export PROJECT_NAME=myproject
backlogr [COMMAND]
ββββ ββββββββββ β β βββ βββ
ββ ββββββββββββββ β β β β
βββββ β ββ β βββββ β
βββββ β β β βββ
ββ ββ
ββββ
βββββ
@lauacosta/backlogr 0.0.1
Usage: backlogr --username <USERNAME> --password <PASSWORD> --project_name <PROJECT_NAME> [COMMAND]
Commands:
create Creates a new User Story
wip Updates a User Story to 'In Progress'
done Updates a User Story to 'Done'
delete Deletes a User Story
list List User stories
help Print this message or the help of the given subcommand(s)
Options:
--username <USERNAME> Taiga Username [env: USERNAME=]
--password <PASSWORD> Taiga password [env: PASSWORD=]
--project_name <PROJECT_NAME> Taiga project name [env: PROJECT_NAME=]
-h, --help Print help
-V, --version Print version
# Interactive creation
backlogr create --description "Implement user authentication" --description "Add JWT-based auth system"
# β
Created story: "Implement user authentication" (#42)
backlogr list
# Output:
# π Total user stories: (8)
#
# π New (2)
# #41 Fix login bug
# #43 Update documentation
#
# π In Progress (1)
# #42 Implement user authentication
#
# β
Done (5)
# #40 Setup CI pipeline
# #39 Initial project setup
# ...
# Move to Work in Progress
backlogr wip 10
# β
Story #10 marked as 'In Progress'
# Mark as Done
backlogr done 15
# β
Story #15 marked as 'Done'
backlogr delete 32
# β
Successfully deleted user story (#32)
# GitHub Actions example
env:
USERNAME: ${{ secrets.TAIGA_USERNAME }}
PASSWORD: ${{ secrets.TAIGA_PASSWORD }}
PROJECT_NAME: "MyProject"
# Create deployment story
backlogr create --subject "Deploy v$VERSION" --description "Automated deployment"
# β
Created story: "Deploy v1.0.1" (#42)
# Mark deployment as in progress
backlogr wip 42
# Mark as complete after successful deployment
backlogr done 42
Here's a complete CI script that automatically updates Taiga stories based on commit messages:
#!/bin/bash
set -e
# Check if backlogr is installed
command -v backlogr >/dev/null 2>&1 || {
echo >&2 "β backlogr is required but it's not installed. Aborting."
exit 1
}
# Extract commit message
COMMIT_MSG=$(git log -1 --pretty=%B)
echo "π Parsing commit message: $COMMIT_MSG"
# Parse commit message format: <mod>: <message> (#<id>)
if [[ "$COMMIT_MSG" =~ ^([^:]+):[[:space:]]*(.+)[[:space:]]*\(#([0-9]+)\)$ ]]; then
MOD="${BASH_REMATCH[1]}"
MESSAGE="${BASH_REMATCH[2]}"
TASK_ID="${BASH_REMATCH[3]}"
echo "β
Extracted from commit:"
echo " - Modifier: $MOD"
echo " - Message: $MESSAGE"
echo " - Task ID: $TASK_ID"
else
echo "β Invalid commit format detected."
echo "βΉοΈ Expected format: <mod>: <message> (#<id>)"
echo "βΉοΈ Examples:"
echo " feat: add user authentication (#123)"
echo " fix: resolve login bug (#456)"
echo " done: complete user profile feature (#789)"
exit 0
fi
# Validate environment variables
USERNAME="${TAIGA_USERNAME:-}"
PASSWORD="${TAIGA_PASSWORD:-}"
PROJECT_NAME="${PROJECT_NAME:-}"
if [ -z "$USERNAME" ] || [ -z "$PASSWORD" ] || [ -z "$PROJECT_NAME" ]; then
echo "β Environment variables TAIGA_USERNAME, TAIGA_PASSWORD and PROJECT_NAME must be set."
exit 1
fi
# Determine backlogr command based on modifier
case "${MOD,,}" in
"feat"|"feature"|"add"|"implement")
COMMAND="wip"
ACTION_DESC="Moving task to 'In Progress'"
;;
"fix"|"bugfix"|"patch"|"hotfix")
COMMAND="wip"
ACTION_DESC="Moving task to 'In Progress' (fixing)"
;;
"done"|"complete"|"finish"|"resolve")
COMMAND="done"
ACTION_DESC="Moving task to 'Done'"
;;
"delete"|"remove"|"cancel"|"drop")
COMMAND="delete"
ACTION_DESC="Deleting task"
;;
"wip"|"progress"|"start"|"begin")
COMMAND="wip"
ACTION_DESC="Moving task to 'In Progress'"
;;
*)
echo "β οΈ Unknown modifier '$MOD'. Supported modifiers:"
echo " - feat, feature, add, implement β moves to WIP"
echo " - fix, bugfix, patch, hotfix β moves to WIP"
echo " - done, complete, finish, resolve β moves to Done"
echo " - delete, remove, cancel, drop β deletes task"
echo " - wip, progress, start, begin β moves to WIP"
echo "βΉοΈ No action will be taken."
exit 0
;;
esac
echo "π $ACTION_DESC for task #$TASK_ID..."
# Execute backlogr command
if backlogr --username "$USERNAME" --password "$PASSWORD" --project_name "$PROJECT_NAME" "$COMMAND" "$TASK_ID"; then
echo "β
Successfully executed: $ACTION_DESC"
echo "π Commit message: $MESSAGE"
else
echo "β Failed to execute backlogr command"
exit 1
fi
0
: Success1
: General error (authentication, network, etc.)2
: Story not found3
: Invalid project or permissionsbacklogr list
# β Authentication failed: HTTP 401: {"detail": "No active account found with the given credentials", "code": "invalid_credentials"}
# π‘ Troubleshooting authentication:
# β’ Set environment variables:
# export USERNAME=your_taiga_username
# export PASSWORD=your_taiga_password
# β’ Verify credentials by logging into Taiga web interface
# β’ Check if your account is active and not locked
backlogr wip 50
# π Looking up user story with ref #50 in project...
# β User story not found: User story with ref #50 not found.
# π‘ Story 'User story with ref #50 not found.' not found. Try:
# β’ backlogr list # See all available stories
# β’ backlogr create # Create a new story
# β’ Check for typos in the story title
# β’ Ensure you're in the correct project
backlogr list
# β Error: Failed to connect to Taiga instance. Please check your network connection.
# Exit code: 1
MIT License - see LICENSE file for details.