Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Making access to reusable workflows clearer #33134

Merged
merged 9 commits into from
May 24, 2024
12 changes: 12 additions & 0 deletions content/actions/using-workflows/reusing-workflows.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,10 +55,22 @@
You cannot directly use reusable workflows defined on {% data variables.product.prodname_dotcom_the_website %}. Instead store a copy of the reusable workflow on {% data variables.location.product_location %}, and call the workflow from that path.

{% elsif actions-workflow-policy %}, and your {% ifversion ghec %}enterprise{% else %}organization{% endif %} allows you to use public reusable workflows.{% endif %}{% ifversion ghes or ghec %}
- The called workflow is stored in an internal repository and the settings for that repository allow it to be accessed. For more information, see {% ifversion internal-actions %}"[AUTOTITLE](/actions/creating-actions/sharing-actions-and-workflows-with-your-enterprise){% else %}"[AUTOTITLE](/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository#allowing-access-to-components-in-an-internal-repository){% endif %}."{% endif %}{% ifversion private-actions %}

Check warning on line 58 in content/actions/using-workflows/reusing-workflows.md

View workflow job for this annotation

GitHub Actions / lint-content

Liquid `ifversion` (and `elsif`) should not always be true

The Liquid ifversion condition 'private-actions' includes all possible versions and will always be true
- The called workflow is stored in a private repository and the settings for that repository allow it to be accessed. For more information, see {% ifversion ghes or ghec %}"[AUTOTITLE](/actions/creating-actions/sharing-actions-and-workflows-with-your-enterprise)."{% else %}"[AUTOTITLE](/actions/creating-actions/sharing-actions-and-workflows-with-your-organization)" and "[AUTOTITLE](/actions/creating-actions/sharing-actions-and-workflows-from-your-private-repository)."{% endif %}
{% endif %}

In summary, for the called workflow to be reachable by the caller workflow, the repository's visibility must be as shown in the table below.
hubwriter marked this conversation as resolved.
Show resolved Hide resolved

| Caller repository | Accessible workflows repositories |
|----|----|
| `private` | `private`, `internal`, and `public` |
| `internal` | `internal`, and `public` |
| `public` | `public` |

Additionaly, please note that the **Actions permissions** on the caller's repository Actions settings page must be configured to allow the use of actions and reusable workflows.

Furthermore, except for a public repository, also note that the **Access** policy on the called workflow's repository Actions settings page must be explicitly configured to allow access from repositories in the organization or repositories in the enterprise.
hubwriter marked this conversation as resolved.
Show resolved Hide resolved

{% data reusables.actions.actions-redirects-workflows %}

## Using runners
Expand All @@ -75,7 +87,7 @@

## Limitations

{% ifversion nested-reusable-workflow %}

Check warning on line 90 in content/actions/using-workflows/reusing-workflows.md

View workflow job for this annotation

GitHub Actions / lint-content

Liquid `ifversion` (and `elsif`) should not always be true

The Liquid ifversion condition 'nested-reusable-workflow' includes all possible versions and will always be true
- You can connect up to four levels of workflows. For more information, see "[Nesting reusable workflows](#nesting-reusable-workflows)."
- You can call a maximum of 20 unique reusable workflows from a single workflow file. This limit includes any trees of nested reusable workflows that may be called starting from your top-level caller workflow file.

Expand All @@ -84,8 +96,8 @@
- Reusable workflows can't call other reusable workflows.
- You can call a maximum of 20 unique reusable workflows from a single workflow file.
{% endif %}
{% ifversion private-actions %}{% else %}- Reusable workflows stored within a private repository can only be used by workflows within the same repository.{% endif %}

Check warning on line 99 in content/actions/using-workflows/reusing-workflows.md

View workflow job for this annotation

GitHub Actions / lint-content

Liquid `ifversion` (and `elsif`) should not always be true

The Liquid ifversion condition 'private-actions' includes all possible versions and will always be true
{% ifversion actions-reusable-workflow-matrix %}{% else %}* The `strategy` property is not supported in any job that calls a reusable workflow.{% endif %}

Check warning on line 100 in content/actions/using-workflows/reusing-workflows.md

View workflow job for this annotation

GitHub Actions / lint-content

Liquid `ifversion` (and `elsif`) should not always be true

The Liquid ifversion condition 'actions-reusable-workflow-matrix' includes all possible versions and will always be true
- Any environment variables set in an `env` context defined at the workflow level in the caller workflow are not propagated to the called workflow. For more information, see "[AUTOTITLE](/actions/learn-github-actions/variables)" and "[AUTOTITLE](/actions/learn-github-actions/contexts#env-context)."
- Similarly, environment variables set in the `env` context, defined in the called workflow, are not accessible in the `env` context of the caller workflow. Instead, you must use outputs of the reusable workflow. For more information, see "[Using outputs from a reusable workflow](#using-outputs-from-a-reusable-workflow)."
- To reuse variables in multiple workflows, set them at the organization, repository, or environment levels and reference them using the `vars` context. For more information see "[AUTOTITLE](/actions/learn-github-actions/variables)" and "[AUTOTITLE](/actions/learn-github-actions/contexts#vars-context)."
Expand Down Expand Up @@ -123,7 +135,7 @@

{% endraw %}
For details of the syntax for defining inputs and secrets, see [`on.workflow_call.inputs`](/actions/using-workflows/workflow-syntax-for-github-actions#onworkflow_callinputs) and [`on.workflow_call.secrets`](/actions/using-workflows/workflow-syntax-for-github-actions#onworkflow_callsecrets).
{% ifversion actions-inherit-secrets-reusable-workflows %}

Check warning on line 138 in content/actions/using-workflows/reusing-workflows.md

View workflow job for this annotation

GitHub Actions / lint-content

Liquid `ifversion` (and `elsif`) should not always be true

The Liquid ifversion condition 'actions-inherit-secrets-reusable-workflows' includes all possible versions and will always be true
1. In the reusable workflow, reference the input or secret that you defined in the `on` key in the previous step.

{% note %}
Expand Down Expand Up @@ -211,7 +223,7 @@

{% data reusables.actions.pass-inputs-to-reusable-workflows%}

{% ifversion actions-reusable-workflow-matrix %}

Check warning on line 226 in content/actions/using-workflows/reusing-workflows.md

View workflow job for this annotation

GitHub Actions / lint-content

Liquid `ifversion` (and `elsif`) should not always be true

The Liquid ifversion condition 'actions-reusable-workflow-matrix' includes all possible versions and will always be true

### Using a matrix strategy with a reusable workflow

Expand Down Expand Up @@ -247,10 +259,10 @@
- [`jobs.<job_id>.with.<input_id>`](/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idwithinput_id)
- [`jobs.<job_id>.secrets`](/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idsecrets)
- [`jobs.<job_id>.secrets.<secret_id>`](/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idsecretssecret_id)
{%- ifversion actions-inherit-secrets-reusable-workflows %}

Check warning on line 262 in content/actions/using-workflows/reusing-workflows.md

View workflow job for this annotation

GitHub Actions / lint-content

Liquid `ifversion` (and `elsif`) should not always be true

The Liquid ifversion condition 'actions-inherit-secrets-reusable-workflows' includes all possible versions and will always be true
- [`jobs.<job_id>.secrets.inherit`](/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idsecretsinherit)
{%- endif %}
{%- ifversion actions-reusable-workflow-matrix %}

Check warning on line 265 in content/actions/using-workflows/reusing-workflows.md

View workflow job for this annotation

GitHub Actions / lint-content

Liquid `ifversion` (and `elsif`) should not always be true

The Liquid ifversion condition 'actions-reusable-workflow-matrix' includes all possible versions and will always be true
- [`jobs.<job_id>.strategy`](/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstrategy)
{%- endif %}
- [`jobs.<job_id>.needs`](/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idneeds)
Expand Down Expand Up @@ -299,7 +311,7 @@

{% endraw %}

{% ifversion nested-reusable-workflow %}

Check warning on line 314 in content/actions/using-workflows/reusing-workflows.md

View workflow job for this annotation

GitHub Actions / lint-content

Liquid `ifversion` (and `elsif`) should not always be true

The Liquid ifversion condition 'nested-reusable-workflow' includes all possible versions and will always be true

## Nesting reusable workflows

Expand Down Expand Up @@ -358,7 +370,7 @@

## Using outputs from a reusable workflow

A reusable workflow may generate data that you want to use in the caller workflow. To use these outputs, you must specify them as the outputs of the reusable workflow.{% ifversion actions-reusable-workflow-matrix %}

Check warning on line 373 in content/actions/using-workflows/reusing-workflows.md

View workflow job for this annotation

GitHub Actions / lint-content

Liquid `ifversion` (and `elsif`) should not always be true

The Liquid ifversion condition 'actions-reusable-workflow-matrix' includes all possible versions and will always be true

If a reusable workflow that sets an output is executed with a matrix strategy, the output will be the output set by the last successful completing reusable workflow of the matrix which actually sets a value.
That means if the last successful completing reusable workflow sets an empty string for its output, and the second last successful completing reusable workflow sets an actual value for its output, the output will contain the value of the second last completing reusable workflow.{% endif %}
Expand Down
Loading