A modern .NET 10 console application to fetch and display status change history from Jira Cloud REST API.
- Fetches issue changelog from Jira Cloud (https://prugramin.atlassian.net)
- Displays all status transitions for a given issue
- Automatic pagination for issues with large changelogs
- Simple console interface
- .NET 10 SDK
- Jira Cloud account with API access
- Jira API token (see setup below)
- Log in to https://id.atlassian.com/manage-profile/security/api-tokens
- Click "Create API token"
- Give it a name (e.g., "Status Scraper")
- Copy the generated token
Copy appsettings.local.json.example to appsettings.local.json:
cd src/JiraStatusScraper
cp appsettings.local.json.example appsettings.local.jsonEdit appsettings.local.json and add your credentials:
{
"Jira": {
"BaseUrl": "https://prugramin.atlassian.net",
"Email": "your-email@example.com",
"ApiToken": "your-api-token-here"
}
}Note: appsettings.local.json is git-ignored to protect your credentials.
dotnet run PROJ-123dotnet runThen enter the issue key when prompted.
Fetching issue PROJ-123...
Issue: PROJ-123 - Implement user authentication
Current Status: Done
Status Change History:
--------------------------------------------------------------------------------
[2024-01-15 09:30:00] PROJ-123: (none) → To Do (by John Doe)
[2024-01-16 14:22:00] PROJ-123: To Do → In Progress (by Jane Smith)
[2024-01-18 11:45:00] PROJ-123: In Progress → Code Review (by Jane Smith)
[2024-01-19 10:15:00] PROJ-123: Code Review → Done (by John Doe)
--------------------------------------------------------------------------------
Total status changes: 4
JiraStatusScraper/
├── Configuration/
│ └── JiraSettings.cs # Configuration model
├── Models/
│ ├── JiraUser.cs # User model
│ ├── JiraIssue.cs # Issue and status models
│ ├── Changelog.cs # Changelog API response models
│ └── StatusChange.cs # Status change representation
├── Services/
│ └── JiraClient.cs # Main Jira API client
├── Program.cs # Application entry point
└── appsettings.json # Default configuration
GetIssueAsync(string issueKey)- Fetch basic issue informationGetStatusChangesAsync(string issueKey)- Fetch all status transitions with automatic paginationGetFullChangelogAsync(string issueKey)- Fetch complete changelog (all field changes)
- Never commit
appsettings.local.jsonto version control - Keep your API token secure
- The API token has the same permissions as your user account
If you get a 401 error, verify:
- Email is correct in
appsettings.local.json - API token is valid and not expired
- Token has proper permissions
- Verify the issue key exists in your Jira instance
- Ensure you have permission to view the issue
MIT