Skip to content

General options¤

Example action/workflow
compsite action action.yaml
action.yaml
name: 'Checkout'
description: 'Checkout a Git repository at a particular version'

branding:
  icon: 'github'
  color: 'blue'

inputs:
  repository: # group: Repository Options
    description: 'Repository name with owner. For example, actions/checkout'
    default: ${{ github.repository }}
  ref: # group: Repository Options
    description: >
      The branch, tag or SHA to checkout. When checking out the repository that
      triggered a workflow, this defaults to the reference or SHA for that
      event.  Otherwise, uses the default branch.
  token: # group: Authentication
    description: >
      Personal access token (PAT) used to fetch the repository. The PAT is configured
      with the local git config, which enables your scripts to run authenticated git
      commands. The post-job step removes the PAT.


      We recommend using a service account with the least permissions necessary.
      Also when generating a new PAT, select the least scopes necessary.


      [Learn more about creating and using encrypted secrets](https://help.github.com/en/actions/automating-your-workflow-with-github-actions/creating-and-using-encrypted-secrets)
    default: ${{ github.token }}
  ssh-key: # group: Authentication
    description: >
      SSH key used to fetch the repository. The SSH key is configured with the local
      git config, which enables your scripts to run authenticated git commands.
      The post-job step removes the SSH key.


      We recommend using a service account with the least permissions necessary.


      [Learn more about creating and using
      encrypted secrets](https://help.github.com/en/actions/automating-your-workflow-with-github-actions/creating-and-using-encrypted-secrets)
  ssh-known-hosts: # group: Authentication
    description: >
      Known hosts in addition to the user and global host key database. The public
      SSH keys for a host may be obtained using the utility `ssh-keyscan`. For example,
      `ssh-keyscan github.com`. The public key for github.com is always implicitly added.
  ssh-strict: # group: Authentication
    description: >
      Whether to perform strict host key checking. When true, adds the options `StrictHostKeyChecking=yes`
      and `CheckHostIP=no` to the SSH command line. Use the input `ssh-known-hosts` to
      configure additional hosts.
    default: true
  ssh-user: # group: Authentication
    description: >
      The user to use when connecting to the remote SSH host. By default 'git' is used.
    default: git
  persist-credentials: # group: Authentication
    description: 'Whether to configure the token or SSH key with the local git config'
    default: true
  path: # group: Repository Options
    description: 'Relative path under $GITHUB_WORKSPACE to place the repository'
  clean: # group: Repository Options
    description: 'Whether to execute `git clean -ffdx && git reset --hard HEAD` before fetching'
    default: true
  filter: # group: Repository Options
    description: >
      Partially clone against a given filter.
      Overrides sparse-checkout if set.
    default: null
  sparse-checkout:  # group: Repository Options
    description: >
      Do a sparse checkout on given patterns.
      Each pattern should be separated with new lines.
    default: null
  sparse-checkout-cone-mode:
    description: >
      Specifies whether to use cone-mode when doing a sparse checkout.
    default: true
  fetch-depth:
    description: 'Number of commits to fetch. 0 indicates all history for all branches and tags.'
    default: 1
  fetch-tags:
    description: 'Whether to fetch tags, even if fetch-depth > 0.'
    default: false
  show-progress:
    description: 'Whether to show progress status output when fetching.'
    default: true
  lfs:
    description: 'Whether to download Git-LFS files'
    default: false
  submodules:
    description: >
      Whether to checkout submodules: `true` to checkout submodules or `recursive` to
      recursively checkout submodules.


      When the `ssh-key` input is not provided, SSH URLs beginning with `[email protected]:` are
      converted to HTTPS.
    default: false
  set-safe-directory:
    description: Add repository path as safe.directory for Git global config by running `git config --global --add safe.directory <path>`
    default: true
  github-server-url:
    description: The base URL for the GitHub instance that you are trying to clone from, will use environment defaults to fetch from the same instance that the workflow is running from unless specified. Example URLs are https://github.com or https://my-ghes-server.example.com
    required: false
outputs:
  ref:
    description: 'The branch, tag or SHA that was checked out'
  commit:
    description: 'The commit SHA that was checked out'
runs:
  using: node24
  main: dist/index.js
  post: dist/index.js
reusable workflow .github/workflows/example_workflow.yml
.github/workflows/example_workflow.yml
name: 'Example workflow'
description: "This key is illegal but will still be parsed"

on:
  workflow_call:
    inputs:
      environment: # group: environment
        description: |
          Environment to deploy to. Must be one of 

          - `development`
          - `staging`
          - `production`
        required: true
        type: string
      configuration: # group: environment
        description: 'JSON configuration object'
        required: false
        type: string
        default: '{}'
      version:
        description: 'Version to deploy'
        required: false
        type: string
        default: 'latest'
      enable-notifications:
        description: 'Whether to send notifications. Requires [`SLACK_WEBHOOK`](#secrets.SLACK_WEBHOOK) to be set.'
        required: false
        type: boolean
        default: false
      parallel-jobs:
        description: 'Number of parallel jobs'
        required: false
        type: number
        default: 1

    secrets:
      API_KEY: # group: environment
        description: 'API key for external service'
        required: true
      DATABASE_URL: # group: environment
        description: 'Database connection string'
        required: false
      SLACK_WEBHOOK:
        description: 'Slack webhook URL for notifications'
        required: false
    outputs:
      deployment-id: # group: deployment
        description: 'ID of the created deployment'
        value: ${{ jobs.deploy.outputs.deployment-id }}
      deployment-url: # group: deployment
        description: 'URL of the deployment'
        value: ${{ jobs.deploy.outputs.deployment-url }}
      success:
        description: 'Whether the deployment was successful'
        value: ${{ jobs.deploy.outputs.success }}

permissions:
  contents: read
  deployments: write
  pull-requests: write
  issues: read

env:
  DEPLOYMENT_ENVIRONMENT: ${{ inputs.environment }}
  ENABLE_DEBUG: false

jobs:
  validate:
    name: 'Validate Inputs'
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - run: |
          echo "Validating version: ${{ inputs.version }}"

      - name: Check secrets
        run: |
          if [[ -z "${{ secrets.API_KEY }}" ]]; then
            echo "Error: API_KEY secret is required"
            exit 1
          fi
          echo "All required secrets are available"

  deploy:
    name: 'Deploy Application'
    runs-on: ubuntu-latest
    needs: validate
    outputs:
      deployment-id: ${{ steps.deploy.outputs.deployment-id }}
      deployment-url: ${{ steps.deploy.outputs.deployment-url }}
      success: ${{ steps.deploy.outputs.success }}
    steps:
      - name: Setup deployment
        run: |
          echo "Setting up deployment for ${{ inputs.environment }}"
          echo "Version: ${{ inputs.version }}"
          echo "Parallel jobs: ${{ inputs.parallel-jobs }}"
          echo "Notifications enabled: ${{ inputs.enable-notifications }}"

      - run: |
          echo "Configuration: ${{ inputs.configuration }}"

      - name: Execute deployment
        id: deploy
        run: |
          deployment_id="reusable-deploy-$(date +%s)"
          deployment_url="https://${{ inputs.environment }}.example.com"

          echo "deployment-id=${deployment_id}" >> $GITHUB_OUTPUT
          echo "deployment-url=${deployment_url}" >> $GITHUB_OUTPUT
          echo "success=true" >> $GITHUB_OUTPUT

          echo "Deployment completed successfully"
          echo "ID: ${deployment_id}"
          echo "URL: ${deployment_url}"

  notify:
    name: Send Notifications
    uses: other-org/notify-workflow/.github/workflows/notify.yml@main
    needs: deploy
    if: ${{ inputs.enable-notifications == true }}
    with:
      deployment-id: ${{ needs.deploy.outputs.deployment-id }}
      deployment-url: ${{ needs.deploy.outputs.deployment-url }}
      environment: ${{ inputs.environment }}
      success: ${{ needs.deploy.outputs.success }}

show_description ¤

Whether to show the description in the documentation.

Preview

Checkout ¤

- uses: owner/repository@v1

Checkout a Git repository at a particular version

Inputs: ¤

Name Description Default
repository

Repository name with owner. For example, actions/checkout

${{ github.repository }}
ref

The branch, tag or SHA to checkout. When checking out the repository that triggered a workflow, this defaults to the reference or SHA for that event. Otherwise, uses the default branch.

token

Personal access token (PAT) used to fetch the repository. The PAT is configured with the local git config, which enables your scripts to run authenticated git commands. The post-job step removes the PAT.

We recommend using a service account with the least permissions necessary. Also when generating a new PAT, select the least scopes necessary.

Learn more about creating and using encrypted secrets

${{ github.token }}
ssh-key

SSH key used to fetch the repository. The SSH key is configured with the local git config, which enables your scripts to run authenticated git commands. The post-job step removes the SSH key.

We recommend using a service account with the least permissions necessary.

Learn more about creating and using encrypted secrets

ssh-known-hosts

Known hosts in addition to the user and global host key database. The public SSH keys for a host may be obtained using the utility ssh-keyscan. For example, ssh-keyscan github.com. The public key for github.com is always implicitly added.

ssh-strict

Whether to perform strict host key checking. When true, adds the options StrictHostKeyChecking=yes and CheckHostIP=no to the SSH command line. Use the input ssh-known-hosts to configure additional hosts.

true
ssh-user

The user to use when connecting to the remote SSH host. By default 'git' is used.

git
persist-credentials

Whether to configure the token or SSH key with the local git config

true
path

Relative path under $GITHUB_WORKSPACE to place the repository

clean

Whether to execute git clean -ffdx && git reset --hard HEAD before fetching

true
filter

Partially clone against a given filter. Overrides sparse-checkout if set.

sparse-checkout

Do a sparse checkout on given patterns. Each pattern should be separated with new lines.

sparse-checkout-cone-mode

Specifies whether to use cone-mode when doing a sparse checkout.

true
fetch-depth

Number of commits to fetch. 0 indicates all history for all branches and tags.

1
fetch-tags

Whether to fetch tags, even if fetch-depth > 0.

false
show-progress

Whether to show progress status output when fetching.

true
lfs

Whether to download Git-LFS files

false
submodules

Whether to checkout submodules: true to checkout submodules or recursive to recursively checkout submodules.

When the ssh-key input is not provided, SSH URLs beginning with [email protected]: are converted to HTTPS.

false
set-safe-directory

Add repository path as safe.directory for Git global config by running git config --global --add safe.directory <path>

true
github-server-url

The base URL for the GitHub instance that you are trying to clone from, will use environment defaults to fetch from the same instance that the workflow is running from unless specified. Example URLs are https://github.com or https://my-ghes-server.example.com

Source of owner/repository@v1
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
name: 'Checkout'
description: 'Checkout a Git repository at a particular version'

branding:
  icon: 'github'
  color: 'blue'

inputs:
  repository: # group: Repository Options
    description: 'Repository name with owner. For example, actions/checkout'
    default: ${{ github.repository }}
  ref: # group: Repository Options
    description: >
      The branch, tag or SHA to checkout. When checking out the repository that
      triggered a workflow, this defaults to the reference or SHA for that
      event.  Otherwise, uses the default branch.
  token: # group: Authentication
    description: >
      Personal access token (PAT) used to fetch the repository. The PAT is configured
      with the local git config, which enables your scripts to run authenticated git
      commands. The post-job step removes the PAT.


      We recommend using a service account with the least permissions necessary.
      Also when generating a new PAT, select the least scopes necessary.


      [Learn more about creating and using encrypted secrets](https://help.github.com/en/actions/automating-your-workflow-with-github-actions/creating-and-using-encrypted-secrets)
    default: ${{ github.token }}
  ssh-key: # group: Authentication
    description: >
      SSH key used to fetch the repository. The SSH key is configured with the local
      git config, which enables your scripts to run authenticated git commands.
      The post-job step removes the SSH key.


      We recommend using a service account with the least permissions necessary.


      [Learn more about creating and using
      encrypted secrets](https://help.github.com/en/actions/automating-your-workflow-with-github-actions/creating-and-using-encrypted-secrets)
  ssh-known-hosts: # group: Authentication
    description: >
      Known hosts in addition to the user and global host key database. The public
      SSH keys for a host may be obtained using the utility `ssh-keyscan`. For example,
      `ssh-keyscan github.com`. The public key for github.com is always implicitly added.
  ssh-strict: # group: Authentication
    description: >
      Whether to perform strict host key checking. When true, adds the options `StrictHostKeyChecking=yes`
      and `CheckHostIP=no` to the SSH command line. Use the input `ssh-known-hosts` to
      configure additional hosts.
    default: true
  ssh-user: # group: Authentication
    description: >
      The user to use when connecting to the remote SSH host. By default 'git' is used.
    default: git
  persist-credentials: # group: Authentication
    description: 'Whether to configure the token or SSH key with the local git config'
    default: true
  path: # group: Repository Options
    description: 'Relative path under $GITHUB_WORKSPACE to place the repository'
  clean: # group: Repository Options
    description: 'Whether to execute `git clean -ffdx && git reset --hard HEAD` before fetching'
    default: true
  filter: # group: Repository Options
    description: >
      Partially clone against a given filter.
      Overrides sparse-checkout if set.
    default: null
  sparse-checkout:  # group: Repository Options
    description: >
      Do a sparse checkout on given patterns.
      Each pattern should be separated with new lines.
    default: null
  sparse-checkout-cone-mode:
    description: >
      Specifies whether to use cone-mode when doing a sparse checkout.
    default: true
  fetch-depth:
    description: 'Number of commits to fetch. 0 indicates all history for all branches and tags.'
    default: 1
  fetch-tags:
    description: 'Whether to fetch tags, even if fetch-depth > 0.'
    default: false
  show-progress:
    description: 'Whether to show progress status output when fetching.'
    default: true
  lfs:
    description: 'Whether to download Git-LFS files'
    default: false
  submodules:
    description: >
      Whether to checkout submodules: `true` to checkout submodules or `recursive` to
      recursively checkout submodules.


      When the `ssh-key` input is not provided, SSH URLs beginning with `[email protected]:` are
      converted to HTTPS.
    default: false
  set-safe-directory:
    description: Add repository path as safe.directory for Git global config by running `git config --global --add safe.directory <path>`
    default: true
  github-server-url:
    description: The base URL for the GitHub instance that you are trying to clone from, will use environment defaults to fetch from the same instance that the workflow is running from unless specified. Example URLs are https://github.com or https://my-ghes-server.example.com
    required: false
outputs:
  ref:
    description: 'The branch, tag or SHA that was checked out'
  commit:
    description: 'The commit SHA that was checked out'
runs:
  using: node24
  main: dist/index.js
  post: dist/index.js

Checkout ¤

- uses: owner/repository@v1

Inputs: ¤

Name Description Default
repository

Repository name with owner. For example, actions/checkout

${{ github.repository }}
ref

The branch, tag or SHA to checkout. When checking out the repository that triggered a workflow, this defaults to the reference or SHA for that event. Otherwise, uses the default branch.

token

Personal access token (PAT) used to fetch the repository. The PAT is configured with the local git config, which enables your scripts to run authenticated git commands. The post-job step removes the PAT.

We recommend using a service account with the least permissions necessary. Also when generating a new PAT, select the least scopes necessary.

Learn more about creating and using encrypted secrets

${{ github.token }}
ssh-key

SSH key used to fetch the repository. The SSH key is configured with the local git config, which enables your scripts to run authenticated git commands. The post-job step removes the SSH key.

We recommend using a service account with the least permissions necessary.

Learn more about creating and using encrypted secrets

ssh-known-hosts

Known hosts in addition to the user and global host key database. The public SSH keys for a host may be obtained using the utility ssh-keyscan. For example, ssh-keyscan github.com. The public key for github.com is always implicitly added.

ssh-strict

Whether to perform strict host key checking. When true, adds the options StrictHostKeyChecking=yes and CheckHostIP=no to the SSH command line. Use the input ssh-known-hosts to configure additional hosts.

true
ssh-user

The user to use when connecting to the remote SSH host. By default 'git' is used.

git
persist-credentials

Whether to configure the token or SSH key with the local git config

true
path

Relative path under $GITHUB_WORKSPACE to place the repository

clean

Whether to execute git clean -ffdx && git reset --hard HEAD before fetching

true
filter

Partially clone against a given filter. Overrides sparse-checkout if set.

sparse-checkout

Do a sparse checkout on given patterns. Each pattern should be separated with new lines.

sparse-checkout-cone-mode

Specifies whether to use cone-mode when doing a sparse checkout.

true
fetch-depth

Number of commits to fetch. 0 indicates all history for all branches and tags.

1
fetch-tags

Whether to fetch tags, even if fetch-depth > 0.

false
show-progress

Whether to show progress status output when fetching.

true
lfs

Whether to download Git-LFS files

false
submodules

Whether to checkout submodules: true to checkout submodules or recursive to recursively checkout submodules.

When the ssh-key input is not provided, SSH URLs beginning with [email protected]: are converted to HTTPS.

false
set-safe-directory

Add repository path as safe.directory for Git global config by running git config --global --add safe.directory <path>

true
github-server-url

The base URL for the GitHub instance that you are trying to clone from, will use environment defaults to fetch from the same instance that the workflow is running from unless specified. Example URLs are https://github.com or https://my-ghes-server.example.com

Source of owner/repository@v1
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
name: 'Checkout'
description: 'Checkout a Git repository at a particular version'

branding:
  icon: 'github'
  color: 'blue'

inputs:
  repository: # group: Repository Options
    description: 'Repository name with owner. For example, actions/checkout'
    default: ${{ github.repository }}
  ref: # group: Repository Options
    description: >
      The branch, tag or SHA to checkout. When checking out the repository that
      triggered a workflow, this defaults to the reference or SHA for that
      event.  Otherwise, uses the default branch.
  token: # group: Authentication
    description: >
      Personal access token (PAT) used to fetch the repository. The PAT is configured
      with the local git config, which enables your scripts to run authenticated git
      commands. The post-job step removes the PAT.


      We recommend using a service account with the least permissions necessary.
      Also when generating a new PAT, select the least scopes necessary.


      [Learn more about creating and using encrypted secrets](https://help.github.com/en/actions/automating-your-workflow-with-github-actions/creating-and-using-encrypted-secrets)
    default: ${{ github.token }}
  ssh-key: # group: Authentication
    description: >
      SSH key used to fetch the repository. The SSH key is configured with the local
      git config, which enables your scripts to run authenticated git commands.
      The post-job step removes the SSH key.


      We recommend using a service account with the least permissions necessary.


      [Learn more about creating and using
      encrypted secrets](https://help.github.com/en/actions/automating-your-workflow-with-github-actions/creating-and-using-encrypted-secrets)
  ssh-known-hosts: # group: Authentication
    description: >
      Known hosts in addition to the user and global host key database. The public
      SSH keys for a host may be obtained using the utility `ssh-keyscan`. For example,
      `ssh-keyscan github.com`. The public key for github.com is always implicitly added.
  ssh-strict: # group: Authentication
    description: >
      Whether to perform strict host key checking. When true, adds the options `StrictHostKeyChecking=yes`
      and `CheckHostIP=no` to the SSH command line. Use the input `ssh-known-hosts` to
      configure additional hosts.
    default: true
  ssh-user: # group: Authentication
    description: >
      The user to use when connecting to the remote SSH host. By default 'git' is used.
    default: git
  persist-credentials: # group: Authentication
    description: 'Whether to configure the token or SSH key with the local git config'
    default: true
  path: # group: Repository Options
    description: 'Relative path under $GITHUB_WORKSPACE to place the repository'
  clean: # group: Repository Options
    description: 'Whether to execute `git clean -ffdx && git reset --hard HEAD` before fetching'
    default: true
  filter: # group: Repository Options
    description: >
      Partially clone against a given filter.
      Overrides sparse-checkout if set.
    default: null
  sparse-checkout:  # group: Repository Options
    description: >
      Do a sparse checkout on given patterns.
      Each pattern should be separated with new lines.
    default: null
  sparse-checkout-cone-mode:
    description: >
      Specifies whether to use cone-mode when doing a sparse checkout.
    default: true
  fetch-depth:
    description: 'Number of commits to fetch. 0 indicates all history for all branches and tags.'
    default: 1
  fetch-tags:
    description: 'Whether to fetch tags, even if fetch-depth > 0.'
    default: false
  show-progress:
    description: 'Whether to show progress status output when fetching.'
    default: true
  lfs:
    description: 'Whether to download Git-LFS files'
    default: false
  submodules:
    description: >
      Whether to checkout submodules: `true` to checkout submodules or `recursive` to
      recursively checkout submodules.


      When the `ssh-key` input is not provided, SSH URLs beginning with `[email protected]:` are
      converted to HTTPS.
    default: false
  set-safe-directory:
    description: Add repository path as safe.directory for Git global config by running `git config --global --add safe.directory <path>`
    default: true
  github-server-url:
    description: The base URL for the GitHub instance that you are trying to clone from, will use environment defaults to fetch from the same instance that the workflow is running from unless specified. Example URLs are https://github.com or https://my-ghes-server.example.com
    required: false
outputs:
  ref:
    description: 'The branch, tag or SHA that was checked out'
  commit:
    description: 'The commit SHA that was checked out'
runs:
  using: node24
  main: dist/index.js
  post: dist/index.js

description ¤

A custom string to override the autogenerated description of the object.

Preview

Checkout ¤

- uses: owner/repository@v1

Checkout a Git repository at a particular version

Inputs: ¤

Name Description Default
repository

Repository name with owner. For example, actions/checkout

${{ github.repository }}
ref

The branch, tag or SHA to checkout. When checking out the repository that triggered a workflow, this defaults to the reference or SHA for that event. Otherwise, uses the default branch.

token

Personal access token (PAT) used to fetch the repository. The PAT is configured with the local git config, which enables your scripts to run authenticated git commands. The post-job step removes the PAT.

We recommend using a service account with the least permissions necessary. Also when generating a new PAT, select the least scopes necessary.

Learn more about creating and using encrypted secrets

${{ github.token }}
ssh-key

SSH key used to fetch the repository. The SSH key is configured with the local git config, which enables your scripts to run authenticated git commands. The post-job step removes the SSH key.

We recommend using a service account with the least permissions necessary.

Learn more about creating and using encrypted secrets

ssh-known-hosts

Known hosts in addition to the user and global host key database. The public SSH keys for a host may be obtained using the utility ssh-keyscan. For example, ssh-keyscan github.com. The public key for github.com is always implicitly added.

ssh-strict

Whether to perform strict host key checking. When true, adds the options StrictHostKeyChecking=yes and CheckHostIP=no to the SSH command line. Use the input ssh-known-hosts to configure additional hosts.

true
ssh-user

The user to use when connecting to the remote SSH host. By default 'git' is used.

git
persist-credentials

Whether to configure the token or SSH key with the local git config

true
path

Relative path under $GITHUB_WORKSPACE to place the repository

clean

Whether to execute git clean -ffdx && git reset --hard HEAD before fetching

true
filter

Partially clone against a given filter. Overrides sparse-checkout if set.

sparse-checkout

Do a sparse checkout on given patterns. Each pattern should be separated with new lines.

sparse-checkout-cone-mode

Specifies whether to use cone-mode when doing a sparse checkout.

true
fetch-depth

Number of commits to fetch. 0 indicates all history for all branches and tags.

1
fetch-tags

Whether to fetch tags, even if fetch-depth > 0.

false
show-progress

Whether to show progress status output when fetching.

true
lfs

Whether to download Git-LFS files

false
submodules

Whether to checkout submodules: true to checkout submodules or recursive to recursively checkout submodules.

When the ssh-key input is not provided, SSH URLs beginning with [email protected]: are converted to HTTPS.

false
set-safe-directory

Add repository path as safe.directory for Git global config by running git config --global --add safe.directory <path>

true
github-server-url

The base URL for the GitHub instance that you are trying to clone from, will use environment defaults to fetch from the same instance that the workflow is running from unless specified. Example URLs are https://github.com or https://my-ghes-server.example.com

Source of owner/repository@v1
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
name: 'Checkout'
description: 'Checkout a Git repository at a particular version'

branding:
  icon: 'github'
  color: 'blue'

inputs:
  repository: # group: Repository Options
    description: 'Repository name with owner. For example, actions/checkout'
    default: ${{ github.repository }}
  ref: # group: Repository Options
    description: >
      The branch, tag or SHA to checkout. When checking out the repository that
      triggered a workflow, this defaults to the reference or SHA for that
      event.  Otherwise, uses the default branch.
  token: # group: Authentication
    description: >
      Personal access token (PAT) used to fetch the repository. The PAT is configured
      with the local git config, which enables your scripts to run authenticated git
      commands. The post-job step removes the PAT.


      We recommend using a service account with the least permissions necessary.
      Also when generating a new PAT, select the least scopes necessary.


      [Learn more about creating and using encrypted secrets](https://help.github.com/en/actions/automating-your-workflow-with-github-actions/creating-and-using-encrypted-secrets)
    default: ${{ github.token }}
  ssh-key: # group: Authentication
    description: >
      SSH key used to fetch the repository. The SSH key is configured with the local
      git config, which enables your scripts to run authenticated git commands.
      The post-job step removes the SSH key.


      We recommend using a service account with the least permissions necessary.


      [Learn more about creating and using
      encrypted secrets](https://help.github.com/en/actions/automating-your-workflow-with-github-actions/creating-and-using-encrypted-secrets)
  ssh-known-hosts: # group: Authentication
    description: >
      Known hosts in addition to the user and global host key database. The public
      SSH keys for a host may be obtained using the utility `ssh-keyscan`. For example,
      `ssh-keyscan github.com`. The public key for github.com is always implicitly added.
  ssh-strict: # group: Authentication
    description: >
      Whether to perform strict host key checking. When true, adds the options `StrictHostKeyChecking=yes`
      and `CheckHostIP=no` to the SSH command line. Use the input `ssh-known-hosts` to
      configure additional hosts.
    default: true
  ssh-user: # group: Authentication
    description: >
      The user to use when connecting to the remote SSH host. By default 'git' is used.
    default: git
  persist-credentials: # group: Authentication
    description: 'Whether to configure the token or SSH key with the local git config'
    default: true
  path: # group: Repository Options
    description: 'Relative path under $GITHUB_WORKSPACE to place the repository'
  clean: # group: Repository Options
    description: 'Whether to execute `git clean -ffdx && git reset --hard HEAD` before fetching'
    default: true
  filter: # group: Repository Options
    description: >
      Partially clone against a given filter.
      Overrides sparse-checkout if set.
    default: null
  sparse-checkout:  # group: Repository Options
    description: >
      Do a sparse checkout on given patterns.
      Each pattern should be separated with new lines.
    default: null
  sparse-checkout-cone-mode:
    description: >
      Specifies whether to use cone-mode when doing a sparse checkout.
    default: true
  fetch-depth:
    description: 'Number of commits to fetch. 0 indicates all history for all branches and tags.'
    default: 1
  fetch-tags:
    description: 'Whether to fetch tags, even if fetch-depth > 0.'
    default: false
  show-progress:
    description: 'Whether to show progress status output when fetching.'
    default: true
  lfs:
    description: 'Whether to download Git-LFS files'
    default: false
  submodules:
    description: >
      Whether to checkout submodules: `true` to checkout submodules or `recursive` to
      recursively checkout submodules.


      When the `ssh-key` input is not provided, SSH URLs beginning with `[email protected]:` are
      converted to HTTPS.
    default: false
  set-safe-directory:
    description: Add repository path as safe.directory for Git global config by running `git config --global --add safe.directory <path>`
    default: true
  github-server-url:
    description: The base URL for the GitHub instance that you are trying to clone from, will use environment defaults to fetch from the same instance that the workflow is running from unless specified. Example URLs are https://github.com or https://my-ghes-server.example.com
    required: false
outputs:
  ref:
    description: 'The branch, tag or SHA that was checked out'
  commit:
    description: 'The commit SHA that was checked out'
runs:
  using: node24
  main: dist/index.js
  post: dist/index.js

Checkout ¤

- uses: owner/repository@v1
A custom description

Inputs: ¤

Name Description Default
repository

Repository name with owner. For example, actions/checkout

${{ github.repository }}
ref

The branch, tag or SHA to checkout. When checking out the repository that triggered a workflow, this defaults to the reference or SHA for that event. Otherwise, uses the default branch.

token

Personal access token (PAT) used to fetch the repository. The PAT is configured with the local git config, which enables your scripts to run authenticated git commands. The post-job step removes the PAT.

We recommend using a service account with the least permissions necessary. Also when generating a new PAT, select the least scopes necessary.

Learn more about creating and using encrypted secrets

${{ github.token }}
ssh-key

SSH key used to fetch the repository. The SSH key is configured with the local git config, which enables your scripts to run authenticated git commands. The post-job step removes the SSH key.

We recommend using a service account with the least permissions necessary.

Learn more about creating and using encrypted secrets

ssh-known-hosts

Known hosts in addition to the user and global host key database. The public SSH keys for a host may be obtained using the utility ssh-keyscan. For example, ssh-keyscan github.com. The public key for github.com is always implicitly added.

ssh-strict

Whether to perform strict host key checking. When true, adds the options StrictHostKeyChecking=yes and CheckHostIP=no to the SSH command line. Use the input ssh-known-hosts to configure additional hosts.

true
ssh-user

The user to use when connecting to the remote SSH host. By default 'git' is used.

git
persist-credentials

Whether to configure the token or SSH key with the local git config

true
path

Relative path under $GITHUB_WORKSPACE to place the repository

clean

Whether to execute git clean -ffdx && git reset --hard HEAD before fetching

true
filter

Partially clone against a given filter. Overrides sparse-checkout if set.

sparse-checkout

Do a sparse checkout on given patterns. Each pattern should be separated with new lines.

sparse-checkout-cone-mode

Specifies whether to use cone-mode when doing a sparse checkout.

true
fetch-depth

Number of commits to fetch. 0 indicates all history for all branches and tags.

1
fetch-tags

Whether to fetch tags, even if fetch-depth > 0.

false
show-progress

Whether to show progress status output when fetching.

true
lfs

Whether to download Git-LFS files

false
submodules

Whether to checkout submodules: true to checkout submodules or recursive to recursively checkout submodules.

When the ssh-key input is not provided, SSH URLs beginning with [email protected]: are converted to HTTPS.

false
set-safe-directory

Add repository path as safe.directory for Git global config by running git config --global --add safe.directory <path>

true
github-server-url

The base URL for the GitHub instance that you are trying to clone from, will use environment defaults to fetch from the same instance that the workflow is running from unless specified. Example URLs are https://github.com or https://my-ghes-server.example.com

Source of owner/repository@v1
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
name: 'Checkout'
description: 'Checkout a Git repository at a particular version'

branding:
  icon: 'github'
  color: 'blue'

inputs:
  repository: # group: Repository Options
    description: 'Repository name with owner. For example, actions/checkout'
    default: ${{ github.repository }}
  ref: # group: Repository Options
    description: >
      The branch, tag or SHA to checkout. When checking out the repository that
      triggered a workflow, this defaults to the reference or SHA for that
      event.  Otherwise, uses the default branch.
  token: # group: Authentication
    description: >
      Personal access token (PAT) used to fetch the repository. The PAT is configured
      with the local git config, which enables your scripts to run authenticated git
      commands. The post-job step removes the PAT.


      We recommend using a service account with the least permissions necessary.
      Also when generating a new PAT, select the least scopes necessary.


      [Learn more about creating and using encrypted secrets](https://help.github.com/en/actions/automating-your-workflow-with-github-actions/creating-and-using-encrypted-secrets)
    default: ${{ github.token }}
  ssh-key: # group: Authentication
    description: >
      SSH key used to fetch the repository. The SSH key is configured with the local
      git config, which enables your scripts to run authenticated git commands.
      The post-job step removes the SSH key.


      We recommend using a service account with the least permissions necessary.


      [Learn more about creating and using
      encrypted secrets](https://help.github.com/en/actions/automating-your-workflow-with-github-actions/creating-and-using-encrypted-secrets)
  ssh-known-hosts: # group: Authentication
    description: >
      Known hosts in addition to the user and global host key database. The public
      SSH keys for a host may be obtained using the utility `ssh-keyscan`. For example,
      `ssh-keyscan github.com`. The public key for github.com is always implicitly added.
  ssh-strict: # group: Authentication
    description: >
      Whether to perform strict host key checking. When true, adds the options `StrictHostKeyChecking=yes`
      and `CheckHostIP=no` to the SSH command line. Use the input `ssh-known-hosts` to
      configure additional hosts.
    default: true
  ssh-user: # group: Authentication
    description: >
      The user to use when connecting to the remote SSH host. By default 'git' is used.
    default: git
  persist-credentials: # group: Authentication
    description: 'Whether to configure the token or SSH key with the local git config'
    default: true
  path: # group: Repository Options
    description: 'Relative path under $GITHUB_WORKSPACE to place the repository'
  clean: # group: Repository Options
    description: 'Whether to execute `git clean -ffdx && git reset --hard HEAD` before fetching'
    default: true
  filter: # group: Repository Options
    description: >
      Partially clone against a given filter.
      Overrides sparse-checkout if set.
    default: null
  sparse-checkout:  # group: Repository Options
    description: >
      Do a sparse checkout on given patterns.
      Each pattern should be separated with new lines.
    default: null
  sparse-checkout-cone-mode:
    description: >
      Specifies whether to use cone-mode when doing a sparse checkout.
    default: true
  fetch-depth:
    description: 'Number of commits to fetch. 0 indicates all history for all branches and tags.'
    default: 1
  fetch-tags:
    description: 'Whether to fetch tags, even if fetch-depth > 0.'
    default: false
  show-progress:
    description: 'Whether to show progress status output when fetching.'
    default: true
  lfs:
    description: 'Whether to download Git-LFS files'
    default: false
  submodules:
    description: >
      Whether to checkout submodules: `true` to checkout submodules or `recursive` to
      recursively checkout submodules.


      When the `ssh-key` input is not provided, SSH URLs beginning with `[email protected]:` are
      converted to HTTPS.
    default: false
  set-safe-directory:
    description: Add repository path as safe.directory for Git global config by running `git config --global --add safe.directory <path>`
    default: true
  github-server-url:
    description: The base URL for the GitHub instance that you are trying to clone from, will use environment defaults to fetch from the same instance that the workflow is running from unless specified. Example URLs are https://github.com or https://my-ghes-server.example.com
    required: false
outputs:
  ref:
    description: 'The branch, tag or SHA that was checked out'
  commit:
    description: 'The commit SHA that was checked out'
runs:
  using: node24
  main: dist/index.js
  post: dist/index.js

show_source ¤

Whether to show the source link in the documentation.

Preview

Checkout ¤

- uses: owner/repository@v1

Checkout a Git repository at a particular version

Inputs: ¤

Name Description Default
repository

Repository name with owner. For example, actions/checkout

${{ github.repository }}
ref

The branch, tag or SHA to checkout. When checking out the repository that triggered a workflow, this defaults to the reference or SHA for that event. Otherwise, uses the default branch.

token

Personal access token (PAT) used to fetch the repository. The PAT is configured with the local git config, which enables your scripts to run authenticated git commands. The post-job step removes the PAT.

We recommend using a service account with the least permissions necessary. Also when generating a new PAT, select the least scopes necessary.

Learn more about creating and using encrypted secrets

${{ github.token }}
ssh-key

SSH key used to fetch the repository. The SSH key is configured with the local git config, which enables your scripts to run authenticated git commands. The post-job step removes the SSH key.

We recommend using a service account with the least permissions necessary.

Learn more about creating and using encrypted secrets

ssh-known-hosts

Known hosts in addition to the user and global host key database. The public SSH keys for a host may be obtained using the utility ssh-keyscan. For example, ssh-keyscan github.com. The public key for github.com is always implicitly added.

ssh-strict

Whether to perform strict host key checking. When true, adds the options StrictHostKeyChecking=yes and CheckHostIP=no to the SSH command line. Use the input ssh-known-hosts to configure additional hosts.

true
ssh-user

The user to use when connecting to the remote SSH host. By default 'git' is used.

git
persist-credentials

Whether to configure the token or SSH key with the local git config

true
path

Relative path under $GITHUB_WORKSPACE to place the repository

clean

Whether to execute git clean -ffdx && git reset --hard HEAD before fetching

true
filter

Partially clone against a given filter. Overrides sparse-checkout if set.

sparse-checkout

Do a sparse checkout on given patterns. Each pattern should be separated with new lines.

sparse-checkout-cone-mode

Specifies whether to use cone-mode when doing a sparse checkout.

true
fetch-depth

Number of commits to fetch. 0 indicates all history for all branches and tags.

1
fetch-tags

Whether to fetch tags, even if fetch-depth > 0.

false
show-progress

Whether to show progress status output when fetching.

true
lfs

Whether to download Git-LFS files

false
submodules

Whether to checkout submodules: true to checkout submodules or recursive to recursively checkout submodules.

When the ssh-key input is not provided, SSH URLs beginning with [email protected]: are converted to HTTPS.

false
set-safe-directory

Add repository path as safe.directory for Git global config by running git config --global --add safe.directory <path>

true
github-server-url

The base URL for the GitHub instance that you are trying to clone from, will use environment defaults to fetch from the same instance that the workflow is running from unless specified. Example URLs are https://github.com or https://my-ghes-server.example.com

Source of owner/repository@v1
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
name: 'Checkout'
description: 'Checkout a Git repository at a particular version'

branding:
  icon: 'github'
  color: 'blue'

inputs:
  repository: # group: Repository Options
    description: 'Repository name with owner. For example, actions/checkout'
    default: ${{ github.repository }}
  ref: # group: Repository Options
    description: >
      The branch, tag or SHA to checkout. When checking out the repository that
      triggered a workflow, this defaults to the reference or SHA for that
      event.  Otherwise, uses the default branch.
  token: # group: Authentication
    description: >
      Personal access token (PAT) used to fetch the repository. The PAT is configured
      with the local git config, which enables your scripts to run authenticated git
      commands. The post-job step removes the PAT.


      We recommend using a service account with the least permissions necessary.
      Also when generating a new PAT, select the least scopes necessary.


      [Learn more about creating and using encrypted secrets](https://help.github.com/en/actions/automating-your-workflow-with-github-actions/creating-and-using-encrypted-secrets)
    default: ${{ github.token }}
  ssh-key: # group: Authentication
    description: >
      SSH key used to fetch the repository. The SSH key is configured with the local
      git config, which enables your scripts to run authenticated git commands.
      The post-job step removes the SSH key.


      We recommend using a service account with the least permissions necessary.


      [Learn more about creating and using
      encrypted secrets](https://help.github.com/en/actions/automating-your-workflow-with-github-actions/creating-and-using-encrypted-secrets)
  ssh-known-hosts: # group: Authentication
    description: >
      Known hosts in addition to the user and global host key database. The public
      SSH keys for a host may be obtained using the utility `ssh-keyscan`. For example,
      `ssh-keyscan github.com`. The public key for github.com is always implicitly added.
  ssh-strict: # group: Authentication
    description: >
      Whether to perform strict host key checking. When true, adds the options `StrictHostKeyChecking=yes`
      and `CheckHostIP=no` to the SSH command line. Use the input `ssh-known-hosts` to
      configure additional hosts.
    default: true
  ssh-user: # group: Authentication
    description: >
      The user to use when connecting to the remote SSH host. By default 'git' is used.
    default: git
  persist-credentials: # group: Authentication
    description: 'Whether to configure the token or SSH key with the local git config'
    default: true
  path: # group: Repository Options
    description: 'Relative path under $GITHUB_WORKSPACE to place the repository'
  clean: # group: Repository Options
    description: 'Whether to execute `git clean -ffdx && git reset --hard HEAD` before fetching'
    default: true
  filter: # group: Repository Options
    description: >
      Partially clone against a given filter.
      Overrides sparse-checkout if set.
    default: null
  sparse-checkout:  # group: Repository Options
    description: >
      Do a sparse checkout on given patterns.
      Each pattern should be separated with new lines.
    default: null
  sparse-checkout-cone-mode:
    description: >
      Specifies whether to use cone-mode when doing a sparse checkout.
    default: true
  fetch-depth:
    description: 'Number of commits to fetch. 0 indicates all history for all branches and tags.'
    default: 1
  fetch-tags:
    description: 'Whether to fetch tags, even if fetch-depth > 0.'
    default: false
  show-progress:
    description: 'Whether to show progress status output when fetching.'
    default: true
  lfs:
    description: 'Whether to download Git-LFS files'
    default: false
  submodules:
    description: >
      Whether to checkout submodules: `true` to checkout submodules or `recursive` to
      recursively checkout submodules.


      When the `ssh-key` input is not provided, SSH URLs beginning with `[email protected]:` are
      converted to HTTPS.
    default: false
  set-safe-directory:
    description: Add repository path as safe.directory for Git global config by running `git config --global --add safe.directory <path>`
    default: true
  github-server-url:
    description: The base URL for the GitHub instance that you are trying to clone from, will use environment defaults to fetch from the same instance that the workflow is running from unless specified. Example URLs are https://github.com or https://my-ghes-server.example.com
    required: false
outputs:
  ref:
    description: 'The branch, tag or SHA that was checked out'
  commit:
    description: 'The commit SHA that was checked out'
runs:
  using: node24
  main: dist/index.js
  post: dist/index.js

Checkout ¤

- uses: owner/repository@v1

Checkout a Git repository at a particular version

Inputs: ¤

Name Description Default
repository

Repository name with owner. For example, actions/checkout

${{ github.repository }}
ref

The branch, tag or SHA to checkout. When checking out the repository that triggered a workflow, this defaults to the reference or SHA for that event. Otherwise, uses the default branch.

token

Personal access token (PAT) used to fetch the repository. The PAT is configured with the local git config, which enables your scripts to run authenticated git commands. The post-job step removes the PAT.

We recommend using a service account with the least permissions necessary. Also when generating a new PAT, select the least scopes necessary.

Learn more about creating and using encrypted secrets

${{ github.token }}
ssh-key

SSH key used to fetch the repository. The SSH key is configured with the local git config, which enables your scripts to run authenticated git commands. The post-job step removes the SSH key.

We recommend using a service account with the least permissions necessary.

Learn more about creating and using encrypted secrets

ssh-known-hosts

Known hosts in addition to the user and global host key database. The public SSH keys for a host may be obtained using the utility ssh-keyscan. For example, ssh-keyscan github.com. The public key for github.com is always implicitly added.

ssh-strict

Whether to perform strict host key checking. When true, adds the options StrictHostKeyChecking=yes and CheckHostIP=no to the SSH command line. Use the input ssh-known-hosts to configure additional hosts.

true
ssh-user

The user to use when connecting to the remote SSH host. By default 'git' is used.

git
persist-credentials

Whether to configure the token or SSH key with the local git config

true
path

Relative path under $GITHUB_WORKSPACE to place the repository

clean

Whether to execute git clean -ffdx && git reset --hard HEAD before fetching

true
filter

Partially clone against a given filter. Overrides sparse-checkout if set.

sparse-checkout

Do a sparse checkout on given patterns. Each pattern should be separated with new lines.

sparse-checkout-cone-mode

Specifies whether to use cone-mode when doing a sparse checkout.

true
fetch-depth

Number of commits to fetch. 0 indicates all history for all branches and tags.

1
fetch-tags

Whether to fetch tags, even if fetch-depth > 0.

false
show-progress

Whether to show progress status output when fetching.

true
lfs

Whether to download Git-LFS files

false
submodules

Whether to checkout submodules: true to checkout submodules or recursive to recursively checkout submodules.

When the ssh-key input is not provided, SSH URLs beginning with [email protected]: are converted to HTTPS.

false
set-safe-directory

Add repository path as safe.directory for Git global config by running git config --global --add safe.directory <path>

true
github-server-url

The base URL for the GitHub instance that you are trying to clone from, will use environment defaults to fetch from the same instance that the workflow is running from unless specified. Example URLs are https://github.com or https://my-ghes-server.example.com

workflow_chart ¤

Whether to generate a Mermaid flowchart for reusable workflows.

The flowchart displays the workflow's jobs and steps in a flowchart diagram. Multiple jobs are rendered as subgraphs, and calls to other workflows are visually distinct. The diagram is rendered client-side in the browser using mkdocs-mermaid2.

In order to display the mermaid diagram, you'll need to setup the configuration for Mermaid.js in mkdocs-material or via mkdocs-mermaid2. Following the instructions in the linked pages to configure your mkdocs.yml. Additionally, we recommend setting up Panzoom for MkDocs, which allows zooming into the displayed diagram.

In the output diagram, each step in a job is represented as a node, jobs are represented as groups, and dependencies between jobs are displayed as edges between groups. Steps that call actions are rounded. Jobs that call another workflow are shown as a subroutine. Jobs and steps without name are omitted from the graph.

flowchart TB
    subgraph JobA
        direction LR
        a1(Checkout) --> a2["Shell step"]
    end
    subgraph JobB
        direction LR
        b1 --> b2
    end
    JobA -.-> JobB
    JobB -.-> Workflow[["Workflow call"]]
Hold "Alt" / "Option" to enable pan & zoom
Preview

Example workflow ¤

uses: owner/repository/.github/workflows/example_workflow.yml@v1
permissions:
  contents: read
  deployments: write
  pull-requests: write
  issues: read
with:
  environment: (1)
  1. Environment to deploy to. Must be one of

    • development
    • staging
    • production
  2. API key for external service

This key is illegal but will still be parsed


        flowchart TB
    subgraph job_validate["Validate Inputs"]
        direction LR
        job_validate_step_0("Checkout code")
        job_validate_step_2["Check secrets"]
        job_validate_step_0 --> job_validate_step_2
    end
    subgraph job_deploy["Deploy Application"]
        direction LR
        job_deploy_step_0["Setup deployment"]
        job_deploy_step_2["Execute deployment"]
        job_deploy_step_0 --> job_deploy_step_2
    end
    job_notify[["Send Notifications"]]
    job_validate -.-> job_deploy
    job_deploy -.-> job_notify
        
Hold "Alt" / "Option" to enable pan & zoom

Inputs: ¤

Name Description Default
environment

Environment to deploy to. Must be one of

  • development
  • staging
  • production
configuration

JSON configuration object

{}
version

Version to deploy

latest
enable-notifications

Whether to send notifications. Requires SLACK_WEBHOOK to be set.

false
parallel-jobs

Number of parallel jobs

1

Secrets: ¤

Name Description
API_KEY

API key for external service

DATABASE_URL

Database connection string

SLACK_WEBHOOK

Slack webhook URL for notifications

Source of owner/repository/.github/workflows/example_workflow.yml@v1
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
name: 'Example workflow'
description: "This key is illegal but will still be parsed"

on:
  workflow_call:
    inputs:
      environment: # group: environment
        description: |
          Environment to deploy to. Must be one of 

          - `development`
          - `staging`
          - `production`
        required: true
        type: string
      configuration: # group: environment
        description: 'JSON configuration object'
        required: false
        type: string
        default: '{}'
      version:
        description: 'Version to deploy'
        required: false
        type: string
        default: 'latest'
      enable-notifications:
        description: 'Whether to send notifications. Requires [`SLACK_WEBHOOK`](#secrets.SLACK_WEBHOOK) to be set.'
        required: false
        type: boolean
        default: false
      parallel-jobs:
        description: 'Number of parallel jobs'
        required: false
        type: number
        default: 1

    secrets:
      API_KEY: # group: environment
        description: 'API key for external service'
        required: true
      DATABASE_URL: # group: environment
        description: 'Database connection string'
        required: false
      SLACK_WEBHOOK:
        description: 'Slack webhook URL for notifications'
        required: false
    outputs:
      deployment-id: # group: deployment
        description: 'ID of the created deployment'
        value: ${{ jobs.deploy.outputs.deployment-id }}
      deployment-url: # group: deployment
        description: 'URL of the deployment'
        value: ${{ jobs.deploy.outputs.deployment-url }}
      success:
        description: 'Whether the deployment was successful'
        value: ${{ jobs.deploy.outputs.success }}

permissions:
  contents: read
  deployments: write
  pull-requests: write
  issues: read

env:
  DEPLOYMENT_ENVIRONMENT: ${{ inputs.environment }}
  ENABLE_DEBUG: false

jobs:
  validate:
    name: 'Validate Inputs'
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - run: |
          echo "Validating version: ${{ inputs.version }}"

      - name: Check secrets
        run: |
          if [[ -z "${{ secrets.API_KEY }}" ]]; then
            echo "Error: API_KEY secret is required"
            exit 1
          fi
          echo "All required secrets are available"

  deploy:
    name: 'Deploy Application'
    runs-on: ubuntu-latest
    needs: validate
    outputs:
      deployment-id: ${{ steps.deploy.outputs.deployment-id }}
      deployment-url: ${{ steps.deploy.outputs.deployment-url }}
      success: ${{ steps.deploy.outputs.success }}
    steps:
      - name: Setup deployment
        run: |
          echo "Setting up deployment for ${{ inputs.environment }}"
          echo "Version: ${{ inputs.version }}"
          echo "Parallel jobs: ${{ inputs.parallel-jobs }}"
          echo "Notifications enabled: ${{ inputs.enable-notifications }}"

      - run: |
          echo "Configuration: ${{ inputs.configuration }}"

      - name: Execute deployment
        id: deploy
        run: |
          deployment_id="reusable-deploy-$(date +%s)"
          deployment_url="https://${{ inputs.environment }}.example.com"

          echo "deployment-id=${deployment_id}" >> $GITHUB_OUTPUT
          echo "deployment-url=${deployment_url}" >> $GITHUB_OUTPUT
          echo "success=true" >> $GITHUB_OUTPUT

          echo "Deployment completed successfully"
          echo "ID: ${deployment_id}"
          echo "URL: ${deployment_url}"

  notify:
    name: Send Notifications
    uses: other-org/notify-workflow/.github/workflows/notify.yml@main
    needs: deploy
    if: ${{ inputs.enable-notifications == true }}
    with:
      deployment-id: ${{ needs.deploy.outputs.deployment-id }}
      deployment-url: ${{ needs.deploy.outputs.deployment-url }}
      environment: ${{ inputs.environment }}
      success: ${{ needs.deploy.outputs.success }}

Example workflow ¤

uses: owner/repository/.github/workflows/example_workflow.yml@v1
permissions:
  contents: read
  deployments: write
  pull-requests: write
  issues: read
with:
  environment: (1)
  1. Environment to deploy to. Must be one of

    • development
    • staging
    • production
  2. API key for external service

This key is illegal but will still be parsed

Inputs: ¤

Name Description Default
environment

Environment to deploy to. Must be one of

  • development
  • staging
  • production
configuration

JSON configuration object

{}
version

Version to deploy

latest
enable-notifications

Whether to send notifications. Requires SLACK_WEBHOOK to be set.

false
parallel-jobs

Number of parallel jobs

1

Secrets: ¤

Name Description
API_KEY

API key for external service

DATABASE_URL

Database connection string

SLACK_WEBHOOK

Slack webhook URL for notifications

Source of owner/repository/.github/workflows/example_workflow.yml@v1
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
name: 'Example workflow'
description: "This key is illegal but will still be parsed"

on:
  workflow_call:
    inputs:
      environment: # group: environment
        description: |
          Environment to deploy to. Must be one of 

          - `development`
          - `staging`
          - `production`
        required: true
        type: string
      configuration: # group: environment
        description: 'JSON configuration object'
        required: false
        type: string
        default: '{}'
      version:
        description: 'Version to deploy'
        required: false
        type: string
        default: 'latest'
      enable-notifications:
        description: 'Whether to send notifications. Requires [`SLACK_WEBHOOK`](#secrets.SLACK_WEBHOOK) to be set.'
        required: false
        type: boolean
        default: false
      parallel-jobs:
        description: 'Number of parallel jobs'
        required: false
        type: number
        default: 1

    secrets:
      API_KEY: # group: environment
        description: 'API key for external service'
        required: true
      DATABASE_URL: # group: environment
        description: 'Database connection string'
        required: false
      SLACK_WEBHOOK:
        description: 'Slack webhook URL for notifications'
        required: false
    outputs:
      deployment-id: # group: deployment
        description: 'ID of the created deployment'
        value: ${{ jobs.deploy.outputs.deployment-id }}
      deployment-url: # group: deployment
        description: 'URL of the deployment'
        value: ${{ jobs.deploy.outputs.deployment-url }}
      success:
        description: 'Whether the deployment was successful'
        value: ${{ jobs.deploy.outputs.success }}

permissions:
  contents: read
  deployments: write
  pull-requests: write
  issues: read

env:
  DEPLOYMENT_ENVIRONMENT: ${{ inputs.environment }}
  ENABLE_DEBUG: false

jobs:
  validate:
    name: 'Validate Inputs'
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - run: |
          echo "Validating version: ${{ inputs.version }}"

      - name: Check secrets
        run: |
          if [[ -z "${{ secrets.API_KEY }}" ]]; then
            echo "Error: API_KEY secret is required"
            exit 1
          fi
          echo "All required secrets are available"

  deploy:
    name: 'Deploy Application'
    runs-on: ubuntu-latest
    needs: validate
    outputs:
      deployment-id: ${{ steps.deploy.outputs.deployment-id }}
      deployment-url: ${{ steps.deploy.outputs.deployment-url }}
      success: ${{ steps.deploy.outputs.success }}
    steps:
      - name: Setup deployment
        run: |
          echo "Setting up deployment for ${{ inputs.environment }}"
          echo "Version: ${{ inputs.version }}"
          echo "Parallel jobs: ${{ inputs.parallel-jobs }}"
          echo "Notifications enabled: ${{ inputs.enable-notifications }}"

      - run: |
          echo "Configuration: ${{ inputs.configuration }}"

      - name: Execute deployment
        id: deploy
        run: |
          deployment_id="reusable-deploy-$(date +%s)"
          deployment_url="https://${{ inputs.environment }}.example.com"

          echo "deployment-id=${deployment_id}" >> $GITHUB_OUTPUT
          echo "deployment-url=${deployment_url}" >> $GITHUB_OUTPUT
          echo "success=true" >> $GITHUB_OUTPUT

          echo "Deployment completed successfully"
          echo "ID: ${deployment_id}"
          echo "URL: ${deployment_url}"

  notify:
    name: Send Notifications
    uses: other-org/notify-workflow/.github/workflows/notify.yml@main
    needs: deploy
    if: ${{ inputs.enable-notifications == true }}
    with:
      deployment-id: ${{ needs.deploy.outputs.deployment-id }}
      deployment-url: ${{ needs.deploy.outputs.deployment-url }}
      environment: ${{ inputs.environment }}
      success: ${{ needs.deploy.outputs.success }}

workflow_chart_step_direction ¤

The direction of the flowchart for steps within jobs.

  • TB: top-to-bottom layout,
  • LR: left-to-right layout.
Preview

Example workflow ¤

uses: owner/repository/.github/workflows/example_workflow.yml@v1
permissions:
  contents: read
  deployments: write
  pull-requests: write
  issues: read
with:
  environment: (1)
  1. Environment to deploy to. Must be one of

    • development
    • staging
    • production
  2. API key for external service

This key is illegal but will still be parsed


        flowchart TB
    subgraph job_validate["Validate Inputs"]
        direction TB
        job_validate_step_0("Checkout code")
        job_validate_step_2["Check secrets"]
        job_validate_step_0 --> job_validate_step_2
    end
    subgraph job_deploy["Deploy Application"]
        direction TB
        job_deploy_step_0["Setup deployment"]
        job_deploy_step_2["Execute deployment"]
        job_deploy_step_0 --> job_deploy_step_2
    end
    job_notify[["Send Notifications"]]
    job_validate -.-> job_deploy
    job_deploy -.-> job_notify
        
Hold "Alt" / "Option" to enable pan & zoom

Inputs: ¤

Name Description Default
environment

Environment to deploy to. Must be one of

  • development
  • staging
  • production
configuration

JSON configuration object

{}
version

Version to deploy

latest
enable-notifications

Whether to send notifications. Requires SLACK_WEBHOOK to be set.

false
parallel-jobs

Number of parallel jobs

1

Secrets: ¤

Name Description
API_KEY

API key for external service

DATABASE_URL

Database connection string

SLACK_WEBHOOK

Slack webhook URL for notifications

Source of owner/repository/.github/workflows/example_workflow.yml@v1
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
name: 'Example workflow'
description: "This key is illegal but will still be parsed"

on:
  workflow_call:
    inputs:
      environment: # group: environment
        description: |
          Environment to deploy to. Must be one of 

          - `development`
          - `staging`
          - `production`
        required: true
        type: string
      configuration: # group: environment
        description: 'JSON configuration object'
        required: false
        type: string
        default: '{}'
      version:
        description: 'Version to deploy'
        required: false
        type: string
        default: 'latest'
      enable-notifications:
        description: 'Whether to send notifications. Requires [`SLACK_WEBHOOK`](#secrets.SLACK_WEBHOOK) to be set.'
        required: false
        type: boolean
        default: false
      parallel-jobs:
        description: 'Number of parallel jobs'
        required: false
        type: number
        default: 1

    secrets:
      API_KEY: # group: environment
        description: 'API key for external service'
        required: true
      DATABASE_URL: # group: environment
        description: 'Database connection string'
        required: false
      SLACK_WEBHOOK:
        description: 'Slack webhook URL for notifications'
        required: false
    outputs:
      deployment-id: # group: deployment
        description: 'ID of the created deployment'
        value: ${{ jobs.deploy.outputs.deployment-id }}
      deployment-url: # group: deployment
        description: 'URL of the deployment'
        value: ${{ jobs.deploy.outputs.deployment-url }}
      success:
        description: 'Whether the deployment was successful'
        value: ${{ jobs.deploy.outputs.success }}

permissions:
  contents: read
  deployments: write
  pull-requests: write
  issues: read

env:
  DEPLOYMENT_ENVIRONMENT: ${{ inputs.environment }}
  ENABLE_DEBUG: false

jobs:
  validate:
    name: 'Validate Inputs'
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - run: |
          echo "Validating version: ${{ inputs.version }}"

      - name: Check secrets
        run: |
          if [[ -z "${{ secrets.API_KEY }}" ]]; then
            echo "Error: API_KEY secret is required"
            exit 1
          fi
          echo "All required secrets are available"

  deploy:
    name: 'Deploy Application'
    runs-on: ubuntu-latest
    needs: validate
    outputs:
      deployment-id: ${{ steps.deploy.outputs.deployment-id }}
      deployment-url: ${{ steps.deploy.outputs.deployment-url }}
      success: ${{ steps.deploy.outputs.success }}
    steps:
      - name: Setup deployment
        run: |
          echo "Setting up deployment for ${{ inputs.environment }}"
          echo "Version: ${{ inputs.version }}"
          echo "Parallel jobs: ${{ inputs.parallel-jobs }}"
          echo "Notifications enabled: ${{ inputs.enable-notifications }}"

      - run: |
          echo "Configuration: ${{ inputs.configuration }}"

      - name: Execute deployment
        id: deploy
        run: |
          deployment_id="reusable-deploy-$(date +%s)"
          deployment_url="https://${{ inputs.environment }}.example.com"

          echo "deployment-id=${deployment_id}" >> $GITHUB_OUTPUT
          echo "deployment-url=${deployment_url}" >> $GITHUB_OUTPUT
          echo "success=true" >> $GITHUB_OUTPUT

          echo "Deployment completed successfully"
          echo "ID: ${deployment_id}"
          echo "URL: ${deployment_url}"

  notify:
    name: Send Notifications
    uses: other-org/notify-workflow/.github/workflows/notify.yml@main
    needs: deploy
    if: ${{ inputs.enable-notifications == true }}
    with:
      deployment-id: ${{ needs.deploy.outputs.deployment-id }}
      deployment-url: ${{ needs.deploy.outputs.deployment-url }}
      environment: ${{ inputs.environment }}
      success: ${{ needs.deploy.outputs.success }}

Example workflow ¤

uses: owner/repository/.github/workflows/example_workflow.yml@v1
permissions:
  contents: read
  deployments: write
  pull-requests: write
  issues: read
with:
  environment: (1)
  1. Environment to deploy to. Must be one of

    • development
    • staging
    • production
  2. API key for external service

This key is illegal but will still be parsed


        flowchart TB
    subgraph job_validate["Validate Inputs"]
        direction LR
        job_validate_step_0("Checkout code")
        job_validate_step_2["Check secrets"]
        job_validate_step_0 --> job_validate_step_2
    end
    subgraph job_deploy["Deploy Application"]
        direction LR
        job_deploy_step_0["Setup deployment"]
        job_deploy_step_2["Execute deployment"]
        job_deploy_step_0 --> job_deploy_step_2
    end
    job_notify[["Send Notifications"]]
    job_validate -.-> job_deploy
    job_deploy -.-> job_notify
        
Hold "Alt" / "Option" to enable pan & zoom

Inputs: ¤

Name Description Default
environment

Environment to deploy to. Must be one of

  • development
  • staging
  • production
configuration

JSON configuration object

{}
version

Version to deploy

latest
enable-notifications

Whether to send notifications. Requires SLACK_WEBHOOK to be set.

false
parallel-jobs

Number of parallel jobs

1

Secrets: ¤

Name Description
API_KEY

API key for external service

DATABASE_URL

Database connection string

SLACK_WEBHOOK

Slack webhook URL for notifications

Source of owner/repository/.github/workflows/example_workflow.yml@v1
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
name: 'Example workflow'
description: "This key is illegal but will still be parsed"

on:
  workflow_call:
    inputs:
      environment: # group: environment
        description: |
          Environment to deploy to. Must be one of 

          - `development`
          - `staging`
          - `production`
        required: true
        type: string
      configuration: # group: environment
        description: 'JSON configuration object'
        required: false
        type: string
        default: '{}'
      version:
        description: 'Version to deploy'
        required: false
        type: string
        default: 'latest'
      enable-notifications:
        description: 'Whether to send notifications. Requires [`SLACK_WEBHOOK`](#secrets.SLACK_WEBHOOK) to be set.'
        required: false
        type: boolean
        default: false
      parallel-jobs:
        description: 'Number of parallel jobs'
        required: false
        type: number
        default: 1

    secrets:
      API_KEY: # group: environment
        description: 'API key for external service'
        required: true
      DATABASE_URL: # group: environment
        description: 'Database connection string'
        required: false
      SLACK_WEBHOOK:
        description: 'Slack webhook URL for notifications'
        required: false
    outputs:
      deployment-id: # group: deployment
        description: 'ID of the created deployment'
        value: ${{ jobs.deploy.outputs.deployment-id }}
      deployment-url: # group: deployment
        description: 'URL of the deployment'
        value: ${{ jobs.deploy.outputs.deployment-url }}
      success:
        description: 'Whether the deployment was successful'
        value: ${{ jobs.deploy.outputs.success }}

permissions:
  contents: read
  deployments: write
  pull-requests: write
  issues: read

env:
  DEPLOYMENT_ENVIRONMENT: ${{ inputs.environment }}
  ENABLE_DEBUG: false

jobs:
  validate:
    name: 'Validate Inputs'
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - run: |
          echo "Validating version: ${{ inputs.version }}"

      - name: Check secrets
        run: |
          if [[ -z "${{ secrets.API_KEY }}" ]]; then
            echo "Error: API_KEY secret is required"
            exit 1
          fi
          echo "All required secrets are available"

  deploy:
    name: 'Deploy Application'
    runs-on: ubuntu-latest
    needs: validate
    outputs:
      deployment-id: ${{ steps.deploy.outputs.deployment-id }}
      deployment-url: ${{ steps.deploy.outputs.deployment-url }}
      success: ${{ steps.deploy.outputs.success }}
    steps:
      - name: Setup deployment
        run: |
          echo "Setting up deployment for ${{ inputs.environment }}"
          echo "Version: ${{ inputs.version }}"
          echo "Parallel jobs: ${{ inputs.parallel-jobs }}"
          echo "Notifications enabled: ${{ inputs.enable-notifications }}"

      - run: |
          echo "Configuration: ${{ inputs.configuration }}"

      - name: Execute deployment
        id: deploy
        run: |
          deployment_id="reusable-deploy-$(date +%s)"
          deployment_url="https://${{ inputs.environment }}.example.com"

          echo "deployment-id=${deployment_id}" >> $GITHUB_OUTPUT
          echo "deployment-url=${deployment_url}" >> $GITHUB_OUTPUT
          echo "success=true" >> $GITHUB_OUTPUT

          echo "Deployment completed successfully"
          echo "ID: ${deployment_id}"
          echo "URL: ${deployment_url}"

  notify:
    name: Send Notifications
    uses: other-org/notify-workflow/.github/workflows/notify.yml@main
    needs: deploy
    if: ${{ inputs.enable-notifications == true }}
    with:
      deployment-id: ${{ needs.deploy.outputs.deployment-id }}
      deployment-url: ${{ needs.deploy.outputs.deployment-url }}
      environment: ${{ inputs.environment }}
      success: ${{ needs.deploy.outputs.success }}