In this hands-on lab you will create a reusable workflow and a workflow that consumes it. You will learn to pass in parameters to the reusable workflow and use output parameters in the consuming workflow.
This hands on lab consists of the following steps:
- Create a new file
.github/workflows/reusable.yml(paste the file name with the path in the box). - Set the name to
Reusable workflow.
Solution
name: Reusable workflow- Add a
workflow_calltrigger with an input parameterwho-to-greetof the typestringthat is required. Set the default value toWorld.
Solution
on:
workflow_call:
inputs:
who-to-greet:
description: 'The person to greet'
type: string
required: true
default: World- Add a job named
reusable-jobthat runs onubuntu-latestthat echos "Hello " to the console.
Solution
jobs:
reusable-job:
runs-on: ubuntu-latest
steps:
- name: Greet someone
run: echo "Hello ${{ inputs.who-to-greet }}"- Add an additional step with the id
timethat uses a workflow command to set an output parameter namedcurrent-timeto the current date and time (use$(date)for that).
Solution
- name: Set time
id: time
run: echo "time=$(date)" >> $GITHUB_OUTPUT- Add an output called
current-timeto thereusable-job.
Solution
outputs:
current-time: ${{ steps.time.outputs.time }}- Add an output parameter called
current-timetoworkflow_calland set it to the outputs of the workflow command.
Solution
outputs:
current-time:
description: 'The time when greeting.'
value: ${{ jobs.reusable-job.outputs.current-time }}Complete Solution
name: Reusable workflow
on:
workflow_call:
inputs:
who-to-greet:
description: 'The person to greet'
type: string
required: true
default: World
outputs:
current-time:
description: 'The time when greeting.'
value: ${{ jobs.reusable-job.outputs.current-time }}
jobs:
reusable-job:
runs-on: ubuntu-latest
outputs:
current-time: ${{ steps.time.outputs.time }}
steps:
- name: Greet someone
run: echo "Hello ${{ inputs.who-to-greet }}"
- name: Set time
id: time
run: echo "time=$(date)" >> $GITHUB_OUTPUT- Create a new file
.github/workflows/reuse.yml(paste the file name with the path in the box). - Set the name to
Reuse other workflowand add a manual trigger.
Solution
name: Reuse other workflow
on: [workflow_dispatch]- Add a job
call-workflowthat uses the reusable workflow and passes in your user name as an input parameter.
Solution
jobs:
call-workflow:
uses: ./.github/workflows/reusable.yml
with:
who-to-greet: '@octocat'- Add another job
use-outputthat writes the output parametercurrent-timeto the console. (Hint: use the needs context to access the output)
Solution
use-output:
runs-on: ubuntu-latest
needs: [call-workflow]
steps:
- run: echo "Time was ${{ needs.call-workflow.outputs.current-time }}"- Run the workflow and observe the output.
In this lab you have learned to create a reusable workflow and a workflow that consumes it. You also have learned to pass in parameters to the reusable workflow and to use output parameters in the consuming workflow.
You can continue with the README.