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

Create Dockerfile #2

Open
wants to merge 7 commits into
base: master
Choose a base branch
from
Open

Create Dockerfile #2

wants to merge 7 commits into from

Conversation

krystof-k
Copy link
Owner

No description provided.

@github-learning-lab
Copy link

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.

Step 2: Add the action's script

An entrypoint script must exist in our repository so that Docker has something to execute.

⌨️ Activity: Add an entrypoint script and commit it to your branch

  1. As a part of this branch and pull request, create a file in the ./action-a/ directory titled entrypoint.sh
  2. Add the following content to the entrypoint.sh file:
    #!/bin/sh -l
    
    sh -c "echo $*"
  3. Working locally, ensure the script is executable:
    chmod +x action-a/entrypoint.sh
  4. Stage and commit the changes
  5. Push the changes to GitHub

I'll respond when I detect a new commit on this branch.

@github-learning-lab
Copy link

Almost there! Your script is present, but it's not executable.

⌨️ Activity: Make your script executable

Assuming you've only worked on the web UI, and not locally until now, follow these instructions to make the script executable:

  1. Open your favorite shell
  2. Clone the repository:
    git clone https://github.com/krystof-k/hello-world-actions.git
    cd hello-world-actions
  3. Checkout to the branch in this pull request:
    git checkout first-action
  4. Make the script executable:
    chmod +x action-a/entrypoint.sh
  5. Stage and commit the change:
    git add action-a/entrypoint.sh
    git commit -m "make entrypoint script executable"
  6. Push the branch to GitHub:
    git push

When I detect your new commit, I'll respond in this pull request.

@github-learning-lab
Copy link

Nice work adding the entrypoint.sh script. This script will help define the action.

Next, we'll define a workflow that uses the GitHub Action.

Workflow Files

Workflows are defined in special files in the .github directory, named main.workflow.

Each workflow file is comprised of blocks, like workflow blocks and action blocks. For this example, we'll need one of each.

The workflow block

Workflow blocks execute anytime code is pushed to your repository, using the push event.

We'll break down each line of the workflow block in the next step.

Step 3: Add a workflow block to your workflow file

First, we'll add the workflow block. We'll add the action block in a later step.

⌨️ Activity: Add a workflow block to your workflow file and commit it to your branch

  1. As a part of this branch and pull request, create a directory titled .github
  2. In the new .github directory, create a file titled main.workflow
  3. Add the following content to the main.workflow file:
    workflow "New workflow" {
      on = "push"
      resolves = ["Hello World"]
    }
  4. Stage and commit the changes
  5. Push the changes to GitHub
Trouble pushing? Click here.

The main.workflow file cannot be edited using an integration. Try editing the file using the web interface, or your command line.

It is possible that you are using an integration (like GitHub Desktop or any other tool that authenticates as you and pushes on your behalf) if you receive a message like the one below:

To https://github.com/your-username/your-repo.git
 ! [remote rejected] your-branch -> your-branch (refusing to allow an integration to update main.workflow)
error: failed to push some refs to 'https://github.com/your-username/your-repo.git'


I'll respond when I detect a new commit on this branch.

@github-learning-lab
Copy link

Nice work! 🎉 You added a workflow block to your workflow file!

Here's what it means:

  • on = "push" indicates that your workflow block will execute anytime code is pushed to your repository, using the push event.
  • resolves = ["Hello World"] selects the action to execute using the resolves attribute.

Next, we need to specify what action is going to be executed.

The action block

We've referenced the Hello World action, but it is not defined in the main.workflow file. This is why there's an error regarding the workflow.

We'll add the block now, and break it down in the next step.

Step 4: Add an action block to your workflow file

Let's add the expected action to the workflow.

⌨️ Activity: Add an action block to your workflow file and commit it to your branch

  1. As a part of this branch and pull request, edit .github/main.workflow to append the following content:
    action "Hello World" {
      uses = "./action-a"
      env = {
        MY_NAME = "Mona"
      }
      args = "\"Hello world, I'm $MY_NAME!\""
    }
  2. Stage and commit the changes
  3. Push the changes to GitHub
Trouble pushing?

The main.workflow file cannot be edited using an integration. Try editing the file using the web interface, or your command line.

It is possible that you are using an integration (like GitHub Desktop or any other tool that authenticates as you and pushes on your behalf) if you receive a message like the one below:

To https://github.com/your-username/your-repo.git
 ! [remote rejected] your-branch -> your-branch (refusing to allow an integration to update main.workflow)
error: failed to push some refs to 'https://github.com/your-username/your-repo.git'


I'll respond when I detect a new commit on this branch.

@github-learning-lab
Copy link

You added a workflow block! Here are some important details about why each part of the block exists and what each part does.

  • uses = "./action-a": the action block uses action-a by referencing the path to the action's directory, relative to your hello-world-actions repository.
  • env = { ... }: uses the env action attribute to create an environment variable that will be available to your action in the runtime environment. In this case, the environment variable is MY_NAME, and it is currently initialized to "Mona".
  • args = "\"Hello world, I'm $MY_NAME!\"": finally, you'll pass a string to the action in the args attribute. The args you pass are appended to the echo command in entrypoint.sh and run in a command shell. This allows you to use environment variables in the args attribute. See "ENTRYPOINT" for more about how the entrypoint.sh file works.

Your action is about to be triggered!

Your repository now contains everything it needs for the action to be defined (in the ./action-a/ folder) and everything it needs to be triggered (in the ./github/main.workflow file).

The action will run anytime a commit is recognized on the remote repository. Since you just pushed, let's wait for the workflow to be triggered. This might take a few minutes since it's the first time running in this repository.

Seeing your Action in Action

You can see the action status reported 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.

View an action's log

Step 5: Trigger the workflow

⌨️ Activity: See your action trigger the workflow

  1. You've done the work, now sit back and see your action trigger the workflow!

I will respond when I detect your action has run and reported a status.

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.

Note: This course will only work for members of the GitHub Actions public beta. If you're not in the GitHub Actions public beta, you won't receive a response from the action.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant