Creating a composite run steps action

In this guide, you'll learn how to build a composite run steps action.

GitHub Actions is available with GitHub Free, GitHub Pro, GitHub Free for organizations, GitHub Team, GitHub Enterprise Cloud, GitHub Enterprise Server, and GitHub One. GitHub Actions is not available for private repositories owned by accounts using legacy per-repository plans. For more information, see "GitHub's products."

In this article

Introduction

In this guide, you'll learn about the basic components needed to create and use a packaged composite run steps 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 run steps action and test it in a workflow.

Prerequisites

Before you begin, you'll create a GitHub repository.

  1. Create a new public repository on GitHub. You can choose any repository name, or use the following hello-world-composite-run-steps-action example. You can add these files after your project has been pushed to GitHub. For more information, see "Create a new repository."

  2. Clone your repository to your computer. For more information, see "Cloning a repository."

  3. From your terminal, change directories into your new repository.

    cd hello-world-composite-run-steps-action
  4. In the hello-world-composite-run-steps-action repository, create a new file called goodbye.sh, and add the following example code:

    echo "Goodbye"
    
  5. From your terminal, make goodbye.sh executable.

    chmod +x goodbye.sh
  6. From your terminal, check in your goodbye.sh file.

    git add goodbye.sh
    git commit -m "Add goodbye script"
    git push

Creating an action metadata file

  1. In the hello-world-composite-run-steps-action repository, create a new file called action.yml and add the following example code. For more information about this syntax, see "runs for a composite run steps".

    action.yml

    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: ${{ steps.random-number-generator.outputs.random-id }}
    runs:
      using: "composite"
      steps: 
        - run: echo Hello ${{ inputs.who-to-greet }}.
          shell: bash
        - id: random-number-generator
          run: echo "::set-output name=random-id::$(echo $RANDOM)"
          shell: bash
        - run: ${{ github.action_path }}/goodbye.sh
          shell: bash
    

    This file defines the who-to-greet input, maps the random generated number to the random-number output variable, and runs the goodbye.sh script. It also tells the runner how to execute the composite run steps action.

    For more information about managing outputs, see "outputs for a composite run steps".

    For more information about how to use github.action_path, see "github context".

  2. From your terminal, check in your action.yml file.

    git add action.yml
    git commit -m "Add action"
    git push
  3. From your terminal, add a tag. This example uses a tag called v1. For more information, see "About actions."

    git tag -a -m "Description of this release" v1
    git push --follow-tags

Testing out your action in a workflow

The following workflow code uses the completed hello world action that you made in "Creating an action metadata file".

Copy the workflow code into a .github/workflows/main.yml file in another repository, but replace actions/hello-world-composite-run-steps-action@v1 with the repository and tag you created. You can also replace the who-to-greet input with your name.

.github/workflows/main.yml

on: [push]

jobs:
  hello_world_job:
    runs-on: ubuntu-latest
    name: A job to say hello
    steps:
    - uses: actions/checkout@v2
    - id: foo
      uses: actions/hello-world-composite-run-steps-action@v1
      with:
        who-to-greet: 'Mona the Octocat'
    - run: echo random-number ${{ steps.foo.outputs.random-number }} 
      shell: bash

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.

Did this doc help you?

Privacy policy

Help us make these docs great!

All GitHub docs are open source. See something that's wrong or unclear? Submit a pull request.

Make a contribution

Or, learn how to contribute.