{"id":21480856,"url":"https://github.com/essentialkaos/perfecto","last_synced_at":"2025-07-15T12:32:50.734Z","repository":{"id":28544488,"uuid":"115184958","full_name":"essentialkaos/perfecto","owner":"essentialkaos","description":"Utility for linting RPM spec files","archived":false,"fork":false,"pushed_at":"2024-11-13T08:56:32.000Z","size":1356,"stargazers_count":7,"open_issues_count":0,"forks_count":2,"subscribers_count":4,"default_branch":"master","last_synced_at":"2024-11-13T09:37:04.665Z","etag":null,"topics":["golang","linter","rpm","tool"],"latest_commit_sha":null,"homepage":"https://kaos.sh/perfecto","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/essentialkaos.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":".github/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}},"created_at":"2017-12-23T09:22:16.000Z","updated_at":"2024-09-05T21:20:14.000Z","dependencies_parsed_at":"2023-09-29T13:41:40.921Z","dependency_job_id":"f3dcb1d7-c0a3-4171-ae18-d565d5336958","html_url":"https://github.com/essentialkaos/perfecto","commit_stats":null,"previous_names":[],"tags_count":46,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/essentialkaos%2Fperfecto","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/essentialkaos%2Fperfecto/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/essentialkaos%2Fperfecto/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/essentialkaos%2Fperfecto/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/essentialkaos","download_url":"https://codeload.github.com/essentialkaos/perfecto/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":226038911,"owners_count":17564064,"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":["golang","linter","rpm","tool"],"created_at":"2024-11-23T12:18:30.908Z","updated_at":"2025-07-15T12:32:50.726Z","avatar_url":"https://github.com/essentialkaos.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\u003ca href=\"#readme\"\u003e\u003cimg src=\".github/images/card.svg\"/\u003e\u003c/a\u003e\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://kaos.sh/r/perfecto\"\u003e\u003cimg src=\"https://kaos.sh/r/perfecto.svg\" alt=\"GoReportCard\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://kaos.sh/y/perfecto\"\u003e\u003cimg src=\"https://kaos.sh/y/f33aad6645de4b798dbc86ad1d82abdc.svg\" alt=\"Codacy badge\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://kaos.sh/c/perfecto\"\u003e\u003cimg src=\"https://kaos.sh/c/perfecto.svg\" alt=\"Coverage Status\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://kaos.sh/w/perfecto/ci-push\"\u003e\u003cimg src=\"https://kaos.sh/w/perfecto/ci-push.svg\" alt=\"GitHub Actions CI Status\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://kaos.sh/w/perfecto/codeql\"\u003e\u003cimg src=\"https://kaos.sh/w/perfecto/codeql.svg\" alt=\"GitHub Actions CodeQL Status\" /\u003e\u003c/a\u003e\n  \u003ca href=\"#license\"\u003e\u003cimg src=\".github/images/license.svg\"/\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\u003ca href=\"#checks\"\u003eChecks\u003c/a\u003e • \u003ca href=\"#installing\"\u003eInstalling\u003c/a\u003e • \u003ca href=\"#usage\"\u003eUsage\u003c/a\u003e • \u003ca href=\"#ci-status\"\u003eCI Status\u003c/a\u003e • \u003ca href=\"#license\"\u003eLicense\u003c/a\u003e\u003c/p\u003e\n\n\u003cbr/\u003e\n\n_perfecto_ is tool for checking perfectly written RPM specs. Currently, _perfecto_ used by default for checking specs for [EK Public Repository](https://kaos.sh/kaos-repo).\n\n![Screenshot](.github/images/screenshot1.png)\n\n![Screenshot](.github/images/screenshot2.png)\n\n### Checks\n\nYou can find additional information about every _perfecto_ check in [project wiki](https://github.com/essentialkaos/perfecto/wiki).\n\n### Installing\n\n#### From sources\n\nMake sure you have a working [Go 1.23+](https://github.com/essentialkaos/.github/blob/master/GO-VERSION-SUPPORT.md) workspace ([instructions](https://go.dev/doc/install)), then:\n\n```bash\ngo install github.com/essentialkaos/perfecto@latest\n```\n\n#### From [ESSENTIAL KAOS Public Repository](https://kaos.sh/kaos-repo)\n\n```bash\nsudo dnf install -y https://pkgs.kaos.st/kaos-repo-latest.el$(grep 'CPE_NAME' /etc/os-release | tr -d '\"' | cut -d':' -f5).noarch.rpm\n\n# EL8 (OracleLinux/Alma/Rocky 8)\nsudo dnf install perfecto\n\n# Alma/Rocky 9\nsudo dnf --enablerepo=crb install perfecto\n# OracleLinux 9\nsudo dnf --enablerepo=ol9_codeready_builder install perfecto\n```\n\n#### Prebuilt binaries\n\nYou can download prebuilt binaries for Linux and macOS from [EK Apps Repository](https://apps.kaos.st/perfecto/latest):\n\n```bash\nbash \u003c(curl -fsSL https://apps.kaos.st/get) perfecto\n```\n\n#### Container image\n\nOfficial _perfecto_ images available on [GitHub Container Registry](https://kaos.sh/p/perfecto) and [Docker Hub](https://kaos.sh/d/perfecto). Install the latest version of [Podman](https://podman.io/getting-started/installation.html) or [Docker](https://docs.docker.com/engine/install/), then:\n\n```bash\ncurl -#L -o perfecto-container https://kaos.sh/perfecto/perfecto-container\nchmod +x perfecto-container\nsudo mv perfecto-container /usr/bin/perfecto\nperfecto your.spec\n```\n\nOfficial container images with _perfecto_:\n\n- [`ghcr.io/essentialkaos/perfecto:micro`](https://kaos.sh/p/perfecto) (_without_ `rpmlint`)\n- [`ghcr.io/essentialkaos/perfecto:ol8`](https://kaos.sh/p/perfecto) (_with_ `rpmlint`)\n- [`ghcr.io/essentialkaos/perfecto:ol9`](https://kaos.sh/p/perfecto) (_with_ `rpmlint`)\n- [`essentialkaos/perfecto:micro`](https://kaos.sh/d/perfecto) (_without_ `rpmlint`)\n- [`essentialkaos/perfecto:ol8`](https://kaos.sh/d/perfecto) (_with_ `rpmlint`)\n- [`essentialkaos/perfecto:ol9`](https://kaos.sh/d/perfecto) (_with_ `rpmlint`)\n\n#### Using with Github Actions\n\nFor using latest stable version _perfecto_ with Github Actions use this `perfecto.yml` file or add it to your workflow:\n\n```yaml\nname: Perfecto\n\non:\n  push:\n    branches: [master, develop]\n  pull_request:\n    branches: [master]\n\njobs:\n  Perfecto:\n    name: Perfecto\n    runs-on: ubuntu-latest\n\n    steps:\n      - name: Code checkout\n        uses: actions/checkout@v3\n\n      - name: Login to DockerHub\n        uses: docker/login-action@v2\n        with:\n          registry: ghcr.io\n          username: ${{ github.actor }}\n          password: ${{ secrets.GITHUB_TOKEN }}\n\n      - name: Check specs with Perfecto\n        uses: essentialkaos/perfecto-action@v1\n        with:\n          files: myapp.spec\n```\n\nAdditional information about action configuration can be found on [the official GitHub action page](https://github.com/marketplace/actions/ek-perfecto).\n\n### Usage\n\n\u003cp align=\"center\"\u003e\u003cimg src=\".github/images/usage.svg\"/\u003e\u003c/p\u003e\n\n### CI Status\n\n| Branch | Status |\n|--------|--------|\n| `master` | [![CI](https://kaos.sh/w/perfecto/ci-push.svg?branch=master)](https://kaos.sh/w/perfecto/ci-push?query=branch:master) |\n| `develop` | [![CI](https://kaos.sh/w/perfecto/ci-push.svg?branch=develop)](https://kaos.sh/w/perfecto/ci-push?query=branch:develop) |\n\n### Contributing\n\nBefore contributing to this project please read our [Contributing Guidelines](https://github.com/essentialkaos/.github/blob/master/CONTRIBUTING.md).\n\n### License\n\n[Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0)\n\n\u003cp align=\"center\"\u003e\u003ca href=\"https://kaos.dev\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/essentialkaos/.github/refs/heads/master/images/ekgh.svg\"/\u003e\u003c/a\u003e\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fessentialkaos%2Fperfecto","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fessentialkaos%2Fperfecto","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fessentialkaos%2Fperfecto/lists"}