Create Quay Image Repository

Action ID: quay:create-repository
NPM Package:

@backstage-community/plugin-scaffolder-backend-module-quay

Description

Create an quay image repository

Input Schema

PropertyTypeDescriptionRequired
namestring-
tokenstring-
baseUrlstring-
repoKindstring-
namespacestring-
visibilitystring-
descriptionstring-

Output Schema

PropertyTypeDescriptionRequired
repositoryUrlstring-

Usage Examples

Create a public Quay repository in an organization namespace

Creates a public repository on quay.io in the acme namespace. Use when onboarding a new service and publishing images publicly. Includes a fetch:template step and logs the created URL with debug:log.

Copy
steps:
  - id: fetch-base
    action: fetch:template
    input:
      url: ./skeleton
      targetPath: .

  - id: create-quay-repo
    action: quay:create-repository
    input:
      name: ${{ parameters.componentId }}
      namespace: acme
      visibility: public
      description: Container images for ${{ parameters.componentId }}
      token: ${{ secrets.quayToken }}
      repoKind: image

  - id: log-repo-url
    action: debug:log
    input:
      message: Created Quay repository at ${{ steps.create-quay-repo.output.repositoryUrl }}

Create a private repository on a self-hosted Quay instance

Creates a private repository on an on-prem Quay deployment. Use when your organization hosts Quay internally and you want to keep images private.

Copy
steps:
  - id: fetch-template
    action: fetch:template
    input:
      url: ./skeleton
      targetPath: .

  - id: create-quay-repo
    action: quay:create-repository
    input:
      name: payments-service
      namespace: platform
      visibility: private
      description: Images for the payments service
      token: ${{ secrets.quayRobotToken }}
      baseUrl: https://quay.internal/api/v1
      repoKind: image

  - id: log-created
    action: debug:log
    input:
      message: Repo URL ${{ steps.create-quay-repo.output.repositoryUrl }}

Create environment specific repositories with a naming convention

Creates a private repository named with the component and environment. Use when you separate image repositories per environment.

Copy
steps:
  - id: fetch
    action: fetch:template
    input:
      url: ./skeleton
      targetPath: .

  - id: quay-create-env
    action: quay:create-repository
    input:
      name: ${{ parameters.componentId }}-${{ parameters.environment }}
      namespace: acme
      visibility: private
      description: Images for ${{ parameters.componentId }} in ${{ parameters.environment }} environment
      token: ${{ secrets.quayToken }}
      repoKind: image

  - id: log
    action: debug:log
    input:
      message: Created ${{ steps.quay-create-env.output.repositoryUrl }} for ${{ parameters.environment }}

Create a repository in the token owner namespace

Creates a public repository without specifying a namespace so Quay uses the token owner namespace. Use with a user or robot token that owns the target namespace.

Copy
steps:
  - id: fetch-assets
    action: fetch:template
    input:
      url: ./skeleton
      targetPath: .

  - id: quay-create-default-ns
    action: quay:create-repository
    input:
      name: sandbox-hello-world
      visibility: public
      description: Demo images from scaffolder run
      token: ${{ secrets.quayUserToken }}
      repoKind: image

  - id: repo-output
    action: debug:log
    input:
      message: Quay repository created ${{ steps.quay-create-default-ns.output.repositoryUrl }}

Create a team repository using a parameterized namespace and reuse the output

Creates a private repository in a team namespace provided by the user. Logs and propagates the repository URL for downstream steps.

Copy
steps:
  - id: fetch-base
    action: fetch:template
    input:
      url: ./skeleton
      targetPath: .

  - id: quay-create-team
    action: quay:create-repository
    input:
      name: ${{ parameters.componentId }}
      namespace: ${{ parameters.quayNamespace }}
      visibility: private
      description: Team ${{ parameters.quayNamespace }} images for ${{ parameters.componentId }}
      token: ${{ parameters.quayToken }}
      baseUrl: https://quay.io/api/v1
      repoKind: image

  - id: confirm-url
    action: debug:log
    input:
      message: Team repo created ${{ steps.quay-create-team.output.repositoryUrl }}