{"id":22128614,"url":"https://github.com/redhat-plumbers-in-action/tracker-validator","last_synced_at":"2025-10-03T21:05:31.532Z","repository":{"id":172008367,"uuid":"648621958","full_name":"redhat-plumbers-in-action/tracker-validator","owner":"redhat-plumbers-in-action","description":"🕵️ GitHub Action that validates provided Bugzilla or Jira issues","archived":false,"fork":false,"pushed_at":"2024-11-20T16:58:13.000Z","size":12502,"stargazers_count":1,"open_issues_count":4,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2024-11-29T19:36:57.099Z","etag":null,"topics":["bugzilla","github-action","jira","tickets","typescript","validation"],"latest_commit_sha":null,"homepage":"","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/redhat-plumbers-in-action.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-06-02T12:01:06.000Z","updated_at":"2024-11-01T12:02:22.000Z","dependencies_parsed_at":null,"dependency_job_id":"a54f2f8c-018a-40fe-8899-3df9714c6ccf","html_url":"https://github.com/redhat-plumbers-in-action/tracker-validator","commit_stats":null,"previous_names":["jamacku/verify-tracker"],"tags_count":13,"template":false,"template_full_name":"redhat-plumbers-in-action/typescript-action","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redhat-plumbers-in-action%2Ftracker-validator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redhat-plumbers-in-action%2Ftracker-validator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redhat-plumbers-in-action%2Ftracker-validator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redhat-plumbers-in-action%2Ftracker-validator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/redhat-plumbers-in-action","download_url":"https://codeload.github.com/redhat-plumbers-in-action/tracker-validator/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":227606203,"owners_count":17792786,"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","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":["bugzilla","github-action","jira","tickets","typescript","validation"],"created_at":"2024-12-01T17:46:16.371Z","updated_at":"2025-10-03T21:05:31.463Z","avatar_url":"https://github.com/redhat-plumbers-in-action.png","language":"TypeScript","readme":"\u003c!-- markdownlint-disable MD033 MD041 --\u003e\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/redhat-plumbers-in-action/team/blob/6d8bd1a33a783c762e22c668427922bfd8b01e40/members/purple-plumber.png\" width=\"100\" /\u003e\n  \u003ch1 align=\"center\"\u003eTracker Validator\u003c/h1\u003e\n\u003c/p\u003e\n\n[![GitHub Marketplace][market-status]][market] [![Lint Code Base][linter-status]][linter] [![Unit Tests][test-status]][test] [![CodeQL][codeql-status]][codeql] [![Check dist/][check-dist-status]][check-dist]\n\n[![codecov][codecov-status]][codecov]\n\n\u003c!-- Status links --\u003e\n\n[market]: https://github.com/marketplace/actions/tracker-validator\n[market-status]: https://img.shields.io/badge/Marketplace-Tracker%20Validator-blue.svg?colorA=24292e\u0026colorB=0366d6\u0026style=flat\u0026longCache=true\u0026logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAM6wAADOsB5dZE0gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAERSURBVCiRhZG/SsMxFEZPfsVJ61jbxaF0cRQRcRJ9hlYn30IHN/+9iquDCOIsblIrOjqKgy5aKoJQj4O3EEtbPwhJbr6Te28CmdSKeqzeqr0YbfVIrTBKakvtOl5dtTkK+v4HfA9PEyBFCY9AGVgCBLaBp1jPAyfAJ/AAdIEG0dNAiyP7+K1qIfMdonZic6+WJoBJvQlvuwDqcXadUuqPA1NKAlexbRTAIMvMOCjTbMwl1LtI/6KWJ5Q6rT6Ht1MA58AX8Apcqqt5r2qhrgAXQC3CZ6i1+KMd9TRu3MvA3aH/fFPnBodb6oe6HM8+lYHrGdRXW8M9bMZtPXUji69lmf5Cmamq7quNLFZXD9Rq7v0Bpc1o/tp0fisAAAAASUVORK5CYII=\n\n[linter]: https://github.com/redhat-plumbers-in-action/tracker-validator/actions/workflows/lint.yml\n[linter-status]: https://github.com/redhat-plumbers-in-action/tracker-validator/actions/workflows/lint.yml/badge.svg\n\n[test]: https://github.com/redhat-plumbers-in-action/tracker-validator/actions/workflows/unit-tests.yml\n[test-status]: https://github.com/redhat-plumbers-in-action/tracker-validator/actions/workflows/unit-tests.yml/badge.svg\n\n[codeql]: https://github.com/redhat-plumbers-in-action/tracker-validator/actions/workflows/codeql-analysis.yml\n[codeql-status]: https://github.com/redhat-plumbers-in-action/tracker-validator/actions/workflows/codeql-analysis.yml/badge.svg\n\n[check-dist]: https://github.com/redhat-plumbers-in-action/tracker-validator/actions/workflows/check-dist.yml\n[check-dist-status]: https://github.com/redhat-plumbers-in-action/tracker-validator/actions/workflows/check-dist.yml/badge.svg\n\n[codecov]: https://codecov.io/github/redhat-plumbers-in-action/tracker-validator\n[codecov-status]: https://codecov.io/github/redhat-plumbers-in-action/tracker-validator/graph/badge.svg?token=LKx67sWeC6\n\n\u003c!-- --\u003e\n\nThe purpose of this action is to offer reliable validator Red Hat trackers like [Bugzilla](https://bugzilla.redhat.com/) and [JIRA](https://issues.redhat.com).\n\n## Features\n\n* product, component and flags validation\n* feedback in form of labels and status check directly on Pull Requests\n\n## Usage\n\n```yml\nname: Gather Pull Request Metadata\non:\n  pull_request:\n    types: [ opened, reopened, synchronize ]\n    branches: [ main ]\n\npermissions:\n  contents: read\n\njobs:\n  gather-metadata:\n    runs-on: ubuntu-latest\n\n    steps:\n      - name: Repository checkout\n        uses: actions/checkout@v3\n\n      - id: Metadata\n        name: Gather Pull Request Metadata\n        uses: redhat-plumbers-in-action/gather-pull-request-metadata@v1\n\n      - name: Upload artifact with gathered metadata\n        uses: actions/upload-artifact@v3\n        with:\n          name: pr-metadata\n          path: ${{ steps.Metadata.outputs.metadata-file }}\n```\n\n```yml\nname: Tracker Validator\non:\n  workflow_run:\n    workflows: [ Gather Pull Request Metadata ]\n    types:\n      - completed\n\npermissions:\n  contents: read\n\njobs:\n  download-metadata:\n    if: \u003e\n      github.event.workflow_run.event == 'pull_request' \u0026\u0026\n      github.event.workflow_run.conclusion == 'success'\n    runs-on: ubuntu-latest\n\n    outputs:\n      pr-metadata: ${{ steps.Artifact.outputs.pr-metadata-json }}\n\n    steps:\n      - id: Artifact\n        name: Download Artifact\n        uses: redhat-plumbers-in-action/download-artifact@v1\n        with:\n          name: pr-metadata\n\n  commit-linter:\n    needs: [ download-metadata ]\n    runs-on: ubuntu-latest\n\n    outputs:\n      validated-pr-metadata: ${{ steps.commit-linter.outputs.validated-pr-metadata }}\n\n    permissions:\n      # required for creation of checks\n      checks: write\n      # required for PR comments and set labels\n      pull-requests: write\n\n    steps:\n      - id: commit-linter\n        name: Lint Commits\n        uses: redhat-plumbers-in-action/advanced-commit-linter@v1\n        with:\n          pr-metadata: ${{ needs.download-metadata.outputs.pr-metadata }}\n          token: ${{ secrets.GITHUB_TOKEN }}\n\n  tracker-validator:\n    needs: [ download-metadata, commit-linter ]\n    runs-on: ubuntu-latest\n\n    outputs:\n      validated-pr-metadata: ${{ steps.commit-linter.outputs.validated-pr-metadata }}\n\n    permissions:\n      # required for creation of checks\n      checks: write\n      # required for PR comments and set labels\n      pull-requests: write\n\n    steps:\n      - name: Get Tracker ID\n        run:\n          validated-pr-metadata\n\n      - id: tracker-validator\n        name: Validate Tracker\n        uses: redhat-plumbers-in-action/tracker-validator@v1\n        with:\n          pr-metadata: ${{ needs.download-metadata.outputs.pr-metadata }}\n          product: Red Hat Enterprise Linux 9\n          component: systemd\n          tracker: ${{ fromJSON(needs.commit-linter.outputs.validated-pr-metadata).validation.tracker.id }}\n          tracker-type: ${{ fromJSON(needs.commit-linter.outputs.validated-pr-metadata).validation.tracker.type }}\n          bugzilla-instance: https://bugzilla.stage.redhat.com\n          bugzilla-api-token: ${{ secrets.BUGZILLA_API_TOKEN }}\n          jira-instance: https://issues.redhat.com\n          jira-api-token: ${{ secrets.JIRA_API_TOKEN }}\n          token: ${{ secrets.GITHUB_TOKEN }}\n```\n\n## Configuration options\n\nAction currently accepts the following options:\n\n```yml\n# ...\n\n- uses: redhat-plumbers-in-action/tracker-validator@v1\n  with:\n    pr-metadata:        \u003cpr-metadata.json\u003e\n    config-path:        \u003cpath to config file\u003e\n    tracker:            \u003ctracker ID\u003e\n    tracker-type:       \u003ctracker type\u003e\n    product:            \u003cproduct name\u003e\n    component:          \u003ccomponent name\u003e\n    bugzilla-instance:  \u003cBugzilla instance URL\u003e\n    bugzilla-api-token: \u003cBugzilla API token\u003e\n    jira-instance:      \u003cJira instance URL\u003e\n    jiira-api-token:    \u003cJira API token\u003e\n    set-status:         \u003ctrue or false\u003e\n    status-title:       \u003cstatus title\u003e\n    token:              \u003cGitHub token or PAT\u003e\n\n# ...\n```\n\n### pr-metadata\n\nStringified JSON Pull Request metadata provided by GitHub Action [`redhat-plumbers-in-action/gather-pull-request-metadata`](https://github.com/redhat-plumbers-in-action/gather-pull-request-metadata).\n\nPull Request metadata has the following format: [metadata format](https://github.com/redhat-plumbers-in-action/gather-pull-request-metadata#metadata)\n\n* default value: `undefined`\n* requirements: `required`\n\n### config-path\n\nPath to configuration file. Configuration file format is described in: [Configuration section](#configuration).\n\n* default value: `.github/tracker-validator.yml`\n* requirements: `optional`\n\n### tracker\n\nThe tracker identificator. For example, for Bugzilla: `tracker: 1234567`.\n\n* default value: `undefined`\n* requirements: `required`\n\n### tracker-type\n\nThe tracker type. Currently supported: `bugzilla` and `jira`.\n\n* default value: `undefined`\n* requirements: `required`\n\n### component\n\nComponent name is used for validation if provided tracker is targeting the expected component. For example, for Bugzilla: `component: systemd`. If component is not provided, validation will be skipped.\n\n* default value: `undefined`\n* requirements: `optional`\n\n### bugzilla-instance\n\nThe URL of the Bugzilla instance on which will be performed API requests and validation of trackers. For example: `bugzilla-instance: https://bugzilla.redhat.com`.\n\n* default value: `undefined`\n* requirements: `optional`\n\n### bugzilla-api-token\n\nThe Bugzilla API token is used for performing API requests. The token should be stored as GitHub secret. Never paste the token directly into the workflow file.\n\n* default value: `undefined`\n* requirements: `optional`\n\n### jira-instance\n\nThe URL of the Jira instance on which will be performed API requests and validation of trackers. For example: `jira-instance: https://issues.redhat.com`.\n\n* default value: `undefined`\n* requirements: `required`\n\n### jira-api-token\n\nThe Jira API token is used for performing API requests. The token should be stored as GitHub secret. Never paste the token directly into the workflow file.\n\n* default value: `undefined`\n* requirements: `optional`\n\n### set-status\n\nSet status on Pull Request. If enabled, Action will create check-run status with validation results.\n\n* default value: `false`\n* requirements: `optional`\n\n### status-title\n\nOptional H3 title of status message.\n\n* default value: `Tracker validation`\n* requirements: `optional`\n\n### token\n\nGitHub token or PAT is used for creating comments on Pull Request and setting checks.\n\n```yml\n# required permission\npermissions:\n  checks: write\n  pull-requests: write\n```\n\n* default value: `undefined`\n* requirements: `required`\n* recomended value: `secrets.GITHUB_TOKEN`\n\n## Configuration\n\n```yml\nlabels:\n  missing-tracker: tracker/missing\n  invalid-product: tracker/invalid-product\n  invalid-component: tracker/invalid-component\n  unapproved: tracker/unapproved\nproducts: []\n```\n\n### `labels` keyword\n\nAllows you to set custom labels for certain conditions. When no value is provided, default value is used.\n\n#### `missing-tracker` keyword\n\nName of the label which will be set when tracker is missing.\n\n* default value: `tracker/missing`\n\n#### `invalid-product` keyword\n\nName of the label which will be set when tracker is targeting invalid product.\n\n* default value: `tracker/invalid-product`\n\n#### `invalid-component` keyword\n\nName of the label which will be set when tracker is targeting invalid component.\n\n* default value: `tracker/invalid-component`\n\n#### `unapproved` keyword\n\nName of the label which will be set when tracker is not approved.\n\n* default value: `tracker/unapproved`\n\n### `product` keyword\n\nProduct name is used for validation if provided tracker is targeting the expected product. For example, for Bugzilla: `product: Red Hat Enterprise Linux 9`. If product is not provided, validation will be skipped.\n\n* default value: `undefined`\n* requirements: `optional`\n\n## Outputs\n\n### `status`\n\nMessage with status of Tracker validation.\n\n## Limitations\n\n* Status checks from Pull Request Validator are randomly assigned to check suites, GitHub API for check suites doesn't provide a way to assign a check to a specific suite.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fredhat-plumbers-in-action%2Ftracker-validator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fredhat-plumbers-in-action%2Ftracker-validator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fredhat-plumbers-in-action%2Ftracker-validator/lists"}