title | shortTitle | intro | redirect_from | versions | type | defaultPlatform | topics | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Creating a composite action |
Create a composite action |
In this guide, you'll learn how to build a composite action. |
|
|
tutorial |
linux |
|
{% data reusables.actions.enterprise-github-hosted-runners %}
In this guide, you'll learn about the basic components needed to create and use a packaged composite action. To focus this guide on the components needed to package the action, the functionality of the action's code is minimal. The action prints "Hello World" and then "Goodbye", or if you provide a custom name, it prints "Hello [who-to-greet]" and then "Goodbye". The action also maps a random number to the random-number
output variable, and runs a script named goodbye.sh
.
Once you complete this project, you should understand how to build your own composite action and test it in a workflow.
{% data reusables.actions.context-injection-warning %}
Composite actions allow you to collect a series of workflow job steps into a single action which you can then run as a single job step in multiple workflows. Reusable workflows provide another way of avoiding duplication, by allowing you to run a complete workflow from within other workflows. For more information, see AUTOTITLE.
Before you begin, you'll create a repository on {% data variables.product.github %}.
-
Create a new public repository on {% data variables.product.github %}. You can choose any repository name, or use the following
hello-world-composite-action
example. You can add these files after your project has been pushed to {% data variables.product.product_name %}. For more information, see AUTOTITLE. -
Clone your repository to your computer. For more information, see AUTOTITLE.
-
From your terminal, change directories into your new repository.
cd hello-world-composite-action
-
In the
hello-world-composite-action
repository, create a new file calledgoodbye.sh
with example code:echo "echo Goodbye" > goodbye.sh
-
From your terminal, make
goodbye.sh
executable. {% linux %}{% data reusables.actions.composite-actions-executable-linux-mac %}
{% endlinux %} {% mac %}
{% data reusables.actions.composite-actions-executable-linux-mac %}
{% endmac %} {% windows %}
git add --chmod=+x -- goodbye.sh
{% endwindows %}
-
From your terminal, check in your
goodbye.sh
file.{% linux %}
{% data reusables.actions.composite-actions-commit-file-linux-mac %}
{% endlinux %} {% mac %}
{% data reusables.actions.composite-actions-commit-file-linux-mac %} {% endmac %} {% windows %}
git commit -m "Add goodbye script" git push
{% endwindows %}
-
In the
hello-world-composite-action
repository, create a new file calledaction.yml
and add the following example code. For more information about this syntax, see AUTOTITLE.name: 'Hello World' description: 'Greet someone' inputs: who-to-greet: # id of input description: 'Who to greet' required: true default: 'World' outputs: random-number: description: "Random number" value: {% raw %}${{ steps.random-number-generator.outputs.random-number }}{% endraw %} runs: using: "composite" steps: - name: Set Greeting run: echo "Hello $INPUT_WHO_TO_GREET." shell: bash env: INPUT_WHO_TO_GREET: {% raw %}${{ inputs.who-to-greet }}{% endraw %} - name: Random Number Generator id: random-number-generator run: echo "random-number=$(echo $RANDOM)" >> $GITHUB_OUTPUT shell: bash - name: Set GitHub Path run: echo "$GITHUB_ACTION_PATH" >> $GITHUB_PATH shell: bash env: GITHUB_ACTION_PATH: {% raw %}${{ github.action_path }}{% endraw %} - name: Run goodbye.sh run: goodbye.sh shell: bash
This file defines the
who-to-greet
input, maps the random generated number to therandom-number
output variable, adds the action's path to the runner system path (to locate thegoodbye.sh
script during execution), and runs thegoodbye.sh
script.For more information about managing outputs, see AUTOTITLE.
For more information about how to use
github.action_path
, see AUTOTITLE. -
From your terminal, check in your
action.yml
file.git add action.yml git commit -m "Add action" git push
-
From your terminal, add a tag. This example uses a tag called
v1
. For more information, see AUTOTITLE.git tag -a -m "Description of this release" v1 git push --follow-tags
The following workflow code uses the completed hello world action that you made in AUTOTITLE.
Copy the workflow code into a .github/workflows/main.yml
file in another repository, replacing OWNER
and SHA
with the repository owner and the SHA of the commit you want to use, respectively. You can also replace the who-to-greet
input with your name.
on: [push]
jobs:
hello_world_job:
runs-on: ubuntu-latest
name: A job to say hello
steps:
- uses: {% data reusables.actions.action-checkout %}
- id: foo
uses: OWNER/hello-world-composite-action@SHA
with:
who-to-greet: 'Mona the Octocat'
- run: echo random-number "$RANDOM_NUMBER"
shell: bash
env:
RANDOM_NUMBER: {% raw %}${{ steps.foo.outputs.random-number }}{% endraw %}
From your repository, click the Actions tab, and select the latest workflow run. The output should include: "Hello Mona the Octocat", the result of the "Goodbye" script, and a random number.
You can find many examples of composite actions on {% data variables.product.github %}.