{"id":28924076,"url":"https://github.com/dodwmd/yaml-tickets-to-issues","last_synced_at":"2026-04-09T16:52:37.281Z","repository":{"id":294009175,"uuid":"985727470","full_name":"dodwmd/yaml-tickets-to-issues","owner":"dodwmd","description":"A GitHub Action that syncs YAML ticket files to GitHub Issues","archived":false,"fork":false,"pushed_at":"2025-09-01T12:15:19.000Z","size":97,"stargazers_count":0,"open_issues_count":6,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-09-01T14:24:39.114Z","etag":null,"topics":["automation","ci-cd","devops","github-actions","github-issues","project-management","yaml"],"latest_commit_sha":null,"homepage":"https://github.com/dodwmd/yaml-tickets-to-issues#readme","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dodwmd.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-05-18T12:01:36.000Z","updated_at":"2025-05-19T03:35:13.000Z","dependencies_parsed_at":"2025-05-18T13:29:17.127Z","dependency_job_id":"55385987-b593-4151-9510-eeeb9204a25e","html_url":"https://github.com/dodwmd/yaml-tickets-to-issues","commit_stats":null,"previous_names":["dodwmd/yaml-tickets-to-issues"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/dodwmd/yaml-tickets-to-issues","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dodwmd%2Fyaml-tickets-to-issues","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dodwmd%2Fyaml-tickets-to-issues/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dodwmd%2Fyaml-tickets-to-issues/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dodwmd%2Fyaml-tickets-to-issues/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dodwmd","download_url":"https://codeload.github.com/dodwmd/yaml-tickets-to-issues/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dodwmd%2Fyaml-tickets-to-issues/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273747262,"owners_count":25160649,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-05T02:00:09.113Z","response_time":402,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["automation","ci-cd","devops","github-actions","github-issues","project-management","yaml"],"created_at":"2025-06-22T10:03:47.788Z","updated_at":"2026-04-09T16:52:37.273Z","avatar_url":"https://github.com/dodwmd.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# YAML Tickets to GitHub Issues\n\n[![GitHub release](https://img.shields.io/github/v/release/dodwmd/yaml-tickets-to-issues?style=flat-square)](https://github.com/dodwmd/yaml-tickets-to-issues/releases)\n[![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/dodwmd/yaml-tickets-to-issues/ci.yml?branch=master\u0026style=flat-square)](https://github.com/dodwmd/yaml-tickets-to-issues/actions)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg?style=flat-square)](https://opensource.org/licenses/MIT)\n\nA GitHub Action that syncs YAML ticket files with GitHub Issues, making it easy to manage issues as code in your repository.\n\n## Features\n\n- 🚀 **Convert YAML to GitHub Issues** - Define your issues in YAML files and sync them with GitHub\n- 🔄 **Bidirectional Sync** - Updates existing issues when YAML files change\n- 🔍 **Smart File Naming** - Automatically renames YAML files to include GitHub issue numbers\n- 📋 **Rich Issue Templates** - Support for various fields like:\n  - Descriptions and titles\n  - Acceptance criteria\n  - Technical details\n  - Sub-tasks\n  - Dependencies\n  - Metadata (complexity, estimated time, etc.)\n- 🛡️ **Validation** - Built-in YAML schema validation\n- 🔄 **Dry Run Mode** - Preview changes before applying them\n\n## 🚀 Getting Started\n\n### Prerequisites\n\n- A GitHub repository\n- GitHub Actions enabled for your repository\n- Node.js 16+ (for local development)\n\n### Installation\n\n1. **Add the action to your repository**\n\n   Create a new workflow file (e.g., `.github/workflows/sync-issues.yml`) in your repository:\n\n   ```yaml\n   name: Sync YAML Tickets to Issues\n   \n   on:\n     workflow_dispatch:  # Manual trigger\n     push:\n       branches: [ master ]\n       paths:\n         - 'tickets/**'\n   \n   jobs:\n     sync-issues:\n       runs-on: ubuntu-latest\n       steps:\n         - uses: actions/checkout@v3\n         \n         - name: Sync YAML tickets to GitHub Issues\n           uses: dodwmd/yaml-tickets-to-issues@master\n           with:\n             token: ${{ secrets.GITHUB_TOKEN }}\n             tickets-path: 'tickets/'\n             dry-run: 'false'  # Set to 'true' for testing\n             debug: 'false'     # Set to 'true' for verbose debug logging\n   ```\n\n2. **Create a `tickets` directory** in your repository\n\n3. **Add your YAML ticket files** (see example below)\n\n4. **Commit and push** your changes to trigger the workflow\n\n## 🔍 Debugging\n\nTo enable verbose debug logging, set the `debug` input to `true`:\n\n```yaml\n- name: Sync YAML tickets to GitHub Issues\n  uses: dodwmd/yaml-tickets-to-issues@master\n  with:\n    token: ${{ secrets.GITHUB_TOKEN }}\n    debug: 'true'  # Enable debug logging\n```\n\n### Logging Features\n\n- **Timestamps**: Each log entry includes a timestamp and elapsed time\n- **Log Levels**: Different log levels (INFO, WARN, ERROR, DEBUG)\n- **Structured Logging**: Objects are logged in a readable format\n- **Grouping**: Related log messages are grouped together\n- **Emoji Indicators**: Visual indicators for different message types\n- **Debug Mode**: Detailed debugging information when enabled\n\n## 📝 YAML Ticket Format\n\nCreate YAML files in your `tickets/` directory following this format:\n\n```yaml\n# tickets/TICKET-123-my-awesome-feature.yaml\ntitle: \"[FEATURE] Implement Awesome Feature\"\ndescription: |\n  As a user, I want to be able to do something awesome\n  so that I can be more productive.\n\n# Optional fields\nacceptance_criteria:\n  - The feature should work as expected\n  - It should be performant\n  - It should be well-documented\n\ntechnical_details:\n  architecture:\n    - Backend: Node.js with Express\n    - Frontend: React\n    - Database: PostgreSQL\n  performance_considerations:\n    - Should handle 1000+ concurrent users\n    - Response time under 200ms\n\n# Optional: Link to child tickets\nchild_tickets:\n  - id: TICKET-124\n    title: Implement database schema\n  - id: TICKET-125\n    title: Create API endpoints\n\n# Optional: List of sub-tasks\nsub_tasks:\n  - Design the database schema\n  - Implement the backend API\n  - Create the frontend components\n  - Write tests\n\n# Optional: Dependencies\ndependencies:\n  - TICKET-100: Implement authentication\n  - TICKET-101: Set up database\n\n# Optional: Metadata\nestimated_time: 3 days\ncomplexity: Medium\nchange_impact: High\n```\n\n## 🔧 Configuration\n\n### Inputs\n\n| Name | Description | Required | Default |\n|------|-------------|----------|---------|\n| `token` | GitHub token with `repo` scope | Yes | - |\n| `tickets-path` | Path to the directory containing YAML ticket files | No | `tickets/` |\n| `dry-run` | Run without making any changes | No | `false` |\n\n### Outputs\n\nNone\n\n## 🛠️ Development\n\n### Prerequisites\n\n- Node.js 16+\n- npm 7+\n\n### Setup\n\n1. **Clone the repository**\n   ```bash\n   git clone https://github.com/dodwmd/yaml-tickets-to-issues.git\n   cd yaml-tickets-to-issues\n   ```\n\n2. **Install dependencies**\n   ```bash\n   npm ci\n   ```\n\n3. **Build the action**\n   ```bash\n   npm run build\n   ```\n\n### Scripts\n\n- `npm run build` - Build the action\n- `npm run format` - Format code with Prettier\n- `npm run lint` - Lint TypeScript and YAML files\n- `npm test` - Run tests\n- `npm run all` - Run all checks (lint, format, build, test)\n\n## 🤝 Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n\n## 📄 License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## 🙏 Acknowledgments\n\n- Inspired by various issue-as-code approaches\n- Built with ❤️ by the community\n\n## 📚 Examples\n\n### Basic Issue\n\n```yaml\n# tickets/TICKET-101-basic-issue.yaml\ntitle: \"[BUG] Fix login page error\"\ndescription: |\n  Users are seeing a 500 error when trying to log in.\n  \n  **Steps to reproduce:**\n  1. Go to login page\n  2. Enter valid credentials\n  3. Click \"Sign In\"\n  4. See error\n\nacceptance_criteria:\n  - Users can log in successfully\n  - Error message is clear if login fails\n  - Logs contain sufficient information for debugging\n\ndependencies:\n  - TICKET-100: Update authentication service\n\nestimated_time: 2h\ncomplexity: Low\n```\n\n### Feature with Multiple Components\n\n```yaml\n# tickets/TICKET-102-user-profile.yaml\ntitle: \"[FEATURE] User Profile Page\"\ndescription: |\n  As a user, I want to view and edit my profile information\n  so that I can keep my details up to date.\n\nacceptance_criteria:\n  - Users can view their profile information\n  - Users can update their name, email, and profile picture\n  - Changes are validated before saving\n  - Success/error messages are displayed appropriately\n\ntechnical_details:\n  frontend:\n    - New React component: `UserProfile`\n    - Form validation using Formik\n    - Image upload component\n  backend:\n    - New endpoint: `PATCH /api/users/:id`\n    - File storage for profile pictures\n    - Input validation middleware\n\nchild_tickets:\n  - id: TICKET-103\n    title: Implement profile picture upload\n  - id: TICKET-104\n    title: Add email verification\n\nestimated_time: 5 days\ncomplexity: Medium\nchange_impact: Medium\n```\n\n## 🚨 Troubleshooting\n\n### Common Issues\n\n1. **YAML Validation Errors**\n   - Make sure your YAML is properly indented\n   - Use a YAML linter to catch syntax errors\n   - Check for missing colons or incorrect nesting\n\n2. **Permission Issues**\n   - Ensure your GitHub token has the required permissions\n   - The default `GITHUB_TOKEN` has sufficient permissions for most cases\n\n3. **File Naming**\n   - Files should be named in the format `TICKET-{number}-description.yaml`\n   - Numbers will be automatically assigned if not provided\n\n## 📈 Versioning\n\nWe use [SemVer](http://semver.org/) for versioning. For the versions available, see the [releases page](https://github.com/dodwmd/yaml-tickets-to-issues/releases).\n\n## 📜 Changelog\n\nSee [CHANGELOG.md](CHANGELOG.md) for a history of changes to this project.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdodwmd%2Fyaml-tickets-to-issues","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdodwmd%2Fyaml-tickets-to-issues","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdodwmd%2Fyaml-tickets-to-issues/lists"}