This module provisions Atlassian structure (Jira projects, Ops teams/schedules) and invokes a deterministic seeder to generate narrative-shaped demo data for Developer Health analytics.
- 10 Jira Software projects
- 10 Ops teams with weekly on-call rotations
- ~12k Jira issues across 24 months
- Incidents + postmortem follow-ups (labeled and linked)
- Sprint history and spillover (when Agile APIs are available)
out/manifest.jsonwith distribution summaries
- Jira Cloud + Jira Software
- Atlassian Ops (JSM Ops/On-call) access for the same site
- API token with project admin access
- Python 3 with
pip3(PyYAML and requests will be auto-installed by Terraform)
Set the following via terraform.tfvars or environment variables:
jira_url(e.g.https://your-domain.atlassian.net)jira_user(email)jira_tokenatlassian_cloud_idatlassian_domainatlassian_org_idproject_lead_account_id(optional; defaults to current admin user)enable_project_creation(optional; set to false if projects already exist)team_member_account_ids(list; optional)generated_user_count(optional)generated_user_domain(optional)enable_user_creation(optional)
Optional toggles:
enable_issue_creation(defaultfalse- set totrueto create issues)enable_sprints(defaulttrue)enable_transitions(defaulttrue)disable_incidents(defaultfalse- set totrueto skip incidents)enable_comments(defaultfalse)
cd atlassian
terraform init
terraform applyTo run in dry-run mode (manifest only):
# terraform.tfvars
# enable_issue_creation defaults to false, so dry-run is the default behavior
# To actually create issues, set:
enable_issue_creation = trueterraform destroyThe seeder is idempotent for issues: it uses a deterministic external id stored as a label (extid-<hash>). Re-running terraform apply skips previously seeded issues.
The seeder retries failed API calls up to 3 times with a short sleep. If you hit rate limits, re-run terraform apply after a few minutes.
- Project admin for Jira project creation
- Issue create + transition for Jira and JSM projects
- Ops team and schedule management access
Jira Cloud does not allow backdating created/resolved without import permissions. This seeder stores simulated timestamps in the issue property seed_meta and in out/manifest.json for analytics.
seed/story_map.yamlcontrols project/team mapping and arc distributionsseed/seed_jira.pycontains the deterministic data generatorout/manifest.jsonis produced after seeding