ITADN
MeltanoLabs/tap-jira
MeltanoLabs/tap-jira · 文件 下载 ZIP
文件最后提交记录最后更新时间
README.md

tap-jira

tap-jira tap class.

Built with the Meltano Singer SDK.

Capabilities

  • catalog
  • state
  • discover
  • about
  • stream-maps
  • schema-flattening
  • batch

Supported Python Versions

  • 3.10
  • 3.11
  • 3.12
  • 3.13

Settings

SettingRequiredDefaultDescription
start_dateFalseNoneEarliest record date to sync
end_dateFalseNoneLatest record date to sync
domainTrueNoneThe Domain for your Jira account, e.g. mycompany.atlassian.net
api_tokenTrueNoneJira API Token.
emailTrueNoneThe user email for your Jira account.
cloud_idFalseNoneThe Cloud ID for your Jira account. Optional - use with granular access tokens and OAuth to access Atlassian's cloud-based API URLs.
page_sizeFalseNone
page_size.issuesFalse100Page size for issues stream
stream_optionsFalseNoneOptions for individual streams
stream_options.issuesFalseNoneOptions specific to the issues stream
stream_options.issues.jqlFalseid != nullA JQL query to filter issues
stream_options.issues.fieldsFalse*allA comma-separated list of fields to include. All fields are included by default.
include_audit_logsFalseFalseInclude the audit logs stream

Built-in capabilities

SettingRequiredDefaultDescription
stream_mapsFalseNoneConfig object for stream maps capability. For more information check out Stream Maps.
stream_map_configFalseNoneUser-defined config values to be used within map expressions.
faker_configFalseNoneConfig for the Faker instance variable fake used within map expressions. Only applicable if the plugin specifies faker as an addtional dependency (through the singer-sdk faker extra or directly).
faker_config.seedFalseNoneValue to seed the Faker generator for deterministic output: https://faker.readthedocs.io/en/master/#seeding-the-generator
faker_config.localeFalseNoneOne or more LCID locale strings to produce localized output for: https://faker.readthedocs.io/en/master/#localization
flattening_enabledFalseNone'True' to enable schema flattening and automatically expand nested properties.
flattening_max_depthFalseNoneThe max depth to flatten schemas.
batch_configFalseNoneConfiguration for BATCH message capabilities.
batch_config.encodingFalseNoneSpecifies the format and compression of the batch files.
batch_config.encoding.formatFalseNoneFormat to use for batch files.
batch_config.encoding.compressionFalseNoneCompression format to use for batch files.
batch_config.storageFalseNoneDefines the storage layer to use when writing batch files
batch_config.storage.rootFalseNoneRoot path to use when writing batch files.
batch_config.storage.prefixFalseNonePrefix to use when writing batch files.

A full list of supported settings and capabilities is available by running: tap-jira --about

Elastic License 2.0

The licensor grants you a non-exclusive, royalty-free, worldwide, non-sublicensable, non-transferable license to use, copy, distribute, make available, and prepare derivative works of the software.

Installation

uv tool install git+https://github.com/ryan-miranda-partners/tap-jira.git

Configure using environment variables

This Singer tap will automatically import any environment variables within the working directory's .env if the --config=ENV is provided, such that config values will be considered if a matching environment variable is set either in the terminal context or in the .env file.

Source Authentication and Authorization

tap-jira uses Basic Authentication with Jira API tokens. All requests require your domain, email, and API token credentials.

Basic Authentication (API Token)

Required Configuration:

  • domain: Your Atlassian domain (e.g., mycompany.atlassian.net)
  • email: Your Atlassian account email
  • api_token: A Jira API token (see Atlassian API Tokens)

Standard Configuration Example:

{
  "domain": "mycompany.atlassian.net",
  "email": "user@example.com",
  "api_token": "your_api_token_here"
}

Required Scopes

StreamClassic scopesGranular scopes
usersread:jira-userread:application-role:jira
read:avatar:jira
read:group:jira
read:user:jira
fieldsread:jira-workread:avatar:jira
read:field-configuration:jira
read:field:jira
read:project-category:jira
read:project:jira
custom_field_contextsmanage:jira-configurationread:custom-field-contextual-configuration:jira
read:field:jira
custom_field_optionsmanage:jira-configurationread:field.option:jira
server_infoAnyAny
issue_typesread:jira-workread:avatar:jira
read:issue-type:jira
read:project-category:jira
read:project:jira
workflow_statusesread:jira-workread:status:jira
projectsread:jira-workread:application-role:jira
read:avatar:jira
read:group:jira
read:issue-type-hierarchy:jira
read:issue-type:jira
read:project-category:jira
read:project-version:jira
read:project.component:jira
read:project.property:jira
read:project:jira
read:user:jira
project_versionsread:jira-workread:project-version:jira
issuesread:jira-workread:audit-log:jira
read:avatar:jira
read:field-configuration:jira
read:issue-details:jira
read:issue-meta:jira
permissionsmanage:jira-configurationread:permission:jira
project_rolesmanage:jira-configurationread:avatar:jira
read:group:jira
read:project-category:jira
read:project-role:jira
read:project:jira
read:user:jira
prioritiesread:jira-workread:priority:jira
permission_holdersread:jira-workread:application-role:jira
read:avatar:jira
read:field:jira
read:group:jira
read:permission-scheme:jira
read:permission:jira
read:project-category:jira
read:project-role:jira
read:project:jira
read:user:jira
boardsN/Aread:board-scope:jira-software
read:project:jira
sprintsN/Aread:sprint:jira-software
project_role_actorsread:jira-work
manage:jira-configuration
read:application-role:jira
read:avatar:jira
read:group:jira
read:issue-type-hierarchy:jira
read:issue-type:jira
read:project-category:jira
read:project-role:jira
read:project-version:jira
read:project.component:jira
read:project.property:jira
read:project:jira
read:user:jira
audit_recordsmanage:jira-configurationread:audit-log:jira
read:user:jira
dashboardsread:jira-workread:application-role:jira
read:avatar:jira
read:dashboard:jira
read:group:jira
read:issue-type-hierarchy:jira
read:issue-type:jira
read:project-category:jira
read:project-role:jira
read:project-version:jira
read:project.component:jira
read:project:jira
read:user:jira
filtersread:jira-workread:application-role:jira
read:avatar:jira
read:filter:jira
read:group:jira
read:issue-type-hierarchy:jira
read:jql:jira
read:project-role:jira
read:project:jira
read:user:jira
filter_default_share_scopesread:jira-workread:filter.default-share-scope:jira
groups_pickersread:jira-userread:group:jira
licensesmanage:jira-configurationread:license:jira
screensmanage:jira-projectread:avatar:jira
read:project-category:jira
read:project:jira
read:screen:jira
screen_schemesmanage:jira-projectread:issue-type-screen-scheme:jira
read:screen-scheme:jira
statusesmanage:jira-configurationread:workflow:jira
resolutionsread:jira-workread:resolution:jira
workflowsmanage:jira-configurationread:workflow:jira
issue_watchersread:jira-workread:avatar:jira
read:issue.watcher:jira
read:user:jira
issue_changelogread:jira-workread:avatar:jira
read:issue-meta:jira
read:issue.changelog:jira
issue_commentsread:jira-workread:avatar:jira
read:comment.property:jira
read:comment:jira
read:group:jira
read:project-role:jira
read:project:jira
read:user:jira
issue_worklogsread:jira-workread:avatar:jira
read:group:jira
read:issue-worklog.property:jira
read:issue-worklog:jira
read:project-role:jira
read:user:jira
componentsread:jira-workread:application-role:jira
read:avatar:jira
read:group:jira
read:project.component:jira
read:project:jira
read:user:jira

Cloud ID (Optional)

For OAuth2.0 or granular access tokens, you need to use Atlassian's cloud-based API URLs instead of your domain. When provided, cloud_id changes the API URL structure from https://{domain}/rest/api/3 to https://api.atlassian.com/ex/jira/{cloud_id}/rest/api/3. Authentication still uses your Basic Auth credentials.

Configuration with Cloud ID:

{
  "domain": "mycompany.atlassian.net",
  "email": "user@example.com",
  "api_token": "your_api_token_here",
  "cloud_id": "11223344-a1b2-3b33-c444-def123456789"
}

When to use cloud_id:

  • Required when using OAuth-based or granular access token-based Atlassian integrations that require the scoped API
  • Specified by your Atlassian administrator or integration documentation
  • See Atlassian Community Discussion for more context

How to find your Cloud ID:

With a granular access token, you can find your cloud ID using the Atlassian tenant info endpoint:

# Get your accessible resources
curl -u "your-email@example.com:your-api-token" \
  https://mycompany.atlassian.net/_edge/tenant_info

The response will include your cloud ID:

  {"cloudId": "11223344-a1b2-3b33-c444-def123456789"}

Use the cloudId field as your cloud_id configuration value.

Usage

You can easily run tap-jira by itself or in a pipeline using Meltano.

Stream Inheritance

This project uses parent-child streams. Learn more about them here.

Executing the Tap Directly

tap-jira --version
tap-jira --help
tap-jira --config CONFIG --discover > ./catalog.json

Developer Resources

Follow these instructions to contribute to this project.

Initialize your Development Environment

curl -LsSf https://astral.sh/uv/install.sh | sh  # see https://docs.astral.sh/uv/getting-started/installation/
uv sync

Create and Run Tests

Create tests within the tests subfolder and then run:

uv run pytest

You can also test the tap-jira CLI interface directly using uv run:

uv run tap-jira --help

Testing with Meltano

Note: This tap will work in any Singer environment and does not require Meltano. Examples here are for convenience and to streamline end-to-end orchestration scenarios.

Your project comes with a custom meltano.yml project file already created. Open the meltano.yml and follow any "TODO" items listed in the file.

Next, install Meltano (if you haven't already) and any needed plugins:

# Install meltano
uv tool install meltano
# Initialize meltano within this directory
cd tap-jira
meltano install

Now you can test and orchestrate using Meltano:

# Test invocation:
meltano invoke tap-jira --version
# OR run a test `elt` pipeline:
meltano elt tap-jira target-jsonl

SDK Dev Guide

See the dev guide for more instructions on how to use the SDK to develop your own taps and targets.