{"id":50474910,"url":"https://github.com/softwarefactory-project/python-quay-tool","last_synced_at":"2026-06-01T12:31:31.645Z","repository":{"id":40649069,"uuid":"486071030","full_name":"softwarefactory-project/python-quay-tool","owner":"softwarefactory-project","description":null,"archived":false,"fork":false,"pushed_at":"2025-01-23T14:02:04.000Z","size":95,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-01-23T15:19:52.164Z","etag":null,"topics":["quay","quayio"],"latest_commit_sha":null,"homepage":"","language":"Python","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/softwarefactory-project.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":"2022-04-27T06:21:40.000Z","updated_at":"2025-01-23T14:02:08.000Z","dependencies_parsed_at":"2024-06-25T08:17:00.563Z","dependency_job_id":"30974291-9991-41f0-9e57-4b773139c267","html_url":"https://github.com/softwarefactory-project/python-quay-tool","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/softwarefactory-project/python-quay-tool","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/softwarefactory-project%2Fpython-quay-tool","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/softwarefactory-project%2Fpython-quay-tool/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/softwarefactory-project%2Fpython-quay-tool/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/softwarefactory-project%2Fpython-quay-tool/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/softwarefactory-project","download_url":"https://codeload.github.com/softwarefactory-project/python-quay-tool/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/softwarefactory-project%2Fpython-quay-tool/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33775857,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-01T02:00:06.963Z","response_time":115,"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":["quay","quayio"],"created_at":"2026-06-01T12:31:30.373Z","updated_at":"2026-06-01T12:31:31.639Z","avatar_url":"https://github.com/softwarefactory-project.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Quaytool\n\nThe Quay container image registry has an API, that give\npossibility to maintain organization and repositories in\nautomated way.\n\n## Features of Quaytool\n\nThe Quaytool is using only [API calls](https://docs.quay.io/api/swagger/)\nto:\n\n- set visibility for repository\n- create organization\n- get info about organization\n\n## Future improvements\n\nIn the future, project should provide:\n\n- creating robot and set permissions to it\n\n## Usage\n\nBasic usage of Quay tool\n\nSet image to be public:\n\n```sh\nquaytool --api-url https://quay.dev/api/v1 --token \u003ctoken\u003e --organization myorganization --set-visibility --visibility public\n```\n\nSpecify image repository to be public:\n\n```sh\nquaytool --api-url https://quay.dev/api/v1 --token \u003ctoken\u003e --organization myorganization --repository test --repository test2 --set-visibility --visibility public\n```\n\nSet all repository to be private, but skip some of them:\n\n```sh\nquaytool --api-url https://quay.dev/api/v1 --token \u003ctoken\u003e --organization myorganization --skip-repo test3 --skip-repo test4 --set-visibility --visibility private\n```\n\nList all robots in organization:\n\n```sh\nquay_tool --api-url https://quay.dev/api/v1 --organization test --token sometoken --insecure --list-robots\n```\n\nCreate robot in organization:\n\n```sh\nquay_tool --api-url https://quay.dev/api/v1 --organization test --token sometoken --create-robot bender\n```\n\nSet write permissions for a user for repositories inside the organziation:\n\n```sh\nquaytool  --api-url https://quay.dev/api/v1 --organization test --token sometoken --user test+cirobot --set-permissions\n```\n\nRestore deleted tag:\n\n```sh\nquaytool --api-url https://quay.dev/api/v1 --organization test --token sometoken --tag 14ee273e8565960cf6d5b6e26ae92ade --restore-tag\n```\n\nSet the prototype (default permissions) in the organization.\nBy default it creates prototype with write permissions.\n\nFor a user:\n\n```sh\nquaytool  --api-url https://quay.dev/api/v1 --organization test --token sometoken --create-prototype --user test+cirobot\n```\n\nFor a team:\n\n```sh\nquaytool  --api-url https://quay.dev/api/v1 --organization test --token sometoken --create-prototype --team creators\n```\n\n## Basic workflow how to setup new organziation\n\n- Get the admin token\n\n```sh\ngrep -i admin_token /var/data/quay/config/admin_token | cut -f2 -d'='\n```\n\nNOTE: If you don't have such token on bootstraping the Quay service or\nthe token expired, you need to:\n\n- create organization via Web interface,\n- create new application inside the organization\n- in the new application, generate a token with all available permissions\n- write the token to the file (this one will not expire). It can look like:\n\n```sh\n#!/bin/bash\nADMIN_TOKEN=\u003cmytoken\u003e\n```\n\n- Create organization (skip if you have done via web interface):\n\n```sh\nquaytool --api-url \u003capi url\u003e --organization \u003corganization name\u003e --token \u003cadmin token\u003e --create-organization\n```\n\n- Create robot user\n\n```sh\nquaytool --api-url \u003capi url\u003e --organization \u003corganization name\u003e --token \u003cadmin token\u003e --robot \u003crobot_name\u003e --create-robot\n```\n\n- Create new team that will be able to create new repositories inside the organization\n\n```sh\nquaytool --api-url \u003capi url\u003e --organization \u003corganization name\u003e --token \u003cadmin token\u003e --team \u003cteam name\u003e --create-team\n```\n\n- Create prototype for the creators team inside the organization (set default permissions for the new users like robot that are in creators team).\n  By default it will create write permissions.\n\n```sh\nquaytool --api-url \u003capi url\u003e --organization \u003corganization name\u003e --token \u003cadmin token\u003e --team \u003cteam name\u003e --create-prototype\n```\n\n- Add robot user to the team\n\n```sh\nquaytool --api-url \u003capi url\u003e --organization \u003corganization name\u003e --token \u003cadmin token\u003e --team \u003cteam name\u003e --user \u003crobot user\u003e --add-member\n```\n\nAfter pushing images into the new repositories, by default the repository visibility is set\nto private. To make all repositories public, run:\n\n```sh\nquaytool  --api-url \u003capi url\u003e --organization \u003corganization name\u003e --token \u003cadmin token\u003e --visibility public --set-visibility\n```\n\nOr just for one repository:\n\n```sh\nquaytool  --api-url \u003capi url\u003e --organization \u003corganization name\u003e --token \u003cadmin token\u003e --repository \u003crepository\u003e --visibility public --set-visibility\n```\n\nNOTE: To skip some repositories, use `--skip-repo` parameter.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsoftwarefactory-project%2Fpython-quay-tool","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsoftwarefactory-project%2Fpython-quay-tool","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsoftwarefactory-project%2Fpython-quay-tool/lists"}