Closed abizmo closed 3 years ago
Nice work, you committed a Dockerfile
. You'll notice at the end of the Dockerfile, we refer to an entrypoint script.
ENTRYPOINT ["/entrypoint.sh"]
The entrypoint.sh
script will be run in Docker, and it will define what the action is really going to be doing.
An entrypoint script must exist in our repository so that Docker has something to execute.
As a part of this branch and pull request, create a file in the /action-a/
directory titled entrypoint.sh
. You can do so with this quicklink
Add the following content to the entrypoint.sh
file:
#!/bin/sh -l
sh -c "echo Hello world my name is $INPUT_MY_NAME"
Stage and commit the changes
Push the changes to GitHub
Nice work adding the entrypoint.sh
script.
In entrypoint.sh
, all we're doing is outputting a "Hello world" message using an environment variable called MY_NAME
.
Next, we'll define the action.yml
file which contains the metadata for our action.
All actions require a metadata file that uses YAML syntax. The data in the metadata file defines the inputs
, outputs
and main entrypoint
for your action.
We will use an input
parameter to read in the value of MY_NAME
.
As a part of this branch and pull request, create a file titled action-a/action.yml
. You can do so using this quicklink or manually.
Add the following content to the action.yml
file:
name: "Hello Actions"
description: "Greet someone"
author: "octocat@github.com"
inputs:
MY_NAME:
description: "Who to greet"
required: true
default: "World"
runs:
using: "docker"
image: "Dockerfile"
branding:
icon: "mic"
color: "purple"
Stage and commit the changes
Push the changes to GitHub
Next, we'll define a workflow that uses the GitHub Action.
Workflows are defined in special files in the .github/workflows
directory, named main.yml
.
Workflows can execute based on your chosen event. For this lab, we'll be using the push
event.
We'll break down each line of the workflow in the next step.
First, we'll add the structure of the workflow.
.github/workflows/main.yml
. You can do so using this quicklink or manually:
workflows
directory nested inside the .github
directory..github/workflows/
directory, create a file titled main.yml
main.yml
file:
name: A workflow for my Hello World file
on: push
Nice work! :tada: You added a workflow!
Here's what it means:
name: A workflow for my Hello World file
gives your workflow a name. This name appears on any pull request or in the Actions tab. The name is especially useful when there are multiple workflows in your repository.on: push
indicates that your workflow will execute anytime code is pushed to your repository, using the push
event.Next, we need to specify a job or jobs to run.
Workflows piece together jobs, and jobs piece together steps. We'll now create a job that runs an action. Actions can be used from within the same repository, from any other public repository, or from a published Docker container image. We'll use an action that we'll define in this repository.
We'll add the block now, and break it down in the next step.
Let's add the expected action to the workflow.
.github/workflows/main.yml
to append the following content:
jobs:
build:
name: Hello world action
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- uses: ./action-a
with:
MY_NAME: "Mona"
Nice, you just added an action block to your workflow file! Here are some important details about why each part of the block exists and what each part does.
jobs:
is the base component of a workflow runbuild:
is the identifier we're attaching to this jobname:
is the name of the job, this is displayed on GitHub when the workflow is runningruns-on:
defines the type of machine to run the job on. The machine can be either a GitHub-hosted runner or a self-hosted runner.steps:
the linear sequence of operations that make up a jobuses: actions/checkout@v1
uses a community action called checkout
to allow the workflow to access the contents of the repositoryuses: ./action-a
provides the relative path to the action we created in the action-a
directory of the repositorywith
: is used to specify the input variables that will be available to your action in the runtime environment. In this case, the input variable is MY_NAME
, and it is currently initialized to "Mona"
.Your repository now contains an action (defined in the /action-a/
folder) and a workflow (defined in the ./github/workflows/main.yml
file).
This action will run any time a new commit is created or pushed to the remote repository. Since you just created a commit, the workflow should have been triggered. This might take a few minutes since it's the first time running in this repository.
The status of your action is shown here in the pull request (look for All checks have passed below), or you can click the "Actions" tab in your repository. From there you will see the actions that have run, and you can click on the action's "Log" link to view details.
You've done the work, now sit back and see your action trigger the workflow!
Actions can take a minute or two to run. Sometimes, I also respond too fast for the page to update! If you don't see a response from your action, wait a few seconds and refresh the page.
Add Dockerfile