📖 Scenario: You are working on a small project and want to automate a simple task using GitHub Actions. This will help you run commands automatically whenever you push code to your repository.
🎯 Goal: Create a basic GitHub Actions workflow file that runs a simple command when code is pushed to the main branch.
📋 What You'll Learn
Create a YAML file for GitHub Actions workflow
Set the workflow to trigger on push to the main branch
Add a job that runs on the latest Ubuntu runner
Add a step to run a simple shell command
💡 Why This Matters
🌍 Real World
Automating tasks like testing, building, or deploying code whenever changes are pushed to a repository.
💼 Career
Understanding GitHub Actions is essential for DevOps roles to implement continuous integration and continuous deployment pipelines.
Progress0 / 4 steps
1
Create the workflow file
Create a file named .github/workflows/main.yml with the initial YAML structure starting with name: CI and on: push to trigger on any push.
Git
Hint
Start with the workflow name and the event trigger.
2
Specify the branch trigger
Modify the on: push section to trigger only when code is pushed to the main branch by adding branches: [main].
Git
Hint
Use the branches key under push to limit triggers.
3
Add a job to run on Ubuntu
Add a job named build that runs on ubuntu-latest using runs-on key.
Git
Hint
Jobs run on runners like Ubuntu. Use runs-on to set it.
4
Add a step to run a shell command
Inside the build job, add a steps section with one step that uses run: echo "Hello from GitHub Actions!".
Git
Hint
Steps are a list of commands or actions. Use - run: to run shell commands.
Practice
(1/5)
1. What is the main purpose of GitHub Actions in a repository?
easy
A. To automate tasks like testing and deployment when events happen
B. To store large files in the repository
C. To manage user permissions on the repository
D. To create branches automatically
Solution
Step 1: Understand GitHub Actions role
GitHub Actions automate workflows triggered by events such as code pushes or pull requests.
Step 2: Compare options with purpose
Options B, C, and D describe other GitHub features, not automation tasks.
Final Answer:
To automate tasks like testing and deployment when events happen -> Option A
Quick Check:
Automation = A [OK]
Hint: GitHub Actions = automation triggered by events [OK]
Common Mistakes:
Confusing GitHub Actions with file storage
Thinking it manages user permissions
Assuming it creates branches automatically
2. Which of the following is the correct location to place a GitHub Actions workflow file?
easy
A. .git/actions/
B. .github/workflows/
C. workflows/.github/
D. actions/workflows/
Solution
Step 1: Recall workflow file location
GitHub Actions workflows must be stored in the .github/workflows/ directory in the repository.
Step 2: Verify other options
Options B, C, and D do not match the required directory structure for workflows.
Final Answer:
.github/workflows/ -> Option B
Quick Check:
Workflow path = .github/workflows/ [OK]
Hint: Workflow YAML files go inside .github/workflows/ folder [OK]
Common Mistakes:
Placing workflow files outside .github/workflows/
Using incorrect folder names like .git or actions
Confusing workflows folder location
3. Given this workflow snippet, what will happen when code is pushed to the main branch?
name: Test Workflow
on:
push:
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
steps:
- run: echo "Build started"
medium
A. The workflow runs and prints 'Build started' on push to main
B. The workflow runs but does nothing on push to main
C. The workflow runs only on pull requests, not push
D. The workflow fails due to syntax error
Solution
Step 1: Analyze trigger event
The workflow triggers on push events to the main branch as specified under 'on: push: branches: - main'.
Step 2: Check job steps
The job named 'build' runs on ubuntu-latest and executes a step that runs the command echo "Build started".
Final Answer:
The workflow runs and prints 'Build started' on push to main -> Option A
Quick Check:
Push to main triggers echo output [OK]
Hint: Push to main triggers echo command in workflow [OK]
Common Mistakes:
Thinking workflow triggers on pull requests only
Assuming no output is printed
Believing there is a syntax error
4. Identify the error in this workflow YAML:
name: CI
on: push
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Run tests
run: pytest
- name: Deploy
run: deploy.sh
if: success()
medium
A. The 'if' condition syntax is incorrect; should be 'if: success()' without indentation
B. The 'steps' list is missing a dash before 'Deploy'
C. The 'if' condition is invalid; it should be 'if: ${{ success() }}'
D. The 'runs-on' key is misspelled
Solution
Step 1: Review 'if' condition syntax in GitHub Actions
GitHub Actions requires expressions inside ${{ }} for conditions, so 'if: success()' is invalid syntax.
Step 2: Validate other parts
'runs-on' is correctly spelled, and the steps list has proper dashes. Indentation is correct.
Final Answer:
The 'if' condition is invalid; it should be 'if: ${{ success() }}' -> Option C
Quick Check:
Conditions need ${{ }} syntax [OK]
Hint: Use ${{ }} for conditions in GitHub Actions [OK]
Common Mistakes:
Omitting ${{ }} around conditions
Misplacing dashes in steps list
Misspelling 'runs-on'
5. You want a GitHub Actions workflow that runs tests only when code is pushed to the 'develop' branch or when a pull request targets 'develop'. Which 'on' configuration is correct?
hard
A. on:
push:
branches:
- develop
pull_request:
branches:
- main
B. on:
push:
branches:
- main
pull_request:
branches:
- develop
C. on:
push:
branches:
- main
pull_request:
branches:
- main
D. on:
push:
branches:
- develop
pull_request:
branches:
- develop
Solution
Step 1: Understand event triggers needed
The workflow should trigger on push to 'develop' and on pull requests targeting 'develop'.
Step 2: Match branches in 'on' configuration
on:
push:
branches:
- develop
pull_request:
branches:
- develop correctly specifies both push and pull_request events with branches set to 'develop'. Other options mix 'main' and 'develop' incorrectly.
Final Answer:
on:
push:
branches:
- develop
pull_request:
branches:
- develop -> Option D
Quick Check:
Push and PR on develop branch = C [OK]
Hint: Match branch names exactly in push and pull_request triggers [OK]
Common Mistakes:
Mixing 'main' and 'develop' branches in triggers
Omitting pull_request event
Using incorrect indentation in YAML
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.